Browse Source

depository

lwx_dev
erdanergou 4 years ago
parent
commit
dc1a88d28a
  1. 8
      .idea/.gitignore
  2. 100
      .idea/artifacts/depository_manage_war_exploded.xml
  3. 14
      .idea/artifacts/depository_war.xml
  4. 15
      .idea/compiler.xml
  5. 7
      .idea/encodings.xml
  6. 9
      .idea/inspectionProfiles/Project_Default.xml
  7. 20
      .idea/jarRepositories.xml
  8. 21
      .idea/misc.xml
  9. 124
      .idea/uiDesigner.xml
  10. 118
      .mvn/wrapper/MavenWrapperDownloader.java
  11. 2
      .mvn/wrapper/maven-wrapper.properties
  12. 43
      LICENSE
  13. 310
      mvnw
  14. 182
      mvnw.cmd
  15. 236
      pom.xml
  16. 20
      src/main/java/com/dreamchaser/depository_manage/DepositoryManageApplication.java
  17. 46
      src/main/java/com/dreamchaser/depository_manage/aop/WebLogAspect.java
  18. 15
      src/main/java/com/dreamchaser/depository_manage/config/FileConfig.java
  19. 36
      src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java
  20. 157
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  21. 990
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  22. 216
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  23. 25
      src/main/java/com/dreamchaser/depository_manage/controller/ExcelController.java
  24. 89
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  25. 298
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialTypeController.java
  26. 27
      src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java
  27. 1063
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  28. 414
      src/main/java/com/dreamchaser/depository_manage/controller/UserController.java
  29. 70
      src/main/java/com/dreamchaser/depository_manage/converter/ExcelDepositoryInfoConverter.java
  30. 63
      src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialTypeInfoConverter.java
  31. 45
      src/main/java/com/dreamchaser/depository_manage/converter/ExcelStateInfoConverter.java
  32. 55
      src/main/java/com/dreamchaser/depository_manage/entity/AccesstoAddress.java
  33. 62
      src/main/java/com/dreamchaser/depository_manage/entity/Administration.java
  34. 41
      src/main/java/com/dreamchaser/depository_manage/entity/ApplicationInRecord.java
  35. 103
      src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java
  36. 30
      src/main/java/com/dreamchaser/depository_manage/entity/Company.java
  37. 12
      src/main/java/com/dreamchaser/depository_manage/entity/CsvInfo.java
  38. 173
      src/main/java/com/dreamchaser/depository_manage/entity/Depository.java
  39. 100
      src/main/java/com/dreamchaser/depository_manage/entity/DepositoryRecord.java
  40. 72
      src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfo.java
  41. 64
      src/main/java/com/dreamchaser/depository_manage/entity/Material.java
  42. 119
      src/main/java/com/dreamchaser/depository_manage/entity/MaterialType.java
  43. 65
      src/main/java/com/dreamchaser/depository_manage/entity/Md5Encryption.java
  44. 116
      src/main/java/com/dreamchaser/depository_manage/entity/Notice.java
  45. 101
      src/main/java/com/dreamchaser/depository_manage/entity/Post.java
  46. 31
      src/main/java/com/dreamchaser/depository_manage/entity/PostOrUserRole.java
  47. 49
      src/main/java/com/dreamchaser/depository_manage/entity/Role.java
  48. 22
      src/main/java/com/dreamchaser/depository_manage/entity/SimpleApplicationOutRecord.java
  49. 27
      src/main/java/com/dreamchaser/depository_manage/entity/SimpleDepositoryRecord.java
  50. 130
      src/main/java/com/dreamchaser/depository_manage/entity/StandingBook.java
  51. 86
      src/main/java/com/dreamchaser/depository_manage/entity/TransferRecord.java
  52. 254
      src/main/java/com/dreamchaser/depository_manage/entity/User.java
  53. 287
      src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java
  54. 44
      src/main/java/com/dreamchaser/depository_manage/exception/MyException.java
  55. 46
      src/main/java/com/dreamchaser/depository_manage/exceptionHandler/ApplicationContextHolder.java
  56. 29
      src/main/java/com/dreamchaser/depository_manage/exceptionHandler/CustomExceptionHandler.java
  57. 54
      src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java
  58. 90
      src/main/java/com/dreamchaser/depository_manage/listener/ExcelListener.java
  59. 52
      src/main/java/com/dreamchaser/depository_manage/mapper/AccesstoAddressMapper.java
  60. 108
      src/main/java/com/dreamchaser/depository_manage/mapper/AccesstoAddressMapper.xml
  61. 93
      src/main/java/com/dreamchaser/depository_manage/mapper/CompanyMapper.java
  62. 168
      src/main/java/com/dreamchaser/depository_manage/mapper/CompanyMapper.xml
  63. 133
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java
  64. 301
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  65. 232
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java
  66. 941
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml
  67. 119
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  68. 327
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  69. 109
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.java
  70. 204
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml
  71. 31
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java
  72. 131
      src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml
  73. 60
      src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.java
  74. 90
      src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml
  75. 20
      src/main/java/com/dreamchaser/depository_manage/mapper/TransferRecordMapper.java
  76. 124
      src/main/java/com/dreamchaser/depository_manage/mapper/TransferRecordMapper.xml
  77. 138
      src/main/java/com/dreamchaser/depository_manage/mapper/UserMapper.java
  78. 385
      src/main/java/com/dreamchaser/depository_manage/mapper/UserMapper.xml
  79. 143
      src/main/java/com/dreamchaser/depository_manage/mapper/standingBookMapper.xml
  80. 55
      src/main/java/com/dreamchaser/depository_manage/pojo/AdministrationP.java
  81. 59
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationInRecordP.java
  82. 126
      src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java
  83. 167
      src/main/java/com/dreamchaser/depository_manage/pojo/DepositoryRecordP.java
  84. 115
      src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java
  85. 108
      src/main/java/com/dreamchaser/depository_manage/pojo/PostP.java
  86. 52
      src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java
  87. 39
      src/main/java/com/dreamchaser/depository_manage/pojo/RoleAndDepository.java
  88. 29
      src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutRecordP.java
  89. 38
      src/main/java/com/dreamchaser/depository_manage/pojo/SimpleDepositoryRecordP.java
  90. 22
      src/main/java/com/dreamchaser/depository_manage/pojo/SimpleUser.java
  91. 14
      src/main/java/com/dreamchaser/depository_manage/pojo/Statistic.java
  92. 27
      src/main/java/com/dreamchaser/depository_manage/pojo/StatusInfo.java
  93. 106
      src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java
  94. 66
      src/main/java/com/dreamchaser/depository_manage/pojo/UserP.java
  95. 69
      src/main/java/com/dreamchaser/depository_manage/security/bean/LoginRealms.java
  96. 66
      src/main/java/com/dreamchaser/depository_manage/security/bean/LoginType.java
  97. 88
      src/main/java/com/dreamchaser/depository_manage/security/bean/UserToken.java
  98. 74
      src/main/java/com/dreamchaser/depository_manage/security/bean/VerificationCode.java
  99. 76
      src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java
  100. 54
      src/main/java/com/dreamchaser/depository_manage/security/pool/VerificationCodePool.java

8
.idea/.gitignore

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

100
.idea/artifacts/depository_manage_war_exploded.xml

@ -0,0 +1,100 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="depository_manage:war exploded">
<output-path>$PROJECT_DIR$/target/depository</output-path>
<properties id="maven-jee-properties">
<options>
<exploded>true</exploded>
<module>depository_manage</module>
<packaging>war</packaging>
</options>
</properties>
<root id="root">
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="depository_manage" />
</element>
<element id="directory" name="lib">
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" />
<element id="library" level="project" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" />
<element id="library" level="project" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" />
<element id="library" level="project" name="Maven: org.springframework:spring-core:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-jcl:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.yaml:snakeyaml:1.26" />
<element id="library" level="project" name="Maven: org.thymeleaf:thymeleaf-spring5:3.0.11.RELEASE" />
<element id="library" level="project" name="Maven: org.thymeleaf:thymeleaf:3.0.11.RELEASE" />
<element id="library" level="project" name="Maven: org.attoparser:attoparser:2.0.5.RELEASE" />
<element id="library" level="project" name="Maven: org.unbescape:unbescape:1.1.6.RELEASE" />
<element id="library" level="project" name="Maven: org.thymeleaf.extras:thymeleaf-extras-java8time:3.0.4.RELEASE" />
<element id="library" level="project" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-mail:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context-support:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-beans:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-context:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: com.sun.mail:jakarta.mail:1.6.5" />
<element id="library" level="project" name="Maven: com.sun.activation:jakarta.activation:1.2.2" />
<element id="library" level="project" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" />
<element id="library" level="project" name="Maven: com.baomidou:mybatis-plus:3.4.2" />
<element id="library" level="project" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" />
<element id="library" level="project" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" />
<element id="library" level="project" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" />
<element id="library" level="project" name="Maven: com.github.jsqlparser:jsqlparser:4.0" />
<element id="library" level="project" name="Maven: org.mybatis:mybatis:3.5.6" />
<element id="library" level="project" name="Maven: org.mybatis:mybatis-spring:2.0.5" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: com.zaxxer:HikariCP:3.4.5" />
<element id="library" level="project" name="Maven: org.springframework:spring-jdbc:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-tx:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: ch.qos.logback:logback-classic:1.2.3" />
<element id="library" level="project" name="Maven: ch.qos.logback:logback-core:1.2.3" />
<element id="library" level="project" name="Maven: org.slf4j:slf4j-api:1.7.30" />
<element id="library" level="project" name="Maven: mysql:mysql-connector-java:8.0.22" />
<element id="library" level="project" name="Maven: com.alibaba:druid:1.1.14" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.3" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.3" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.3" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.3" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.3" />
<element id="library" level="project" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.3" />
<element id="library" level="project" name="Maven: org.springframework:spring-web:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-webmvc:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-aop:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: org.springframework:spring-expression:5.2.12.RELEASE" />
<element id="library" level="project" name="Maven: joda-time:joda-time:2.9.7" />
<element id="library" level="project" name="Maven: org.aspectj:aspectjweaver:1.9.5" />
<element id="library" level="project" name="Maven: com.alibaba:fastjson:1.2.62" />
<element id="library" level="project" name="Maven: org.springframework.boot:spring-boot:2.3.7.RELEASE" />
<element id="library" level="project" name="Maven: com.alibaba:easyexcel:3.1.0" />
<element id="library" level="project" name="Maven: com.alibaba:easyexcel-core:3.1.0" />
<element id="library" level="project" name="Maven: com.alibaba:easyexcel-support:3.1.0" />
<element id="library" level="project" name="Maven: org.apache.poi:poi:4.1.2" />
<element id="library" level="project" name="Maven: commons-codec:commons-codec:1.14" />
<element id="library" level="project" name="Maven: org.apache.commons:commons-collections4:4.4" />
<element id="library" level="project" name="Maven: org.apache.commons:commons-math3:3.6.1" />
<element id="library" level="project" name="Maven: com.zaxxer:SparseBitSet:1.2" />
<element id="library" level="project" name="Maven: org.apache.poi:poi-ooxml:4.1.2" />
<element id="library" level="project" name="Maven: org.apache.commons:commons-compress:1.19" />
<element id="library" level="project" name="Maven: com.github.virtuald:curvesapi:1.06" />
<element id="library" level="project" name="Maven: org.apache.poi:poi-ooxml-schemas:4.1.2" />
<element id="library" level="project" name="Maven: org.apache.xmlbeans:xmlbeans:3.1.0" />
<element id="library" level="project" name="Maven: org.apache.commons:commons-csv:1.8" />
<element id="library" level="project" name="Maven: org.ehcache:ehcache:3.8.1" />
<element id="library" level="project" name="Maven: org.glassfish.jaxb:jaxb-runtime:2.3.3" />
<element id="library" level="project" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.3" />
<element id="library" level="project" name="Maven: org.glassfish.jaxb:txw2:2.3.3" />
<element id="library" level="project" name="Maven: com.sun.istack:istack-commons-runtime:3.0.11" />
<element id="library" level="project" name="Maven: commons-lang:commons-lang:2.5" />
</element>
</element>
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/target/depository/META-INF/MANIFEST.MF" />
</element>
<element id="javaee-facet-resources" facet="depository_manage/web/Web" />
</root>
</artifact>
</component>

14
.idea/artifacts/depository_war.xml

@ -0,0 +1,14 @@
<component name="ArtifactManager">
<artifact type="war" name="depository:war">
<output-path>$PROJECT_DIR$/target</output-path>
<properties id="maven-jee-properties">
<options>
<module>depository</module>
<packaging>war</packaging>
</options>
</properties>
<root id="archive" name="depository.war">
<element id="artifact" artifact-name="depository:war exploded" />
</root>
</artifact>
</component>

15
.idea/compiler.xml

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="depository" />
<module name="depository_manage" />
</profile>
</annotationProcessing>
</component>
</project>

7
.idea/encodings.xml

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

9
.idea/inspectionProfiles/Project_Default.xml

@ -0,0 +1,9 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="SerializableHasSerialVersionUIDField" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoreAnonymousInnerClasses" value="false" />
<option name="superClassString" value="java.awt.Component" />
</inspection_tool>
</profile>
</component>

20
.idea/jarRepositories.xml

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

21
.idea/misc.xml

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8.0_333" project-jdk-type="JavaSDK" />
<component name="ProjectType">
<option name="id" value="jpab" />
</component>
</project>

124
.idea/uiDesigner.xml

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

118
.mvn/wrapper/MavenWrapperDownloader.java

@ -0,0 +1,118 @@
/*
* Copyright 2007-present the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.net.*;
import java.io.*;
import java.nio.channels.*;
import java.util.Properties;
public class MavenWrapperDownloader {
private static final String WRAPPER_VERSION = "0.5.6";
/**
* Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
*/
private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+ WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
/**
* Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
* use instead of the default one.
*/
private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
".mvn/wrapper/maven-wrapper.properties";
/**
* Path where the maven-wrapper.jar will be saved to.
*/
private static final String MAVEN_WRAPPER_JAR_PATH =
".mvn/wrapper/maven-wrapper.jar";
/**
* Name of the property which should be used to override the default download url for the wrapper.
*/
private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
public static void main(String args[]) {
System.out.println("- Downloader started");
File baseDirectory = new File(args[0]);
System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
// If the maven-wrapper.properties exists, read it and check if it contains a custom
// wrapperUrl parameter.
File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
String url = DEFAULT_DOWNLOAD_URL;
if (mavenWrapperPropertyFile.exists()) {
FileInputStream mavenWrapperPropertyFileInputStream = null;
try {
mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
Properties mavenWrapperProperties = new Properties();
mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
} catch (IOException e) {
System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
} finally {
try {
if (mavenWrapperPropertyFileInputStream != null) {
mavenWrapperPropertyFileInputStream.close();
}
} catch (IOException e) {
// Ignore ...
}
}
}
System.out.println("- Downloading from: " + url);
File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
if (!outputFile.getParentFile().exists()) {
if (!outputFile.getParentFile().mkdirs()) {
System.out.println(
"- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
}
}
System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
try {
downloadFileFromURL(url, outputFile);
System.out.println("Done");
System.exit(0);
} catch (Throwable e) {
System.out.println("- Error downloading");
e.printStackTrace();
System.exit(1);
}
}
private static void downloadFileFromURL(String urlString, File destination) throws Exception {
if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
String username = System.getenv("MVNW_USERNAME");
char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
}
URL website = new URL(urlString);
ReadableByteChannel rbc;
rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(destination);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
rbc.close();
}
}

2
.mvn/wrapper/maven-wrapper.properties

@ -0,0 +1,2 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar

43
LICENSE

@ -0,0 +1,43 @@
Academic Free License (“AFL”) v. 3.0
This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:
Licensed under the Academic Free License version 3.0
1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following:
a) to reproduce the Original Work in copies, either alone or as part of a collective work;
b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work;
c) to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor’s reserved rights and remedies, in this Academic Free License;
d) to perform the Original Work publicly; and
e) to display the Original Work publicly.
2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works.
3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work.
4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor’s trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license.
5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c).
6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer.
8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including “fair use” or “fair dealing”). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c).
10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License.
12) Attorneys’ Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
16) Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.

310
mvnw

@ -0,0 +1,310 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

182
mvnw.cmd

@ -0,0 +1,182 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

236
pom.xml

@ -0,0 +1,236 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dreamchaser</groupId>
<artifactId>depository_manage</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>depository_manage</name>
<description>work</description>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- &lt;!&ndash;跨域工具包&ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.thetransactioncompany</groupId>-->
<!-- <artifactId>cors-filter</artifactId>-->
<!-- </dependency>-->
<!--发送邮箱依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
<!-- 用于实现excel表的导入导出-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.5</version>
</dependency>
<!-- 用于处理csv文件解析-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.7</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>
<!-- 用于redis的连接-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>depository</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.dreamchaser.depository_manage.DepositoryManageApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- war 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>depository</warName>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>
</project>

20
src/main/java/com/dreamchaser/depository_manage/DepositoryManageApplication.java

@ -0,0 +1,20 @@
package com.dreamchaser.depository_manage;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class DepositoryManageApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(DepositoryManageApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DepositoryManageApplication.class);
}
}

46
src/main/java/com/dreamchaser/depository_manage/aop/WebLogAspect.java

@ -0,0 +1,46 @@
package com.dreamchaser.depository_manage.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
/**
* 日志切面
*/
@Aspect
@Component
public class WebLogAspect {
private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.dreamchaser.depository_manage.controller..*.*(..))")//切入点描述 这个是controller包的切入点
public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
public void logBeforeController(JoinPoint joinPoint) {
//这个RequestContextHolder是Springmvc提供来获得请求的东西
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
// 记录下请求内容
logger.info("################URL : " + request.getRequestURL().toString());
logger.info("################HTTP_METHOD : " + request.getMethod());
logger.info("################IP : " + request.getRemoteAddr());
logger.info("################THE ARGS OF THE CONTROLLER : " + Arrays.toString(joinPoint.getArgs()));
//下面这个getSignature().getDeclaringTypeName()是获取包+类名的 然后后面的joinPoint.getSignature.getName()获取了方法名
logger.info("################CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
//logger.info("################TARGET: " + joinPoint.getTarget());//返回的是需要加强的目标类的对象
//logger.info("################THIS: " + joinPoint.getThis());//返回的是经过加强后的代理类的对象
}
}

15
src/main/java/com/dreamchaser/depository_manage/config/FileConfig.java

@ -0,0 +1,15 @@
package com.dreamchaser.depository_manage.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "file")
public class FileConfig {
// 上传路径
private String uploadPath;
}

36
src/main/java/com/dreamchaser/depository_manage/config/WebMvcConfig.java

@ -0,0 +1,36 @@
package com.dreamchaser.depository_manage.config;
import com.dreamchaser.depository_manage.intercepter.UserInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new UserInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/login", "/register", "/sendCode", "/error")
.excludePathPatterns("/static/**");
}
// private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
// "classpath:/META-INF/resources/", "classpath:/resources/",
// "classpath:/static/", "classpath:/public/" };
// @Override
// public void addResourceHandlers(ResourceHandlerRegistry registry) {
// if (!registry.hasMappingForPattern("/webjars/**")) {
// registry.addResourceHandler("/webjars/**").addResourceLocations(
// "classpath:/META-INF/resources/webjars/");
// }
// if (!registry.hasMappingForPattern("/**")) {
// registry.addResourceHandler("/**").addResourceLocations(
// CLASSPATH_RESOURCE_LOCATIONS);
// }
//
// }
}

157
src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java

@ -0,0 +1,157 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.service.impl.CompanyServiceImpl;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/company")
public class CompanyController {
@Autowired
CompanyService companyService;
@Autowired
RoleService roleService;
/**
* 查询组织架构
* @param
* @return
*/
@PostMapping("/allCompanyByParent")
public RestResponse findCompanyByNoParent(@RequestParam Map<String,Object>map){
String url = "http://172.20.2.87:39168/org/govlist";
Object page = map.get("page");
Object pagesize = map.get("pagesize");
String superior = (String) map.get("superior");
if("".equals(superior)){
superior = "313";
}
map.put("page",ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize));
map.put("superior",superior);
map.put("state",1);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP);
}
return new RestResponse(list,total,200);
}
/**
* 根据条件查询公司
* @param map
* @return
*/
@PostMapping("/companyByCondition")
public RestResponse findcompanyByCondition(@RequestParam Map<String,Object> map){
String url = "http://172.20.2.87:39168/org/govlist";
if(map.containsKey("state")){
Object state = map.get("state");
map.put("state",ObjectFormatUtil.toInteger(state));
}
Object page = map.get("page");
Object pagesize = map.get("pagesize");
map.put("page",ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize));
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP);
}
return new RestResponse(list,total,200);
}
@PostMapping("/allPostByOrganization")
public RestResponse allPostByParent(@RequestParam Map<String,Object> map) {
String url = "http://172.20.2.87:39168/org/positionlist";
Object page = map.get("page");
Object pagesize = map.get("pagesize");
map.put("page",ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize));
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<PostP> postList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Post object = JSONObject.toJavaObject((JSONObject)list.get(i), Post.class);
PostP postP = new PostP(object);
RoleAndDepository depositoryAndRole = roleService.findDepositoryAndRole(postP.getId());
if(depositoryAndRole != null) {
postP.setRolename(depositoryAndRole.getRoleName());
postP.setDepositoryName(depositoryAndRole.getDepositoryName());
}else{
postP.setRolename("");
postP.setDepositoryName("");
}
postList.add(postP);
}
return new RestResponse(postList,total,200);
}
@PostMapping("post_role")
public RestResponse addUser(@RequestBody Map<String, Object> map) {
map.put("classes",2);
RoleAndDepository userid = roleService.findDepositoryAndRole(ObjectFormatUtil.toInteger(map.get("userid")));
if(userid!=null){
return CrudUtil.postHandle(roleService.updateUserOrPostRoleAndDepository(map), 1);
}else {
return CrudUtil.postHandle(roleService.addUserOrPostRoleAndDepository(map), 1);
}
}
}

990
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -0,0 +1,990 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.pojo.DepositoryRecordP;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.DepositoryRecordServiceImpl;
import com.dreamchaser.depository_manage.service.impl.DepositoryServiceImpl;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author Dreamchser
*/
@RestController
@RequestMapping("/repository")
public class DepositoryController {
@Autowired
DepositoryService depositoryService;
@Autowired
DepositoryRecordService depositoryRecordService;
@Autowired
MaterialTypeService materialTypeService;
@Autowired
MaterialService materialService;
@Autowired
RoleService roleService;
/**
* 获取本月之前的月份
*
* @return
*/
public static Map<String, Object> getPreviousMonth() {
Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> source = new HashMap<>();
List<Object> sourceList = new ArrayList<>();
int month = instance.get(Calendar.MONTH) + 1;
ArrayList<Object> months = new ArrayList<>();
while (month > 0) {
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
source.put("month", month + "月");
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
month--;
sourceList.add(((HashMap<String, Object>) source).clone());
}
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
Map<String, Object> map = new HashMap<>();
map.put("months", months);
map.put("sourceList", sourceList);
return map;
}
/**
* 获取上周一到本周一的日期
*
* @return
*/
public static List<Long> getLastTimeInterval() {
Calendar calendar = Calendar.getInstance();
ArrayList<Long> lastTime = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
int offset1 = 1 - dayOfWeek;
calendar.add(Calendar.DATE, offset1 - 7);
lastTime.add(DateUtil.DateTimeByMonthToTimeStamp(sdf.format(calendar.getTime())));
for (int i = 0; i < 7; i++) {
calendar.add(Calendar.DATE, 1);
lastTime.add(DateUtil.DateTimeByMonthToTimeStamp(sdf.format(calendar.getTime())));
}
return lastTime;
}
/**
* 获取之前仓库的库存值
* @return
*/
public static Map<String,Object> getBeforeInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
List<Double> result = new ArrayList<>();
List<Long> days = getLastTimeInterval();
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Iterator it = depositoryAllNameAndId.keySet().iterator();
Map<String,Object> map = new HashMap<>();
// 获取当周仓库库存
Map<String, Object> thisWeekInventoryByDName = getThisWeekInventoryByDName(depositoryService, depositoryRecordService);
while (it.hasNext()){
int i;
Object key = it.next();
Double thisDayInventory = 0.0;
thisDayInventory = ((List<Double>)thisWeekInventoryByDName.get(key.toString())).get(0);
result.add(thisDayInventory);
int j = 0;
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
Integer val = (Integer) depositoryAllNameAndId.get(key);
Double depositoryRecordByDateByIn = depositoryRecordService.findDepositoryRecordByDate(days.get(i), days.get(i - 1), 1, val);
Double depositoryRecordByDateByOut = depositoryRecordService.findDepositoryRecordByDate(days.get(i), days.get(i - 1), 0, val);
result.add(result.get(j++) - depositoryRecordByDateByIn + depositoryRecordByDateByOut);
}
result.remove(0);
Collections.reverse(result);
map.put(key.toString(), ((ArrayList<Double>) result).clone());
result.clear();
}
return map;
}
/**
* 获取本周库存容量
* @param depositoryService
* @param depositoryRecordService
* @return
*/
public static Map<String,Object> getThisWeekInventoryByDName(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
int weekDay = instance.get(Calendar.DAY_OF_WEEK);
weekDay = weekDay - 1;
// 获取所有仓库名称
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Iterator it = depositoryAllNameAndId.keySet().iterator();
//result用来接收每个仓库每天的库存
List<Double> result = new ArrayList<>();
// map用来存储仓库与库存的映射
Map<String,Object> map = new HashMap<>();
// 只获取当天
if(weekDay == 1){
while (it.hasNext()) {
int i;
Object key = it.next();
Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString());
result.add(toDayInventoryByDName);
map.put(key.toString(), ((ArrayList<Double>) result).clone());
result.clear();
}
}else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> days = new ArrayList<>();
instance.add(Calendar.DATE, 1);
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
instance.add(Calendar.DATE, -1);
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
while (now - 1 > 0) {
now--;
instance.add(Calendar.DATE, -1);
long format =DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()));
days.add(format);
}
while (it.hasNext()) {
int i;
Object key = it.next();
int j =0;
Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString());
result.add(toDayInventoryByDName);
for (i = days.size() - 1; i > 0; i--) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,1);
String format = formatter.format(calendar.getTime());
if(days.get(i - 1).equals(format)){
continue;
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
Double depositoryRecordByDateByIn = depositoryRecordService.findDepositoryRecordByDate(days.get(i - 1), days.get(i), 1, val);
Double depositoryRecordByDateByOut = depositoryRecordService.findDepositoryRecordByDate(days.get(i - 1), days.get(i), 0, val);
result.add(result.get(j++) - depositoryRecordByDateByIn + depositoryRecordByDateByOut);
}
Collections.reverse(result);
map.put(key.toString(), ((ArrayList<Double>) result).clone());
result.clear();
}
}
return map;
}
/**
* 获取之前各月的库存容量
* @param depositoryService
* @param depositoryRecordService
* @return
*/
public static List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
List<Depository> depositoryAll = depositoryService.findDepositoryAll();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
instance.add(Calendar.MONTH, 1);
instance.set(Calendar.DATE, 1);
List<Double> result = new ArrayList<>();
String month = formatter.format(instance.getTime());
for (int i = 0; i < depositoryAll.size(); i++) {
result.add(depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname()));
((Map<String, Object>) sourceList.get(0)).put(depositoryAll.get(i).getDname(), result.get(i));
}
for (int num = 0; num < months.size() - 1; num++) {
int k = 0;
for (int j = 0; j < depositoryAll.size(); j++) {
// 获取该仓库本月库存
Map<String, Object> parmIn = new HashMap<>();
Map<String, Object> parmOut = new HashMap<>();
// 获取每月入库总额
parmIn.put("type", 1);
parmIn.put("state", "已入库");
parmIn.put("depository_id",depositoryAll.get(j).getId());
parmIn.put("start", months.get(num + 1));
parmIn.put("end", months.get(num));
// 获取每月出库总额
parmOut.put("type", 2);
parmOut.put("state", "已出库");
parmOut.put("depository_id",depositoryAll.get(j).getId());
parmOut.put("start", months.get(num + 1));
parmOut.put("end", months.get(num));
Double wareHouseInCountByMonth = depositoryRecordService.findMaterialCountByMonth(parmIn);
Double wareHouseOutCountByMonth = depositoryRecordService.findMaterialCountByMonth(parmOut);
Double wareHouseCount = result.get(k++) - wareHouseInCountByMonth + wareHouseOutCountByMonth;
result.add(wareHouseCount);
((Map<String, Object>) sourceList.get(num)).put(depositoryAll.get(j).getDname(), wareHouseCount);
}
for (int i = 0; i < depositoryAll.size(); i++) {
result.remove(0);
}
// Double last = result.get(result.size() - 1);
// result.clear();
// result.add(last);
}
for (int i = 0; i < depositoryAll.size(); i++) {
((Map<String, Object>) sourceList.get(0)).put(depositoryAll.get(i).getDname(), depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname()));
}
List<String> barSource = new ArrayList<>();
barSource.add("month");
for (int i = 0; i < depositoryAll.size(); i++) {
barSource.add(depositoryAll.get(i).getDname());
}
sourceList.add(barSource);
return sourceList;
}
/**
* 获取之前个月的库存给地图数据
* @param depositoryService
* @param depositoryRecordService
* @return
*/
public static Map<String,Object> getBeforeInventoryOnMap(DepositoryService depositoryService,DepositoryRecordService depositoryRecordService){
// 中国地图数据
// ['product', '3月', '4月', '5月', '6月', '7月', '8月'],
// ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
Map<String, Object> mapData = new HashMap<>();
List<Object> mapDataList = new ArrayList<>();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
ArrayList<Object> title = new ArrayList<>();
List<Depository> depositoryAll = depositoryService.findDepositoryAll();
title.add("depository");
for (int i = sourceList.size() - 1; i >= 0; i--) {
title.add(((Map<String, Object>) sourceList.get(i)).get("month"));
}
Calendar instance1 = Calendar.getInstance();
instance1.add(Calendar.MONTH, 1);
instance1.set(Calendar.DATE, 1);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String month = formatter.format(instance1.getTime());
mapDataList.add(title);
for (int i = 0; i < depositoryAll.size(); i++) {
List<Object> productData = new ArrayList<>();
productData.add(depositoryAll.get(i).getDname());
productData.add(depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname()));
int k = 1;
for (int j = 0; j < months.size() - 1; j++) {
Map<String, Object> parmIn = new HashMap<>();
Map<String, Object> parmOut = new HashMap<>();
parmIn.put("type", 1);
parmIn.put("state", "已入库");
parmIn.put("depository_id",depositoryAll.get(i).getId());
parmIn.put("start", months.get(j + 1));
parmIn.put("end", months.get(j));
parmIn.put("dname", depositoryAll.get(i).getDname());
parmOut.put("type",2);
parmOut.put("state", "已出库");
parmOut.put("depository_id",depositoryAll.get(i).getId());
parmOut.put("start", months.get(j + 1));
parmOut.put("end", months.get(j));
parmOut.put("dname", depositoryAll.get(i).getDname());
Double wareHouseInCountByMonth = depositoryRecordService.findMaterialCountByMonth(parmIn);
Double wareHouseOutCountByMonth = depositoryRecordService.findMaterialCountByMonth(parmOut);
Double wareHouseCount = (Double) productData.get(k++) - wareHouseInCountByMonth + wareHouseOutCountByMonth;
productData.add(wareHouseCount);
}
List<Object> result = new ArrayList<>();
result.add(productData.get(0));
for (int j = productData.size() - 2; j > 0;j--) {
result.add(productData.get(j));
}
// mapDataList.add(((ArrayList<Object>) productData).clone());
mapDataList.add(result);
productData.clear();
}
mapData.put("mapDataList", mapDataList);
return mapData;
}
/**
* 根据条件查询仓库
*
* @param map
* @return
*/
@GetMapping("/warehouseRecord")
public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String, Object> map) {
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map);
return new RestResponse(list, depositoryService.findCountByCondition(map), 200);
}
/**
* 根据父级编号获取所有仓库
* @param parentId
* @return
*/
@GetMapping("/allWarehouseByParent")
public RestResponse findDepositoryByNoParent(@RequestParam(value = "parentId",required = false) String parentId){
Map<String,Object> param = new HashMap<>();
if (parentId == null) {
parentId = "0";
}
param.put("parentId",parentId);
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(param);
Map<String, Object> administration = findAdministration();
List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList");
Integer total = (Integer) administration.get("total");
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < administrationPList.size(); j++) {
if(list.get(i).getCid().compareTo(administrationPList.get(j).getId()) == 0){
list.get(i).setCname(administrationPList.get(j).getName());
break;
}
}
}
return new RestResponse(list,total,200);
}
/**
* 获取当前行政组织
* @return
*/
public static Map<String, Object> findAdministration(){
Map<String,Object> map = new HashMap<>();
String url = "http://172.20.2.87:39168/org/govlist";
String superior = "313";
map.put("superior",superior);
map.put("state",1);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
Map<String,Object> result = new HashMap();
List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject)list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP);
}
result.put("administrationPList",administrationPList);
result.put("total",total);
return result;
}
/**
* 彻底删除仓库记录硬删除
* @param map
* @return
*/
@PostMapping("/realDeleteDepository")
public RestResponse realDeleteDepository(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id= ObjectFormatUtil.toInteger(map.get("id"));
new Thread(new Runnable() {
@Override
public void run() {
RealDeleteSonDepository(id.toString());
}
}).start();
return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
for (int j = 0; j < ids.size(); j++) {
String id = ids.get(j).toString();
new Thread(new Runnable() {
@Override
public void run() {
RealDeleteSonDepository(id);
}
}).start();
}
return CrudUtil.deleteHandle(depositoryService.deleteDepositoryRecordByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
/**
* 删除所有子仓库信息硬删除
* @param parentId
*/
public void RealDeleteSonDepository(String parentId){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
// 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
Integer id = depositoryRecordPByCondition.get(i).getId(); // 获取当前仓库id
RealDeleteSonDepository(id.toString()); // 递归查询仓库
depositoryService.deleteDepositoryRecordById(id); // 删除仓库
}
}
/**
* 插入一条仓库记录
*
* @param map
* @return
*/
@PostMapping("/depository")
public RestResponse insertDepository(@RequestBody Map<String, Object> map) {
return CrudUtil.postHandle(depositoryService.insertDepository(map), 1);
}
/**
* 根据主键删除仓库记录
*
* @param map
* @return
*/
@PostMapping("/depository_del")
public RestResponse deleteDepository(@RequestBody Map<String, Object> map) {
if (map.containsKey("id")) {
Integer id = ObjectFormatUtil.toInteger(map.get("id"));
// UpdateSonState(id.toString(),3,true); 修改为删除状态
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id.toString(),3,true);
}
}).start();
return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedById(id), 1);
} else if (map.containsKey("ids")) {
List<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
String id = ids.get(i).toString();
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id,3,true);
}
}).start();
}
return CrudUtil.deleteHandle(depositoryService.changeStateToDeletedByIds(ids), ids.size());
} else {
throw new MyException("所需请求参数缺失!");
}
}
/**
* 修改仓库信息
*
* @param map
* @return
*/
@PostMapping("/depository_edit")
public RestResponse updateDepository(@RequestBody Map<String, Object> map) {
if (map.containsKey("state")) {
map.put("state", 1);
} else {
map.put("state", 2);
}
return CrudUtil.postHandle(depositoryService.updateDepository(map), 1);
}
/**
* 修改仓库状态
* @param map
* @return
*/
@PostMapping("/EditDepositoryState")
public RestResponse EditDepositoryState(@RequestBody Map<String,Object> map){
if (map.containsKey("state")) {
map.put("state", 1);
} else {
map.put("state", 2);
}
int state = ((int)map.get("state"));
String id = (String) map.get("id");
if(state == 2){
if(map.containsKey("envelop")){
// 封库
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id,state,true);
}
}).start();
}else {
// 禁用仓库
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id, state, false);
}
}).start();
}
}else if(state == 1){ // 如果是启用仓库,则只启用当前仓库下的物品
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonMaterialState(id,state);
}
}).start();
}
return CrudUtil.postHandle(depositoryService.updateDepository(map), 1);
}
/**
* 修改所有子仓库状态
* @param parentId
*/
public void UpdateSonState(String parentId,Integer state,boolean envelop){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
// 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
if(envelop){
// 将当前仓库下的产品状态改为禁用
UpdateSonMaterialState(parentId,state);
}
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
Depository depository = depositoryRecordPByCondition.get(i);
int depositoryId = depository.getId();
Map<String,Object> newMap = new HashMap<>();
newMap.put("parentId",depositoryId);
UpdateSonState(String.valueOf(depositoryId),state,envelop);
Map<String,Object> map = new HashMap<>();
map.put("id",depositoryId);
map.put("state",state);
depositoryService.updateStateByParam(map);
}
}
/**
* 修改当前仓库下的材料状态
* @param parentId
* @param state
*/
public void UpdateSonMaterialState(String parentId,Integer state){
Map<String,Object> param = new HashMap<>();
param.put("depositoryId",parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
for (int i = 0; i < materialPByCondition.size(); i++) {
MaterialP materialP = materialPByCondition.get(i);
Map<String,Object> map = new HashMap<>();
map.put("id",materialP.getId());
map.put("state",state);
materialService.updateStateByParam(map);
}
}
/**
* 动态绘制图像
*
* @return
*/
@RequestMapping(value = "/layui/echart_back", method = RequestMethod.GET)
@ResponseBody
public Map<String, Object> learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last) {
// 设置展示天数
List<String> show_weekday = new ArrayList<String>();
show_weekday.add("周一");
show_weekday.add("周二");
show_weekday.add("周三");
show_weekday.add("周四");
show_weekday.add("周五");
show_weekday.add("周六");
show_weekday.add("周日");
// 获取各仓库名称以及id
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId();
Iterator it = depositoryAllNameAndId.keySet().iterator();
// 仓库名称列表
List<String> depositoryName = new ArrayList<>();
// 各仓库对应入库数目
Map<String, Double> yesterdayData = new HashMap<>();
// 每天各仓库入库数目
Map<String, Object> show_data = new HashMap<>();
// 各仓库当前库存数目
Map<String,Object> todayInventory = new HashMap<>();
//获取获取系统的当前日历对象
Calendar instance = Calendar.getInstance();
// 获取昨天数据标志位
boolean flag = true;
// 获取今天是周几
int weekDay = instance.get(Calendar.DAY_OF_WEEK);
weekDay = weekDay - 1; // 具体周几
// 获取日期
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
// 如果是获取上周
if (last != null) {
List<Long> days = getLastTimeInterval();
List<Double> drCountbyDrName = new ArrayList<>();
while (it.hasNext()) {
int i;
Object key = it.next();
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
Double depositoryRecordByDateAndType = depositoryRecordService.findDepositoryRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDateAndType);
if (i == 2 && flag) {
yesterdayData.put(key.toString(), depositoryRecordByDateAndType);
}
}
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
}
} else {
if (weekDay == 1) {
//只获取今天
Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()));
instance.add(Calendar.DATE, 1);
Long tomorrow = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()));
instance.add(Calendar.DATE, -2);
String yesterday = formatter.format(instance.getTime());
while (it.hasNext()) {
// 遍历 Map并计算各仓库的入库数
Object key = it.next();
depositoryName.add(key.toString());
Integer val = (Integer) depositoryAllNameAndId.get(key);
Double depositoryRecordByDate = depositoryRecordService.findDepositoryRecordByDate(tomorrow,now , Integer.parseInt(type), val);
Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString());
todayInventory.put(key.toString(),toDayInventoryByDName);
yesterdayData.put(key.toString(), depositoryRecordByDate);
List<Double> drCountbyDrName = new ArrayList<>();
drCountbyDrName.add(depositoryRecordByDate);
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
}
} else {
int now = instance.get(Calendar.DAY_OF_WEEK) - 1;
List<Long> days = new ArrayList<>();
instance.add(Calendar.DATE, 1);
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
instance.add(Calendar.DATE, -1);
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
while (now - 1 > 0) {
now--;
instance.add(Calendar.DATE, -1);
Long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()));
days.add(format);
}
List<Double> drCountbyDrName = new ArrayList<>();
while (it.hasNext()) {
int i;
Object key = it.next();
Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString());
todayInventory.put(key.toString(),toDayInventoryByDName);
for (i = days.size() - 1; i > 0; i--) {
// 遍历 Map并计算各仓库的入库数
if (i == days.size() - 1) {
depositoryName.add(key.toString());
}
Integer val = (Integer) depositoryAllNameAndId.get(key);
Double depositoryRecordByDate = depositoryRecordService.findDepositoryRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val);
drCountbyDrName.add(depositoryRecordByDate);
if (i == 2 && flag) {
yesterdayData.put(key.toString(), depositoryRecordByDate);
}
}
show_data.put(key.toString(), ((ArrayList<Double>) drCountbyDrName).clone());
drCountbyDrName.clear();
}
}
}
// 获取本月及之前月份各种类入/出库总量
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeAll();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
for (int num = 0; num < months.size() - 1; num++) {
for (int j = 0; j < materialTypeAll.size(); j++) {
Map<String, Object> parm = new HashMap<>();
parm.put("type", Integer.parseInt(type));
if (Integer.parseInt(type) == 1) {
parm.put("state", "已入库");
} else if (Integer.parseInt(type) == 2) {
parm.put("state", "已出库");
}
parm.put("start", months.get(num + 1));
parm.put("end", months.get(num));
parm.put("tname", materialTypeAll.get(j).getTname());
Double materialCountByMonth = depositoryRecordService.findMaterialCountByMonth(parm);
((Map<String, Object>) sourceList.get(num)).put(materialTypeAll.get(j).getTname(), materialCountByMonth);
}
}
List<String> barSource = new ArrayList<>();
barSource.add("month");
for (int i = 0; i < materialTypeAll.size(); i++) {
barSource.add(materialTypeAll.get(i).getTname());
}
sourceList.add(barSource);
// 中国地图数据
// ['product', '3月', '4月', '5月', '6月', '7月', '8月'],
// ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7],
Map<String, Object> mapData = new HashMap<>();
List<Object> mapDataList = new ArrayList<>();
Map<String, Object> previousMonth1 = getPreviousMonth();
List<Object> months1 = (List<Object>) previousMonth1.get("months");
List<Object> sourceList1 = (List<Object>) previousMonth1.get("sourceList");
ArrayList<Object> title = new ArrayList<>();
title.add("product");
for (int i = sourceList1.size() - 1; i >= 0; i--) {
title.add(((Map<String, Object>) sourceList1.get(i)).get("month"));
}
mapDataList.add(title);
for (int i = 0; i < materialTypeAll.size(); i++) {
List<Object> productData = new ArrayList<>();
productData.add(materialTypeAll.get(i).getTname());
for (int j = months1.size() - 1; j > 0; j--) {
Map<String, Object> parm = new HashMap<>();
parm.put("type", Integer.parseInt(type));
if (Integer.parseInt(type) == 1) {
parm.put("state", "已入库");
} else if (Integer.parseInt(type) == 2) {
parm.put("state", "已出库");
}
parm.put("start", months1.get(j));
parm.put("end", months1.get(j - 1));
parm.put("tname", materialTypeAll.get(i).getTname());
Double materialCountByMonth = depositoryRecordService.findMaterialCountByMonth(parm);
productData.add(materialCountByMonth);
}
mapDataList.add(((ArrayList<Object>) productData).clone());
productData.clear();
}
mapData.put("mapDataList", mapDataList);
// 封装 展示数据
Map<String, Object> depository_data = new LinkedHashMap<String, Object>();
// 构造对应格式
depository_data.put("week", show_weekday);
depository_data.put("data", show_data);
depository_data.put("yesterdayData", yesterdayData);
depository_data.put("todayInventory",todayInventory);
depository_data.put("sourceList", sourceList);
depository_data.put("mapData", mapData);
depository_data.put("sourceListByMonth",getBeforeInventoryByMonth(depositoryService,depositoryRecordService));
depository_data.put("BeforeInventory",getBeforeInventoryByDName(depositoryService,depositoryRecordService));
depository_data.put("ThisWeekInventory",getThisWeekInventoryByDName(depositoryService,depositoryRecordService));
depository_data.put("MapInventory",getBeforeInventoryOnMap(depositoryService,depositoryRecordService));
// 封装 最终数据
Map<String, Object> data = new LinkedHashMap<String, Object>();
data.put("depository_data", depository_data);
data.put("depository_name", depositoryName);
// 返回结果
Map<String, Object> resMap = new LinkedHashMap<String, Object>();
resMap.put("code", 0);
resMap.put("data", data);
resMap.put("msg", "成功获取到图表数据!");
return resMap;
}
/**
* 根据材料编号查询所在仓库
* @param mid
* @return
*/
@GetMapping("/find_depository")
public RestResponse FindDepositoryByMid(@RequestParam("mid") String mid){
Material materialById = materialService.findMaterialById(Integer.parseInt(mid));
Map<String,Object> param = new HashMap<>();
param.put("depositoryId", materialById.getDepositoryId());
List<Depository> depositoryId = depositoryService.findDepositoryRecordPByCondition(param);
return new RestResponse(depositoryId.get(0),1, 200);
}
/**
* 根据材料名称查询所在仓库
* @param mname
* @return
*/
@GetMapping("/findDepositoryByMname")
public RestResponse FindDepositoryByMname(@RequestParam("mname") String mname){
return null;
}
/**
* 查找仓库内是否有物品
* @param depositoryId
* @return
*/
@GetMapping("/findMaterialByDepository")
public RestResponse FindMaterialByDepository(@RequestParam("depositoryId") String depositoryId){
Boolean allSonDepository = findAllSonDepository(depositoryId);
return new RestResponse(allSonDepository);
}
/**
* 查询该仓库是否有其他关联信息
* @param map
* @return
*/
@PostMapping("/findRelevancyByDepository")
public RestResponse FindRelevancyByDepository(@RequestBody Map<String, Object> map){
Boolean allSonDepositoryOfRelevancy = false;
if(map.containsKey("id")){
Integer depositoryId = (Integer) map.get("id");
allSonDepositoryOfRelevancy = findAllSonDepositoryOfRelevancy(depositoryId.toString());
}else if(map.containsKey("ids")){
List<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
allSonDepositoryOfRelevancy |= findAllSonDepositoryOfRelevancy(ids.get(i).toString());
if(allSonDepositoryOfRelevancy){
break;
}
}
}
else {
throw new MyException("所需请求参数缺失!");
}
return new RestResponse(allSonDepositoryOfRelevancy);
}
/**
* 根据父级编号查询所有仓库物品
* @param parentid
* @return
*/
public Boolean findAllSonDepository(String parentid){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentid);
param.put("state",1);
boolean materialByDepository = findMaterialByDepository(parentid);
if(materialByDepository){
return true;
}
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
if(!findMaterialByDepository(depositoryRecordPByCondition.get(i).getId().toString())){
findAllSonDepository(depositoryRecordPByCondition.get(i).getId().toString());
}else{
return true;
}
}
return false;
}
/**
* 根据父级编号查询所有关联信息
* @param parentid
* @return
*/
public Boolean findAllSonDepositoryOfRelevancy(String parentid) {
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentid);
param.put("state",1);
boolean materialByDepository = findMaterialByDepository(parentid);
Boolean depositoryRecord = findDepositoryRecord(parentid);
if(materialByDepository || depositoryRecord){
return true;
}
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
String depositoryId = depositoryRecordPByCondition.get(i).getId().toString();
if(!findMaterialByDepository(depositoryId) && !findDepositoryRecord(depositoryId)){
findAllSonDepositoryOfRelevancy(depositoryRecordPByCondition.get(i).getId().toString());
}else{
return true;
}
}
return false;
}
/**
* 根据仓库编号判断该仓库是否有物品
* @param parentId
* @return
*/
public boolean findMaterialByDepository(String parentId){
Map<String,Object> param = new HashMap<>();
param.put("state",1);
param.put("depositoryId",parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
if(materialPByCondition.size() > 0){
return true;
}
return false;
}
/**
* 根据仓库编号查询与其有关的订单信息
* @param depositoryId
* @return
*/
public Boolean findDepositoryRecord(String depositoryId){
Map<String,Object> param = new HashMap<>();
param.put("depositoryId",depositoryId);
List<DepositoryRecordP> recordPByCondition = depositoryRecordService.findDepositoryRecordPByCondition(param);
if(recordPByCondition.size() > 0){
return true;
}
return false;
}
/**
* 查询当前仓库子仓库
* @param parentId
* @return
*/
@GetMapping("/findDepositoryByParent")
public RestResponse FindDepositoryByParentId(@RequestParam("parentId") String parentId){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryRecordPByCondition(param);
return new RestResponse(depositoryRecordPByCondition, depositoryService.findCountByCondition(param), 200);
}
@GetMapping("/findManagerByDid")
public RestResponse FindManagerByDid(@RequestParam("did") Integer did){
List<Integer> userIdByDid = roleService.findUserIdByDid(did);
List<UserByPort> userByPortList = new ArrayList<>();
for (int i = 0; i < userIdByDid.size(); i++) {
UserByPort userByPort = PageController.FindUserById(userIdByDid.get(i));
userByPortList.add(userByPort);
}
return new RestResponse(userByPortList, userByPortList.size(), 200);
}
@GetMapping("/findPostByCompany")
public RestResponse findPostByCompany(@RequestParam("company") String company){
List<AdministrationP> administrationPList = PageController.findCompanyBySuperior(company);
int size = administrationPList.size();
return new RestResponse(administrationPList,size, 200);
}
}

216
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -0,0 +1,216 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import netscape.javascript.JSObject;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 仓库记录
* @author Dreamchaser
*/
@RestController
@RequestMapping(value = "/depositoryRecord")
public class DepositoryRecordController {
@Autowired
private DepositoryRecordService depositoryRecordService;
@Autowired
private DepositoryService depositoryService;
@Autowired
private CompanyService companyService;
@GetMapping("/depositoryRecord")
public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String,Object> map){
List<DepositoryRecordP> list=depositoryRecordService.findDepositoryRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
}
return new RestResponse(list,depositoryRecordService.findCountByCondition(map),200);
}
@GetMapping("/myApply")
public RestResponse findDepositoryInAndOutRecordPByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
List<ApplicationInRecordP> applicationInRecordPlist = depositoryRecordService.findApplicationInRecordPByCondition(map);
for (int i = 0; i < applicationInRecordPlist.size(); i++) {
applicationInRecordPlist.get(i).setPrice(applicationInRecordPlist.get(i).getPrice() / 100);
}
List<ApplicationOutRecordP> applicationOutRecordPlist = depositoryRecordService.findApplicationOutRecordPByCondition(map);
for (int i = 0; i < applicationOutRecordPlist.size(); i++) {
applicationOutRecordPlist.get(i).setPrice(applicationOutRecordPlist.get(i).getPrice() / 100);
}
Map<String,Object> result = new HashMap<>();
result.put("applicationIn",applicationInRecordPlist);
result.put("applicationOut",applicationOutRecordPlist);
return new RestResponse(result,result.size(),200);
}
/*@GetMapping("/myApply")
public RestResponse findDepositoryRecordByCondition(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
List<DepositoryRecordP> list=depositoryRecordService.findDepositoryRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
}
return new RestResponse(list,depositoryRecordService.findCountByCondition(map),200);
}*/
@GetMapping("/myTask")
public RestResponse myTask(@RequestParam Map<String,Object> map,HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("userId",userToken.getId());
List<SimpleApplicationOutRecordP> myTask = depositoryRecordService.findMyTask(map);
return new RestResponse(myTask
,depositoryRecordService.findMyTaskOutCount(map),200);
}
@PostMapping("/depositoryRecord")
public RestResponse insertDepositoryRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId"));
Depository depository = depositoryService.findDepositoryRecordById(depositoryId);
return CrudUtil.postHandle(depositoryRecordService.apply(map),1);
}
@PostMapping("/applicationIn")
public RestResponse insertApplicationInRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
return CrudUtil.postHandle(depositoryRecordService.applicationIn(map),1);
}
@GetMapping("/applicationInView")
public RestResponse findApplicationInRecordByCondition(@RequestParam Map<String,Object> map){
List<ApplicationInRecordP> list = depositoryRecordService.findApplicationInRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
}
return new RestResponse(list,depositoryRecordService.findApplicationInRecordPCountByCondition(map),200);
}
@GetMapping("/applicationOutView")
public RestResponse findApplicationOutRecordByCondition(@RequestParam Map<String,Object> map){
List<ApplicationOutRecordP> list = depositoryRecordService.findApplicationOutRecordPByCondition(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
}
return new RestResponse(list,depositoryRecordService.findApplicationOutRecordPCountByCondition(map),200);
}
@DeleteMapping("/depositoryRecord")
public RestResponse deleteDepositoryRecord(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id=ObjectFormatUtil.toInteger(map.get("id"));
return CrudUtil.deleteHandle(depositoryRecordService.deleteDepositoryRecordById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(depositoryRecordService.deleteDepositoryRecordByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
@PutMapping("/review")
public RestResponse review(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
return CrudUtil.postHandle(depositoryRecordService.review(map,userToken.getId()),1);
}
@PutMapping("/transfer")
public RestResponse transfer(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken);
map.put("departmenthead",departmentHeadByUser.getId());
map.put("applicantId",userToken.getId());
return CrudUtil.postHandle(depositoryRecordService.transferApply(map),1);
}
@PostMapping("deleteApplicationInRecord")
public RestResponse deleteApplicationInRecord(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id=ObjectFormatUtil.toInteger(map.get("id"));
return CrudUtil.deleteHandle(depositoryRecordService.deleteApplicationInRecordById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(depositoryRecordService.deleteApplicationInRecordByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
@PostMapping("deleteApplicationOutRecord")
public RestResponse deleteApplicationOutRecord(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id=ObjectFormatUtil.toInteger(map.get("id"));
return CrudUtil.deleteHandle(depositoryRecordService.deleteApplicationOutRecordById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(depositoryRecordService.deleteApplicationOutRecordByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
@PostMapping("/applicationOut")
public RestResponse insertApplicationOutRecord(@RequestBody Map<String,Object> map, HttpServletRequest request){
UserByPort userToken= (UserByPort) request.getAttribute("userToken");
map.put("applicantId",userToken.getId());
UserByPort departmentHeadByUser = findDepartmentHeadByUser(userToken);
map.put("departmenthead",departmentHeadByUser.getId());
return CrudUtil.postHandle(depositoryRecordService.insertApplicationOutRecord(map),1);
}
/**
* 获取当前登录用户的部门负责人
* @param user
* @return
*/
public static UserByPort findDepartmentHeadByUser(UserByPort user){
String url = "http://172.20.2.87:39168/org/positionlist";
Integer maindeparment = user.getMaindeparment();
Map<String,Object> map = new HashMap<>();
map.put("organization",maindeparment.toString());
map.put("incharge",1);
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Post userPost = JSONObject.toJavaObject((JSONObject) list.get(0), Post.class);
Map<String,Object> param = new HashMap<>();
param.put("position",userPost.getId());
UserByPort userByPort = PageController.FindUserByMap(param).get(0);
return userByPort;
}
}

25
src/main/java/com/dreamchaser/depository_manage/controller/ExcelController.java

@ -0,0 +1,25 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.service.ExcelService;
import com.dreamchaser.depository_manage.utils.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* 用于excel导入的控制器
*/
@RestController
@RequestMapping("/excel")
public class ExcelController {
@Autowired
ExcelService excelService;
@PostMapping("/importExcel")
public ResultVo importExcel(@RequestParam("file") MultipartFile excel) {
return excelService.importExcel(excel);
}
}

89
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -0,0 +1,89 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
* @author Dreamchaser
*/
@RestController
@RequestMapping("/material")
public class MaterialController {
@Autowired
MaterialService materialService;
/**
* 根据材料进行查询
* @param map
* @return
*/
@GetMapping("/material")
public RestResponse findMaterial(@RequestParam Map<String,Object> map){
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(map);
return new RestResponse(materialPByCondition,materialService.findCountByCondition(map),200);
}
/**
* 添加一条材料记录
* @param map
* @return
*/
@PostMapping("/material_add")
public RestResponse materialAdd(@RequestBody Map<String,Object> map){
return CrudUtil.postHandle(materialService.insertMaterial(map), 1);
}
/**
* 执行删除操作将状态改为删除
* @param map
* @return
*/
@PostMapping("/material_del")
public RestResponse deletematerial(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id= ObjectFormatUtil.toInteger(map.get("id"));
return CrudUtil.deleteHandle(materialService.changeStateToDeletedById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(materialService.changeStateToDeletedByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
/**
* 修改材料信息
* @param map
* @return
*/
@PostMapping("/material_edit")
public RestResponse updateDepository(@RequestBody Map<String,Object> map){
if(map.containsKey("state")){
map.put("state",1);
}else{
map.put("state",2);
}
return CrudUtil.postHandle(materialService.updateMaterial(map),1);
}
@PostMapping("realDeleteMaterial")
public RestResponse RealDeleteMaterial(@RequestBody Map<String,Object> map){
if(map.containsKey("id")){
Integer id = (Integer) map.get("id");
return CrudUtil.deleteHandle(materialService.deleteMaterialById(id),1);
}else{
throw new MyException("所需请求参数缺失!");
}
}
}

298
src/main/java/com/dreamchaser/depository_manage/controller/MaterialTypeController.java

@ -0,0 +1,298 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.MaterialP;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/materialType")
public class MaterialTypeController {
@Autowired
MaterialTypeService materialTypeService;
@Autowired
MaterialService materialService;
/**
* 插入一条新材料类型
* @param map
* @return
*/
@PostMapping("/materialType_add")
public RestResponse insertMaterialType(@RequestBody Map<String,Object> map){
return CrudUtil.postHandle(materialTypeService.insertMaterialType(map),1);
}
/**
* 根据条件查询材料类型
* @param map
* @return
*/
@GetMapping("/materialTypeRecord")
public RestResponse findmaterialTypeRecordByCondition(@RequestParam Map<String,Object> map){
List<MaterialType> list=materialTypeService.findMaterialTypeByCondition(map);
return new RestResponse(list,materialTypeService.findMaterialTypeCountByCondition(map),200);
}
/**
* 根据父级查询所有材料类型
* @param parentId
* @return
*/
@GetMapping("/allMaterialTypeByParent")
public RestResponse findMaterialTypeByNoParent(@RequestParam(value = "parentId",required = false) String parentId){
Map<String,Object> param = new HashMap<>();
if (parentId == null) {
parentId = "0";
}
param.put("parentId",parentId);
List<MaterialType> list = materialTypeService.findMaterialTypeByCondition(param);
return new RestResponse(list,materialTypeService.findMaterialTypeCountByCondition(param),200);
}
/**
* 彻底删除材料类别
* @param map
* @return
*/
@PostMapping("/realDeleteMaterialType")
public RestResponse realDeleteMaterialType(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id= ObjectFormatUtil.toInteger(map.get("id"));
new Thread(new Runnable() {
@Override
public void run() {
RealDeleteSonDepository(id.toString());
}
}).start();
return CrudUtil.deleteHandle(materialTypeService.deleteMaterialTypeById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
String id = ids.get(i).toString();
new Thread(new Runnable() {
@Override
public void run() {
RealDeleteSonDepository(id);
}
}).start();
}
return CrudUtil.deleteHandle(materialTypeService.deleteMaterialTypeByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
/**
* 删除所有子材料类型信息硬删除
* @param parentId
*/
public void RealDeleteSonDepository(String parentId){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
// 获取当前仓库所有子仓库
List<MaterialType> materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param);
for (int i = 0; i < materialTypeByCondition.size(); i++) {
Integer id = materialTypeByCondition.get(i).getId(); // 获取当前材料id
RealDeleteSonDepository(id.toString()); // 递归查询材料类型
materialTypeService.deleteMaterialTypeById(id); // 删除材料类型
}
}
/**
* 根据主键删除材料类型
* @param map
* @return
*/
@PostMapping("/materialType_del")
public RestResponse deleteMaterialType(@RequestBody Map<String,Object> map){
if (map.containsKey("id")){
Integer id= ObjectFormatUtil.toInteger(map.get("id"));
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id.toString(),3);
}
}).start();
return CrudUtil.deleteHandle(materialTypeService.changeStateToDeletedById(id),1);
}else if (map.containsKey("ids")){
List<Integer> ids=(List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
String id = ids.get(i).toString();
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id,3);
}
}).start();
}
return CrudUtil.deleteHandle(materialTypeService.changeStateToDeletedByIds(ids),ids.size());
}else {
throw new MyException("所需请求参数缺失!");
}
}
/**
* 修改材料类型
* @param map
* @return
*/
@PostMapping("/materialType_edit")
public RestResponse updateMaterialType(@RequestBody Map<String,Object> map){
if(map.containsKey("state")){
map.put("state",1);
}else{
map.put("state",2);
}
return CrudUtil.postHandle(materialTypeService.updateMaterialType(map),1);
}
/**
* 查找该类型下内是否有物品
* @param map
* @return
*/
@PostMapping("/findMaterialByMaterialTypeId")
public RestResponse findMaterialByMaterialTypeId(@RequestBody Map<String, Object> map){
Boolean allSonDepository = false;
if(map.containsKey("id")){
Integer materialTypeId = (Integer) map.get("id");
allSonDepository = findAllSonMaterialType(materialTypeId.toString());
}else if(map.containsKey("ids")){
List<Integer> ids = (List<Integer>) map.get("ids");
for (int i = 0; i < ids.size(); i++) {
allSonDepository |= findAllSonMaterialType(ids.get(i).toString());
if(allSonDepository){
break;
}
}
}
else {
throw new MyException("所需请求参数缺失!");
}
return new RestResponse(allSonDepository);
}
/**
* 根据父级类型编号查询所有子类型
* @param parentid
* @return
*/
public Boolean findAllSonMaterialType(String parentid){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentid);
param.put("state",1);
boolean materialByMaterialType = findMaterialByMaterialType(parentid);
if(materialByMaterialType){
return true;
}
List<MaterialType> materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param);
for (int i = 0; i < materialTypeByCondition.size(); i++) {
if(!findMaterialByMaterialType(materialTypeByCondition.get(i).getId().toString())){
findAllSonMaterialType(materialTypeByCondition.get(i).getId().toString());
}else{
return true;
}
}
return false;
}
/**
* 根据类型编号判断该类型下是否有物品
* @param parentId
* @return
*/
public boolean findMaterialByMaterialType(String parentId){
Map<String,Object> param = new HashMap<>();
param.put("materialTypeId",parentId);
param.put("state",1);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
if(materialPByCondition.size() > 0){
return true;
}
return false;
}
/**
* 修改材料类型状态
* @param map
* @return
*/
@PostMapping("/EditMaterialTypeState")
public RestResponse EditMaterialTypeState(@RequestBody Map<String,Object> map){
if (map.containsKey("state")) {
map.put("state", 1);
} else {
map.put("state", 2);
}
int state = ((int)map.get("state"));
String id = (String) map.get("id");
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonState(id, state);
}
}).start();
return CrudUtil.postHandle(materialTypeService.updateMaterialType(map), 1);
}
/**
* 修改所有类型状态
* @param parentId
* @param state
*/
public void UpdateSonState(String parentId,Integer state){
Map<String,Object> param = new HashMap<>();
param.put("parentId",parentId);
// 将当前类型下的物品变为禁用
UpdateSonMaterialState(parentId,state);
// 获取当前类型所有子类型
List<MaterialType> materialTypeByCondition = materialTypeService.findMaterialTypeByCondition(param);
for (int i = 0; i < materialTypeByCondition.size(); i++) {
MaterialType materialType = materialTypeByCondition.get(i);
int materialTypeId = materialType.getId();
Map<String,Object> newMap = new HashMap<>();
newMap.put("parentId",materialTypeId);
UpdateSonState(String.valueOf(materialTypeId),state);
Map<String,Object> map = new HashMap<>();
map.put("id",materialTypeId);
map.put("state",state);
materialTypeService.updateStateByParam(map);
}
}
/**
* 修改当前材料类型状态
* @param parentId
* @param state
*/
public void UpdateSonMaterialState(String parentId,Integer state){
Map<String,Object> param = new HashMap<>();
param.put("materialTypeId",parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
for (int i = 0; i < materialPByCondition.size(); i++) {
MaterialP materialP = materialPByCondition.get(i);
Map<String,Object> map = new HashMap<>();
map.put("id",materialP.getId());
map.put("state",state);
materialService.updateStateByParam(map);
}
}
}

27
src/main/java/com/dreamchaser/depository_manage/controller/NoticeController.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.controller;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.service.NoticeService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* @author Dreamchaser
*/
@RestController
public class NoticeController {
@Autowired
private NoticeService noticeService;
@PostMapping("/notice")
public RestResponse addNotice(@RequestBody Map<String,Object> map){
return CrudUtil.postHandle(noticeService.addNotice(map),1);
}
@GetMapping("/notices")
public RestResponse findNotices(@RequestParam Map<String,Object> map){
return new RestResponse(noticeService.findNoticeByCondition(map));
}
}

1063
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

File diff suppressed because it is too large

414
src/main/java/com/dreamchaser/depository_manage/controller/UserController.java

@ -0,0 +1,414 @@
package com.dreamchaser.depository_manage.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import com.dreamchaser.depository_manage.pojo.UserByPortP;
import com.dreamchaser.depository_manage.security.bean.LoginRealms;
import com.dreamchaser.depository_manage.security.bean.LoginType;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.security.bean.VerificationCode;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.security.pool.VerificationCodePool;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.service.UserService;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.Md5;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.fasterxml.jackson.core.sym.NameN;
import org.apache.http.protocol.HTTP;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.repository.query.ReactiveQueryByExampleExecutor;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.dreamchaser.depository_manage.utils.CrudUtil.deleteHandle;
/**
* 用户的相关接口
*
* @author 金昊霖
*/
@RestController
public class UserController {
@Autowired
private LoginRealms loginRealms;
@Autowired
private UserService userService;
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Autowired
private JavaMailSender mailSender;
@Autowired
private RoleService roleService;
@Value("${spring.mail.username}")
private String fromEmail;
/**
* 注册用户通常为手机或者邮箱注册
*
* @param map 参数列表包括账号手机注册就是phone邮箱就是email密码
* @return 成功则返回凭证否则返回验证失败
*/
@PostMapping("/register")
public RestResponse register(@RequestBody Map<String, Object> map) {
String principal;
Object password = map.get("pwd");
Object code = map.get("code");
UserToken userToken;
//判断必要参数是否满足
if (password == null || code == null) {
return CrudUtil.ID_MISS_RESPONSE;
}
//从map中获取对应参数
if (map.get("email") != null) {
principal = String.valueOf(map.get("email"));
userToken = new UserToken(LoginType.EMAIl_PASSWORD, principal, String.valueOf(password));
} else {
return CrudUtil.ID_MISS_RESPONSE;
}
//验证码正确且成功插入数据
if (checkCode(principal, String.valueOf(code))) {
//对密码进行加密然后存储用户信息
map.put("pwd", Md5.crypt(String.valueOf(map.get("pwd"))));
//如果用户记录插入成功
if (userService.insertUser(map) == 1) {
String token = Md5.crypt(userToken.getPrincipal() + userToken.getInstant());
//返回凭证
return new RestResponse().setData(token);
}
} else {
//验证码错误
return CrudUtil.CODE_ERROR;
}
return new RestResponse().setStatus(450).setStatusInfo(new StatusInfo("注册失败,系统繁忙,请稍后再试!", "注册失败"));
}
/**
* 验证是否有此账号然后发送验证码
*
* @param map 主要认证主体如账号邮箱qq的openIDwechat的code等
* @return restResponse附带凭证token
*/
@PostMapping("/sendCode")
public RestResponse sendCode(@RequestBody Map<String, Object> map) {
if (userService.findUserByCondition(map) == null) {
String principal;
if (map.containsKey("phone")) {
principal = String.valueOf(map.get("phone"));
} else if (map.containsKey("email")) {
principal = String.valueOf(map.get("email"));
} else {
return CrudUtil.ID_MISS_RESPONSE;
}
//创建一个验证码
VerificationCode v = new VerificationCode();
//将验证码存入验证码等待池
VerificationCodePool.addCode(principal, v);
//发送邮箱验证码
sendEmail(principal, v.getCode());
return new RestResponse();
}
return new RestResponse("", 304, new StatusInfo("发送验证码失败,该账户已存在!", "发送验证码失败,该账户已存在!"));
}
/**
* 登录接口
*
* @param map 登录信息
* loginType 登录方式目前支持的有email,qq,wechat
* principal 主要认证主体如账号邮箱qq的openIDwechat的code等
* credentials 类似于密码如果是qqwechat则不需要传改参数
* restResponse附带凭证token
*/
@PostMapping("/login")
public RestResponse login(@RequestBody Map<String, String> map, HttpServletRequest request) {
String url = "http://172.20.2.87:6666/base/login";
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
if(data != null) {
String userkey = (String) data.get("key");
String usertoken = (String) data.get("token");
HttpUtils.setUserKey(userkey);
HttpUtils.setUserToken(usertoken);
UserByPort userinfo = JSONObject.toJavaObject((JSONObject) data.get("userinfo"), UserByPort.class);
AuthenticationTokenPool.addToken(usertoken,userinfo);
return new RestResponse(usertoken);
}else{
return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE;
}
/*UserToken userToken = new UserToken(LoginType.getType(map.get("loginType"))
, map.get("principal"), map.get("credentials"));
return login(userToken);*/
}
/**
* 将生成的令牌拿去认证如果认证成功则返回带有token凭证响应否则返回用户密码错误的响应
*
* @param userToken 未认证的令牌
* @return restResponse 如果认证成功则返回带有token凭证响应否则返回用户密码错误的响应
*/
private RestResponse login(UserToken userToken) {
String token = loginRealms.authenticate(userToken);
if (token != null) {
return new RestResponse(token);
} else {
return CrudUtil.NOT_EXIST_USER_OR_ERROR_PWD_RESPONSE;
}
}
/**
* 退出登录,删除令牌的操作依据在拦截器中完成
*
* @return RESPONSE200
*/
@GetMapping("/logout")
public RestResponse logout() {
return CrudUtil.RESPONSE200;
}
@GetMapping("/sys/users")
public RestResponse findUsers(@RequestParam Map<String, Object> map) {
return new RestResponse(userService.findUserPsByCondition(map), userService.findCount(), 200);
}
/**
* 获取人员列表
* @param map
* @return
*/
@PostMapping("/sys/findUsers")
public RestResponse findUsersByPort(@RequestParam Map<String, Object> map) {
String url = "http://172.20.2.87:39168/staff/archiveslist";
if(map.containsKey("company")){
map.put("company",ObjectFormatUtil.toInteger(map.get("company")));
}
if(map.containsKey("adminorg")){
map.put("adminorg",ObjectFormatUtil.toInteger(map.get("adminorg")));
}
Object page = map.get("page");
Object pagesize = map.get("pagesize");
map.put("page",ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize));
String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url,paramObject, HTTP.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
List<UserByPortP> userByPortList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject)list.get(i), UserByPort.class);
UserByPortP user = new UserByPortP(userByPort);
RoleAndDepository depositoryAndRole = roleService.findDepositoryAndRole(userByPort.getId());
if(depositoryAndRole != null) {
user.setRolename(depositoryAndRole.getRoleName());
user.setDepositoryName(depositoryAndRole.getDepositoryName());
}else{
user.setRolename("");
user.setDepositoryName("");
}
userByPortList.add(user);
}
return new RestResponse(userByPortList, total, 200);
}
/**
* 添加用户权限
* @param map
* @return
*/
/**
* {id: "4323", authority: "1", depositoryId: "20"}
* @param map
* @return
*/
@PostMapping("/sys/user_role")
public RestResponse addUser(@RequestBody Map<String, Object> map) {
map.put("classes",1);
RoleAndDepository userid = roleService.findDepositoryAndRole(ObjectFormatUtil.toInteger(map.get("userid")));
if(userid!=null){
return CrudUtil.postHandle(roleService.updateUserOrPostRoleAndDepository(map), 1);
}else {
return CrudUtil.postHandle(roleService.addUserOrPostRoleAndDepository(map), 1);
}
// return CrudUtil.postHandle(userService.insertUser(map), 1);
}
@PostMapping("/sys/user_detail")
public RestResponse updateUser(@RequestBody Map<String, Object> map) {
if (map.containsKey("pwd") && map.get("pwd") != "") {
//对密码进行加密
map.put("pwd", Md5.crypt(String.valueOf(map.get("pwd"))));
}
if (map.containsKey("state")) {
map.put("state", 1);
} else {
map.put("state", 2);
}
return CrudUtil.postHandle(userService.updateUser(map), 1);
}
@DeleteMapping("/sys/user")
public RestResponse deleteUser(@RequestBody Map<String, Object> map) {
return deleteHandle(userService.changeUserStateToDeleteById(ObjectFormatUtil.toInteger(map.get("id"))), 1);
}
@DeleteMapping("/sys/users")
public RestResponse deleteUsers(@RequestBody Map<String, Object> map) {
if (map.containsKey("ids")) {
List<Integer> ids = (List<Integer>) map.get("ids");
return CrudUtil.deleteHandle(userService.changeUserStateToDeleteByIds(ids), ids.size());
} else {
return CrudUtil.ID_MISS_RESPONSE;
}
}
@PutMapping("/user")
public RestResponse updateSelf(@RequestBody Map<String, Object> map, HttpServletRequest request) {
UserToken userToken = (UserToken) request.getAttribute("userToken");
map.put("id", userToken.getUser().getId());
return CrudUtil.postHandle(userService.updateUserNoSensitive(map), 1);
}
@PutMapping("/checkOldEmail")
public RestResponse checkOldEmail(@RequestBody Map<String, Object> map, HttpServletRequest request) {
if (!map.containsKey("oldCode")) {
return CrudUtil.ID_MISS_RESPONSE;
}
UserToken userToken = (UserToken) request.getAttribute("userToken");
if (checkCode(userToken.getPrincipal(), map.get("oldCode").toString())) {
return new RestResponse("验证成功!");
} else {
//验证码错误
return CrudUtil.CODE_ERROR;
}
}
@PutMapping("/updateEmail")
public RestResponse updateEmail(@RequestBody Map<String, Object> map, HttpServletRequest request) {
//参数检测
if (!map.containsKey("email") || !map.containsKey("oldCode") || !map.containsKey("newCode")) {
return CrudUtil.ID_MISS_RESPONSE;
}
UserToken userToken = (UserToken) request.getAttribute("userToken");
//必须同时检测,否则会出现漏洞
if (checkCode(userToken.getPrincipal(), map.get("oldCode").toString())
&& checkCode(map.get("email").toString(), map.get("code").toString())) {
map.put("id", userToken.getUser().getId());
return CrudUtil.putHandle(userService.updateUser(map), 1);
} else {
//验证码错误
return CrudUtil.CODE_ERROR;
}
}
/**
* 用于注册用户的方法主要为号码验证和邮箱验证提供验证码核对的服务
*
* @param principal 认证主体
* @param code 验证码
* @return 是否验证通过
*/
private boolean checkCode(String principal, String code) {
if (code != null) {
VerificationCode verificationCode = VerificationCodePool.getCode(principal);
if (verificationCode != null) {
return code.equals(verificationCode.getCode());
}
}
return false;
}
/**
* 发送带有验证码的邮件信息
*/
private void sendEmail(String email, String code) {
//发送验证邮件
try {
SimpleMailMessage mailMessage = new SimpleMailMessage();
//主题
mailMessage.setSubject("仓库管理系统的验证码邮件");
//内容
mailMessage.setText("欢迎使用仓库管理系统,您正在注册此账户。" +
"\n您收到的验证码是: " + code + " ,请不要将此验证码透露给别人。");
//发送的邮箱地址
mailMessage.setTo(email);
//默认发送邮箱邮箱
mailMessage.setFrom(fromEmail);
//发送
mailSender.send(mailMessage);
} catch (Exception e) {
throw new MyException(e.toString());
}
}
/**
* 修改用户密码
*
* @param map
* @return
*/
@PostMapping("/edit_password")
public RestResponse editPassword(@RequestBody Map<String, Object> map) {
User userByEmail = null;
if (map.containsKey("email")) {
userByEmail = userService.findUserById((String) map.get("email"));
}
String old_pwd = Md5.crypt(String.valueOf(map.get("old_password")));
if (!old_pwd.equals(userByEmail.getPwd())) {
return new RestResponse("", 402, new StatusInfo("修改失败", "旧密码输入错误"));
}
String new_password = Md5.crypt(String.valueOf(map.get("new_password")));
map.put("new_password", new_password);
map.put("id", userByEmail.getId());
return CrudUtil.postHandle(userService.updateUserPasswordById(map), 1);
}
}

70
src/main/java/com/dreamchaser/depository_manage/converter/ExcelDepositoryInfoConverter.java

@ -0,0 +1,70 @@
package com.dreamchaser.depository_manage.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.service.DepositoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
@Component
public class ExcelDepositoryInfoConverter implements Converter<Integer> {
@Autowired
private DepositoryService depositoryService;
private static ExcelDepositoryInfoConverter excelDepositoryInfoConverter;
@Override
public Class supportJavaTypeKey() {
return Integer.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
List<Depository> depositoryAll = excelDepositoryInfoConverter.depositoryService.findDepositoryAll();
Integer data = 0;
for (int i = 0; i < depositoryAll.size(); i++) {
if(cellData.getStringValue().equals(depositoryAll.get(i).getDname())){
data = depositoryAll.get(i).getId();
}
}
if(data == 0){
throw new RuntimeException("没有该仓库");
}
return data;
}
@Override
public WriteCellData<String> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
List<Depository> depositoryAll = excelDepositoryInfoConverter.depositoryService.findDepositoryAll();
String data = "";
for (int i = 0; i < depositoryAll.size(); i++) {
if(value == depositoryAll.get(i).getId()){
data = depositoryAll.get(i).getDname();
}
}
return new WriteCellData<>(data);
}
@PostConstruct
public void init(){
excelDepositoryInfoConverter = this;
excelDepositoryInfoConverter.depositoryService = this.depositoryService;
}
}

63
src/main/java/com/dreamchaser/depository_manage/converter/ExcelMaterialTypeInfoConverter.java

@ -0,0 +1,63 @@
package com.dreamchaser.depository_manage.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.service.impl.MaterialTypeServiceImpl;
import org.apache.tomcat.jni.Error;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.List;
// 用于表格数据导入时材料类型部分数据的转换
@Component
public class ExcelMaterialTypeInfoConverter implements Converter<Integer> {
@Autowired
private MaterialTypeService materialTypeService;
private static ExcelMaterialTypeInfoConverter excelMaterialTypeInfoConverter;
@Override
public Class supportJavaTypeKey() {
return Integer.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
Integer data = 0;
return data;
}
@Override
public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
List<MaterialType> materialTypeAll = excelMaterialTypeInfoConverter.materialTypeService.findMaterialTypeAll();
String data = null;
for (int i = 0; i < materialTypeAll.size(); i++) {
if(value == materialTypeAll.get(i).getId()){
data = materialTypeAll.get(i).getTname();
}
}
return new WriteCellData<>(data);
}
@PostConstruct
public void init(){
excelMaterialTypeInfoConverter = this;
excelMaterialTypeInfoConverter.materialTypeService = this.materialTypeService;
}
}

45
src/main/java/com/dreamchaser/depository_manage/converter/ExcelStateInfoConverter.java

@ -0,0 +1,45 @@
package com.dreamchaser.depository_manage.converter;
import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;
import org.springframework.stereotype.Component;
public class ExcelStateInfoConverter implements Converter<Integer> {
@Override
public Class supportJavaTypeKey() {
return Integer.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.STRING;
}
@Override
public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
switch (cellData.getStringValue()){
case "启用":
return 1;
case "禁用":
return 2;
default:
return 3;
}
}
@Override
public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
switch (value){
case 1:
return new WriteCellData("启用");
case 2:
return new WriteCellData("禁用");
default:
return new WriteCellData("删除");
}
}
}

55
src/main/java/com/dreamchaser/depository_manage/entity/AccesstoAddress.java

@ -0,0 +1,55 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
/**
* 菜单地址类
*/
@Data
public class AccesstoAddress {
/**
* 菜单地址编号
*/
private Integer id;
/**
* 菜单名
*/
private String name;
/**
* 菜单地址
*/
private String url;
/**
* 菜单图片
*/
private String icon;
/**
* 访问方式
*/
private Integer type;
/**
* 角色编号
*/
private Integer role_id;
/**
* 父菜单编号
*/
private Integer menuparent;
/**
* 菜单状态
*/
private Integer state;
/**
* 目标
*/
private String target;
/**
* 是否有子菜单
*/
private int ischild;
}

62
src/main/java/com/dreamchaser/depository_manage/entity/Administration.java

@ -0,0 +1,62 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class Administration {
/**
* id
*/
private Integer id;
/**
* 编号非必填为空时由系统自动生成
*/
private String number;
/**
*名称
*/
private String name;
/**
* 上级
*/
private Integer superior;
/**
* 部门类别ID
*/
private Integer organizationtype;
/**
* 简称
*/
private String abbreviation;
/**
* 创建时间
*/
private Long time;
/**
* 状态
*/
private Integer state;
/**
* 企业微信对照值
*/
private Integer wechatorganizationid;
/**
* 部门类别名称
*/
private String classname;
/**
* 级别值
*/
private Integer level;
}

41
src/main/java/com/dreamchaser/depository_manage/entity/ApplicationInRecord.java

@ -0,0 +1,41 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class ApplicationInRecord {
/**
* id
*/
private Integer id;
/**
* 入库物品编号
*/
private Integer mid;
/**
* 入库数量
*/
private int quantity;
/**
* 入库金额
*/
private int price;
/**
* 提交人编号
*/
private int applicant_id;
/**
* 提交时间
*/
private Long applicant_time;
/**
* 货物单号
*/
private String code;
/**
* 仓库编号
*/
private Integer depository_id;
}

103
src/main/java/com/dreamchaser/depository_manage/entity/ApplicationOutRecord.java

@ -0,0 +1,103 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class ApplicationOutRecord {
/**
* id
*/
private Integer id;
/**
* 材料id
*/
private Integer mid;
/**
* 仓库id
*/
private Integer depositoryId;
/**
* 申请人id
*/
private Integer applicantId;
/**
* 申请时间
*/
private Long applicantTime;
/**
* 备注
*/
private String applyRemark;
/**
* 出货单号
*/
private String code;
/**
* 金额
*/
private Integer price;
/**
* 数量
*/
private Integer quantity;
/**
* 部门负责人
*/
private Integer departmenthead;
/**
* 部门负责人意见1通过2退回
*/
private Integer departmentheadPass;
/**
* 部门负责人处理时间
*/
private Long departmentheadTime;
/**
* 部门负责人审核备注
*/
private String departmentheadMessage;
/**
* 仓库管理员
*/
private Integer depositoryManager;
/**
* 仓库管理员意见1通过2退回
*/
private Integer depositoryManagerPass;
/**
* 仓库管理员处理时间
*/
private Long depositoryManagerTime;
/**
* 仓库管理员审核备注
*/
private String depositoryManagerMessage;
/**
* 状态
*/
private String state;
/**
* 是否为转移申请
*/
private Integer istransfer;
}

30
src/main/java/com/dreamchaser/depository_manage/entity/Company.java

@ -0,0 +1,30 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class Company {
/**
* 公司编号
*/
private Integer cid;
/**
* 公司名称
*/
private String cname;
/**
* 状态
*/
private Integer state;
/**
* 父级
*/
private Integer parentId;
/**
* 公司介绍
*/
private String introduce;
}

12
src/main/java/com/dreamchaser/depository_manage/entity/CsvInfo.java

@ -0,0 +1,12 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
/**
* 用于csv文件导入
*/
@Data
public class CsvInfo {
}

173
src/main/java/com/dreamchaser/depository_manage/entity/Depository.java

@ -0,0 +1,173 @@
package com.dreamchaser.depository_manage.entity;
/**
* depository
*
* @author bianj
* @version 1.0.0 2021-05-20
*/
public class Depository {
/** 版本号 */
private static final long serialVersionUID = -2259445638130429647L;
/** id */
private Integer id;
/** 仓库名称 */
private String dname;
/** 仓库地址 */
private String address;
/** 仓库介绍 */
private String introduce;
/** 仓库状态 */
private Integer state;
/** 父级 */
private Integer parentId;
/**
* 公司编号
*/
private Integer cid;
/**
* 公司名称
*/
private String cname;
/**
* 获取id
*
* @return id
*/
public Integer getId() {
return this.id;
}
/**
* 设置id
*
* @param id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取仓库名称
*
* @return 仓库名称
*/
public String getDname() {
return this.dname;
}
/**
* 设置仓库名称
*
* @param dname
* 仓库名称
*/
public void setDname(String dname) {
this.dname = dname;
}
/**
* 获取仓库地址
*
* @return 仓库地址
*/
public String getAddress() {
return this.address;
}
/**
* 设置仓库地址
*
* @param address
* 仓库地址
*/
public void setAddress(String address) {
this.address = address;
}
/**
* 获取仓库介绍
*
* @return 仓库介绍
*/
public String getIntroduce() {
return this.introduce;
}
/**
* 设置仓库介绍
*
* @param introduce
* 仓库介绍
*/
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
/**
* 获取仓库状态
* @return
*/
public Integer getState() {
return state;
}
/**
* 设置仓库状态
* @param state
*/
public void setState(Integer state) {
this.state = state;
}
/**
* 获取父级编号
* @return
*/
public Integer getParentId() {
return parentId;
}
/**
* 设置父级编号
* @param parentId
*/
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
/**
* 获取公司编号
* @return
*/
public Integer getCid() {
return cid;
}
/**
* 设置公司编号
* @param cid
*/
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
/* This code was generated by TableGo tools, mark 2 end. */
}

100
src/main/java/com/dreamchaser/depository_manage/entity/DepositoryRecord.java

@ -0,0 +1,100 @@
package com.dreamchaser.depository_manage.entity;
import com.dreamchaser.depository_manage.pojo.UserP;
import lombok.Data;
import java.util.Date;
/**
* 仓库调度记录(depository_record)
*
* @author Dreamchaser
* @version 1.0.0 2021-05-20
*/
@Data
public class DepositoryRecord {
/** 版本号 */
private static final long serialVersionUID = 8546566842955977610L;
/** 记录id */
private Integer id;
/** 申请编号 */
private Integer applicationId;
/** 产品名称 */
private String mname;
/** 调度的仓库id */
private Integer depositoryId;
/** 调度记录类型(购入/退料/转入,退还/领料/转出) */
private Integer type;
/** 数量 */
private Integer quantity;
/** 价格 */
private Double price;
/** 状态(未审核,未入库/出库,已入库) */
private String state;
/** 申请人id */
private Integer applicantId;
/** 申请备注 */
private String applyRemark;
/** 申请时间 */
private Long applyTime;
/** 审核人id */
private Integer reviewerId;
/** 审核结果备注 */
private String reviewRemark;
/** 审核时间 */
private Long reviewTime;
/**
* 是否审核通过
*/
private Integer reviewPass;
/** 验货人id */
private Integer checkerId;
/** 验收备注 */
private String checkRemark;
/** 出入库时间(验货时间) */
private Long checkTime;
/**
* 是否验收通过
*/
private Integer checkPass;
/**
* 申请人信息
*/
private UserP applicantUserP;
/**
* 审核人信息
*/
private UserP reviewerUserP;
/**
* 验货人信息
*/
private UserP checkerUserP;
/**
* 单号
*/
private String oldId;
}

72
src/main/java/com/dreamchaser/depository_manage/entity/ExcelInfo.java

@ -0,0 +1,72 @@
package com.dreamchaser.depository_manage.entity;
import cn.hutool.core.annotation.Alias;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.converters.longconverter.LongBooleanConverter;
import com.dreamchaser.depository_manage.converter.ExcelDepositoryInfoConverter;
import com.dreamchaser.depository_manage.converter.ExcelMaterialTypeInfoConverter;
import com.dreamchaser.depository_manage.converter.ExcelStateInfoConverter;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigInteger;
/**
* 用于excel表的导入
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ExcelInfo {
/** 材料编号 */
@ExcelProperty("材料编号")
private Integer id;
/** 仓库名称 */
@ExcelProperty(value = "仓库名称",converter = ExcelDepositoryInfoConverter.class)
private Integer depositoryId;
/** 材料名称 */
@ExcelProperty("材料名称")
private String mname;
/** 数量 */
@ExcelProperty("数量")
private Double quantity;
/** 总金额 */
@ExcelProperty("总金额")
private Double amounts;
/** 材料种类id */
@ExcelProperty(value = "材料种类",converter = ExcelMaterialTypeInfoConverter.class)
private Integer typeId;
/** 材料状态 */
@ExcelProperty(value = "状态",converter = ExcelStateInfoConverter.class)
private Integer state;
/** 存货编码 */
@ExcelProperty("存货编码")
private Long code;
/** 规格型号 */
@ExcelProperty("规格型号")
private String version;
/** 单价 */
@ExcelProperty("单价")
private Double price;
/** 计量单位 */
@ExcelProperty("计量单位")
private String unit;
/** 材质 */
@ExcelProperty("材质")
private String texture;
/** 仓库编码 */
@ExcelProperty("仓库编码")
private String depositoryCode;
}

64
src/main/java/com/dreamchaser/depository_manage/entity/Material.java

@ -0,0 +1,64 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
import java.math.BigInteger;
/**
* 产品信息记录库存(material)
* @author Dreamchaser
* @version 1.0.0 2021-05-20
*/
@Data
public class Material {
/** 版本号 */
private static final long serialVersionUID = 4604245526757565755L;
/** 存储id */
private Integer id;
/** 仓库名称 */
private Integer depositoryId;
/** 材料名称 */
private String mname;
/** 数量 */
private Integer quantity;
/** 总金额 */
private Double amounts;
/** 材料种类id */
private Integer typeId;
/** 材料状态 */
private Integer state;
/** 存货编码 */
private BigInteger code;
/** 规格型号 */
private String version;
/** 单价 */
private Double price;
/** 材料类型 */
private MaterialType materialType;
/** 所属仓库 */
private Depository depository;
/** 计量单位 */
private String unit;
/** 材质 */
private String texture;
/**
* 仓库编号
*/
private String depositoryCode;
}

119
src/main/java/com/dreamchaser/depository_manage/entity/MaterialType.java

@ -0,0 +1,119 @@
package com.dreamchaser.depository_manage.entity;
/**
* material_type
*
* @author bianj
* @version 1.0.0 2021-05-20
*/
public class MaterialType {
/** 版本号 */
private static final long serialVersionUID = 5895240732960572981L;
/* This code was generated by TableGo tools, mark 1 begin. */
/** 类型id */
private Integer id;
/** 类型名称 */
private String tname;
/** 类型介绍 */
private String introduce;
/** 类型状态 */
private int state;
/**
* 父级编号
*/
private Integer parentId;
/* This code was generated by TableGo tools, mark 1 end. */
/* This code was generated by TableGo tools, mark 2 begin. */
/**
* 获取类型id
*
* @return 类型id
*/
public Integer getId() {
return this.id;
}
/**
* 设置类型id
*
* @param id
* 类型id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取类型名称
*
* @return 类型名称
*/
public String getTname() {
return this.tname;
}
/**
* 设置类型名称
*
* @param tname
* 类型名称
*/
public void setTname(String tname) {
this.tname = tname;
}
/**
* 获取类型介绍
*
* @return 类型介绍
*/
public String getIntroduce() {
return this.introduce;
}
/**
* 设置类型介绍
*
* @param introduce
* 类型介绍
*/
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
/**
* 获取类型状态
* @return 类型状态
*/
public int getState() {
return state;
}
/**
* 设置类型状态
* @param state
*/
public void setState(int state) {
this.state = state;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
/* This code was generated by TableGo tools, mark 2 end. */
}

65
src/main/java/com/dreamchaser/depository_manage/entity/Md5Encryption.java

@ -0,0 +1,65 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.codec.digest.DigestUtils;
import java.util.Map;
/**
* 加密算法
*/
@Log4j2
@Data
public class Md5Encryption {
private static String CONSTANT_CONFIG_AppKey = "heng_xin_gao_ke_AppKey"; //应用程序密钥
private String code;
private String appkey;
public String Md5EncryptionAlgorithm(){
if(this.appkey == ""){
Md5EncryptionInit(this.code);
}
String keyMd5 = DigestUtils.md5Hex(this.appkey);
String codeMd1 = DigestUtils.md5Hex(this.code);
String yiCeng = codeMd1 + keyMd5;
String yiCengMd5 = DigestUtils.md5Hex(yiCeng);
String erCeng = yiCengMd5 + this.appkey;
String md5Val = DigestUtils.md5Hex(erCeng);
return md5Val;
}
public String Md5EncryptionAlgorithmFj(){
if(this.appkey == ""){
Md5EncryptionInit(this.code);
}
log.info("Code ===> "+this.code);
log.info("AppKey ===> "+this.appkey);
String keyMd5 = DigestUtils.md5Hex(this.appkey);
log.info("Step1:--AppKey-加密->"+keyMd5);
String codeMd1 = DigestUtils.md5Hex(this.code);
log.info("Step2:--CodeString-加密->"+codeMd1);
String yiCeng = codeMd1 + keyMd5;
log.info("Step3:--CodeString+AppKey-->"+yiCeng);
String yiCengMd5 = DigestUtils.md5Hex(yiCeng);
log.info("Step4:--one-加密->"+yiCengMd5);
String erCeng = yiCengMd5 + this.appkey;
log.info("Step5:--one + AppKey->"+erCeng);
String erCengMd5 = DigestUtils.md5Hex(erCeng);
log.info("Step6:--therr--加密-->\n",erCengMd5);
return erCengMd5;
}
/**
* 初始化程序
* @param code
*/
public void Md5EncryptionInit(String code){
this.code = code;
this.appkey = CONSTANT_CONFIG_AppKey;
}
}

116
src/main/java/com/dreamchaser/depository_manage/entity/Notice.java

@ -0,0 +1,116 @@
package com.dreamchaser.depository_manage.entity;
import java.util.Date;
/**
* notice
*
* @author bianj
* @version 1.0.0 2021-06-14
*/
public class Notice implements java.io.Serializable {
/** 版本号 */
private static final long serialVersionUID = -2744388334561767209L;
/** 公告主键 */
private Integer id;
/** 公告标题 */
private String title;
/** 公告内容 */
private String content;
/** 发布时间 */
private String time;
/**
* 获取公告主键
*
* @return 公告主键
*/
public Integer getId() {
return this.id;
}
/**
* 设置公告主键
*
* @param id
* 公告主键
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取公告标题
*
* @return 公告标题
*/
public String getTitle() {
return this.title;
}
/**
* 设置公告标题
*
* @param title
* 公告标题
*/
public void setTitle(String title) {
this.title = title;
}
/**
* 获取公告内容
*
* @return 公告内容
*/
public String getContent() {
return this.content;
}
/**
* 设置公告内容
*
* @param content
* 公告内容
*/
public void setContent(String content) {
this.content = content;
}
/**
* 获取发布时间
*
* @return 发布时间
*/
public String getTime() {
return this.time;
}
/**
* 设置发布时间
*
* @param time
* 发布时间
*/
public void setTime(String time) {
this.time = time;
}
/* This code was generated by TableGo tools, mark 2 end. */
@Override
public String toString() {
return "Notice{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
", time='" + time + '\'' +
'}';
}
}

101
src/main/java/com/dreamchaser/depository_manage/entity/Post.java

@ -0,0 +1,101 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
/**
* 岗位类
*/
@Data
public class Post {
/**
* id
*/
private Integer id;
/**
* 编号
*/
private String number;
/**
* 职位名称
*/
private String name;
/**
* 职务编号
*/
private Integer duties;
/**
* 时间
*/
private Long time;
/**
* 状态1启用2禁用3删除
*/
private Integer state;
/**
* 归属行政组织
*/
private Integer administrativeorganization;
/**
* 上级
*/
private Integer superior;
/**
* 是否为本部门负责人12
*/
private Integer personincharge;
/**
* 部门
*/
private Integer department;
/**
* 名称
*/
private String dutiesname;
/**
* 职务编号
*/
private String dutiesnumber;
/**
* 归属行政组织名称
*/
private String aoname;
/**
* 归属行政组织编号
*/
private String aonumber;
/**
* 职务类别
*/
private String jobname;
/**
* 上级名称
*/
private String superiorname;
/**
* 上级编号
*/
private String superiornumber;
/**
* 部门
*/
private String departmentname;
}

31
src/main/java/com/dreamchaser/depository_manage/entity/PostOrUserRole.java

@ -0,0 +1,31 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class PostOrUserRole {
/**
* 编号
*/
private Integer id;
/**
* 1个人2岗位
*/
private Integer classes;
/**
*关联权限表
*/
private Integer role;
/**
* 如果是个人则绑定到人,如果是岗位则绑定岗位
*/
private Integer userid;
/**
* 负责仓库编号
*/
private Integer did;
}

49
src/main/java/com/dreamchaser/depository_manage/entity/Role.java

@ -0,0 +1,49 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
@Data
public class Role {
/**
* 角色id
*/
private int id;
/**
* 角色名称
*/
private String name;
/**
* 获取角色id
* @return
*/
public int getId() {
return id;
}
/**
* 设置角色id
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取角色名称
* @return
*/
public String getName() {
return name;
}
/**
* 设置角色名称
* @param name
*/
public void setName(String name) {
this.name = name;
}
}

22
src/main/java/com/dreamchaser/depository_manage/entity/SimpleApplicationOutRecord.java

@ -0,0 +1,22 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
/**
* 简单仓库出库信息,为了前端展示需要尽量减少字段的传输以提高效率
* @author Dreamchaser
*/
@Data
public class SimpleApplicationOutRecord {
/** 记录id */
private Integer id;
/** 申请人id */
private Integer applicantId;
/** 申请备注 */
private String applyRemark;
/** 申请时间 */
private Long applicantTime;
}

27
src/main/java/com/dreamchaser/depository_manage/entity/SimpleDepositoryRecord.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
import java.util.Date;
/**
* 简单仓库记录信息,为了前端展示需要尽量减少字段的传输以提高效率
* @author Dreamchaser
*/
@Data
public class SimpleDepositoryRecord {
/** 记录id */
private Integer id;
/** 调度记录类型(购入/退料/转入,退还/领料/转出) */
private Integer type;
/** 申请人id */
private Integer applicantId;
/** 申请备注 */
private String applyRemark;
/** 申请时间 */
private Long applyTime;
}

130
src/main/java/com/dreamchaser/depository_manage/entity/StandingBook.java

@ -0,0 +1,130 @@
package com.dreamchaser.depository_manage.entity;
/**
* standing_book
*
* @author bianj
* @version 1.0.0 2021-05-20
*/
public class StandingBook {
/** 版本号 */
private static final long serialVersionUID = 7203535351933957406L;
/* This code was generated by TableGo tools, mark 1 begin. */
/** 台账记录id */
private Integer id;
/** 0表示调入,1表示调出(外部);2表示调入(退料),3表示调出(领料)(内部调用) */
private Integer type;
/** 数量 */
private Integer quantity;
/** 总价 */
private Integer price;
/** 材料名称 */
private String materialName;
/* This code was generated by TableGo tools, mark 1 end. */
/* This code was generated by TableGo tools, mark 2 begin. */
/**
* 获取台账记录id
*
* @return 台账记录id
*/
public Integer getId() {
return this.id;
}
/**
* 设置台账记录id
*
* @param id
* 台账记录id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取0表示调入1表示调出外部;2表示调入退料3表示调出领料内部调用
*
* @return 0表示调入
*/
public Integer getType() {
return this.type;
}
/**
* 设置0表示调入1表示调出外部;2表示调入退料3表示调出领料内部调用
*
* @param type
* 0表示调入
*/
public void setType(Integer type) {
this.type = type;
}
/**
* 获取数量
*
* @return 数量
*/
public Integer getQuantity() {
return this.quantity;
}
/**
* 设置数量
*
* @param quantity
* 数量
*/
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
/**
* 获取总价
*
* @return 总价
*/
public Integer getPrice() {
return this.price;
}
/**
* 设置总价
*
* @param price
* 总价
*/
public void setPrice(Integer price) {
this.price = price;
}
/**
* 获取材料名称
*
* @return 材料名称
*/
public String getMaterialName() {
return this.materialName;
}
/**
* 设置材料名称
*
* @param materialName
* 材料名称
*/
public void setMaterialName(String materialName) {
this.materialName = materialName;
}
/* This code was generated by TableGo tools, mark 2 end. */
}

86
src/main/java/com/dreamchaser/depository_manage/entity/TransferRecord.java

@ -0,0 +1,86 @@
package com.dreamchaser.depository_manage.entity;
/**
* transfer_record
*
* @author bianj
* @version 1.0.0 2021-06-05
*/
public class TransferRecord implements java.io.Serializable {
/** 版本号 */
private static final long serialVersionUID = 1696077392188910210L;
/* This code was generated by TableGo tools, mark 1 begin. */
/** 转移记录id */
private Integer id;
/** 转出仓库id */
private Integer fromId;
/** 转入仓库id */
private Integer toId;
/* This code was generated by TableGo tools, mark 1 end. */
/* This code was generated by TableGo tools, mark 2 begin. */
/**
* 获取转移记录id
*
* @return 转移记录id
*/
public Integer getId() {
return this.id;
}
/**
* 设置转移记录id
*
* @param id
* 转移记录id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取转出仓库id
*
* @return 转出仓库id
*/
public Integer getFromId() {
return this.fromId;
}
/**
* 设置转出仓库id
*
* @param fromId
* 转出仓库id
*/
public void setFromId(Integer fromId) {
this.fromId = fromId;
}
/**
* 获取转入仓库id
*
* @return 转入仓库id
*/
public Integer getToId() {
return this.toId;
}
/**
* 设置转入仓库id
*
* @param toId
* 转入仓库id
*/
public void setToId(Integer toId) {
this.toId = toId;
}
/* This code was generated by TableGo tools, mark 2 end. */
}

254
src/main/java/com/dreamchaser/depository_manage/entity/User.java

@ -0,0 +1,254 @@
package com.dreamchaser.depository_manage.entity;
import java.util.Date;
import com.dreamchaser.depository_manage.entity.Role;
/**
* user
*
* @author bianj
* @version 1.0.0 2021-05-05
*/
public class User {
/** 用户id */
private Integer id;
/** 用户名称 */
private String uname;
/** 表示权限等级 */
private int authority;
/** 用户登录密码(数据库存储的是加密后的) */
private String pwd;
/** 性别 */
private String sex;
/** 负责仓库,序号表示仓库id,0表示全部仓库 */
private Integer depositoryId;
/** 入职日期 */
private Date entryDate;
/** 邮箱 */
private String email;
/** 手机号 */
private String phone;
/**
* 用户状态
*/
private int state;
/**
* 权限类
*/
private Role role;
/**
* 获取用户id
*
* @return 用户id
*/
public Integer getId() {
return this.id;
}
/**
* 设置用户id
*
* @param id
* 用户id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取用户名称
*
* @return 用户名称
*/
public String getUname() {
return this.uname;
}
/**
* 设置用户名称
*
* @param uname
* 用户名称
*/
public void setUname(String uname) {
this.uname = uname;
}
/**
* 获取表示权限等级
*
* @return 表示权限等级
*/
public int getAuthority() {
return this.authority;
}
/**
* 设置表示权限等级
*
* @param authority
* 表示权限等级
*/
public void setAuthority(int authority) {
this.authority = authority;
}
/**
* 获取用户登录密码数据库存储的是加密后的
*
* @return 用户登录密码数据库存储的是加密后的
*/
public String getPwd() {
return this.pwd;
}
/**
* 设置用户登录密码数据库存储的是加密后的
*
* @param pwd
* 用户登录密码数据库存储的是加密后的
*/
public void setPwd(String pwd) {
this.pwd = pwd;
}
/**
* 获取性别
*
* @return 性别
*/
public String getSex() {
return this.sex;
}
/**
* 设置性别
*
* @param sex
* 性别
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* 获取负责仓库序号表示仓库id0表示全部仓库
*
* @return 负责仓库
*/
public Integer getDepositoryId() {
return this.depositoryId;
}
/**
* 设置负责仓库序号表示仓库id0表示全部仓库
*
* @param depositoryId
* 负责仓库
*/
public void setDepositoryId(Integer depositoryId) {
this.depositoryId = depositoryId;
}
/**
* 获取入职日期
*
* @return 入职日期
*/
public Date getEntryDate() {
return this.entryDate;
}
/**
* 设置入职日期
*
* @param entryDate
* 入职日期
*/
public void setEntryDate(Date entryDate) {
this.entryDate = entryDate;
}
/**
* 获取邮箱
*
* @return 邮箱
*/
public String getEmail() {
return this.email;
}
/**
* 设置邮箱
*
* @param email
* 邮箱
*/
public void setEmail(String email) {
this.email = email;
}
/**
* 获取手机号
*
* @return 手机号
*/
public String getPhone() {
return this.phone;
}
/**
* 设置手机号
*
* @param phone
* 手机号
*/
public void setPhone(String phone) {
this.phone = phone;
}
/**
* 获取角色对象
* @return
*/
public Role getRole() {
return this.role;
}
/**
* 设置角色对象
* @param role
*/
public void setRole(Role role) {
this.role = role;
}
/**
* 获取用户状态
* @return
*/
public int getState() {
return state;
}
/**
* 设置用户状态
* @param state
*/
public void setState(int state) {
this.state = state;
}
/* This code was generated by TableGo tools, mark 2 end. */
}

287
src/main/java/com/dreamchaser/depository_manage/entity/UserByPort.java

@ -0,0 +1,287 @@
package com.dreamchaser.depository_manage.entity;
import lombok.Data;
import java.time.Instant;
@Data
public class UserByPort {
/**
* id
*/
private Integer id;
/**
* 工号
*/
private String number;
/**
* 姓名
*/
private String name;
/**
* 头像
*/
private String icon;
/**
* 雇佣类型1雇佣入职2再入职
*/
private Integer hireclass;
/**
* 用工关系1:临时工 , 2:编外人员 ;3:实习&实习生;4试用员工5待分配6待岗7临时调入8正式员工9长期病假10停薪留职11退休12辞职13辞退14离职
*/
private Integer emptype;
/**
* 入职公司
*/
private Integer company;
/**
* 主部门
*/
private Integer maindeparment;
/**
* 子部门
*/
private Integer sunmaindeparment;
/**
* 部门
*/
private String deparment;
/**
* 所属行政组织
*/
private Integer adminorg;
/**
* 职位
*/
private Integer position;
/**
* 职务分类
*/
private Integer jobclass;
/**
* 职务
*/
private Integer jobid;
/**
* 职务等级
*/
private Integer jobleve;
/**
* 写入时间
*/
private long time;
/**
* 编辑时间
*/
private long eitetime;
/**
* /微信UserId
*/
private String wechat;
/**
* 企业微信UserId
*/
private String workwechat;
/**
* 状态1启用2禁用3删除
*/
private Integer state;
/**
* 身份识别
*/
private long key;
/**
* 是否为管理员1不是2分公司3集团管理员4超级管
*/
private Integer isadmin;
/**
* 密码
*/
private String password;
/**
* 角色
*/
private Integer role;
/**
* 身份证号
*/
private String idcardno;
/**
* 护照号码
*/
private String passportno;
/**
* 国际区号
*/
private String globalroaming;
/**
* 手机号码
*/
private String mobilephone;
/**
* 电子邮箱比如 example@qq.com
*/
private String email;
/**
* 性别1男性2女性3中性
*/
private Integer gender;
/**
* 生日
*/
private Long birthday;
/**
* 民族
*/
private String myfolk;
/**
* 籍贯
*/
private String nativeplace;
/**
* 身份证有效期开始
*/
private Long idcardstartdate;
/**
* 身份证有效期结束
*/
private Long idcardenddate;
/**
* 身份证地址
*/
private String idcardaddress;
/**
* 身份证签发机关
*/
private String idcardIssued;
/**
* 健康状况1良好2一般3较弱4有生理缺陷5残废
*/
private Integer health;
/**
* /婚姻状况1未婚2已婚3丧偶4离异
*/
private Integer maritalstatus;
/**
* 内线电话
*/
private String internaltelephone;
/**
* 现居住地址
*/
private String currentresidence;
/**
* 星座1白羊座2金牛座3双子座4巨蟹座5狮子座6处女座7天枰座8天蝎座9射手座10摩羯座11水瓶座12双鱼座
*/
private Integer constellationing;
/**
* 是否双职工12
*/
private Integer isdoubleworker;
/**
* 是否为退役军人12
*/
private Integer isveterans;
/**
* 退役证编号
*/
private String veteransnumber;
/**
* 参加工作日期
*/
private Long jobstartdate;
/**
* 入职日期
*/
private Long entrydate;
/**
* 试用期
*/
private Integer probationperiod;
/**
* 预计转正日期
*/
private Long planformaldate;
/**
* 政治面貌(1群众2无党派3台盟会员4九三社员5致公党员6农工党员7民进会员8民建会员9民盟盟员10民革会员11共青团员12预备党员13中共党员)
*/
private Integer politicaloutlook;
/**
* 公司名称
*/
private String companyname;
/**
* 主部门
*/
private String maindeparmentname;
/**
* 岗位
*/
private String sunmaindeparmentname;
private String workpostname;
/**
* 职位
*/
private String positionname;
/**
* 身份认证
*/
private String keystr;
}

44
src/main/java/com/dreamchaser/depository_manage/exception/MyException.java

@ -0,0 +1,44 @@
package com.dreamchaser.depository_manage.exception;
/**
* 自定义异常类
* @author 金昊霖
*/
public class MyException extends RuntimeException {
/**
* 异常码
*/
private int code;
/**
* 异常信息
*/
private String msg;
public MyException(int code, String msg){
super(msg);
this.code = code;
this.msg = msg;
}
public MyException(String msg){
super(msg);
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}

46
src/main/java/com/dreamchaser/depository_manage/exceptionHandler/ApplicationContextHolder.java

@ -0,0 +1,46 @@
package com.dreamchaser.depository_manage.exceptionHandler;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.stereotype.Component;
/**
* 静态变量保存 Spring ApplicationContext,可在任何代码任何地方任何时候中取出 ApplicaitonContext
*/
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getContext() {
return context;
}
public static Object getBean(String name) {
return context != null ? context.getBean(name) : null;
}
public static <T> T getBean(Class<T> clz) {
return context != null ? context.getBean(clz) : null;
}
public static <T> T getBean(String name, Class<T> clz) {
return context != null ? context.getBean(name, clz) : null;
}
public static void addApplicationListenerBean(String listenerBeanName) {
if (context != null) {
ApplicationEventMulticaster applicationEventMulticaster = (ApplicationEventMulticaster)context.getBean(ApplicationEventMulticaster.class);
applicationEventMulticaster.addApplicationListenerBean(listenerBeanName);
}
}
}

29
src/main/java/com/dreamchaser/depository_manage/exceptionHandler/CustomExceptionHandler.java

@ -0,0 +1,29 @@
package com.dreamchaser.depository_manage.exceptionHandler;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.StatusInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* 全局异常捕捉处理
* @author 金昊霖
*/
@ControllerAdvice
@Slf4j
public class CustomExceptionHandler {
@ResponseBody
@ExceptionHandler(value = Exception.class)
public RestResponse errorHandler(MyException e) {
return new RestResponse(null,e.getCode(),new StatusInfo(e.getMsg(),e.getMsg()));
}
}

54
src/main/java/com/dreamchaser/depository_manage/intercepter/UserInterceptor.java

@ -0,0 +1,54 @@
package com.dreamchaser.depository_manage.intercepter;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 认证拦截器如果请求头中有相应凭证则放行否则拦截返回认证失效错误
* @author 金昊霖
*/
@Slf4j
@Component
public class UserInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws MyException {
//拿到requset中的head
String token =null;
Cookie[] cookies=request.getCookies();
if (cookies!=null){
for (Cookie c:cookies){
if (c.getName().equals("token")){
token=c.getValue();
break;
}
}
}
//如果是访问logout则删除对应的令牌
if ("/logout".equals(request.getServletPath())){
AuthenticationTokenPool.removeToken(token);
return true;
}
if (token!=null&&AuthenticationTokenPool.getToken(token)!=null){
request.setAttribute("userToken",AuthenticationTokenPool.getToken(token));
return true;
}else {
try {
response.sendRedirect("/login");
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}
}

90
src/main/java/com/dreamchaser/depository_manage/listener/ExcelListener.java

@ -0,0 +1,90 @@
package com.dreamchaser.depository_manage.listener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.metadata.Cell;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.fastjson.JSON;
import com.dreamchaser.depository_manage.utils.ResultVo;
import com.dreamchaser.depository_manage.utils.ResultVoUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
@Slf4j
public class ExcelListener<T> extends AnalysisEventListener<T> {
// 返回读取到的excel中的数据
List<T> dataList = new ArrayList<>();
// 获取错误信息
List<String> errMsg = new ArrayList<>();
public ExcelListener() {
}
// 每一条数据解析都会来调用
@Override
public void invoke(T t, AnalysisContext analysisContext) {
log.info("【Excel文件】解析到一条数据{}:", JSON.toJSONString(t));
dataList.add(t);
}
// 所有数据解析完成了 才会来调用
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
log.info("【Excel文件】Excel所有数据解析完毕!");
}
public List<T> getDataList() {
return dataList;
}
/**
* 在转换异常 获取其他异常下会调用本接口抛出异常则停止读取如果这里不抛出异常则 继续读取下一行
*
* @param exception
* @param context
* @throws Exception
*/
@Override
public void onException(Exception exception, AnalysisContext context) throws Exception {
log.error("解析失败,但是继续解析下一行:{}", exception.getMessage());
// 如果是某一个单元格的转换异常 能获取到具体行号
// 如果要获取头的信息 配合invokeHeadMap使用
Map<Integer, Cell> cellMap = context.readRowHolder().getCellMap();
Collection values = cellMap.values();
Iterator iterator = values.iterator();
String result = "";
while (iterator.hasNext()){
ReadCellData next = (ReadCellData) iterator.next();
if(next.getStringValue() != null) {
result += next.getStringValue() + " ";
}else if(next.getNumberValue() != null){
result += next.getNumberValue().toString() + " ";
}
}
int errRow = 0;
int errColumn = 0;
if (exception instanceof ExcelDataConvertException) {
ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
errRow = excelDataConvertException.getRowIndex() + 1;
errColumn = excelDataConvertException.getColumnIndex() + 1;
log.error("第{}行,第{}列解析异常,数据为:{}", excelDataConvertException.getRowIndex() + 1,
excelDataConvertException.getColumnIndex() + 1, result);
}
String msg = "第"+errRow+"行,第"+errColumn+"列解析异常,数据为:"+result;
errMsg.add(msg);
}
/**
* 返回错误信息
* @return
*/
public List<String> retrunErrMsg(){
return errMsg;
}
}

52
src/main/java/com/dreamchaser/depository_manage/mapper/AccesstoAddressMapper.java

@ -0,0 +1,52 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.AccesstoAddress;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
public interface AccesstoAddressMapper {
/**
* 查询所有菜单
* @return
*/
List<AccesstoAddress> findAllMenus();
/**根据角色查询对应菜单
*
* @return
*/
List<AccesstoAddress> findMenusByRole(Map<String,Object> map);
/**
* 查询所有没有父菜单的菜单
* @return
*/
List<AccesstoAddress> findMenusByNoParent();
/**
* 根据父菜单编号查询对应子菜单
* @param id
* @return
*/
List<AccesstoAddress> findAccessstoAddressByParent(Integer id);
List<AccesstoAddress> findAccessstoAddressByParentAndRole(Map<String,Object> map);
List<AccesstoAddress> findAccessToAddressByUser(Map<String,Object> map);
/**
* 根据菜单列表编号获取菜单
* @param menus
* @return
*/
List<AccesstoAddress> findAccessToAddressByList(List<String> menus);
}

108
src/main/java/com/dreamchaser/depository_manage/mapper/AccesstoAddressMapper.xml

@ -0,0 +1,108 @@
<?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">
<!-- depository -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.AccesstoAddressMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="accesstoAddress" type="com.dreamchaser.depository_manage.entity.AccesstoAddress">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="url" property="url" jdbcType="VARCHAR" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="role_id" property="role_id" jdbcType="INTEGER" />
<result column="menuparent" property="menuparent" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="icon" property="icon" jdbcType="VARCHAR"/>
<result column="target" property="target" jdbcType="VARCHAR"/>
<result column="ischild" property="ischild" jdbcType="INTEGER"/>
</resultMap>
<!-- This code was generated by TableGo tools, mark 1 end. -->
<!-- This code was generated by TableGo tools, mark 2 begin. -->
<!-- 表查询字段 -->
<sql id="allColumns">
a.id,a.name,a.url ,a.`type` ,a.role_id ,a.menuparent ,a.state,a.icon,a.target,a.ischild
</sql>
<select id="findAllMenus" resultMap="accesstoAddress">
select
<include refid="allColumns"></include>
from accesstoaddress a
where a.state != 3
</select>
<select id="findAccessstoAddressByParentAndRole" resultMap="accesstoAddress" parameterType="map">
select
<include refid="allColumns"/>
from accesstoaddress a
where 1 = 1
<if test="roleId != null and roleId != ''">
and a.role_id = #{roleId}
</if>
<if test="menuparent != null and menuparent != ''">
and a.menuparent = #{menuparent}
</if>
and a.state != 3
</select>
<select id="findMenusByRole" resultMap="accesstoAddress" parameterType="map">
select
<include refid="allColumns"/>
from accesstoaddress a
where 1 = 1
<if test="type != null and type != ''">
and type = #{type}
</if>
<if test="roleId != null and roleId != ''">
and a.role_id = #{roleId}
</if>
<if test="menuparent != null and menuparent != ''">
and a.menuparent = #{menuparent}
</if>
and a.state != 3
</select>
<select id="findMenusByNoParent" resultMap="accesstoAddress">
select
<include refid="allColumns"></include>
from accesstoaddress a
where 1 = 1
and a.menuparent = 0
</select>
<select id="findAccessstoAddressByParent" resultMap="accesstoAddress" parameterType="INTEGER">
select
<include refid="allColumns"></include>
from accesstoaddress a
where 1 = 1
and a.menuparent = #{id}
</select>
<select id="findAccessToAddressByUser" resultMap="accesstoAddress" parameterType="map">
select
<include refid="allColumns"/>
from
AccessToAddressByUser a
where authority = #{roleId}
<if test="userId != '' and userId != null ">
and uid = #{userId}
</if>
<if test="menuparent != null and menuparent != ''">
and menuparent = #{menuparent}
</if>
</select>
<select id="findAccessToAddressByList" resultMap="accesstoAddress" parameterType="list">
select
<include refid="allColumns"/>
from accesstoaddress a
where a.id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>

93
src/main/java/com/dreamchaser/depository_manage/mapper/CompanyMapper.java

@ -0,0 +1,93 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Company;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
public interface CompanyMapper {
/**
* 查询所有公司
* @return
*/
List<Company> findCompanyAll();
/**
* 根据父级查询公司信息
* @return
*/
List<Company> findCompanyByParentId(Integer parentId);
/**
* 根据id编号删除公司信息
* @param id
* @return
*/
Integer deleteCompanyById(Integer id);
/**
* 修改公司信息
* @param map
* @return
*/
Integer updateCompany(Map<String,Object> map);
/**
* 插入公司信息
* @param map
* @return
*/
Integer insertCompany(Map<String,Object> map);
/**
* 根据条件查询公司
* @return
*/
List<Company> findCompanyByCondition(Map<String,Object> map);
/**
* 根据查询条件返回该表的总条数
* @param map 条件参数
* @return
*/
Integer findCountByCondition(Map<String,Object> map);
/**
* 根据主键查询公司信息
* @param id
* @return
*/
Company findcompanyById(Integer id);
/**
* 根据主键将公司状态改为删除
* @param id
* @return
*/
Integer changeStateToDeletedById(Integer id);
/**
* 根据主键批量将公司状态改为删除
* @param ids
* @return
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 根据条件修改公司状态
* @param map
* @return
*/
Integer updateStateByParam(Map<String,Object> map);
/**
* 根据编号批量删除公司信息
* @param ids
* @return
*/
Integer deleteCompanyByIds(List<Integer> ids);
}

168
src/main/java/com/dreamchaser/depository_manage/mapper/CompanyMapper.xml

@ -0,0 +1,168 @@
<?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">
<!-- depository -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.CompanyMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="companyMap" type="com.dreamchaser.depository_manage.entity.Company">
<id column="cid" property="cid" jdbcType="INTEGER" />
<result column="cname" property="cname" jdbcType="VARCHAR" />
<result column="state" property="state" jdbcType="INTEGER"/>
<result column="parentId" property="parentId" jdbcType="INTEGER"/>
<result column="introduce" property="introduce" jdbcType="VARCHAR"/>
</resultMap>
<!-- This code was generated by TableGo tools, mark 1 end. -->
<!-- This code was generated by TableGo tools, mark 2 begin. -->
<!-- 表查询字段 -->
<sql id="allColumns">
c.cid, c.cname ,c.state , c.parentId,c.introduce
</sql>
<!-- 查询所有数据 -->
<select id="findCompanyAll" resultMap="companyMap">
SELECT
<include refid="allColumns" />
FROM company c
Where c.state != 3
</select>
<select id="findcompanyById" resultMap="companyMap" parameterType="int">
select <include refid="allColumns"/>
from company c
where c.cid = #{id}
</select>
<!-- 根据条件查询公司-->
<select id="findCompanyByCondition" resultMap="companyMap" parameterType="map">
select
<include refid="allColumns"/>
from company c
where 1 = 1
<if test="id != null and id !=''">
and c.cid = #{id}
</if>
<if test="cname != null and cname != ''">
and c.cname LIKE CONCAT('%', #{cname}, '%')
</if>
<if test="introduce != null and introduce !=''">
and c.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="parentId != null">
AND c.parentId = #{parentId}
</if>
<if test="state != null">
and c.state = #{state}
</if>
and c.state != 3
</select>
<!-- 根据条件参数查询数据列表数目 -->
<select id="findCountByCondition" resultType="int" parameterType="map">
SELECT count(*)
from company c
where 1 = 1
<if test="id != null and id !=''">
and c.cid = #{id}
</if>
<if test="cname != null and cname != ''">
and c.cname LIKE CONCAT('%', #{cname}, '%')
</if>
<if test="introduce != null and introduce !=''">
and c.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="parentId != null">
AND c.parentId = #{parentId}
</if>
and c.state != 3
</select>
<!--根据父级查询公司信息-->
<select id="findCompanyByParentId" resultMap="companyMap" parameterType="int">
select
<include refid="allColumns"/>
from company c
where c.state != 3 and c.parentId = #{parentId}
</select>
<!-- 根据主键删除数据 -->
<delete id="deleteCompanyById" parameterType="int">
DELETE FROM company WHERE cid = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteCompanyByIds" parameterType="list">
DELETE FROM company WHERE cid IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 修改数据 -->
<update id="updateCompany" parameterType="map">
UPDATE company
<set>
<if test="cname != null">
cname = #{cname},
</if>
<if test="introduce != null">
introduce = #{introduce},
</if>
<if test="state != null">
state = #{state},
</if>
<if test="parentId != null">
parentId = #{parentId}
</if>
</set>
WHERE cid = #{id}
</update>
<!--插入数据-->
<insert id="insertCompany" parameterType="map">
INSERT INTO company (
cid, cname, introduce,parentId
) VALUES (
#{id},
#{cname},
#{introduce},
#{parentId}
)
</insert>
<!-- 根据主键将状态改为删除-->
<update id="changeStateToDeletedById" parameterType="int">
update company
<set>
state = 3
</set>
where cid = #{id}
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update company
<set>
state = 3
</set>
where cid in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="updateStateByParam" parameterType="map">
update company
<set>
state = #{state}
</set>
where cid = #{cid}
<if test="oldState != null">
and state = #{oldState}
</if>
and state != 3
</update>
</mapper>

133
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java

@ -0,0 +1,133 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Depository;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author Dreamchaser
*/
@Mapper
@Repository
public interface DepositoryMapper {
/**
* 插入一条仓库记录
* @param map 参数map
* @return 受影响的行数
*/
Integer insertDepository(Map<String,Object> map);
/**
* 根据条件查询仓库
* @return 仓库集合
*/
List<Depository> findDepositoryRecordPByCondition(Map<String,Object> map);
/**
* 根据主键查询多个数据
* @param ids
* @return
*/
List<Depository> selectDepositoryRecordByIds(List<Integer> ids);
/**
* 根据仓库id查询仓库名称
* @param id 仓库id
* @return 仓库名称
*/
String findDepositoryNameById(int id);
/**
* 根据查询条件返回该表的总条数
* @param map 条件参数
* @return 条数
*/
Integer findCountByCondition(Map<String,Object> map);
/**
* 根据仓库id删除仓库信息
* @param id 参数id
* @return 受影响条数
*/
Integer deleteDepositoryRecordById(Integer id);
/**
* 根据仓库id批量删除仓库信息
* @param list 参数list
* @return 受影响条数
*/
Integer deleteDepositoryRecordByIds(List<Integer> list);
/**
* 根据仓库id查看具体信息
* @param id 参数id
* @return 对应仓库信息
*/
Depository findDepositoryRecordById(Integer id);
/**
* 根据条件修改数据信息
* @param map
* @return 影响条数
*/
Integer updateDepository(Map<String,Object> map);
/**
* 查询所有数据记录
* @return 所有数据
*/
List<Depository> findDepositoryAll();
/**
* 根据主键id获取对应数据
* @param id
* @return 搜索结果
*/
Integer changeStateToDeletedById(Integer id);
/**
* 根据多个主键id将对应仓库状态改为删除
* @param ids
* @return 受影响数目
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 获取仓库总数
* @return
*/
Integer findAllCountByState();
/**
* 根据仓库名称获取当前仓库库存容量
* @param dname
* @return
*/
Double getToDayInventoryByDName(String dname);
/**
* 根据条件修改状态
* @param map
* @return
*/
Integer updateStateByParam(Map<String,Object> map);
/**
* 根据仓库查询管理人名
* @param depositoryId
* @return
*/
String findUserNameByDepositoryId(Integer depositoryId);
}

301
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml

@ -0,0 +1,301 @@
<?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">
<!-- depository -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.DepositoryMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="depositoryMap" type="com.dreamchaser.depository_manage.entity.Depository">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="dname" property="dname" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
<result column="introduce" property="introduce" jdbcType="VARCHAR" />
<result column="parentId" property="parentId" jdbcType="INTEGER"/>
<result column="cid" property="cid" jdbcType="INTEGER"/>
</resultMap>
<!-- This code was generated by TableGo tools, mark 1 end. -->
<!-- This code was generated by TableGo tools, mark 2 begin. -->
<!-- 表查询字段 -->
<sql id="allColumns">
d.id, d.dname, d.address, d.introduce,d.state,d.parentId,d.cid
</sql>
<!-- 视图查询字段-->
<sql id="depositoryAndCompany">
id,dname,address,introduce,state,parentId,cid,cname
</sql>
<!-- This code was generated by TableGo tools, mark 2 end. -->
<!-- 根据id获取仓库名称 -->
<select id="findDepositoryNameById" resultType="string" parameterType="int">
SELECT
d.dname
FROM depository d where d.id=#{id}
</select>
<!-- &lt;!&ndash; 查询所有数据 &ndash;&gt;
<select id="findDepositoryAll" resultMap="depositoryMap">
SELECT
<include refid="allColumns" />
FROM depository d
Where d.state != 3
</select>-->
<!-- 查询所有数据 -->
<select id="findDepositoryAll" resultMap="depositoryMap">
SELECT
<include refid="depositoryAndCompany" />
FROM depositoryandcompany dc
Where dc.state != 3
</select>
<!-- 根据主键查询多个数据-->
<select id="selectDepositoryRecordByIds" parameterType="list" resultMap="depositoryMap">
select
<include refid="allColumns"></include>
FROM depository WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 根据条件查询数据列表 -->
<select id="findDepositoryRecordPByCondition" resultMap="depositoryMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM depository d WHERE 1 = 1
<if test="depositoryId != null">
AND d.id = #{depositoryId}
</if>
<if test="dname != null and dname != ''">
AND d.dname LIKE CONCAT('%', #{dname}, '%')
</if>
<if test="address != null and address != ''">
AND d.address LIKE CONCAT('%', #{address}, '%')
</if>
<if test="introduce != null and introduce != ''">
AND d.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="state != null and state != '' ">
AND d.state = #{state}
</if>
<if test="parentId != null">
AND d.parentId = #{parentId}
</if>
<if test="cid != null">
and d.cid = #{cid}
</if>
AND d.state != 3
</select>
<!-- 根据条件查询数据列表-->
<!--<select id="findDepositoryRecordPByCondition" resultMap="depositoryMap" parameterType="map">
SELECT
<include refid="depositoryAndCompany" />
FROM depositoryandcompany d WHERE 1 = 1
<if test="depositoryId != null">
AND d.id = #{depositoryId}
</if>
<if test="dname != null and dname != ''">
AND d.dname LIKE CONCAT('%', #{dname}, '%')
</if>
<if test="address != null and address != ''">
AND d.address LIKE CONCAT('%', #{address}, '%')
</if>
<if test="introduce != null and introduce != ''">
AND d.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="state != null and state != '' ">
AND d.state = #{state}
</if>
<if test="parentId != null">
AND d.parentId = #{parentId}
</if>
<if test="cid != null">
and d.cid = #{cid}
</if>
AND d.state != 3
</select>-->
<!-- 根据条件参数查询数据列表数目 -->
<select id="findCountByCondition" resultType="int" parameterType="map">
SELECT count(*)
FROM depository d WHERE 1 = 1
<if test="dname != null and dname != ''">
AND d.dname LIKE CONCAT('%', #{dname}, '%')
</if>
<if test="address != null and address != ''">
AND d.address LIKE CONCAT('%', #{address}, '%')
</if>
<if test="introduce != null and introduce != ''">
AND d.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="state != null and state != '' ">
AND d.state = #{state}
</if>
<if test="parentId != null and parentId != ''">
AND d.parentId = #{parentId}
</if>
<if test="cid != null">
and d.cid = #{cid}
</if>
AND d.state != 3
</select>
<!-- 根据主键查询数据-->
<select id="findDepositoryRecordById" resultMap="depositoryMap" parameterType="Integer">
SELECT
<include refid="allColumns" />
FROM depository d WHERE d.id = #{id}
</select>
<!-- 插入数据 -->
<insert id="insertDepository" parameterType="map">
INSERT INTO depository (
id, dname, address, introduce,parentId,cid
) VALUES (
#{id},
#{dname},
#{address},
#{introduce},
#{parentId},
#{cid}
)
</insert>
<!-- 批量插入数据
<insert id="insertDepositorys" parameterType="list">
INSERT INTO depository (
id, dname, address, introduce
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.dname},
#{item.address},
#{item.introduce}
)
</foreach>
</insert>
-->
<!-- 修改数据 -->
<update id="updateDepository" parameterType="map">
UPDATE depository
<set>
<if test="dname != null">
dname = #{dname},
</if>
<if test="address != null">
address = #{address},
</if>
<if test="introduce != null">
introduce = #{introduce},
</if>
<if test="state != null">
state = #{state},
</if>
<if test="parentId != null">
parentId = #{parentId},
</if>
<if test="cid != null">
cid = #{cid}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改数据
<update id="updateDepositorys" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE depository
<set>
<if test="item.dname != null">
dname = #{item.dname},
</if>
<if test="item.address != null">
address = #{item.address},
</if>
<if test="item.introduce != null">
introduce = #{item.introduce}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>-->
<!-- 根据主键删除数据 -->
<delete id="deleteDepositoryRecordById" parameterType="int">
DELETE FROM depository WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据-->
<delete id="deleteDepositoryRecordByIds" parameterType="list">
DELETE FROM depository WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 根据主键将状态改为删除-->
<update id="changeStateToDeletedById" parameterType="int">
UPDATE depository
<set>
state = 3
</set>
WHERE id = #{id}
</update>
<update id="updateStateByParam" parameterType="map">
UPDATE depository
<set>
state = #{state}
</set>
where id = #{id}
<if test="oldState != null">
and state = #{oldState}
</if>
and state != 3
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update depository
<set>
state = 3
</set>
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<!-- 获取仓库总数-->
<select id="findAllCountByState" resultType="int">
select count(*)
from depository d
where d.state != 3
</select>
<select id="getToDayInventoryByDName" resultType="double" parameterType="string">
select ifnull(sum(quantity),0.0)
from depositoryAndmaterial
where dname = #{dname}
</select>
<select id="findUserNameByDepositoryId" resultType="string" parameterType="int">
select uname
from depositoryanduser
where did = #{depositoryId}
</select>
</mapper>

232
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.java

@ -0,0 +1,232 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.ApplicationOutRecord;
import com.dreamchaser.depository_manage.entity.DepositoryRecord;
import com.dreamchaser.depository_manage.entity.SimpleApplicationOutRecord;
import com.dreamchaser.depository_manage.entity.SimpleDepositoryRecord;
import com.dreamchaser.depository_manage.pojo.ApplicationInRecordP;
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* 仓库调度类
* @author Dreamchaser
*/
@Mapper
@Repository
public interface DepositoryRecordMapper {
/**
* 插入一条仓库调度记录
* @param map 仓库调度信息
* @return 受影响的行数
*/
Integer insertDepositoryRecord(Map<String,Object> map);
/**
* 插入一条入库记录
* @param map
* @return
*/
Integer insertApplicationInRecord(Map<String,Object> map);
/**
* 根据id删除一条仓库调度记录
* @param id 记录id
* @return 受影响的行数
*/
Integer deleteDepositoryRecordById(Integer id);
/**
* 根据id修改仓库调度记录
* @param map 参数map
* @return 受影响的行数
*/
Integer updateDepositoryRecord(Map<String,Object> map);
/**
* 根据id修改仓库调度记录
* @param map 参数map
* @return 受影响的行数
*/
Integer updateApplicationOutRecord(Map<String,Object> map);
/**
* 根据id主键查询数据
* @param id id
* @return 该id的数据记录
*/
DepositoryRecord findDepositoryRecordById(Integer id);
/**
* 查找所有仓库调度记录
* @return 所有的仓库调度记录集合
*/
List<DepositoryRecord> findDepositoryRecordAll();
/**
* 根据条件查询仓库调度记录同时支持分页查询需要begin和size参数
* @param map 查询参数
* @return 符合条件的仓库调度记录集合
*/
List<DepositoryRecord> findDepositoryRecordByCondition(Map<String,Object> map);
/**
* 根据条件查询自己的任务根据isDone来决定查询已完成或者未完成的任务同时支持分页查询需要begin和size参数
* @param map 查询参数
* @return 我的任务
*/
List<SimpleDepositoryRecord> findMyTask(Map<String,Object> map);
/**
* 根据条件查询自己的任务根据isDone来决定查询已完成或者未完成的任务同时支持分页查询需要begin和size参数
* @param map 查询参数
* @return 我的任务
*/
List<SimpleApplicationOutRecord> findMyTaskOut(Map<String,Object> map);
/**
* 根据id删除仓库记录
* @return 受影响的行数
*/
Integer deleteDepositoryRecordById();
/**
* 根据id集合删除多条仓库记录
* @param list id集合
* @return 受影响的行数
*/
Integer deleteDepositoryRecordByIds(List<Integer> list);
/**
* 返回该表的总条数
* @return 条数
*/
Integer findCount();
/**
* 返回该我的任务数完成或者未完成
* @param map 参数map
* @return 条数
*/
Integer findMyTaskCount(Map<String,Object> map);
/**
* 返回该我的任务数完成或者未完成
* @param map 参数map
* @return 条数
*/
Integer findMyTaskOutCount(Map<String,Object> map);
/**
* 根据查询条件返回该表的总条数
* @param map 条件参数
* @return 条数
*/
Integer findCountByCondition(Map<String,Object> map);
/**
* 获取一段时间内的库存额度
* @param map
* @return
*/
Double findDepositoryRecordByDate(Map<String,Object> map);
/**
* 根据条件获取月份中材料的总额
* @param map
* @return
*/
Double findMaterialCountByMonth(Map<String,Object> map);
/**
* 查询仓库当天流水
* @return
*/
Integer findWarehouseRecord(Map<String,Object> map);
/**
* 根据条件查询入库记录同时支持分页查询
* @param map
* @return
*/
List<ApplicationInRecordP> findApplicationInRecordPByCondition(Map<String,Object> map);
/**
* 根据条件查询出库记录同时支持分页查询
* @param map
* @return
*/
List<ApplicationOutRecordP> findApplicationOutRecordPByCondition(Map<String,Object> map);
/**
* 根据条件查询入库记录数目
* @param map
* @return
*/
Integer findApplicationInRecordPCountByCondition(Map<String,Object> map);
/**
* 根据条件查询出库记录数目
* @param map
* @return
*/
Integer findApplicationOutRecordPCountByCondition(Map<String,Object> map);
/**
* 根据id查询入库记录
* @param id
* @return
*/
ApplicationInRecordP findApplicationInRecordPById(Integer id);
/**
* 根据id查询出库申请
* @param id
* @return
*/
ApplicationOutRecordP findApplicationOutRecordPById(Integer id);
/**
* 根据id删除入库记录
* @return 受影响的行数
* @param id
*/
Integer deleteApplicationInRecordById(Integer id);
/**
* 根据id集合删除多条入库记录
* @param list id集合
* @return 受影响的行数
*/
Integer deleteApplicationInRecordByIds(List<Integer> list);
/**
* 插入一条出库记录
* @param map
* @return
*/
Integer insertApplicationOutRecord(Map<String,Object> map);
/**
* 根据id删除出库记录
* @return 受影响的行数
* @param id
*/
Integer deleteApplicationOutRecordById(Integer id);
/**
* 根据id集合删除多条出库记录
* @param list id集合
* @return 受影响的行数
*/
Integer deleteApplicationOutRecordByIds(List<Integer> list);
}

941
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryRecordMapper.xml

@ -0,0 +1,941 @@
<?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">
<!-- 仓库调度记录(depository_record) -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="simpleDepositoryRecordMap" type="com.dreamchaser.depository_manage.entity.SimpleDepositoryRecord">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="applicant_id" property="applicantId" jdbcType="INTEGER" />
<result column="apply_remark" property="applyRemark" jdbcType="VARCHAR" />
<result column="apply_time" property="applyTime" jdbcType="INTEGER" />
</resultMap>
<!-- 字段映射 -->
<resultMap id="simpleApplicationOutRecordMap" type="com.dreamchaser.depository_manage.entity.SimpleApplicationOutRecord">
<id property="id" column="aorid" jdbcType="INTEGER"/>
<result column="applicantId" property="applicantId" jdbcType="INTEGER" />
<result column="applicantTime" property="applicantTime" jdbcType="INTEGER" />
<result column="applyRemark" property="applyRemark" jdbcType="VARCHAR" />
</resultMap>
<!-- 字段映射 -->
<resultMap id="depositoryRecordMap" type="com.dreamchaser.depository_manage.entity.DepositoryRecord">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="application_id" property="applicationId" jdbcType="INTEGER" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="depository_id" property="depositoryId" jdbcType="INTEGER" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="price" property="price" jdbcType="VARCHAR" />
<result column="state" property="state" jdbcType="VARCHAR" />
<result column="applicant_id" property="applicantId" jdbcType="INTEGER" />
<result column="apply_remark" property="applyRemark" jdbcType="VARCHAR" />
<result column="apply_time" property="applyTime" jdbcType="INTEGER" />
<result column="reviewer_id" property="reviewerId" jdbcType="INTEGER" />
<result column="review_remark" property="reviewRemark" jdbcType="VARCHAR" />
<result column="review_time" property="reviewTime" jdbcType="INTEGER" />
<result column="review_pass" property="reviewPass" jdbcType="INTEGER" />
<result column="checker_id" property="checkerId" jdbcType="INTEGER" />
<result column="check_remark" property="checkRemark" jdbcType="VARCHAR" />
<result column="check_time" property="checkTime" jdbcType="INTEGER" />
<result column="check_pass" property="checkPass" jdbcType="INTEGER" />
<result column="oldId" property="oldId" jdbcType="VARCHAR" />
</resultMap>
<!-- 插入入库记录-->
<resultMap id="applicationInRecord" type="com.dreamchaser.depository_manage.pojo.ApplicationInRecordP">
<id column="airid" property="id" jdbcType="INTEGER" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="price" property="price" jdbcType="VARCHAR" />
<result column="tname" property="materialTypeName" jdbcType="VARCHAR" />
<result column="applicantTime" property="applicant_time" jdbcType="INTEGER" />
<result column="code" property="aircode" jdbcType="VARCHAR" />
<result column="dname" property="depositoryName" jdbcType="VARCHAR" />
<result column="applicant_id" property="applicantId" jdbcType="INTEGER" />
<result column="applyRemark" property="applyRemark" jdbcType="INTEGER" />
</resultMap>
<!-- 插入出库记录-->
<resultMap id="applicationOutRecord" type="com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP">
<id property="id" column="aorid" jdbcType="INTEGER"/>
<result column="mid" property="mid" jdbcType="INTEGER" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="depositoryId" property="depositoryId" jdbcType="INTEGER" />
<result column="dname" property="depositoryName" jdbcType="VARCHAR" />
<result column="applicantId" property="applicantId" jdbcType="INTEGER" />
<result column="applicantTime" property="applicantTime" jdbcType="INTEGER" />
<result column="applyRemark" property="applyRemark" jdbcType="VARCHAR" />
<result column="aorcode" property="code" jdbcType="VARCHAR" />
<result column="aorpirce" property="price" jdbcType="INTEGER" />
<result column="aorquantity" property="quantity" jdbcType="INTEGER" />
<result column="departmenthead" property="departmenthead" jdbcType="INTEGER" />
<result column="departmentheadPass" property="departmentheadPass" jdbcType="INTEGER" />
<result column="departmentHeadTime" property="departmentheadTime" jdbcType="INTEGER" />
<result column="departmentheadMessage" property="departmentheadMessage" jdbcType="VARCHAR" />
<result column="depositoryManager" property="depositoryManager" jdbcType="VARCHAR" />
<result column="depositoryManagerPass" property="depositoryManagerPass" jdbcType="INTEGER" />
<result column="depositoryManagerTime" property="depositoryManagerTime" jdbcType="INTEGER" />
<result column="depositoryManagerMessage" property="depositoryManagerMessage" jdbcType="VARCHAR" />
<result column="aorstate" property="state" jdbcType="VARCHAR" />
<result column="istransfer" property="istransfer" jdbcType="INTEGER" />
</resultMap>
<!-- 表查询字段 -->
<sql id="simpleColumns">
dr.id, dr.type, dr.applicant_id, dr.apply_remark, dr.apply_time ,dr.oldId
</sql>
<!-- 表查询字段 -->
<sql id="simpleApplicationOut">
aorid,applicantId, applyRemark, applicantTime,aorcode
</sql>
<!-- 表查询字段 -->
<sql id="allColumns">
dr.id, dr.application_id, dr.mname, dr.depository_id, dr.type, dr.quantity, dr.price, dr.state,
dr.applicant_id, dr.apply_remark, dr.apply_time, dr.reviewer_id, dr.review_remark, dr.review_time, dr.review_pass,
dr.checker_id, dr.check_remark, dr.check_time, dr.check_pass ,dr.oldId
</sql>
<sql id="allColumnsAndUserP">
dr.id, dr.application_id, dr.mname, dr.depository_id, dr.type, dr.quantity, dr.price, dr.state,
dr.applicant_id, dr.apply_remark, dr.apply_time, dr.reviewer_id, dr.review_remark, dr.review_time, dr.review_pass,
dr.checker_id, dr.check_remark, dr.check_time, dr.check_pass,uname as uname,u2name as uname,u3name as uname ,oldId
</sql>
<sql id="allColumnsByApplicationInRecord">
id,mid,quantity,price,applicant_id,applicant_time,code,depository_id,applyRemark
</sql>
<sql id="ApplicationInRecordInfo">
airid,mname,quantity,price,tname,applicant_time,aircode,dname,applicant_id,applyRemark
</sql>
<sql id="ApplicationOutRecordInfo">
aorid,mid,mname,depositoryId,dname,applicantId,applicantTime,applyRemark,aorcode,aorpirce,aorquantity,departmenthead,departmentheadPass,departmentHeadTime,departmentheadMessage,
depositoryManager,depositoryManagerPass,depositoryManagerTime,depositoryManagerMessage,aorstate,istransfer
</sql>
<!-- 查询所有数据行数 -->
<select id="findCount" resultType="integer">
SELECT
count(*)
FROM depository_record dr
</select>
<!-- 查询相应用户的任务数 -->
<select id="findMyTaskCount" resultType="integer" parameterType="map">
SELECT
count(*)
FROM depository_record dr where 1=1
<if test='isDone == "0"'>
and (dr.review_time = 0 and dr.reviewer_id =#{userId})
or (dr.check_time = 0 and dr.checker_id = #{userId})
</if>
<if test='isDone == "1"'>
and (dr.review_time != 0 and dr.reviewer_id =#{userId})
or (dr.check_time != 0 and dr.checker_id = #{userId})
</if>
</select>
<!-- 查询相应用户的任务数 -->
<select id="findMyTaskOutCount" resultType="integer" parameterType="map">
SELECT
count(*)
FROM applicationOutRecordInfo WHERE 1=1
<if test='isDone == "0"'>
and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass != 2)
or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass != 2)
</if>
<if test='isDone == "1"'>
and (departmentHeadTime != 0 and departmenthead=#{userId})
or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0)
</if>
</select>
<!-- 查询所有数据 -->
<select id="findCountByCondition" resultType="integer" parameterType="map">
SELECT
count(*)
FROM depository_record dr WHERE 1 = 1
<if test="applicationId != null">
AND dr.application_id = #{applicationId}
</if>
<if test="mname != null and mname != ''">
AND dr.mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="depositoryId != null">
AND dr.depository_id = #{depositoryId}
</if>
<if test="type != null">
AND dr.type = #{type}
</if>
<if test="quantity != null">
AND dr.quantity = #{quantity}
</if>
<if test="price != null">
AND dr.price = #{price}
</if>
<if test="state != null and state != ''">
AND dr.state LIKE CONCAT('%', #{state}, '%')
</if>
<if test="applicantId != null">
AND dr.applicant_id = #{applicantId}
</if>
<if test="applyRemark != null and applyRemark != ''">
AND dr.apply_remark LIKE CONCAT('%', #{applyRemark}, '%')
</if>
<if test="applyTime != null">
AND dr.apply_time >= #{applyTime}
</if>
<if test="reviewerId != null">
AND dr.reviewer_id = #{reviewerId}
</if>
<if test="reviewRemark != null and reviewRemark != ''">
AND dr.review_remark LIKE CONCAT('%', #{reviewRemark}, '%')
</if>
<if test="reviewTime != null">
AND dr.review_time = #{reviewTime}
</if>
<if test="reviewPass != null">
AND dr.review_pass = #{reviewPass}
</if>
<if test="checkerId != null">
AND dr.checker_id = #{checkerId}
</if>
<if test="checkRemark != null and checkRemark != ''">
AND dr.check_remark LIKE CONCAT('%', #{checkRemark}, '%')
</if>
<if test="checkTime != null">
AND dr.check_time = #{checkTime}
</if>
<if test="checkPass != null">
AND dr.check_pass = #{checkPass}
</if>
</select>
<!-- 查询所有数据 -->
<select id="findDepositoryRecordAll" resultMap="depositoryRecordMap">
SELECT
<include refid="allColumns" />
FROM depository_record dr
</select>
<!-- 根据id查询数据 -->
<select id="findDepositoryRecordById" resultMap="depositoryRecordMap" parameterType="integer">
SELECT
<include refid="allColumns" />
FROM depository_record dr
where dr.id=#{id}
</select>
<!-- 根据isDone来寻找完成任务或者未完成任务 -->
<select id="findMyTask" resultMap="simpleDepositoryRecordMap" parameterType="map">
SELECT
<include refid="simpleColumns" />
FROM depository_record dr WHERE 1=1
<if test='isDone == "0"'>
and (dr.review_time = 0 and dr.reviewer_id =#{userId})
or (dr.check_time = 0 and dr.checker_id = #{userId})
</if>
<if test='isDone == "1"'>
and (dr.review_time != 0 and dr.reviewer_id =#{userId})
or (dr.check_time != 0 and dr.checker_id = #{userId})
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据isDone来寻找完成任务或者未完成任务 -->
<select id="findMyTaskOut" resultMap="simpleApplicationOutRecordMap" parameterType="map">
SELECT
<include refid="simpleApplicationOut" />
FROM applicationOutRecordInfo WHERE 1=1
<if test='isDone == "0"'>
and (departmentHeadTime = 0 and departmenthead=#{userId} and DepartmentheadPass = 3)
or (depositoryManagerTime = 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass = 3)
</if>
<if test='isDone == "1"'>
and (departmentHeadTime != 0 and departmenthead=#{userId} and DepartmentheadPass != 3)
or (depositoryManagerTime != 0 and FIND_IN_SET(#{userId},depositoryManager) != 0 and DepartmentheadPass != 3)
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findApplicationInRecordPByCondition" parameterType="map" resultMap="applicationInRecord">
select
<include refid="ApplicationInRecordInfo"/>
from applicationInRecordInfo
where 1 = 1
<if test="id != '' and id != null">
and airid = #{id}
</if>
<if test="applicantId != null and applicantId != ''">
and applicant_id = #{applicantId}
</if>
<if test="depositoryId != null and depositoryId != ''">
and did = #{depositoryId}
</if>
<if test="mid != null and mid != ''">
and mid = #{mid}
</if>
<if test="applicantTime != null and applicantTime != ''">
and applicant_time >= #{applicantTime}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findApplicationOutRecordPByCondition" parameterType="map" resultMap="applicationOutRecord">
select
<include refid="ApplicationOutRecordInfo"/>
from applicationOutRecordInfo
where 1 = 1
<if test="id != '' and id != null">
and aorid = #{id}
</if>
<if test="applicantId != null and applicantId != ''">
and applicantId = #{applicantId}
</if>
<if test="depositoryId != null and depositoryId != ''">
and depositoryId = #{depositoryId}
</if>
<if test="mid != null and mid != ''">
and mid = #{mid}
</if>
<if test="applicantTime != null and applicantTime != ''">
and applicantTime >= #{applicantTime}
</if>
<if test="state != null and state != ''">
AND aorstate LIKE CONCAT('%', #{state}, '%')
</if>
<if test="applyRemark != null and applyRemark != null">
and applyRemark like CONCAT('%', #{applyRemark}, '%')
</if>
<if test="aorcode != null and aorcode != null">
and aorcode = #{code}
</if>
<if test="departmenthead != null and departmenthead != null">
and departmenthead = #{departmenthead}
</if>
<if test="departmentheadPass != null and departmentheadPass != null">
and departmentheadPass = #{departmentheadPass}
</if>
<if test="departmentHeadTime != null and departmentHeadTime != null">
and departmentHeadTime >= #{departmentheadPass}
</if>
<if test="departmentheadMessage != null and departmentheadMessage != null">
and departmentheadMessage like CONCAT('%', #{departmentheadMessage}, '%')
</if>
<if test="depositoryManager != null and depositoryManager != null">
and depositoryManager = #{depositoryManager}
</if>
<if test="depositoryManagerPass != null and depositoryManagerPass != null">
and depositoryManagerPass = #{depositoryManagerPass}
</if>
<if test="depositoryManagerTime != null and depositoryManagerTime != null">
and depositoryManagerTime >= #{depositoryManagerTime}
</if>
<if test="depositoryManagerMessage != null and depositoryManagerMessage != ''">
and depositoryManagerMessage like CONCAT('%', #{depositoryManagerMessage}, '%')
</if>
<if test="aorstate != null and aorstate != ''">
and aorstate like CONCAT('%', #{state}, '%')
</if>
<if test="istransfer != null and istransfer != ''">
and istransfer = #{istransfer}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findApplicationOutRecordPById" parameterType="int" resultMap="applicationOutRecord">
select
<include refid="ApplicationOutRecordInfo"/>
from applicationOutRecordInfo
where aorid = #{id}
</select>
<select id="findApplicationInRecordPById" parameterType="int" resultMap="applicationInRecord">
select
<include refid="ApplicationInRecordInfo"/>
from applicationInRecordInfo
where airid = #{id}
</select>
<select id="findApplicationInRecordPCountByCondition" parameterType="map" resultType="int">
select
count(*)
from applicationInRecordInfo
where 1 = 1
<if test="id != '' and id != null">
and airid = #{id}
</if>
<if test="applicantId != null and applicantId != ''">
and applicant_id = #{applicantId}
</if>
<if test="depositoryId != null and depositoryId != ''">
and did = #{depositoryId}
</if>
<if test="mid != null and mid != ''">
and mid = #{mid}
</if>
<if test="applicantTime != null and applicantTime != ''">
and applicant_time >= #{applicantTime}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findApplicationOutRecordPCountByCondition" parameterType="map" resultType="int">
select
count(*)
from applicationOutRecordInfo
where 1 = 1
<if test="id != '' and id != null">
and aorid = #{id}
</if>
<if test="applicantId != null and applicantId != ''">
and applicantId = #{applicantId}
</if>
<if test="depositoryId != null and depositoryId != ''">
and depositoryId = #{depositoryId}
</if>
<if test="mid != null and mid != ''">
and mid = #{mid}
</if>
<if test="applicantTime != null and applicantTime != ''">
and applicantTime >= #{applicantTime}
</if>
<if test="state != null and state != ''">
AND aorstate LIKE CONCAT('%', #{state}, '%')
</if>
<if test="applyRemark != null and applyRemark != null">
and applyRemark like CONCAT('%', #{applyRemark}, '%')
</if>
<if test="aorcode != null and aorcode != null">
and aorcode = #{code}
</if>
<if test="departmenthead != null and departmenthead != null">
and departmenthead = #{departmenthead}
</if>
<if test="departmentheadPass != null and departmentheadPass != null">
and departmentheadPass = #{departmentheadPass}
</if>
<if test="departmentHeadTime != null and departmentHeadTime != null">
and departmentHeadTime >= #{departmentheadPass}
</if>
<if test="departmentheadMessage != null and departmentheadMessage != null">
and departmentheadMessage like CONCAT('%', #{departmentheadMessage}, '%')
</if>
<if test="depositoryManager != null and depositoryManager != null">
and depositoryManager = #{depositoryManager}
</if>
<if test="depositoryManagerPass != null and depositoryManagerPass != null">
and depositoryManagerPass = #{depositoryManagerPass}
</if>
<if test="depositoryManagerTime != null and depositoryManagerTime != null">
and depositoryManagerTime >= #{depositoryManagerTime}
</if>
<if test="depositoryManagerMessage != null and depositoryManagerMessage != null">
and depositoryManagerMessage like CONCAT('%', #{depositoryManagerMessage}, '%')
</if>
<if test="aorstate != null and aorstate != null">
and aorstate like CONCAT('%', #{state}, '%')
</if>
<if test="istransfer != null and istransfer != ''">
and istransfer = #{istransfer}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<select id="findDepositoryRecordByCondition" resultMap="depositoryRecordMap" parameterType="map">
SELECT
<include refid="allColumnsAndUserP" />
FROM DepositoryRecordByCondition dr
WHERE 1 = 1
<if test="applicationId != null">
AND dr.application_id = #{applicationId}
</if>
<if test="mname != null and mname != ''">
AND dr.mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="depositoryId != null">
AND dr.depository_id = #{depositoryId}
</if>
<if test="type != null">
AND dr.type = #{type}
</if>
<if test="quantity != null">
AND dr.quantity = #{quantity}
</if>
<if test="price != null">
AND dr.price = #{price}
</if>
<if test="state != null and state != ''">
AND dr.state LIKE CONCAT('%', #{state}, '%')
</if>
<if test="applicantId != null">
AND dr.applicant_id = #{applicantId}
</if>
<if test="applyRemark != null and applyRemark != ''">
AND dr.apply_remark LIKE CONCAT('%', #{applyRemark}, '%')
</if>
<if test="applyTime != null">
AND dr.apply_time >= #{applyTime}
</if>
<if test="reviewerId != null">
AND dr.reviewer_id = #{reviewerId}
</if>
<if test="reviewRemark != null and reviewRemark != ''">
AND dr.review_remark LIKE CONCAT('%', #{reviewRemark}, '%')
</if>
<if test="reviewTime != null">
AND dr.review_time = #{reviewTime}
</if>
<if test="reviewPass != null">
AND dr.review_pass = #{reviewPass}
</if>
<if test="checkerId != null">
AND dr.checker_id = #{checkerId}
</if>
<if test="checkRemark != null and checkRemark != ''">
AND dr.check_remark LIKE CONCAT('%', #{checkRemark}, '%')
</if>
<if test="checkTime != null">
AND dr.check_time = #{checkTime}
</if>
<if test="checkPass != null">
AND dr.check_pass = #{checkPass}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据主键查询数据 -->
<select id="findDepositoryRecordByIds" resultMap="depositoryRecordMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM depository_record dr WHERE dr.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 插入一条入库记录-->
<insert id="insertApplicationInRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into application_in_record (id,mid,quantity,price,applicant_id,applicant_time,depository_id,code,applyRemark)
values(
#{id},
#{mid},
#{quantity},
#{price},
#{applicantId},
#{applicant_time},
#{depositoryId},
#{code},
#{applyRemark}
)
</insert>
<!-- 插入一条出库记录-->
<insert id="insertApplicationOutRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
insert into application_out_record
(id,mid,depository_id,applicant_id,applicant_time,code,price,quantity,departmenthead,departmenthead_pass,departmenthead_time,
departmenthead_messgae,depository_manager,depository_manager_pass,depository_manager_time,depository_manager_message,apply_remark,state,istransfer)
values(
#{id},
#{mid},
#{depositoryId},
#{applicantId},
#{applicantTime},
#{code},
#{price},
#{quantity},
#{departmenthead},
#{departmentheadPass},
<if test="departmentheadTime == null">
0,
</if>
<if test="departmentheadTime != null">
#{departmentheadTime},
</if>
#{departmentheadMessgae},
#{depositoryManager},
#{depositoryManagerPass},
<if test="depositoryManagerTime == null">
0,
</if>
<if test="depositoryManagerTime != null">
#{depositoryManagerTime},
</if>
#{depositoryManagerMessage},
#{applyRemark},
#{state},
#{istransfer}
)
</insert>
<!-- 插入数据 -->
<insert id="insertDepositoryRecord" parameterType="map" useGeneratedKeys="true" keyProperty="id">
INSERT INTO depository_record (
id, application_id, mname, depository_id, type, quantity, price, state,
applicant_id, apply_remark, apply_time,
reviewer_id, review_remark, review_time,review_pass, checker_id, check_remark,
check_time,check_pass,oldId
) VALUES (
#{id},
#{applicationId},
#{mname},
#{depositoryId},
#{type},
#{quantity},
#{price},
#{state},
#{applicantId},
#{applyRemark},
<if test="applyTime == null">
0,
</if>
<if test="applyTime != null">
#{applyTime},
</if>
#{reviewerId},
#{reviewRemark},
<if test="reviewTime == null">
0,
</if>
<if test="reviewTime != null">
#{reviewTime},
</if>
#{reviewPass},
#{checkerId},
#{checkRemark},
<if test="checkTime == null">
0,
</if>
<if test="checkTime != null">
#{checkTime},
</if>
#{checkPass},
#{oldId}
)
</insert>
<!-- 批量插入数据 -->
<insert id="insertDepositoryRecords" parameterType="list">
INSERT INTO depository_record (
id, application_id, mname, depository_id, type, quantity, price, state,
applicant_id, apply_remark, apply_time, reviewer_id, review_remark, review_time,review_pass, checker_id, check_remark,
check_time,check_pass
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{id},
#{applicationId},
#{mname},
#{depositoryId},
#{type},
#{quantity},
#{price},
#{state},
#{applicantId},
#{applyRemark},
#{applyTime},
#{reviewerId},
#{reviewRemark},
#{reviewTime},
#{reviewPass},
#{checkerId},
#{checkRemark},
#{checkTime},
#{checkPass}
)
</foreach>
</insert>
<!-- 修改数据 -->
<update id="updateDepositoryRecord" parameterType="map">
UPDATE depository_record
<set>
<if test="applicationId != null">
application_id = #{applicationId},
</if>
<if test="mname != null">
mname = #{mname},
</if>
<if test="depositoryId != null">
depository_id = #{depositoryId},
</if>
<if test="type != null">
type = #{type},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="price != null">
price = #{price},
</if>
<if test="state != null">
state = #{state},
</if>
<if test="applicantId != null">
applicant_id = #{applicantId},
</if>
<if test="applyRemark != null">
apply_remark = #{applyRemark},
</if>
<if test="applyTime != null">
apply_time = #{applyTime},
</if>
<if test="reviewerId != null">
reviewer_id = #{reviewerId},
</if>
<if test="reviewRemark != null">
review_remark = #{reviewRemark},
</if>
<if test="reviewTime != null">
review_time = #{reviewTime},
</if>
<if test="reviewPass != null">
review_pass = #{reviewPass},
</if>
<if test="checkerId != null">
checker_id = #{checkerId},
</if>
<if test="checkRemark != null">
check_remark = #{checkRemark},
</if>
<if test="checkTime != null">
check_time = #{checkTime},
</if>
<if test="checkPass != null">
check_pass = #{checkPass}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 修改数据-->
<update id="updateApplicationOutRecord" parameterType="map">
UPDATE application_out_record
<set>
<if test="mid != '' and mid != null">
mid = #{mid},
</if>
<if test="depositoryId != '' and depositoryId != null">
depository_id = #{depositoryId},
</if>
<if test="applicantId != null">
applicant_id = #{applicantId},
</if>
<if test="applicantTime != null and applicantTime != ''">
applicant_time = #{applicantTime},
</if>
<if test="code != null and code != ''">
code = #{code},
</if>
<if test="price != null and price != ''">
price = #{price},
</if>
<if test="quantity != null and quantity != ''">
quantity = #{quantity},
</if>
<if test="departmenthead != null and departmenthead != ''">
departmenthead = #{departmenthead},
</if>
<if test="departmentheadPass != null and departmentheadPass!=''">
departmenthead_pass = #{departmentheadPass},
</if>
<if test="departmentheadTime != null and departmentheadTime != ''">
departmenthead_time = #{departmentheadTime},
</if>
<if test="departmentheadMessage != null and departmentheadMessage != ''">
departmenthead_messgae = #{departmentheadMessage},
</if>
<if test="depositoryManager != null and depositoryManager != ''">
depository_manager = #{depositoryManager},
</if>
<if test="depositoryManagerPass != null and depositoryManagerPass != ''">
depository_manager_pass = #{depositoryManagerPass},
</if>
<if test="depositoryManagerTime != null and depositoryManager != ''">
depository_manager_time = #{depositoryManagerTime},
</if>
<if test="depositoryManagerMessage != null and depositoryManagerMessage != ''">
depository_manager_message = #{depositoryManagerMessage},
</if>
<if test="state != null and state != ''">
state = #{state}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改数据 -->
<update id="updateDepositoryRecords" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE depository_record
<set>
<if test="applicationId != null">
application_id = #{applicationId},
</if>
<if test="mname != null">
mname = #{mname},
</if>
<if test="depositoryId != null">
depository_id = #{depositoryId},
</if>
<if test="type != null">
type = #{type},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="price != null">
price = #{price},
</if>
<if test="state != null">
state = #{state},
</if>
<if test="applicantId != null">
applicant_id = #{applicantId},
</if>
<if test="applyRemark != null">
apply_remark = #{applyRemark},
</if>
<if test="applyTime != null">
apply_time = #{applyTime},
</if>
<if test="reviewerId != null">
reviewer_id = #{reviewerId},
</if>
<if test="reviewRemark != null">
review_remark = #{reviewRemark},
</if>
<if test="reviewTime != null">
review_time = #{reviewTime},
</if>
<if test="reviewPass != null">
review_pass = #{reviewPass},
</if>
<if test="checkerId != null">
checker_id = #{checkerId},
</if>
<if test="checkRemark != null">
check_remark = #{checkRemark},
</if>
<if test="checkTime != null">
check_time = #{checkTime},
</if>
<if test="checkPass != null">
check_pass = #{checkPass}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>
<!-- 根据主键删除数据 -->
<delete id="deleteDepositoryRecordById" parameterType="integer">
DELETE FROM depository_record WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteDepositoryRecordByIds" parameterType="list">
DELETE FROM depository_record WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<select id="findDepositoryRecordByDate" parameterType="map" resultType="double">
SELECT
ifnull(sum(quantity),0)
FROM DepositoryRecordByDate
where 1 = 1
<if test="type != null">
and type = #{type}
</if>
<if test="depositoryId != null">
and depository_id = #{depositoryId}
</if>
<if test="tname != null">
and tname = #{tname}
</if>
and state = #{state}
and check_time between #{start} and #{end}
</select>
<!-- 获取某月某材料总额-->
<select id="findMaterialCountByMonth" parameterType="map" resultType="DOUBLE">
select ifnull(sum(quantity),0)
from MaterialCountByMonth
where 1 = 1
<if test="type != null">
and type = #{type}
</if>
<if test="state != null and state != ''">
and state = #{state}
</if>
<if test="depository_id != null and depository_id != ''">
and depository_id = #{depository_id}
</if>
and check_time between #{start} and #{end}
<if test="tname != null and tname != ''">
and tname = #{tname}
</if>
</select>
<select id="findWarehouseRecord" parameterType="map" resultType="int">
select
count(*)
from
depository_record dr
where
dr.state like '%已%'
and dr.check_time between #{start} and #{end}
</select>
<!-- 根据主键删除数据 -->
<delete id="deleteApplicationInRecordById" parameterType="integer">
DELETE FROM application_in_record WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteApplicationInRecordByIds" parameterType="list">
DELETE FROM application_in_record WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 根据主键删除数据 -->
<delete id="deleteApplicationOutRecordById" parameterType="integer">
DELETE FROM application_out_record WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteApplicationOutRecordByIds" parameterType="list">
DELETE FROM application_out_record WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

119
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java

@ -0,0 +1,119 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Material;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author Dreamchaser
*/
@Repository
@Mapper
public interface MaterialMapper {
/**
* 增加一条库存记录
*
* @param map 参数map
* @return 受影响的行数
*/
Integer insertMaterial(Map<String, Object> map);
/**
* 更新一条库存记录
*
* @param map 参数列表
* @return 受影响的行数
*/
Integer updateMaterial(Map<String, Object> map);
/**
* 更新一条库存记录
* @param material 修改的参数
* @return 受影响的行数
*/
Integer updateMaterial(Material material);
/**
* 将对应仓库id和材料名称的库存修改数量和价格
* @param map 参数列表
* @return 受影响的行数
*/
Integer changeMaterial(Map<String, Object> map);
/**
* 根据id删除一条库存记录
* @param id 库存id
* @return 受影响的行数
*/
Integer deleteMaterialById(int id);
/**
* 根据条件查询符合条件的库存信息
* @param map 条件map
* @return 符合条件的库存信息
*/
List<Material> findMaterialByCondition(Map<String,Object>map);
/**
* 根据id查询库存信息
* @param id 库存id
* @return 库存信息
*/
Material findMaterialById(int id);
/**
* 根据id查询库存信息
* @param id 库存id
* @return 库存信息
*/
Material findMaterialAndTypeById(int id);
/**
* 根据id批量查询库存信息
* @param ids 库存id集合
* @return 库存信息
*/
Material findMaterialByIds(List<Integer> ids);
/**
* 查询所有库存条数
* @return 库存记录的行数
*/
Integer findCount();
/**
* 根据条件返回符合条件的库存记录行数
* @param map 参数
* @return 符合条件的记录行数
*/
Integer findCountByCondition(Map<String,Object> map);
/**
* 根据主键id批量将材料状态改为删除
* @param ids
* @return 受影响条数
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 根据主键id将材料状态改为删除
* @param id
* @return 受影响条数
*/
Integer changeStateToDeletedById(Integer id);
/**
* 根据条件修改状态
* @param map
* @return
*/
Integer updateStateByParam(Map<String,Object> map);
}

327
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -0,0 +1,327 @@
<?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">
<!-- 产品信息记录(库存)(material) -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.MaterialMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="materialMap" type="com.dreamchaser.depository_manage.entity.Material">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="depository_id" property="depositoryId" jdbcType="INTEGER" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="quantity" property="quantity" jdbcType="VARCHAR" />
<result column="price" property="price" jdbcType="DOUBLE" />
<result column="type_id" property="typeId" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="code" property="code" jdbcType="INTEGER"/>
<result column="version" property="version" jdbcType="VARCHAR"/>
<result column="amounts" property="amounts" jdbcType="DOUBLE"/>
<result column="unit" property="unit" jdbcType="VARCHAR"/>
<result column="texture" property="texture" jdbcType="VARCHAR"/>
</resultMap>
<!-- 字段映射-->
<resultMap id="materialAndTypeMap" type="com.dreamchaser.depository_manage.entity.Material">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="depository_id" property="depositoryId" jdbcType="INTEGER" />
<result column="mname" property="mname" jdbcType="VARCHAR" />
<result column="quantity" property="quantity" jdbcType="VARCHAR" />
<result column="price" property="price" jdbcType="VARCHAR" />
<result column="type_id" property="typeId" jdbcType="INTEGER" />
<result column="state" property="state" jdbcType="INTEGER" />
<result column="code" property="code" jdbcType="INTEGER"/>
<result column="version" property="version" jdbcType="VARCHAR"/>
<result column="amounts" property="amounts" jdbcType="DOUBLE"/>
<result column="unit" property="unit" jdbcType="VARCHAR"/>
<result column="texture" property="texture" jdbcType="VARCHAR"/>
<result column="depositoryCode" property="depositoryCode" jdbcType="VARCHAR"/>
<association property="materialType" column="typeId" javaType="com.dreamchaser.depository_manage.entity.MaterialType">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="tname" property="tname" jdbcType="VARCHAR" />
<result column="introduce" property="introduce" jdbcType="VARCHAR" />
</association>
<association property="depository" column="depositoryId" javaType="com.dreamchaser.depository_manage.entity.Depository">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="dname" property="dname" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
<result column="introduce" property="introduce" jdbcType="VARCHAR" />
</association>
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
m.id, m.depository_id, m.mname, m.quantity, m.price, m.type_id,m.state,m.code ,m.version ,m.amounts ,m.unit ,m.texture,m.depositoryCode
</sql>
<!-- 表查询字段,包括材料类型 -->
<sql id="allColumnsAndTypeName">
m.id,m.depository_id,m.mname,m.quantity,m.price,m.type_id,m.state,m.code ,m.version ,m.amounts ,m.unit ,m.texture,mt.tname,m.depositoryCode,d.dname
</sql>
<!-- 表查询字段,包括材料类型 用于视图-->
<sql id="allColumnsAndTypeNameOnView">
id,depository_id,mname,quantity,price,type_id,state,tname,dname,version,amounts ,unit ,texture,code,depositoryCode
</sql>
<!-- 查询所有数据的条数 -->
<select id="findCount" resultType="integer">
SELECT
count(*)
FROM material m
</select>
<!-- 查询所有符合条件的数据条数 -->
<select id="findCountByCondition" parameterType="map" resultType="integer">
SELECT
count(*)
FROM material m WHERE 1 = 1
<if test="depositoryId != null">
AND m.depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND m.mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND m.quantity = #{quantity}
</if>
<if test="price != null">
AND m.price = #{price}
</if>
<if test="typeId != null">
AND m.type_id = #{typeId}
</if>
and state != 3
</select>
<!-- 根据条件参数查询数据列表 -->
<select id="findMaterialByCondition" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumnsAndTypeNameOnView" />
from findMaterial
where 1 = 1
<if test="depositoryId != null">
AND depository_id = #{depositoryId}
</if>
<if test="mname != null and mname != ''">
AND mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND quantity = #{quantity}
</if>
<if test="price != null">
AND price = #{price}
</if>
<if test="materialTypeId != null">
AND type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And state = #{state}
</if>
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialById" resultMap="materialMap" parameterType="integer">
SELECT
<include refid="allColumns" />
FROM material m WHERE m.id =#{id}
</select>
<select id="findMaterialAndTypeById" resultMap="materialAndTypeMap" parameterType="integer">
select
<include refid="allColumnsAndTypeName"/>
from material m ,material_type mt,depository d
where m.id = #{id}
and m.depository_id = d.id
and m.type_id = mt.id
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialByIds" resultMap="materialMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM material m WHERE m.id IN
<foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertMaterial" parameterType="map">
INSERT INTO material (
id, depository_id, mname, quantity, price, type_id,code,unit,version,texture,amounts,depositoryCode
) VALUES (
#{id},
#{depositoryId},
#{mname},
#{quantity},
#{price},
#{materialTypeId},
#{code},
#{unit},
#{version},
#{texture},
#{amounts},
#{depositoryCode}
)
</insert>
<!-- 批量插入数据
<insert id="insertMaterials" parameterType="list">
INSERT INTO material (
id, depository_id, mname, quantity, price, type_id
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.depositoryId},
#{item.mname},
#{item.quantity},
#{item.price},
#{item.typeId}
)
</foreach>
</insert>-->
<!-- 修改数据 -->
<update id="updateMaterial">
UPDATE material
<set>
<if test="depositoryId != null">
depository_id = #{depositoryId},
</if>
<if test="mname != null">
mname = #{mname},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="price != null">
price = #{price},
</if>
<if test="typeId != null">
type_id = #{typeId},
</if>
<if test="state != null and state != ''">
state = #{state},
</if>
<if test="amounts != null and amounts != ''">
amounts = #{amounts},
</if>
<if test="version != null and version != ''">
version = #{version},
</if>
<if test="code != null and code != ''">
code = #{code},
</if>
<if test="unit != null and unit != ''">
unit = #{unit},
</if>
<if test="depositoryCode != null and depositoryCode !=''">
depositoryCode = #{depositoryCode}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 根据仓库id和材料名称改变材料的数量 -->
<update id="changeMaterial" parameterType="map">
UPDATE material
<set>
<if test='state == "已入库"'>
<if test="price != null">
quantity = quantity+#{quantity},
</if>
<if test="price != null">
price = price + #{price}
</if>
</if>
<if test='state == "已出库"'>
<if test="price != null">
quantity = quantity - #{quantity},
</if>
<if test="price != null">
price = price - #{price}
</if>
</if>
</set>
WHERE
depository_id = #{depositoryId} and mname = #{mname},
</update>
<!-- 批量修改数据
<update id="updateMaterials" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE material
<set>
<if test="item.depositoryId != null">
depository_id = #{item.depositoryId},
</if>
<if test="item.mname != null">
mname = #{item.mname},
</if>
<if test="item.quantity != null">
quantity = #{item.quantity},
</if>
<if test="item.price != null">
price = #{item.price},
</if>
<if test="item.typeId != null">
type_id = #{item.typeId}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>-->
<!-- 根据主键删除数据 -->
<delete id="deleteMaterialById" parameterType="int">
DELETE FROM material WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据
<delete id="deleteMaterialByIds" parameterType="list">
DELETE FROM material WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>-->
<!-- 根据主键将状态改为删除-->
<update id="changeStateToDeletedById" parameterType="int">
UPDATE material
<set>
state = 3
</set>
WHERE id = #{id}
</update>
<update id="updateStateByParam" parameterType="map">
UPDATE material
<set>
state = #{state}
</set>
where id = #{id}
<if test="oldState != null">
and state = #{oldState}
</if>
and state != 3
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update material
<set>
state = 3
</set>
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
</mapper>

109
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.java

@ -0,0 +1,109 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.MaterialType;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author Dreamchaser
*/
@Repository
@Mapper
public interface MaterialTypeMapper {
/**
* 根据map插入一条新材料类型
* @param map 参数map
* @return 受影响的行数
*/
Integer insertMaterialType(Map<String,Object> map);
/**
* 根据id修改材料类型数据
* @param map 修改的参数
* @return 受影响的行数
*/
Integer updateMaterialType(Map<String,Object> map);
/**
* 根据id查询材料类型
* @param id 材料类型id
* @return 材料类型对象
*/
MaterialType findMaterialTypeById(Integer id);
/**
* 根据id查询材料名称
* @param id 材料类型id
* @return 材料名称
*/
String findMaterialTypeNameById(Integer id);
/**
* 根据条件查询材料类型数目
* @param map 条件参数map
* @return 符合条件的数目
*/
Integer findMaterialTypeCountByCondition(Map<String,Object> map);
/**
* 根据条件查询材料类型
* @param map 条件参数map
* @return 符合条件的材料类型
*/
List<MaterialType> findMaterialTypeByCondition(Map<String,Object> map);
/**
* 查询所有材料类型
* @return 所有材料类型
*/
List<MaterialType> findMaterialTypeAll();
/**
* 根据id删除材料类型
* @param id 待删除id
* @return 受影响的条数
*/
Integer deleteMaterialTypeById(Integer id);
/**
* 根据多个id删除材料类型
* @param ids 待删除所有id
* @return 受影响条数
*/
Integer deleteMaterialTypeByIds(List<Integer> ids);
/**
* 批量修改数据
* @param map
* @return 受影响条数
*/
Integer updateMaterialTypes(Map<String,Object> map);
/**
* 根据主键id将材料类型状态修改为删除
* @param id
* @return 受影响条数
*/
Integer changeStateToDeletedById(Integer id);
/**
* 根据多个主键id将材料类型状态修改为删除
* @param ids
* @return 受影响条数
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 根据条件修改类型状态
* @param map
* @return
*/
Integer updateStateByParam(Map<String,Object> map);
}

204
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml

@ -0,0 +1,204 @@
<?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">
<!-- material_type -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.MaterialTypeMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="materialTypeMap" type="com.dreamchaser.depository_manage.entity.MaterialType">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="tname" property="tname" jdbcType="VARCHAR" />
<result column="introduce" property="introduce" jdbcType="VARCHAR" />
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
mt.id, mt.tname, mt.introduce, mt.state,mt.parentId
</sql>
<!-- This code was generated by TableGo tools, mark 2 end. -->
<!-- 查询所有数据 -->
<select id="findMaterialTypeAll" resultMap="materialTypeMap">
SELECT
<include refid="allColumns" />
FROM material_type mt
where mt.state != 3 and mt.state != 4
</select>
<select id="findMaterialTypeCountByCondition" resultType="int" parameterType="map">
select count(*)
FROM material_type mt WHERE 1 = 1
<if test="tname != null and tname != ''">
AND mt.tname LIKE CONCAT('%', #{tname}, '%')
</if>
<if test="introduce != null and introduce != ''">
AND mt.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="state != null and state != ''" >
and mt.state = #{state}
</if>
<if test="parentId != null">
and mt.parentId = #{parentId}
</if>
and mt.state != 3 and mt.state != 4
</select>
<!-- 根据条件参数查询数据列表 -->
<select id="findMaterialTypeByCondition" resultMap="materialTypeMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM material_type mt WHERE 1 = 1
<if test="tname != null and tname != ''">
AND mt.tname LIKE CONCAT('%', #{tname}, '%')
</if>
<if test="introduce != null and introduce != ''">
AND mt.introduce LIKE CONCAT('%', #{introduce}, '%')
</if>
<if test="state != null and state != ''" >
and mt.state = #{state}
</if>
<if test="parentId != null">
and mt.parentId = #{parentId}
</if>
and mt.state != 3 and mt.state != 4
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialTypeNameById" resultType="string" parameterType="integer">
SELECT
mt.tname
FROM material_type mt WHERE mt.id = #{id}
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialTypeById" resultMap="materialTypeMap" parameterType="integer">
SELECT
<include refid="allColumns" />
FROM material_type mt WHERE mt.id = #{id} and mt.state != 3 and mt.state != 4
</select>
<!-- 根据主键查询数据
<select id="findMaterialTypeByIds" resultMap="materialTypeMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM material_type mt WHERE mt.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>-->
<!-- 插入数据 -->
<insert id="insertMaterialType" parameterType="map">
INSERT INTO material_type (
id, tname, introduce,parentId
) VALUES (
#{id},
#{tname},
#{introduce},
#{parentId}
)
</insert>
<!-- 批量插入数据
<insert id="insertMaterialTypes" parameterType="list">
INSERT INTO material_type (
id, tname, introduce
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.tname},
#{item.introduce}
)
</foreach>
</insert>-->
<!-- 修改数据 -->
<update id="updateMaterialType" parameterType="map">
UPDATE material_type
<set>
<if test="tname != null">
tname = #{tname},
</if>
<if test="introduce != null">
introduce = #{introduce},
</if>
<if test="state != null">
state = #{state},
</if>
<if test="parentId != null">
parentId = #{parentId}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改数据 -->
<update id="updateMaterialTypes" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE material_type
<set>
<if test="item.tname != null">
tname = #{item.tname},
</if>
<if test="item.introduce != null">
introduce = #{item.introduce}
</if>
<if test="state != null">
state = #{state}
</if>
<if test="parentId != null">
parentId = #{parentId}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>
<!-- 根据主键删除数据 -->
<delete id="deleteMaterialTypeById" parameterType="int">
DELETE FROM material_type WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据-->
<delete id="deleteMaterialTypeByIds" parameterType="list">
DELETE FROM material_type WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!-- 根据主键将状态改为删除-->
<update id="changeStateToDeletedById" parameterType="int">
update material_type
<set>
state = 3
</set>
where id = #{id}
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update material_type
<set>
state = 3
</set>
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="updateStateByParam" parameterType="map">
update material_type
<set>
state = #{state}
</set>
where id = #{id}
<if test="oldState != null">
and state = #{oldState}
</if>
and state != 3 and mt.state != 4
</update>
</mapper>

31
src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.java

@ -0,0 +1,31 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Notice;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* @author Dreamchaser
*/
@Mapper
@Repository
public interface NoticeMapper {
/**
* 增加一条公告信息
* @param map 参数map
* @return 受影响的行数
*/
Integer addNotice(Map<String,Object> map);
/**
* 根据条件查询符合条件的公告信息
* @param map 参数map
* @return 符合条件的公告列表
*/
List<Notice> findNoticeByCondition(Map<String,Object> map);
}

131
src/main/java/com/dreamchaser/depository_manage/mapper/NoticeMapper.xml

@ -0,0 +1,131 @@
<?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">
<!-- notice -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.NoticeMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="noticeMap" type="com.dreamchaser.depository_manage.entity.Notice">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="title" property="title" jdbcType="VARCHAR" />
<result column="content" property="content" jdbcType="VARCHAR" />
<result column="time" property="time" jdbcType="INTEGER" />
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
n.id, n.title, n.content, n.time
</sql>
<!-- 查询所有 -->
<select id="findNoticeAll" resultMap="noticeMap">
SELECT
<include refid="allColumns" />
FROM notice n
</select>
<!-- 根据条件参数查询列表 -->
<select id="findNoticeByCondition" resultMap="noticeMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM notice n WHERE 1 = 1
<if test="title != null and title != ''">
AND n.title LIKE CONCAT('%', #{title}, '%')
</if>
<if test="content != null and content != ''">
AND n.content LIKE CONCAT('%', #{content}, '%')
</if>
<if test="time != null">
AND n.time = #{time}
</if>
order by n.time DESC
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据主键查询信息 -->
<select id="findNoticeByIds" resultMap="noticeMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM notice n WHERE n.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 新增信息 -->
<insert id="addNotice">
INSERT INTO notice (
title, content, time
) VALUES (
#{title},
#{content},
#{time}
)
</insert>
<!-- 批量新增信息 -->
<insert id="addNotices" parameterType="list">
INSERT INTO notice (
id, title, content, time
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.title},
#{item.content},
#{item.time}
)
</foreach>
</insert>
<!-- 修改信息 -->
<update id="updateNotice">
UPDATE notice
<set>
<if test="title != null">
title = #{title},
</if>
<if test="content != null">
content = #{content},
</if>
<if test="time != null">
time = #{time}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改信息 -->
<update id="updateNotices" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE notice
<set>
<if test="item.title != null">
title = #{item.title},
</if>
<if test="item.content != null">
content = #{item.content},
</if>
<if test="item.time != null">
time = #{item.time}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>
<!-- 根据主键删除 -->
<delete id="deleteNoticeById" parameterType="int">
DELETE FROM notice WHERE id = #{id}
</delete>
<!-- 根据主键批量删除 -->
<delete id="deleteNoticeByIds" parameterType="list">
DELETE FROM notice WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

60
src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.java

@ -0,0 +1,60 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.Role;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
@Mapper
@Repository
public interface RoleMapper {
/**
* 获取所有权限
* @return
*/
List<Role> findAllRole();
/**
* 添加用户或者岗位权限及管理的仓库
* @param map
* @return
*/
Integer addUserOrPostRoleAndDepository(Map<String,Object> map);
/**
* 获取仓库和权限名称
* @param userid
* @return
*/
RoleAndDepository findDepositoryAndRole(Integer userid);
/**
* 修改用户或者岗位权限及管理的仓库
* @param map
* @return
*/
Integer updateUserOrPostRoleAndDepository(Map<String,Object> map);
/**
* 获取当前登录用户的权限
* @param uid
* @return
*/
Integer findRoleByUid(Integer uid);
/**
* 根据仓库获取用户
* @param did
* @return
*/
List<Integer> findUserIdByDid(Integer did);
}

90
src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml

@ -0,0 +1,90 @@
<?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">
<!-- user -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.RoleMapper">
<!-- 字段映射(权限) -->
<resultMap id="roleMap" type="com.dreamchaser.depository_manage.entity.Role">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
</resultMap>
<!-- 权限映射-->
<resultMap id="postoruserroleMap" type="com.dreamchaser.depository_manage.entity.PostOrUserRole">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="classes" property="classes" jdbcType="INTEGER" />
<result column="role" property="role" jdbcType="INTEGER" />
<result column="userid" property="userid" jdbcType="INTEGER" />
<result column="did" property="did" jdbcType="INTEGER" />
</resultMap>
<resultMap id="depositoryAndrole" type="com.dreamchaser.depository_manage.pojo.RoleAndDepository">
<result column="userId" property="userId" jdbcType="INTEGER"/>
<result column="roleName" property="roleName" jdbcType="VARCHAR"/>
<result column="depositoryName" property="depositoryName" jdbcType="VARCHAR"/>
<result column="depositoryAddress" property="depositoryAddress" jdbcType="VARCHAR"/>
<result column="depositoryIntroduce" property="depositoryIntroduce" jdbcType="VARCHAR"/>
<result column="depositoryState" property="depositoryState" jdbcType="VARCHAR"/>
</resultMap>
<sql id="allColumns">
r.id,r.name
</sql>
<sql id="roleNameAnddepositoryName">
userid as userId,name as roleName,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState
</sql>
<select id="findAllRole" resultMap="roleMap">
select
<include refid="allColumns"/>
from role r
</select>
<update id="updateUserOrPostRoleAndDepository" parameterType="map">
update postoruserrole
<set>
<if test="authority != null and authority != ''">
role = #{authority},
</if>
<if test="depositoryId != null and depositoryId != ''">
did = #{depositoryId}
</if>
</set>
where userid = #{userid}
</update>
<insert id="addUserOrPostRoleAndDepository" parameterType="map">
INSERT INTO postoruserrole (
id, classes, role,userid,did
) VALUES (
#{id},
#{classes},
#{authority},
#{userid},
#{depositoryId}
)
</insert>
<select id="findDepositoryAndRole" parameterType="int" resultMap="depositoryAndrole">
select
<include refid="roleNameAnddepositoryName"/>
from userroleanddepository
where userid = #{userid}
</select>
<select id="findRoleByUid" parameterType="int" resultType="int">
select rid from userandrole where uid = #{uid}
</select>
<select id="findUserIdByDid" parameterType="int" resultType="int">
select userid from postoruserrole where classes = 1 and did = #{did}
</select>
</mapper>

20
src/main/java/com/dreamchaser/depository_manage/mapper/TransferRecordMapper.java

@ -0,0 +1,20 @@
package com.dreamchaser.depository_manage.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.Map;
/**
* @author Dreamchaser
*/
@Mapper
@Repository
public interface TransferRecordMapper {
/**
* 插入一条转移记录
* @param map 参数map
* @return 受影响的行数
*/
Integer addTransferRecord(Map<String,Object> map);
}

124
src/main/java/com/dreamchaser/depository_manage/mapper/TransferRecordMapper.xml

@ -0,0 +1,124 @@
<?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">
<!-- transfer_record -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.TransferRecordMapper">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="transferRecordMap" type="com.dreamchaser.depository_manage.entity.TransferRecord">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="from_id" property="fromId" jdbcType="INTEGER" />
<result column="to_id" property="toId" jdbcType="INTEGER" />
</resultMap>
<!-- 表查询字段 -->
<sql id="allColumns">
tr.id, tr.from_id, tr.to_id
</sql>
<!-- 查询所有
<select id="findTransferRecordAll" resultMap="transferRecordMap">
SELECT
<include refid="allColumns" />
FROM transfer_record tr
</select>-->
<!-- 根据条件参数查询列表
<select id="findTransferRecordByCondition" resultMap="transferRecordMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM transfer_record tr WHERE 1 = 1
<if test="fromId != null">
AND tr.from_id = #{fromId}
</if>
<if test="toId != null">
AND tr.to_id = #{toId}
</if>
</select>-->
<!-- 根据主键查询信息
<select id="findTransferRecordByIds" resultMap="transferRecordMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM transfer_record tr WHERE tr.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>-->
<!-- 新增信息 -->
<insert id="addTransferRecord">
INSERT INTO transfer_record (
id, from_id, to_id,quantity
) VALUES (
#{id},
#{fromId},
#{toId},
#{quantity}
)
</insert>
<!-- 批量新增信息
<insert id="addTransferRecords" parameterType="list">
INSERT INTO transfer_record (
id, from_id, to_id
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.fromId},
#{item.toId}
)
</foreach>
</insert>-->
<!-- 修改信息
<update id="updateTransferRecord">
UPDATE transfer_record
<set>
<if test="fromId != null">
from_id = #{fromId},
</if>
<if test="toId != null">
to_id = #{toId}
</if>
</set>
WHERE id = #{id}
</update>-->
<!-- 批量修改信息
<update id="updateTransferRecords" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE transfer_record
<set>
<if test="item.fromId != null">
from_id = #{item.fromId},
</if>
<if test="item.toId != null">
to_id = #{item.toId}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>-->
<!-- 根据主键删除
<delete id="deleteTransferRecordById" parameterType="int">
DELETE FROM transfer_record WHERE id = #{id}
</delete>-->
<!-- 根据主键批量删除
<delete id="deleteTransferRecordByIds" parameterType="list">
DELETE FROM transfer_record WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>-->
</mapper>

138
src/main/java/com/dreamchaser/depository_manage/mapper/UserMapper.java

@ -0,0 +1,138 @@
package com.dreamchaser.depository_manage.mapper;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.pojo.SimpleUser;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* 关于用户的mapper接口
* @author Dreamchaser
*/
@Repository
@Mapper
public interface UserMapper {
/**
* 查询user表的所有数据的行数
* @return 行数
*/
Integer findCount();
/**
* 查询user表的符合条件数据的行数
* @param map 参数map
* @return 符合条件数据的行数
*/
Integer findCountByCondition(Map<String,Object> map);
/**
* 根据条件查询用户(此方法只能在确认结果只有一条记录时调用)
* @param map
* @return
*/
User findUserByCondition(Map<String,Object> map);
/**
* 根据主键查询用户
* @param id 用户id
* @return 用户信息
*/
User findUserById(Integer id);
/**
* 根据条件查询符合条件的用户
* @param map
* @return
*/
List<User> findUsersByCondition(Map<String,Object> map);
/**
* 根据email查询用户信息
* @param email
* @return
*/
User findUserByEmail(String email);
/**
* 根据用户id查询用户名
* @param id 用户id
* @return 用户名称
*/
String findUserNameById(int id);
/**
* 根据参数插入一条用户信息
* @param map 参数map
* @return 受影响的行数0表示插入失败1表示成功
*/
Integer insertUser(Map<String,Object> map);
/**
* 更新用户信息
* @param map 参数map
* @return 受影响的行数
*/
Integer updateUser(Map<String,Object> map);
/**
* 更新用户非敏感信息一般用户自己的修改
* @param map 参数map
* @return 受影响的行数
*/
Integer updateUserNoSensitive(Map<String,Object> map);
/**
* 根据id删除用户
* @param id 用户id
* @return 受影响的行数
*/
Integer deleteUserById(Integer id);
/**
* 根据id批量删除数据
* @param list 用户id的集合
* @return 受影响的行数
*/
Integer deleteUserByIds(List<Integer> list);
/**
* 根据id将用户状态改为删除
* @param id
* @return 受影响的行数
*/
Integer changeUserStateToDeleteById(Integer id);
/**
* 根据id批量将用户状态改为删除
* @param ids
* @return 受影响的行数
*/
Integer changeUserStateToDeleteByIds(List<Integer> ids);
/**
* 根据id进行密码修改
* @param map
* @return 受影响行数
*/
Integer updateUserPasswordById(Map<String,Object> map);
/**
* 根据用户id查询具体权限名称
* @param id
* @return
*/
String FindUserRoleById(Integer id);
/**
* 根据用户id查询具体仓库名称
* @param id
* @return
*/
String FindDepositoryByUserId(Integer id);
}

385
src/main/java/com/dreamchaser/depository_manage/mapper/UserMapper.xml

@ -0,0 +1,385 @@
<?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">
<!-- user -->
<mapper namespace="com.dreamchaser.depository_manage.mapper.UserMapper">
<!-- 字段映射 -->
<resultMap id="userMap" type="com.dreamchaser.depository_manage.entity.User">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="uname" property="uname" jdbcType="VARCHAR" />
<result column="authority" property="authority" jdbcType="VARCHAR" />
<result column="pwd" property="pwd" jdbcType="VARCHAR" />
<result column="sex" property="sex" jdbcType="VARCHAR" />
<result column="depository_id" property="depositoryId" jdbcType="INTEGER" />
<result column="entry_date" property="entryDate" jdbcType="TIMESTAMP" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
<result column="state" property="state" javaType="INTEGER"/>
</resultMap>
<!-- 字段映射(包括角色名)-->
<resultMap id="userMapWithRoleName" type="com.dreamchaser.depository_manage.entity.User">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="state" property="state" javaType="INTEGER"/>
<result column="uname" property="uname" jdbcType="VARCHAR" />
<result column="authority" property="authority" jdbcType="VARCHAR" />
<result column="pwd" property="pwd" jdbcType="VARCHAR" />
<result column="sex" property="sex" jdbcType="VARCHAR" />
<result column="depository_id" property="depositoryId" jdbcType="INTEGER" />
<result column="entry_date" property="entryDate" jdbcType="TIMESTAMP" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
<association property="role" javaType="com.dreamchaser.depository_manage.entity.Role">
<id property="id" column="authority"/>
<result property="name" column="name"/>
</association>
</resultMap>
<!-- 表查询字段(不敏感信息) -->
<sql id="noSensitiveColumns">
u.id, u.uname, u.sex, u.entry_date
</sql>
<!-- 表查询字段 -->
<sql id="allColumns">
u.id, u.uname, u.authority, u.pwd, u.sex, u.depository_id, u.entry_date, u.email,
u.phone,u.state
</sql>
<sql id="ColumnsAndRoleName">
u.id, u.uname, r.name,r.id,u.authority, u.pwd, u.sex, u.depository_id, u.entry_date, u.email,
u.phone,u.state
</sql>
<!-- This code was generated by TableGo tools, mark 2 end. -->
<!-- 查询该表的行数 -->
<select id="findCount" resultType="integer">
SELECT
count(*)
FROM user u
</select>
<!-- 根据条件查询数据的数量 -->
<select id="findCountByCondition" resultType="integer" parameterType="map">
SELECT
count(*)
FROM user u WHERE 1 = 1
<if test="uname != null and uname != ''">
AND u.uname LIKE CONCAT('%', #{uname}, '%')
</if>
<if test="authority != null and authority != ''">
AND u.authority LIKE CONCAT('%', #{authority}, '%')
</if>
<if test="pwd != null and pwd != ''">
AND u.pwd LIKE CONCAT('%', #{pwd}, '%')
</if>
<if test="sex != null and sex != ''">
AND u.sex LIKE CONCAT('%', #{sex}, '%')
</if>
<if test="depositoryId != null">
AND u.depository_id = #{depositoryId}
</if>
<if test="entryDate != null">
AND u.entry_date = #{entryDate}
</if>
<if test="email != null and email != ''">
AND u.email LIKE CONCAT('%', #{email}, '%')
</if>
<if test="phone != null and phone != ''">
AND u.phone LIKE CONCAT('%', #{phone}, '%')
</if>
<if test="state != null and state != ''">
and u.state = #{state}
</if>
and u.state != 3
</select>
<!-- 查询所有数据 -->
<!-- <select id="findUserAll" resultMap="userMap">
SELECT
<include refid="allColumns" />
FROM user u
</select>-->
<!-- 根据id查询数据列表 -->
<select id="findUserNameById" resultType="string" parameterType="int">
SELECT
u.uname
FROM user u WHERE u.id=#{id}
</select>
<!-- 根据email查询数据列表 -->
<select id="findUserByEmail" resultMap="userMap" parameterType="string">
SELECT
<include refid="allColumns" />
FROM user u WHERE u.email LIKE CONCAT('%', #{email}, '%')
</select>
<!-- 根据条件参数查询数据列表 -->
<select id="findUsersByCondition" resultMap="userMapWithRoleName" parameterType="map">
SELECT
<include refid="ColumnsAndRoleName" />
FROM user u,role r WHERE 1 = 1
<if test="uname != null and uname != ''">
AND u.uname LIKE CONCAT('%', #{uname}, '%')
</if>
<if test="authority != null and authority != ''">
AND u.authority = #{authority}
</if>
<if test="pwd != null and pwd != ''">
AND u.pwd LIKE CONCAT('%', #{pwd}, '%')
</if>
<if test="sex != null and sex != ''">
AND u.sex LIKE CONCAT('%', #{sex}, '%')
</if>
<if test="depositoryId != null">
AND u.depository_id = #{depositoryId} or u.depository_id = 0
</if>
<if test="entryDate != null">
AND u.entry_date = #{entryDate}
</if>
<if test="email != null and email != ''">
AND u.email LIKE CONCAT('%', #{email}, '%')
</if>
<if test="phone != null and phone != ''">
AND u.phone LIKE CONCAT('%', #{phone}, '%')
</if>
<if test="state != null and state != ''">
And u.state = #{state}
</if>
and u.authority = r.id
and u.state != 3
<if test="begin != null and size != null">
LIMIT #{begin},#{size}
</if>
</select>
<!-- 根据条件参数查询数据列表 -->
<select id="findUserByCondition" resultMap="userMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM user u WHERE 1 = 1
<if test="uname != null and uname != ''">
AND u.uname LIKE CONCAT('%', #{uname}, '%')
</if>
<if test="authority != null and authority != ''">
AND u.authority LIKE CONCAT('%', #{authority}, '%')
</if>
<if test="pwd != null and pwd != ''">
AND u.pwd LIKE CONCAT('%', #{pwd}, '%')
</if>
<if test="sex != null and sex != ''">
AND u.sex LIKE CONCAT('%', #{sex}, '%')
</if>
<if test="depositoryId != null">
AND u.depository_id = #{depositoryId}
</if>
<if test="entryDate != null">
AND u.entry_date = #{entryDate}
</if>
<if test="email != null and email != ''">
AND u.email LIKE CONCAT('%', #{email}, '%')
</if>
<if test="phone != null and phone != ''">
AND u.phone LIKE CONCAT('%', #{phone}, '%')
</if>
<if test="state != null and state != ''">
and u.state = #{state}
</if>
and u.state != 3
</select>
<!-- 根据主键查询数据 -->
<select id="findUserById" resultMap="userMap" parameterType="integer">
SELECT
<include refid="allColumns" />
FROM user u WHERE u.id = #{id}
</select>
<!-- 根据主键查询数据
<select id="findUserByIds" resultMap="userMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM user u WHERE u.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>-->
<!-- 插入数据 -->
<insert id="insertUser" parameterType="map">
INSERT INTO user (
id, uname, authority, pwd, sex, depository_id, entry_date, email,
phone
) VALUES (
#{id},
#{uname},
#{authority},
#{pwd},
#{sex},
#{depositoryId},
#{entryDate},
#{email},
#{phone}
)
</insert>
<!-- 批量插入数据
<insert id="insertUsers" parameterType="list">
INSERT INTO user (
id, uname, authority, pwd, sex, depository_id, entry_date, email,
phone
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.uname},
#{item.authority},
#{item.pwd},
#{item.sex},
#{item.depositoryId},
#{item.entryDate},
#{item.email},
#{item.phone}
)
</foreach>
</insert>-->
<!-- 修改不敏感数据(这里由于并未对手机号进行验证所以这个也是非敏感信息可以给用户自己修改) -->
<update id="updateUserNoSensitive" parameterType="map">
UPDATE user
<set>
<if test='uname != null and uname!=""'>
uname = #{uname},
</if>
<if test='sex != null and sex!=""'>
sex = #{sex},
</if>
<if test="entryDate != null and entryDate!=''">
entry_date = #{entryDate},
</if>
<if test="phone != null and phone !=''">
phone = #{phone}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 修改数据 -->
<update id="updateUser" parameterType="map">
UPDATE user
<set>
<if test='uname != null and uname!=""'>
uname = #{uname},
</if>
<if test='authority != null and authority!=""'>
authority = #{authority},
</if>
<if test="pwd != null and pwd!=''">
pwd = #{pwd},
</if>
<if test='sex != null and sex!=""'>
sex = #{sex},
</if>
<if test="depositoryId != null and depository!=''">
depository_id = #{depositoryId},
</if>
<if test="entryDate != null and entryDate!=''">
entry_date = #{entryDate},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
<if test="phone != null and phone !=''">
phone = #{phone},
</if>
<if test="state != null and state != ''">
state = #{state}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改数据
<update id="updateUsers" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE user
<set>
<if test="item.uname != null">
uname = #{item.uname},
</if>
<if test="item.authority != null">
authority = #{item.authority},
</if>
<if test="item.pwd != null">
pwd = #{item.pwd},
</if>
<if test="item.sex != null">
sex = #{item.sex},
</if>
<if test="item.depositoryId != null">
depository_id = #{item.depositoryId},
</if>
<if test="item.entryDate != null">
entry_date = #{item.entryDate},
</if>
<if test="item.email != null">
email = #{item.email},
</if>
<if test="item.phone != null">
phone = #{item.phone}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>-->
<!-- 根据主键删除数据 -->
<delete id="deleteUserById" parameterType="integer">
DELETE FROM user WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteUserByIds" parameterType="list">
DELETE FROM user WHERE id IN
<!-- 单参数时,List对象只能为list,数组对象只能为array,多参数用map时,collection参数才为KeyName -->
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!--根据主键将状态修改为删除-->
<update id="changeUserStateToDeleteById" parameterType="integer">
update user
<set>
state = 3
</set>
where id = #{id}
</update>
<!--根据主键批量将状态修改为删除-->
<update id="changeUserStateToDeleteByIds" parameterType="list">
update user
<set>
state = 3
</set>
where id in
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</update>
<update id="updateUserPasswordById" parameterType="map">
update user
<set>
pwd = #{new_password}
</set>
where id = #{id}
</update>
<select id="FindUserRoleById" parameterType="int" resultType="string">
select name from userandrole ur left join role r on ur.rid = r.id where ur.uid = #{id}
</select>
<select id="FindDepositoryByUserId" parameterType="int" resultType="string">
select dname from depositoryanduserbyport where uid = #{id}
</select>
</mapper>

143
src/main/java/com/dreamchaser/depository_manage/mapper/standingBookMapper.xml

@ -0,0 +1,143 @@
<?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">
<!-- standing_book -->
<mapper namespace="mysql.standingBook">
<!-- This code was generated by TableGo tools, mark 1 begin. -->
<!-- 字段映射 -->
<resultMap id="standingBookMap" type="StandingBook">
<id column="id" property="id" jdbcType="INTEGER" />
<result column="type" property="type" jdbcType="INTEGER" />
<result column="quantity" property="quantity" jdbcType="INTEGER" />
<result column="price" property="price" jdbcType="INTEGER" />
<result column="material_name" property="materialName" jdbcType="VARCHAR" />
</resultMap>
<!-- This code was generated by TableGo tools, mark 1 end. -->
<!-- This code was generated by TableGo tools, mark 2 begin. -->
<!-- 表查询字段 -->
<sql id="allColumns">
sb.id, sb.type, sb.quantity, sb.price, sb.material_name
</sql>
<!-- This code was generated by TableGo tools, mark 2 end. -->
<!-- 查询所有数据 -->
<select id="findStandingBookAll" resultMap="standingBookMap">
SELECT
<include refid="allColumns" />
FROM standing_book sb
</select>
<!-- 根据条件参数查询数据列表 -->
<select id="findStandingBookByCondition" resultMap="standingBookMap" parameterType="map">
SELECT
<include refid="allColumns" />
FROM standing_book sb WHERE 1 = 1
<if test="type != null">
AND sb.type = #{type}
</if>
<if test="quantity != null">
AND sb.quantity = #{quantity}
</if>
<if test="price != null">
AND sb.price = #{price}
</if>
<if test="materialName != null and materialName != ''">
AND sb.material_name LIKE CONCAT('%', #{materialName}, '%')
</if>
</select>
<!-- 根据主键查询数据 -->
<select id="findStandingBookByIds" resultMap="standingBookMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM standing_book sb WHERE sb.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
<!-- 插入数据 -->
<insert id="insertStandingBook" parameterType="map">
INSERT INTO standing_book (
id, type, quantity, price, material_name
) VALUES (
#{id},
#{type},
#{quantity},
#{price},
#{materialName}
)
</insert>
<!-- 批量插入数据 -->
<insert id="insertStandingBooks" parameterType="list">
INSERT INTO standing_book (
id, type, quantity, price, material_name
) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(
#{item.id},
#{item.type},
#{item.quantity},
#{item.price},
#{item.materialName}
)
</foreach>
</insert>
<!-- 修改数据 -->
<update id="updateStandingBook" parameterType="map">
UPDATE standing_book
<set>
<if test="type != null">
type = #{type},
</if>
<if test="quantity != null">
quantity = #{quantity},
</if>
<if test="price != null">
price = #{price},
</if>
<if test="materialName != null">
material_name = #{materialName}
</if>
</set>
WHERE id = #{id}
</update>
<!-- 批量修改数据 -->
<update id="updateStandingBooks" parameterType="list">
<foreach collection="list" index="index" item="item" separator=";">
UPDATE standing_book
<set>
<if test="item.type != null">
type = #{item.type},
</if>
<if test="item.quantity != null">
quantity = #{item.quantity},
</if>
<if test="item.price != null">
price = #{item.price},
</if>
<if test="item.materialName != null">
material_name = #{item.materialName}
</if>
</set>
WHERE id = #{item.id}
</foreach>
</update>
<!-- 根据主键删除数据 -->
<delete id="deleteStandingBookById" parameterType="int">
DELETE FROM standing_book WHERE id = #{id}
</delete>
<!-- 根据主键批量删除数据 -->
<delete id="deleteStandingBookByIds" parameterType="list">
DELETE FROM standing_book WHERE id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
</mapper>

55
src/main/java/com/dreamchaser/depository_manage/pojo/AdministrationP.java

@ -0,0 +1,55 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Administration;
import lombok.Data;
@Data
public class AdministrationP {
/**
* id
*/
private Integer id;
/**
* 编号
*/
private String number;
/**
* 名称
*/
private String name;
/**
* 简称
*/
private String abbreviation;
/**
* 部门类别名称
*/
private String classname;
/**
* 级别值
*/
private Integer level;
/**
* 状态
*/
private Integer state;
public AdministrationP(Administration administration) {
this.id = administration.getId();
this.number = administration.getNumber();
this.name = administration.getName();
this.abbreviation = administration.getAbbreviation();
this.classname = administration.getClassname();
this.level = administration.getLevel();
this.state = administration.getState();
}
}

59
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationInRecordP.java

@ -0,0 +1,59 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
@Data
public class ApplicationInRecordP {
/**
* id
*/
private Integer id;
/**
* 入库物品名称
*/
private String mname;
/**
* 入库数量
*/
private int quantity;
/**
* 入库金额
*/
private int price;
/**
* 入库物品类型
*/
private String materialTypeName;
/**
* 提交人姓名
*/
private String applicantName;
/**
* 提交人id
*/
private Integer applicantId;
/**
* 提交时间
*/
private String applicantTime;
/**
* 货物单号
*/
private String code;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 提交备注
*/
private String applyRemark;
}

126
src/main/java/com/dreamchaser/depository_manage/pojo/ApplicationOutRecordP.java

@ -0,0 +1,126 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
@Data
public class ApplicationOutRecordP {
/**
* id
*/
private Integer id;
/**
* 材料id
*/
private Integer mid;
/**
* 材料名称
*/
private String mname;
/**
* 仓库id
*/
private Integer depositoryId;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 申请人id
*/
private Integer applicantId;
/**
* 申请人名称
*/
private String applicantName;
/**
* 申请时间
*/
private String applicantTime;
/**
* 备注
*/
private String applyRemark;
/**
* 出货单号
*/
private String code;
/**
* 金额
*/
private Integer price;
/**
* 数量
*/
private Integer quantity;
/**
* 部门负责人编号
*/
private Integer departmenthead;
/**
* 部门负责人姓名
*/
private String departmentheadName;
/**
* 部门负责人意见1通过2退回
*/
private String departmentheadPass;
/**
* 部门负责人处理时间
*/
private String departmentheadTime;
/**
* 部门负责人审核备注
*/
private String departmentheadMessage;
/**
* 仓库管理员
*/
private String depositoryManager;
/**
* 仓库管理员名称
*/
private String depositoryManagerName;
/**
* 仓库管理员意见1通过2退回
*/
private String depositoryManagerPass;
/**
* 仓库管理员处理时间
*/
private String depositoryManagerTime;
/**
* 仓库管理员审核备注
*/
private String depositoryManagerMessage;
/**
* 状态
*/
private String state;
/**
* 是否为转移申请
*/
private Integer istransfer;
}

167
src/main/java/com/dreamchaser/depository_manage/pojo/DepositoryRecordP.java

@ -0,0 +1,167 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.DepositoryRecord;
import com.dreamchaser.depository_manage.utils.DateUtil;
import lombok.Data;
@Data
public class DepositoryRecordP {
private static final long serialVersionUID = 8546566842955977610L;
/**
* 记录id
*/
private Integer id;
/**
* 申请编号
*/
private Integer applicationId;
/**
* 产品名称
*/
private String mname;
/**
* 调度的仓库id
*/
private Integer depositoryId;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 调度记录类型购入/退料/转入,退还/领料/转出)
*/
private Integer type;
/**
* 数量
*/
private Integer quantity;
/**
* 价格
*/
private Double price;
/**
* 状态未审核未入库/出库已入库
*/
private String state;
/**
* 申请人id
*/
private Integer applicantId;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 申请备注
*/
private String applyRemark;
/**
* 申请时间
*/
private String applyTime;
/**
* 审核人id
*/
private Integer reviewerId;
/**
* 审核人姓名
*/
private String reviewerName;
/**
* 审核结果备注
*/
private String reviewRemark;
/**
* 审核时间
*/
private String reviewTime;
/**
* 是否审核通过
*/
private Integer reviewPass;
/**
* 验货人id
*/
private Integer checkerId;
/**
* 验货人姓名
*/
private String checkerName;
/**
* 验收备注
*/
private String checkRemark;
/**
* 出入库时间验货时间
*/
private String checkTime;
/**
* 是否验收通过
*/
private Integer checkPass;
/**
* 申请人信息
*/
private UserP applicantUserP;
/**
* 审核人信息
*/
private UserP reviewerUserP;
/**
* 验货人信息
*/
private UserP checkerUserP;
public DepositoryRecordP(DepositoryRecord dr) {
this.id = dr.getId();
this.applicationId = dr.getApplicationId();
this.mname = dr.getMname();
this.depositoryId = dr.getDepositoryId();
this.type = dr.getType();
this.quantity = dr.getQuantity();
this.price = dr.getPrice();
this.state = dr.getState();
this.applicantId = dr.getApplicantId();
this.applyRemark = dr.getApplyRemark();
this.applyTime = DateUtil.TimeStampToDateTime(dr.getApplyTime());
this.reviewerId = dr.getReviewerId();
this.reviewRemark = dr.getReviewRemark();
this.reviewTime = DateUtil.TimeStampToDateTime(dr.getReviewTime());
this.reviewPass = dr.getReviewPass();
this.checkerId = dr.getCheckerId();
this.checkRemark = dr.getCheckRemark();
this.checkTime = DateUtil.TimeStampToDateTime(dr.getCheckTime());
this.checkPass = dr.getCheckPass();
this.applicantUserP = dr.getApplicantUserP();
this.reviewerUserP = dr.getReviewerUserP();
this.checkerUserP = dr.getCheckerUserP();
}
}

115
src/main/java/com/dreamchaser/depository_manage/pojo/MaterialP.java

@ -0,0 +1,115 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Material;
import lombok.Data;
import java.math.BigInteger;
/**
* 库存类的包装类
*
* @author Dreamchaser
*/
@Data
public class MaterialP {
/**
* 存储id
*/
private Integer id;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 材料名称
*/
private String mname;
/**
* 数量
*/
private Integer quantity;
/**
* 总金额
*/
private Double amounts;
/**
* 材料种类名称
*/
private String typeName;
/**
* 材料状态
*/
private Integer state;
/**
* 仓库名称
*/
private String dName;
/**
* 金额
*/
private Double price;
/**
* 计量单位
*/
private String unit;
/**
* 材质
*/
private String texture;
/**
* 存货编码
*/
private BigInteger code;
/**
* 规格型号
*/
private String version;
/**
* 仓库编号
*/
private String depositoryCode;
/**
* 仓库管理员
*/
private String warehouseManager;
public MaterialP(Integer id, Integer depositoryId, String mname, Integer quantity, Double price, String typeName) {
this.id = id;
this.mname = mname;
this.quantity = quantity;
this.price = price;
this.typeName = typeName;
}
public MaterialP(Material material) {
this.id = material.getId(); // 编号
this.mname = material.getMname(); // 材料名称
this.quantity = material.getQuantity(); // 数量
this.price = material.getPrice(); // 单价
this.state = material.getState(); // 材料状态
this.amounts = material.getAmounts(); // 总额
this.unit = material.getUnit(); // 计量单位
this.texture = material.getTexture(); // 材质
this.code = material.getCode(); // 存货编码
this.version = material.getVersion(); // 规格型号
this.depositoryCode = material.getDepositoryCode(); // 仓库编号
}
}

108
src/main/java/com/dreamchaser/depository_manage/pojo/PostP.java

@ -0,0 +1,108 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Post;
import lombok.Data;
@Data
public class PostP {
/**
* id
*/
private Integer id;
/**
* 编号
*/
private String number;
/**
* 职位名称
*/
private String name;
/**
* 状态1启用2禁用3删除
*/
private Integer state;
/**
* 名称
*/
private String dutiesname;
/**
* 归属行政组织名称
*/
private String aoname;
/**
* 归属行政组织编号
*/
private String aonumber;
/**
* 职务类别
*/
private String jobname;
/**
* 上级名称
*/
private String superiorname;
/**
* 上级编号
*/
private String superiornumber;
/**
* 部门
*/
private String departmentname;
/**
* WMS中权限名称
*/
private String rolename;
/**
* 管理仓库
*/
private String depositoryName;
public PostP(Post post){
this.id = post.getId();
this.number = post.getNumber();
this.name = post.getName();
this.state = post.getState();
this.dutiesname = post.getDutiesname();
this.aoname = post.getAoname();
this.aonumber = post.getAonumber();
this.jobname = post.getJobname();
this.superiorname = post.getSuperiorname();
this.superiornumber = post.getSuperiornumber();
this.departmentname = post.getDepartmentname();
}
public PostP(Integer id, String number, String name, Integer state, String dutiesname, String aoname, String aonumber, String jobname, String superiorname, String superiornumber, String departmentname, String rolename, String depositoryName) {
this.id = id;
this.number = number;
this.name = name;
this.state = state;
this.dutiesname = dutiesname;
this.aoname = aoname;
this.aonumber = aonumber;
this.jobname = jobname;
this.superiorname = superiorname;
this.superiornumber = superiornumber;
this.departmentname = departmentname;
this.rolename = rolename;
this.depositoryName = depositoryName;
}
}

52
src/main/java/com/dreamchaser/depository_manage/pojo/RestResponse.java

@ -0,0 +1,52 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 所有服务统一响应数据格式
* @author 金昊霖
*/
@Accessors(chain = true)
@Data
public class RestResponse implements Serializable {
/**
* 业务数据
*/
private Object data;
/**
* 数据条数
*/
private int count;
/**
* 状态码
*/
private int status=200;
/**
* 状态信息
*/
private StatusInfo statusInfo=new StatusInfo();
public RestResponse() {
}
public RestResponse(Object data) {
this.data = data;
}
public RestResponse(Object data, int count, int status) {
this.data = data;
this.count = count;
this.status = status;
}
public RestResponse(Object data, int status, StatusInfo statusInfo) {
this.data = data;
this.status = status;
this.statusInfo = statusInfo;
}
}

39
src/main/java/com/dreamchaser/depository_manage/pojo/RoleAndDepository.java

@ -0,0 +1,39 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
@Data
public class RoleAndDepository {
/**
* 归属人/岗位编号
*/
private Integer userId;
/**
* 权限名称
*/
private String roleName;
/**
* 仓库名称
*/
private String depositoryName;
/**
* 仓库地址
*/
private String depositoryAddress;
/**
* 仓库简介
*/
private String depositoryIntroduce;
/**
* 仓库状态
*/
private Integer depositoryState;
}

29
src/main/java/com/dreamchaser/depository_manage/pojo/SimpleApplicationOutRecordP.java

@ -0,0 +1,29 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.SimpleApplicationOutRecord;
import com.dreamchaser.depository_manage.entity.SimpleDepositoryRecord;
import com.dreamchaser.depository_manage.utils.DateUtil;
import lombok.Data;
@Data
public class SimpleApplicationOutRecordP {
/** 记录id */
private Integer id;
/** 申请人姓名 */
private String applicantName;
/** 申请备注 */
private String applyRemark;
/** 申请时间 */
private String applicantTime;
public SimpleApplicationOutRecordP(SimpleApplicationOutRecord d) {
this.id=d.getId();
this.applyRemark = d.getApplyRemark();
this.applicantTime = DateUtil.TimeStampToDateTime(d.getApplicantTime());
}
}

38
src/main/java/com/dreamchaser/depository_manage/pojo/SimpleDepositoryRecordP.java

@ -0,0 +1,38 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.DepositoryRecord;
import com.dreamchaser.depository_manage.entity.SimpleDepositoryRecord;
import com.dreamchaser.depository_manage.utils.DateUtil;
import lombok.Data;
import java.util.Date;
/**
* @author Dreamchaser
*/
@Data
public class SimpleDepositoryRecordP {
/** 记录id */
private Integer id;
/** 调度记录类型(购入/退料/转入,退还/领料/转出) */
private Integer type;
/** 申请人id */
private String applicantName;
/** 申请备注 */
private String applyRemark;
/** 申请时间 */
private String applyTime;
public SimpleDepositoryRecordP(SimpleDepositoryRecord d) {
this.id=d.getId();
this.type = d.getType();
this.applyRemark = d.getApplyRemark();
this.applyTime = DateUtil.TimeStampToDateTime(d.getApplyTime());
}
}

22
src/main/java/com/dreamchaser/depository_manage/pojo/SimpleUser.java

@ -0,0 +1,22 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
/**
* 用户的简洁版信息
* @author 金昊霖
*/
@Data
public class SimpleUser {
/** 用户id */
private Integer id;
/** 用户名称 */
private String uname;
/** 密码 */
private String pwd;
/** 头像地址 */
private String pictureUrl;
}

14
src/main/java/com/dreamchaser/depository_manage/pojo/Statistic.java

@ -0,0 +1,14 @@
package com.dreamchaser.depository_manage.pojo;
/**
* 统计量
* @author Dreamchaser
*/
public class Statistic {
class Material{
}
}

27
src/main/java/com/dreamchaser/depository_manage/pojo/StatusInfo.java

@ -0,0 +1,27 @@
package com.dreamchaser.depository_manage.pojo;
import lombok.Data;
/**
* 状态详细信息
* @author 金昊霖
*/
@Data
public class StatusInfo {
/**
* 字段作为接口处理失败时, 给予用户的友好的提示信息, 即所有给用户的提示信息都统一由后端来处理
*/
private String message="";
/**
* 字段用来放置接口处理失败时的详细错误信息. 只是为了方便排查错误, 前端无需使用.
*/
private String detail="";
public StatusInfo() {
}
public StatusInfo(String message, String detail) {
this.message = message;
this.detail = detail;
}
}

106
src/main/java/com/dreamchaser/depository_manage/pojo/UserByPortP.java

@ -0,0 +1,106 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.UserByPort;
import lombok.Data;
@Data
public class UserByPortP {
/**
* id
*/
private Integer id;
/**
* 工号
*/
private String number;
/**
* 姓名
*/
private String name;
/**
* 状态1启用2禁用3删除
*/
private Integer state;
/**
* 性别1男性2女性3中性
*/
private Integer gender;
/**
* 健康状况1良好2一般3较弱4有生理缺陷5残废
*/
private Integer health;
/**
* 手机号码
*/
private String mobilephone;
/**
* 公司名称
*/
private String companyname;
/**
* 主部门
*/
private String maindeparmentname;
/**
* 岗位
*/
private String sunmaindeparmentname;
private String workpostname;
/**
* 职位
*/
private String positionname;
/**
* WMS中权限名称
*/
private String rolename;
/**
* 管理仓库
*/
private String depositoryName;
public UserByPortP(UserByPort userByPort) {
this.id = userByPort.getId();
this.number = userByPort.getNumber();
this.name = userByPort.getName();
this.state = userByPort.getState();
this.gender = userByPort.getGender();
this.health = userByPort.getHealth();
this.mobilephone = userByPort.getMobilephone();
this.companyname = userByPort.getCompanyname();
this.maindeparmentname = userByPort.getMaindeparmentname();
this.sunmaindeparmentname = userByPort.getSunmaindeparmentname();
this.workpostname = userByPort.getWorkpostname();
this.positionname = userByPort.getPositionname();
}
public UserByPortP(String number, String name, Integer state, Integer gender, Integer health, String mobilephone, String companyname, String maindeparmentname, String sunmaindeparmentname, String workpostname, String positionname) {
this.number = number;
this.name = name;
this.state = state;
this.gender = gender;
this.health = health;
this.mobilephone = mobilephone;
this.companyname = companyname;
this.maindeparmentname = maindeparmentname;
this.sunmaindeparmentname = sunmaindeparmentname;
this.workpostname = workpostname;
this.positionname = positionname;
}
}

66
src/main/java/com/dreamchaser/depository_manage/pojo/UserP.java

@ -0,0 +1,66 @@
package com.dreamchaser.depository_manage.pojo;
import com.dreamchaser.depository_manage.entity.Role;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.entity.Role;
import com.dreamchaser.depository_manage.utils.DateUtil;
import lombok.Data;
/**
* user用户类的前端封装类
* @author Dreamchaser
*/
@Data
public class UserP {
/** 用户id */
private Integer id;
/** 用户名称 */
private String uname;
/** 表示权限等级 */
private int authority;
/** 性别 */
private String sex;
/** 负责仓库,序号表示仓库id,0表示全部仓库 */
private Integer depositoryId;
/** 负责仓库的名称 */
private String depositoryName;
/** 入职日期 */
private String entryDate;
/** 邮箱 */
private String email;
/** 手机号 */
private String phone;
/**
* 角色类
*/
private Role role;
/**
* 用户状态
*/
private int state;
public UserP(User user) {
this.id = user.getId();
this.uname = user.getUname();
this.authority = user.getAuthority();
this.sex = user.getSex();
this.depositoryId = user.getDepositoryId();
this.entryDate = DateUtil.getSimpleDate(user.getEntryDate());
this.email = user.getEmail();
this.phone = user.getPhone();
this.role = user.getRole();
this.state = user.getState();
}
}

69
src/main/java/com/dreamchaser/depository_manage/security/bean/LoginRealms.java

@ -0,0 +1,69 @@
package com.dreamchaser.depository_manage.security.bean;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.AuthenticationTokenPool;
import com.dreamchaser.depository_manage.service.UserService;
import com.dreamchaser.depository_manage.utils.Md5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 内置多种登录方式和shiro中的realm类似
* @author 金昊霖
*/
@Component
public class LoginRealms {
@Autowired
private UserService userService;
/**
* 认证如果认证成功则返回凭证否则返回null
* @param userToken 未认证的令牌
* @return 如果认证成功则返回凭证否则返回null
*/
public String authenticate(UserToken userToken){
if (userToken.getCredentials()!=null){
//对密码加密
userToken.setCredentials(Md5.crypt(userToken.getCredentials()));
}
if (userToken.getLoginType().equals(LoginType.EMAIl_PASSWORD)){
return handle(userToken,emailLogin(userToken));
}
//else if (其他登录方式...)
//如果无匹配的认证方式则视为验证失败
return null;
}
/**
* 邮箱登录方式
* @param userToken 令牌
* @return 认证成功返回SimpleUser
*/
private User emailLogin(UserToken userToken){
return userService.findUserById(userToken.getPrincipal());
}
/**
* 根据传入的user是否为null是否认证通过来对令牌做剩下的操作将user刻入令牌并将该令牌放入令牌池中
* @param userToken 经过验证后的令牌
* @return token 根据令牌生成的凭证 如果认证未成功则返回null
*/
private String handle(UserToken userToken,User user){
if (user==null){
//说明账户不存在
throw new MyException(409,"该用户不存在,请注册后再登录!");
}
//判断密码是否正确
if (user.getPwd().equals(userToken.getCredentials())){
//将UserP信息刻入令牌
userToken.setUser(userService.singlePack(user));
//获取token凭证
String token=Md5.crypt(userToken.getPrincipal()+userToken.getInstant());
//将令牌放入认证令牌池
// AuthenticationTokenPool.addToken(token,userToken);
return token;
}
return null;
}
}

66
src/main/java/com/dreamchaser/depository_manage/security/bean/LoginType.java

@ -0,0 +1,66 @@
package com.dreamchaser.depository_manage.security.bean;
/**
* 登录方式枚举类
* @author 金昊霖
*/
public enum LoginType {
/**
* 通用
*/
COMMON("common_realm"),
/**
* 用户密码登录
*/
EMAIl_PASSWORD("user_password_realm"),
/**
* 手机验证码登录
*/
USER_PHONE("user_phone_realm"),
/**
* 第三方登录(微信登录)
*/
WECHAT_LOGIN("wechat_login_realm"),
/**
* 第三方登录(qq登录)
*/
QQ_LOGIN("qq_login_realm");
private String type;
LoginType(String type) {
this.type = type;
}
public String getType() {
return type;
}
/**
* 根据简单的字符串返回对应的LoginType
* @param s 简单的字符串
* @return 对应的LoginType
*/
public static LoginType getType(String s){
switch (s) {
case "email":
return EMAIl_PASSWORD;
case "qq":
return QQ_LOGIN;
case "wechat":
return WECHAT_LOGIN;
case "phone":
return USER_PHONE;
default:
return null;
}
}
@Override
public String toString() {
return this.type;
}
}

88
src/main/java/com/dreamchaser/depository_manage/security/bean/UserToken.java

@ -0,0 +1,88 @@
package com.dreamchaser.depository_manage.security.bean;
import com.dreamchaser.depository_manage.entity.User;
import com.dreamchaser.depository_manage.pojo.UserP;
import lombok.Data;
import java.time.Instant;
/**
* 登录令牌默认有效期为7天
* @author 金昊霖
*/
@Data
public class UserToken{
final long DEFAULT_TERM=60*60*24*7;
/**
* 登录方式
*/
private LoginType loginType;
/**
* 微信qq的code邮箱或者用户名之类的
*/
private String principal;
/**
* 相当于密码一般是加密过的
*/
private String credentials;
/**
* 放入的时间
*/
private Instant instant;
/**
* 有效期(单位)
*/
private long term;
/**
* 可以放一些不敏感的信息,以便下次访问时可以直接取出如果user属性太多可以另外写个类比如SimpleUser
* 存放一些经常需要用到的信息
*/
private UserP User;
/**
* 根据时间判断是否有效
* @return 有效则返回true否则返回false
*/
public boolean isValid(){
return Instant.now().getEpochSecond()-instant.getEpochSecond()<=term;
}
public UserToken(LoginType loginType, String principal, String credentials, Instant instant, long term, UserP user) {
this.loginType = loginType;
this.principal = principal;
this.credentials = credentials;
this.instant = instant;
this.term = term;
this.User = user;
}
public UserToken(LoginType loginType, String principal, String credentials, Instant instant, long term) {
this.loginType = loginType;
this.principal = principal;
this.credentials = credentials;
this.instant = instant;
this.term = term;
}
public UserToken(LoginType loginType, String principal, String credentials) {
this.loginType = loginType;
this.principal = principal;
this.credentials = credentials;
this.instant = Instant.now();
this.term=DEFAULT_TERM;
}
public UserToken(LoginType loginType, String principal) {
this.loginType = loginType;
this.principal = principal;
this.instant=Instant.now();
this.term=DEFAULT_TERM;
}
}

74
src/main/java/com/dreamchaser/depository_manage/security/bean/VerificationCode.java

@ -0,0 +1,74 @@
package com.dreamchaser.depository_manage.security.bean;
import lombok.Data;
import java.time.Instant;
import java.util.Random;
/**
* 验证码默认有效期为五分钟
* @author 金昊霖
*/
@Data
public class VerificationCode {
/**
* 默认持续时间
*/
private final long DEFAULT_TERM=60*5;
/**
* 验证码
*/
private String code;
/**
* 创建时刻
*/
private Instant instant;
/**
* 有效期
*/
private long term;
/**
* 根据时间判断是否有效
* @return boolean值
*/
public boolean isValid(){
return Instant.now().getEpochSecond()-instant.getEpochSecond()<=term;
}
public VerificationCode(Instant instant, long term) {
//生成随机验证码code
generateCode();
this.instant = instant;
this.term = term;
}
public VerificationCode(Instant instant) {
//生成随机验证码code
generateCode();
this.instant = instant;
this.term=DEFAULT_TERM;
}
public VerificationCode() {
//生成随机验证码code
generateCode();
this.instant=Instant.now();
this.term=DEFAULT_TERM;
}
private void generateCode(){
StringBuilder codeNum = new StringBuilder();
int [] numbers = {0,1,2,3,4,5,6,7,8,9};
Random random = new Random();
for (int i = 0; i < 5; i++) {
//目的是产生足够随机的数,避免产生的数字重复率高的问题
int next = random.nextInt(10000);
codeNum.append(numbers[next % 10]);
}
this.code= codeNum.toString();
}
}

76
src/main/java/com/dreamchaser/depository_manage/security/pool/AuthenticationTokenPool.java

@ -0,0 +1,76 @@
package com.dreamchaser.depository_manage.security.pool;
import com.dreamchaser.depository_manage.entity.UserByPort;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 认证后的令牌连接池由于获取全局的session比较麻烦所以自己维护一个类似session的令牌池
* @author 金昊霖
*/
public class AuthenticationTokenPool {
/**
* 认证后的令牌连接池
*/
// private static Map<String, UserToken> pool=new ConcurrentHashMap<>(10);
private static Map<String, UserByPort> pool = new ConcurrentHashMap<>(10);
public static void addToken(String token,UserByPort userToken){
pool.put(token, userToken);
}
/*public static void addToken(String token,UserToken userToken){
pool.put(token, userToken);
}*/
/**
* 根据token凭证获取未过期的令牌如果没有未过期的令牌则返回null
* @param token 凭证
* @return userToken 未过期的令牌
*/
public static UserByPort getToken(String token){
UserByPort userToken=pool.get(token);
//如果没有相应令牌则直接返回null
if (userToken==null){
return null;
}
//判断令牌是否过期
if (userToken != null){
return userToken;
}else{
//清除过期令牌
pool.remove(token);
return null;
}
}
/*public static UserToken getToken(String token){
UserToken userToken=pool.get(token);
//如果没有相应令牌则直接返回null
if (userToken==null){
return null;
}
//判断令牌是否过期
if (userToken.isValid()){
return userToken;
}else{
//清除过期令牌
pool.remove(token);
return null;
}
}
*/
/**
* 根据凭证删除对应的令牌
* @param token 凭证
*/
public static void removeToken(String token){
pool.remove(token);
}
}

54
src/main/java/com/dreamchaser/depository_manage/security/pool/VerificationCodePool.java

@ -0,0 +1,54 @@
package com.dreamchaser.depository_manage.security.pool;
import com.dreamchaser.depository_manage.security.bean.VerificationCode;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* 验证码等待池
* @author 金昊霖
*/
public class VerificationCodePool {
private static Map<String, VerificationCode> pool=new ConcurrentHashMap<>(10);
/**
* 增加一条验证码
* @param principal 主要内容如邮箱电话号码等
* @param verificationCode 验证码
*/
public static void addCode(String principal,VerificationCode verificationCode){
pool.put(principal, verificationCode);
}
/**
* 根据principal主要信息获取未过期的验证码如果没有未过期的令牌则返回null
* @param principal 主要内容如邮箱电话号码等
* @return verificationCode 未过期的验证码或者null
*/
public static VerificationCode getCode(String principal){
VerificationCode verificationCode=pool.get(principal);
//如果没有相应验证码则直接返回null
if (verificationCode==null){
return null;
}
//判断令牌是否过期
if (verificationCode.isValid()){
return verificationCode;
}else{
//清除过期验证码
pool.remove(principal);
return null;
}
}
/**
* 根据主要信息principal删除对应的验证码
* @param principal 主要信息
*/
public static void removeCode(String principal){
pool.remove(principal);
}
}

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

Loading…
Cancel
Save