Browse Source

first commit

lei.chen@allpayx.com 4 years ago
commit
fb96717cdb
100 changed files with 4821 additions and 0 deletions
  1. 8 0
      .idea/.gitignore
  2. 18 0
      .idea/compiler.xml
  3. 6 0
      .idea/encodings.xml
  4. 36 0
      .idea/inspectionProfiles/Project_Default.xml
  5. 20 0
      .idea/jarRepositories.xml
  6. 14 0
      .idea/misc.xml
  7. 124 0
      .idea/uiDesigner.xml
  8. 1 0
      opt/file/report/20200919/A101-20200919-ChannelReconciliation.csv
  9. 2 0
      opt/file/report/20200919/A211-20200919-InstitutionSuspicious.csv
  10. 19 0
      opt/file/report/20200919/A212-20200919-ChannelSuspicious.csv
  11. 125 0
      pom.xml
  12. 2 0
      qr.iml
  13. 23 0
      src/main/java/com/qrservice/admin/QrServerApplication.java
  14. 48 0
      src/main/java/com/qrservice/admin/annotation/AIQuery.java
  15. 18 0
      src/main/java/com/qrservice/admin/annotation/GetUserInfo.java
  16. 26 0
      src/main/java/com/qrservice/admin/annotation/PermissionRequire.java
  17. 121 0
      src/main/java/com/qrservice/admin/aop/RestExceptionHandler.java
  18. 33 0
      src/main/java/com/qrservice/admin/config/OnlineMongoConfig.java
  19. 55 0
      src/main/java/com/qrservice/admin/config/ServiceProperties.java
  20. 33 0
      src/main/java/com/qrservice/admin/config/SettleMongoConfig.java
  21. 159 0
      src/main/java/com/qrservice/admin/config/SpringMongoConfig.java
  22. 165 0
      src/main/java/com/qrservice/admin/controller/CommonController.java
  23. 61 0
      src/main/java/com/qrservice/admin/controller/admin/LoginController.java
  24. 72 0
      src/main/java/com/qrservice/admin/controller/admin/UserController.java
  25. 92 0
      src/main/java/com/qrservice/admin/controller/channel/ChannelController.java
  26. 76 0
      src/main/java/com/qrservice/admin/controller/channel/ChannelSubController.java
  27. 118 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantController.java
  28. 69 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantFeeController.java
  29. 69 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantRouterController.java
  30. 91 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantStoreController.java
  31. 103 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantTerminalController.java
  32. 81 0
      src/main/java/com/qrservice/admin/controller/merchant/MerchantUserController.java
  33. 49 0
      src/main/java/com/qrservice/admin/controller/settle/ClearEventController.java
  34. 51 0
      src/main/java/com/qrservice/admin/controller/settle/ClearSceneController.java
  35. 67 0
      src/main/java/com/qrservice/admin/controller/settle/ReportController.java
  36. 74 0
      src/main/java/com/qrservice/admin/controller/settle/SettleTaskController.java
  37. 82 0
      src/main/java/com/qrservice/admin/controller/trans/TransRealController.java
  38. 81 0
      src/main/java/com/qrservice/admin/controller/trans/TransSettleController.java
  39. 105 0
      src/main/java/com/qrservice/admin/controller/usermanager/InstitutionUserController.java
  40. 79 0
      src/main/java/com/qrservice/admin/controller/usermanager/UserGroupController.java
  41. 54 0
      src/main/java/com/qrservice/admin/controller/usermanager/UserOperateController.java
  42. 64 0
      src/main/java/com/qrservice/admin/dao/BaseDao.java
  43. 220 0
      src/main/java/com/qrservice/admin/dao/impl/BaseDaoImpl.java
  44. 26 0
      src/main/java/com/qrservice/admin/dao/online/ChannelMerchantDao.java
  45. 21 0
      src/main/java/com/qrservice/admin/dao/online/ChannelSubMerchantDao.java
  46. 12 0
      src/main/java/com/qrservice/admin/dao/online/ConfigInfoDao.java
  47. 12 0
      src/main/java/com/qrservice/admin/dao/online/InstitutionInfoDao.java
  48. 14 0
      src/main/java/com/qrservice/admin/dao/online/MccDao.java
  49. 13 0
      src/main/java/com/qrservice/admin/dao/online/MerchantChargeFeeDao.java
  50. 13 0
      src/main/java/com/qrservice/admin/dao/online/MerchantInfoDao.java
  51. 12 0
      src/main/java/com/qrservice/admin/dao/online/MerchantRouterDao.java
  52. 12 0
      src/main/java/com/qrservice/admin/dao/online/MerchantStoreDao.java
  53. 13 0
      src/main/java/com/qrservice/admin/dao/online/MerchantTerminalDao.java
  54. 13 0
      src/main/java/com/qrservice/admin/dao/online/SpecificationInfoDao.java
  55. 13 0
      src/main/java/com/qrservice/admin/dao/online/SystemParameterDao.java
  56. 20 0
      src/main/java/com/qrservice/admin/dao/online/TransLogDao.java
  57. 12 0
      src/main/java/com/qrservice/admin/dao/settle/ChannelSettleLogHisDao.java
  58. 13 0
      src/main/java/com/qrservice/admin/dao/settle/ClearEventLogDao.java
  59. 13 0
      src/main/java/com/qrservice/admin/dao/settle/ClearSceneLogDao.java
  60. 13 0
      src/main/java/com/qrservice/admin/dao/settle/InstitutionUserDao.java
  61. 12 0
      src/main/java/com/qrservice/admin/dao/settle/MenuDao.java
  62. 12 0
      src/main/java/com/qrservice/admin/dao/settle/MerchantUserDao.java
  63. 13 0
      src/main/java/com/qrservice/admin/dao/settle/MgtFileInfDao.java
  64. 13 0
      src/main/java/com/qrservice/admin/dao/settle/PermissionGroupDao.java
  65. 13 0
      src/main/java/com/qrservice/admin/dao/settle/SettleTaskDao.java
  66. 12 0
      src/main/java/com/qrservice/admin/dao/settle/SettleTransLogHisDao.java
  67. 12 0
      src/main/java/com/qrservice/admin/dao/settle/UserGroupDao.java
  68. 13 0
      src/main/java/com/qrservice/admin/dao/settle/UserOperateLogDao.java
  69. 29 0
      src/main/java/com/qrservice/admin/exception/ChannelException.java
  70. 32 0
      src/main/java/com/qrservice/admin/exception/CheckException.java
  71. 26 0
      src/main/java/com/qrservice/admin/exception/FormalException.java
  72. 259 0
      src/main/java/com/qrservice/admin/filter/AccessLogFilter.java
  73. 83 0
      src/main/java/com/qrservice/admin/filter/ContentCachingRequestWrapper.java
  74. 14 0
      src/main/java/com/qrservice/admin/model/admin/LoginToken.java
  75. 21 0
      src/main/java/com/qrservice/admin/model/admin/UserInfo.java
  76. 46 0
      src/main/java/com/qrservice/admin/model/batch/ClearEventLog.java
  77. 66 0
      src/main/java/com/qrservice/admin/model/batch/ClearSceneLog.java
  78. 74 0
      src/main/java/com/qrservice/admin/model/batch/SettleTasks.java
  79. 98 0
      src/main/java/com/qrservice/admin/model/bussiness/ChannelMerchant.java
  80. 71 0
      src/main/java/com/qrservice/admin/model/bussiness/ChannelSubMerchant.java
  81. 25 0
      src/main/java/com/qrservice/admin/model/bussiness/ConfigInfo.java
  82. 79 0
      src/main/java/com/qrservice/admin/model/bussiness/InstitutionInfo.java
  83. 32 0
      src/main/java/com/qrservice/admin/model/bussiness/Mcc.java
  84. 50 0
      src/main/java/com/qrservice/admin/model/bussiness/MerchantChargeFee.java
  85. 191 0
      src/main/java/com/qrservice/admin/model/bussiness/MerchantInfo.java
  86. 74 0
      src/main/java/com/qrservice/admin/model/bussiness/MerchantRouter.java
  87. 48 0
      src/main/java/com/qrservice/admin/model/bussiness/MerchantStore.java
  88. 80 0
      src/main/java/com/qrservice/admin/model/bussiness/MerchantTerminal.java
  89. 36 0
      src/main/java/com/qrservice/admin/model/bussiness/SpecificationInfo.java
  90. 24 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/Address.java
  91. 16 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/Amount.java
  92. 29 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/BankAccount.java
  93. 29 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/CompanyName.java
  94. 26 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/Contact.java
  95. 29 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/ExchangeRate.java
  96. 20 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/Goods.java
  97. 16 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/ResponseCode.java
  98. 16 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/TransSettleCurrency.java
  99. 23 0
      src/main/java/com/qrservice/admin/model/bussiness/appendix/UserName.java
  100. 0 0
      src/main/java/com/qrservice/admin/model/dto/ConfigInfoDTO.java

+ 8 - 0
.idea/.gitignore

@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 18 - 0
.idea/compiler.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="qr" />
+      </profile>
+    </annotationProcessing>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="qr" options="-parameters" />
+    </option>
+  </component>
+</project>

+ 6 - 0
.idea/encodings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+  </component>
+</project>

+ 36 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,36 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="TOP_LEVEL_CLASS_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="INNER_CLASS_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="METHOD_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
+        </value>
+      </option>
+      <option name="FIELD_OPTIONS">
+        <value>
+          <option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
+          <option name="REQUIRED_TAGS" value="" />
+        </value>
+      </option>
+      <option name="IGNORE_DEPRECATED" value="false" />
+      <option name="IGNORE_JAVADOC_PERIOD" value="true" />
+      <option name="IGNORE_DUPLICATED_THROWS" value="false" />
+      <option name="IGNORE_POINT_TO_ITSELF" value="false" />
+      <option name="myAdditionalJavadocTags" value="date" />
+    </inspection_tool>
+  </profile>
+</component>

+ 20 - 0
.idea/jarRepositories.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="http://maven.aliyun.com/nexus/content/repositories/central/" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>

+ 14 - 0
.idea/misc.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 124 - 0
.idea/uiDesigner.xml

@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>

+ 1 - 0
opt/file/report/20200919/A101-20200919-ChannelReconciliation.csv

@@ -0,0 +1 @@
+Clear Date,Channel Merchant ID,Channel Merchant Name,Transaction Count,Channel Settlement Currency,Channel Transfer Amount,Channel Settlement Amount,Merchant Settlement Currency ,Merchant Transfer Amount,Merchant Settlement Amount

+ 2 - 0
opt/file/report/20200919/A211-20200919-InstitutionSuspicious.csv

@@ -0,0 +1,2 @@
+Institution Code ,Transaction ID,Cutoff Date,Merchant ID,Merchant Name,Store ID,Terminal Id,Order ID,Brand,Order Num,Create Time,Payment Time,Scene,Purchase Type,Order Currency,Order Amount,Channel Order Num,Channel Order ID
+10001,5f61dfec76f998847b95d997,20200916,100010051,dada,S0001,10015,7009166425167608,ALP,,2020/09/16 17:50:36,2020/09/16 17:50:41,USER_PERSENT,PURC,EUR,0.01,5f61dfec76f998847b95d998,20200916194010800100190680234131641

+ 19 - 0
opt/file/report/20200919/A212-20200919-ChannelSuspicious.csv

@@ -0,0 +1,19 @@
+Institution Code,Channel Settle Date,Payment Time,Reconciliation ID,Channel TransID,Channel Merchant ID,Channel SubMerchant ID,Terminal ID,Brand,Transaction Type,Order Currency,Order Amount
+10001,20200919,2020/09/18 16:59:09,0bf3aa2f17fab49c,4200000770202009180087467648,007,272791120,,WXP,REFD,HKD,-40.00
+10001,20200919,2020/09/18 18:03:27,163b7271b1ac5b18,4200000755202009186231262619,007,403781374,,WXP,PURC,HKD,100.00
+10001,20200919,2018/12/25 09:30:00,20190326L648423000404,2018122519074101000000000112612,385XSM66SG05M301,,,ALP,PURC,KRW,18000
+10001,20200919,2018/12/25 09:30:00,20190326L648423000405,2018122519074102000000000041675,385XSM66SG05M301,,,ALP,REFD,KRW,-9000
+10001,20200919,2020/09/18 16:02:27,2c5e90b95eefb97e,4200000772202009180840979740,007,403781374,,WXP,PURC,HKD,90.33
+10001,20200920,2020/09/19 18:16:18,2e732094bcd38f63,4200000764202009192833891628,007,403781374,,WXP,PURC,HKD,100.00
+10001,20200919,2020/09/18 17:39:41,2ff153acc9c66d84,4200000768202009189855446965,007,403781374,,WXP,PURC,HKD,82.12
+10001,20200920,2020/09/19 20:29:14,50e6c67c4e83b318,4200000765202009184230440689,007,403781374,,WXP,REFD,HKD,-73.00
+10001,20200920,2020/09/19 21:28:44,5826235f6049f7e0,4200000764202009199880129422,007,403781374,,WXP,PURC,HKD,130.00
+10001,20200919,2020/09/18 17:10:16,68056a5b5c9c759e,4200000763202009180928232711,007,403781374,,WXP,PURC,HKD,71.21
+10001,20200919,2020/09/18 11:24:56,84a1f41dd51ddd6a,4200000769202009186847735584,007,272791120,,WXP,REFD,HKD,-30.00
+10001,20200919,2020/09/18 17:54:25,88b8fc8e30f1062f,4200000765202009184230440689,007,403781374,,WXP,PURC,HKD,80.32
+10001,20200919,2020/09/18 11:44:35,90476ed765c6d389,4200000773202009180545839354,007,272791120,,WXP,PURC,HKD,0.10
+10001,20200919,2020/09/18 11:18:24,9f4b176b024a26cc,4200000770202009180087467648,007,272791120,,WXP,PURC,HKD,40.00
+10001,20200919,2020/09/18 15:49:50,Q3Y9EdpqRXRbnk99,4200000770202009092228976758,007,227727434,,WXP,REFD,HKD,-59.00
+10001,20200919,2020/09/18 18:05:51,d5c58ebe5aeffb11,4200000767202009181765131024,007,403781374,,WXP,PURC,HKD,100.00
+10001,20200919,2020/09/18 11:21:03,dca4210281d63e0a,4200000769202009186847735584,007,272791120,,WXP,PURC,HKD,30.00
+10001,20200919,2020/09/18 15:43:28,sfZvg4XNfaHzZ35I,4200000763202009188763212464,007,227727434,,WXP,PURC,HKD,2764.00

+ 125 - 0
pom.xml

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>qr</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.0.4.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+
+    <properties>
+        <java.version>1.8</java.version>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.72</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>2.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-crypto</artifactId>
+            <version>4.4.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.0.4</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>29.0-jre</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.nimbusds</groupId>
+            <artifactId>nimbus-jose-jwt</artifactId>
+            <version>4.23</version>
+        </dependency>
+    </dependencies>
+
+
+    <build>
+        <finalName>qrmp</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>com.qrservice.admin.QrServerApplication</mainClass>
+                    <includeSystemScope>true</includeSystemScope>
+                    <!-- 如果没有该配置,devtools不会生效 -->
+                    <fork>true</fork>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <!--可以把依赖的包都打包到生成的Jar包中-->
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+
+    </build>
+</project>

+ 2 - 0
qr.iml

@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4" />

+ 23 - 0
src/main/java/com/qrservice/admin/QrServerApplication.java

@@ -0,0 +1,23 @@
+package com.qrservice.admin;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
+import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/7 10:09
+ */
+@RestController
+@SpringBootApplication(scanBasePackages = {"com.qrservice.admin"},exclude =
+        {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
+public class QrServerApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(com.qrservice.admin.QrServerApplication.class, args);
+    }
+
+}

+ 48 - 0
src/main/java/com/qrservice/admin/annotation/AIQuery.java

@@ -0,0 +1,48 @@
+package com.qrservice.admin.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/8/13 14:25
+ * @Version : V0.0.1
+ */
+@Target(value = {ElementType.FIELD,ElementType.PARAMETER})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface AIQuery {
+
+    /**  基本对象的属性名 */
+    String propName() default "";
+    /**  2017/8/7 查询方式 */
+    Type type() default Type.EQUAL;
+
+    String[] alias() default {};
+
+    enum Type {
+        /** jie 2019/6/4 相等 */
+        EQUAL
+        /* 2017/8/7 大于等于 */
+        , GREATER_THAN
+        /*  2017/8/7 小于等于 */
+        , LESS_THAN
+        /* 2017/8/7 中模糊查询 */
+        , INNER_LIKE
+        /* 2017/8/7 大于 */
+        , GREATER_THAN_NQ
+        /* 2017/8/7 小于 */
+        , LESS_THAN_NQ
+        /* 2019/6/4 包含 */
+        , IN
+        /* 2019/6/4 包含 */
+        , GREATER_THAN_AND_LESS_THAN
+        /* 或者*/
+        ,OR
+    }
+
+
+}
+

+ 18 - 0
src/main/java/com/qrservice/admin/annotation/GetUserInfo.java

@@ -0,0 +1,18 @@
+package com.qrservice.admin.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/8/13 14:25
+ * @Version : V0.0.1
+ */
+@Target(value = ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface GetUserInfo {
+}
+

+ 26 - 0
src/main/java/com/qrservice/admin/annotation/PermissionRequire.java

@@ -0,0 +1,26 @@
+package com.qrservice.admin.annotation;
+
+import org.springframework.core.annotation.AliasFor;
+
+import java.lang.annotation.*;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/8/19 09:57
+ * @Version : V0.0.1
+ */
+@Target(value = {
+        ElementType.METHOD
+})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface PermissionRequire {
+
+    @AliasFor("functionId")
+    String value() default "";
+
+    /**  功能ID */
+    @AliasFor("value")
+    String functionId() default "";
+}

+ 121 - 0
src/main/java/com/qrservice/admin/aop/RestExceptionHandler.java

@@ -0,0 +1,121 @@
+package com.qrservice.admin.aop;
+
+import com.alibaba.fastjson.JSON;
+import com.qrservice.admin.dao.settle.InstitutionUserDao;
+import com.qrservice.admin.dao.settle.UserOperateLogDao;
+import com.qrservice.admin.exception.CheckException;
+import com.qrservice.admin.exception.FormalException;
+import com.qrservice.admin.model.manage.InstitutionUser;
+import com.qrservice.admin.model.manage.UserOperateLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.util.jwtUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.BindException;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author kang.wang
+ * @date 2019/12/19
+ **/
+@ControllerAdvice(annotations = {RestController.class, Controller.class})
+@ResponseBody
+@Slf4j
+public class RestExceptionHandler {
+
+
+	@Autowired
+	private UserOperateLogDao dao;
+
+	@Autowired
+	private InstitutionUserDao userDao;
+
+	@ExceptionHandler(Exception.class)
+	@ResponseBody
+	public ResultVO<String> exceptionHandler(Exception e) {
+		ResultVO<String> vo = new ResultVO<>();
+		vo.setStatus(ResultVO.FAIL);
+		if (e instanceof CheckException) {
+			if(e.getCause()!=null){
+				vo.setTitle(e.getCause().getMessage());
+			}
+			vo.setMessage(e.getMessage());
+			return vo;
+		}
+		if (e instanceof FormalException) {
+			vo.setMessage(e.getMessage());
+			return vo;
+		}
+		log.error("未知异常");
+		log.error(e.toString());
+		log.error(Arrays.toString(e.getStackTrace()));
+		e.printStackTrace();
+		vo.setMessage("系统异常,请稍后重试!");
+		return vo;
+	}
+
+	@ExceptionHandler(BindException.class)
+	public ResultVO<String> handleBindException(BindException cve) {
+		List<ObjectError> allErrors = cve.getAllErrors();
+		String defaultMessage = null;
+		for (ObjectError constraintViolation : allErrors) {
+			defaultMessage = constraintViolation.getDefaultMessage();
+		}
+		ResultVO<String> vo = new ResultVO<>();
+		vo.setStatus(ResultVO.FAIL);
+		vo.setMessage(defaultMessage);
+		log.debug(defaultMessage);
+		return vo;
+	}
+
+	@ExceptionHandler(ConstraintViolationException.class)
+	public ResultVO<String> handleConstraintViolationException(ConstraintViolationException cve) {
+		Set<ConstraintViolation<?>> cves = cve.getConstraintViolations();
+		String defaultMessage = null;
+		for (ConstraintViolation<?> constraintViolation : cves) {
+			defaultMessage = constraintViolation.getMessage();
+		}
+		ResultVO<String> vo = new ResultVO<>();
+		vo.setStatus(ResultVO.FAIL);
+		vo.setMessage(defaultMessage);
+		log.debug(defaultMessage);
+		return vo;
+	}
+
+
+	@ExceptionHandler(value = MethodArgumentNotValidException.class)
+	public Object methodArgumentNotValidHandler(HttpServletRequest request,
+												MethodArgumentNotValidException exception) throws Exception {
+		ResultVO<Object> resultVO = new ResultVO<>();
+		for (FieldError error : exception.getBindingResult().getFieldErrors()) {
+			String code = error.getCode();
+			if (code.equals("NotNull") || code.equals("NotBlank")) {
+				resultVO.setMessage("Missing parameter:" + error.getField());
+				break;
+			} else {
+				resultVO.setMessage(error.getDefaultMessage());
+			}
+		}
+		resultVO.setStatus(ResultVO.FAIL);
+		return resultVO;
+	}
+}

+ 33 - 0
src/main/java/com/qrservice/admin/config/OnlineMongoConfig.java

@@ -0,0 +1,33 @@
+package com.qrservice.admin.config;
+
+
+import com.qrservice.admin.dao.impl.BaseDaoImpl;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
+
+/**
+ * @Description : 连接onlineDB的mongoTemplate
+ * @Author : Simon.shi
+ * @Date : 2018/9/1917:02
+ * @Version : V0.0.1
+ */
+@Configuration
+@ConfigurationProperties(prefix = "spring.data.mongodb.online")
+@EnableMongoRepositories(basePackages = "com.qrservice.admin.dao.online",
+        mongoTemplateRef = "onlineMongo",
+        repositoryBaseClass = BaseDaoImpl.class)
+public class OnlineMongoConfig extends SpringMongoConfig {
+
+    @Bean(name = "onlineMongo")
+    @Override
+    public MongoTemplate getMongoTemplate() throws Exception {
+        return new MongoTemplate(mongoDbFactory(),mappingMongoConverter());
+    }
+
+
+
+
+}

+ 55 - 0
src/main/java/com/qrservice/admin/config/ServiceProperties.java

@@ -0,0 +1,55 @@
+package com.qrservice.admin.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/12 15:10
+ */
+@Configuration
+@ConfigurationProperties(prefix = "service")
+@Data
+public class ServiceProperties {
+
+    private String key;
+
+    private String statusInitial;
+
+    private String statusNormal;
+
+    private String statusClose;
+
+    private String statusLock;
+
+    private String statusDelete;
+
+    private String businessTypeOff;
+
+    private String businessTypeOn;
+
+    private String terminalCode;
+
+    private String storeCode;
+
+    private String pwd;
+
+    private String userName;
+
+    private String merchantUser;
+
+    private String storeUser;
+
+    private String refundUrl;
+
+    private String pwdTime;
+
+    private String loginNumber;
+
+    private List<String> currencyList;
+
+}

+ 33 - 0
src/main/java/com/qrservice/admin/config/SettleMongoConfig.java

@@ -0,0 +1,33 @@
+package com.qrservice.admin.config;
+
+
+import com.qrservice.admin.dao.impl.BaseDaoImpl;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
+
+/**
+ * @Description : 连接onlineDB的mongoTemplate
+ * @Author : Simon.shi
+ * @Date : 2018/9/1917:02
+ * @Version : V0.0.1
+ */
+@Configuration
+@ConfigurationProperties(prefix = "spring.data.mongodb.settle")
+@EnableMongoRepositories(basePackages = "com.qrservice.admin.dao.settle",
+        mongoTemplateRef = "settleMongo",
+        repositoryBaseClass = BaseDaoImpl.class)
+public class SettleMongoConfig extends SpringMongoConfig {
+
+    @Bean(name = "settleMongo")
+    @Override
+    public MongoTemplate getMongoTemplate() throws Exception {
+        return new MongoTemplate(mongoDbFactory(),mappingMongoConverter());
+    }
+
+
+
+
+}

+ 159 - 0
src/main/java/com/qrservice/admin/config/SpringMongoConfig.java

@@ -0,0 +1,159 @@
+package com.qrservice.admin.config;
+
+import com.mongodb.MongoClientURI;
+import lombok.Data;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.convert.converter.Converter;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
+import org.springframework.data.annotation.Persistent;
+import org.springframework.data.mapping.model.CamelCaseAbbreviatingFieldNamingStrategy;
+import org.springframework.data.mapping.model.FieldNamingStrategy;
+import org.springframework.data.mapping.model.PropertyNameFieldNamingStrategy;
+import org.springframework.data.mongodb.MongoDbFactory;
+import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
+import org.springframework.data.mongodb.core.convert.*;
+import org.springframework.data.mongodb.core.mapping.Document;
+import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
+import org.springframework.data.mongodb.core.convert.MongoCustomConversions;
+import java.util.*;
+
+/**
+ * Created by skf
+ * Date 2018/5/16.
+ */
+@Configuration
+@Data
+public abstract class SpringMongoConfig {
+
+    private String uri;
+
+    @Bean
+    public MappingMongoConverter mappingMongoConverter() throws Exception {
+        DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
+        MappingMongoConverter mappingConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext());
+        try {
+            mappingConverter.setCustomConversions(customConversions());
+        }
+        catch (NoSuchBeanDefinitionException ignore) {}
+
+        // Don't save _class to mongo
+        mappingConverter.setTypeMapper(new DefaultMongoTypeMapper(null));
+       // mappingConverter.setCustomConversions();可以配置其他转换器
+        return mappingConverter;
+    }
+
+
+    abstract public MongoTemplate getMongoTemplate() throws Exception;
+
+    public MongoDbFactory mongoDbFactory() throws Exception {
+
+        return new SimpleMongoDbFactory(new MongoClientURI(uri));
+    }
+
+    /**
+     * Creates a {@link MongoMappingContext} equipped with entity classes scanned from the mapping base package.
+     *
+     * @see #getMappingBasePackage()
+     * @return
+     * @throws ClassNotFoundException
+     */
+    @Bean
+    public MongoMappingContext mongoMappingContext() throws ClassNotFoundException {
+
+        MongoMappingContext mappingContext = new MongoMappingContext();
+        mappingContext.setInitialEntitySet(getInitialEntitySet());
+        mappingContext.setSimpleTypeHolder(customConversions().getSimpleTypeHolder());
+        mappingContext.setFieldNamingStrategy(fieldNamingStrategy());
+
+        return mappingContext;
+    }
+
+    /**
+     * Scans the mapping base package for classes annotated with {@link Document}.
+     *
+     * @see #getMappingBasePackage()
+     * @return
+     * @throws ClassNotFoundException
+     */
+    protected Set<Class<?>> getInitialEntitySet() throws ClassNotFoundException {
+
+        String basePackage = getMappingBasePackage();
+        Set<Class<?>> initialEntitySet = new HashSet<Class<?>>();
+
+        if (StringUtils.hasText(basePackage)) {
+            ClassPathScanningCandidateComponentProvider componentProvider = new ClassPathScanningCandidateComponentProvider(
+                    false);
+            componentProvider.addIncludeFilter(new AnnotationTypeFilter(Document.class));
+            componentProvider.addIncludeFilter(new AnnotationTypeFilter(Persistent.class));
+
+            for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
+                initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(),
+                        AbstractMongoConfiguration.class.getClassLoader()));
+            }
+        }
+
+        return initialEntitySet;
+    }
+
+    /**
+     * Return the base package to scan for mapped {@link Document}s. Will return the package name of the configuration
+     * class' (the concrete class, not this one here) by default. So if you have a {@code com.acme.AppConfig} extending
+     * {@link AbstractMongoConfiguration} the base package will be considered {@code com.acme} unless the method is
+     * overriden to implement alternate behaviour.
+     *
+     * @return the base package to scan for mapped {@link Document} classes or {@literal null} to not enable scanning for
+     *         entities.
+     */
+    protected String getMappingBasePackage() {
+
+        Package mappingBasePackage = getClass().getPackage();
+        return mappingBasePackage == null ? null : mappingBasePackage.getName();
+    }
+
+    /**
+     * Register custom {@link Converter}s in a {@link CustomConversions} object if required. These
+     * {@link CustomConversions} will be registered with the {@link #mappingMongoConverter()} and
+     * {@link #mongoMappingContext()}. Returns an empty {@link CustomConversions} instance by default.
+     *
+     * @return must not be {@literal null}.
+     */
+    @Bean
+    public MongoCustomConversions customConversions() {
+        return new MongoCustomConversions(Collections.emptyList());
+    }
+
+    /**
+     * Configures a {@link FieldNamingStrategy} on the {@link MongoMappingContext} instance created.
+     *
+     * @return
+     * @since 1.5
+     */
+    protected FieldNamingStrategy fieldNamingStrategy() {
+        return abbreviateFieldNames() ? new CamelCaseAbbreviatingFieldNamingStrategy()
+                : PropertyNameFieldNamingStrategy.INSTANCE;
+    }
+
+    /**
+     * Configures whether to abbreviate field names for domain objects by configuring a
+     * {@link CamelCaseAbbreviatingFieldNamingStrategy} on the {@link MongoMappingContext} instance created. For advanced
+     * customization needs, consider overriding {@link #mappingMongoConverter()}.
+     *
+     * @return
+     */
+    protected boolean abbreviateFieldNames() {
+        return false;
+    }
+
+
+
+
+}

+ 165 - 0
src/main/java/com/qrservice/admin/controller/CommonController.java

@@ -0,0 +1,165 @@
+package com.qrservice.admin.controller;
+
+import com.qrservice.admin.model.bussiness.ConfigInfo;
+import com.qrservice.admin.model.bussiness.Mcc;
+import com.qrservice.admin.model.bussiness.SpecificationInfo;
+import com.qrservice.admin.model.dto.ConfigInfoDTO;
+import com.qrservice.admin.model.dto.channel.ChannelMerchantDto;
+import com.qrservice.admin.model.dto.channel.ChannelSubMerchantDto;
+import com.qrservice.admin.model.manage.PermissionGroup;
+import com.qrservice.admin.model.manage.UserGroup;
+import com.qrservice.admin.model.param.CommonInfo;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.CommonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/14 16:42
+ */
+@RestController
+@RequestMapping("common")
+@Slf4j
+@CrossOrigin
+public class CommonController {
+
+
+    private final CommonService service;
+
+    @Autowired
+    public CommonController(CommonService service) {
+        this.service = service;
+    }
+
+    /**
+     * 查询所有商户ID
+     * @return
+     */
+    @RequestMapping(value = "findMid",method = RequestMethod.GET)
+    public ResultVO findMid(HttpServletRequest request){
+        CommonInfo info=service.findMid(request);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+
+    /**
+     * 查询所有商户ID
+     * @return
+     */
+    @RequestMapping(value = "findSid",method = RequestMethod.GET)
+    public ResultVO findSid(String merchantId){
+        CommonInfo info=service.findSid(merchantId);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+    /**
+     * 参数分别对应 币种currency  国家 country
+     * @param dto
+     * @return
+     */
+    @RequestMapping(value = "configInfos",method = RequestMethod.GET)
+    public ResultVO configInfos(ConfigInfoDTO dto){
+        ConfigInfo info = service.configInfos(dto);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+    /**
+     * 获取mcc列表
+     * @return
+     */
+    @RequestMapping(value = "mccs",method = RequestMethod.GET)
+    public ResultVO mccs(){
+        List<Mcc> info=service.mccs();
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+
+    /**
+     * 获取渠道接口信息列表
+     * @return
+     */
+    @RequestMapping(value = "specificationInfo",method = RequestMethod.GET)
+    public ResultVO specificationInfo(){
+        List<SpecificationInfo> info=service.specificationInfo();
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+
+    /**
+     * 获取渠道商户信息列表
+     * @return
+     */
+    @RequestMapping(value = "channelMerchant",method = RequestMethod.GET)
+    public ResultVO channelMerchant(HttpServletRequest request) throws Exception {
+        List<ChannelMerchantDto> info=service.channelMerchant(request);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+
+    /**
+     * 获取渠道子商户信息列表
+     * @return
+     */
+    @RequestMapping(value = "channelSubMerchant",method = RequestMethod.GET)
+    public ResultVO channelSubMerchant(String specification) {
+        List<ChannelSubMerchantDto> info=service.channelSubMerchant(specification);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+    /**
+     * 查询商户支持的币种列表
+     * @return
+     */
+    @RequestMapping(value = "findCy",method = RequestMethod.GET)
+    public ResultVO findCy(String merchantId) {
+        List<String> info=service.findCy(merchantId);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+    /**
+     * 查询用户组
+     * @return
+     */
+    @RequestMapping(value = "findGp",method = RequestMethod.GET)
+    public ResultVO findGp(HttpServletRequest request) {
+        List<UserGroup> info=service.findGp(request);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+
+
+    /**
+     * 查询权限组
+     * @return
+     */
+    @RequestMapping(value = "findPgp",method = RequestMethod.GET)
+    public ResultVO findPgp(HttpServletRequest request) {
+        List<PermissionGroup> info=service.findPgp(request);
+        ResultVO vo = new ResultVO();
+        vo.setData(info);
+        return vo;
+    }
+}

+ 61 - 0
src/main/java/com/qrservice/admin/controller/admin/LoginController.java

@@ -0,0 +1,61 @@
+package com.qrservice.admin.controller.admin;
+
+import com.qrservice.admin.model.admin.LoginToken;
+import com.qrservice.admin.model.admin.UserInfo;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/7/30 17:49
+ */
+@RestController
+@CrossOrigin
+public class LoginController {
+
+    private UserService userService;
+
+    @Autowired
+    public LoginController(UserService userService ){
+        this.userService = userService;
+    }
+
+
+    /**
+     * 用户登录
+     *
+     * @param dto
+     * @return
+     */
+    @RequestMapping(value = "/admin/login", method = RequestMethod.POST)
+    public ResultVO login(@RequestBody @Valid UserInfo dto) {
+        LoginToken token = userService.Login(dto);
+        ResultVO vo = new ResultVO();
+        vo.setMessage("登录成功");
+        vo.setData(token);
+        vo.setTitle("InstitutionCode user "+ dto.getUsername()+" login");
+        return vo;
+    }
+
+    /**
+     * 用户登录退出
+     *
+     * @return
+     */
+    @RequestMapping(value = "/admin/loginOut", method = RequestMethod.GET)
+    public ResultVO loginOut(HttpServletRequest request,String token) {
+        String title = userService.loginOut(request,token);
+        ResultVO vo = new ResultVO();
+        vo.setMessage("登出成功");
+        vo.setTitle(title);
+        return vo;
+    }
+
+}

+ 72 - 0
src/main/java/com/qrservice/admin/controller/admin/UserController.java

@@ -0,0 +1,72 @@
+package com.qrservice.admin.controller.admin;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/7 18:33
+ */
+
+import com.qrservice.admin.model.admin.LoginToken;
+import com.qrservice.admin.model.admin.UserInfo;
+import com.qrservice.admin.model.manage.InstitutionUser;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/7/30 17:49
+ */
+@RestController
+@CrossOrigin
+public class UserController {
+
+    private UserService userService;
+
+    @Autowired
+    public UserController(UserService userService ){
+        this.userService = userService;
+    }
+
+    /**
+     * 获取用户信息
+     * @return
+     */
+    @RequestMapping(value = "/admin/getUserInfo", method = RequestMethod.GET)
+    public ResultVO getUserInfo(HttpServletRequest request) {
+        InstitutionUser user=userService.getUserInfo(request);
+        ResultVO vo = new ResultVO();
+        vo.setData(user);
+        return vo;
+    }
+
+
+    /**
+     * 获取菜单信息
+     * @return
+     */
+    @RequestMapping(value = "/admin/getMenuInfo", method = RequestMethod.GET)
+    public Object getMenuInfo(HttpServletRequest request) {
+        ResultVO vo = new ResultVO();
+        vo.setData(userService.getMenuInfo(request));
+        return vo;
+    }
+
+
+
+    /**
+     * 获取支持接口列表
+     * @return
+     */
+    @RequestMapping(value = "/admin/getSupportList", method = RequestMethod.GET)
+    public Object getSupportList(HttpServletRequest request) {
+        ResultVO vo = new ResultVO();
+        vo.setData(userService.getSupportList(request).toString());
+        return vo;
+    }
+}

+ 92 - 0
src/main/java/com/qrservice/admin/controller/channel/ChannelController.java

@@ -0,0 +1,92 @@
+package com.qrservice.admin.controller.channel;
+
+import com.qrservice.admin.model.bussiness.ChannelMerchant;
+import com.qrservice.admin.model.dto.channel.ChannelDto;
+import com.qrservice.admin.model.dto.channel.ChannelFdDto;
+import com.qrservice.admin.model.dto.channel.ChannelUpDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.ChannelService;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.text.ParseException;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/25 11:17
+ */
+@RestController
+@RequestMapping("channel/merchant/")
+@Slf4j
+@CrossOrigin
+public class ChannelController {
+
+    private final ChannelService service;
+
+    @Autowired
+    public ChannelController(ChannelService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增渠道商户信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addChannel(@Valid @RequestBody ChannelDto dto, HttpServletRequest request) throws Exception {
+        service.addChannel(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("ChannelMerchant "+dto.getChannelMerchantId()+"/"+dto.getChannelMerchantName()+" added");
+        return vo;
+    }
+
+
+    /**
+     * 修改渠道商户信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateChannel(@Valid @RequestBody ChannelUpDto dto) {
+        String title = service.updateChannel(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 查询渠道商户信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findChannel(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                 @Valid ChannelFdDto dto,HttpServletRequest request)  {
+        Page<ChannelMerchant> page=service.findChannel(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+    /**
+     * 查询渠道商户详细信息
+     * @return
+     */
+    @RequestMapping(value = "detail",method = RequestMethod.GET)
+    public ResultVO findChannelDetail(String channelMerchantPk){
+        ChannelMerchant merchant=service.findChannelDetail(channelMerchantPk);
+        ResultVO vo = new ResultVO();
+        vo.setData(merchant);
+        return vo;
+    }
+
+}

+ 76 - 0
src/main/java/com/qrservice/admin/controller/channel/ChannelSubController.java

@@ -0,0 +1,76 @@
+package com.qrservice.admin.controller.channel;
+
+import com.qrservice.admin.model.bussiness.ChannelSubMerchant;
+import com.qrservice.admin.model.dto.channel.*;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.ChannelSubService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.text.ParseException;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 10:18
+ */
+@RestController
+@RequestMapping("channel/sub/merchant/")
+@Slf4j
+@CrossOrigin
+public class ChannelSubController {
+
+    private final ChannelSubService service;
+
+    @Autowired
+    public ChannelSubController(ChannelSubService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增渠道子商户信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addChannelSub(@Valid @RequestBody ChannelSubDto dto) throws Exception {
+        service.addChannelSub(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("ChannelSubMerchant "+dto.getChannelSubMerchantId()+"/"+dto.getChannelSubMerchantName()+" added");
+        return vo;
+    }
+
+
+    /**
+     * 修改渠道子商户信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateChannelSub(@Valid @RequestBody ChannelSubUpDto dto) {
+        String title=service.updateChannelSub(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 查询渠道商户信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findChannelSub(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                   @Valid ChannelSubFdDto dto, HttpServletRequest request) {
+        Page<ChannelSubMerchant> page=service.findChannelSub(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+}

+ 118 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantController.java

@@ -0,0 +1,118 @@
+package com.qrservice.admin.controller.merchant;
+
+
+import com.qrservice.admin.model.bussiness.MerchantInfo;
+import com.qrservice.admin.model.dto.merchant.MerchantDto;
+import com.qrservice.admin.model.dto.merchant.MerchantInfoDto;
+import com.qrservice.admin.model.param.Merchant;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.servlet4preview.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.text.ParseException;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 15:33
+ */
+@RestController
+@RequestMapping("merchant")
+@Slf4j
+@CrossOrigin
+public class MerchantController {
+
+
+    private final MerchantService service;
+
+    @Autowired
+    public MerchantController(MerchantService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增商户信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchant(@Valid @RequestBody MerchantDto dto, HttpServletRequest request) throws Exception {
+        service.addMerchant(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("Merchant "+dto.getMerchantId()+"/"+dto.getMerchantName().getFullName()+" added");
+        return vo;
+    }
+
+
+    /**
+     * 查询商户信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findMerchant(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                 @Valid MerchantInfoDto dto,HttpServletRequest request) throws ParseException {
+        Page<MerchantInfo> page=service.findMerchant(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+    /**
+     * 查询商户单条详细信息
+     * @return
+     */
+    @RequestMapping(value = "detail",method = RequestMethod.GET)
+    public ResultVO findMerchantDetail(String merchantId) throws Exception {
+        Merchant merchant=service.findMerchantDetail(merchantId);
+        ResultVO vo = new ResultVO();
+        vo.setData(merchant);
+        return vo;
+    }
+
+
+
+    /**
+     * 修改商户信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchant(@Valid @RequestBody MerchantDto dto
+    ){
+        String title = service.updateMerchant(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 导出商户信息报表(机构号传值问题,前端待修改)
+     * @return
+     */
+    @RequestMapping(value = "export",method = RequestMethod.GET)
+    public void export(@Valid MerchantInfoDto dto, HttpServletResponse response) throws Exception {
+        service.export(dto,response);
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 69 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantFeeController.java

@@ -0,0 +1,69 @@
+package com.qrservice.admin.controller.merchant;
+
+import com.qrservice.admin.model.dto.merchant.MerchantFeeDto;
+import com.qrservice.admin.model.dto.merchant.MerchantFeeUpDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantFeeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/12 14:06
+ */
+@RestController
+@RequestMapping("merchant/fee")
+@Slf4j
+@CrossOrigin
+public class MerchantFeeController {
+
+
+    private final MerchantFeeService service;
+
+    @Autowired
+    public MerchantFeeController(MerchantFeeService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增商户费率信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchantFee(@Valid @RequestBody MerchantFeeDto dto) throws Exception {
+        service.addMerchantFee(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("Merchant change fee "+dto.getMerchantId()+"/"+dto.getBrand()+" added");
+        return vo;
+    }
+
+    /**
+     * 修改商户费率信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchantFee(@Valid @RequestBody MerchantFeeUpDto dto){
+        String title = service.updateMerchantFee(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 删除商户费率信息
+     * @return
+     */
+    @RequestMapping(value = "delete",method = RequestMethod.GET)
+    public ResultVO deleteMerchantFee(String merchantChargeFeePK){
+        String title =service.deleteMerchantFee(merchantChargeFeePK);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+}

+ 69 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantRouterController.java

@@ -0,0 +1,69 @@
+package com.qrservice.admin.controller.merchant;
+import com.qrservice.admin.model.dto.merchant.MerchantRouterDto;
+import com.qrservice.admin.model.dto.merchant.MerchantRouterUpDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantRouterService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/12 14:06
+ */
+@RestController
+@RequestMapping("merchant/router")
+@Slf4j
+@CrossOrigin
+public class MerchantRouterController {
+
+
+    private final MerchantRouterService service;
+
+    @Autowired
+    public MerchantRouterController(MerchantRouterService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增商户交易路由
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchantRouter(@Valid @RequestBody MerchantRouterDto dto) throws Exception {
+        service.addMerchantRouter(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("Merchant router "+dto.getMerchantId()+"/"+dto.getBrand()+" added");
+        return vo;
+    }
+
+
+    /**
+     * 修改商户交易路由
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchantRouter(@Valid @RequestBody MerchantRouterUpDto dto){
+        String title=service.updateMerchantRouter(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 删除商户交易路由
+     * @return
+     */
+    @RequestMapping(value = "delete",method = RequestMethod.GET)
+    public ResultVO deleteMerchantRouter(String merchantRouterPK){
+        String title=service.deleteMerchantRouter(merchantRouterPK);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+}

+ 91 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantStoreController.java

@@ -0,0 +1,91 @@
+package com.qrservice.admin.controller.merchant;
+
+import com.qrservice.admin.model.bussiness.MerchantStore;
+import com.qrservice.admin.model.dto.merchant.MerchantStoreDto;
+import com.qrservice.admin.model.dto.merchant.MerchantStoreFdDto;
+import com.qrservice.admin.model.dto.merchant.MerchantStoreUpDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantStoreService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.text.ParseException;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/14 14:21
+ */
+@RestController
+@RequestMapping("merchant/store")
+@Slf4j
+@CrossOrigin
+public class MerchantStoreController {
+
+
+    private final MerchantStoreService service;
+
+
+    @Autowired
+    public MerchantStoreController(MerchantStoreService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增门店信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchantStore(@Valid @RequestBody MerchantStoreDto dto) throws Exception {
+        service.addMerchantStore(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle("Merchant store "+dto.getMerchantId()+"/"+dto.getStoreName()+" added");
+        return vo;
+    }
+
+
+    /**
+     * 修改门店信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchantStore(@Valid @RequestBody MerchantStoreUpDto dto, HttpServletRequest request) throws Exception {
+        String title=service.updateMerchantStore(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 查询门店信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findMerchantStore(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                      MerchantStoreFdDto dto, HttpServletRequest request) throws ParseException {
+        Page<MerchantStore> page=service.findMerchantStore(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+    /**
+     * 导出门店信息
+     * @return
+     */
+    @RequestMapping(value = "export",method = RequestMethod.GET)
+    public void exportMerchantStore(MerchantStoreFdDto dto,HttpServletResponse response) throws Exception {
+        service.export(dto,response);
+    }
+
+}

+ 103 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantTerminalController.java

@@ -0,0 +1,103 @@
+package com.qrservice.admin.controller.merchant;
+
+import com.qrservice.admin.model.bussiness.MerchantTerminal;
+import com.qrservice.admin.model.dto.merchant.MerchantTerminalDto;
+import com.qrservice.admin.model.dto.merchant.MerchantTerminalFdDto;
+import com.qrservice.admin.model.dto.merchant.MerchantTerminalUpDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantTerminalService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.util.UUID;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/18 10:24
+ */
+@RestController
+@RequestMapping("merchant/terminal")
+@Slf4j
+@CrossOrigin
+public class MerchantTerminalController {
+
+    private final MerchantTerminalService service;
+
+    @Autowired
+    public MerchantTerminalController(MerchantTerminalService service) {
+        this.service = service;
+    }
+
+    /**
+     * 生成终端密码
+     * @return
+     */
+    @RequestMapping(value = "/pwd/get",method = RequestMethod.GET)
+    public ResultVO getMerchantTerminalPwd() {
+        String pwd = UUID.randomUUID().toString().replace("-", "").substring(0, 8);
+        ResultVO vo = new ResultVO();
+        vo.setData(pwd);
+        return vo;
+    }
+
+    /**
+     * 新增终端信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchantTerminal(@Valid @RequestBody MerchantTerminalDto dto) throws Exception {
+        String title=service.addMerchantTerminal(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+
+    /**
+     * 修改终端信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchantTerminal(@Valid @RequestBody MerchantTerminalUpDto dto) {
+        String title=service.updateMerchantTerminal(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+
+    /**
+     * 查询终端信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findMerchantTerminal(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                         MerchantTerminalFdDto dto, HttpServletRequest request) {
+        Page<MerchantTerminal> page=service.findMerchantTerminal(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+
+    /**
+     * 导出终端信息
+     * @return
+     */
+    @RequestMapping(value = "export",method = RequestMethod.GET)
+    public void exportMerchantTerminal(MerchantTerminalFdDto dto, HttpServletResponse response) throws Exception {
+        service.export(dto,response);
+    }
+}

+ 81 - 0
src/main/java/com/qrservice/admin/controller/merchant/MerchantUserController.java

@@ -0,0 +1,81 @@
+package com.qrservice.admin.controller.merchant;
+
+import com.qrservice.admin.model.dto.merchant.MerchantUserDto;
+import com.qrservice.admin.model.dto.merchant.MerchantUserFdDto;
+import com.qrservice.admin.model.dto.merchant.MerchantUserUpDto;
+import com.qrservice.admin.model.manage.MerchantUser;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.MerchantUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 10:00
+ */
+@RestController
+@RequestMapping("merchant/user")
+@Slf4j
+@CrossOrigin
+public class MerchantUserController {
+
+
+    private final MerchantUserService service;
+
+    @Autowired
+    public MerchantUserController(MerchantUserService service) {
+        this.service = service;
+    }
+
+    /**
+     * 新增用户信息
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addMerchantUser(@Valid @RequestBody MerchantUserDto dto) throws Exception {
+        String title=service.addMerchantUser(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+
+    /**
+     * 查询商户信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findMerchantUser(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                     @Valid MerchantUserFdDto dto, HttpServletRequest request)  {
+        Page<MerchantUser> page=service.findMerchantUser(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+
+    /**
+     * 修改商户信息
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateMerchantUser(@Valid @RequestBody MerchantUserUpDto dto
+    ){
+        String title=service.updateMerchantUser(dto);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+}

+ 49 - 0
src/main/java/com/qrservice/admin/controller/settle/ClearEventController.java

@@ -0,0 +1,49 @@
+package com.qrservice.admin.controller.settle;
+
+import com.qrservice.admin.model.batch.ClearEventLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.ClearEventService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 14:51
+ */
+@RestController
+@RequestMapping("/clear/event")
+@Slf4j
+@CrossOrigin
+public class ClearEventController {
+
+    private final ClearEventService service;
+
+    @Autowired
+    public ClearEventController(ClearEventService service) {
+        this.service = service;
+    }
+
+
+    /**
+     * 查询清分日志记录
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findClearEvent(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable, HttpServletRequest request){
+        Page<ClearEventLog> page = service.findClearEvent(pageable,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+}

+ 51 - 0
src/main/java/com/qrservice/admin/controller/settle/ClearSceneController.java

@@ -0,0 +1,51 @@
+package com.qrservice.admin.controller.settle;
+
+import com.qrservice.admin.model.batch.ClearSceneLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.ClearSceneService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 10:31
+ */
+@RestController
+@RequestMapping("/clear/scene")
+@Slf4j
+@CrossOrigin
+public class ClearSceneController {
+
+
+    private final ClearSceneService service;
+
+    @Autowired
+    public ClearSceneController(ClearSceneService service) {
+        this.service = service;
+    }
+
+
+
+    /**
+     * 查询清分场次监控记录
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findClearScene(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable, HttpServletRequest request){
+        Page<ClearSceneLog> page = service.findClearScene(pageable,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+}

+ 67 - 0
src/main/java/com/qrservice/admin/controller/settle/ReportController.java

@@ -0,0 +1,67 @@
+package com.qrservice.admin.controller.settle;
+
+
+import com.qrservice.admin.model.dto.settle.ReportInfoDto;
+import com.qrservice.admin.model.settletransaction.MgtFileInf;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.ReportInfService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Array;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/18 15:10
+ */
+@RestController
+@RequestMapping("/report/inf")
+@Slf4j
+@CrossOrigin
+public class ReportController {
+
+
+
+    private final ReportInfService service;
+
+    @Autowired
+    public ReportController(ReportInfService service) {
+        this.service = service;
+    }
+
+
+    /**
+     * 查询报表下载信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findReportInfo(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                   HttpServletRequest request,
+                                   ReportInfoDto dto){
+        Page<MgtFileInf> page = service.findReportInfo(pageable,request,dto);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+
+    /**
+     * 下载报表信息
+     * @return
+     */
+    @RequestMapping(value = "downLoad",method = RequestMethod.GET)
+    public void downLoadReportInfo(@RequestParam(value = "ids") List<String> ids,HttpServletRequest request, HttpServletResponse response){
+        service.downLoadReportInfo(ids,request,response);
+    }
+}

+ 74 - 0
src/main/java/com/qrservice/admin/controller/settle/SettleTaskController.java

@@ -0,0 +1,74 @@
+package com.qrservice.admin.controller.settle;
+
+import com.qrservice.admin.model.batch.SettleTasks;
+import com.qrservice.admin.model.dto.settle.SettleTaskAdDto;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.SettleTaskService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 9:31
+ */
+@RestController
+@RequestMapping("/settle/task")
+@Slf4j
+@CrossOrigin
+public class SettleTaskController {
+
+
+    private final SettleTaskService service;
+
+    @Autowired
+    public SettleTaskController(SettleTaskService service) {
+        this.service = service;
+    }
+
+
+
+    /**
+     * 查询清算处理记录
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findSettleTask(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable, HttpServletRequest request){
+        Page<SettleTasks> page = service.findSettleTask(pageable,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+    /**
+     * 新清算日处理
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addSettleTask(@RequestBody SettleTaskAdDto dto, HttpServletRequest request){
+        String title=service.addSettleTask(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 新清算日重新处理
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.GET)
+    public ResultVO updateSettleTask(String id, HttpServletRequest request){
+        String title=service.updateSettleTask(id,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+}

+ 82 - 0
src/main/java/com/qrservice/admin/controller/trans/TransRealController.java

@@ -0,0 +1,82 @@
+package com.qrservice.admin.controller.trans;
+
+import com.alibaba.fastjson.JSON;
+import com.qrservice.admin.model.dto.merchant.MerchantDto;
+import com.qrservice.admin.model.dto.merchant.MerchantInfoDto;
+import com.qrservice.admin.model.dto.trans.TransDto;
+import com.qrservice.admin.model.dto.trans.TransFdDto;
+import com.qrservice.admin.model.param.TransDetail;
+import com.qrservice.admin.model.transactions.TransLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.TransRealService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/27 14:49
+ */
+@RestController
+@RequestMapping("/trans/real")
+@Slf4j
+@CrossOrigin
+public class TransRealController {
+
+    private final TransRealService service;
+
+    @Autowired
+    public TransRealController(TransRealService service) {
+        this.service = service;
+    }
+
+
+    /**
+     * 查询实时交易信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findRealTrans(@PageableDefault( sort = { "orderTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                  @Valid TransFdDto dto, HttpServletRequest request) throws Exception {
+        Page<TransLog> page = service.findRealTrans(pageable, dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+    /**
+     * 查询实时交易详情
+     * @return
+     */
+    @RequestMapping(value = "detail",method = RequestMethod.GET)
+    public ResultVO findRealTransDetail(String orderId) throws Exception {
+        TransDetail detail=service.findRealTransDetail(orderId);
+        ResultVO vo = new ResultVO();
+        vo.setData(detail);
+        return vo;
+    }
+
+
+    /**
+     * 退款
+     * @return
+     */
+    @RequestMapping(value = "refund",method = RequestMethod.POST)
+    public ResultVO refund(@Valid @RequestBody TransDto dto) {
+        String response = service.refund(dto);
+        ResultVO vo = new ResultVO();
+        Map map = JSON.parseObject(response, Map.class);
+        vo.setMessage((String) map.get("message"));
+        vo.setStatus((String) map.get("status"));
+        return vo;
+    }
+}

+ 81 - 0
src/main/java/com/qrservice/admin/controller/trans/TransSettleController.java

@@ -0,0 +1,81 @@
+package com.qrservice.admin.controller.trans;
+
+import com.alibaba.fastjson.JSON;
+import com.qrservice.admin.model.dto.trans.TransDto;
+import com.qrservice.admin.model.dto.trans.TransFdDto;
+import com.qrservice.admin.model.param.TransDetail;
+import com.qrservice.admin.model.settletransaction.SettleTransLogHis;
+import com.qrservice.admin.model.transactions.TransLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.TransRealService;
+import com.qrservice.admin.service.TransSettleService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/31 10:05
+ */
+@RestController
+@RequestMapping("/trans/settle")
+@Slf4j
+@CrossOrigin
+public class TransSettleController {
+
+
+    private final TransSettleService service;
+
+    @Autowired
+    public TransSettleController(TransSettleService service) {
+        this.service = service;
+    }
+
+    /**
+     * 查询清算交易信息
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findSettleTrans(@PageableDefault( sort = { "orderTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                    @Valid TransFdDto dto, HttpServletRequest request) throws Exception {
+        Page<SettleTransLogHis> page = service.findSettleTrans(pageable, dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+    /**
+     * 查询实时交易详情
+     * @return
+     */
+    @RequestMapping(value = "detail",method = RequestMethod.GET)
+    public ResultVO findSettleTransDetail(String orderId) throws Exception {
+        TransDetail detail=service.findSettleTransDetail(orderId);
+        ResultVO vo = new ResultVO();
+        vo.setData(detail);
+        return vo;
+    }
+
+    /**
+     * 退款
+     * @return
+     */
+    @RequestMapping(value = "refund",method = RequestMethod.POST)
+    public ResultVO refund(@Valid @RequestBody TransDto dto) {
+        String response = service.refund(dto);
+        ResultVO vo = new ResultVO();
+        Map map = JSON.parseObject(response, Map.class);
+        vo.setMessage((String) map.get("message"));
+        vo.setStatus((String) map.get("status"));
+        return vo;
+    }
+}

+ 105 - 0
src/main/java/com/qrservice/admin/controller/usermanager/InstitutionUserController.java

@@ -0,0 +1,105 @@
+package com.qrservice.admin.controller.usermanager;
+
+import com.qrservice.admin.model.dto.sso.SsoPwdDto;
+import com.qrservice.admin.model.dto.sso.SsoUserAdDto;
+import com.qrservice.admin.model.dto.sso.SsoUserDto;
+import com.qrservice.admin.model.manage.InstitutionUser;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.SsoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/3 11:35
+ */
+@RestController
+@RequestMapping("sso/user")
+@Slf4j
+@CrossOrigin
+public class InstitutionUserController {
+
+
+
+    private final SsoService service;
+
+    @Autowired
+    public InstitutionUserController(SsoService service) {
+        this.service = service;
+    }
+
+
+
+    /**
+     * 添加机构用户记录
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addInstitutionUser(@Valid @RequestBody SsoUserAdDto dto, HttpServletRequest request){
+        String title =service.addInstitutionUser(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+    /**
+     * 查询机构用户记录
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findInstitutionUser(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                   SsoUserDto dto,
+                                   HttpServletRequest request){
+        Page<InstitutionUser> page = service.findInstitutionUser(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+    /**
+     * 解锁用户锁定状态
+     * @return
+     */
+    @RequestMapping(value = "unlock/update",method = RequestMethod.GET)
+    public ResultVO unlock(HttpServletRequest request,String userId){
+        String title=service.unlock(userId,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+    /**
+     * 重置用户密码
+     * @return
+     */
+    @RequestMapping(value = "/pwd/update",method = RequestMethod.POST)
+    public ResultVO updatePwd(HttpServletRequest request, @RequestBody SsoPwdDto dto){
+        service.updatePwd(dto,request);
+        return new ResultVO();
+    }
+
+    /**
+     * 修改用户权限组
+     * @return
+     */
+    @RequestMapping(value = "/group/update",method = RequestMethod.POST)
+    public ResultVO updateGroup(HttpServletRequest request, @RequestBody SsoPwdDto dto){
+        String title=service.updateGroup(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+
+}

+ 79 - 0
src/main/java/com/qrservice/admin/controller/usermanager/UserGroupController.java

@@ -0,0 +1,79 @@
+package com.qrservice.admin.controller.usermanager;
+
+import com.qrservice.admin.model.dto.sso.*;
+import com.qrservice.admin.model.manage.InstitutionUser;
+import com.qrservice.admin.model.manage.UserGroup;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.UserGroupService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+import java.text.ParseException;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/16 10:57
+ */
+@RestController
+@RequestMapping("sso/user/manager")
+@Slf4j
+@CrossOrigin
+public class UserGroupController {
+
+
+    private final UserGroupService service;
+
+    @Autowired
+    public UserGroupController(UserGroupService service) {
+        this.service = service;
+    }
+
+
+
+    /**
+     * 添加用户组记录
+     * @return
+     */
+    @RequestMapping(value = "add",method = RequestMethod.POST)
+    public ResultVO addUserGroup(@Valid @RequestBody UserGroupAdDto dto, HttpServletRequest request){
+        String title =service.addUserGroup(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+
+    /**
+     * 查询用户组记录
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findUserGroup(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                        UserGroupDto dto,
+                                        HttpServletRequest request) throws ParseException {
+        Page<UserGroup> page = service.findUserGroup(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+
+    /**
+     * 修改用户组
+     * @return
+     */
+    @RequestMapping(value = "update",method = RequestMethod.POST)
+    public ResultVO updateUserGroup(HttpServletRequest request, @RequestBody UserGroupUpDto dto){
+        String title=service.updateUserGroup(dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setTitle(title);
+        return vo;
+    }
+}

+ 54 - 0
src/main/java/com/qrservice/admin/controller/usermanager/UserOperateController.java

@@ -0,0 +1,54 @@
+package com.qrservice.admin.controller.usermanager;
+
+import com.qrservice.admin.model.dto.sso.UserOperateLogDto;
+import com.qrservice.admin.model.manage.UserOperateLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.service.UserOperateService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/9 17:44
+ */
+@RestController
+@RequestMapping("sso/user/log")
+@Slf4j
+@CrossOrigin
+public class UserOperateController {
+
+    private final UserOperateService service;
+
+    @Autowired
+    public UserOperateController(UserOperateService service) {
+        this.service = service;
+    }
+
+
+    /**
+     * 查询机构用户操作日志
+     * @return
+     */
+    @RequestMapping(value = "find",method = RequestMethod.GET)
+    public ResultVO findUserOperateLog(@PageableDefault( sort = { "createTime" }, direction = Sort.Direction.DESC) Pageable pageable,
+                                        UserOperateLogDto dto,
+                                        HttpServletRequest request) throws ParseException {
+        Page<UserOperateLog> page = service.findUserOperateLog(pageable,dto,request);
+        ResultVO vo = new ResultVO();
+        vo.setData(page);
+        return vo;
+    }
+
+}

+ 64 - 0
src/main/java/com/qrservice/admin/dao/BaseDao.java

@@ -0,0 +1,64 @@
+package com.qrservice.admin.dao;
+
+import org.bson.Document;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.mongodb.core.FindAndModifyOptions;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.repository.NoRepositoryBean;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2018/11/27 15:20
+ * @Version : V0.0.1
+ */
+@NoRepositoryBean
+public interface BaseDao<T, ID extends Serializable> extends MongoRepository<T,ID> {
+
+    PageImpl<T> findByPageAndSort(Pageable pageable, Query query);
+
+    List<String> distinct(String s, Document query);
+
+    List<String> distinct(String s, Query query);
+
+    List<T> findByCondition(Query query);
+
+    T findOne(Query query);
+
+    void saveObject(Object o);
+
+    T findAndModify(Query query, Update update);
+
+    T findAndModify(Query query, Update update, FindAndModifyOptions options);
+
+    long remove(Query query);
+
+    long updateMulti(Query query, Update update);
+
+    List<T> findByCondition(Document condition);
+
+    long updateFirst(Query query, Update update);
+
+    void saveAll(List<T> reconlist);
+
+    long count(Query query);
+
+    T findOneBySection(Query query, String... properties);
+
+    List<Document> findDocuments(Query query, String... properties);
+
+    List<Document> findDocuments(Query query);
+
+    Document findDocument(Query query, String... properties);
+
+    Document findDocument(Query query);
+
+    <Q> List<Q> aggregate(Aggregation aggregation, Class<Q> q);
+}

+ 220 - 0
src/main/java/com/qrservice/admin/dao/impl/BaseDaoImpl.java

@@ -0,0 +1,220 @@
+package com.qrservice.admin.dao.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.result.DeleteResult;
+import com.mongodb.client.result.UpdateResult;
+import com.qrservice.admin.dao.BaseDao;
+import org.bson.Document;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.mongodb.core.FindAndModifyOptions;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.query.BasicQuery;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
+import org.springframework.data.mongodb.repository.support.SimpleMongoRepository;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2018/11/27 15:22
+ * @Version : V0.0.1
+ */
+public class BaseDaoImpl<T, ID extends Serializable> extends SimpleMongoRepository<T, ID> implements BaseDao<T,ID> {
+
+    protected final MongoOperations mongoTemplate;
+
+    protected final MongoEntityInformation<T, ID> entityInformation;
+
+    private Class<T> clazz;
+
+    public BaseDaoImpl(MongoEntityInformation<T, ID> metadata, MongoOperations mongoOperations) {
+        super(metadata, mongoOperations);
+        this.mongoTemplate = mongoOperations;
+        this.entityInformation = metadata;
+        clazz = entityInformation.getJavaType();
+    }
+
+    @Override
+    public PageImpl<T> findByPageAndSort(Pageable pageable, Query query) {
+        // 创建分页模型对象
+        List<T> ts =mongoTemplate.find(query.with(pageable),clazz);
+        long count = mongoTemplate.count(query, clazz);
+        return new PageImpl<T>(ts,pageable,count);
+    }
+
+    @Override
+    @SuppressWarnings(value = "unchecked ")
+    public List<String> distinct(String fieldName, Document query) {
+        Document command = new Document();
+        command.put("distinct",mongoTemplate.getCollectionName(clazz));
+        //过滤的条件
+        command.put("query",query);
+        //指定的字段
+        command.put("key",fieldName);
+        //可以获取collection然后distinct
+        Document document = mongoTemplate.executeCommand(command);
+        return (List<String>) document.get("values");
+    }
+
+    @Override
+    @SuppressWarnings(value = "unchecked ")
+    public List<String> distinct(String fieldName, Query query) {
+        return distinct(fieldName,query.getQueryObject());
+    }
+
+    @Override
+    @SuppressWarnings(value = "unchecked ")
+    public List<T> findByCondition(Query query) {
+
+        return mongoTemplate.find(query,clazz);
+    }
+
+    @Override
+    public T findOne(Query query) {
+        return mongoTemplate.findOne(query,clazz);
+    }
+
+    @Override
+    public void saveObject(Object o) {
+        mongoTemplate.save(o,mongoTemplate.getCollectionName(clazz));
+    }
+
+    @Override
+    public T findAndModify(Query query, Update update) {
+        checkUpdateObject(update);
+        return mongoTemplate.findAndModify(query,update,clazz);
+    }
+
+    @Override
+    public T findAndModify(Query query, Update update, FindAndModifyOptions options) {
+        return mongoTemplate.findAndModify(query,update,options,clazz);
+    }
+
+    @Override
+    public long remove(Query query) {
+        DeleteResult remove = mongoTemplate.remove(query, clazz);
+        return remove.getDeletedCount();
+    }
+
+    @Override
+    public long updateMulti(Query query, Update update) {
+        checkUpdateObject(update);
+        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, clazz);
+        return updateResult.getModifiedCount();
+    }
+
+    private void checkUpdateObject(Update update) {
+        Document updateObject = update.getUpdateObject();
+        if(CollUtil.isEmpty(updateObject)) {
+            throw new RuntimeException("更新内容不能为空!");
+        }
+    }
+
+    @Override
+    public List<T> findByCondition(Document condition) {
+        BasicQuery query = new BasicQuery(condition);
+        return mongoTemplate.find(query,clazz);
+    }
+
+    @Override
+    public long updateFirst(Query query, Update update) {
+        checkUpdateObject(update);
+        return mongoTemplate.updateFirst(query,update,clazz).getModifiedCount();
+    }
+
+    @Override
+    @SuppressWarnings(value = "unchecked ")
+    public void saveAll(List reconlist) {
+        mongoTemplate.insert(reconlist,clazz);
+    }
+
+    @Override
+    public long count(Query query) {
+        return mongoTemplate.count(query,clazz);
+    }
+
+
+    @Override
+    public T findOneBySection(Query query, String ... properties) {
+        Document document = new Document();
+        for (String property : properties) {
+            document.put(property,1);
+        }
+        Document queryObject = query.getQueryObject();
+        BasicQuery basicQuery = new BasicQuery(queryObject, document);
+
+        return mongoTemplate.findOne(basicQuery,clazz);
+    }
+
+    @Override
+    public List<Document> findDocuments(Query query, String... properties) {
+        Document document = new Document();
+        document.put("_id",0);
+        for (String property : properties) {
+            document.put(property,1);
+        }
+        MongoCollection<Document> collection = mongoTemplate.getCollection(entityInformation.getCollectionName());
+        Document queryObject = query.getQueryObject();
+        FindIterable<Document> iterable = null;
+        if(query.getLimit() != 0){
+            iterable =
+                    collection.find(queryObject).skip((int)query.getSkip()).limit(query.getLimit()).projection(document);
+        }else{
+            iterable = collection.find(queryObject).projection(document);
+        }
+        MongoCursor<Document> cursor = iterable.iterator();
+        ArrayList<Document> list = new ArrayList<>();
+        while (cursor.hasNext()){
+            list.add(cursor.next());
+        }
+        return list;
+    }
+
+    @Override
+    public List<Document> findDocuments(Query query) {
+        MongoCollection<Document> collection = mongoTemplate.getCollection(entityInformation.getCollectionName());
+        Document queryObject = query.getQueryObject();
+        FindIterable<Document> iterable = null;
+        if(query.getLimit() != 0){
+            iterable =
+                    collection.find(queryObject).skip((int)query.getSkip()).limit(query.getLimit());
+        }else{
+            iterable = collection.find(queryObject);
+        }
+        MongoCursor<Document> cursor = iterable.iterator();
+        ArrayList<Document> list = new ArrayList<>();
+        while (cursor.hasNext()){
+            list.add(cursor.next());
+        }
+        return list;
+    }
+
+    @Override
+    public Document findDocument(Query query, String... properties) {
+        List<Document> documents = findDocuments(query, properties);
+        return documents.size()==0?null:documents.get(0);
+    }
+
+    @Override
+    public Document findDocument(Query query) {
+        List<Document> documents = findDocuments(query);
+        return documents.size()==0?null:documents.get(0);
+    }
+
+    @Override
+    public <Q> List<Q> aggregate(Aggregation aggregation, Class<Q> q) {
+        AggregationResults<Q> aggregate =  mongoTemplate.aggregate(aggregation, clazz, q);
+        return aggregate.getMappedResults();
+    }
+}

+ 26 - 0
src/main/java/com/qrservice/admin/dao/online/ChannelMerchantDao.java

@@ -0,0 +1,26 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.ChannelMerchant;
+import com.qrservice.admin.model.dto.channel.ChannelMerchantDto;
+import com.qrservice.admin.model.dto.channel.ChannelMerchantFdDto;
+import com.qrservice.admin.model.dto.channel.ChannelSubMerchantDto;
+import org.springframework.data.mongodb.repository.Query;
+
+import java.util.List;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 17:07
+ */
+public interface ChannelMerchantDao extends BaseDao<ChannelMerchant, String> {
+
+    @Query("{ 'institutionCode' : ?0 }")
+    List<ChannelMerchantDto> findAllId(String institutionCode);
+    @Query("{ 'specification' : ?0 }")
+    List<ChannelSubMerchantDto> findBySpecification(String specification);
+    @Query("{ 'institutionCode' : ?0 }")
+    List<ChannelMerchantDto> findByInstitutionCode(String institutionCode);
+}

+ 21 - 0
src/main/java/com/qrservice/admin/dao/online/ChannelSubMerchantDao.java

@@ -0,0 +1,21 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.ChannelSubMerchant;
+import com.qrservice.admin.model.dto.channel.ChannelSubMerchantIdDto;
+import org.springframework.data.mongodb.repository.Query;
+
+import java.util.List;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 10:17
+ */
+public interface ChannelSubMerchantDao  extends BaseDao<ChannelSubMerchant, String> {
+
+    @Query("{ 'channelMerchantPk' : ?0 }")
+    List<ChannelSubMerchantIdDto> findByChannelMerchantPk(String channelMerchantPk);
+
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/online/ConfigInfoDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.ConfigInfo;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 11:41
+ */
+public interface ConfigInfoDao extends BaseDao<ConfigInfo, String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/online/InstitutionInfoDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.InstitutionInfo;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/12 15:48
+ */
+public interface InstitutionInfoDao extends BaseDao<InstitutionInfo,String> {
+}

+ 14 - 0
src/main/java/com/qrservice/admin/dao/online/MccDao.java

@@ -0,0 +1,14 @@
+package com.qrservice.admin.dao.online;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.Mcc;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/8/13 17:37
+ * @Version : V0.0.1
+ */
+public interface MccDao extends BaseDao<Mcc,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/online/MerchantChargeFeeDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.MerchantChargeFee;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/11 14:58
+ */
+public interface MerchantChargeFeeDao extends BaseDao<MerchantChargeFee,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/online/MerchantInfoDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.MerchantInfo;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:55
+ */
+public interface MerchantInfoDao  extends BaseDao<MerchantInfo,String> {
+
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/online/MerchantRouterDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.MerchantRouter;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/11 14:27
+ */
+public interface MerchantRouterDao  extends BaseDao<MerchantRouter,String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/online/MerchantStoreDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.MerchantStore;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/14 13:43
+ */
+public interface MerchantStoreDao extends BaseDao<MerchantStore,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/online/MerchantTerminalDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.MerchantTerminal;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/18 9:16
+ */
+public interface MerchantTerminalDao extends BaseDao<MerchantTerminal,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/online/SpecificationInfoDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.online;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.bussiness.SpecificationInfo;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 17:07
+ */
+public interface SpecificationInfoDao extends BaseDao<SpecificationInfo,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/online/SystemParameterDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.system.SystemParameter;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/18 15:09
+ */
+public interface SystemParameterDao  extends BaseDao<SystemParameter,String> {
+}

+ 20 - 0
src/main/java/com/qrservice/admin/dao/online/TransLogDao.java

@@ -0,0 +1,20 @@
+package com.qrservice.admin.dao.online;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.param.Trans;
+import com.qrservice.admin.model.transactions.TransLog;
+import org.springframework.data.mongodb.repository.Query;
+
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 18:23
+ */
+public interface TransLogDao extends BaseDao<TransLog,String> {
+
+    @Query("{ 'orderId' : ?0 ,'transType':{$ne:?1} }")
+    List<Trans> findOrder(String orderId, String transType);
+
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/settle/ChannelSettleLogHisDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.settletransaction.ChannelSettleLogHis;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/15 10:51
+ */
+public interface ChannelSettleLogHisDao extends BaseDao<ChannelSettleLogHis,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/ClearEventLogDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.batch.ClearEventLog;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 15:00
+ */
+public interface ClearEventLogDao extends BaseDao<ClearEventLog,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/ClearSceneLogDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.batch.ClearSceneLog;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 11:36
+ */
+public interface ClearSceneLogDao extends BaseDao<ClearSceneLog,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/InstitutionUserDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.InstitutionUser;
+
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/3 11:43
+ */
+public interface InstitutionUserDao extends BaseDao<InstitutionUser,String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/settle/MenuDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.Menu;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/8 9:35
+ */
+public interface MenuDao extends BaseDao<Menu,String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/settle/MerchantUserDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.MerchantUser;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/21 10:59
+ */
+public interface MerchantUserDao extends BaseDao<MerchantUser,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/MgtFileInfDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.settletransaction.MgtFileInf;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/18 15:08
+ */
+public interface MgtFileInfDao extends BaseDao<MgtFileInf,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/PermissionGroupDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.PermissionGroup;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/7 9:40
+ */
+public interface PermissionGroupDao extends BaseDao<PermissionGroup,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/SettleTaskDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.batch.SettleTasks;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 9:44
+ */
+public interface SettleTaskDao extends BaseDao<SettleTasks,String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/settle/SettleTransLogHisDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.settletransaction.SettleTransLogHis;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/31 10:55
+ */
+public interface SettleTransLogHisDao extends BaseDao<SettleTransLogHis,String> {
+}

+ 12 - 0
src/main/java/com/qrservice/admin/dao/settle/UserGroupDao.java

@@ -0,0 +1,12 @@
+package com.qrservice.admin.dao.settle;
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.UserGroup;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/11 14:03
+ */
+public interface UserGroupDao extends BaseDao<UserGroup,String> {
+}

+ 13 - 0
src/main/java/com/qrservice/admin/dao/settle/UserOperateLogDao.java

@@ -0,0 +1,13 @@
+package com.qrservice.admin.dao.settle;
+
+
+import com.qrservice.admin.dao.BaseDao;
+import com.qrservice.admin.model.manage.UserOperateLog;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/7 11:23
+ */
+public interface UserOperateLogDao extends BaseDao<UserOperateLog,String> {
+}

+ 29 - 0
src/main/java/com/qrservice/admin/exception/ChannelException.java

@@ -0,0 +1,29 @@
+package com.qrservice.admin.exception;
+
+/**
+ * Created by zhang on 2018/12/21.
+ */
+public class ChannelException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+	public ChannelException() {
+	}
+
+	public ChannelException(String message) {
+		super(message);
+	}
+
+	public ChannelException(Throwable cause) {
+		super(cause);
+	}
+
+	public ChannelException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public ChannelException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+}
+

+ 32 - 0
src/main/java/com/qrservice/admin/exception/CheckException.java

@@ -0,0 +1,32 @@
+package com.qrservice.admin.exception;
+
+/**
+ * Created by zhang on 2018/12/21.
+ */
+public class CheckException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+	public CheckException() {
+	}
+
+	public CheckException(String message) {
+		super(message);
+	}
+	public CheckException(String message,String title) {
+		super(message);
+	}
+
+	public CheckException(Throwable cause) {
+		super(cause);
+	}
+
+	public CheckException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public CheckException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+}
+

+ 26 - 0
src/main/java/com/qrservice/admin/exception/FormalException.java

@@ -0,0 +1,26 @@
+package com.qrservice.admin.exception;
+
+public class FormalException extends RuntimeException {
+	private static final long serialVersionUID = 1L;
+
+	public FormalException() {
+	}
+
+	public FormalException(String message) {
+		super(message);
+	}
+
+	public FormalException(Throwable cause) {
+		super(cause);
+	}
+
+	public FormalException(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public FormalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+		super(message, cause, enableSuppression, writableStackTrace);
+	}
+
+
+}

+ 259 - 0
src/main/java/com/qrservice/admin/filter/AccessLogFilter.java

@@ -0,0 +1,259 @@
+package com.qrservice.admin.filter;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.alibaba.fastjson.parser.Feature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.cache.Cache;
+import com.qrservice.admin.dao.settle.InstitutionUserDao;
+import com.qrservice.admin.dao.settle.UserOperateLogDao;
+import com.qrservice.admin.exception.CheckException;
+import com.qrservice.admin.model.manage.InstitutionUser;
+import com.qrservice.admin.model.manage.UserOperateLog;
+import com.qrservice.admin.model.vo.ResultVO;
+import com.qrservice.admin.util.CacheUtil;
+import com.qrservice.admin.util.jwtUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.Ordered;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.filter.OncePerRequestFilter;
+import org.springframework.web.util.ContentCachingResponseWrapper;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.Map;
+import java.util.TreeMap;
+
+
+/**
+ * @author kang.wang
+ * @date 2019/07/24
+ **/
+@Slf4j
+//@Component
+public class AccessLogFilter extends OncePerRequestFilter implements Ordered {
+    private Integer payloadMaxLength = 2048;
+    /**
+     * put filter at the end of all other filters to make sure we are processing after all others
+     */
+    private int order = Ordered.LOWEST_PRECEDENCE - 8;
+
+    @Override
+    public int getOrder() {
+        return order;
+    }
+
+    @Autowired
+    private UserOperateLogDao dao;
+
+    @Autowired
+    private InstitutionUserDao userDao;
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
+                                    FilterChain filterChain) throws ServletException, IOException {
+        Map<String, String[]> pm = request.getParameterMap();
+        ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
+        ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
+        long startTime = System.currentTimeMillis();
+        try {
+            // 得到用户个人相关的信息(登陆的用户,用户的语言)
+            if(!request.getRequestURI().contains("login") && !request.getMethod().equals("OPTIONS")
+                    &&!request.getRequestURI().contains("export")
+                    &&!request.getRequestURI().contains("downLoad")){
+                fillUserInfo(request);
+            }
+        } catch (CheckException e) {
+            response.setCharacterEncoding("UTF-8");
+            response.setContentType("application/json; charset=utf-8");
+            response.setHeader("Access-Control-Allow-Origin", "*");
+            response.setHeader("Cache-Control","no-cache");
+            PrintWriter out = response.getWriter();
+            ResultVO<String> result = new ResultVO<>();
+            result.setStatus("Failed");
+            result.setMessage("登录超时,请重新登录");
+            log.info("登录超时,请重新登录");
+            String jsonString = JSON.toJSONString(result);
+            out.append(jsonString);
+            return;
+        }
+        filterChain.doFilter(requestWrapper, responseWrapper);
+        //排除预请求
+        if(!request.getMethod().equals("OPTIONS")){
+            log.info(request.getServletPath() + ": 请求开始");
+            String requestPayload = new String(requestWrapper.getBody());
+            log.debug("res-contentType " + responseWrapper.getContentType());
+            String responsePayload = "";
+            if(responseWrapper.getContentType()!=null &&responseWrapper.getContentType().startsWith("application/json")){
+                responsePayload = getPayLoad(responseWrapper.getContentAsByteArray(),
+                        response.getCharacterEncoding());
+            }
+            responseWrapper.copyBodyToResponse();
+            String method = request.getMethod();
+            if ("GET".equals(method)) {
+                String queryString = request.getQueryString();
+                if (queryString != null) {
+                    requestPayload = URLDecoder.decode(queryString, "utf-8");
+                }
+            } else {
+                log.debug("ContentType:" + request.getContentType());
+                if (MediaType.APPLICATION_FORM_URLENCODED_VALUE.equals(request.getContentType())) {
+                    Map<String, String[]> parameterMap = request.getParameterMap();
+                    requestPayload = JSON.toJSONString(parameterMap);
+                }
+            }
+            String time = System.currentTimeMillis() - startTime + "ms";
+            String ip = getIp(request);
+            String url = request.getRequestURL().toString();
+            log.info("请求开始============》ip: {},url: {}, method: {}, uri: {}, params: {},time: {}",ip, url, method, request.getRequestURI(), requestPayload,time);
+            log.info("响应:" + responsePayload);
+            //获取所有请求头信息
+            Enumeration<String> headerNames = request.getHeaderNames();
+            String logHeads="";
+            while (headerNames.hasMoreElements()) {
+                String name = headerNames.nextElement();
+                //根据名称获取请求头的值
+                String value = request.getHeader(name);
+                logHeads=name+"---"+value +'\n'+ logHeads;
+            }
+            Map jsonObject = null;
+            try {
+                jsonObject = JSON.parseObject(responsePayload,new TypeReference<TreeMap<String, String>>(){} , Feature.OrderedField);
+            } catch (Exception e) {
+            }
+            //打印日志信息
+            if(jsonObject!=null && jsonObject.containsKey("title") ){
+                saveLogInfo(request,ip,url,method,request.getRequestURI(),requestPayload,logHeads,responsePayload);
+            }
+        }
+    }
+
+    public void saveLogInfo(HttpServletRequest request ,String ip,String url,String method,String uri,String requestPayload,String logHeads,String responsePayload) {
+        UserOperateLog info = new UserOperateLog();
+        Map vo= null;
+        try {
+            vo = JSON.parseObject(responsePayload,new TypeReference<TreeMap<String, String>>(){} , Feature.OrderedField);
+        } catch (Exception e) {
+        }
+        String title = vo.get("title").toString();
+            info.setTitle(title);
+            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            info.setSystemDate(df.format(new Date()));
+            info.setLogs("请求开始============》ip: "+ip+",url: "+url+", method: "+method+", uri: "+uri+", params: "+requestPayload+"");
+            info.setLogsHead(logHeads);
+            info.setLogLevel(1);
+            info.setMessage(vo.get("message").toString());
+            info.setLogSource("机构平台");
+            info.setOperateStatus(vo.get("status").toString());
+            info.setModule(uri);
+            info.setCreateTime(new Date());
+            if(uri.contains("login")){
+                String userId = title.substring(21, title.length() - 6);
+                info.setUserId(userId);
+                Query query = new Query();
+                query.addCriteria(Criteria.where("userId").is(userId));
+                InstitutionUser one = userDao.findOne(query);
+                if(one!=null){
+                    info.setInstitutionCode(one.getInstitutionCode());
+                }
+            }else {
+                String token = request.getHeader("Authorization");
+                info.setUserId(jwtUtil.getUserId(token));
+                info.setInstitutionCode(request.getHeader("institutionCode"));
+            }
+            dao.insert(info);
+
+    }
+
+    private String getPayLoad(byte[] buf, String characterEncoding) {
+        String payload = "";
+        if (buf == null) {
+            return payload;
+        }
+        if (buf.length > 0) {
+            int length = Math.min(buf.length, getPayloadMaxLength());
+            try {
+                payload = new String(buf, 0, length, characterEncoding);
+            } catch (UnsupportedEncodingException ex) {
+                payload = "[unknown]";
+            }
+        }
+        return payload;
+    }
+
+    public Integer getPayloadMaxLength() {
+        return payloadMaxLength;
+    }
+
+    public void setPayloadMaxLength(Integer payloadMaxLength) {
+        this.payloadMaxLength = payloadMaxLength;
+    }
+
+
+    private String getIp(HttpServletRequest request) {
+        String ip = null;
+        //X-Forwarded-For:Squid 服务代理
+        String ipAddresses = request.getHeader("X-Forwarded-For");
+
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //Proxy-Client-IP:apache 服务代理
+            ipAddresses = request.getHeader("Proxy-Client-IP");
+        }
+
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //WL-Proxy-Client-IP:weblogic 服务代理
+            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
+        }
+
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //HTTP_CLIENT_IP:有些代理服务器
+            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
+        }
+
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //X-Real-IP:nginx服务代理
+            ipAddresses = request.getHeader("X-Real-IP");
+        }
+
+        //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
+        if (ipAddresses != null && ipAddresses.length() != 0) {
+            ip = ipAddresses.split(",")[0];
+        }
+        //还是不能获取到,最后再通过request.getRemoteAddr();获取
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
+    private void fillUserInfo(HttpServletRequest request) {
+        //判断用户token是否过期,以及是否重复登录
+        String tokenFront = request.getHeader("Authorization");
+        String userId = jwtUtil.getUserId(tokenFront);
+        String userName = jwtUtil.getUserName(tokenFront);
+        Cache<String, String> cache = CacheUtil.getCache();
+        String token = cache.getIfPresent(userId);
+        if(token == null){
+            throw new CheckException("登录超时,请重新登录");
+        }
+        if(!token.equals(tokenFront)){
+            throw new CheckException("账户已在其他设备登录");
+        }
+    }
+}

+ 83 - 0
src/main/java/com/qrservice/admin/filter/ContentCachingRequestWrapper.java

@@ -0,0 +1,83 @@
+package com.qrservice.admin.filter;
+
+import org.apache.commons.io.IOUtils;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * @author kang.wang
+ * @date 2020/5/18
+ */
+public class ContentCachingRequestWrapper extends HttpServletRequestWrapper {
+
+	private final byte[] body;
+
+	private BufferedReader reader;
+
+	private ServletInputStream inputStream;
+
+	public ContentCachingRequestWrapper(HttpServletRequest request) throws IOException {
+		super(request);
+		//读一次 然后缓存起来
+		body = IOUtils.toByteArray(request.getInputStream());
+		inputStream = new RequestCachingInputStream(body);
+	}
+
+	public byte[] getBody() {
+		return body;
+	}
+
+	@Override
+	public ServletInputStream getInputStream() throws IOException {
+		if (inputStream != null) {
+			return inputStream;
+		}
+		return super.getInputStream();
+	}
+
+	@Override
+	public BufferedReader getReader() throws IOException {
+		if (reader == null) {
+			reader = new BufferedReader(new InputStreamReader(inputStream, getCharacterEncoding()));
+		}
+		return reader;
+	}
+
+	//代理一下ServletInputStream 里面真是内容为当前缓存的bytes
+	private static class RequestCachingInputStream extends ServletInputStream {
+
+		private final ByteArrayInputStream inputStream;
+
+		public RequestCachingInputStream(byte[] bytes) {
+			inputStream = new ByteArrayInputStream(bytes);
+		}
+
+		@Override
+		public int read() throws IOException {
+			return inputStream.read();
+		}
+
+		@Override
+		public boolean isFinished() {
+			return inputStream.available() == 0;
+		}
+
+		@Override
+		public boolean isReady() {
+			return true;
+		}
+
+		@Override
+		public void setReadListener(ReadListener readlistener) {
+		}
+
+	}
+
+}

+ 14 - 0
src/main/java/com/qrservice/admin/model/admin/LoginToken.java

@@ -0,0 +1,14 @@
+package com.qrservice.admin.model.admin;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/7 16:35
+ */
+@Data
+public class LoginToken {
+
+    private String token;
+}

+ 21 - 0
src/main/java/com/qrservice/admin/model/admin/UserInfo.java

@@ -0,0 +1,21 @@
+package com.qrservice.admin.model.admin;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/7 16:33
+ */
+@Data
+public class UserInfo {
+
+    @NotBlank
+    private String username;
+
+    @NotBlank
+    private String password;
+}

+ 46 - 0
src/main/java/com/qrservice/admin/model/batch/ClearEventLog.java

@@ -0,0 +1,46 @@
+package com.qrservice.admin.model.batch;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 14:54
+ */
+@Data
+@Document
+public class ClearEventLog {
+
+
+
+    /**
+     * 机构代码
+     */
+    private String institutionCode;
+
+    /**
+     * 日志级别,调试/信息/警告/严重/致命
+     */
+    private String logLevel;
+
+    /**
+     * 标题
+     */
+    private String title;
+
+    /**
+     * 日志
+     */
+    private String logs;
+
+    /**
+     * 模块
+     */
+    private String module;
+
+    private Date createTime;
+
+}

+ 66 - 0
src/main/java/com/qrservice/admin/model/batch/ClearSceneLog.java

@@ -0,0 +1,66 @@
+package com.qrservice.admin.model.batch;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 10:44
+ */
+@Data
+@Document
+public class ClearSceneLog {
+
+    /**
+     * 机构代码
+     */
+    private String institutionCode;
+
+
+    /**
+     * 当前清分日期,YYYYMMDD
+     */
+    private String clearDate;
+
+    /**
+     * 场次代码
+     */
+    private Integer sceneCode;
+
+    /**
+     * 场次名称
+     */
+    private String sceneName;
+
+    /**
+     * 批任务状态,初始、处理中、成功、待处理
+     */
+    private String status;
+
+    /**
+     * 批处理开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 批处理完成时间
+     */
+    private String endTime;
+
+    /**
+     * 计划开始时间
+     */
+    private String planTime;
+
+    /**
+     * 失败重试次数,初始为0
+     */
+    private Integer retryCount;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 74 - 0
src/main/java/com/qrservice/admin/model/batch/SettleTasks.java

@@ -0,0 +1,74 @@
+package com.qrservice.admin.model.batch;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/9/2 9:40
+ */
+@Data
+@Document
+public class SettleTasks {
+
+    /**
+     * 机构代码
+     */
+    private String institutionCode;
+
+
+    /**
+     * 清算日期
+     */
+    private String settleDate;
+
+
+    /**
+     * 清分日期(本次截至清分日期)
+     */
+    private String clearDate;
+
+
+    /**
+     * 上次清分日期
+     */
+    private String lastClearDate;
+
+
+    /**
+     * 批任务状态,初始、处理中、成功、失败、待处理
+     */
+    private String status;
+
+
+    /**
+     * 批处理开始时间
+     */
+    private Date startTime;
+
+
+    /**
+     * 批处理完成时间
+     */
+    private Date endTime;
+
+
+    /**
+     * 批任务状态
+     */
+    private String reportStatus;
+
+
+    /**
+     * 批任务状态
+     */
+    private String backupStatus;
+
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 98 - 0
src/main/java/com/qrservice/admin/model/bussiness/ChannelMerchant.java

@@ -0,0 +1,98 @@
+package com.qrservice.admin.model.bussiness;
+
+import com.qrservice.admin.model.bussiness.appendix.TransSettleCurrency;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 16:41
+ */
+@Document
+@Data
+public class ChannelMerchant {
+
+    @Id
+    private String id;
+
+    /**
+     * 渠道商户键值
+     */
+    private String channelMerchantPk;
+
+
+    /**
+     * 机构代码
+     */
+    private String institutionCode;
+
+
+    /**
+     * 接口代码
+     */
+    private String specification;
+
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+
+
+    /**
+     * 渠道商户号,支付宝PID/微信MID/银联机构号
+     */
+    private String channelMerchantId;
+
+
+    /**
+     * 渠道商户名称
+     */
+    private String channelMerchantName;
+
+
+
+    /**
+     * mdr
+     */
+    private String mdr;
+
+
+
+    /**
+     * 交易和清算币种
+     */
+    private List<TransSettleCurrency> currency;
+
+
+
+    /**
+     * 参数格式
+     */
+    private String parameterFormat;
+
+
+
+    /**
+     * 参数值
+     */
+    private Object parameter;
+
+
+    private String comment;
+
+    private String function;
+
+
+    private Date updateTime;
+
+    private Date createTime;
+
+
+}

+ 71 - 0
src/main/java/com/qrservice/admin/model/bussiness/ChannelSubMerchant.java

@@ -0,0 +1,71 @@
+package com.qrservice.admin.model.bussiness;
+
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 10:08
+ */
+@Document
+@Data
+public class ChannelSubMerchant {
+
+
+    @Id
+    private String id;
+
+    /**
+     * 渠道子商户号键值
+     */
+    private String channelSubMerchantPk;
+
+
+    /**
+     * 渠道商户键值
+     */
+    private String channelMerchantPk;
+
+
+    /**
+     * 渠道子商户号
+     */
+    private String channelSubMerchantId;
+
+    /**
+     * 渠道商户号
+     */
+    private String channelMerchantId;
+
+    /**
+     * 渠道子商户名称
+     */
+    private String channelSubMerchantName;
+
+
+
+    /**
+     * 渠道子商户MCC
+     */
+    private String channelSubMerchantMcc;
+
+
+    /**
+     * 预留信息,不同的渠道子商户参数格式可能不同。
+     */
+    private Object reserve;
+
+    /**
+     * 备注
+     */
+    private String comment;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 25 - 0
src/main/java/com/qrservice/admin/model/bussiness/ConfigInfo.java

@@ -0,0 +1,25 @@
+package com.qrservice.admin.model.bussiness;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.List;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/3/7 16:36
+ * @Version : V0.0.1
+ */
+@Document(collection = "info")
+@Data
+public class ConfigInfo {
+
+    @Id
+    private String id;
+    private String name;
+    private JSONObject data;
+    private List<String> value;
+}

+ 79 - 0
src/main/java/com/qrservice/admin/model/bussiness/InstitutionInfo.java

@@ -0,0 +1,79 @@
+package com.qrservice.admin.model.bussiness;
+
+import com.qrservice.admin.model.bussiness.appendix.Address;
+import com.qrservice.admin.model.bussiness.appendix.CompanyName;
+import com.qrservice.admin.model.bussiness.appendix.Contact;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/12 15:42
+ */
+@Data
+@Document
+public class InstitutionInfo {
+
+    @Id
+    private String id;
+
+    /**
+     * 机构代码,示例:1000
+     */
+    private String institutionCode;
+
+    /**
+     * 机构名称
+     */
+    private CompanyName institutionName;
+
+
+    /**
+     * 机构属性
+     */
+    private String institutionProperty;
+
+
+    /**
+     * 地址
+     */
+    private Address address;
+
+    /**
+     * 主要联系人
+     */
+    private Contact primaryContact;
+
+    /**
+     * 活跃商户号,默认值机构号+1000,创建商户时累加
+     */
+    private Integer activityMerchantId;
+    /**
+     * 活跃门店号,创建门店时累加
+     */
+    private Integer activityStoreId;
+    /**
+     * 活跃终端号,默认值10001,机构下唯一,创建商户时累加
+     */
+    private Integer activityTerminalId=100001;
+
+    /**
+     * 支持接口列表
+     */
+    private List<String> specificationList;
+
+    /**
+     * 机构下所有商户号
+     */
+    private List<String> listMid;
+
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 32 - 0
src/main/java/com/qrservice/admin/model/bussiness/Mcc.java

@@ -0,0 +1,32 @@
+package com.qrservice.admin.model.bussiness;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @Description :
+ * @Author : Simon.shi
+ * @Date : 2019/8/13 17:38
+ * @Version : V0.0.1
+ */
+@Data
+@Document
+public class Mcc {
+
+    @Id
+    private String id;
+    /**
+     * mcc类型 描述
+     */
+    private String desc;
+    /**
+     * mcc 类型code
+     */
+    private String mcc;
+    /**
+     * 当前累计数
+     */
+    private int mid;
+
+}

+ 50 - 0
src/main/java/com/qrservice/admin/model/bussiness/MerchantChargeFee.java

@@ -0,0 +1,50 @@
+package com.qrservice.admin.model.bussiness;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/11 14:56
+ */
+@Data
+@Document
+public class MerchantChargeFee {
+
+    @Id
+    private String id;
+
+    private String merchantChargeFeePK;
+
+    /**
+     * 商户号,示例:10001000,机构号+4位序号
+     */
+    private String merchantId;
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+
+    /**
+     * 交易类型,默认“*”
+     */
+    private String transType="*";
+
+
+
+    /**
+     * 计费代码
+     */
+    private String mdr;
+
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 191 - 0
src/main/java/com/qrservice/admin/model/bussiness/MerchantInfo.java

@@ -0,0 +1,191 @@
+package com.qrservice.admin.model.bussiness;
+
+
+import com.qrservice.admin.model.bussiness.appendix.Address;
+import com.qrservice.admin.model.bussiness.appendix.BankAccount;
+import com.qrservice.admin.model.bussiness.appendix.CompanyName;
+import com.qrservice.admin.model.bussiness.appendix.Contact;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:04
+ */
+@Data
+@Document
+public class MerchantInfo {
+
+
+    @Id
+    private String id;
+
+    /**
+     * 商户号,示例:10001000,机构号+4位序号
+     */
+    private String merchantId;
+
+    /**
+     * 机构代码,示例:1000
+     */
+    private String institutionCode;
+
+    /**
+     * OFFLINE	线下商户
+     * ONLINE	线上商户
+     * 默认认线下
+     */
+    private String businessType;
+
+    /**
+     * 商户名称
+     */
+    private CompanyName merchantName;
+
+    /**
+     * 独立商户	Independent
+     * 集团商户	Group
+     * 子商户	Subsidiary
+     */
+    private String merchantProperty;
+
+    /**
+     * mcc
+     */
+    private String mcc;
+
+    /**
+     * 交易币种列表
+     */
+    private List<String> transCurrency;
+
+    /**
+     * 支持场景
+     */
+    private List<String> supportScene;
+
+    /**
+     * 支持功能
+     */
+    private List<String> supportFunctions;
+
+
+
+    /**
+     * 清算币种
+     */
+    private String settleCurrency;
+
+    /**
+     * 清算周期,默认为1,T+1清算
+     */
+    private Integer settleCycle;
+
+    /**
+     * 清算间隔
+     */
+    private Integer settleInterval;
+
+    /**
+     * 收款账户
+     */
+    private BankAccount settleAccount;
+
+    /**
+     * 划款手续费代码
+     */
+    private String transferFeeCode;
+
+    /**
+     * 划款限额,币种为清算币种一致
+     */
+    private Integer transferLimit;
+
+
+    /**
+     * 企业注册号
+     */
+    private String registerNumber;
+
+    /**
+     * 网站
+     */
+    private String website;
+
+    /**
+     * 线上商城URL
+     */
+    private String webStoreUrl;
+
+    /**
+     * app商城URL
+     */
+    private String appStoreUrl;
+
+    /**
+     * 备注
+     */
+    private String comment;
+
+    /**
+     * 商户地址
+     */
+    private Address address;
+
+    /**
+     * 主要联系人
+     */
+    private Contact primaryContact;
+
+    /**
+     * 法人信息
+     */
+    private Contact legalPerson;
+
+    /**
+     * 初始	Initial
+     * 正常	Normal
+     * 关闭	Close
+     * 锁定	Lock
+     */
+    private String merchantStatus;
+
+    /**
+     * 推荐方id
+     */
+    private String referrerId;
+
+    /**
+     * 活跃的门店序号,默认10000,自加
+     */
+    private Integer activityStoreId;
+
+
+    /**
+     * 新增字段 退款密码
+     */
+    private String refundPwd;
+
+
+    /**
+     * 新增字段 集团商户
+     */
+    private String groupMerchantId;
+
+
+    /**
+     * 门店号集合
+     */
+    private List<String> listSid;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 74 - 0
src/main/java/com/qrservice/admin/model/bussiness/MerchantRouter.java

@@ -0,0 +1,74 @@
+package com.qrservice.admin.model.bussiness;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/11 14:20
+ */
+@Data
+@Document
+public class
+MerchantRouter {
+
+    @Id
+    private String id;
+
+    private String merchantRouterPK;
+
+    /**
+     * 商户号,示例:10001000,机构号+4位序号
+     */
+    private String merchantId;
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+    /**
+     * 场景
+     */
+    private String scene;
+
+    /**
+     * 交易币种
+     */
+    private String transCurrency;
+
+
+    /**
+     * 交易接口
+     */
+    private String specification;
+
+    /**
+     * 渠道商户号
+     */
+    private String channelMerchantPk;
+
+
+    /**
+     * 渠道子商户号
+     */
+    private String channelSubMerchantPk;
+
+    /**
+     * 渠道商户号
+     */
+    private String channelMerchantId;
+
+    /**
+     * 渠道子商户号
+     */
+    private String channelSubMerchantId;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 48 - 0
src/main/java/com/qrservice/admin/model/bussiness/MerchantStore.java

@@ -0,0 +1,48 @@
+package com.qrservice.admin.model.bussiness;
+
+import com.qrservice.admin.model.bussiness.appendix.Address;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/14 13:35
+ */
+@Data
+@Document
+public class MerchantStore {
+    @Id
+    private String id;
+
+    private String merchantId;
+
+    private String storeId;
+
+    private String storeCode;
+
+    private String storeName;
+
+    private String storeMCC;
+
+    private String storeStatus;
+    /**
+     * 简称
+     */
+    private String storeDisplayName;
+
+    /**
+     * 门店业务
+     */
+    private String storeBusiness;
+
+    private Address storeAddress;
+
+    private Date updateTime;
+
+    private Date createTime;
+
+}

+ 80 - 0
src/main/java/com/qrservice/admin/model/bussiness/MerchantTerminal.java

@@ -0,0 +1,80 @@
+package com.qrservice.admin.model.bussiness;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/18 8:58
+ */
+@Data
+@Document
+public class MerchantTerminal {
+
+    @Id
+    private String id;
+
+    private String merchantId;
+
+    /**
+     * 终端号
+     */
+    private String terminalId;
+
+    /**
+     *门店号
+     */
+    private String storeId;
+
+    /**
+     *币种
+     */
+    private String transCurrency;
+
+    /**
+     *激活码
+     */
+    private String activationCode;
+
+    /**
+     *密码密文
+     */
+    private String password;
+
+    /**
+     *密码更新时间
+     */
+    private Date passwordUpdateDate;
+
+    /**
+     *收款码编号
+     */
+    private String paymentCode;
+
+    /**
+     *备注
+     */
+    private String remarks;
+
+    /**
+     *终端状态
+     * 初始	Initial
+     * 正常	Normal
+     * 关闭	Close
+     * 锁定	Lock
+     */
+    private String terminalStatus;
+
+    /**
+     *别名,商户下唯一
+     */
+    private String alias;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 36 - 0
src/main/java/com/qrservice/admin/model/bussiness/SpecificationInfo.java

@@ -0,0 +1,36 @@
+package com.qrservice.admin.model.bussiness;
+
+import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 17:03
+ */
+@Data
+@Document
+public class SpecificationInfo {
+
+    /**
+     * 接口代码
+     */
+    private String specification;
+
+    /**
+     * 接口名称
+     */
+    private String specificationName;
+
+    /**
+     * 支持品牌列表
+     */
+    private List<String> supportBrand;
+
+    private Date updateTime;
+
+    private Date createTime;
+}

+ 24 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/Address.java

@@ -0,0 +1,24 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:41
+ */
+@Data
+public class Address {
+
+    private String region;
+
+    private String state;
+
+    private String city;
+
+    private String address1;
+
+    private String address2;
+
+    private String zipCode;
+}

+ 16 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/Amount.java

@@ -0,0 +1,16 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 17:56
+ */
+@Data
+public class Amount {
+
+    private String currency;
+
+    private Integer value;
+}

+ 29 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/BankAccount.java

@@ -0,0 +1,29 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:36
+ */
+@Data
+public class BankAccount {
+
+    private String bankName;
+
+    private String bankBranchName;
+
+    private String bankAccountName;
+
+    private String bankAccountNo;
+
+    private Address bankAddress;
+
+    private String bankBIC;
+
+    private String bankIBAN;
+
+    private String bankClrSysMmbId;
+
+}

+ 29 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/CompanyName.java

@@ -0,0 +1,29 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:12
+ */
+@Data
+public class CompanyName {
+
+    /**
+     * 商户名称(全称)
+     */
+    private String fullName;
+
+
+    /**
+     * 商户英文名称
+     */
+    private String englishName;
+
+
+    /**
+     * 商户简称
+     */
+    private String shortName;
+}

+ 26 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/Contact.java

@@ -0,0 +1,26 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:46
+ */
+@Data
+public class Contact {
+
+    private UserName contactName;
+
+    /**
+     * 联系电话
+     */
+    private String contactPhoneNo;
+
+    private String contactEmail;
+
+    /**
+     * 联系人头衔
+     */
+    private String contactTitle;
+}

+ 29 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/ExchangeRate.java

@@ -0,0 +1,29 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 18:01
+ */
+@Data
+public class ExchangeRate {
+
+    private String date;
+
+
+    private String issuer;
+
+
+    private String baseCurrency;
+
+
+    private String objectCurrency;
+
+
+    private String markup;
+
+
+    private String value;
+}

+ 20 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/Goods.java

@@ -0,0 +1,20 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 17:55
+ */
+@Data
+public class Goods {
+
+    private String referenceGoodsId;
+
+    private String goodsName;
+
+    private Amount goodsUnitAmount;
+
+    private String goodsQuantity;
+}

+ 16 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/ResponseCode.java

@@ -0,0 +1,16 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/26 18:03
+ */
+@Data
+public class ResponseCode {
+
+    private String code;
+
+    private String message;
+}

+ 16 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/TransSettleCurrency.java

@@ -0,0 +1,16 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/24 17:00
+ */
+@Data
+public class TransSettleCurrency {
+
+    private String transCurrency;
+
+    private String settleCurrency;
+}

+ 23 - 0
src/main/java/com/qrservice/admin/model/bussiness/appendix/UserName.java

@@ -0,0 +1,23 @@
+package com.qrservice.admin.model.bussiness.appendix;
+
+import lombok.Data;
+
+/**
+ * @Company: AllPay
+ * @Author: lei.chen
+ * @Date: 2020/8/10 14:48
+ */
+@Data
+public class UserName {
+
+    private String firstName;
+
+
+    private String middleName;
+
+
+    private String lastName;
+
+
+    private String fullName;
+}

+ 0 - 0
src/main/java/com/qrservice/admin/model/dto/ConfigInfoDTO.java


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