x1ongzhu 7 年之前
父節點
當前提交
897af62dd5
共有 51 個文件被更改,包括 5221 次插入3029 次删除
  1. 0 2028
      log.txt
  2. 58 0
      src/main/java/com/izouma/awesomeadmin/beans/CheckinConfig.java
  3. 14 7
      src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java
  4. 2 2
      src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.xml
  5. 20 9
      src/main/java/com/izouma/awesomeadmin/dao/CompetitionMapper.xml
  6. 2 2
      src/main/java/com/izouma/awesomeadmin/dao/PlayerInfoMapper.xml
  7. 35 0
      src/main/java/com/izouma/awesomeadmin/dao/PropInfoMapper.java
  8. 449 0
      src/main/java/com/izouma/awesomeadmin/dao/PropInfoMapper.xml
  9. 2 1
      src/main/java/com/izouma/awesomeadmin/dao/SystemNoticeMapper.java
  10. 85 88
      src/main/java/com/izouma/awesomeadmin/dao/SystemNoticeMapper.xml
  11. 35 0
      src/main/java/com/izouma/awesomeadmin/dao/UserPropMapper.java
  12. 489 0
      src/main/java/com/izouma/awesomeadmin/dao/UserPropMapper.xml
  13. 8 0
      src/main/java/com/izouma/awesomeadmin/model/Competition.java
  14. 168 0
      src/main/java/com/izouma/awesomeadmin/model/PropInfo.java
  15. 24 16
      src/main/java/com/izouma/awesomeadmin/model/SystemNotice.java
  16. 80 9
      src/main/java/com/izouma/awesomeadmin/model/TableField.java
  17. 184 0
      src/main/java/com/izouma/awesomeadmin/model/UserProp.java
  18. 3 0
      src/main/java/com/izouma/awesomeadmin/service/CompetitionService.java
  19. 2 0
      src/main/java/com/izouma/awesomeadmin/service/ParticipatingInfoService.java
  20. 28 0
      src/main/java/com/izouma/awesomeadmin/service/PropInfoService.java
  21. 28 0
      src/main/java/com/izouma/awesomeadmin/service/UserPropService.java
  22. 35 1
      src/main/java/com/izouma/awesomeadmin/service/impl/CheckinRecordServiceImpl.java
  23. 122 2
      src/main/java/com/izouma/awesomeadmin/service/impl/CompetitionServiceImpl.java
  24. 9 7
      src/main/java/com/izouma/awesomeadmin/service/impl/HouseInfoServiceImpl.java
  25. 16 5
      src/main/java/com/izouma/awesomeadmin/service/impl/ParticipatingInfoServiceImpl.java
  26. 117 0
      src/main/java/com/izouma/awesomeadmin/service/impl/PropInfoServiceImpl.java
  27. 9 31
      src/main/java/com/izouma/awesomeadmin/service/impl/SystemNoticeServiceImpl.java
  28. 3 3
      src/main/java/com/izouma/awesomeadmin/service/impl/UserInfoServiceImpl.java
  29. 117 0
      src/main/java/com/izouma/awesomeadmin/service/impl/UserPropServiceImpl.java
  30. 52 0
      src/main/java/com/izouma/awesomeadmin/util/ObjectTool.java
  31. 7 0
      src/main/java/com/izouma/awesomeadmin/web/CheckinRecordController.java
  32. 5 4
      src/main/java/com/izouma/awesomeadmin/web/CompetitionController.java
  33. 56 1
      src/main/java/com/izouma/awesomeadmin/web/DevelopController.java
  34. 129 0
      src/main/java/com/izouma/awesomeadmin/web/PropInfoController.java
  35. 131 0
      src/main/java/com/izouma/awesomeadmin/web/UserPropController.java
  36. 107 0
      src/main/vue/src/pages/CheckinConfig.vue
  37. 35 5
      src/main/vue/src/pages/Competition.vue
  38. 16 0
      src/main/vue/src/pages/Competitions.vue
  39. 1 1
      src/main/vue/src/pages/GameInfo.vue
  40. 570 371
      src/main/vue/src/pages/GenCode.vue
  41. 42 45
      src/main/vue/src/pages/HouseInfo.vue
  42. 197 0
      src/main/vue/src/pages/PropInfo.vue
  43. 508 0
      src/main/vue/src/pages/PropInfos.vue
  44. 75 29
      src/main/vue/src/pages/SystemNotice.vue
  45. 18 1
      src/main/vue/src/pages/SystemNotices.vue
  46. 1 1
      src/main/vue/src/pages/User.vue
  47. 172 0
      src/main/vue/src/pages/UserProp.vue
  48. 536 0
      src/main/vue/src/pages/UserProps.vue
  49. 385 360
      src/main/vue/src/router/index.js
  50. 32 0
      src/test/java/CommonTest.java
  51. 2 0
      src/test/java/UserServiceTest.java

+ 0 - 2028
log.txt

@@ -1,2028 +0,0 @@
-[2019-01-30 15:27:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:28:06] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:29:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:37:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:38:10] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:39:10] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 15:40:52] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:17:55] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:19:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:21:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:22:04] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:23:48] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:24:14] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:24:24] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:25:43] [WARN ] - SQL State '08007' of Exception tested by statusOnException() implies that the database is invalid, and the pool should refill itself with fresh Connections.
-com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
-	at com.mysql.jdbc.Util.getInstance(Util.java:384)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
-	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5086)
-	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
-	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
-	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
-	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
-	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
-	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
-	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
-	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-[2019-01-30 16:25:43] [WARN ] - A ConnectionTest has failed, reporting that all previously acquired Connections are likely invalid. The pool will be reset.
-[2019-01-30 16:25:43] [WARN ] - [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
-[2019-01-30 16:25:43] [WARN ] - [c3p0] Another error has occurred [ com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. ] which will not be reported to listeners!
-com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
-	at com.mysql.jdbc.Util.getInstance(Util.java:384)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
-	at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1321)
-	at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1313)
-	at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5311)
-	at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:1059)
-	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion(DataSourceTransactionManager.java:324)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1016)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:883)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
-	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
-	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
-	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
-	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
-	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
-	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
-
-The last packet successfully received from the server was 77,876 milliseconds ago.  The last packet sent successfully to the server was 6 milliseconds ago.
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
-	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127)
-	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3715)
-	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3604)
-	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4155)
-	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
-	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
-	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2832)
-	at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:5189)
-	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5072)
-	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
-	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
-	... 23 more
-Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
-	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3161)
-	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3615)
-	... 33 more
-[2019-01-30 16:25:43] [WARN ] - A ConnectionTest has failed, reporting that all previously acquired Connections are likely invalid. The pool will be reset.
-[2019-01-30 16:25:43] [WARN ] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@134f8ef6] to process 'after' execution for test: method [public void VideoProcessTest.testRecognition()], instance [VideoProcessTest@5a90265a], exception [null]
-org.springframework.transaction.TransactionSystemException: Could not roll back JDBC transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
-	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:297)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
-	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
-	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
-	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
-	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
-	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
-	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
-	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
-	at com.mysql.jdbc.Util.getInstance(Util.java:384)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
-	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
-	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5086)
-	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
-	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
-	... 24 more
-[2019-01-30 16:26:22] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:27:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:28:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:33:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:34:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:34:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:36:46] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:37:55] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:39:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:40:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:41:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:42:12] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:42:30] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:43:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:43:58] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:44:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:46:30] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:48:36] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:49:32] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:50:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:52:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:52:53] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:53:28] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:55:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:56:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 16:57:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 17:07:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 17:08:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 17:09:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:49:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:50:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:50:37] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:54:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:54:58] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:56:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:56:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:57:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:58:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 18:59:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:05:03] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:05:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:06:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:06:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:07:37] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:08:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:12:35] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:16:19] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:18:24] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:20:18] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:21:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:21:39] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:23:07] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:24:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:26:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:27:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:27:36] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:28:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:28:41] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-30 19:29:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:08:03] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:09:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:17:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:18:36] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:21:18] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 01:22:46] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:29:50] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:31:05] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:31:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:31:46] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:33:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 09:42:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 10:38:14] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 11:30:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 11:32:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 11:57:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 11:58:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:05:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:06:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:11:08] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:12:08] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:12:58] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 12:17:10] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 14:58:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:03:02] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libopencv_java401.dylib
-[2019-01-31 15:03:02] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c41d037] to prepare test instance [VideoProcessTest@2234078]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libopencv_java401.dylib
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libopencv_java401.dylib
-	at java.lang.Runtime.load0(Runtime.java:806)
-	at java.lang.System.load(System.java:1086)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:06:40] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401 in java.library.path
-[2019-01-31 15:06:40] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c41d037] to prepare test instance [VideoProcessTest@2234078]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no libopencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:07:16] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-[2019-01-31 15:07:16] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c41d037] to prepare test instance [VideoProcessTest@2234078]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:08:03] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-[2019-01-31 15:08:03] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c41d037] to prepare test instance [VideoProcessTest@2234078]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:09:42] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: Directory separator should not appear in library name: /Library/Java/Extensions/libopencv_java401.so
-[2019-01-31 15:09:42] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@5c41d037] to prepare test instance [VideoProcessTest@2234078]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: Directory separator should not appear in library name: /Library/Java/Extensions/libopencv_java401.so
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: Directory separator should not appear in library name: /Library/Java/Extensions/libopencv_java401.so
-	at java.lang.Runtime.loadLibrary0(Runtime.java:867)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:10:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:11:07] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:15:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:17:26] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:22:03] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:24:32] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-[2019-01-31 15:24:32] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@554c4eaa] to prepare test instance [VideoProcessTest@29fd8e67]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no libopencv_java401.so in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:26:54] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-01-31 15:26:54] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@554c4eaa] to prepare test instance [VideoProcessTest@29fd8e67]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:53)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 15:29:59] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 15:30:39] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 21:47:25] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-01-31 21:47:25] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@577f9109] to prepare test instance [VideoProcessTest@4303b7f0]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [/Users/drew/Projects/Java/shouyoudianjing/target/classes/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:54)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 38 more
-[2019-01-31 22:05:05] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:06:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:25:56] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:27:06] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:34:27] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:45:50] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:46:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:47:56] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:50:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:52:08] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:52:56] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:54:31] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 22:55:53] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 23:01:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 23:14:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-01-31 23:15:11] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-19 11:02:29] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:02:29] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:65)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:03:20] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:03:20] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:07:22] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:07:22] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:08:05] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:08:05] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:08:59] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:08:59] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:10:46] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:10:46] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:14:02] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-[2019-02-19 11:14:02] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:67)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:15:31] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:15:31] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:17:32] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:17:32] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:18:35] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-[2019-02-19 11:18:35] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:67)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:19:48] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_141\bin\tesseract.dll: Can't find dependent libraries
-[2019-02-19 11:19:48] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_141\bin\tesseract.dll: Can't find dependent libraries
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_141\bin\tesseract.dll: Can't find dependent libraries
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.8.0_141\bin\tesseract.dll: Can't find dependent libraries
-	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
-	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:67)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:21:21] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-[2019-02-19 11:21:21] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no tesseract in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:67)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:24:46] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:24:46] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:25:07] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:25:07] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:25:45] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-[2019-02-19 11:25:45] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: no opencv_java401 in java.library.path
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:66)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-19 11:26:21] [WARN ] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Tesseract-OCR\tesseract.dll: Can't find dependent libraries
-[2019-02-19 11:26:21] [ERROR] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@e8fadb0] to prepare test instance [UserServiceTest@6d64b553]
-java.lang.IllegalStateException: Failed to load ApplicationContext
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
-	at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
-	at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
-	at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'videoNotifyServiceImpl': Unsatisfied dependency expressed through field 'videoRecognitionService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Tesseract-OCR\tesseract.dll: Can't find dependent libraries
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588)
-	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759)
-	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)
-	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:128)
-	at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:60)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
-	at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
-	... 24 more
-Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'videoRecognitionServiceImpl' defined in file [D:\projects\shouyoudianjing\target\classes\com\izouma\awesomeadmin\service\impl\VideoRecognitionServiceImpl.class]: Instantiation of bean failed; nested exception is java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Tesseract-OCR\tesseract.dll: Can't find dependent libraries
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1116)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1060)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
-	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
-	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
-	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
-	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:207)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1136)
-	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1064)
-	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
-	... 40 more
-Caused by: java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\Tesseract-OCR\tesseract.dll: Can't find dependent libraries
-	at java.lang.ClassLoader$NativeLibrary.load(Native Method)
-	at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941)
-	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
-	at java.lang.Runtime.loadLibrary0(Runtime.java:870)
-	at java.lang.System.loadLibrary(System.java:1122)
-	at com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl.<clinit>(VideoRecognitionServiceImpl.java:67)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
-	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
-	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
-	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
-	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142)
-	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89)
-	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1108)
-	... 51 more
-[2019-02-28 18:54:49] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-28 18:55:34] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-28 18:57:07] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-28 18:58:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-28 19:01:34] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-02-28 19:01:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-26 09:33:03] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-26 09:34:08] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-26 09:55:43] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-27 17:04:19] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-27 17:05:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-27 17:06:26] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-27 17:06:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 15:59:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 16:00:26] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 16:02:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 16:03:46] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 16:29:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:03:30] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:13:39] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:14:41] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:22:59] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:23:06] [WARN ] - [Client]Unable to execute HTTP request: SocketException
-[2019-03-28 17:24:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:26:19] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:26:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-28 17:27:12] [WARN ] - [Client]Unable to execute HTTP request: SocketException
-[2019-03-28 17:27:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 09:48:49] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 09:50:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 09:52:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 09:53:18] [WARN ] - [Client]Unable to execute HTTP request: UnknownHost
-[2019-03-29 09:53:18] [WARN ] - [Client]Unable to execute HTTP request: UnknownHost
-[2019-03-29 09:53:19] [WARN ] - [Client]Unable to execute HTTP request: UnknownHost
-[2019-03-29 09:53:22] [WARN ] - [Client]Unable to execute HTTP request: UnknownHost
-[2019-03-29 09:53:22] [ERROR] - OSS上传异常:
-com.aliyun.oss.ClientException: UnknownHost
-	at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:68)
-	at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:67)
-	at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121)
-	at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67)
-	at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:89)
-	at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:130)
-	at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:108)
-	at com.aliyun.oss.internal.OSSObjectOperation.writeObjectInternal(OSSObjectOperation.java:574)
-	at com.aliyun.oss.internal.OSSObjectOperation.putObject(OSSObjectOperation.java:119)
-	at com.aliyun.oss.OSSClient.putObject(OSSClient.java:412)
-	at com.aliyun.oss.OSSClient.putObject(OSSClient.java:399)
-	at com.izouma.awesomeadmin.service.OSSFileService.upload(OSSFileService.java:50)
-	at com.izouma.awesomeadmin.util.VideoProcessTool.uploadImage(VideoProcessTool.java:343)
-	at com.izouma.awesomeadmin.util.VideoProcessTool.processVideo(VideoProcessTool.java:72)
-	at VideoProcessTest.testVideo(VideoProcessTest.java:30)
-	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
-	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-	at java.lang.reflect.Method.invoke(Method.java:498)
-	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
-	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
-	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
-	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
-	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
-	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
-	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
-	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
-	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
-	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
-	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
-	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
-	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
-	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
-	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
-	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
-	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
-	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
-	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
-	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
-	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
-Caused by: java.net.UnknownHostException: microball.oss-cn-hangzhou.aliyuncs.com
-	at java.net.InetAddress.getAllByName0(InetAddress.java:1280)
-	at java.net.InetAddress.getAllByName(InetAddress.java:1192)
-	at java.net.InetAddress.getAllByName(InetAddress.java:1126)
-	at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
-	at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:262)
-	at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:161)
-	at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:328)
-	at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:612)
-	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:447)
-	at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884)
-	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
-	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107)
-	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
-	at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:64)
-	... 41 more
-[2019-03-29 11:01:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 11:01:24] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 11:06:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 11:07:56] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-03-29 11:09:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 17:57:12] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 18:00:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 18:14:52] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 18:15:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 18:19:18] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
-[2019-05-21 18:23:31] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.

+ 58 - 0
src/main/java/com/izouma/awesomeadmin/beans/CheckinConfig.java

@@ -0,0 +1,58 @@
+package com.izouma.awesomeadmin.beans;
+
+public class CheckinConfig {
+    private String    weekDay;
+    private Double moneyCoin;
+    private Double pointsRatio;
+    private Double minPoints;
+    private Double probability;
+    private int    checked;
+
+    public String getWeekDay() {
+        return weekDay;
+    }
+
+    public void setWeekDay(String weekDay) {
+        this.weekDay = weekDay;
+    }
+
+    public Double getMoneyCoin() {
+        return moneyCoin;
+    }
+
+    public void setMoneyCoin(Double moneyCoin) {
+        this.moneyCoin = moneyCoin;
+    }
+
+    public Double getPointsRatio() {
+        return pointsRatio;
+    }
+
+    public void setPointsRatio(Double pointsRatio) {
+        this.pointsRatio = pointsRatio;
+    }
+
+    public Double getMinPoints() {
+        return minPoints;
+    }
+
+    public void setMinPoints(Double minPoints) {
+        this.minPoints = minPoints;
+    }
+
+    public Double getProbability() {
+        return probability;
+    }
+
+    public void setProbability(Double probability) {
+        this.probability = probability;
+    }
+
+    public int getChecked() {
+        return checked;
+    }
+
+    public void setChecked(int checked) {
+        this.checked = checked;
+    }
+}

+ 14 - 7
src/main/java/com/izouma/awesomeadmin/constant/AppConstant.java

@@ -469,6 +469,11 @@ public interface AppConstant {
          */
         int SEASON_BONUS = 3;
 
+        /**
+         * 联赛奖金
+         */
+        int COMPEITION_BONUS = 4;
+
     }
 
     /**
@@ -496,11 +501,9 @@ public interface AppConstant {
 
     }
 
-    interface CompetitionState {
-        int READY       = 1;
-        int IN_PROGRESS = 2;
-        int SETTLEMENT  = 3;
-        int END         = 4;
+    interface CompetitionStatus {
+        int READY = 1;
+        int END   = 2;
     }
 
     interface CompetitionType {
@@ -533,8 +536,12 @@ public interface AppConstant {
         String DAILY_ROOMS_ADVANCED = "dailyRoomsAdvanced"; // 每日高级房间数量
         String JOIN_ROOMS_NORMAL    = "joinRoomsNormal"; // 用户每日加入高级房间次数
         String JOIN_ROOMS_ADVANCED  = "joinRoomsAdvanced"; // 用户每日加入高级房间次数
+        String CHECKIN_CONFIG       = "checkinConfig";
     }
 
-
-
+    interface PropertyType {
+        int POINTS_RATIO = 1;
+        int MIN_POINTS   = 2;
+        int PROBABILITY  = 3;
+    }
 }

+ 2 - 2
src/main/java/com/izouma/awesomeadmin/dao/CheckinRecordMapper.xml

@@ -296,7 +296,7 @@
                 AND update_user = #{updateUser}
             </if>
             <if test="createTime != null and !&quot;&quot;.equals(createTime)">
-                AND create_time = #{createTime}
+                AND to_days(create_time) = to_days(#{createTime})
             </if>
             <if test="createUser != null and !&quot;&quot;.equals(createUser)">
                 AND create_user = #{createUser}
@@ -336,7 +336,7 @@
         SELECT <include refid="Base_Column_List"/>, (weekday(create_time) + 1) AS week_day
         FROM checkin_record
         WHERE del_flag = 'N'
-          AND user_id = 1
+          AND user_id = #{userId}
           AND yearweek(create_time, 1) = yearweek(now(), 1)
         GROUP BY week_day
     </select>

+ 20 - 9
src/main/java/com/izouma/awesomeadmin/dao/CompetitionMapper.xml

@@ -16,12 +16,13 @@
         <result column="bonus" property="bonus" jdbcType="INTEGER"/>
         <result column="status" property="status" jdbcType="INTEGER"/>
         <result column="intro" property="intro" jdbcType="VARCHAR"/>
+        <result column="game_id" property="gameId" jdbcType="INTEGER"/>
         <!--generatedEnd-->
     </resultMap>
 
     <sql id="Base_Column_List">
         <!--generatedStart-->
-        id, del_flag, update_time, update_user, create_time, create_user, competition_name, start_time, end_time, type, bonus, status, intro        <!--generatedEnd-->
+        id, del_flag, update_time, update_user, create_time, create_user, competition_name, start_time, end_time, type, bonus, status, intro, game_id        <!--generatedEnd-->
     </sql>
 
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
@@ -81,6 +82,9 @@
             <if test="intro!= null">
                 intro,
             </if>
+            <if test="gameId!= null">
+                game_id,
+            </if>
             <!--generatedEnd-->
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -124,6 +128,9 @@
             <if test="intro != null">
                 #{intro,jdbcType=VARCHAR},
             </if>
+            <if test="gameId != null">
+                #{gameId,jdbcType=INTEGER},
+            </if>
             <!--generatedEnd-->
         </trim>
     </insert>
@@ -171,6 +178,9 @@
             <if test="intro != null">
                 intro= #{intro,jdbcType=VARCHAR},
             </if>
+            <if test="gameId != null">
+                game_id= #{gameId,jdbcType=INTEGER},
+            </if>
             <!--generatedEnd-->
         </set>
         WHERE
@@ -232,15 +242,14 @@
             <if test="record.intro != null and !&quot;&quot;.equals(record.intro)">
                 AND intro = #{record.intro}
             </if>
+            <if test="record.gameId != null and !&quot;&quot;.equals(record.gameId)">
+                AND game_id = #{record.gameId}
+            </if>
             <!--generatedEnd-->
             <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
                     <!--generatedStart-->
                     OR competition_name LIKE concat('%',#{record.searchKey},'%')
-                    OR type LIKE concat('%',#{record.searchKey},'%')
-                    OR bonus LIKE concat('%',#{record.searchKey},'%')
-                    OR status LIKE concat('%',#{record.searchKey},'%')
-                    OR intro LIKE concat('%',#{record.searchKey},'%')
                     <!--generatedEnd-->
                 </trim>
             </if>
@@ -336,15 +345,14 @@
             <if test="intro != null and !&quot;&quot;.equals(intro)">
                 AND intro = #{intro}
             </if>
+            <if test="gameId != null and !&quot;&quot;.equals(gameId)">
+                AND game_id = #{gameId}
+            </if>
             <!--generatedEnd-->
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
                     <!--generatedStart-->
                     OR competition_name LIKE concat('%',#{searchKey},'%')
-                    OR type LIKE concat('%',#{searchKey},'%')
-                    OR bonus LIKE concat('%',#{searchKey},'%')
-                    OR status LIKE concat('%',#{searchKey},'%')
-                    OR intro LIKE concat('%',#{searchKey},'%')
                     <!--generatedEnd-->
                 </trim>
             </if>
@@ -435,6 +443,9 @@
             <if test="intro != null and !&quot;&quot;.equals(intro)">
                 AND intro = #{intro}
             </if>
+            <if test="gameId != null and !&quot;&quot;.equals(gameId)">
+                AND game_id = #{gameId}
+            </if>
             <!--generatedEnd-->
         </where>
         LIMIT 1

+ 2 - 2
src/main/java/com/izouma/awesomeadmin/dao/PlayerInfoMapper.xml

@@ -193,7 +193,7 @@
             <if test="score!= null">
                 score,
             </if>
-            <if test="competition_id!= null">
+            <if test="competitionId!= null">
                 competition_id,
             </if>
         </trim>
@@ -282,7 +282,7 @@
             <if test="score != null">
                 #{score,jdbcType=FLOAT},
             </if>
-            <if test="competition_id!= null">
+            <if test="competitionId!= null">
                 #{competitionId,jdbcType=INTEGER},
             </if>
         </trim>

+ 35 - 0
src/main/java/com/izouma/awesomeadmin/dao/PropInfoMapper.java

@@ -0,0 +1,35 @@
+package com.izouma.awesomeadmin.dao;
+
+import java.util.*;
+import com.izouma.awesomeadmin.datasource.DataSource;
+import org.springframework.stereotype.Repository;
+import com.izouma.awesomeadmin.model.PropInfo;
+
+
+/**
+*  Dao接口
+*/
+@Repository("com.zoumaframe.dao.PropInfoMapper")
+public interface PropInfoMapper{
+    /*generatedStart*/
+    int deleteByPrimaryKey(Integer id);
+
+    int insertSelective(PropInfo record);
+
+    PropInfo selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(PropInfo record);
+
+    List<PropInfo> queryAllPropInfo(PropInfo record);
+
+    List<PropInfo> queryPropInfoByPage(Map<String, Object> parameter);
+
+    int delete(PropInfo record);
+
+    PropInfo queryPropInfo(PropInfo record);
+
+    List<PropInfo> query(PropInfo record);
+    /*generatedEnd*/
+
+}
+

+ 449 - 0
src/main/java/com/izouma/awesomeadmin/dao/PropInfoMapper.xml

@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.izouma.awesomeadmin.dao.PropInfoMapper">
+    <resultMap id="BaseResultMap" type="com.izouma.awesomeadmin.model.PropInfo">
+        <!--generatedStart-->
+        <id column="id" property="id" jdbcType="INTEGER"/>
+        <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <result column="update_user" property="updateUser" jdbcType="VARCHAR"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="create_user" property="createUser" jdbcType="VARCHAR"/>
+        <result column="name" property="name" jdbcType="VARCHAR"/>
+        <result column="icon" property="icon" jdbcType="VARCHAR"/>
+        <result column="money_coin" property="moneyCoin" jdbcType="INTEGER"/>
+        <result column="points_ratio" property="pointsRatio" jdbcType="FLOAT"/>
+        <result column="min_points" property="minPoints" jdbcType="INTEGER"/>
+        <result column="probability" property="probability" jdbcType="FLOAT"/>
+        <result column="type" property="type" jdbcType="INTEGER"/>
+        <!--generatedEnd-->
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        <!--generatedStart-->
+        id, del_flag, update_time, update_user, create_time, create_user, name, icon, money_coin, points_ratio, min_points, probability, type        <!--generatedEnd-->
+    </sql>
+
+    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM prop_info
+        WHERE id = #{id,jdbcType=INTEGER}
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+        DELETE
+        FROM prop_info
+        WHERE id = #{id,jdbcType=INTEGER}
+    </delete>
+
+    <insert id="insertSelective" parameterType="com.izouma.awesomeadmin.model.PropInfo" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO prop_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+            <if test="id!= null">
+                id,
+            </if>
+            <if test="delFlag!= null">
+                del_flag,
+            </if>
+            <if test="updateTime!= null">
+                update_time,
+            </if>
+            <if test="updateUser!= null">
+                update_user,
+            </if>
+            <if test="createTime!= null">
+                create_time,
+            </if>
+            <if test="createUser!= null">
+                create_user,
+            </if>
+            <if test="name!= null">
+                name,
+            </if>
+            <if test="icon!= null">
+                icon,
+            </if>
+            <if test="moneyCoin!= null">
+                money_coin,
+            </if>
+            <if test="pointsRatio!= null">
+                points_ratio,
+            </if>
+            <if test="minPoints!= null">
+                min_points,
+            </if>
+            <if test="probability!= null">
+                probability,
+            </if>
+            <if test="type!= null">
+                type,
+            </if>
+            <!--generatedEnd-->
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+            <if test="id != null">
+                #{id,jdbcType=INTEGER},
+            </if>
+            <if test="delFlag != null">
+                #{delFlag,jdbcType=CHAR},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="name != null">
+                #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="icon != null">
+                #{icon,jdbcType=VARCHAR},
+            </if>
+            <if test="moneyCoin != null">
+                #{moneyCoin,jdbcType=INTEGER},
+            </if>
+            <if test="pointsRatio != null">
+                #{pointsRatio,jdbcType=FLOAT},
+            </if>
+            <if test="minPoints != null">
+                #{minPoints,jdbcType=INTEGER},
+            </if>
+            <if test="probability != null">
+                #{probability,jdbcType=FLOAT},
+            </if>
+            <if test="type != null">
+                #{type,jdbcType=INTEGER},
+            </if>
+            <!--generatedEnd-->
+        </trim>
+    </insert>
+
+    <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.PropInfo">
+        UPDATE prop_info
+        <set>
+            <!--generatedStart-->
+            <if test="id != null">
+                id= #{id,jdbcType=INTEGER},
+            </if>
+            <if test="delFlag != null">
+                del_flag= #{delFlag,jdbcType=CHAR},
+            </if>
+            <if test="updateTime != null">
+                update_time= #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                update_user= #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                create_time= #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                create_user= #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="name != null">
+                name= #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="icon != null">
+                icon= #{icon,jdbcType=VARCHAR},
+            </if>
+            <if test="moneyCoin != null">
+                money_coin= #{moneyCoin,jdbcType=INTEGER},
+            </if>
+            <if test="pointsRatio != null">
+                points_ratio= #{pointsRatio,jdbcType=FLOAT},
+            </if>
+            <if test="minPoints != null">
+                min_points= #{minPoints,jdbcType=INTEGER},
+            </if>
+            <if test="probability != null">
+                probability= #{probability,jdbcType=FLOAT},
+            </if>
+            <if test="type != null">
+                type= #{type,jdbcType=INTEGER},
+            </if>
+            <!--generatedEnd-->
+        </set>
+        WHERE
+        <if test="id != null and !&quot;&quot;.equals(id)">
+            id = #{id,jdbcType=INTEGER}
+        </if>
+        <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+            id IN (${idStr})
+        </if>
+    </update>
+
+    <select id="queryPropInfoByPage" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.PropInfo">
+        SELECT <include refid="Base_Column_List"/> FROM prop_info
+        <where>
+            AND del_flag = 'N'
+            <if test="record.idStr != null and !&quot;&quot;.equals(record.idStr)">
+                AND id IN (${record.idStr})
+            </if>
+            <!--generatedStart-->
+            <if test="record.id != null and !&quot;&quot;.equals(record.id)">
+                AND id = #{record.id}
+            </if>
+            <if test="record.delFlag != null and !&quot;&quot;.equals(record.delFlag)">
+                AND del_flag = #{record.delFlag}
+            </if>
+            <if test="record.updateTime != null and !&quot;&quot;.equals(record.updateTime)">
+                AND update_time = #{record.updateTime}
+            </if>
+            <if test="record.updateUser != null and !&quot;&quot;.equals(record.updateUser)">
+                AND update_user = #{record.updateUser}
+            </if>
+            <if test="record.createTime != null and !&quot;&quot;.equals(record.createTime)">
+                AND create_time = #{record.createTime}
+            </if>
+            <if test="record.createUser != null and !&quot;&quot;.equals(record.createUser)">
+                AND create_user = #{record.createUser}
+            </if>
+            <if test="record.name != null and !&quot;&quot;.equals(record.name)">
+                AND name = #{record.name}
+            </if>
+            <if test="record.icon != null and !&quot;&quot;.equals(record.icon)">
+                AND icon = #{record.icon}
+            </if>
+            <if test="record.moneyCoin != null and !&quot;&quot;.equals(record.moneyCoin)">
+                AND money_coin = #{record.moneyCoin}
+            </if>
+            <if test="record.pointsRatio != null and !&quot;&quot;.equals(record.pointsRatio)">
+                AND points_ratio = #{record.pointsRatio}
+            </if>
+            <if test="record.minPoints != null and !&quot;&quot;.equals(record.minPoints)">
+                AND min_points = #{record.minPoints}
+            </if>
+            <if test="record.probability != null and !&quot;&quot;.equals(record.probability)">
+                AND probability = #{record.probability}
+            </if>
+            <if test="record.type != null and !&quot;&quot;.equals(record.type)">
+                AND type = #{record.type}
+            </if>
+            <!--generatedEnd-->
+            <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+                    OR name LIKE concat('%',#{record.searchKey},'%')
+                    <!--generatedEnd-->
+                </trim>
+            </if>
+
+            <if test="record.advancedQuery != null and !&quot;&quot;.equals(record.advancedQuery)">
+                <foreach item="item" index="index" collection="record.advancedQuery.split('_;')">
+                    <choose>
+                        <when test="item.indexOf('like') != -1">
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    concat('%',#{itemDetail},'%')
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </when>
+                        <otherwise>
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    #{itemDetail}
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </otherwise>
+                    </choose>
+                </foreach>
+            </if>
+        </where>
+        ORDER BY
+        <if test="record.orderByStr != null and !&quot;&quot;.equals(record.orderByStr)">
+            <trim suffixOverrides=",">
+                <foreach item="item" index="index" separator="," collection="record.orderByStr.split('_;')">
+                    <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                        ${itemDetail}
+                    </foreach>
+                </foreach>
+            </trim>
+            ,
+        </if>
+        id DESC
+    </select>
+
+    <select id="queryAllPropInfo" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.PropInfo">
+        SELECT <include refid="Base_Column_List"/> FROM prop_info
+        <where>
+            AND del_flag = 'N'
+            <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+                AND id IN (${idStr})
+            </if>
+            <!--generatedStart-->
+            <if test="id != null and !&quot;&quot;.equals(id)">
+                AND id = #{id}
+            </if>
+            <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
+                AND del_flag = #{delFlag}
+            </if>
+            <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
+                AND update_time = #{updateTime}
+            </if>
+            <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
+                AND update_user = #{updateUser}
+            </if>
+            <if test="createTime != null and !&quot;&quot;.equals(createTime)">
+                AND create_time = #{createTime}
+            </if>
+            <if test="createUser != null and !&quot;&quot;.equals(createUser)">
+                AND create_user = #{createUser}
+            </if>
+            <if test="name != null and !&quot;&quot;.equals(name)">
+                AND name = #{name}
+            </if>
+            <if test="icon != null and !&quot;&quot;.equals(icon)">
+                AND icon = #{icon}
+            </if>
+            <if test="moneyCoin != null and !&quot;&quot;.equals(moneyCoin)">
+                AND money_coin = #{moneyCoin}
+            </if>
+            <if test="pointsRatio != null and !&quot;&quot;.equals(pointsRatio)">
+                AND points_ratio = #{pointsRatio}
+            </if>
+            <if test="minPoints != null and !&quot;&quot;.equals(minPoints)">
+                AND min_points = #{minPoints}
+            </if>
+            <if test="probability != null and !&quot;&quot;.equals(probability)">
+                AND probability = #{probability}
+            </if>
+            <if test="type != null and !&quot;&quot;.equals(type)">
+                AND type = #{type}
+            </if>
+            <!--generatedEnd-->
+            <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+                    OR name LIKE concat('%',#{searchKey},'%')
+                    <!--generatedEnd-->
+                </trim>
+            </if>
+            <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
+                <foreach item="item" index="index" collection="advancedQuery.split('_;')">
+                    <choose>
+                        <when test="item.indexOf('like') != -1">
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    concat('%',#{itemDetail},'%')
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </when>
+                        <otherwise>
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    #{itemDetail}
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </otherwise>
+                    </choose>
+                </foreach>
+            </if>
+        </where>
+        ORDER BY
+        <if test="orderByStr != null and !&quot;&quot;.equals(orderByStr)">
+            <trim suffixOverrides=",">
+                <foreach item="item" index="index" separator="," collection="orderByStr.split('_;')">
+                    <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                        ${itemDetail}
+                    </foreach>
+                </foreach>
+            </trim>
+            ,
+        </if>
+        id DESC
+    </select>
+
+    <select id="queryPropInfo" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.PropInfo">
+        SELECT <include refid="Base_Column_List"/> FROM prop_info
+        <where>
+            AND del_flag = 'N'
+            <!--generatedStart-->
+            <if test="id != null and !&quot;&quot;.equals(id)">
+                AND id = #{id}
+            </if>
+            <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
+                AND del_flag = #{delFlag}
+            </if>
+            <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
+                AND update_time = #{updateTime}
+            </if>
+            <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
+                AND update_user = #{updateUser}
+            </if>
+            <if test="createTime != null and !&quot;&quot;.equals(createTime)">
+                AND create_time = #{createTime}
+            </if>
+            <if test="createUser != null and !&quot;&quot;.equals(createUser)">
+                AND create_user = #{createUser}
+            </if>
+            <if test="name != null and !&quot;&quot;.equals(name)">
+                AND name = #{name}
+            </if>
+            <if test="icon != null and !&quot;&quot;.equals(icon)">
+                AND icon = #{icon}
+            </if>
+            <if test="moneyCoin != null and !&quot;&quot;.equals(moneyCoin)">
+                AND money_coin = #{moneyCoin}
+            </if>
+            <if test="pointsRatio != null and !&quot;&quot;.equals(pointsRatio)">
+                AND points_ratio = #{pointsRatio}
+            </if>
+            <if test="minPoints != null and !&quot;&quot;.equals(minPoints)">
+                AND min_points = #{minPoints}
+            </if>
+            <if test="probability != null and !&quot;&quot;.equals(probability)">
+                AND probability = #{probability}
+            </if>
+            <if test="type != null and !&quot;&quot;.equals(type)">
+                AND type = #{type}
+            </if>
+            <!--generatedEnd-->
+        </where>
+        LIMIT 1
+    </select>
+
+    <update id="delete">
+        UPDATE prop_info SET del_flag = 'Y'
+        WHERE
+        <if test="id != null and !&quot;&quot;.equals(id)">
+            id = #{id,jdbcType=INTEGER}
+        </if>
+        <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+            id IN (${idStr})
+        </if>
+    </update>
+
+    <select id="query" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.PropInfo">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM prop_info
+        <where>
+            AND del_flag = 'N'
+            <!--generatedStart-->
+            <!--generatedEnd-->
+        </where>
+        ORDER BY id DESC
+    </select>
+</mapper>
+

+ 2 - 1
src/main/java/com/izouma/awesomeadmin/dao/SystemNoticeMapper.java

@@ -11,7 +11,7 @@ import com.izouma.awesomeadmin.model.SystemNotice;
 */
 @Repository("com.zoumaframe.dao.SystemNoticeMapper")
 public interface SystemNoticeMapper{
-
+    /*generatedStart*/
     int deleteByPrimaryKey(Integer id);
 
     int insertSelective(SystemNotice record);
@@ -29,6 +29,7 @@ public interface SystemNoticeMapper{
     SystemNotice querySystemNotice(SystemNotice record);
 
     List<SystemNotice> query(SystemNotice record);
+    /*generatedEnd*/
 
     int receiveBonus(SystemNotice systemNotice);
 

+ 85 - 88
src/main/java/com/izouma/awesomeadmin/dao/SystemNoticeMapper.xml

@@ -2,6 +2,7 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 <mapper namespace="com.izouma.awesomeadmin.dao.SystemNoticeMapper">
     <resultMap id="BaseResultMap" type="com.izouma.awesomeadmin.model.SystemNotice">
+        <!--generatedStart-->
         <id column="id" property="id" jdbcType="INTEGER"/>
         <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
         <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
@@ -17,44 +18,12 @@
         <result column="content" property="content" jdbcType="VARCHAR"/>
         <result column="season_id" property="seasonId" jdbcType="INTEGER"/>
         <result column="player_id" property="playerId" jdbcType="INTEGER"/>
-        <result column="bonus" property="bonus" jdbcType="DECIMAL"/>
-
+        <result column="competition_id" property="competitionId" jdbcType="INTEGER"/>
+        <!--generatedEnd-->
     </resultMap>
     <sql id="Base_Column_List">
-        <trim suffixOverrides=",">
-            id,
-
-            del_flag,
-
-            update_time,
-
-            update_user,
-
-            create_time,
-
-            create_user,
-
-            game_id,
-
-            house_id,
-
-            user_id,
-
-            remark,
-
-            type_flag,
-
-            status_flag,
-
-            content,
-
-            season_id,
-
-            player_id,
-
-            bonus,
-
-        </trim>
+        <!--generatedStart-->
+        id, del_flag, update_time, update_user, create_time, create_user, game_id, house_id, user_id, remark, type_flag, status_flag, content, season_id, player_id, competition_id        <!--generatedEnd-->
     </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
         select
@@ -70,6 +39,7 @@
             keyProperty="id">
         insert into system_notice
         <trim prefix="(" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
             <if test="id!= null">
                 id,
             </if>
@@ -115,11 +85,13 @@
             <if test="playerId!= null">
                 player_id,
             </if>
-            <if test="bonus!= null">
-                bonus,
+            <if test="competitionId!= null">
+                competition_id,
             </if>
+            <!--generatedEnd-->
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
             <if test="id != null">
                 #{id,jdbcType=INTEGER},
             </if>
@@ -165,14 +137,16 @@
             <if test="playerId != null">
                 #{playerId,jdbcType=INTEGER},
             </if>
-            <if test="bonus != null">
-                #{bonus},
+            <if test="competitionId != null">
+                #{competitionId,jdbcType=INTEGER},
             </if>
+            <!--generatedEnd-->
         </trim>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.SystemNotice">
         update system_notice
         <set>
+            <!--generatedStart-->
             <if test="id != null">
                 id= #{id,jdbcType=INTEGER},
             </if>
@@ -218,9 +192,10 @@
             <if test="playerId != null">
                 player_id= #{playerId,jdbcType=INTEGER},
             </if>
-            <if test="bonus != null">
-                bonus= #{bonus},
+            <if test="competitionId != null">
+                competition_id= #{competitionId,jdbcType=INTEGER},
             </if>
+            <!--generatedEnd-->
         </set>
         where
         <if test="id != null and !&quot;&quot;.equals(id)">
@@ -242,53 +217,59 @@
             <if test="record.idStr != null and !&quot;&quot;.equals(record.idStr)">
                 and id in (${record.idStr})
             </if>
+            <!--generatedStart-->
             <if test="record.id != null and !&quot;&quot;.equals(record.id)">
-                and id = #{record.id}
+                AND id = #{record.id}
             </if>
             <if test="record.delFlag != null and !&quot;&quot;.equals(record.delFlag)">
-                and del_flag = #{record.delFlag}
+                AND del_flag = #{record.delFlag}
             </if>
             <if test="record.updateTime != null and !&quot;&quot;.equals(record.updateTime)">
-                and update_time = #{record.updateTime}
+                AND update_time = #{record.updateTime}
             </if>
             <if test="record.updateUser != null and !&quot;&quot;.equals(record.updateUser)">
-                and update_user = #{record.updateUser}
+                AND update_user = #{record.updateUser}
             </if>
             <if test="record.createTime != null and !&quot;&quot;.equals(record.createTime)">
-                and create_time = #{record.createTime}
+                AND create_time = #{record.createTime}
             </if>
             <if test="record.createUser != null and !&quot;&quot;.equals(record.createUser)">
-                and create_user = #{record.createUser}
+                AND create_user = #{record.createUser}
             </if>
             <if test="record.gameId != null and !&quot;&quot;.equals(record.gameId)">
-                and game_id = #{record.gameId}
+                AND game_id = #{record.gameId}
             </if>
             <if test="record.houseId != null and !&quot;&quot;.equals(record.houseId)">
-                and house_id = #{record.houseId}
+                AND house_id = #{record.houseId}
             </if>
             <if test="record.userId != null and !&quot;&quot;.equals(record.userId)">
-                and user_id = #{record.userId}
+                AND user_id = #{record.userId}
             </if>
             <if test="record.remark != null and !&quot;&quot;.equals(record.remark)">
-                and remark = #{record.remark}
+                AND remark = #{record.remark}
             </if>
             <if test="record.typeFlag != null and !&quot;&quot;.equals(record.typeFlag)">
-                and type_flag = #{record.typeFlag}
+                AND type_flag = #{record.typeFlag}
             </if>
             <if test="record.statusFlag != null and !&quot;&quot;.equals(record.statusFlag)">
-                and status_flag = #{record.statusFlag}
+                AND status_flag = #{record.statusFlag}
             </if>
             <if test="record.content != null and !&quot;&quot;.equals(record.content)">
-                and content = #{record.content}
+                AND content = #{record.content}
             </if>
             <if test="record.seasonId != null and !&quot;&quot;.equals(record.seasonId)">
-                and season_id = #{record.seasonId}
+                AND season_id = #{record.seasonId}
             </if>
             <if test="record.playerId != null and !&quot;&quot;.equals(record.playerId)">
-                and player_id = #{record.playerId}
+                AND player_id = #{record.playerId}
+            </if>
+            <if test="record.competitionId != null and !&quot;&quot;.equals(record.competitionId)">
+                AND competition_id = #{record.competitionId}
             </if>
+            <!--generatedEnd-->
             <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
                     OR game_id LIKE concat('%',#{record.searchKey},'%')
                     OR house_id LIKE concat('%',#{record.searchKey},'%')
                     OR user_id LIKE concat('%',#{record.searchKey},'%')
@@ -298,6 +279,8 @@
                     OR content LIKE concat('%',#{record.searchKey},'%')
                     OR season_id LIKE concat('%',#{record.searchKey},'%')
                     OR player_id LIKE concat('%',#{record.searchKey},'%')
+                    OR competition_id LIKE concat('%',#{record.searchKey},'%')
+                    <!--generatedEnd-->
                 </trim>
             </if>
 
@@ -363,53 +346,59 @@
             <if test="idStr != null and !&quot;&quot;.equals(idStr)">
                 and id in (${idStr})
             </if>
+            <!--generatedStart-->
             <if test="id != null and !&quot;&quot;.equals(id)">
-                and id = #{id}
+                AND id = #{id}
             </if>
             <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
-                and del_flag = #{delFlag}
+                AND del_flag = #{delFlag}
             </if>
             <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
-                and update_time = #{updateTime}
+                AND update_time = #{updateTime}
             </if>
             <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
-                and update_user = #{updateUser}
+                AND update_user = #{updateUser}
             </if>
             <if test="createTime != null and !&quot;&quot;.equals(createTime)">
-                and create_time = #{createTime}
+                AND create_time = #{createTime}
             </if>
             <if test="createUser != null and !&quot;&quot;.equals(createUser)">
-                and create_user = #{createUser}
+                AND create_user = #{createUser}
             </if>
             <if test="gameId != null and !&quot;&quot;.equals(gameId)">
-                and game_id = #{gameId}
+                AND game_id = #{gameId}
             </if>
             <if test="houseId != null and !&quot;&quot;.equals(houseId)">
-                and house_id = #{houseId}
+                AND house_id = #{houseId}
             </if>
             <if test="userId != null and !&quot;&quot;.equals(userId)">
-                and user_id = #{userId}
+                AND user_id = #{userId}
             </if>
             <if test="remark != null and !&quot;&quot;.equals(remark)">
-                and remark = #{remark}
+                AND remark = #{remark}
             </if>
             <if test="typeFlag != null and !&quot;&quot;.equals(typeFlag)">
-                and type_flag = #{typeFlag}
+                AND type_flag = #{typeFlag}
             </if>
             <if test="statusFlag != null and !&quot;&quot;.equals(statusFlag)">
-                and status_flag = #{statusFlag}
+                AND status_flag = #{statusFlag}
             </if>
             <if test="content != null and !&quot;&quot;.equals(content)">
-                and content = #{content}
+                AND content = #{content}
             </if>
             <if test="seasonId != null and !&quot;&quot;.equals(seasonId)">
-                and season_id = #{seasonId}
+                AND season_id = #{seasonId}
             </if>
             <if test="playerId != null and !&quot;&quot;.equals(playerId)">
-                and player_id = #{playerId}
+                AND player_id = #{playerId}
+            </if>
+            <if test="competitionId != null and !&quot;&quot;.equals(competitionId)">
+                AND competition_id = #{competitionId}
             </if>
+            <!--generatedEnd-->
             <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
                 <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
                     OR game_id LIKE concat('%',#{searchKey},'%')
                     OR house_id LIKE concat('%',#{searchKey},'%')
                     OR user_id LIKE concat('%',#{searchKey},'%')
@@ -419,6 +408,8 @@
                     OR content LIKE concat('%',#{searchKey},'%')
                     OR season_id LIKE concat('%',#{searchKey},'%')
                     OR player_id LIKE concat('%',#{searchKey},'%')
+                    OR competition_id LIKE concat('%',#{searchKey},'%')
+                    <!--generatedEnd-->
                 </trim>
             </if>
             <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
@@ -480,52 +471,56 @@
         from system_notice
         <where>
             and del_flag = 'N'
+            <!--generatedStart-->
             <if test="id != null and !&quot;&quot;.equals(id)">
-                and id = #{id}
+                AND id = #{id}
             </if>
             <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
-                and del_flag = #{delFlag}
+                AND del_flag = #{delFlag}
             </if>
             <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
-                and update_time = #{updateTime}
+                AND update_time = #{updateTime}
             </if>
             <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
-                and update_user = #{updateUser}
+                AND update_user = #{updateUser}
             </if>
             <if test="createTime != null and !&quot;&quot;.equals(createTime)">
-                and create_time = #{createTime}
+                AND create_time = #{createTime}
             </if>
             <if test="createUser != null and !&quot;&quot;.equals(createUser)">
-                and create_user = #{createUser}
+                AND create_user = #{createUser}
             </if>
             <if test="gameId != null and !&quot;&quot;.equals(gameId)">
-                and game_id = #{gameId}
+                AND game_id = #{gameId}
             </if>
             <if test="houseId != null and !&quot;&quot;.equals(houseId)">
-                and house_id = #{houseId}
+                AND house_id = #{houseId}
             </if>
             <if test="userId != null and !&quot;&quot;.equals(userId)">
-                and user_id = #{userId}
+                AND user_id = #{userId}
             </if>
             <if test="remark != null and !&quot;&quot;.equals(remark)">
-                and remark = #{remark}
+                AND remark = #{remark}
             </if>
             <if test="typeFlag != null and !&quot;&quot;.equals(typeFlag)">
-                and type_flag = #{typeFlag}
+                AND type_flag = #{typeFlag}
             </if>
             <if test="statusFlag != null and !&quot;&quot;.equals(statusFlag)">
-                and status_flag = #{statusFlag}
+                AND status_flag = #{statusFlag}
             </if>
             <if test="content != null and !&quot;&quot;.equals(content)">
-                and content = #{content}
+                AND content = #{content}
             </if>
             <if test="seasonId != null and !&quot;&quot;.equals(seasonId)">
-                and season_id = #{seasonId}
+                AND season_id = #{seasonId}
             </if>
             <if test="playerId != null and !&quot;&quot;.equals(playerId)">
-                and player_id = #{playerId}
+                AND player_id = #{playerId}
             </if>
-
+            <if test="competitionId != null and !&quot;&quot;.equals(competitionId)">
+                AND competition_id = #{competitionId}
+            </if>
+            <!--generatedEnd-->
         </where>
         LIMIT 1
     </select>
@@ -546,6 +541,8 @@
         from system_notice
         <where>
             and del_flag = 'N'
+            <!--generatedStart-->
+            <!--generatedEnd-->
         </where>
         order by id desc
     </select>

+ 35 - 0
src/main/java/com/izouma/awesomeadmin/dao/UserPropMapper.java

@@ -0,0 +1,35 @@
+package com.izouma.awesomeadmin.dao;
+
+import java.util.*;
+import com.izouma.awesomeadmin.datasource.DataSource;
+import org.springframework.stereotype.Repository;
+import com.izouma.awesomeadmin.model.UserProp;
+
+
+/**
+*  Dao接口
+*/
+@Repository("com.zoumaframe.dao.UserPropMapper")
+public interface UserPropMapper{
+    /*generatedStart*/
+    int deleteByPrimaryKey(Integer id);
+
+    int insertSelective(UserProp record);
+
+    UserProp selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(UserProp record);
+
+    List<UserProp> queryAllUserProp(UserProp record);
+
+    List<UserProp> queryUserPropByPage(Map<String, Object> parameter);
+
+    int delete(UserProp record);
+
+    UserProp queryUserProp(UserProp record);
+
+    List<UserProp> query(UserProp record);
+    /*generatedEnd*/
+
+}
+

+ 489 - 0
src/main/java/com/izouma/awesomeadmin/dao/UserPropMapper.xml

@@ -0,0 +1,489 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.izouma.awesomeadmin.dao.UserPropMapper">
+    <resultMap id="BaseResultMap" type="com.izouma.awesomeadmin.model.UserProp">
+        <!--generatedStart-->
+        <id column="id" property="id" jdbcType="INTEGER"/>
+        <result column="del_flag" property="delFlag" jdbcType="CHAR"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
+        <result column="update_user" property="updateUser" jdbcType="VARCHAR"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
+        <result column="create_user" property="createUser" jdbcType="VARCHAR"/>
+        <result column="prop_id" property="propId" jdbcType="INTEGER"/>
+        <result column="name" property="name" jdbcType="VARCHAR"/>
+        <result column="icon" property="icon" jdbcType="VARCHAR"/>
+        <result column="points_ratio" property="pointsRatio" jdbcType="FLOAT"/>
+        <result column="min_points" property="minPoints" jdbcType="INTEGER"/>
+        <result column="probability" property="probability" jdbcType="FLOAT"/>
+        <result column="used" property="used" jdbcType="INTEGER"/>
+        <result column="user_id" property="userId" jdbcType="INTEGER"/>
+        <result column="type" property="type" jdbcType="INTEGER"/>
+        <!--generatedEnd-->
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        <!--generatedStart-->
+        id, del_flag, update_time, update_user, create_time, create_user, prop_id, name, icon, points_ratio, min_points, probability, used, user_id, type        <!--generatedEnd-->
+    </sql>
+
+    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM user_prop
+        WHERE id = #{id,jdbcType=INTEGER}
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+        DELETE
+        FROM user_prop
+        WHERE id = #{id,jdbcType=INTEGER}
+    </delete>
+
+    <insert id="insertSelective" parameterType="com.izouma.awesomeadmin.model.UserProp" useGeneratedKeys="true" keyProperty="id">
+        INSERT INTO user_prop
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+            <if test="id!= null">
+                id,
+            </if>
+            <if test="delFlag!= null">
+                del_flag,
+            </if>
+            <if test="updateTime!= null">
+                update_time,
+            </if>
+            <if test="updateUser!= null">
+                update_user,
+            </if>
+            <if test="createTime!= null">
+                create_time,
+            </if>
+            <if test="createUser!= null">
+                create_user,
+            </if>
+            <if test="propId!= null">
+                prop_id,
+            </if>
+            <if test="name!= null">
+                name,
+            </if>
+            <if test="icon!= null">
+                icon,
+            </if>
+            <if test="pointsRatio!= null">
+                points_ratio,
+            </if>
+            <if test="minPoints!= null">
+                min_points,
+            </if>
+            <if test="probability!= null">
+                probability,
+            </if>
+            <if test="used!= null">
+                used,
+            </if>
+            <if test="userId!= null">
+                user_id,
+            </if>
+            <if test="type!= null">
+                type,
+            </if>
+            <!--generatedEnd-->
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <!--generatedStart-->
+            <if test="id != null">
+                #{id,jdbcType=INTEGER},
+            </if>
+            <if test="delFlag != null">
+                #{delFlag,jdbcType=CHAR},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="propId != null">
+                #{propId,jdbcType=INTEGER},
+            </if>
+            <if test="name != null">
+                #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="icon != null">
+                #{icon,jdbcType=VARCHAR},
+            </if>
+            <if test="pointsRatio != null">
+                #{pointsRatio,jdbcType=FLOAT},
+            </if>
+            <if test="minPoints != null">
+                #{minPoints,jdbcType=INTEGER},
+            </if>
+            <if test="probability != null">
+                #{probability,jdbcType=FLOAT},
+            </if>
+            <if test="used != null">
+                #{used,jdbcType=INTEGER},
+            </if>
+            <if test="userId != null">
+                #{userId,jdbcType=INTEGER},
+            </if>
+            <if test="type != null">
+                #{type,jdbcType=INTEGER},
+            </if>
+            <!--generatedEnd-->
+        </trim>
+    </insert>
+
+    <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.UserProp">
+        UPDATE user_prop
+        <set>
+            <!--generatedStart-->
+            <if test="id != null">
+                id= #{id,jdbcType=INTEGER},
+            </if>
+            <if test="delFlag != null">
+                del_flag= #{delFlag,jdbcType=CHAR},
+            </if>
+            <if test="updateTime != null">
+                update_time= #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                update_user= #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                create_time= #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                create_user= #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="propId != null">
+                prop_id= #{propId,jdbcType=INTEGER},
+            </if>
+            <if test="name != null">
+                name= #{name,jdbcType=VARCHAR},
+            </if>
+            <if test="icon != null">
+                icon= #{icon,jdbcType=VARCHAR},
+            </if>
+            <if test="pointsRatio != null">
+                points_ratio= #{pointsRatio,jdbcType=FLOAT},
+            </if>
+            <if test="minPoints != null">
+                min_points= #{minPoints,jdbcType=INTEGER},
+            </if>
+            <if test="probability != null">
+                probability= #{probability,jdbcType=FLOAT},
+            </if>
+            <if test="used != null">
+                used= #{used,jdbcType=INTEGER},
+            </if>
+            <if test="userId != null">
+                user_id= #{userId,jdbcType=INTEGER},
+            </if>
+            <if test="type != null">
+                type= #{type,jdbcType=INTEGER},
+            </if>
+            <!--generatedEnd-->
+        </set>
+        WHERE
+        <if test="id != null and !&quot;&quot;.equals(id)">
+            id = #{id,jdbcType=INTEGER}
+        </if>
+        <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+            id IN (${idStr})
+        </if>
+    </update>
+
+    <select id="queryUserPropByPage" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserProp">
+        SELECT <include refid="Base_Column_List"/> FROM user_prop
+        <where>
+            AND del_flag = 'N'
+            <if test="record.idStr != null and !&quot;&quot;.equals(record.idStr)">
+                AND id IN (${record.idStr})
+            </if>
+            <!--generatedStart-->
+            <if test="record.id != null and !&quot;&quot;.equals(record.id)">
+                AND id = #{record.id}
+            </if>
+            <if test="record.delFlag != null and !&quot;&quot;.equals(record.delFlag)">
+                AND del_flag = #{record.delFlag}
+            </if>
+            <if test="record.updateTime != null and !&quot;&quot;.equals(record.updateTime)">
+                AND update_time = #{record.updateTime}
+            </if>
+            <if test="record.updateUser != null and !&quot;&quot;.equals(record.updateUser)">
+                AND update_user = #{record.updateUser}
+            </if>
+            <if test="record.createTime != null and !&quot;&quot;.equals(record.createTime)">
+                AND create_time = #{record.createTime}
+            </if>
+            <if test="record.createUser != null and !&quot;&quot;.equals(record.createUser)">
+                AND create_user = #{record.createUser}
+            </if>
+            <if test="record.propId != null and !&quot;&quot;.equals(record.propId)">
+                AND prop_id = #{record.propId}
+            </if>
+            <if test="record.name != null and !&quot;&quot;.equals(record.name)">
+                AND name = #{record.name}
+            </if>
+            <if test="record.icon != null and !&quot;&quot;.equals(record.icon)">
+                AND icon = #{record.icon}
+            </if>
+            <if test="record.pointsRatio != null and !&quot;&quot;.equals(record.pointsRatio)">
+                AND points_ratio = #{record.pointsRatio}
+            </if>
+            <if test="record.minPoints != null and !&quot;&quot;.equals(record.minPoints)">
+                AND min_points = #{record.minPoints}
+            </if>
+            <if test="record.probability != null and !&quot;&quot;.equals(record.probability)">
+                AND probability = #{record.probability}
+            </if>
+            <if test="record.used != null and !&quot;&quot;.equals(record.used)">
+                AND used = #{record.used}
+            </if>
+            <if test="record.userId != null and !&quot;&quot;.equals(record.userId)">
+                AND user_id = #{record.userId}
+            </if>
+            <if test="record.type != null and !&quot;&quot;.equals(record.type)">
+                AND type = #{record.type}
+            </if>
+            <!--generatedEnd-->
+            <if test="record.searchKey != null and !&quot;&quot;.equals(record.searchKey)">
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+                    OR prop_id LIKE concat('%',#{record.searchKey},'%')
+                    OR name LIKE concat('%',#{record.searchKey},'%')
+                    <!--generatedEnd-->
+                </trim>
+            </if>
+
+            <if test="record.advancedQuery != null and !&quot;&quot;.equals(record.advancedQuery)">
+                <foreach item="item" index="index" collection="record.advancedQuery.split('_;')">
+                    <choose>
+                        <when test="item.indexOf('like') != -1">
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    concat('%',#{itemDetail},'%')
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </when>
+                        <otherwise>
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    #{itemDetail}
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </otherwise>
+                    </choose>
+                </foreach>
+            </if>
+        </where>
+        ORDER BY
+        <if test="record.orderByStr != null and !&quot;&quot;.equals(record.orderByStr)">
+            <trim suffixOverrides=",">
+                <foreach item="item" index="index" separator="," collection="record.orderByStr.split('_;')">
+                    <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                        ${itemDetail}
+                    </foreach>
+                </foreach>
+            </trim>
+            ,
+        </if>
+        id DESC
+    </select>
+
+    <select id="queryAllUserProp" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserProp">
+        SELECT <include refid="Base_Column_List"/> FROM user_prop
+        <where>
+            AND del_flag = 'N'
+            <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+                AND id IN (${idStr})
+            </if>
+            <!--generatedStart-->
+            <if test="id != null and !&quot;&quot;.equals(id)">
+                AND id = #{id}
+            </if>
+            <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
+                AND del_flag = #{delFlag}
+            </if>
+            <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
+                AND update_time = #{updateTime}
+            </if>
+            <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
+                AND update_user = #{updateUser}
+            </if>
+            <if test="createTime != null and !&quot;&quot;.equals(createTime)">
+                AND create_time = #{createTime}
+            </if>
+            <if test="createUser != null and !&quot;&quot;.equals(createUser)">
+                AND create_user = #{createUser}
+            </if>
+            <if test="propId != null and !&quot;&quot;.equals(propId)">
+                AND prop_id = #{propId}
+            </if>
+            <if test="name != null and !&quot;&quot;.equals(name)">
+                AND name = #{name}
+            </if>
+            <if test="icon != null and !&quot;&quot;.equals(icon)">
+                AND icon = #{icon}
+            </if>
+            <if test="pointsRatio != null and !&quot;&quot;.equals(pointsRatio)">
+                AND points_ratio = #{pointsRatio}
+            </if>
+            <if test="minPoints != null and !&quot;&quot;.equals(minPoints)">
+                AND min_points = #{minPoints}
+            </if>
+            <if test="probability != null and !&quot;&quot;.equals(probability)">
+                AND probability = #{probability}
+            </if>
+            <if test="used != null and !&quot;&quot;.equals(used)">
+                AND used = #{used}
+            </if>
+            <if test="userId != null and !&quot;&quot;.equals(userId)">
+                AND user_id = #{userId}
+            </if>
+            <if test="type != null and !&quot;&quot;.equals(type)">
+                AND type = #{type}
+            </if>
+            <!--generatedEnd-->
+            <if test="searchKey != null and !&quot;&quot;.equals(searchKey)">
+                <trim prefix="and (" suffix=")" prefixOverrides="OR">
+                    <!--generatedStart-->
+                    OR prop_id LIKE concat('%',#{searchKey},'%')
+                    OR name LIKE concat('%',#{searchKey},'%')
+                    <!--generatedEnd-->
+                </trim>
+            </if>
+            <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
+                <foreach item="item" index="index" collection="advancedQuery.split('_;')">
+                    <choose>
+                        <when test="item.indexOf('like') != -1">
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    concat('%',#{itemDetail},'%')
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </when>
+                        <otherwise>
+                            <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                                <if test="detailIndex == 3">
+                                    #{itemDetail}
+                                </if>
+                                <if test="detailIndex &lt; 3">
+                                    ${itemDetail}
+                                </if>
+                            </foreach>
+                        </otherwise>
+                    </choose>
+                </foreach>
+            </if>
+        </where>
+        ORDER BY
+        <if test="orderByStr != null and !&quot;&quot;.equals(orderByStr)">
+            <trim suffixOverrides=",">
+                <foreach item="item" index="index" separator="," collection="orderByStr.split('_;')">
+                    <foreach item="itemDetail" index="detailIndex" collection="item.split('_,')">
+                        ${itemDetail}
+                    </foreach>
+                </foreach>
+            </trim>
+            ,
+        </if>
+        id DESC
+    </select>
+
+    <select id="queryUserProp" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserProp">
+        SELECT <include refid="Base_Column_List"/> FROM user_prop
+        <where>
+            AND del_flag = 'N'
+            <!--generatedStart-->
+            <if test="id != null and !&quot;&quot;.equals(id)">
+                AND id = #{id}
+            </if>
+            <if test="delFlag != null and !&quot;&quot;.equals(delFlag)">
+                AND del_flag = #{delFlag}
+            </if>
+            <if test="updateTime != null and !&quot;&quot;.equals(updateTime)">
+                AND update_time = #{updateTime}
+            </if>
+            <if test="updateUser != null and !&quot;&quot;.equals(updateUser)">
+                AND update_user = #{updateUser}
+            </if>
+            <if test="createTime != null and !&quot;&quot;.equals(createTime)">
+                AND create_time = #{createTime}
+            </if>
+            <if test="createUser != null and !&quot;&quot;.equals(createUser)">
+                AND create_user = #{createUser}
+            </if>
+            <if test="propId != null and !&quot;&quot;.equals(propId)">
+                AND prop_id = #{propId}
+            </if>
+            <if test="name != null and !&quot;&quot;.equals(name)">
+                AND name = #{name}
+            </if>
+            <if test="icon != null and !&quot;&quot;.equals(icon)">
+                AND icon = #{icon}
+            </if>
+            <if test="pointsRatio != null and !&quot;&quot;.equals(pointsRatio)">
+                AND points_ratio = #{pointsRatio}
+            </if>
+            <if test="minPoints != null and !&quot;&quot;.equals(minPoints)">
+                AND min_points = #{minPoints}
+            </if>
+            <if test="probability != null and !&quot;&quot;.equals(probability)">
+                AND probability = #{probability}
+            </if>
+            <if test="used != null and !&quot;&quot;.equals(used)">
+                AND used = #{used}
+            </if>
+            <if test="userId != null and !&quot;&quot;.equals(userId)">
+                AND user_id = #{userId}
+            </if>
+            <if test="type != null and !&quot;&quot;.equals(type)">
+                AND type = #{type}
+            </if>
+            <!--generatedEnd-->
+        </where>
+        LIMIT 1
+    </select>
+
+    <update id="delete">
+        UPDATE user_prop SET del_flag = 'Y'
+        WHERE
+        <if test="id != null and !&quot;&quot;.equals(id)">
+            id = #{id,jdbcType=INTEGER}
+        </if>
+        <if test="idStr != null and !&quot;&quot;.equals(idStr)">
+            id IN (${idStr})
+        </if>
+    </update>
+
+    <select id="query" parameterType="java.util.Map" resultType="com.izouma.awesomeadmin.model.UserProp">
+        SELECT
+        <include refid="Base_Column_List"/>
+        FROM user_prop
+        <where>
+            AND del_flag = 'N'
+            <!--generatedStart-->
+            <!--generatedEnd-->
+        </where>
+        ORDER BY id DESC
+    </select>
+</mapper>
+

+ 8 - 0
src/main/java/com/izouma/awesomeadmin/model/Competition.java

@@ -23,6 +23,7 @@ public class Competition {
     private Integer bonus;
     private Integer status;
     private String intro;
+    private Integer gameId;
 
     private String idStr;
 
@@ -133,6 +134,13 @@ public class Competition {
     public void setIntro(String intro){
         this.intro = intro;
     }
+    public Integer getGameId(){
+        return this.gameId;
+    }
+
+    public void setGameId(Integer gameId){
+        this.gameId = gameId;
+    }
 
     public String getSearchKey() {
         return searchKey;

+ 168 - 0
src/main/java/com/izouma/awesomeadmin/model/PropInfo.java

@@ -0,0 +1,168 @@
+package com.izouma.awesomeadmin.model;
+
+import java.util.*;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+
+@JsonAutoDetect
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class PropInfo{
+    /*generatedStart*/
+    private Integer id;
+    private String delFlag;
+    private Date updateTime;
+    private String updateUser;
+    private Date createTime;
+    private String createUser;
+    private String name;
+    private String icon;
+    private Integer moneyCoin;
+    private Double pointsRatio;
+    private Integer minPoints;
+    private Double probability;
+    private Integer type;
+
+    private String idStr;
+
+    private String searchKey;
+
+    /**
+    * and,test_name,like,value;or,remark,=,123
+    */
+    private String advancedQuery;
+
+    /**
+    * column_name_,desc_;column_name_,asc
+    */
+    private String orderByStr;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    public Integer getId(){
+        return this.id;
+    }
+
+    public void setId(Integer id){
+        this.id = id;
+    }
+    public String getDelFlag(){
+        return this.delFlag;
+    }
+
+    public void setDelFlag(String delFlag){
+        this.delFlag = delFlag;
+    }
+    public Date getUpdateTime(){
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime){
+        this.updateTime = updateTime;
+    }
+    public String getUpdateUser(){
+        return this.updateUser;
+    }
+
+    public void setUpdateUser(String updateUser){
+        this.updateUser = updateUser;
+    }
+    public Date getCreateTime(){
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime){
+        this.createTime = createTime;
+    }
+    public String getCreateUser(){
+        return this.createUser;
+    }
+
+    public void setCreateUser(String createUser){
+        this.createUser = createUser;
+    }
+    public String getName(){
+        return this.name;
+    }
+
+    public void setName(String name){
+        this.name = name;
+    }
+    public String getIcon(){
+        return this.icon;
+    }
+
+    public void setIcon(String icon){
+        this.icon = icon;
+    }
+    public Integer getMoneyCoin(){
+        return this.moneyCoin;
+    }
+
+    public void setMoneyCoin(Integer moneyCoin){
+        this.moneyCoin = moneyCoin;
+    }
+    public Double getPointsRatio(){
+        return this.pointsRatio;
+    }
+
+    public void setPointsRatio(Double pointsRatio){
+        this.pointsRatio = pointsRatio;
+    }
+    public Integer getMinPoints(){
+        return this.minPoints;
+    }
+
+    public void setMinPoints(Integer minPoints){
+        this.minPoints = minPoints;
+    }
+    public Double getProbability(){
+        return this.probability;
+    }
+
+    public void setProbability(Double probability){
+        this.probability = probability;
+    }
+    public Integer getType(){
+        return this.type;
+    }
+
+    public void setType(Integer type){
+        this.type = type;
+    }
+
+    public String getSearchKey() {
+        return searchKey;
+    }
+
+    public void setSearchKey(String searchKey) {
+        this.searchKey = searchKey;
+    }
+
+    public String getAdvancedQuery() {
+        return advancedQuery;
+    }
+
+    public void setAdvancedQuery(String advancedQuery) {
+        this.advancedQuery = advancedQuery;
+    }
+
+    public String getOrderByStr() {
+        return orderByStr;
+    }
+
+    public void setOrderByStr(String orderByStr) {
+        this.orderByStr = orderByStr;
+    }
+
+    public String getIdStr() {
+        return idStr;
+    }
+
+    public void setIdStr(String idStr) {
+        this.idStr = idStr;
+    }
+    /*generatedEnd*/
+
+}
+

+ 24 - 16
src/main/java/com/izouma/awesomeadmin/model/SystemNotice.java

@@ -10,30 +10,23 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonAutoDetect
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class SystemNotice {
+    /*generatedStart*/
     private Integer id;
-    private String delFlag;
-    private Date updateTime;
-    private String updateUser;
-    private Date createTime;
-    private String createUser;
+    private String  delFlag;
+    private Date    updateTime;
+    private String  updateUser;
+    private Date    createTime;
+    private String  createUser;
     private Integer gameId;
     private Integer houseId;
     private Integer userId;
-    private String remark;
+    private String  remark;
     private Integer typeFlag;
     private Integer statusFlag;
-    private String content;
+    private String  content;
     private Integer seasonId;
     private Integer playerId;
-
-    private GameInfo gameInfo;
-
-    private UserInfo userInfo;
-
-    private HouseInfo houseInfo;
-
-    private PlayerInfo playerInfo;
-
+    private Integer competitionId;
 
     private String idStr;
 
@@ -48,9 +41,15 @@ public class SystemNotice {
      * column_name_,desc_;column_name_,asc
      */
     private String orderByStr;
+    /*generatedEnd*/
 
+    private GameInfo   gameInfo;
+    private UserInfo   userInfo;
+    private HouseInfo  houseInfo;
+    private PlayerInfo playerInfo;
     private BigDecimal bonus;
 
+    /*generatedStart*/
     public Integer getId() {
         return this.id;
     }
@@ -171,6 +170,14 @@ public class SystemNotice {
         this.playerId = playerId;
     }
 
+    public Integer getCompetitionId() {
+        return this.competitionId;
+    }
+
+    public void setCompetitionId(Integer competitionId) {
+        this.competitionId = competitionId;
+    }
+
     public String getSearchKey() {
         return searchKey;
     }
@@ -202,6 +209,7 @@ public class SystemNotice {
     public void setIdStr(String idStr) {
         this.idStr = idStr;
     }
+    /*generatedEnd*/
 
     public GameInfo getGameInfo() {
         return gameInfo;

+ 80 - 9
src/main/java/com/izouma/awesomeadmin/model/TableField.java

@@ -142,11 +142,40 @@ public class TableField {
      */
     private String sqlType;
 
-    private Boolean apiFlag;
+    /**
+     * 下拉框类型 1 枚举, 2 接口, 3 读表
+     */
+    private String apiFlag;
 
+    /**
+     * 接口方法/表名
+     */
+    private String optionsMethod;
+
+    /**
+     * 选项值,在枚举是用该值解析
+     */
     private String optionsValue;
 
 
+    /**
+     * 显示值
+     */
+    private String optionsLabel;
+
+    /**
+     * 数据库类型
+     */
+    private String optionsDataBaseType;
+
+    /**
+     * 数据库Code
+     */
+    private String optionsDataSourceCode;
+
+    private Boolean logicalKey;
+
+
     public void setId(Integer id) {
         this.id = id;
     }
@@ -355,14 +384,6 @@ public class TableField {
         this.sortable = sortable;
     }
 
-    public Boolean getApiFlag() {
-        return apiFlag;
-    }
-
-    public void setApiFlag(Boolean apiFlag) {
-        this.apiFlag = apiFlag;
-    }
-
     public String getOptionsValue() {
         return optionsValue;
     }
@@ -370,5 +391,55 @@ public class TableField {
     public void setOptionsValue(String optionsValue) {
         this.optionsValue = optionsValue;
     }
+
+    public Boolean getLogicalKey() {
+        return logicalKey;
+    }
+
+    public void setLogicalKey(Boolean logicalKey) {
+        this.logicalKey = logicalKey;
+    }
+
+
+    public String getOptionsMethod() {
+        return optionsMethod;
+    }
+
+    public void setOptionsMethod(String optionsMethod) {
+        this.optionsMethod = optionsMethod;
+    }
+
+    public String getOptionsLabel() {
+        return optionsLabel;
+    }
+
+    public void setOptionsLabel(String optionsLabel) {
+        this.optionsLabel = optionsLabel;
+    }
+
+
+    public String getOptionsDataBaseType() {
+        return optionsDataBaseType;
+    }
+
+    public void setOptionsDataBaseType(String optionsDataBaseType) {
+        this.optionsDataBaseType = optionsDataBaseType;
+    }
+
+    public String getOptionsDataSourceCode() {
+        return optionsDataSourceCode;
+    }
+
+    public void setOptionsDataSourceCode(String optionsDataSourceCode) {
+        this.optionsDataSourceCode = optionsDataSourceCode;
+    }
+
+    public String getApiFlag() {
+        return apiFlag;
+    }
+
+    public void setApiFlag(String apiFlag) {
+        this.apiFlag = apiFlag;
+    }
 }
 

+ 184 - 0
src/main/java/com/izouma/awesomeadmin/model/UserProp.java

@@ -0,0 +1,184 @@
+package com.izouma.awesomeadmin.model;
+
+import java.util.*;
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+
+@JsonAutoDetect
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class UserProp{
+    /*generatedStart*/
+    private Integer id;
+    private String delFlag;
+    private Date updateTime;
+    private String updateUser;
+    private Date createTime;
+    private String createUser;
+    private Integer propId;
+    private String name;
+    private String icon;
+    private Double pointsRatio;
+    private Integer minPoints;
+    private Double probability;
+    private Integer used;
+    private Integer userId;
+    private Integer type;
+
+    private String idStr;
+
+    private String searchKey;
+
+    /**
+    * and,test_name,like,value;or,remark,=,123
+    */
+    private String advancedQuery;
+
+    /**
+    * column_name_,desc_;column_name_,asc
+    */
+    private String orderByStr;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    public Integer getId(){
+        return this.id;
+    }
+
+    public void setId(Integer id){
+        this.id = id;
+    }
+    public String getDelFlag(){
+        return this.delFlag;
+    }
+
+    public void setDelFlag(String delFlag){
+        this.delFlag = delFlag;
+    }
+    public Date getUpdateTime(){
+        return this.updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime){
+        this.updateTime = updateTime;
+    }
+    public String getUpdateUser(){
+        return this.updateUser;
+    }
+
+    public void setUpdateUser(String updateUser){
+        this.updateUser = updateUser;
+    }
+    public Date getCreateTime(){
+        return this.createTime;
+    }
+
+    public void setCreateTime(Date createTime){
+        this.createTime = createTime;
+    }
+    public String getCreateUser(){
+        return this.createUser;
+    }
+
+    public void setCreateUser(String createUser){
+        this.createUser = createUser;
+    }
+    public Integer getPropId(){
+        return this.propId;
+    }
+
+    public void setPropId(Integer propId){
+        this.propId = propId;
+    }
+    public String getName(){
+        return this.name;
+    }
+
+    public void setName(String name){
+        this.name = name;
+    }
+    public String getIcon(){
+        return this.icon;
+    }
+
+    public void setIcon(String icon){
+        this.icon = icon;
+    }
+    public Double getPointsRatio(){
+        return this.pointsRatio;
+    }
+
+    public void setPointsRatio(Double pointsRatio){
+        this.pointsRatio = pointsRatio;
+    }
+    public Integer getMinPoints(){
+        return this.minPoints;
+    }
+
+    public void setMinPoints(Integer minPoints){
+        this.minPoints = minPoints;
+    }
+    public Double getProbability(){
+        return this.probability;
+    }
+
+    public void setProbability(Double probability){
+        this.probability = probability;
+    }
+    public Integer getUsed(){
+        return this.used;
+    }
+
+    public void setUsed(Integer used){
+        this.used = used;
+    }
+    public Integer getUserId(){
+        return this.userId;
+    }
+
+    public void setUserId(Integer userId){
+        this.userId = userId;
+    }
+    public Integer getType(){
+        return this.type;
+    }
+
+    public void setType(Integer type){
+        this.type = type;
+    }
+
+    public String getSearchKey() {
+        return searchKey;
+    }
+
+    public void setSearchKey(String searchKey) {
+        this.searchKey = searchKey;
+    }
+
+    public String getAdvancedQuery() {
+        return advancedQuery;
+    }
+
+    public void setAdvancedQuery(String advancedQuery) {
+        this.advancedQuery = advancedQuery;
+    }
+
+    public String getOrderByStr() {
+        return orderByStr;
+    }
+
+    public void setOrderByStr(String orderByStr) {
+        this.orderByStr = orderByStr;
+    }
+
+    public String getIdStr() {
+        return idStr;
+    }
+
+    public void setIdStr(String idStr) {
+        this.idStr = idStr;
+    }
+    /*generatedEnd*/
+
+}
+

+ 3 - 0
src/main/java/com/izouma/awesomeadmin/service/CompetitionService.java

@@ -3,6 +3,7 @@ package com.izouma.awesomeadmin.service;
 import java.util.*;
 
 import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
 import com.izouma.awesomeadmin.model.Competition;
 
 
@@ -27,5 +28,7 @@ public interface CompetitionService {
     /*generatedEnd*/
 
     List<Competition> queryUserCompetitions(Competition record, Integer userId);
+
+    Result settlementCompetition(Integer id);
 }
 

+ 2 - 0
src/main/java/com/izouma/awesomeadmin/service/ParticipatingInfoService.java

@@ -27,5 +27,7 @@ public interface ParticipatingInfoService {
     /*generatedEnd*/
 
     ParticipatingInfo participate(Integer userId, Integer competitionId);
+
+    int updateRank(Integer competitionId);
 }
 

+ 28 - 0
src/main/java/com/izouma/awesomeadmin/service/PropInfoService.java

@@ -0,0 +1,28 @@
+package com.izouma.awesomeadmin.service;
+
+import java.util.*;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.PropInfo;
+
+
+/**
+*  service接口类
+*/
+public interface PropInfoService{
+    /*generatedStart*/
+    List<PropInfo> getPropInfoList(PropInfo record);
+
+    List<PropInfo> getPropInfoByPage(Page page, PropInfo record);
+
+    PropInfo getPropInfoById(String id);
+
+    PropInfo getPropInfo(PropInfo record);
+
+    boolean createPropInfo(PropInfo record);
+
+    boolean deletePropInfo(PropInfo record);
+
+    boolean updatePropInfo(PropInfo record);
+    /*generatedEnd*/
+}
+

+ 28 - 0
src/main/java/com/izouma/awesomeadmin/service/UserPropService.java

@@ -0,0 +1,28 @@
+package com.izouma.awesomeadmin.service;
+
+import java.util.*;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.UserProp;
+
+
+/**
+*  service接口类
+*/
+public interface UserPropService{
+    /*generatedStart*/
+    List<UserProp> getUserPropList(UserProp record);
+
+    List<UserProp> getUserPropByPage(Page page, UserProp record);
+
+    UserProp getUserPropById(String id);
+
+    UserProp getUserProp(UserProp record);
+
+    boolean createUserProp(UserProp record);
+
+    boolean deleteUserProp(UserProp record);
+
+    boolean updateUserProp(UserProp record);
+    /*generatedEnd*/
+}
+

+ 35 - 1
src/main/java/com/izouma/awesomeadmin/service/impl/CheckinRecordServiceImpl.java

@@ -1,8 +1,14 @@
 package com.izouma.awesomeadmin.service.impl;
 
 import java.util.*;
+import java.util.function.BiConsumer;
 
+import com.google.gson.Gson;
+import com.izouma.awesomeadmin.beans.CheckinConfig;
 import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.service.SystemVariableService;
+import com.izouma.awesomeadmin.util.DateTimeTool;
+import net.sf.json.JSONObject;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +31,9 @@ public class CheckinRecordServiceImpl implements CheckinRecordService {
     private CheckinRecordMapper checkinRecordMapper;
     /*generatedEnd*/
 
+    @Autowired
+    private SystemVariableService systemVariableService;
+
     /*generatedStart*/
     @Override
     public List<CheckinRecord> getCheckinRecordList(CheckinRecord record) {
@@ -126,7 +135,32 @@ public class CheckinRecordServiceImpl implements CheckinRecordService {
             for (CheckinRecord record : weekRecord) {
                 map.put(record.getWeekDay().toString(), record);
             }
-            return map;
+
+            Map<String, Object> record = new HashMap<>();
+            String variable = systemVariableService.get(AppConstant.SysConfig.CHECKIN_CONFIG);
+            int current = DateTimeTool.getDayOfWeek(new Date());
+            JSONObject jsonObject = JSONObject.fromObject(variable);
+            Gson gson = new Gson();
+            jsonObject.forEach((BiConsumer<String, JSONObject>) (o, o2) -> {
+                CheckinConfig config = gson.fromJson(o2.toString(), CheckinConfig.class);
+                if (Integer.parseInt(o) < current) {
+                    if (map.get(o) != null) {
+                        config.setChecked(1);
+                    } else {
+                        config.setChecked(2);
+                    }
+                } else if (Integer.parseInt(o) == current) {
+                    if (map.get(o) != null) {
+                        config.setChecked(1);
+                    } else {
+                        config.setChecked(0);
+                    }
+                } else {
+                    config.setChecked(0);
+                }
+                record.put(o, config);
+            });
+            return record;
         } catch (Exception e) {
             logger.error(e);
         }

+ 122 - 2
src/main/java/com/izouma/awesomeadmin/service/impl/CompetitionServiceImpl.java

@@ -1,14 +1,18 @@
 package com.izouma.awesomeadmin.service.impl;
 
+import java.math.BigDecimal;
 import java.util.*;
 
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.*;
+import com.izouma.awesomeadmin.service.*;
+import com.izouma.awesomeadmin.util.PushUtil;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.izouma.awesomeadmin.constant.AppConstant;
 import com.izouma.awesomeadmin.dto.Page;
-import com.izouma.awesomeadmin.model.Competition;
-import com.izouma.awesomeadmin.service.CompetitionService;
 import com.izouma.awesomeadmin.dao.CompetitionMapper;
 
 /**
@@ -23,6 +27,15 @@ public class CompetitionServiceImpl implements CompetitionService {
     private CompetitionMapper competitionMapper;
     /*generatedEnd*/
 
+    @Autowired
+    private HouseInfoService         houseInfoService;
+    @Autowired
+    private ParticipatingInfoService participatingInfoService;
+    @Autowired
+    private UserInfoService          userInfoService;
+    @Autowired
+    private SystemNoticeService      systemNoticeService;
+
     /*generatedStart*/
     @Override
     public List<Competition> getCompetitionList(Competition record) {
@@ -125,5 +138,112 @@ public class CompetitionServiceImpl implements CompetitionService {
         }
         return null;
     }
+
+    @Override
+    public Result settlementCompetition(Integer id) {
+        logger.info("settlementCompetition");
+        try {
+            HouseInfo houseInfo = new HouseInfo();
+            houseInfo.setCompetitionId(id);
+
+            Competition competition = getCompetitionById(id.toString());
+            if (competition == null) {
+                return new Result(false, "结算失败,比赛不存在");
+            }
+
+            List<HouseInfo> houseInfoList = houseInfoService.getHouseInfoList(houseInfo);
+
+            if (CollectionUtils.isEmpty(houseInfoList)) {
+                return new Result(false, "结算失败,无比赛数据");
+            }
+
+            for (HouseInfo h : houseInfoList) {
+                if (AppConstant.HouseStatus.SETTLEMENT != h.getStatusFlag()) {
+                    return new Result(false, "结算失败,还有未结算房间");
+                }
+            }
+
+            if (AppConstant.CompetitionStatus.END == competition.getStatus()) {
+                return new Result(true, "已结算");
+            }
+
+            if (participatingInfoService.updateRank(competition.getId()) <= 0) {
+                return new Result(false, "结算失败,请稍后再试");
+            }
+
+            ParticipatingInfo participatingInfo = new ParticipatingInfo();
+            participatingInfo.setCompetitionId(competition.getId());
+            participatingInfo.setOrderByStr("rank_,asc");
+            List<ParticipatingInfo> participatingInfoList = participatingInfoService.getParticipatingInfoList(participatingInfo);
+            if (CollectionUtils.isEmpty(participatingInfoList)) {
+                return new Result(false, "结算失败,无比赛数据");
+            }
+            participatingInfoList.sort(Comparator.comparingInt(ParticipatingInfo::getRank));
+            for (int i = 0; i < participatingInfoList.size(); i++) {
+                int bonus = 0;
+                switch (i) {
+                    case 0:
+                        bonus = (int) Math.floor(competition.getBonus() * AppConstant.RewardRules.Bonus.NO1);
+                        break;
+                    case 1:
+                        bonus = (int) Math.floor(competition.getBonus() * AppConstant.RewardRules.Bonus.NO2);
+                        break;
+                    case 2:
+                        bonus = (int) Math.floor(competition.getBonus() * AppConstant.RewardRules.Bonus.NO3);
+                        break;
+                    case 3:
+                        bonus = (int) Math.floor(competition.getBonus() * AppConstant.RewardRules.Bonus.NO4);
+                        break;
+                    case 4:
+                        bonus = (int) Math.floor(competition.getBonus() * AppConstant.RewardRules.Bonus.NO5);
+                        break;
+                }
+
+                String content;
+
+                if (bonus > 0) {
+                    content = "恭喜你,在" + competition.getCompetitionName()
+                            + " 取得第" + participatingInfo.getRank()
+                            + "名,获得" + bonus + "金币,赶快领取你的奖励吧。";
+                } else {
+                    content = "很遗憾,你在" + competition.getCompetitionName()
+                            + " 取得第" + participatingInfo.getRank()
+                            + "名,未能获得金币,请再接再厉。";
+                }
+
+                SystemNotice systemNotice = new SystemNotice();
+                systemNotice.setGameId(competition.getGameId());
+                systemNotice.setUserId(participatingInfo.getUserId());
+                systemNotice.setCompetitionId(competition.getId());
+                systemNotice.setRemark("联赛奖金发放");
+                systemNotice.setContent(content);
+                systemNotice.setTypeFlag(AppConstant.NoticeType.COMPEITION_BONUS);
+                systemNotice.setBonus(BigDecimal.valueOf(bonus));
+
+                systemNoticeService.createSystemNotice(systemNotice);
+                try {
+                    UserInfo userInfo = new UserInfo();
+                    userInfo.setId(participatingInfo.getUserId());
+                    userInfo = userInfoService.getSingleUserInfo(userInfo);
+                    if (userInfo != null) {
+                        if ("Y".equals(userInfo.getNoticeFlag())) {
+                            String[] ids = new String[]{userInfo.getId().toString()};
+                            PushUtil.pushMsg(ids, content);
+                        }
+                    }
+                } catch (Exception e) {
+                    logger.error("结算推送消息异常。", e);
+                }
+            }
+
+            competition.setStatus(AppConstant.CompetitionStatus.END);
+            competitionMapper.updateByPrimaryKeySelective(competition);
+
+            return new Result(true, "结算成功");
+        } catch (Exception e) {
+            logger.error("settlementCompetition", e);
+        }
+        return new Result(false, "结算失败,请稍后再试");
+    }
 }
 

+ 9 - 7
src/main/java/com/izouma/awesomeadmin/service/impl/HouseInfoServiceImpl.java

@@ -213,19 +213,21 @@ public class HouseInfoServiceImpl implements HouseInfoService {
                 double rankRate = playerInfo.getRank() * 100 / (double) playerInfos.size();
                 double points = 0;
                 if (playerInfo.getRank() == 1) {
-                    points = 40;
+                    points = AppConstant.RewardRules.Points.FIRST;
                 } else if (rankRate <= 10) {
-                    points = 20;
+                    points = AppConstant.RewardRules.Points.LEFT_10PERCENT;
                 } else if (rankRate <= 20) {
-                    points = 10;
+                    points = AppConstant.RewardRules.Points.LEFT_20PERCENT;
                 } else if (rankRate <= 30) {
-                    points = 0;
+                    points = AppConstant.RewardRules.Points.LEFT_30PERCENT;
                 } else {
-                    points = -10;
+                    points = AppConstant.RewardRules.Points.LEFT_40PERCENT;
                 }
                 if (playerInfo.getRanking() != null && playerInfo.getRanking() == 1) {
                     points += 10;
                 }
+                //todo: 道具加成
+
                 playerInfo.setPoints(new BigDecimal(points));
                 playerInfo.setHouseRank(playerInfo.getRank());
 
@@ -510,7 +512,7 @@ public class HouseInfoServiceImpl implements HouseInfoService {
                 return new Result(false, "加入失败,游戏已开始!");
             }
 
-            Competition competition = competitionService.getCompetitionById(record.getCompetitionId().toString());
+            Competition competition = competitionService.getCompetitionById(houseInfo.getCompetitionId().toString());
             if (competition == null) {
                 return new Result(false, "加入失败,比赛不存在!");
             }
@@ -529,7 +531,7 @@ public class HouseInfoServiceImpl implements HouseInfoService {
             } else if (AppConstant.CompetitionType.ADVANCE == competition.getType()) {
                 restTimes = userPlayTimes.getTotalAdvanced() - userPlayTimes.getUsedAdvanced();
             }
-            if (restTimes<=0){
+            if (restTimes <= 0) {
                 //todo: 使用道具
                 return new Result(false, "加入失败,今日次数已用完");
             }

+ 16 - 5
src/main/java/com/izouma/awesomeadmin/service/impl/ParticipatingInfoServiceImpl.java

@@ -78,7 +78,7 @@ public class ParticipatingInfoServiceImpl implements ParticipatingInfoService {
         try {
             int updates = participatingInfoMapper.insertSelective(record);
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
             logger.error("createParticipatingInfo", e);
@@ -92,10 +92,10 @@ public class ParticipatingInfoServiceImpl implements ParticipatingInfoService {
         try {
             int updates = participatingInfoMapper.delete(record);
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("deleteParticipatingInfo", e);
+            logger.error("deleteParticipatingInfo", e);
         }
         return false;
     }
@@ -106,10 +106,10 @@ public class ParticipatingInfoServiceImpl implements ParticipatingInfoService {
         try {
             int updates = participatingInfoMapper.updateByPrimaryKeySelective(record);
             if (updates > 0) {
-                 return true;
+                return true;
             }
         } catch (Exception e) {
-             logger.error("updateParticipatingInfo", e);
+            logger.error("updateParticipatingInfo", e);
         }
         return false;
     }
@@ -135,5 +135,16 @@ public class ParticipatingInfoServiceImpl implements ParticipatingInfoService {
         }
         return null;
     }
+
+    @Override
+    public int updateRank(Integer competitionId) {
+        logger.info("updateRank");
+        try {
+            return participatingInfoMapper.updateRank(competitionId);
+        } catch (Exception e) {
+            logger.error("updateRank", e);
+        }
+        return 0;
+    }
 }
 

+ 117 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/PropInfoServiceImpl.java

@@ -0,0 +1,117 @@
+package com.izouma.awesomeadmin.service.impl;
+
+import java.util.*;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.PropInfo;
+import com.izouma.awesomeadmin.service.PropInfoService;
+import com.izouma.awesomeadmin.dao.PropInfoMapper;
+
+/**
+*  service接口实现类
+*/
+@Service
+public class PropInfoServiceImpl implements PropInfoService{
+    /*generatedStart*/
+    private static Logger logger = Logger.getLogger(PropInfoServiceImpl.class);
+
+    @Autowired
+    private PropInfoMapper propInfoMapper;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    @Override
+    public List<PropInfo> getPropInfoList(PropInfo record) {
+        logger.info("getPropInfoList");
+        try {
+            return propInfoMapper.queryAllPropInfo(record);
+        } catch (Exception e) {
+            logger.error("getPropInfoList", e);
+        }
+        return null;
+    }
+
+    @Override
+    public List<PropInfo> getPropInfoByPage(Page page, PropInfo record) {
+        logger.info("getPropInfoByPage");
+        try {
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
+
+            return propInfoMapper.queryPropInfoByPage(parameter);
+        } catch (Exception e) {
+            logger.error("getPropInfoByPage", e);
+        }
+        return null;
+    }
+
+    @Override
+    public PropInfo getPropInfoById(String id) {
+        logger.info("getPropInfoyId");
+        try {
+            return propInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
+        } catch (Exception e) {
+            logger.error("getPropInfoById", e);
+        }
+        return null;
+    }
+
+    @Override
+    public PropInfo getPropInfo(PropInfo record) {
+        logger.info("getPropInfo");
+        try {
+            return propInfoMapper.queryPropInfo(record);
+        } catch (Exception e) {
+            logger.error("getPropInfo", e);
+        }
+        return null;
+    }
+
+    @Override
+    public boolean createPropInfo(PropInfo record) {
+        logger.info("createPropInfo");
+        try {
+            int updates = propInfoMapper.insertSelective(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+            logger.error("createPropInfo", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean deletePropInfo(PropInfo record) {
+        logger.info("deletePropInfo");
+        try {
+            int updates = propInfoMapper.delete(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("deletePropInfo", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean updatePropInfo(PropInfo record) {
+        logger.info("updatePropInfo");
+        try {
+            int updates = propInfoMapper.updateByPrimaryKeySelective(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("updatePropInfo", e);
+        }
+        return false;
+    }
+    /*generatedEnd*/
+}
+

+ 9 - 31
src/main/java/com/izouma/awesomeadmin/service/impl/SystemNoticeServiceImpl.java

@@ -24,38 +24,34 @@ import com.izouma.awesomeadmin.dao.SystemNoticeMapper;
  */
 @Service
 public class SystemNoticeServiceImpl implements SystemNoticeService {
-
+    /*generatedStart*/
     private static Logger logger = Logger.getLogger(SystemNoticeServiceImpl.class);
 
     @Autowired
     private SystemNoticeMapper systemNoticeMapper;
+    /*generatedEnd*/
 
     @Autowired
     private UserInfoMapper userInfoMapper;
 
     @Autowired
     private MemberCoinMapper memberCoinMapper;
-
+    /*generatedStart*/
     @Override
     public List<SystemNotice> getSystemNoticeList(SystemNotice record) {
-
         logger.info("getSystemNoticeList");
         try {
-
             return systemNoticeMapper.queryAllSystemNotice(record);
         } catch (Exception e) {
             logger.error("getSystemNoticeList", e);
         }
-
         return null;
     }
 
     @Override
     public List<SystemNotice> getSystemNoticeByPage(Page page, SystemNotice record) {
-
         logger.info("getSystemNoticeByPage");
         try {
-
             Map<String, Object> parameter = new HashMap<String, Object>();
             parameter.put("record", record);
             parameter.put(AppConstant.PAGE, page);
@@ -64,91 +60,73 @@ public class SystemNoticeServiceImpl implements SystemNoticeService {
         } catch (Exception e) {
             logger.error("getSystemNoticeByPage", e);
         }
-
         return null;
     }
 
     @Override
     public SystemNotice getSystemNoticeById(String id) {
-
         logger.info("getSystemNoticeyId");
         try {
-
             return systemNoticeMapper.selectByPrimaryKey(Integer.valueOf(id));
         } catch (Exception e) {
             logger.error("getSystemNoticeById", e);
         }
-
         return null;
     }
 
     @Override
     public SystemNotice getSystemNotice(SystemNotice record) {
-
         logger.info("getSystemNotice");
         try {
-
             return systemNoticeMapper.querySystemNotice(record);
         } catch (Exception e) {
             logger.error("getSystemNotice", e);
         }
-
         return null;
     }
 
     @Override
     public boolean createSystemNotice(SystemNotice record) {
-
         logger.info("createSystemNotice");
         try {
-
             int updates = systemNoticeMapper.insertSelective(record);
-
             if (updates > 0) {
-                return true;
+                 return true;
             }
         } catch (Exception e) {
             logger.error("createSystemNotice", e);
         }
-
         return false;
     }
 
     @Override
     public boolean deleteSystemNotice(SystemNotice record) {
-
         logger.info("deleteSystemNotice");
         try {
-
             int updates = systemNoticeMapper.delete(record);
-
             if (updates > 0) {
-                return true;
+                 return true;
             }
         } catch (Exception e) {
-            logger.error("deleteSystemNotice", e);
+             logger.error("deleteSystemNotice", e);
         }
-
         return false;
     }
 
     @Override
     public boolean updateSystemNotice(SystemNotice record) {
-
         logger.info("updateSystemNotice");
         try {
-
             int updates = systemNoticeMapper.updateByPrimaryKeySelective(record);
-
             if (updates > 0) {
-                return true;
+                 return true;
             }
         } catch (Exception e) {
-            logger.error("updateSystemNotice", e);
+             logger.error("updateSystemNotice", e);
         }
-
         return false;
     }
+    /*generatedEnd*/
 
     @Override
     public int getUnreadSystemNotice(SystemNotice record) {

+ 3 - 3
src/main/java/com/izouma/awesomeadmin/service/impl/UserInfoServiceImpl.java

@@ -27,6 +27,8 @@ import org.json.JSONException;
 import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.crypto.SecretKey;
 import javax.servlet.http.HttpServletRequest;
@@ -61,8 +63,6 @@ public class UserInfoServiceImpl implements UserInfoService {
     private AlipayTempMapper   alipayTempMapper;
     @Autowired
     private MemberCoinMapper   memberCoinMapper;
-    @Autowired
-    private HttpServletRequest request;
 
     @Override
     public List<UserInfo> getUserInfoList(UserInfo record) {
@@ -324,7 +324,7 @@ public class UserInfoServiceImpl implements UserInfoService {
     @Override
     public UserInfo loginSms(String phone, String code) throws LoginException {
         logger.info("loginSms");
-
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         TTDJApiUtil ttdjApiUtil = new TTDJApiUtil(request.getHeader("clientType"));
         LoginResponse response = ttdjApiUtil.login(phone, code);
         if (response == null) {

+ 117 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/UserPropServiceImpl.java

@@ -0,0 +1,117 @@
+package com.izouma.awesomeadmin.service.impl;
+
+import java.util.*;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.model.UserProp;
+import com.izouma.awesomeadmin.service.UserPropService;
+import com.izouma.awesomeadmin.dao.UserPropMapper;
+
+/**
+*  service接口实现类
+*/
+@Service
+public class UserPropServiceImpl implements UserPropService{
+    /*generatedStart*/
+    private static Logger logger = Logger.getLogger(UserPropServiceImpl.class);
+
+    @Autowired
+    private UserPropMapper userPropMapper;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    @Override
+    public List<UserProp> getUserPropList(UserProp record) {
+        logger.info("getUserPropList");
+        try {
+            return userPropMapper.queryAllUserProp(record);
+        } catch (Exception e) {
+            logger.error("getUserPropList", e);
+        }
+        return null;
+    }
+
+    @Override
+    public List<UserProp> getUserPropByPage(Page page, UserProp record) {
+        logger.info("getUserPropByPage");
+        try {
+            Map<String, Object> parameter = new HashMap<String, Object>();
+            parameter.put("record", record);
+            parameter.put(AppConstant.PAGE, page);
+
+            return userPropMapper.queryUserPropByPage(parameter);
+        } catch (Exception e) {
+            logger.error("getUserPropByPage", e);
+        }
+        return null;
+    }
+
+    @Override
+    public UserProp getUserPropById(String id) {
+        logger.info("getUserPropyId");
+        try {
+            return userPropMapper.selectByPrimaryKey(Integer.valueOf(id));
+        } catch (Exception e) {
+            logger.error("getUserPropById", e);
+        }
+        return null;
+    }
+
+    @Override
+    public UserProp getUserProp(UserProp record) {
+        logger.info("getUserProp");
+        try {
+            return userPropMapper.queryUserProp(record);
+        } catch (Exception e) {
+            logger.error("getUserProp", e);
+        }
+        return null;
+    }
+
+    @Override
+    public boolean createUserProp(UserProp record) {
+        logger.info("createUserProp");
+        try {
+            int updates = userPropMapper.insertSelective(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+            logger.error("createUserProp", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean deleteUserProp(UserProp record) {
+        logger.info("deleteUserProp");
+        try {
+            int updates = userPropMapper.delete(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("deleteUserProp", e);
+        }
+        return false;
+    }
+
+    @Override
+    public boolean updateUserProp(UserProp record) {
+        logger.info("updateUserProp");
+        try {
+            int updates = userPropMapper.updateByPrimaryKeySelective(record);
+            if (updates > 0) {
+                 return true;
+            }
+        } catch (Exception e) {
+             logger.error("updateUserProp", e);
+        }
+        return false;
+    }
+    /*generatedEnd*/
+}
+

+ 52 - 0
src/main/java/com/izouma/awesomeadmin/util/ObjectTool.java

@@ -0,0 +1,52 @@
+package com.izouma.awesomeadmin.util;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+public class ObjectTool {
+
+    /**
+     * 获取属性名数组
+     */
+    public static String[] getFiledName(Object o) {
+        Field[] fields = o.getClass().getDeclaredFields();
+        String[] fieldNames = new String[fields.length];
+        for (int i = 0; i < fields.length; i++) {
+//            System.out.println(fields[i].getType());
+            fieldNames[i] = fields[i].getName();
+        }
+        return fieldNames;
+    }
+
+    public static String[] getFiledName(String className) {
+        try {
+
+            Field[] fields = Class.forName(className).getDeclaredFields();
+            String[] fieldNames = new String[fields.length];
+            for (int i = 0; i < fields.length; i++) {
+//            System.out.println(fields[i].getType());
+                fieldNames[i] = fields[i].getName();
+            }
+            return fieldNames;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    /* 根据属性名获取属性值
+     * */
+    private static Object getFieldValueByName(String fieldName, Object o) {
+        try {
+            String firstLetter = fieldName.substring(0, 1).toUpperCase();
+            String getter = "get" + firstLetter + fieldName.substring(1);
+            Method method = o.getClass().getMethod(getter, new Class[]{});
+            Object value = method.invoke(o, new Object[]{});
+            return value;
+        } catch (Exception e) {
+
+            return null;
+        }
+    }
+}

+ 7 - 0
src/main/java/com/izouma/awesomeadmin/web/CheckinRecordController.java

@@ -132,5 +132,12 @@ public class CheckinRecordController {
         }
         return new Result(false, "失败");
     }
+
+    @RequestMapping("checkin")
+    @ResponseBody
+    public Result checkin() {
+        UserInfo userInfo = (UserInfo) SecurityUtils.getSubject().getPrincipal();
+        return checkinRecordService.checkin(userInfo.getId());
+    }
 }
 

+ 5 - 4
src/main/java/com/izouma/awesomeadmin/web/CompetitionController.java

@@ -102,10 +102,10 @@ public class CompetitionController {
         String sheetName = "competition";
         String titleName = "赛事数据表";
         String fileName = "赛事表";
-        int columnNumber = 13;
-        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
-        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "赛事名称" ,   "开始时间" ,   "结束时间" ,   "赛事类型" ,   "奖金" ,   "状态" ,   "介绍"  };
-        String[][] dataList = new String[competitions.size()][13];
+        int columnNumber = 14;
+        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
+        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "赛事名称" ,   "开始时间" ,   "结束时间" ,   "赛事类型" ,   "奖金" ,   "状态" ,   "介绍" ,   "游戏"  };
+        String[][] dataList = new String[competitions.size()][14];
 
         for (int i = 0; i < competitions.size(); i++) {
                         dataList[i][0] = String.valueOf(competitions.get(i).getId());
@@ -121,6 +121,7 @@ public class CompetitionController {
                         dataList[i][10] = String.valueOf(competitions.get(i).getBonus());
                         dataList[i][11] = String.valueOf(competitions.get(i).getStatus());
                         dataList[i][12] = String.valueOf(competitions.get(i).getIntro());
+                        dataList[i][13] = String.valueOf(competitions.get(i).getGameId());
                     }
 
         ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,

+ 56 - 1
src/main/java/com/izouma/awesomeadmin/web/DevelopController.java

@@ -1,6 +1,8 @@
 package com.izouma.awesomeadmin.web;
 
 import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.util.ObjectTool;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -19,7 +21,7 @@ import java.util.Map;
 
 @Controller
 @RequestMapping("/dev")
-public class DevelopController  {
+public class DevelopController {
     @Autowired
     private RequestMappingHandlerMapping requestMappingHandlerMapping;
 
@@ -49,4 +51,57 @@ public class DevelopController  {
         }
         return new Result(true, urlList);
     }
+
+    @RequestMapping(value = "/selectMappings", method = RequestMethod.GET)
+    @ResponseBody
+    public Result selectMappings() {
+        List<HashMap<String, String>> urlList = new ArrayList<>();
+
+        Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
+        for (Map.Entry<RequestMappingInfo, HandlerMethod> m : map.entrySet()) {
+            HashMap<String, String> hashMap = new HashMap<>();
+            RequestMappingInfo info = m.getKey();
+            HandlerMethod method = m.getValue();
+            PatternsRequestCondition p = info.getPatternsCondition();
+            for (String url : p.getPatterns()) {
+                hashMap.put("url", url);
+            }
+
+            if (!hashMap.get("url").startsWith("/activiti")
+                    && !hashMap.get("url").startsWith("/sysRole")
+                    && !hashMap.get("url").startsWith("/powerInfo")
+                    && !hashMap.get("url").startsWith("/genCode")
+                    && !hashMap.get("url").startsWith("/commonQuery")
+                    && !hashMap.get("url").startsWith("/dataSourceInfo")
+                    && !hashMap.get("url").startsWith("/queryConfig")
+                    && !hashMap.get("url").startsWith("/sysDatarule")
+                    && !hashMap.get("url").startsWith("/sysMenu")
+                    && !hashMap.get("url").startsWith("/genTestTable")
+                    && !hashMap.get("url").startsWith("/tableField")
+                    && hashMap.get("url").endsWith("/all")) {
+
+                hashMap.put("className", method.getMethod().getDeclaringClass().getName()); // 类名
+                hashMap.put("method", method.getMethod().getName()); // 方法名
+                RequestMethodsRequestCondition methodsCondition = info.getMethodsCondition();
+                String type = methodsCondition.toString();
+                if (type != null && type.startsWith("[") && type.endsWith("]")) {
+                    type = type.substring(1, type.length() - 1);
+                    hashMap.put("type", type); // 方法名
+                }
+
+                String className = "com.izouma.awesomeadmin.model." + StringUtils.capitalize(hashMap.get("url").split("/")[1]);
+                String[] fileds = ObjectTool.getFiledName(className);
+                String filedsStr = String.join(",", fileds)
+                        .replace(",delFlag", "")
+                        .replace(",searchKey", "")
+                        .replace(",advancedQuery", "")
+                        .replace(",orderByStr", "");
+
+                hashMap.put("fileds", filedsStr);
+
+                urlList.add(hashMap);
+            }
+        }
+        return new Result(true, urlList);
+    }
 }

+ 129 - 0
src/main/java/com/izouma/awesomeadmin/web/PropInfoController.java

@@ -0,0 +1,129 @@
+package com.izouma.awesomeadmin.web;
+
+import java.util.*;
+
+import com.izouma.awesomeadmin.util.ExportExcelUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.PropInfo;
+import com.izouma.awesomeadmin.service.PropInfoService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+@RequestMapping("/propInfo")
+public class PropInfoController {
+    /*generatedStart*/
+    @Autowired
+    private PropInfoService propInfoService;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    @RequiresAuthentication
+    @RequestMapping(value = "/all", method = RequestMethod.GET)
+    @ResponseBody
+    public Result all(PropInfo record) {
+        List<PropInfo> pp = propInfoService.getPropInfoList(record);
+        return new Result(true, pp);
+    }
+
+    @RequestMapping(value = "/getPropInfo", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getPropInfo(@RequestParam(required = false, value = "id") String id) {
+        PropInfo data = propInfoService.getPropInfoById(id);
+        return new Result(true, data);
+    }
+
+    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOne(PropInfo record) {
+        PropInfo data = propInfoService.getPropInfo(record);
+        return new Result(true, data);
+    }
+
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @ResponseBody
+    public Result page(Page page, PropInfo record) {
+        Map<String, Object> result = new HashMap<>();
+
+        List<PropInfo> pp =propInfoService.getPropInfoByPage(page, record);
+
+        result.put(AppConstant.PAGE, page);
+        result.put("pp", pp);
+        return new Result(true, result);
+    }
+
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result save(PropInfo record) {
+        boolean num = propInfoService.createPropInfo(record);
+        if (num) {
+        return new Result(true, record.getId());
+        }
+        return new Result(false, "保存异常");
+    }
+
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updatePropInfo(PropInfo record) {
+        boolean num = propInfoService.updatePropInfo(record);
+        if (num) {
+        return new Result(true, "保存成功");
+        }
+        return new Result(false, "保存异常");
+    }
+
+    @RequestMapping(value = "/del", method = RequestMethod.POST)
+    @ResponseBody
+    public Result deletePropInfo(PropInfo record) {
+
+        boolean num = propInfoService.deletePropInfo(record);
+        if (num) {
+        return new Result(true, "删除成功");
+        }
+        return new Result(false, "删除异常");
+    }
+
+    @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
+    @ResponseBody
+    public void exportExcel(HttpServletRequest request, HttpServletResponse response, PropInfo record) throws Exception {
+
+        List<PropInfo> propInfos = propInfoService.getPropInfoList(record);
+
+        String sheetName = "prop_info";
+        String titleName = "道具数据表";
+        String fileName = "道具表";
+        int columnNumber = 13;
+        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
+        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "名称" ,   "图标" ,   "金币价格" ,   "积分加成" ,   "积分保底" ,   "概率" ,   "类型"  };
+        String[][] dataList = new String[propInfos.size()][13];
+
+        for (int i = 0; i < propInfos.size(); i++) {
+                        dataList[i][0] = String.valueOf(propInfos.get(i).getId());
+                        dataList[i][1] = String.valueOf(propInfos.get(i).getDelFlag());
+                        dataList[i][2] = String.valueOf(propInfos.get(i).getUpdateTime());
+                        dataList[i][3] = String.valueOf(propInfos.get(i).getUpdateUser());
+                        dataList[i][4] = String.valueOf(propInfos.get(i).getCreateTime());
+                        dataList[i][5] = String.valueOf(propInfos.get(i).getCreateUser());
+                        dataList[i][6] = String.valueOf(propInfos.get(i).getName());
+                        dataList[i][7] = String.valueOf(propInfos.get(i).getIcon());
+                        dataList[i][8] = String.valueOf(propInfos.get(i).getMoneyCoin());
+                        dataList[i][9] = String.valueOf(propInfos.get(i).getPointsRatio());
+                        dataList[i][10] = String.valueOf(propInfos.get(i).getMinPoints());
+                        dataList[i][11] = String.valueOf(propInfos.get(i).getProbability());
+                        dataList[i][12] = String.valueOf(propInfos.get(i).getType());
+                    }
+
+        ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
+                columnNumber, columnWidth, columnName, dataList, response);
+    }
+    /*generatedEnd*/
+}
+

+ 131 - 0
src/main/java/com/izouma/awesomeadmin/web/UserPropController.java

@@ -0,0 +1,131 @@
+package com.izouma.awesomeadmin.web;
+
+import java.util.*;
+
+import com.izouma.awesomeadmin.util.ExportExcelUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.dto.Page;
+import com.izouma.awesomeadmin.dto.Result;
+import com.izouma.awesomeadmin.model.UserProp;
+import com.izouma.awesomeadmin.service.UserPropService;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Controller
+@RequestMapping("/userProp")
+public class UserPropController {
+    /*generatedStart*/
+    @Autowired
+    private UserPropService userPropService;
+    /*generatedEnd*/
+
+    /*generatedStart*/
+    @RequiresAuthentication
+    @RequestMapping(value = "/all", method = RequestMethod.GET)
+    @ResponseBody
+    public Result all(UserProp record) {
+        List<UserProp> pp = userPropService.getUserPropList(record);
+        return new Result(true, pp);
+    }
+
+    @RequestMapping(value = "/getUserProp", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getUserProp(@RequestParam(required = false, value = "id") String id) {
+        UserProp data = userPropService.getUserPropById(id);
+        return new Result(true, data);
+    }
+
+    @RequestMapping(value = "/getOne", method = RequestMethod.GET)
+    @ResponseBody
+    public Result getOne(UserProp record) {
+        UserProp data = userPropService.getUserProp(record);
+        return new Result(true, data);
+    }
+
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    @ResponseBody
+    public Result page(Page page, UserProp record) {
+        Map<String, Object> result = new HashMap<>();
+
+        List<UserProp> pp =userPropService.getUserPropByPage(page, record);
+
+        result.put(AppConstant.PAGE, page);
+        result.put("pp", pp);
+        return new Result(true, result);
+    }
+
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    @ResponseBody
+    public Result save(UserProp record) {
+        boolean num = userPropService.createUserProp(record);
+        if (num) {
+        return new Result(true, record.getId());
+        }
+        return new Result(false, "保存异常");
+    }
+
+    @RequestMapping(value = "/update", method = RequestMethod.POST)
+    @ResponseBody
+    public Result updateUserProp(UserProp record) {
+        boolean num = userPropService.updateUserProp(record);
+        if (num) {
+        return new Result(true, "保存成功");
+        }
+        return new Result(false, "保存异常");
+    }
+
+    @RequestMapping(value = "/del", method = RequestMethod.POST)
+    @ResponseBody
+    public Result deleteUserProp(UserProp record) {
+
+        boolean num = userPropService.deleteUserProp(record);
+        if (num) {
+        return new Result(true, "删除成功");
+        }
+        return new Result(false, "删除异常");
+    }
+
+    @RequestMapping(value = "/exportExcel", method = RequestMethod.GET)
+    @ResponseBody
+    public void exportExcel(HttpServletRequest request, HttpServletResponse response, UserProp record) throws Exception {
+
+        List<UserProp> userProps = userPropService.getUserPropList(record);
+
+        String sheetName = "user_prop";
+        String titleName = "用户道具数据表";
+        String fileName = "用户道具表";
+        int columnNumber = 15;
+        int[] columnWidth = { 20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20,  20 };
+        String[] columnName = {  "" ,   "删除标识" ,   "更新时间" ,   "更新人" ,   "创建时间" ,   "创建人" ,   "道具id" ,   "名称" ,   "图标" ,   "积分加成" ,   "积分保底" ,   "概率" ,   "已使用" ,   "用户id" ,   "类型"  };
+        String[][] dataList = new String[userProps.size()][15];
+
+        for (int i = 0; i < userProps.size(); i++) {
+                        dataList[i][0] = String.valueOf(userProps.get(i).getId());
+                        dataList[i][1] = String.valueOf(userProps.get(i).getDelFlag());
+                        dataList[i][2] = String.valueOf(userProps.get(i).getUpdateTime());
+                        dataList[i][3] = String.valueOf(userProps.get(i).getUpdateUser());
+                        dataList[i][4] = String.valueOf(userProps.get(i).getCreateTime());
+                        dataList[i][5] = String.valueOf(userProps.get(i).getCreateUser());
+                        dataList[i][6] = String.valueOf(userProps.get(i).getPropId());
+                        dataList[i][7] = String.valueOf(userProps.get(i).getName());
+                        dataList[i][8] = String.valueOf(userProps.get(i).getIcon());
+                        dataList[i][9] = String.valueOf(userProps.get(i).getPointsRatio());
+                        dataList[i][10] = String.valueOf(userProps.get(i).getMinPoints());
+                        dataList[i][11] = String.valueOf(userProps.get(i).getProbability());
+                        dataList[i][12] = String.valueOf(userProps.get(i).getUsed());
+                        dataList[i][13] = String.valueOf(userProps.get(i).getUserId());
+                        dataList[i][14] = String.valueOf(userProps.get(i).getType());
+                    }
+
+        ExportExcelUtil.ExportWithResponse(sheetName, titleName, fileName,
+                columnNumber, columnWidth, columnName, dataList, response);
+    }
+    /*generatedEnd*/
+}
+

+ 107 - 0
src/main/vue/src/pages/CheckinConfig.vue

@@ -0,0 +1,107 @@
+<template>
+    <div>
+        <el-form label-position="right" label-width="120" size="small">
+            <el-form-item :label="weekDays[Number(i)-1]" v-for="(item,i) in config">
+                <el-radio v-model="item.type" :label="1">金币</el-radio>
+                <el-radio v-model="item.type" :label="2">积分加成卡</el-radio>
+                <el-radio v-model="item.type" :label="3">积分保底卡</el-radio>
+                <el-radio v-model="item.type" :label="4">概率卡</el-radio>
+                <el-input-number v-model="item.value" :max="(item.type===1||item.type===3)?10000:1"
+                                 :step="(item.type===1||item.type===3)?1:0.1"></el-input-number>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="save" type="primary">保存</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    export default {
+        created() {
+            this.$http.get({
+                url: 'systemVariable/getOne',
+                data: {
+                    variableName: 'checkinConfig'
+                }
+            }).then(res => {
+                if (res.success) {
+                    this.id = res.data.id;
+                    let data = JSON.parse(res.data.variableValue);
+                    let config = {};
+                    for (let key in data) {
+                        if (data[key].moneyCoin) {
+                            config[key] = {
+                                type: 1,
+                                value: data[key].moneyCoin
+                            }
+                        } else if (data[key].pointsRatio) {
+                            config[key] = {
+                                type: 2,
+                                value: data[key].pointsRatio
+                            }
+                        } else if (data[key].minPoints) {
+                            config[key] = {
+                                type: 3,
+                                value: data[key].minPoints
+                            }
+                        } else if (data[key].probability) {
+                            config[key] = {
+                                type: 4,
+                                value: data[key].probability
+                            }
+                        }
+                    }
+                    console.log(config);
+                    this.config = config;
+                }
+            })
+        },
+        data() {
+            return {
+                weekDays: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
+                config: {
+
+                }
+            }
+        },
+        methods: {
+            save() {
+                let data = {};
+                for (let key in this.config) {
+                    data[key] = {
+                        weekDay: this.weekDays[Number(key) - 1]
+                    };
+                    switch (this.config[key].type) {
+                        case 1:
+                            data[key].moneyCoin = this.config[key].value;
+                            break;
+                        case 2:
+                            data[key].pointsRatio = this.config[key].value;
+                            break;
+                        case 3:
+                            data[key].minPoints = this.config[key].value;
+                            break;
+                        case 4:
+                            data[key].probability = this.config[key].value;
+                            break;
+                    }
+                }
+                this.$http.post({
+                    url: 'systemVariable/update',
+                    data: {
+                        id: this.id,
+                        variableValue: JSON.stringify(data)
+                    }
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('成功');
+                    } else {
+                        this.$message.error('失败');
+                    }
+                });
+            }
+        }
+    }
+</script>
+<style lang="less" scoped></style>

+ 35 - 5
src/main/vue/src/pages/Competition.vue

@@ -61,6 +61,18 @@
             <el-form-item prop="intro" label="介绍">
                 <el-input v-model="formData.intro" :disabled="'intro'==subColumn"></el-input>
             </el-form-item>
+            <el-form-item prop="gameId" label="游戏">
+                <template>
+                    <el-select v-model="formData.gameId" clearable  placeholder="请选择" :disabled="'gameId'==subColumn">
+                        <el-option
+                            v-for="item in gameIdOptions"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </template>
+            </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
                 <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
@@ -92,7 +104,7 @@
                     }
                 }).then(res => {
                     if (res.success) {
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            this.formData = res.data;
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        this.formData = res.data;
                         if (this.$route.query.column) {
                             this.formData[this.subColumn] = this.subValue;
                         }
@@ -104,7 +116,19 @@
                 }
             }
 
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                },
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                this.$http.get({
+                            url:'/gameInfo/all'
+                        }).then(res => {
+                            if (res.success) {
+
+                                if (res.data.length > 0) {
+                                    res.data.forEach(item => {
+                                        this.gameIdOptions.push({label: item.gameName, value:item.id});
+                                    })
+                                }
+                            }
+                        });
+                                                                        },
         data() {
             return {
                 saving: false,
@@ -123,9 +147,15 @@
                     status: [
                         {required: true, message: '请输入 状态', trigger: 'blur'},
                     ],
+                    intro: [
+                    ],
+                    gameId: [
+                        {required: true, message: '请输入 游戏', trigger: 'blur'},
+                    ],
                 },
-            typeOptions:[{label:'普通',value:1},{label:'高级',value:2}],
-            statusOptions:[{label:'进行中',value:1},{label:'已结束',value:2}],
+            typeOptions:[{"label":"普通","value":1},{"label":"高举","value":2}],
+            statusOptions:[{"label":"进行中","value":1},{"label":"已结束","value":2}],
+            gameIdOptions:[],
                 subColumn: '',
                 subValue: '',
             }
@@ -181,7 +211,7 @@
             submit() {
                 let data = {...this.formData};
 
-                                                                                                                                                                                                                                
+                                                                                                                                                                                                                                                
                 this.$http.post({
                     url: this.formData.id ? '/competition/update' : '/competition/save',
                     data: data

+ 16 - 0
src/main/vue/src/pages/Competitions.vue

@@ -94,6 +94,13 @@
                                 label="介绍"
                                 min-width="100">
                         </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('gameId')"
+                                prop="gameId"
+                                label="游戏"
+                                min-width="100">
+                        </el-table-column>
                                                             <el-table-column
                     label="操作"
                     align="center"
@@ -271,6 +278,11 @@
                                 label: '介绍',
                                 value: 'intro',
                                 show: true
+                            },
+                                                                                                {
+                                label: '游戏',
+                                value: 'gameId',
+                                show: true
                             },
                                                             ],
                 multipleMode: false,
@@ -307,6 +319,10 @@
                                                                                                 {
                                 label: '介绍',
                                 value: 'intro'
+                            },
+                                                                                                {
+                                label: '游戏',
+                                value: 'game_id'
                             },
                                                             ],
                 advancedQuerySearchKey: '',

+ 1 - 1
src/main/vue/src/pages/GameInfo.vue

@@ -30,7 +30,7 @@
                 <el-input v-model="formData.remark" :disabled="'remark'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="useFlag" label="可用">
-                <el-switch v-model="formData.useFlag" active-color="#13ce66" inactive-color="#ff4949" :disabled="'useFlag'==subColumn">
+                <el-switch v-model="formData.useFlag" :disabled="'useFlag'==subColumn">
                 </el-switch>
             </el-form-item>
             <el-form-item>

+ 570 - 371
src/main/vue/src/pages/GenCode.vue

@@ -1,6 +1,6 @@
 <template>
     <div v-loading="loading" element-loading-text="拼命加载中">
-        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small">
+        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="mini">
             <el-form-item prop="readTable" label="读表">
 
                 <el-switch :value="formData.readTable" on-text="读表" off-text="不读" @change="updateReadTable()">
@@ -19,7 +19,8 @@
             </el-form-item>
 
             <el-form-item prop="dataBaseType" label="库类型">
-                <el-select placeholder="库类型" size="small" v-model="formData.dataBaseType" @change="changeDataBaseType" class="filter-item">
+                <el-select placeholder="库类型" v-model="formData.dataBaseType" @change="changeDataBaseType"
+                           class="filter-item">
                     <el-option label="Mysql" value="Mysql">
                     </el-option>
                     <el-option label="SqlServer" value="SqlServer">
@@ -28,8 +29,10 @@
             </el-form-item>
             <el-form-item prop="dataSourceCode" label="数据库">
 
-                <el-select placeholder="数据库" size="small" v-model="formData.dataSourceCode" @change="changeDataSourceCode" class="filter-item">
-                    <el-option v-for="item in datasourceInfoList" :label="item.databaseName" :value="item.code" :key="item.code"></el-option>
+                <el-select placeholder="数据库" v-model="formData.dataSourceCode"
+                           @change="changeDataSourceCode" class="filter-item">
+                    <el-option v-for="item in datasourceInfoList" :label="item.databaseName" :value="item.code"
+                               :key="item.code"></el-option>
                 </el-select>
 
             </el-form-item>
@@ -39,7 +42,8 @@
             </el-form-item>
             <el-form-item prop="tableName" label="表名" v-if="formData.readTable">
 
-                <el-select placeholder="表名" size="small" clearable filterable v-model="formData.tableName" @change="changeTableName" class="filter-item">
+                <el-select placeholder="表名" size="small" clearable filterable v-model="formData.tableName"
+                           @change="changeTableName" class="filter-item">
                     <el-option v-for="item in tableList" :label="item" :value="item" :key="item"></el-option>
                 </el-select>
 
@@ -59,15 +63,16 @@
                 <el-tabs value="1" type="border-card">
                     <el-tab-pane label="字段" name="1">
                         <el-table :data="fields">
-                            <el-table-column prop="name" label="字段名" align="center">
+                            <el-table-column prop="name" label="字段名" width="200" align="center">
                                 <template slot-scope="{row}">
                                     <el-input v-model="row.name"></el-input>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="type" label="类型" width="150" align="center">
+                            <el-table-column prop="type" label="类型" width="200" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.jdbcType" filterable>
-                                        <el-option v-for="item in fieldTypes" :value="item" :label="item" :key="item"></el-option>
+                                        <el-option v-for="item in fieldTypes" :value="item" :label="item"
+                                                   :key="item"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column>
@@ -106,8 +111,11 @@
                                     <el-checkbox v-model="row.autoIncrease"></el-checkbox>
                                 </template>
                             </el-table-column>
-                            <el-table-column width="60" align="center">
-                                <template slot-scope="{ row, column, $index }" v-if="$index>1">
+                            <el-table-column width="130" align="center">
+                                <template slot-scope="{ row, column, $index }"
+                                          v-if="$index>1||formData.dataBaseType!='Mysql'">
+                                    <el-button @click="moveUp($index)" size="small" type="text">上移</el-button>
+                                    <el-button @click="moveDown($index)" size="small" type="text">下移</el-button>
                                     <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
                                 </template>
                             </el-table-column>
@@ -116,7 +124,7 @@
                     </el-tab-pane>
                     <el-tab-pane label="页面属性" name="2">
                         <el-table :data="editableFields">
-                            <el-table-column prop="name" label="字段" align="center">
+                            <el-table-column prop="name" label="字段" width="200">
                             </el-table-column>
                             <el-table-column prop="showInList" label="列表" width="50" align="center">
                                 <template slot-scope="{row}">
@@ -125,7 +133,8 @@
                             </el-table-column>
                             <el-table-column prop="showInForm" label="表单" width="50" align="center">
                                 <template slot-scope="{row}">
-                                    <el-checkbox v-model="row.showInForm" :disabled="row.primaryKey&&!formData.readTable"></el-checkbox>
+                                    <el-checkbox v-model="row.showInForm"
+                                                 :disabled="row.primaryKey&&!formData.readTable"></el-checkbox>
                                 </template>
                             </el-table-column>
                             <el-table-column prop="searchable" label="搜索" width="50" align="center">
@@ -141,18 +150,36 @@
                             <el-table-column prop="formType" label="表单类型" width="150" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.formType">
-                                        <el-option v-for="item in formTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                                        <el-option v-for="item in formTypes" :label="item.label" :value="item.value"
+                                                   :key="item.value"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="apiFlag" label="接口" width="50" align="center">
+                            <el-table-column prop="apiFlag" label="接口" width="300" align="center">
                                 <template slot-scope="{row}">
-                                    <el-checkbox v-model="row.apiFlag" :disabled="row.formType!='select'&&row.formType!='multiSelect'"></el-checkbox>
+                                    <el-radio v-model="row.apiFlag" label="1"
+                                              :disabled="row.formType!=='select'&&row.formType!=='multiSelect'">枚举
+                                    </el-radio>
+                                    <el-radio v-model="row.apiFlag" label="2"
+                                              :disabled="row.formType!=='select'&&row.formType!=='multiSelect'">接口
+                                    </el-radio>
+                                    <el-radio v-model="row.apiFlag" label="3"
+                                              :disabled="row.formType!=='select'&&row.formType!=='multiSelect'">表
+                                    </el-radio>
                                 </template>
                             </el-table-column>
                             <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
                                 <template slot-scope="{row}">
-                                    <el-input type="textarea" v-model="row.optionsValue" :disabled="row.formType!='select'&&row.formType!='multiSelect'"></el-input>
+                                    <el-input class="code" v-model="row.optionsValue" autosize
+                                              v-if="row.apiFlag==='1'&&(row.formType==='select'||row.formType==='multiSelect')">
+                                        <el-button slot="append" type="text" @click="editOptions(row)">编辑
+                                        </el-button>
+                                    </el-input>
+                                    <el-input class="code" :value="optionsInfo(row)" disabled
+                                              v-if="(row.apiFlag==='2'||row.apiFlag==='3')&&(row.formType==='select'||row.formType==='multiSelect')">
+                                        <el-button slot="append" type="text" @click="editSelectField(row)">编辑
+                                        </el-button>
+                                    </el-input>
                                 </template>
                             </el-table-column>
                             <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
@@ -166,7 +193,12 @@
                     </el-tab-pane>
                     <el-tab-pane label="表单校验" name="3">
                         <el-table :data="fields">
-                            <el-table-column prop="name" label="字段" align="center">
+                            <el-table-column prop="name" label="字段" width="200">
+                            </el-table-column>
+                            <el-table-column prop="logicalKey" label="逻辑关键字" width="100" align="center">
+                                <template slot-scope="{row}">
+                                    <el-checkbox v-model="row.logicalKey"></el-checkbox>
+                                </template>
                             </el-table-column>
                             <el-table-column prop="required" label="必填" width="50" align="center">
                                 <template slot-scope="{row}">
@@ -178,30 +210,31 @@
                                     <el-checkbox v-model="row.validate"></el-checkbox>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="minLength" label="最短" width="80" align="center">
+                            <el-table-column prop="minLength" label="最短" min-width="80" align="center">
                                 <template slot-scope="{row}">
                                     <el-input v-model.number="row.minLength"></el-input>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="maxLength" label="最长" width="80" align="center">
+                            <el-table-column prop="maxLength" label="最长" min-width="80" align="center">
                                 <template slot-scope="{row}">
                                     <el-input v-model.number="row.maxLength"></el-input>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="min" label="最小值" width="80" align="center">
+                            <el-table-column prop="min" label="最小值" min-width="80" align="center">
                                 <template slot-scope="{row}">
                                     <el-input v-model="row.min"></el-input>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="max" label="最大值" width="80" align="center">
+                            <el-table-column prop="max" label="最大值" min-width="80" align="center">
                                 <template slot-scope="{row}">
                                     <el-input v-model="row.max"></el-input>
                                 </template>
                             </el-table-column>
-                            <el-table-column prop="validatorType" label="校验类型" width="150" align="center">
+                            <el-table-column prop="validatorType" label="校验类型" min-width="150" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.validatorType" clearable>
-                                        <el-option v-for="item in validatorTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                                        <el-option v-for="item in validatorTypes" :label="item.label"
+                                                   :value="item.value" :key="item.value"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column>
@@ -230,7 +263,8 @@
                             <el-table-column prop="subCode" label="子表类" width="150" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.subCode" clearable>
-                                        <el-option v-for="item in subCodes" :label="item.className" :value="item.className" :key="item.className"></el-option>
+                                        <el-option v-for="item in subCodes" :label="item.className"
+                                                   :value="item.className" :key="item.className"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column>
@@ -250,394 +284,559 @@
                 <el-button @click="$router.go(-1)">取消</el-button>
             </el-form-item>
         </el-form>
+
+        <el-dialog title="接口选项" :visible.sync="showApiSelectDialog">
+            <el-form :model="selectField" size="small" label-position="right" label-width="80px">
+                <el-form-item label="接口">
+                    <el-select placeholder="接口" filterable clearable v-model="selectField.optionsMethod"
+                               class="filter-item">
+                        <el-option v-for="item in selectMappings" :label="item.url" :value="item.url"
+                                   :key="item.url">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="显示">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag==='2'" filterable clearable
+                               placeholder="显示" v-model="selectField.optionsLabel" class="filter-item">
+                        <el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')"
+                                   :label="item" :value="item" :key="item">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="选项">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag==='2'" filterable clearable
+                               placeholder="选项" v-model="selectField.optionsValue" class="filter-item">
+                        <el-option v-for="item in selectMappingsJson[selectField.optionsMethod].fileds.split(',')"
+                                   :label="item" :value="item" :key="item">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="selectMappingSubmit" size="small">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="表选项" :visible.sync="showTableSelectDialog">
+            <el-form :model="selectField" label-position="right" label-width="80px">
+                <el-form-item label="库类型">
+                    <el-select placeholder="库类型" size="small" filterable clearable
+                               v-model="selectField.optionsDataBaseType" @change="changeOptionsDataBaseType"
+                               class="filter-item">
+                        <el-option label="Mysql" value="Mysql">
+                        </el-option>
+                        <el-option label="SqlServer" value="SqlServer">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="数据库">
+                    <el-select class="filter-item" placeholder="数据库" size="small" filterable clearable
+                               v-model="selectField.optionsDataSourceCode" @change="changeOptionsDataSourceCode">
+                        <el-option v-for="item in optionsDatasourceInfoList" :label="item.databaseName"
+                                   :value="item.code" :key="item.code"></el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label="表名">
+                    <el-select placeholder="表名" size="small" clearable filterable v-model="selectField.optionsMethod"
+                               @change="changeOptionsTableName" class="filter-item">
+                        <el-option v-for="item in optionsTableList" :label="item" :value="item" :key="item"></el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label="显示">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag==='3'" filterable clearable
+                               placeholder="显示" size="small" v-model="selectField.optionsLabel" class="filter-item">
+                        <el-option v-for="item in optionsFields" :label="item.name" :value="item.name"
+                                   :key="item.name">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+
+                <el-form-item label="选项">
+                    <el-select v-if="selectField.optionsMethod&&selectField.apiFlag==='3'" filterable clearable
+                               placeholder="选项" size="small" v-model="selectField.optionsValue" class="filter-item">
+                        <el-option v-for="item in optionsFields" :label="item.name" :value="item.name"
+                                   :key="item.name">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+
+                </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="selectMappingSubmit" size="small">确定</el-button>
+            </span>
+        </el-dialog>
+        <gen-option-dialog :visible.sync="showGenOptionsDialog" v-model="tempRow.optionsValue"></gen-option-dialog>
     </div>
 </template>
 
 <script>
-import axios from 'axios'
+    import axios from 'axios'
+    import GenOptionDialog from '../components/GenOptionsDialog'
+
+    export default {
+        created() {
+            if (this.$route.query.id) {
+                this.loading = true;
+                this.$http.get({
+                    url: '/genCode/getOne',
+                    data: {
+                        id: this.$route.query.id
+                    }
+                }).then(res => {
+                    this.loading = false;
+                    if (res.success) {
+                        this.formData = {
+                            ...this.formData,
+                            ...JSON.parse(res.data.genJson)
+                        };
+                        this.fields = this.formData.fields;
+                        this.formData.id = res.data.id;
+                        this.formData.genRouter = false;
+                        this.subtables = this.formData.subtables;
+                    }
+                }).catch(e => this.loading = false)
+            }
 
-export default {
-    created() {
-        if (this.$route.query.id) {
-            this.loading = true;
             this.$http.get({
-                url: '/genCode/getOne',
-                data: {
-                    id: this.$route.query.id
+                url: '/genCode/getSrcPath'
+            }).then(res => {
+                if (res.success) {
+                    this.formData.rootPath = res.data.root;
+                    this.formData.javaPathRelative = res.data.javaPath;
+                    this.formData.viewPathRelative = res.data.viewPath;
+                    this.formData.routerPathRelative = res.data.routerPath;
                 }
+            });
+            this.$http.get({
+                url: '/dataSourceInfo/all'
             }).then(res => {
-                this.loading = false;
                 if (res.success) {
-                    this.formData = {
-                        ...this.formData,
-                        ...JSON.parse(res.data.genJson)
-                    };
-                    this.fields = this.formData.fields;
-                    this.formData.id = res.data.id;
-                    this.formData.genRouter = false;
-                    this.subtables = this.formData.subtables;
+                    this.MysqlDataSourceInfos.push(this.baseDataSource);
+
+                    if (res.data.length > 0) {
+                        res.data.forEach(item => {
+                            if ('Mysql' === item.databaseType) {
+                                this.MysqlDataSourceInfos.push(item);
+                            } else if ('SqlServer' === item.databaseType) {
+                                this.SqlServerDataSourceInfos.push(item);
+                            }
+                        })
+                    }
+                    this.datasourceInfoList = this.MysqlDataSourceInfos;
                 }
-            }).catch(e => this.loading = false)
-        }
-
-        this.$http.get({
-            url: '/genCode/getSrcPath'
-        }).then(res => {
-            if (res.success) {
-                this.formData.rootPath = res.data.root;
-                this.formData.javaPathRelative = res.data.javaPath;
-                this.formData.viewPathRelative = res.data.viewPath;
-                this.formData.routerPathRelative = res.data.routerPath;
-            }
-        });
-        this.$http.get({
-            url: '/dataSourceInfo/all'
-        }).then(res => {
-            if (res.success) {
-                this.MysqlDataSourceInfos.push(this.baseDataSource);
-
-                if (res.data.length > 0) {
-                    res.data.forEach(item => {
-                        if ('Mysql' == item.databaseType) {
-                            this.MysqlDataSourceInfos.push(item);
-                        } else if ('SqlServer' == item.databaseType) {
-                            this.SqlServerDataSourceInfos.push(item);
-                        }
-                    })
+            });
+            this.$http.get({
+                url: '/genCode/all'
+            }).then(res => {
+                if (res.success) {
+                    this.subCodes = res.data;
                 }
-                this.datasourceInfoList = this.MysqlDataSourceInfos;
-            }
-        });
-        this.$http.get({
-            url: '/genCode/all'
-        }).then(res => {
-            if (res.success) {
-                this.subCodes = res.data;
-            }
-        });
-
-
-        this.getDatabaseTables();
-
-
-    },
-    data() {
-        return {
-            loading: false,
-            fieldTypes: ['char', 'varchar', 'int', 'text', 'timestamp', 'datetime', 'decimal', 'float'],
-            searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'between', 'like', 'left like', 'right like'],
-            formTypes: [
-                { label: '单行文本', value: 'singleLineText' },
-                { label: '多行文本', value: 'textarea' },
-                { label: '富文本', value: 'richText' },
-                { label: '数字', value: 'number' },
-                { label: '日期选择', value: 'date' },
-                { label: '日期时间选择', value: 'datetime' },
-                { label: '单选下拉框', value: 'select' },
-                { label: '多选下拉框', value: 'multiSelect' },
-                { label: '单图上传', value: 'singleImage' },
-                { label: '多图上传', value: 'multiImage' },
-                { label: '文件上传', value: 'fileUpload' },
-                { label: '树形选择', value: 'tree' },
-                { label: '开关', value: 'switch' }
-            ],
-            validatorTypes: [
-                { label: '英文', value: 'english' },
-                { label: '数字', value: 'number' },
-                { label: '手机', value: 'phone' },
-                { label: '网址', value: 'url' },
-                { label: '电子邮件', value: 'email' },
-                { label: '身份证', value: 'id' }
-            ],
-            rules: {
-                className: [
-                    { required: true, message: '请填写类名', trigger: 'blur' },
-                    {
-                        validator: (rule, value, callback) => {
-                            if (value) {
-                                if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
-                                    callback();
-                                } else {
-                                    callback(new Error('类名不正确'));
-                                }
-                            }
-                        }, trigger: 'blur'
+            });
+
+            this.$http.get({
+                url: '/dev/selectMappings'
+            }).then(res => {
+                if (res.success) {
+                    let temp = {};
+                    if (res.data.length > 0) {
+                        res.data.forEach(item => {
+                            temp[item.url] = item
+                        })
                     }
+                    this.selectMappingsJson = temp;
+                    this.selectMappings = res.data;
+                }
+            });
+
+            this.getDatabaseTables();
+        },
+        data() {
+            return {
+                loading: false,
+                fieldTypes: ['char', 'varchar', 'int', 'bit', 'text', 'timestamp', 'datetime', 'decimal', 'float', 'vue'],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'between', 'like', 'left like', 'right like'],
+                formTypes: [
+                    {label: '单行文本', value: 'singleLineText'},
+                    {label: '数字', value: 'number'},
+                    {label: '日期选择', value: 'date'},
+                    {label: '日期时间选择', value: 'datetime'},
+                    {label: '登录名', value: 'loginName'},
+                    {label: '当前时间', value: 'currentTime'},
+                    {label: '当前日期', value: 'currentDate'},
+                    {label: '单选下拉框', value: 'select'},
+                    {label: '多选下拉框', value: 'multiSelect'},
+                    {label: '单图上传', value: 'singleImage'},
+                    {label: '多图上传', value: 'multiImage'},
+                    {label: '文件上传', value: 'fileUpload'},
+                    {label: '树形选择', value: 'tree'},
+                    {label: '开关', value: 'switch'},
+                    {label: '多行文本', value: 'textarea'},
+                    {label: '富文本', value: 'richText'},
                 ],
-                tableName: [
-                    { required: true, message: '请填写表名', trigger: 'blur' },
-                    {
-                        validator: (rule, value, callback) => {
-                            if (value) {
-                                if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
-                                    callback();
-                                } else {
-                                    callback(new Error('表名不正确'));
+                validatorTypes: [
+                    {label: '英文', value: 'english'},
+                    {label: '数字', value: 'number'},
+                    {label: '手机', value: 'phone'},
+                    {label: '网址', value: 'url'},
+                    {label: '电子邮件', value: 'email'},
+                    {label: '身份证', value: 'id'}
+                ],
+                rules: {
+                    className: [
+                        {required: true, message: '请填写类名', trigger: 'blur'},
+                        {
+                            validator: (rule, value, callback) => {
+                                if (value) {
+                                    if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
+                                        callback();
+                                    } else {
+                                        callback(new Error('类名不正确'));
+                                    }
                                 }
-                            }
-                        }, trigger: 'blur'
-                    }
+                            }, trigger: 'blur'
+                        }
+                    ],
+                    tableName: [
+                        {required: true, message: '请填写表名', trigger: 'blur'},
+                        {
+                            validator: (rule, value, callback) => {
+                                if (value) {
+                                    if (/^[\u4e00-\u9fa5a-zA-Z0-9_]*$/.test(value)) {
+                                        callback();
+                                    } else {
+                                        callback(new Error('表名不正确'));
+                                    }
+                                }
+                            }, trigger: 'blur'
+                        }
+                    ],
+                    remark: [{required: true, message: '请填写描述', trigger: 'blur'}],
+                    rootPath: [{required: true, message: '请填写生成目录', trigger: 'blur'}],
+                    dataBaseType: [{required: true, message: '请选择数据库类型', trigger: 'blur'}],
+                    dataSourceCode: [{required: true, message: '请填选择数据库', trigger: 'blur'}],
+                    typeFlag: [{required: true, message: '请填填写分类', trigger: 'blur'}],
+                },
+                formData: {
+                    tableName: '',
+                    remark: '',
+                    genTable: true,
+                    genClass: true,
+                    genList: true,
+                    genForm: true,
+                    genRouter: true,
+                    rootPath: '',
+                    javaPathRelative: '',
+                    viewPathRelative: '',
+                    dataBaseType: 'Mysql',
+                    readTable: false,
+                    dataSourceCode: 'dataSource',
+                    className: '',
+                    subtables: []
+                },
+                fields: [
+                    {
+                        name: 'id',
+                        jdbcType: 'int',
+                        notNull: true,
+                        primaryKey: true,
+                        autoIncrease: true,
+                        remark: '',
+                        showInList: false,
+                        showInForm: false,
+                        searchable: false,
+                        sortable: true
+                    },
+                    {
+                        name: 'del_flag',
+                        jdbcType: 'char',
+                        notNull: true,
+                        primaryKey: false,
+                        autoIncrease: false,
+                        remark: '删除标识',
+                        showInList: false,
+                        showInForm: false,
+                        searchable: false,
+                        defaultValue: 'N',
+                        length: 1,
+                        sortable: false
+                    },
                 ],
-                remark: [{ required: true, message: '请填写描述', trigger: 'blur' }],
-                rootPath: [{ required: true, message: '请填写生成目录', trigger: 'blur' }],
-                dataBaseType: [{ required: true, message: '请选择数据库类型', trigger: 'blur' }],
-                dataSourceCode: [{ required: true, message: '请填选择数据库', trigger: 'blur' }],
-                typeFlag: [{ required: true, message: '请填填写分类', trigger: 'blur' }],
-            },
-            formData: {
-                tableName: '',
-                remark: '',
-                genTable: true,
-                genClass: true,
-                genList: true,
-                genForm: true,
-                genRouter: true,
-                rootPath: '',
-                javaPathRelative: '',
-                viewPathRelative: '',
-                dataBaseType: 'Mysql',
-                readTable: false,
-                dataSourceCode: 'dataSource',
-                className: '',
+                MysqlDataSourceInfos: [],
+                SqlServerDataSourceInfos: [],
+                baseDataSource: {
+                    databaseType: 'Mysql',
+                    code: 'dataSource',
+                    databaseName: '基础数据库'
+                },
+                datasourceInfoList: [],
+                tableList: [],
                 subtables: [],
-                typeFlag:'电竞互动',
+                subCodes: [],
+                selectMappings: [],
+                selectMappingsJson: {},
+                showApiSelectDialog: false,
+                selectField: {},
+                showTableSelectDialog: false,
+                optionsDatasourceInfoList: [],
+                optionsTableList: [],
+                optionsFields: [],
+                showGenOptionsDialog: false,
+                tempRow: {}
+            }
+        },
+        computed: {
+            editableFields() {
+                return this.fields.filter(i => {
+                    return i.name
+                });
+            },
 
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.submit();
+                    } else {
+                        return false;
+                    }
+                });
             },
-            fields: [
-                {
-                    name: 'id',
-                    jdbcType: 'int',
-                    notNull: true,
-                    primaryKey: true,
-                    autoIncrease: true,
-                    remark: '',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    sortable: true
-                },
-                {
-                    name: 'del_flag',
-                    jdbcType: 'char',
-                    notNull: true,
-                    primaryKey: false,
-                    autoIncrease: false,
-                    remark: '删除标识',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    defaultValue: 'N',
-                    length: 1,
-                    sortable: false
-                },
-                {
-                    name: 'update_time',
-                    jdbcType: 'timestamp',
-                    notNull: true,
-                    primaryKey: false,
-                    autoIncrease: false,
-                    remark: '更新时间',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    defaultValue: 'CURRENT_TIMESTAMP',
-                    length: 0,
-                    sortable: false
-                },
-                {
-                    name: 'update_user',
-                    jdbcType: 'varchar',
-                    notNull: false,
-                    primaryKey: false,
-                    autoIncrease: false,
-                    remark: '更新人',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    defaultValue: '',
-                    length: 45,
-                    sortable: false
-                },
-                {
-                    name: 'create_time',
-                    jdbcType: 'timestamp',
-                    notNull: true,
-                    primaryKey: false,
-                    autoIncrease: false,
-                    remark: '创建时间',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    defaultValue: 'CURRENT_TIMESTAMP',
-                    length: 0,
-                    sortable: false
-                },
-                {
-                    name: 'create_user',
+            submit() {
+
+                this.formData.fields = this.fields;
+                this.formData.subtables = this.subtables;
+                this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
+                this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
+                this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
+                this.formData.genJson = '';
+
+                this.$alert('生成代码可能会删除已有同名表、数据或文件,确认要生成么?', '警告', {type: 'error'}).then(() => {
+                    this.loading = true;
+                    return axios.post(this.formData.id ? '/genCode/update' : '/genCode/save', this.formData)
+                }).then(() => {
+                    this.loading = false;
+                    this.$message.success('代码生成成功');
+                    this.$router.go(-1);
+                }).catch(res => {
+                    this.loading = false;
+                    if ('cancel' === res) {
+                        this.$msgbox({title: '提示', type: 'error', message: '生成取消'});
+                    } else {
+                        this.$msgbox({title: '提示', type: 'error', message: '生成失败'});
+                    }
+                })
+            },
+            addField() {
+                this.fields.push({
+                    name: '',
                     jdbcType: 'varchar',
                     notNull: false,
                     primaryKey: false,
                     autoIncrease: false,
-                    remark: '创建人',
-                    showInList: false,
-                    showInForm: false,
-                    searchable: false,
-                    defaultValue: '',
-                    length: 45,
-                    sortable: false
-                },
-            ],
-            MysqlDataSourceInfos: [],
-            SqlServerDataSourceInfos: [],
-            baseDataSource: {
-                databaseType: 'Mysql',
-                code: 'dataSource',
-                databaseName: '基础数据库'
+                    remark: '',
+                    showInList: true,
+                    showInForm: true,
+                    searchable: true,
+                    formType: 'singleLineText',
+                    sortable: true
+                });
+            },
+            removeField(i) {
+                if (this.fields.length > 0) {
+                    this.fields.splice(i, 1);
+                }
+            },
+            updateReadTable() {
+                this.formData.readTable = !this.formData.readTable;
+                this.formData.genTable = !this.formData.readTable;
+            },
+            changeDataBaseType() {
+                if ('Mysql' === this.formData.dataBaseType) {
+                    this.datasourceInfoList = this.MysqlDataSourceInfos;
+                    this.formData.dataSourceCode = 'dataSource';
+                    this.getDatabaseTables();
+                } else if ('SqlServer' === this.formData.dataBaseType) {
+                    this.datasourceInfoList = this.SqlServerDataSourceInfos;
+                    this.formData.dataSourceCode = '';
+                }
+            },
+            changeOptionsDataBaseType() {
+                if ('Mysql' === this.selectField.optionsDataBaseType) {
+                    this.optionsDatasourceInfoList = this.MysqlDataSourceInfos;
+                    this.selectField.optionsDataSourceCode = 'dataSource';
+                    this.getOptionsDatabaseTables();
+                } else if ('SqlServer' === this.selectField.optionsDataBaseType) {
+                    this.optionsDatasourceInfoList = this.SqlServerDataSourceInfos;
+                    this.selectField.optionsDataSourceCode = '';
+                }
+            },
+            getDatabaseTables(code) {
+                this.tableList = [];
+                this.$http.get({
+                    url: '/genCode/tables',
+                    data: {
+                        code: code
+                    }
+                }).then(res => {
+                    if (res.success) {
 
+                        this.tableList = res.data;
+                    }
+                })
             },
-            datasourceInfoList: [],
-            tableList: [],
-            subtables: [],
-            subCodes: [],
-        }
-    },
-    computed: {
-        editableFields() {
-            return this.fields.filter(i => {
-                return i.name
-            });
-        }
-    },
-    methods: {
-        onSave() {
-            this.$refs.form.validate((valid) => {
-                if (valid) {
-                    this.submit();
-                } else {
-                    return false;
+            getOptionsDatabaseTables(code) {
+                this.optionsTableList = [];
+                this.$http.get({
+                    url: '/genCode/tables',
+                    data: {
+                        code: code
+                    }
+                }).then(res => {
+                    if (res.success) {
+
+                        this.optionsTableList = res.data;
+                    }
+                })
+            },
+            changeDataSourceCode() {
+                if (this.formData.readTable) {
+
+                    this.formData.tableName = '';
+                    this.getDatabaseTables(this.formData.dataSourceCode);
                 }
-            });
-        },
-        submit() {
+            },
+            changeOptionsDataSourceCode() {
+
+                this.getOptionsDatabaseTables(this.selectField.optionsDataSourceCode);
+            },
+            changeTableName() {
+                if (this.formData.readTable) {
 
-            this.formData.fields = this.fields;
-            this.formData.subtables = this.subtables;
-            this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
-            this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
-            this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
-            this.formData.genJson = '';
+                    this.fields = [];
 
-            this.$alert('生成代码可能会删除已有同名表、数据或文件,确认要生成么?', '警告', { type: 'error' }).then(() => {
-                this.loading = true;
-                return axios.post(this.formData.id ? '/genCode/update' : '/genCode/save', this.formData)
-            }).then(() => {
-                this.loading = false;
-                this.$message.success('代码生成成功');
-                this.$router.go(-1);
-            }).catch(res => {
-                this.loading = false;
-                if ('cancel' === res) {
-                    this.$msgbox({ title: '提示', type: 'error', message: '生成取消' });
-                } else {
-                    this.$msgbox({ title: '提示', type: 'error', message: '生成失败' });
+                    this.getTableFields(this.formData.tableName);
                 }
-            })
-        },
-        addField() {
-            this.fields.push({
-                name: '',
-                jdbcType: 'varchar',
-                notNull: false,
-                primaryKey: false,
-                autoIncrease: false,
-                remark: '',
-                showInList: true,
-                showInForm: true,
-                searchable: true,
-                formType: 'singleLineText',
-                sortable: true
-            });
-        },
-        removeField(i) {
-            if (this.fields.length > 1) {
-                this.fields.splice(i, 1);
-            }
-        },
-        updateReadTable() {
-            this.formData.readTable = !this.formData.readTable;
-            this.formData.genTable = !this.formData.readTable;
-        },
-        changeDataBaseType() {
-            if ('Mysql' == this.formData.dataBaseType) {
-                this.datasourceInfoList = this.MysqlDataSourceInfos;
-                this.formData.dataSourceCode = 'dataSource';
-                this.getDatabaseTables();
-            } else if ('SqlServer' == this.formData.dataBaseType) {
-                this.datasourceInfoList = this.SqlServerDataSourceInfos;
-                this.formData.dataSourceCode = '';
-            }
-        },
-        getDatabaseTables(code) {
-            this.tableList = [];
-            this.$http.get({
-                url: '/genCode/tables',
-                data: {
-                    code: code
+            },
+            changeOptionsTableName() {
+
+                this.optionsFields = [];
+
+                this.getOptionsTableFields(this.selectField.optionsMethod);
+            },
+            getTableFields(tableName) {
+                this.$http.get({
+                    url: '/genCode/tableFields',
+                    data: {
+                        code: this.formData.dataSourceCode,
+                        tableName: tableName,
+                        databaseType: this.formData.dataBaseType,
+                    }
+                }).then(res => {
+                    if (res.success) {
+
+                        this.fields = res.data;
+                    }
+                })
+            },
+            getOptionsTableFields(tableName) {
+                this.$http.get({
+                    url: '/genCode/tableFields',
+                    data: {
+                        code: this.selectField.optionsDataSourceCode,
+                        tableName: tableName,
+                        databaseType: this.selectField.optionsDataBaseType,
+                    }
+                }).then(res => {
+                    if (res.success) {
+
+                        this.optionsFields = res.data;
+                    }
+                })
+            },
+            addSubtable() {
+                this.subtables.push({
+                    name: '',
+                    column: '',
+                    subColumn: '',
+                    subCode: '',
+                });
+            },
+            removeSubtable(i) {
+                if (this.subtables.length > 0) {
+                    this.subtables.splice(i, 1);
                 }
-            }).then(res => {
-                if (res.success) {
+            },
+            moveUp(i) {
+                if (i > 0) {
+                    let tempFields = [...this.fields];
+                    let tempField = tempFields[i - 1];
 
-                    this.tableList = res.data;
+                    tempFields[i - 1] = tempFields[i];
+                    tempFields[i] = tempField;
+
+                    this.fields = tempFields;
                 }
-            })
-        },
-        changeDataSourceCode() {
-            if (this.formData.readTable) {
+            },
+            moveDown(i) {
+                if (this.fields.length - 1 > i) {
 
-                this.formData.tableName = '';
-                this.getDatabaseTables(this.formData.dataSourceCode);
-            }
-        },
-        changeTableName() {
-            if (this.formData.readTable) {
+                    let tempFields = [...this.fields];
 
-                this.fields = [];
+                    let tempField = tempFields[i + 1];
 
-                this.getTableFields(this.formData.tableName);
-            }
-        },
-        getTableFields(tableName) {
-            this.$http.get({
-                url: '/genCode/tableFields',
-                data: {
-                    code: this.formData.dataSourceCode,
-                    tableName: tableName,
-                    databaseType: this.formData.dataBaseType,
+                    tempFields[i + 1] = tempFields[i];
+                    tempFields[i] = tempField;
+
+                    this.fields = tempFields;
                 }
-            }).then(res => {
-                if (res.success) {
+            },
+            editSelectField(row) {
+                this.selectField = row;
 
-                    this.fields = res.data;
+                if (row.apiFlag === '2') {
+                    this.showApiSelectDialog = true;
+                } else if (row.apiFlag === '3') {
+                    this.showTableSelectDialog = true;
                 }
-            })
-        },
-        addSubtable() {
-            this.subtables.push({
-                name: '',
-                column: '',
-                subColumn: '',
-                subCode: '',
-            });
-        },
-        removeSubtable(i) {
-            if (this.subtables.length > 0) {
-                this.subtables.splice(i, 1);
+            },
+            optionsInfo(row) {
+                let value = '';
+                if (row.apiFlag === '1') {
+                    value = row.optionsValue;
+                } else if (row.apiFlag === '2') {
+                    value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
+                } else if (row.apiFlag === '3') {
+                    value = row.optionsMethod + ',' + row.optionsLabel + ',' + row.optionsValue;
+                }
+                return value;
+            },
+            selectMappingSubmit() {
+
+                if (this.selectField.apiFlag === '2') {
+
+                    this.showApiSelectDialog = false;
+                } else if (this.selectField.apiFlag === '3') {
+                    this.showTableSelectDialog = false;
+                }
+            },
+            editOptions(row) {
+                this.tempRow = row;
+                this.showGenOptionsDialog = true;
             }
         },
-
+        components: {
+            GenOptionDialog
+        }
     }
-}
 </script>
 
 <style lang="less" scoped>
+    .code {
+        font-family: "dejavu sans mono", "droid sans mono", consolas, monaco, "lucida console", "courier new", courier, monospace, sans-serif;
+    }
 </style>

+ 42 - 45
src/main/vue/src/pages/HouseInfo.vue

@@ -16,55 +16,50 @@
                 <el-input v-model="formData.houseCode" :disabled="'houseCode'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="userId" label="用户">
-                <template>
-                    <el-select v-model="formData.userId" clearable placeholder="请选择" :disabled="'userId'==subColumn">
-                        <el-option v-for="item in userIdOptions" :key="item.value" :label="item.label"
-                                   :value="item.value">
-                        </el-option>
-                    </el-select>
-                </template>
+                <el-select v-model="formData.userId" clearable placeholder="请选择" :disabled="'userId'==subColumn">
+                    <el-option v-for="item in userIdOptions" :key="item.value" :label="item.label"
+                               :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="competitionId" label="联赛">
+                <el-select v-model="formData.competitionId">
+                    <el-option v-for="item in competitions" :value="item.id" :label="item.competitionName"></el-option>
+                </el-select>
             </el-form-item>
             <el-form-item prop="houseType" label="类型">
-                <template>
-                    <el-select v-model="formData.houseType" clearable placeholder="请选择"
-                               :disabled="'houseType'==subColumn">
-                        <el-option v-for="item in houseTypeOptions" :key="item.value" :label="item.label"
-                                   :value="item.value">
-                        </el-option>
-                    </el-select>
-                </template>
+                <el-select v-model="formData.houseType" clearable placeholder="请选择"
+                           :disabled="'houseType'==subColumn">
+                    <el-option v-for="item in houseTypeOptions" :key="item.value" :label="item.label"
+                               :value="item.value">
+                    </el-option>
+                </el-select>
             </el-form-item>
             <el-form-item prop="houseLevel" label="等级">
-                <template>
-                    <el-select v-model="formData.houseLevel" clearable placeholder="请选择"
-                               :disabled="'houseLevel'==subColumn">
-                        <el-option v-for="item in houseLevelOptions" :key="item.value" :label="item.label"
-                                   :value="item.value">
-                        </el-option>
-                    </el-select>
-                </template>
+                <el-select v-model="formData.houseLevel" clearable placeholder="请选择"
+                           :disabled="'houseLevel'==subColumn">
+                    <el-option v-for="item in houseLevelOptions" :key="item.value" :label="item.label"
+                               :value="item.value">
+                    </el-option>
+                </el-select>
             </el-form-item>
             <el-form-item prop="gameId" label="游戏">
-                <template>
-                    <el-select v-model="formData.gameId" clearable placeholder="请选择" :disabled="'gameId'==subColumn">
-                        <el-option v-for="item in gameIdOptions" :key="item.value" :label="item.label"
-                                   :value="item.value">
-                        </el-option>
-                    </el-select>
-                </template>
+                <el-select v-model="formData.gameId" clearable placeholder="请选择" :disabled="'gameId'==subColumn">
+                    <el-option v-for="item in gameIdOptions" :key="item.value" :label="item.label"
+                               :value="item.value">
+                    </el-option>
+                </el-select>
             </el-form-item>
             <el-form-item prop="statusFlag" label="状态">
-                <template>
-                    <el-select v-model="formData.statusFlag" clearable placeholder="请选择"
-                               :disabled="'statusFlag'==subColumn">
-                        <el-option v-for="item in statusFlagOptions" :key="item.value" :label="item.label"
-                                   :value="item.value">
-                        </el-option>
-                    </el-select>
-                </template>
+                <el-select v-model="formData.statusFlag" clearable placeholder="请选择"
+                           :disabled="'statusFlag'==subColumn">
+                    <el-option v-for="item in statusFlagOptions" :key="item.value" :label="item.label"
+                               :value="item.value">
+                    </el-option>
+                </el-select>
             </el-form-item>
             <el-form-item prop="recommendFlag" label="推荐">
-                <el-switch v-model="formData.recommendFlag" active-color="#13ce66" inactive-color="#ff4949"
+                <el-switch v-model="formData.recommendFlag"
                            :disabled="'recommendFlag'==subColumn">
                 </el-switch>
             </el-form-item>
@@ -72,7 +67,7 @@
                 <el-input type="number" v-model="formData.rank" :disabled="'rank'==subColumn"></el-input>
             </el-form-item>
             <el-form-item prop="useFlag" label="可用">
-                <el-switch v-model="formData.useFlag" active-color="#13ce66" inactive-color="#ff4949"
+                <el-switch v-model="formData.useFlag"
                            :disabled="'useFlag'==subColumn">
                 </el-switch>
             </el-form-item>
@@ -149,14 +144,11 @@
                     }
                 }).then(res => {
                     if (res.success) {
-
-
                         this.formData = res.data;
 
                         this.formData.recommendFlag = this.formData.recommendFlag == 'Y' ? true : false;
                         this.formData.useFlag = this.formData.useFlag == 'Y' ? true : false;
 
-
                         if (this.$route.query.column) {
                             this.formData[this.subColumn] = this.subValue;
                         }
@@ -168,7 +160,6 @@
                 }
             }
 
-
             this.$http.get({
                 url: '/userInfo/all'
             }).then(res => {
@@ -222,7 +213,9 @@
 
             this.$http.get({
                 url: 'competition/all',
-                data: {}
+                data: {
+                    status: 1
+                }
             }).then(res => {
                 if (res.success) {
                     this.competitions = res.data;
@@ -238,6 +231,7 @@
                     gameId: 1,
                     statusFlag: 0,
                     useFlag: true,
+                    competitionId: ''
                 },
                 rules: {
                     houseName: [
@@ -245,6 +239,9 @@
                     ],
                     userId: [
                         {required: true}
+                    ],
+                    competitionId: [
+                        {required: true}
                     ]
                 },
                 userIdOptions: [],

+ 197 - 0
src/main/vue/src/pages/PropInfo.vue

@@ -0,0 +1,197 @@
+<template>
+    <div>
+        <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
+                 style="max-width: 500px;">
+            <el-form-item prop="name" label="名称">
+                <el-input v-model="formData.name" :disabled="'name'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="icon" label="图标">
+                            <single-upload v-model="formData.icon" :disabled="'icon'==subColumn"></single-upload>
+            </el-form-item>
+            <el-form-item prop="moneyCoin" label="金币价格">
+                <el-input v-model="formData.moneyCoin" :disabled="'moneyCoin'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="pointsRatio" label="积分加成">
+                <el-input v-model="formData.pointsRatio" :disabled="'pointsRatio'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="minPoints" label="积分保底">
+                <el-input v-model="formData.minPoints" :disabled="'minPoints'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="probability" label="概率">
+                <el-input v-model="formData.probability" :disabled="'probability'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="type" label="类型">
+                <template>
+                    <el-select v-model="formData.type" clearable  placeholder="请选择" :disabled="'type'==subColumn">
+                        <el-option
+                            v-for="item in typeOptions"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value">
+                        </el-option>
+                    </el-select>
+                </template>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    import formValidator from '../formValidator'
+    import { mapState } from 'vuex'
+    import { format } from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        name: 'PropInfo',
+        created() {
+
+            if (this.$route.query.column) {
+                this.subColumn = this.$route.query.column.split(',')[1];
+                this.subValue = this.$route.query.column.split(',')[0];
+            }
+
+            if (this.$route.query.id) {
+                this.$http.get({
+                    url: '/propInfo/getOne',
+                    data: {
+                        id: this.$route.query.id
+                    }
+                }).then(res => {
+                    if (res.success) {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            this.formData = res.data;
+                        if (this.$route.query.column) {
+                            this.formData[this.subColumn] = this.subValue;
+                        }
+                    }
+                })
+            } else {
+                if (this.$route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
+            }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                },
+        data() {
+            return {
+                saving: false,
+                formData: {
+                },
+                rules: {
+                    name: [
+                        {required: true, message: '请输入 名称', trigger: 'blur'},
+                    ],
+                    icon: [
+                        {required: true, message: '请输入 图标', trigger: 'blur'},
+                    ],
+                    moneyCoin: [
+                        {required: true, message: '请输入 金币价格', trigger: 'blur'},
+                    ],
+                    pointsRatio: [
+                        {required: true, message: '请输入 积分加成', trigger: 'blur'},
+                    ],
+                    minPoints: [
+                        {required: true, message: '请输入 积分保底', trigger: 'blur'},
+                    ],
+                    probability: [
+                        {required: true, message: '请输入 概率', trigger: 'blur'},
+                    ],
+                    type: [
+                        {required: true, message: '请输入 类型', trigger: 'blur'},
+                    ],
+                },
+            typeOptions:[{"label":"积分加成",value:1},{"label":"积分保底",value:2},{"label":"概率",value:3}],
+                subColumn: '',
+                subValue: '',
+            }
+        },
+        computed: {
+            ...mapState(['userInfo']),
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.logicalValidate();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            logicalValidate() {
+                let logicalData = {
+                };
+
+                if (JSON.stringify(logicalData) == '{}') {
+                    this.submit();
+                } else {
+                    this.$http.get({
+                        url: '/propInfo/getOne',
+                        data: logicalData
+                    }).then(res => {
+                        if (res.success) {
+                            let logicalFlag = true;
+                            if (res.data) {
+                                if (this.formData.id) {
+                                    if (res.data.id != this.formData.id) {
+                                        logicalFlag = false;
+                                    }
+                                } else {
+                                    logicalFlag = false;
+                                }
+                            }
+
+                            if (logicalFlag) {
+                                this.submit();
+                            } else {
+                                this.$message.warning('逻辑关键字:'+''+'验证失败')
+                            }
+
+                        } else {
+                            this.$message.warning('逻辑关键字:'+''+'验证失败')
+                        }
+                    });
+                }
+            },
+            submit() {
+                let data = {...this.formData};
+
+                                                                                                                                                                                                                                
+                this.$http.post({
+                    url: this.formData.id ? '/propInfo/update' : '/propInfo/save',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    } else {
+                        this.$message.warning('失败')
+                    }
+                });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                    return this.$http.post({
+                        url: '/propInfo/del',
+                        data: { id: this.formData.id }
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 508 - 0
src/main/vue/src/pages/PropInfos.vue

@@ -0,0 +1,508 @@
+<template>
+    <div>
+        <div class="filters-container">
+        
+            <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
+            <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
+            </el-button>
+            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
+                       icon="el-icon-search" class="filter-item">高级查询
+            </el-button>
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
+                       icon="el-icon-sort" class="filter-item">排序
+            </el-button>
+            <el-button @click="$router.push({path:'/propInfo',query:{column:$route.query.column}})" type="primary"
+                       size="small" icon="el-icon-edit"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
+            </el-button>
+            <el-dropdown trigger="click" size="medium" class="table-column-filter">
+                <span>
+                  筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
+                    <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
+                    </el-checkbox>
+                </el-dropdown-menu>
+            </el-dropdown>
+        </div>
+        <el-table
+                :data="tableData"
+                :height="tableHeight"
+                row-key="id"
+                ref="table">
+            <el-table-column
+                    v-if="multipleMode"
+                    align="center"
+                    type="selection"
+                    width="50">
+            </el-table-column>
+            <el-table-column
+                    type="index"
+                    min-width="50"
+                    align="center">
+            </el-table-column>
+                                                                                                                                                                                                    
+                                            <el-table-column
+                                v-if="isColumnShow('name')"
+                                prop="name"
+                                label="名称"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('icon')"
+                                prop="icon"
+                                label="图标"
+                                min-width="100">
+                            <template slot-scope="{row}">
+                                <img :src="row.icon" @click="showImg(row.icon)" style="width: 100px;height: 100px;vertical-align: middle;" />
+                            </template>
+
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('moneyCoin')"
+                                prop="moneyCoin"
+                                label="金币价格"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('pointsRatio')"
+                                prop="pointsRatio"
+                                label="积分加成"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('minPoints')"
+                                prop="minPoints"
+                                label="积分保底"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('probability')"
+                                prop="probability"
+                                label="概率"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('type')"
+                                prop="type"
+                                label="类型"
+                                min-width="100">
+                        </el-table-column>
+                                                            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150"
+            >
+                <template slot-scope="scope">
+                                        <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
+                <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button size="small" @click="operation1">批量操作1</el-button>
+                    <el-button size="small" @click="operation2">批量操作2</el-button>
+                    <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div>
+            <el-pagination
+                    background
+                    @size-change="pageSizeChange"
+                    @current-change="currentPageChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40, 50]"
+                    :page-size="pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
+            <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="advancedQueryFields">
+
+                <el-table-column prop="link" label="链接符" align="center">
+                    <template slot-scope="{row}">
+                        <el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
+                            <el-option label="AND" value="AND">
+                            </el-option>
+                            <el-option label="OR" value="OR">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.searchMethod">
+                            <el-option v-for="item in searchMethods" :label="item" :value="item"
+                                       :key="item"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="value" label="参数" align="center">
+                    <template slot-scope="{row}">
+                        <el-input v-model="row.value"></el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="advancedQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="排序" :visible.sync="showTableSortDialog">
+            <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="tableSortFields">
+
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="order" label="排序" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.order">
+                            <el-option label="降序" value="desc">
+                            </el-option>
+                            <el-option label="升序" value="asc">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="tableSortQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="查看图片" :visible.sync="imageDialogVisible" size="small">
+            <img width="100%" :src="imgSrc" alt="">
+        </el-dialog>
+
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        name: 'PropInfos',
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 10,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                filter1: '',
+                filter2: '',
+                tableColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '名称',
+                                value: 'name',
+                                show: true
+                            },
+                                                                                                {
+                                label: '图标',
+                                value: 'icon',
+                                show: true
+                            },
+                                                                                                {
+                                label: '金币价格',
+                                value: 'moneyCoin',
+                                show: true
+                            },
+                                                                                                {
+                                label: '积分加成',
+                                value: 'pointsRatio',
+                                show: true
+                            },
+                                                                                                {
+                                label: '积分保底',
+                                value: 'minPoints',
+                                show: true
+                            },
+                                                                                                {
+                                label: '概率',
+                                value: 'probability',
+                                show: true
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'type',
+                                show: true
+                            },
+                                                            ],
+                multipleMode: false,
+                showAdvancedQueryDialog: false,
+                advancedQueryFields: [],
+                showTableSortDialog: false,
+                tableSortFields: [],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
+                advancedQueryColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '名称',
+                                value: 'name'
+                            },
+                                                                                                {
+                                label: '图标',
+                                value: 'icon'
+                            },
+                                                                                                {
+                                label: '金币价格',
+                                value: 'money_coin'
+                            },
+                                                                                                {
+                                label: '积分加成',
+                                value: 'points_ratio'
+                            },
+                                                                                                {
+                                label: '积分保底',
+                                value: 'min_points'
+                            },
+                                                                                                {
+                                label: '概率',
+                                value: 'probability'
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'type'
+                            },
+                                                            ],
+                advancedQuerySearchKey: '',
+                orderByStr: '',
+                imgSrc: '',
+                imageDialogVisible: false,
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.currentPage = 1;
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+
+                var data = {
+                    currentPage: this.currentPage,
+                    pageNumber: this.pageSize,
+                    searchKey: this.filter1,
+                    advancedQuery: this.advancedQuerySearchKey,
+                    orderByStr: this.orderByStr,
+                }
+
+                if (this.$route.query.column) {
+                    var tempColumn = this.$route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+                }
+
+                this.$http.get({
+                    url: '/propInfo/page',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.page.totalNumber;
+                        this.tableData = res.data.pp;
+                    }
+                })
+            },
+            isColumnShow(column) {
+                var row = this.tableColumns.find(i => i.value === column);
+                return row ? row.show : false;
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: '/propInfo',
+                    query: {
+                        id: row.id,
+                        column: this.$route.query.column,
+                    }
+                })
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            addField() {
+                this.advancedQueryFields.push({
+                    link: 'AND',
+                    name: '',
+                    searchMethod: '=',
+                    value: '',
+                });
+            },
+            removeField(i) {
+                if (this.advancedQueryFields.length > 0) {
+                    this.advancedQueryFields.splice(i, 1);
+                }
+            },
+            advancedQuery() {
+
+                this.advancedQuerySearchKey = '';
+
+                if (this.advancedQueryFields.length > 0) {
+
+                    var templist = [];
+
+                    this.advancedQueryFields.forEach(item => {
+                        if (item.link && item.name && item.searchMethod && item.value) {
+                            var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.advancedQuerySearchKey = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showAdvancedQueryDialog = false;
+            },
+            addSortField() {
+                this.tableSortFields.push({
+                    name: '',
+                    order: 'asc',
+                });
+            },
+            removeSortField(i) {
+                if (this.tableSortFields.length > 0) {
+                    this.tableSortFields.splice(i, 1);
+                }
+            },
+            tableSortQuery() {
+
+                this.orderByStr = '';
+
+                if (this.tableSortFields.length > 0) {
+
+                    var templist = [];
+
+                    this.tableSortFields.forEach(item => {
+                        if (item.name && item.order) {
+                            var tempItem = item.name + '_,' + item.order;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.orderByStr = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showTableSortDialog = false;
+            },
+            exportExcel() {
+                window.location.href = this.$baseUrl + "/propInfo/exportExcel?searchKey="
+                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+            },
+            searchData() {
+                this.currentPage = 1;
+                this.getData();
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/propInfo/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+            DateTimeFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD HH:mm', {locale: zh})
+                }
+
+            },
+            DateFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD', {locale: zh})
+                }
+
+            },
+            showImg(img) {
+                this.imgSrc = img;
+                this.imageDialogVisible = true;
+            },
+
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 75 - 29
src/main/vue/src/pages/SystemNotice.vue

@@ -1,35 +1,38 @@
 <template>
     <div>
-        <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
+        <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
                  style="max-width: 500px;">
-                                                                                                                                                                                                                                    <el-form-item prop="gameId" label="游戏">
+            <el-form-item prop="gameId" label="游戏">
                 <el-input v-model="formData.gameId" :disabled="'gameId'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="houseId" label="房间">
+            <el-form-item prop="houseId" label="房间">
                 <el-input v-model="formData.houseId" :disabled="'houseId'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="userId" label="用户">
+            <el-form-item prop="userId" label="用户">
                 <el-input v-model="formData.userId" :disabled="'userId'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="remark" label="备注">
+            <el-form-item prop="remark" label="备注">
                 <el-input v-model="formData.remark" :disabled="'remark'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="typeFlag" label="类型">
+            <el-form-item prop="typeFlag" label="类型">
                 <el-input v-model="formData.typeFlag" :disabled="'typeFlag'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="statusFlag" label="状态">
+            <el-form-item prop="statusFlag" label="状态">
                 <el-input v-model="formData.statusFlag" :disabled="'statusFlag'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="content" label="内容">
+            <el-form-item prop="content" label="内容">
                 <el-input v-model="formData.content" :disabled="'content'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="seasonId" label="赛季ID">
+            <el-form-item prop="seasonId" label="赛季ID">
                 <el-input v-model="formData.seasonId" :disabled="'seasonId'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                                            <el-form-item prop="playerId" label="选手ID">
+            <el-form-item prop="playerId" label="选手ID">
                 <el-input v-model="formData.playerId" :disabled="'playerId'==subColumn"></el-input>
             </el-form-item>
-                                                                                                                                                                                                                                                                                        <el-form-item>
+            <el-form-item prop="competitionId" label="联赛ID">
+                <el-input v-model="formData.competitionId" :disabled="'competitionId'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
                 <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
                 <el-button @click="$router.go(-1)">取消</el-button>
@@ -39,9 +42,14 @@
 </template>
 <script>
     import formValidator from '../formValidator'
+    import { mapState } from 'vuex'
+    import { format } from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
 
     export default {
+        name: 'SystemNotice',
         created() {
+
             if (this.$route.query.column) {
                 this.subColumn = this.$route.query.column.split(',')[1];
                 this.subValue = this.$route.query.column.split(',')[0];
@@ -55,44 +63,82 @@
                     }
                 }).then(res => {
                     if (res.success) {
-
-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
-                        this.formData = res.data;
-
-                    if (this.$route.query.column) {
-                        this.formData[this.subColumn] = this.subValue;
-                    }
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                this.formData = res.data;
+                        if (this.$route.query.column) {
+                            this.formData[this.subColumn] = this.subValue;
+                        }
                     }
                 })
-            }else {
+            } else {
                 if (this.$route.query.column) {
                     this.formData[this.subColumn] = this.subValue;
                 }
             }
 
-                                                                                                                                                                                                                                                                                                                                                                                                                                                        },
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    },
         data() {
             return {
                 saving: false,
-                formData: {},
+                formData: {
+                },
                 rules: {
-                                                                                                                                                                                                                                                                                                                                                                                                                                                        },
-                                                                                                                                    subColumn: '',
-            subValue: '',
-        }
+                },
+                subColumn: '',
+                subValue: '',
+            }
+        },
+        computed: {
+            ...mapState(['userInfo']),
         },
         methods: {
             onSave() {
                 this.$refs.form.validate((valid) => {
                     if (valid) {
-                        this.submit();
+                        this.logicalValidate();
                     } else {
                         return false;
                     }
                 });
             },
+            logicalValidate() {
+                let logicalData = {
+                };
+
+                if (JSON.stringify(logicalData) == '{}') {
+                    this.submit();
+                } else {
+                    this.$http.get({
+                        url: '/systemNotice/getOne',
+                        data: logicalData
+                    }).then(res => {
+                        if (res.success) {
+                            let logicalFlag = true;
+                            if (res.data) {
+                                if (this.formData.id) {
+                                    if (res.data.id != this.formData.id) {
+                                        logicalFlag = false;
+                                    }
+                                } else {
+                                    logicalFlag = false;
+                                }
+                            }
+
+                            if (logicalFlag) {
+                                this.submit();
+                            } else {
+                                this.$message.warning('逻辑关键字:'+''+'验证失败')
+                            }
+
+                        } else {
+                            this.$message.warning('逻辑关键字:'+''+'验证失败')
+                        }
+                    });
+                }
+            },
             submit() {
-                var data = JSON.parse(JSON.stringify(this.formData));
+                let data = {...this.formData};
+
+                                                                                                                                                                                                                                                                                
                 this.$http.post({
                     url: this.formData.id ? '/systemNotice/update' : '/systemNotice/save',
                     data: data
@@ -108,8 +154,8 @@
             onDelete() {
                 this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
                     return this.$http.post({
-                    url: '/systemNotice/del',
-                    data: { id: this.formData.id }
+                        url: '/systemNotice/del',
+                        data: { id: this.formData.id }
                     })
                 }).then(() => {
                     this.$message.success('删除成功');

+ 18 - 1
src/main/vue/src/pages/SystemNotices.vue

@@ -113,6 +113,13 @@
                                 label="选手ID"
                                 min-width="100">
                         </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('competitionId')"
+                                prop="competitionId"
+                                label="联赛ID"
+                                min-width="100">
+                        </el-table-column>
                                                             <el-table-column
                     label="操作"
                     align="center"
@@ -120,7 +127,7 @@
                     min-width="150"
             >
                 <template slot-scope="scope">
-                            <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                                        <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
             </el-table-column>
@@ -242,6 +249,7 @@
     import zh from 'date-fns/locale/zh_cn'
 
     export default {
+        name: 'SystemNotices',
         created() {
             this.getData();
         },
@@ -304,6 +312,11 @@
                                 label: '选手ID',
                                 value: 'playerId',
                                 show: true
+                            },
+                                                                                                {
+                                label: '联赛ID',
+                                value: 'competitionId',
+                                show: true
                             },
                                                             ],
                 multipleMode: false,
@@ -352,6 +365,10 @@
                                                                                                 {
                                 label: '选手ID',
                                 value: 'player_id'
+                            },
+                                                                                                {
+                                label: '联赛ID',
+                                value: 'competition_id'
                             },
                                                             ],
                 advancedQuerySearchKey: '',

+ 1 - 1
src/main/vue/src/pages/User.vue

@@ -44,7 +44,7 @@
             </el-form-item>
 
             <el-form-item prop="createFlag" label="可创建房间">
-                <el-switch v-model="formData.createFlag" active-color="#13ce66" inactive-color="#ff4949">
+                <el-switch v-model="formData.createFlag">
                 </el-switch>
             </el-form-item>
 

+ 172 - 0
src/main/vue/src/pages/UserProp.vue

@@ -0,0 +1,172 @@
+<template>
+    <div>
+        <el-form :model="formData" :rules="rules" ref="form" label-width="120px" label-position="right" size="small"
+                 style="max-width: 500px;">
+            <el-form-item prop="propId" label="道具id">
+                <el-input v-model="formData.propId" :disabled="'propId'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="name" label="名称">
+                <el-input v-model="formData.name" :disabled="'name'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="icon" label="图标">
+                <el-input v-model="formData.icon" :disabled="'icon'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="pointsRatio" label="积分加成">
+                <el-input v-model="formData.pointsRatio" :disabled="'pointsRatio'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="minPoints" label="积分保底">
+                <el-input v-model="formData.minPoints" :disabled="'minPoints'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="probability" label="概率">
+                <el-input v-model="formData.probability" :disabled="'probability'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="used" label="已使用">
+                <el-input v-model="formData.used" :disabled="'used'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="userId" label="用户id">
+                <el-input v-model="formData.userId" :disabled="'userId'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item prop="type" label="类型">
+                <el-input v-model="formData.type" :disabled="'type'==subColumn"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+    import formValidator from '../formValidator'
+    import { mapState } from 'vuex'
+    import { format } from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        name: 'UserProp',
+        created() {
+
+            if (this.$route.query.column) {
+                this.subColumn = this.$route.query.column.split(',')[1];
+                this.subValue = this.$route.query.column.split(',')[0];
+            }
+
+            if (this.$route.query.id) {
+                this.$http.get({
+                    url: '/userProp/getOne',
+                    data: {
+                        id: this.$route.query.id
+                    }
+                }).then(res => {
+                    if (res.success) {
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    this.formData = res.data;
+                        if (this.$route.query.column) {
+                            this.formData[this.subColumn] = this.subValue;
+                        }
+                    }
+                })
+            } else {
+                if (this.$route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
+            }
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        },
+        data() {
+            return {
+                saving: false,
+                formData: {
+                },
+                rules: {
+                },
+                subColumn: '',
+                subValue: '',
+            }
+        },
+        computed: {
+            ...mapState(['userInfo']),
+        },
+        methods: {
+            onSave() {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.logicalValidate();
+                    } else {
+                        return false;
+                    }
+                });
+            },
+            logicalValidate() {
+                let logicalData = {
+                };
+
+                if (JSON.stringify(logicalData) == '{}') {
+                    this.submit();
+                } else {
+                    this.$http.get({
+                        url: '/userProp/getOne',
+                        data: logicalData
+                    }).then(res => {
+                        if (res.success) {
+                            let logicalFlag = true;
+                            if (res.data) {
+                                if (this.formData.id) {
+                                    if (res.data.id != this.formData.id) {
+                                        logicalFlag = false;
+                                    }
+                                } else {
+                                    logicalFlag = false;
+                                }
+                            }
+
+                            if (logicalFlag) {
+                                this.submit();
+                            } else {
+                                this.$message.warning('逻辑关键字:'+''+'验证失败')
+                            }
+
+                        } else {
+                            this.$message.warning('逻辑关键字:'+''+'验证失败')
+                        }
+                    });
+                }
+            },
+            submit() {
+                let data = {...this.formData};
+
+                                                                                                                                                                                                                                                                
+                this.$http.post({
+                    url: this.formData.id ? '/userProp/update' : '/userProp/save',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.$message.success('成功');
+                        this.$router.go(-1);
+                    } else {
+                        this.$message.warning('失败')
+                    }
+                });
+            },
+            onDelete() {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                    return this.$http.post({
+                        url: '/userProp/del',
+                        data: { id: this.formData.id }
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+        }
+    }
+</script>
+<style lang="less" scoped>
+</style>

+ 536 - 0
src/main/vue/src/pages/UserProps.vue

@@ -0,0 +1,536 @@
+<template>
+    <div>
+        <div class="filters-container">
+        
+            <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
+            <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
+            </el-button>
+            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
+                       icon="el-icon-search" class="filter-item">高级查询
+            </el-button>
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
+                       icon="el-icon-sort" class="filter-item">排序
+            </el-button>
+            <el-button @click="$router.push({path:'/userProp',query:{column:$route.query.column}})" type="primary"
+                       size="small" icon="el-icon-edit"
+                       class="filter-item">添加
+            </el-button>
+            <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
+            </el-button>
+            <el-dropdown trigger="click" size="medium" class="table-column-filter">
+                <span>
+                  筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
+                    <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
+                    </el-checkbox>
+                </el-dropdown-menu>
+            </el-dropdown>
+        </div>
+        <el-table
+                :data="tableData"
+                :height="tableHeight"
+                row-key="id"
+                ref="table">
+            <el-table-column
+                    v-if="multipleMode"
+                    align="center"
+                    type="selection"
+                    width="50">
+            </el-table-column>
+            <el-table-column
+                    type="index"
+                    min-width="50"
+                    align="center">
+            </el-table-column>
+                                                                                                                                                                                                    
+                                            <el-table-column
+                                v-if="isColumnShow('propId')"
+                                prop="propId"
+                                label="道具id"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('name')"
+                                prop="name"
+                                label="名称"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('icon')"
+                                prop="icon"
+                                label="图标"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('pointsRatio')"
+                                prop="pointsRatio"
+                                label="积分加成"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('minPoints')"
+                                prop="minPoints"
+                                label="积分保底"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('probability')"
+                                prop="probability"
+                                label="概率"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('used')"
+                                prop="used"
+                                label="已使用"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('userId')"
+                                prop="userId"
+                                label="用户id"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('type')"
+                                prop="type"
+                                label="类型"
+                                min-width="100">
+                        </el-table-column>
+                                                            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150"
+            >
+                <template slot-scope="scope">
+                                        <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
+                <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button size="small" @click="operation1">批量操作1</el-button>
+                    <el-button size="small" @click="operation2">批量操作2</el-button>
+                    <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div>
+            <el-pagination
+                    background
+                    @size-change="pageSizeChange"
+                    @current-change="currentPageChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40, 50]"
+                    :page-size="pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :total="totalNumber">
+            </el-pagination>
+        </div>
+        <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
+            <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="advancedQueryFields">
+
+                <el-table-column prop="link" label="链接符" align="center">
+                    <template slot-scope="{row}">
+                        <el-select placeholder="链接" size="small" v-model="row.link" class="filter-item">
+                            <el-option label="AND" value="AND">
+                            </el-option>
+                            <el-option label="OR" value="OR">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.searchMethod">
+                            <el-option v-for="item in searchMethods" :label="item" :value="item"
+                                       :key="item"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="value" label="参数" align="center">
+                    <template slot-scope="{row}">
+                        <el-input v-model="row.value"></el-input>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="advancedQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="排序" :visible.sync="showTableSortDialog">
+            <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="tableSortFields">
+
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="order" label="排序" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.order">
+                            <el-option label="降序" value="desc">
+                            </el-option>
+                            <el-option label="升序" value="asc">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="tableSortQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="查看图片" :visible.sync="imageDialogVisible" size="small">
+            <img width="100%" :src="imgSrc" alt="">
+        </el-dialog>
+
+    </div>
+</template>
+<script>
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        name: 'UserProps',
+        created() {
+            this.getData();
+        },
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 10,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                filter1: '',
+                filter2: '',
+                tableColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '道具id',
+                                value: 'propId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '名称',
+                                value: 'name',
+                                show: true
+                            },
+                                                                                                {
+                                label: '图标',
+                                value: 'icon',
+                                show: true
+                            },
+                                                                                                {
+                                label: '积分加成',
+                                value: 'pointsRatio',
+                                show: true
+                            },
+                                                                                                {
+                                label: '积分保底',
+                                value: 'minPoints',
+                                show: true
+                            },
+                                                                                                {
+                                label: '概率',
+                                value: 'probability',
+                                show: true
+                            },
+                                                                                                {
+                                label: '已使用',
+                                value: 'used',
+                                show: true
+                            },
+                                                                                                {
+                                label: '用户id',
+                                value: 'userId',
+                                show: true
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'type',
+                                show: true
+                            },
+                                                            ],
+                multipleMode: false,
+                showAdvancedQueryDialog: false,
+                advancedQueryFields: [],
+                showTableSortDialog: false,
+                tableSortFields: [],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
+                advancedQueryColumns: [
+                                                                                                                                                                                                                                                                                                                                                {
+                                label: '道具id',
+                                value: 'prop_id'
+                            },
+                                                                                                {
+                                label: '名称',
+                                value: 'name'
+                            },
+                                                                                                {
+                                label: '图标',
+                                value: 'icon'
+                            },
+                                                                                                {
+                                label: '积分加成',
+                                value: 'points_ratio'
+                            },
+                                                                                                {
+                                label: '积分保底',
+                                value: 'min_points'
+                            },
+                                                                                                {
+                                label: '概率',
+                                value: 'probability'
+                            },
+                                                                                                {
+                                label: '已使用',
+                                value: 'used'
+                            },
+                                                                                                {
+                                label: '用户id',
+                                value: 'user_id'
+                            },
+                                                                                                {
+                                label: '类型',
+                                value: 'type'
+                            },
+                                                            ],
+                advancedQuerySearchKey: '',
+                orderByStr: '',
+                imgSrc: '',
+                imageDialogVisible: false,
+            }
+        },
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.currentPage = 1;
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+
+                var data = {
+                    currentPage: this.currentPage,
+                    pageNumber: this.pageSize,
+                    searchKey: this.filter1,
+                    advancedQuery: this.advancedQuerySearchKey,
+                    orderByStr: this.orderByStr,
+                }
+
+                if (this.$route.query.column) {
+                    var tempColumn = this.$route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+                }
+
+                this.$http.get({
+                    url: '/userProp/page',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.page.totalNumber;
+                        this.tableData = res.data.pp;
+                    }
+                })
+            },
+            isColumnShow(column) {
+                var row = this.tableColumns.find(i => i.value === column);
+                return row ? row.show : false;
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
+                }
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: '/userProp',
+                    query: {
+                        id: row.id,
+                        column: this.$route.query.column,
+                    }
+                })
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            addField() {
+                this.advancedQueryFields.push({
+                    link: 'AND',
+                    name: '',
+                    searchMethod: '=',
+                    value: '',
+                });
+            },
+            removeField(i) {
+                if (this.advancedQueryFields.length > 0) {
+                    this.advancedQueryFields.splice(i, 1);
+                }
+            },
+            advancedQuery() {
+
+                this.advancedQuerySearchKey = '';
+
+                if (this.advancedQueryFields.length > 0) {
+
+                    var templist = [];
+
+                    this.advancedQueryFields.forEach(item => {
+                        if (item.link && item.name && item.searchMethod && item.value) {
+                            var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.advancedQuerySearchKey = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showAdvancedQueryDialog = false;
+            },
+            addSortField() {
+                this.tableSortFields.push({
+                    name: '',
+                    order: 'asc',
+                });
+            },
+            removeSortField(i) {
+                if (this.tableSortFields.length > 0) {
+                    this.tableSortFields.splice(i, 1);
+                }
+            },
+            tableSortQuery() {
+
+                this.orderByStr = '';
+
+                if (this.tableSortFields.length > 0) {
+
+                    var templist = [];
+
+                    this.tableSortFields.forEach(item => {
+                        if (item.name && item.order) {
+                            var tempItem = item.name + '_,' + item.order;
+                            templist.push(tempItem);
+                        }
+                    })
+
+                    if (templist.length > 0) {
+
+                        this.orderByStr = templist.join('_;');
+                    }
+                }
+
+                this.getData();
+                this.showTableSortDialog = false;
+            },
+            exportExcel() {
+                window.location.href = this.$baseUrl + "/userProp/exportExcel?searchKey="
+                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+            },
+            searchData() {
+                this.currentPage = 1;
+                this.getData();
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/userProp/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+            DateTimeFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD HH:mm', {locale: zh})
+                }
+
+            },
+            DateFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD', {locale: zh})
+                }
+
+            },
+            showImg(img) {
+                this.imgSrc = img;
+                this.imageDialogVisible = true;
+            },
+
+        }
+    }
+</script>
+<style lang="less" scoped>
+
+</style>

+ 385 - 360
src/main/vue/src/router/index.js

@@ -6,363 +6,364 @@ import axios from 'axios'
 Vue.use(Router);
 
 const router = new Router({
-    routes: [{
-        path: '/',
-        component: () =>
-            import('../pages/App'),
-        children: [{
+    routes: [
+        {
             path: '/',
-            redirect: 'dashboard'
-        },
-            {
-                path: '/404',
-                name: '404',
-                component: () =>
-                    import('../pages/404')
-            },
-            {
-                path: '/dashboard',
-                name: 'dashboard',
-                component: () =>
-                    import('../pages/Dashboard')
-            },
-            {
-                path: '/users',
-                name: 'users',
-                component: () =>
-                    import('../pages/Users')
-            },
-            {
-                path: '/user',
-                name: 'user',
-                component: () =>
-                    import('../pages/User')
-            },
-            {
-                path: '/menus',
-                name: 'menus',
-                component: () =>
-                    import('../pages/Menus')
-            },
-            {
-                path: '/roles',
-                name: 'roles',
-                component: () =>
-                    import('../pages/Roles')
-            },
-            {
-                path: '/role',
-                name: 'role',
-                component: () =>
-                    import('../pages/Role')
-            },
-            {
-                path: '/api',
-                name: 'api',
-                component: () =>
-                    import('../pages/Api')
-            },
-            {
-                path: '/genCodes',
-                name: 'genCodes',
-                component: () =>
-                    import('../pages/GenCodes')
-            },
-            {
-                path: '/genCode',
-                name: 'genCode',
-                component: () =>
-                    import('../pages/GenCode')
-            },
-            {
-                path: '/permissions',
-                name: 'permissions',
-                component: () =>
-                    import('../pages/Permissions')
-            },
-            {
-                path: '/permission',
-                name: 'permission',
-                component: () =>
-                    import('../pages/Permission')
-            },
-            {
-                path: '/departs',
-                name: 'departs',
-                component: () =>
-                    import('../pages/Departs')
-            },
-            {
-                path: '/lineChart',
-                name: 'lineChart',
-                component: () =>
-                    import('../pages/LineChart')
-            },
-            {
-                path: '/barChart',
-                name: 'barChart',
-                component: () =>
-                    import('../pages/BarChart')
-            },
-            {
-                path: '/polarAreaChart',
-                name: 'polarAreaChart',
-                component: () =>
-                    import('../pages/PolarAreaChart')
-            },
-            {
-                path: '/pieChart',
-                name: 'pieChart',
-                component: () =>
-                    import('../pages/PieChart')
-            },
-            {
-                path: '/radarChart',
-                name: 'radarChart',
-                component: () =>
-                    import('../pages/RadarChart')
-            },
-            {
-                path: '/bubbleChart',
-                name: 'bubbleChart',
-                component: () =>
-                    import('../pages/BubbleChart')
-            },
-            {
-                path: '/processModels',
-                name: 'processModels',
-                component: () =>
-                    import('../pages/ProcessModels')
-            },
-            {
-                path: '/processDefinitions',
-                name: 'processDefinitions',
-                component: () =>
-                    import('../pages/ProcessDefinitions')
-            },
-            {
-                path: '/myProcesses',
-                name: 'myProcesses',
-                component: () =>
-                    import('../pages/MyProcesses')
-            },
-            {
-                path: '/myTasks',
-                name: 'myTasks',
-                component: () =>
-                    import('../pages/MyTasks')
-            },
-            {
-                path: '/completeTaskDynamic',
-                name: 'CompleteTaskDynamic',
-                component: () =>
-                    import('../pages/CompleteTaskDynamic')
-            },
-            {
-                path: '/commonQuerys',
-                name: 'commonQuerys',
-                component: () =>
-                    import('../pages/CommonQuerys')
-            },
-            {
-                path: '/commonQuery',
-                name: 'commonQuery',
-                component: () =>
-                    import('../pages/CommonQuery')
-            },
-            {
-                path: '/commonIframe',
-                name: 'commonIframe',
-                component: () =>
-                    import('../pages/CommonIframe')
-            },
-            {
-                path: '/queryConfigs',
-                name: 'queryConfigs',
-                component: () =>
-                    import('../pages/QueryConfigs')
-            },
-            {
-                path: '/queryConfig',
-                name: 'queryConfig',
-                component: () =>
-                    import('../pages/QueryConfig')
-            },
-            {
-                path: '/dataSourceInfos',
-                name: 'dataSourceInfos',
-                component: () =>
-                    import('../pages/DataSourceInfos')
-            },
-            {
-                path: '/dataSourceInfo',
-                name: 'dataSourceInfo',
-                component: () =>
-                    import('../pages/DataSourceInfo')
-            },
-            {
-                path: '/deploySystem',
-                name: 'DeploySystem',
-                component: () =>
-                    import('../pages/DeploySystem')
-            },
-            {
-                path: '/myCanvas',
-                name: 'MyCanvas',
-                component: () =>
-                    import('../pages/MyCanvas')
-            },
-            {
-                path: '/houseInfo',
-                name: 'HouseInfo',
-                component: () => import('../pages/HouseInfo')
-            },
-            {
-                path: '/houseInfos',
-                name: 'HouseInfos',
-                component: () => import('../pages/HouseInfos')
-            },
-            {
-                path: '/houseLevel',
-                name: 'HouseLevel',
-                component: () => import('../pages/HouseLevel')
-            },
-            {
-                path: '/houseLevels',
-                name: 'HouseLevels',
-                component: () => import('../pages/HouseLevels')
-            },
-            {
-                path: '/bannerInfo',
-                name: 'BannerInfo',
-                component: () => import('../pages/BannerInfo')
-            },
-            {
-                path: '/bannerInfos',
-                name: 'BannerInfos',
-                component: () => import('../pages/BannerInfos')
-            },
-            {
-                path: '/gameInfo',
-                name: 'GameInfo',
-                component: () => import('../pages/GameInfo')
-            },
-            {
-                path: '/gameInfos',
-                name: 'GameInfos',
-                component: () => import('../pages/GameInfos')
-            },
-            {
-                path: '/playerInfo',
-                name: 'PlayerInfo',
-                component: () => import('../pages/PlayerInfo')
-            },
-            {
-                path: '/playerInfos',
-                name: 'PlayerInfos',
-                component: () => import('../pages/PlayerInfos')
-            },
-            {
-                path: '/productInfos',
-                name: 'ProductInfos',
-                component: () => import('../pages/ProductInfos')
-            },
-            {
-                path: '/productInfo',
-                name: 'ProductInfo',
-                component: () => import('../pages/ProductInfo')
-            },
-            {
-                path: '/memberCoin',
-                name: 'MemberCoin',
-                component: () => import('../pages/MemberCoin')
-            },
-            {
-                path: '/memberCoinSong',
-                name: 'MemberCoinSong',
-                component: () => import('../pages/MemberCoinSong')
-            },
-            {
-                path: '/memberCoins',
-                name: 'MemberCoins',
-                component: () => import('../pages/MemberCoins')
-            },
-            {
-                path: '/platformIncomeRecord',
-                name: 'PlatformIncomeRecord',
-                component: () => import('../pages/PlatformIncomeRecord')
-            },
-            {
-                path: '/platformIncomeRecords',
-                name: 'PlatformIncomeRecords',
-                component: () => import('../pages/PlatformIncomeRecords')
-            },
-            {
-                path: '/systemNotice',
-                name: 'SystemNotice',
-                component: () => import('../pages/SystemNotice')
-            },
-            {
-                path: '/systemNotices',
-                name: 'SystemNotices',
-                component: () => import('../pages/SystemNotices')
-            },
-            {
-                path: '/rechargeRecord',
-                name: 'RechargeRecord',
-                component: () => import('../pages/RechargeRecord')
-            },
-            {
-                path: '/rechargeRecords',
-                name: 'RechargeRecords',
-                component: () => import('../pages/RechargeRecords')
-            },
-            {
-                path: '/memberCoinTixian',
-                name: 'MemberCoinTixian',
-                component: () => import('../pages/MemberCoinTixian')
-            },
-            {
-                path: '/memberCoinTixians',
-                name: 'MemberCoinTixians',
-                component: () => import('../pages/MemberCoinTixians')
-            },
-            {
-                path: '/competitionSeason',
-                name: 'CompetitionSeason',
-                component: () => import('../pages/CompetitionSeason')
-            },
-            {
-                path: '/competitionSeasons',
-                name: 'CompetitionSeasons',
-                component: () => import('../pages/CompetitionSeasons')
-            },
-            {
-                path: '/bonusRecord',
-                name: 'BonusRecord',
-                component: () => import('../pages/BonusRecord')
-            },
-            {
-                path: '/bonusRecords',
-                name: 'BonusRecords',
-                component: () => import('../pages/BonusRecords')
-            },
-            {
-                path: '/videoTest',
-                name: 'VideoTest',
-                component: () => import('../pages/VideoTest')
-            },
-            {
-                path: '/bindGame',
-                name: 'BindGame',
-                component: () => import('../pages/BindGame')
-            },
-            {
-                path: '/bindGames',
-                name: 'BindGames',
-                component: () => import('../pages/BindGames')
-            },
-            {
+            component: () => import('../pages/App'),
+            children: [
+                {
+                    path: '/',
+                    redirect: 'dashboard'
+                },
+                {
+                    path: '/404',
+                    name: '404',
+                    component: () =>
+                        import('../pages/404')
+                },
+                {
+                    path: '/dashboard',
+                    name: 'dashboard',
+                    component: () =>
+                        import('../pages/Dashboard')
+                },
+                {
+                    path: '/users',
+                    name: 'users',
+                    component: () =>
+                        import('../pages/Users')
+                },
+                {
+                    path: '/user',
+                    name: 'user',
+                    component: () =>
+                        import('../pages/User')
+                },
+                {
+                    path: '/menus',
+                    name: 'menus',
+                    component: () =>
+                        import('../pages/Menus')
+                },
+                {
+                    path: '/roles',
+                    name: 'roles',
+                    component: () =>
+                        import('../pages/Roles')
+                },
+                {
+                    path: '/role',
+                    name: 'role',
+                    component: () =>
+                        import('../pages/Role')
+                },
+                {
+                    path: '/api',
+                    name: 'api',
+                    component: () =>
+                        import('../pages/Api')
+                },
+                {
+                    path: '/genCodes',
+                    name: 'genCodes',
+                    component: () =>
+                        import('../pages/GenCodes')
+                },
+                {
+                    path: '/genCode',
+                    name: 'genCode',
+                    component: () =>
+                        import('../pages/GenCode')
+                },
+                {
+                    path: '/permissions',
+                    name: 'permissions',
+                    component: () =>
+                        import('../pages/Permissions')
+                },
+                {
+                    path: '/permission',
+                    name: 'permission',
+                    component: () =>
+                        import('../pages/Permission')
+                },
+                {
+                    path: '/departs',
+                    name: 'departs',
+                    component: () =>
+                        import('../pages/Departs')
+                },
+                {
+                    path: '/lineChart',
+                    name: 'lineChart',
+                    component: () =>
+                        import('../pages/LineChart')
+                },
+                {
+                    path: '/barChart',
+                    name: 'barChart',
+                    component: () =>
+                        import('../pages/BarChart')
+                },
+                {
+                    path: '/polarAreaChart',
+                    name: 'polarAreaChart',
+                    component: () =>
+                        import('../pages/PolarAreaChart')
+                },
+                {
+                    path: '/pieChart',
+                    name: 'pieChart',
+                    component: () =>
+                        import('../pages/PieChart')
+                },
+                {
+                    path: '/radarChart',
+                    name: 'radarChart',
+                    component: () =>
+                        import('../pages/RadarChart')
+                },
+                {
+                    path: '/bubbleChart',
+                    name: 'bubbleChart',
+                    component: () =>
+                        import('../pages/BubbleChart')
+                },
+                {
+                    path: '/processModels',
+                    name: 'processModels',
+                    component: () =>
+                        import('../pages/ProcessModels')
+                },
+                {
+                    path: '/processDefinitions',
+                    name: 'processDefinitions',
+                    component: () =>
+                        import('../pages/ProcessDefinitions')
+                },
+                {
+                    path: '/myProcesses',
+                    name: 'myProcesses',
+                    component: () =>
+                        import('../pages/MyProcesses')
+                },
+                {
+                    path: '/myTasks',
+                    name: 'myTasks',
+                    component: () =>
+                        import('../pages/MyTasks')
+                },
+                {
+                    path: '/completeTaskDynamic',
+                    name: 'CompleteTaskDynamic',
+                    component: () =>
+                        import('../pages/CompleteTaskDynamic')
+                },
+                {
+                    path: '/commonQuerys',
+                    name: 'commonQuerys',
+                    component: () =>
+                        import('../pages/CommonQuerys')
+                },
+                {
+                    path: '/commonQuery',
+                    name: 'commonQuery',
+                    component: () =>
+                        import('../pages/CommonQuery')
+                },
+                {
+                    path: '/commonIframe',
+                    name: 'commonIframe',
+                    component: () =>
+                        import('../pages/CommonIframe')
+                },
+                {
+                    path: '/queryConfigs',
+                    name: 'queryConfigs',
+                    component: () =>
+                        import('../pages/QueryConfigs')
+                },
+                {
+                    path: '/queryConfig',
+                    name: 'queryConfig',
+                    component: () =>
+                        import('../pages/QueryConfig')
+                },
+                {
+                    path: '/dataSourceInfos',
+                    name: 'dataSourceInfos',
+                    component: () =>
+                        import('../pages/DataSourceInfos')
+                },
+                {
+                    path: '/dataSourceInfo',
+                    name: 'dataSourceInfo',
+                    component: () =>
+                        import('../pages/DataSourceInfo')
+                },
+                {
+                    path: '/deploySystem',
+                    name: 'DeploySystem',
+                    component: () =>
+                        import('../pages/DeploySystem')
+                },
+                {
+                    path: '/myCanvas',
+                    name: 'MyCanvas',
+                    component: () =>
+                        import('../pages/MyCanvas')
+                },
+                {
+                    path: '/houseInfo',
+                    name: 'HouseInfo',
+                    component: () => import('../pages/HouseInfo')
+                },
+                {
+                    path: '/houseInfos',
+                    name: 'HouseInfos',
+                    component: () => import('../pages/HouseInfos')
+                },
+                {
+                    path: '/houseLevel',
+                    name: 'HouseLevel',
+                    component: () => import('../pages/HouseLevel')
+                },
+                {
+                    path: '/houseLevels',
+                    name: 'HouseLevels',
+                    component: () => import('../pages/HouseLevels')
+                },
+                {
+                    path: '/bannerInfo',
+                    name: 'BannerInfo',
+                    component: () => import('../pages/BannerInfo')
+                },
+                {
+                    path: '/bannerInfos',
+                    name: 'BannerInfos',
+                    component: () => import('../pages/BannerInfos')
+                },
+                {
+                    path: '/gameInfo',
+                    name: 'GameInfo',
+                    component: () => import('../pages/GameInfo')
+                },
+                {
+                    path: '/gameInfos',
+                    name: 'GameInfos',
+                    component: () => import('../pages/GameInfos')
+                },
+                {
+                    path: '/playerInfo',
+                    name: 'PlayerInfo',
+                    component: () => import('../pages/PlayerInfo')
+                },
+                {
+                    path: '/playerInfos',
+                    name: 'PlayerInfos',
+                    component: () => import('../pages/PlayerInfos')
+                },
+                {
+                    path: '/productInfos',
+                    name: 'ProductInfos',
+                    component: () => import('../pages/ProductInfos')
+                },
+                {
+                    path: '/productInfo',
+                    name: 'ProductInfo',
+                    component: () => import('../pages/ProductInfo')
+                },
+                {
+                    path: '/memberCoin',
+                    name: 'MemberCoin',
+                    component: () => import('../pages/MemberCoin')
+                },
+                {
+                    path: '/memberCoinSong',
+                    name: 'MemberCoinSong',
+                    component: () => import('../pages/MemberCoinSong')
+                },
+                {
+                    path: '/memberCoins',
+                    name: 'MemberCoins',
+                    component: () => import('../pages/MemberCoins')
+                },
+                {
+                    path: '/platformIncomeRecord',
+                    name: 'PlatformIncomeRecord',
+                    component: () => import('../pages/PlatformIncomeRecord')
+                },
+                {
+                    path: '/platformIncomeRecords',
+                    name: 'PlatformIncomeRecords',
+                    component: () => import('../pages/PlatformIncomeRecords')
+                },
+                {
+                    path: '/systemNotice',
+                    name: 'SystemNotice',
+                    component: () => import('../pages/SystemNotice')
+                },
+                {
+                    path: '/systemNotices',
+                    name: 'SystemNotices',
+                    component: () => import('../pages/SystemNotices')
+                },
+                {
+                    path: '/rechargeRecord',
+                    name: 'RechargeRecord',
+                    component: () => import('../pages/RechargeRecord')
+                },
+                {
+                    path: '/rechargeRecords',
+                    name: 'RechargeRecords',
+                    component: () => import('../pages/RechargeRecords')
+                },
+                {
+                    path: '/memberCoinTixian',
+                    name: 'MemberCoinTixian',
+                    component: () => import('../pages/MemberCoinTixian')
+                },
+                {
+                    path: '/memberCoinTixians',
+                    name: 'MemberCoinTixians',
+                    component: () => import('../pages/MemberCoinTixians')
+                },
+                {
+                    path: '/competitionSeason',
+                    name: 'CompetitionSeason',
+                    component: () => import('../pages/CompetitionSeason')
+                },
+                {
+                    path: '/competitionSeasons',
+                    name: 'CompetitionSeasons',
+                    component: () => import('../pages/CompetitionSeasons')
+                },
+                {
+                    path: '/bonusRecord',
+                    name: 'BonusRecord',
+                    component: () => import('../pages/BonusRecord')
+                },
+                {
+                    path: '/bonusRecords',
+                    name: 'BonusRecords',
+                    component: () => import('../pages/BonusRecords')
+                },
+                {
+                    path: '/videoTest',
+                    name: 'VideoTest',
+                    component: () => import('../pages/VideoTest')
+                },
+                {
+                    path: '/bindGame',
+                    name: 'BindGame',
+                    component: () => import('../pages/BindGame')
+                },
+                {
+                    path: '/bindGames',
+                    name: 'BindGames',
+                    component: () => import('../pages/BindGames')
+                },
+                {
                     path: '/systemVariable',
                     name: 'SystemVariable',
                     component: () => import('../pages/SystemVariable')
@@ -411,15 +412,39 @@ const router = new Router({
                     path: '/checkinRecords',
                     name: 'CheckinRecords',
                     component: () => import('../pages/CheckinRecords')
+                },
+                {
+                    path: '/checkinConfig',
+                    name: 'CheckinConfig',
+                    component: () => import('../pages/CheckinConfig')
+                },
+                {
+                    path: '/propInfo',
+                    name: 'PropInfo',
+                    component: () => import('../pages/PropInfo')
+                },
+                {
+                    path: '/propInfos',
+                    name: 'PropInfos',
+                    component: () => import('../pages/PropInfos')
+                },
+                {
+                    path: '/userProp',
+                    name: 'UserProp',
+                    component: () => import('../pages/UserProp')
+                },
+                {
+                    path: '/userProps',
+                    name: 'UserProps',
+                    component: () => import('../pages/UserProps')
                 }
                 /**INSERT_LOCATION**/
-        ]
-    },
+            ]
+        },
         {
             path: '/login',
             name: 'login',
-            component: () =>
-                import('../pages/Login')
+            component: () => import('../pages/Login')
         }
     ]
 });

+ 32 - 0
src/test/java/CommonTest.java

@@ -0,0 +1,32 @@
+import com.izouma.awesomeadmin.constant.AppConstant;
+import com.izouma.awesomeadmin.service.SystemVariableService;
+import net.sf.json.JSONObject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.GenericXmlContextLoader;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.function.BiConsumer;
+
+@RunWith(value = SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"}, loader = GenericXmlContextLoader.class)
+@WebAppConfiguration
+@Transactional
+public class CommonTest {
+    @Autowired
+    private SystemVariableService systemVariableService;
+
+    @Test
+    public void test1() {
+        String variable = systemVariableService.get(AppConstant.SysConfig.CHECKIN_CONFIG);
+        JSONObject jsonObject = JSONObject.fromObject(variable);
+        jsonObject.forEach((BiConsumer<String, JSONObject>) (o, o2) -> {
+            System.out.println(o);
+            System.out.println(o2);
+        });
+    }
+}

+ 2 - 0
src/test/java/UserServiceTest.java

@@ -8,11 +8,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.support.GenericXmlContextLoader;
+import org.springframework.test.context.web.WebAppConfiguration;
 import org.springframework.transaction.annotation.Transactional;
 
 @RunWith(value = SpringJUnit4ClassRunner.class)
 @ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"}, loader = GenericXmlContextLoader.class)
 @Transactional
+@WebAppConfiguration
 public class UserServiceTest {
     @Autowired
     private UserInfoService userInfoService;