├── .gitignore ├── .mvn └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── LICENSE ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main ├── java │ └── top │ │ └── fanfpy │ │ └── xiaoyuanxianyu │ │ ├── XiaoyuanxianyuApplication.java │ │ ├── aspect │ │ └── HttpAspect.java │ │ ├── config │ │ ├── AliOss.java │ │ ├── Swagger2.java │ │ └── WxMiniAppConfiguration.java │ │ ├── entity │ │ ├── Classification.java │ │ ├── Comments.java │ │ ├── Goods.java │ │ ├── GoodsImg.java │ │ └── User.java │ │ ├── repository │ │ ├── ClassificationRepository.java │ │ ├── CommentsRepository.java │ │ ├── GoodsImgRepository.java │ │ ├── GoodsRepository.java │ │ └── UserRepository.java │ │ ├── service │ │ ├── ClassificationService.java │ │ ├── CommentsService.java │ │ ├── GoodsImgService.java │ │ ├── GoodsSrevice.java │ │ ├── UserService.java │ │ └── impl │ │ │ ├── ClassificationServiceImpl.java │ │ │ ├── CommentsServiceImpl.java │ │ │ ├── GoodsImgServiceImpl.java │ │ │ ├── GoodsServiceImpl.java │ │ │ └── UserServiceImpl.java │ │ ├── utils │ │ └── ResultUtils.java │ │ ├── vo │ │ ├── ClassVO.java │ │ ├── CommentsInfoVO.java │ │ ├── GoodsInfoVO.java │ │ ├── ResultVO.java │ │ └── UserInfoVO.java │ │ └── web │ │ ├── CommentsController.java │ │ ├── GoodsApiController.java │ │ ├── GoodsImgApiController.java │ │ ├── Index.java │ │ └── UserApiController.java └── resources │ └── application.properties └── test └── java └── top └── fanfpy └── xiaoyuanxianyu ├── XiaoyuanxianyuApplicationTests.java └── repository ├── GoodsImgRepositoryTest.java └── GoodsRepositoryTest.java /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | .sts4-cache 12 | 13 | mvnw 14 | mvnw.cmd 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /build/ 25 | /nbbuild/ 26 | /dist/ 27 | /nbdist/ 28 | /.nb-gradle/ 29 | /fanfpylog/ -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fanfpy/xiaoyuanxianyu/a5055700401fa7917c1ef42ea7f14d8d56555276/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.3/apache-maven-3.5.3-bin.zip 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 二手交易平台 2 | ### SpringBoot+Spring-Data-JPA 3 | 4 | 5 | #API描述 6 | 7 | 8 | 9 | 10 | 11 | **简要描述:** 12 | 13 | - 返回首页需要的数据 热门和最新商品 14 | 15 | **请求URL:** 16 | - ` https://2.fanfpy.top/xianyu/api/goods/new/{num} ` 17 | 18 | ##### 热门商品同例 19 | 20 | - `https://2.fanfpy.top/xianyu/api/goods/hot/{num}` 21 | 22 | **请求方式:** 23 | - GET 24 | 25 | |参数名|必选|类型|说明| 26 | |:---- |:---|:----- |----- | 27 | |num |是 |Integer |列表数量 | 28 | 29 | 30 | **返回示例** 31 | 32 | ``` 33 | { 34 | "code":0, 35 | "msg":"成功", 36 | "data":[ 37 | { 38 | "goodsId": 1, 39 | "userId": 1, 40 | "userName":"fanfpy", 41 | "userImg":"https:xxx.com/xxx.jpg", 42 | "goodsTitlie":"小米mix2s", 43 | "price" : 2999.0, 44 | "date" "2018-05-03 22:39:26" 45 | "status":0, 46 | "pageView":2, 47 | "describle": "描述:一面科技一面艺术", 48 | "goodsImg":[ 49 | "img":"https:xxx.com/xxx.jpg", 50 | "img":"https:xxx.com/xxx.jpg", 51 | "img":"https:xxx.com/xxx.jpg", 52 | ] 53 | }, 54 | { 55 | "goodsId": 2, 56 | "userId": 1, 57 | "userName":"fanfpy", 58 | "userImg":"https:xxx.com/xxx.jpg", 59 | "goodsTitlie":"vivoX20", 60 | "price" : 3999.0, 61 | "date" "2018-05-03 14:22:16" 62 | "status":0, 63 | "pageView":2, 64 | "describle": "两千万柔光双摄,照亮你的美", 65 | "goodsImg":[ 66 | "img":"https:xxx.com/xxx.jpg", 67 | "img":"https:xxx.com/xxx.jpg", 68 | "img":"https:xxx.com/xxx.jpg", 69 | ] 70 | } 71 | ] 72 | } 73 | ``` 74 | 75 | **简要描述:** 76 | - 商品详细页 77 | 78 | **请求url** 79 | 80 | - `https://2.fanfpy.top/xianyu/api/goods/id/{id}` 81 | 82 | **请求类型** 83 | 84 | - GET 85 | 86 | 返回示例 87 | 88 | ```json 89 | { 90 | "code":0, 91 | "msg":"成功", 92 | "data":{ 93 | "goodsId": 1, 94 | "userId": 1, 95 | "userName":"fanfpy", 96 | "userImg":"https:xxx.com/xxx.jpg", 97 | "goodsTitlie":"小米mix2s", 98 | "price" : 2999.0, 99 | "date" "2018-05-03 22:39:26" 100 | "status":0, 101 | "pageView":2, 102 | "describle": "描述:一面科技一面艺术", 103 | "goodsImg":[ 104 | "img":"https:xxx.com/xxx.jpg", 105 | "img":"https:xxx.com/xxx.jpg", 106 | "img":"https:xxx.com/xxx.jpg", 107 | ] 108 | } 109 | } 110 | ``` 111 | 112 | **通过分类id返回商品列表** 113 | 114 | 115 | **请求URL:** 116 | - ` http://2.fanfpy.top/xianyu/api/goods/class/{classId} ` 117 | 118 | **请求方式:** 119 | - GET 120 | 121 | **参数:** 122 | 123 | |参数名|必选|类型|说明| 124 | |:---- |:---|:----- |----- | 125 | |classId |是 |Integer |分类id | 126 | 127 | 128 | **返回示例** 129 | 130 | ``` 131 | { 132 | "code" :0, 133 | "msg":"成功", 134 | "data":[ 135 | { 136 | "goodsId": 2, 137 | "userId": 1, 138 | "userName":"fanfpy", 139 | "userImg":"https:xxx.com/xxx.jpg", 140 | "goodsTitlie":"vivoX20", 141 | "price" : 3999.0, 142 | "date" "2018-05-03 14:22:16" 143 | "status":0, 144 | "pageView":2, 145 | "describle": "两千万柔光双摄,照亮你的美", 146 | "goodsImg":[ 147 | "img":"https:xxx.com/xxx.jpg", 148 | "img":"https:xxx.com/xxx.jpg", 149 | "img":"https:xxx.com/xxx.jpg", 150 | ] 151 | }, 152 | { 153 | "goodsId": 2, 154 | "userId": 1, 155 | "userName":"fanfpy", 156 | "userImg":"https:xxx.com/xxx.jpg", 157 | "goodsTitlie":"vivoX20", 158 | "price" : 3999.0, 159 | "date" "2018-05-03 14:22:16" 160 | "status":0, 161 | "pageView":2, 162 | "describle": "两千万柔光双摄,照亮你的美", 163 | "goodsImg":[ 164 | "img":"https:xxx.com/xxx.jpg", 165 | "img":"https:xxx.com/xxx.jpg", 166 | "img":"https:xxx.com/xxx.jpg", 167 | ] 168 | } 169 | ] 170 | } 171 | } 172 | ``` 173 | 174 | **添加商品** 175 | 176 | |参数名|必选|类型|说明| 177 | |:---- |:---|:----- |----- | 178 | |userId |是 |Integer |用户id | 179 | |classification |是 |Integer |分类id | 180 | |commentNum |是 |Integer |评论数 默认为空 | 181 | |describle |是 |String |商品描述 | 182 | |name |是 |String |价格 | 183 | |status |是 |Integer | 商品状态0为上架 1为下架 | 184 | |pageView |是 |Integer |查看数 默认为0 | 185 | 186 | **添加图片** 187 | 188 | |参数名|必选|类型|说明| 189 | |:---- |:---|:----- |----- | 190 | |goodsId |是 |Integer |商品id | 191 | |file |是 |file |上传的图片 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # http://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven2 Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Migwn, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | # TODO classpath? 118 | fi 119 | 120 | if [ -z "$JAVA_HOME" ]; then 121 | javaExecutable="`which javac`" 122 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 123 | # readlink(1) is not available as standard on Solaris 10. 124 | readLink=`which readlink` 125 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 126 | if $darwin ; then 127 | javaHome="`dirname \"$javaExecutable\"`" 128 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 129 | else 130 | javaExecutable="`readlink -f \"$javaExecutable\"`" 131 | fi 132 | javaHome="`dirname \"$javaExecutable\"`" 133 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 134 | JAVA_HOME="$javaHome" 135 | export JAVA_HOME 136 | fi 137 | fi 138 | fi 139 | 140 | if [ -z "$JAVACMD" ] ; then 141 | if [ -n "$JAVA_HOME" ] ; then 142 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 143 | # IBM's JDK on AIX uses strange locations for the executables 144 | JAVACMD="$JAVA_HOME/jre/sh/java" 145 | else 146 | JAVACMD="$JAVA_HOME/bin/java" 147 | fi 148 | else 149 | JAVACMD="`which java`" 150 | fi 151 | fi 152 | 153 | if [ ! -x "$JAVACMD" ] ; then 154 | echo "Error: JAVA_HOME is not defined correctly." >&2 155 | echo " We cannot execute $JAVACMD" >&2 156 | exit 1 157 | fi 158 | 159 | if [ -z "$JAVA_HOME" ] ; then 160 | echo "Warning: JAVA_HOME environment variable is not set." 161 | fi 162 | 163 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 164 | 165 | # traverses directory structure from process work directory to filesystem root 166 | # first directory with .mvn subdirectory is considered project base directory 167 | find_maven_basedir() { 168 | 169 | if [ -z "$1" ] 170 | then 171 | echo "Path not specified to find_maven_basedir" 172 | return 1 173 | fi 174 | 175 | basedir="$1" 176 | wdir="$1" 177 | while [ "$wdir" != '/' ] ; do 178 | if [ -d "$wdir"/.mvn ] ; then 179 | basedir=$wdir 180 | break 181 | fi 182 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 183 | if [ -d "${wdir}" ]; then 184 | wdir=`cd "$wdir/.."; pwd` 185 | fi 186 | # end of workaround 187 | done 188 | echo "${basedir}" 189 | } 190 | 191 | # concatenates all lines of a file 192 | concat_lines() { 193 | if [ -f "$1" ]; then 194 | echo "$(tr -s '\n' ' ' < "$1")" 195 | fi 196 | } 197 | 198 | BASE_DIR=`find_maven_basedir "$(pwd)"` 199 | if [ -z "$BASE_DIR" ]; then 200 | exit 1; 201 | fi 202 | 203 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 204 | echo $MAVEN_PROJECTBASEDIR 205 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 206 | 207 | # For Cygwin, switch paths to Windows format before running java 208 | if $cygwin; then 209 | [ -n "$M2_HOME" ] && 210 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 211 | [ -n "$JAVA_HOME" ] && 212 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 213 | [ -n "$CLASSPATH" ] && 214 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 215 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 216 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 217 | fi 218 | 219 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 220 | 221 | exec "$JAVACMD" \ 222 | $MAVEN_OPTS \ 223 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 224 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 225 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 226 | -------------------------------------------------------------------------------- /mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM http://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven2 Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' 39 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 40 | 41 | @REM set %HOME% to equivalent of $HOME 42 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 43 | 44 | @REM Execute a user defined script before this one 45 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 46 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 47 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 48 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 49 | :skipRcPre 50 | 51 | @setlocal 52 | 53 | set ERROR_CODE=0 54 | 55 | @REM To isolate internal variables from possible post scripts, we use another setlocal 56 | @setlocal 57 | 58 | @REM ==== START VALIDATION ==== 59 | if not "%JAVA_HOME%" == "" goto OkJHome 60 | 61 | echo. 62 | echo Error: JAVA_HOME not found in your environment. >&2 63 | echo Please set the JAVA_HOME variable in your environment to match the >&2 64 | echo location of your Java installation. >&2 65 | echo. 66 | goto error 67 | 68 | :OkJHome 69 | if exist "%JAVA_HOME%\bin\java.exe" goto init 70 | 71 | echo. 72 | echo Error: JAVA_HOME is set to an invalid directory. >&2 73 | echo JAVA_HOME = "%JAVA_HOME%" >&2 74 | echo Please set the JAVA_HOME variable in your environment to match the >&2 75 | echo location of your Java installation. >&2 76 | echo. 77 | goto error 78 | 79 | @REM ==== END VALIDATION ==== 80 | 81 | :init 82 | 83 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 84 | @REM Fallback to current working directory if not found. 85 | 86 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 87 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 88 | 89 | set EXEC_DIR=%CD% 90 | set WDIR=%EXEC_DIR% 91 | :findBaseDir 92 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 93 | cd .. 94 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 95 | set WDIR=%CD% 96 | goto findBaseDir 97 | 98 | :baseDirFound 99 | set MAVEN_PROJECTBASEDIR=%WDIR% 100 | cd "%EXEC_DIR%" 101 | goto endDetectBaseDir 102 | 103 | :baseDirNotFound 104 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 105 | cd "%EXEC_DIR%" 106 | 107 | :endDetectBaseDir 108 | 109 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 110 | 111 | @setlocal EnableExtensions EnableDelayedExpansion 112 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 113 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 114 | 115 | :endReadAdditionalConfig 116 | 117 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 118 | 119 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 120 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 121 | 122 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 123 | if ERRORLEVEL 1 goto error 124 | goto end 125 | 126 | :error 127 | set ERROR_CODE=1 128 | 129 | :end 130 | @endlocal & set ERROR_CODE=%ERROR_CODE% 131 | 132 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 133 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 134 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 135 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 136 | :skipRcPost 137 | 138 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 139 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 140 | 141 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 142 | 143 | exit /B %ERROR_CODE% 144 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | top.fanfpy 7 | xiaoyuanxianyu 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | 12 | xiaoyuanxianyu 13 | Demo project for Spring Boot 14 | 15 | 16 | org.springframework.boot 17 | spring-boot-starter-parent 18 | 2.2.2.RELEASE 19 | 20 | 21 | 22 | 23 | 24 | 25 | junit 26 | junit 27 | 4.12 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-web 33 | 34 | 35 | 36 | 37 | org.springframework.boot 38 | spring-boot-starter 39 | 40 | 41 | 42 | org.springframework.boot 43 | spring-boot-starter-test 44 | test 45 | 46 | 47 | 48 | org.springframework.boot 49 | spring-boot-starter-data-jpa 50 | 51 | 52 | 53 | mysql 54 | mysql-connector-java 55 | 5.1.42 56 | 57 | 58 | 59 | 60 | org.springframework.boot 61 | spring-boot-devtools 62 | true 63 | 64 | 65 | 66 | 67 | org.springframework.boot 68 | spring-boot-starter-aop 69 | 70 | 71 | 72 | 73 | com.github.binarywang 74 | weixin-java-miniapp 75 | 3.3.0 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | com.spring4all 91 | swagger-spring-boot-starter 92 | 1.9.0.RELEASE 93 | 94 | 95 | 96 | 97 | com.aliyun.oss 98 | aliyun-sdk-oss 99 | 2.8.3 100 | 101 | 102 | 103 | cn.hutool 104 | hutool-all 105 | 4.1.19 106 | 107 | 108 | 109 | org.projectlombok 110 | lombok 111 | 1.18.10 112 | provided 113 | 114 | 115 | 116 | 117 | xiaoyuanxianyu 118 | 119 | 120 | org.springframework.boot 121 | spring-boot-maven-plugin 122 | 123 | 124 | true 125 | true 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/XiaoyuanxianyuApplication.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 6 | 7 | @EnableSwagger2 8 | @SpringBootApplication 9 | public class XiaoyuanxianyuApplication { 10 | public static void main(String[] args) { 11 | SpringApplication.run(XiaoyuanxianyuApplication.class, args); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/aspect/HttpAspect.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.aspect; 2 | 3 | import org.aspectj.lang.JoinPoint; 4 | import org.aspectj.lang.annotation.*; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | import org.springframework.stereotype.Component; 8 | import org.springframework.web.context.request.RequestContextHolder; 9 | import org.springframework.web.context.request.ServletRequestAttributes; 10 | 11 | import javax.servlet.http.HttpServletRequest; 12 | 13 | @Aspect 14 | //@Component 15 | public class HttpAspect { 16 | 17 | private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class); 18 | 19 | @Pointcut("execution(public * top.fanfpy.xiaoyuanxianyu.web(..))") 20 | public void log(){ 21 | } 22 | 23 | //启动前 24 | @Before("log()") 25 | 26 | public void doBefore(JoinPoint joinPoint){ 27 | ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 28 | HttpServletRequest request=attributes.getRequest(); 29 | //url 30 | logger.info("url={}",request.getRequestURI()); 31 | //method 32 | logger.info("method={}", request.getMethod()); 33 | //ip 34 | logger.info("ip={}",request.getRemoteAddr()); 35 | 36 | logger.info("args={}",joinPoint.getArgs()); 37 | } 38 | 39 | //启动后 40 | 41 | @After("log()") 42 | public void doAfter(){ 43 | 44 | } 45 | 46 | //返回参数 47 | 48 | @AfterReturning(returning = "object" , pointcut = "log()") 49 | public void doAfterReturning(Object object){ 50 | logger.info("response={}",object); 51 | } 52 | } 53 | 54 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/config/AliOss.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.config; 2 | 3 | import cn.hutool.core.date.DateUtil; 4 | import org.springframework.context.annotation.Configuration; 5 | import com.aliyun.oss.OSSClient; 6 | import org.springframework.beans.factory.annotation.Value; 7 | import org.springframework.stereotype.Component; 8 | import java.io.InputStream; 9 | 10 | @Component 11 | @Configuration 12 | public class AliOss { 13 | 14 | @Value("${endpoint}") 15 | private String endpoint; 16 | 17 | @Value("${accessKeyId}") 18 | private String accessKeyId; 19 | 20 | @Value("${accessKeySecret}") 21 | private String accessKeySecret; 22 | 23 | @Value("${bucketName}") 24 | private String bucketName; 25 | 26 | public OSSClient ossClient(){ 27 | return new OSSClient(this.endpoint,this.accessKeyId,this.accessKeySecret); 28 | } 29 | 30 | /** 31 | * 文件流和文件名 32 | * return 文件路径 33 | * */ 34 | public String updateImg(InputStream inputStream, String fileName){ 35 | long time = System.currentTimeMillis(); 36 | ossClient().putObject(this.bucketName, DateUtil.today() +"/"+time+fileName,inputStream); 37 | return "https://" +this.bucketName+"." +this.endpoint + "/" + DateUtil.today() +"/"+time+fileName; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/config/Swagger2.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import springfox.documentation.builders.ApiInfoBuilder; 6 | import springfox.documentation.builders.PathSelectors; 7 | import springfox.documentation.builders.RequestHandlerSelectors; 8 | import springfox.documentation.service.ApiInfo; 9 | import springfox.documentation.spi.DocumentationType; 10 | import springfox.documentation.spring.web.plugins.Docket; 11 | import springfox.documentation.swagger2.annotations.EnableSwagger2; 12 | 13 | //废弃 使用starter版 14 | //@Configuration 15 | //@EnableSwagger2 16 | public class Swagger2 { 17 | 18 | // @Bean 19 | // public Docket createRestApi() { 20 | // return new Docket(DocumentationType.SWAGGER_2) 21 | // .apiInfo(apiInfo()) 22 | // .select() 23 | // .apis(RequestHandlerSelectors.basePackage("top.fanfpy.xiaoyuanxianyu.web")) 24 | // .paths(PathSelectors.any()) 25 | // .build(); 26 | // } 27 | // 28 | // private ApiInfo apiInfo() { 29 | // return new ApiInfoBuilder() 30 | // .title("Spring Boot中使用Swagger2构建RESTful APIs") 31 | // .description("") 32 | // .version("1.0") 33 | // .build(); 34 | // } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/config/WxMiniAppConfiguration.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.config; 2 | 3 | import cn.binarywang.wx.miniapp.api.WxMaService; 4 | import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; 5 | import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig; 6 | import org.slf4j.Logger; 7 | import org.slf4j.LoggerFactory; 8 | import org.springframework.beans.factory.annotation.Value; 9 | import org.springframework.context.annotation.Bean; 10 | import org.springframework.context.annotation.Configuration; 11 | 12 | 13 | @Configuration 14 | public class WxMiniAppConfiguration { 15 | 16 | private Logger log = LoggerFactory.getLogger(WxMiniAppConfiguration.class); 17 | /** 18 | * 设置微信小程序的appid 19 | */ 20 | @Value("${wx.miniapp.appid}") 21 | private String appid; 22 | 23 | /** 24 | * 设置微信小程序的Secret 25 | */ 26 | @Value("${wx.miniapp.secret}") 27 | private String secret; 28 | 29 | /** 30 | * 设置微信小程序消息服务器配置的token 31 | */ 32 | @Value("${wx.miniapp.token}") 33 | private String token; 34 | 35 | /** 36 | * 设置微信小程序消息服务器配置的EncodingAESKey 37 | */ 38 | @Value("${wx.miniapp.aesKey}") 39 | private String aesKey; 40 | 41 | /** 42 | * 消息格式,XML或者JSON 43 | */ 44 | @Value("${wx.miniapp.msgDataFormat}") 45 | private String msgDataFormat; 46 | 47 | @Bean 48 | public WxMaInMemoryConfig WxConfig() { 49 | WxMaInMemoryConfig config = new WxMaInMemoryConfig(); 50 | config.setAppid(this.appid); 51 | config.setSecret(this.secret); 52 | config.setToken(this.token); 53 | config.setAesKey(this.aesKey); 54 | config.setMsgDataFormat(this.msgDataFormat); 55 | return config; 56 | } 57 | 58 | @Bean 59 | public WxMaService Service() { 60 | WxMaService service = new WxMaServiceImpl(); 61 | service.setWxMaConfig(WxConfig()); 62 | return service; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/entity/Classification.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.entity; 2 | 3 | import lombok.Data; 4 | import org.hibernate.validator.constraints.Length; 5 | 6 | import javax.persistence.*; 7 | import javax.validation.constraints.*; 8 | 9 | /** 10 | * 分类表 11 | * @author fanfp 12 | * @date 2018/4/22 13 | * */ 14 | @Data 15 | @Entity(name = "classification") 16 | public class Classification { 17 | @Id 18 | @GeneratedValue(strategy = GenerationType.IDENTITY) 19 | private Integer id; 20 | 21 | @NotNull(message = "分类名") 22 | @Length(max = 10) 23 | private String name; 24 | 25 | @NotNull(message = "该分类下商品数量") 26 | private Integer number; 27 | 28 | @NotNull(message = "状态0 正常 1暂停") 29 | private Byte status; 30 | 31 | public Classification(){ 32 | } 33 | 34 | public Classification(@NotNull(message = "分类名") @Length(max = 10) String name, @NotNull(message = "该分类下商品数量") Integer number, @NotNull(message = "状态0 正常 1暂停") Byte status) { 35 | this.name = name; 36 | this.number = number; 37 | this.status = status; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/entity/Comments.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.entity; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.*; 6 | import javax.validation.constraints.NotNull; 7 | 8 | /** 9 | * @author fanfpy 10 | * @date 2018/4/23 11 | * */ 12 | @Data 13 | @Entity(name = "comments") 14 | public class Comments { 15 | @Id 16 | @GeneratedValue(strategy = GenerationType.IDENTITY) 17 | private Integer id; 18 | 19 | private Integer userId; 20 | 21 | private Integer goodsId; 22 | 23 | 24 | private String content; 25 | 26 | @Column(name = "create_at") 27 | private String date; 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/entity/Goods.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.entity; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.*; 6 | import javax.validation.constraints.NotNull; 7 | import java.math.BigDecimal; 8 | 9 | /** 10 | * 商品表 11 | * @author fanfp 12 | * @date 2018/4/23 13 | * */ 14 | @Data 15 | @Entity 16 | @Table(name = "goods") 17 | public class Goods { 18 | @Id 19 | @GeneratedValue(strategy = GenerationType.IDENTITY) 20 | private Integer id; 21 | 22 | private Integer userId; 23 | 24 | private Integer classificationId; 25 | 26 | private Integer commetNum; 27 | 28 | private String describle; 29 | 30 | private String name; 31 | 32 | private BigDecimal price; 33 | 34 | private byte status; 35 | 36 | private Integer pageView; 37 | 38 | private String updateTime; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/entity/GoodsImg.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.entity; 2 | 3 | import lombok.Data; 4 | 5 | import javax.persistence.*; 6 | 7 | /** 8 | * @author fanfp 9 | * */ 10 | @Data 11 | @Entity 12 | @Table(name = "goods_img") 13 | public class GoodsImg { 14 | @Id 15 | @GeneratedValue(strategy = GenerationType.IDENTITY) 16 | private Integer id; 17 | 18 | private Integer goodsId; 19 | 20 | private String imgUrl; 21 | 22 | public GoodsImg() { 23 | } 24 | 25 | public GoodsImg(Integer goodsId, String imgUrl) { 26 | this.goodsId = goodsId; 27 | this.imgUrl = imgUrl; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/entity/User.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.entity; 2 | 3 | import lombok.Data; 4 | import org.hibernate.validator.constraints.Length; 5 | 6 | import javax.persistence.*; 7 | import javax.validation.constraints.Email; 8 | import javax.validation.constraints.NotNull; 9 | import java.util.Random; 10 | 11 | /** 12 | * @author fanfp 13 | * @date 2018/04/19 14 | * User实体类 15 | * */ 16 | @Data 17 | @Entity(name = "user") 18 | public class User { 19 | 20 | /** 21 | * GeneratedValue(strategy = GenerationType.IDENTITY) 表示自增长方式使用mysql自带的 22 | * */ 23 | @Id 24 | @GeneratedValue(strategy = GenerationType.IDENTITY) 25 | private Integer id; 26 | 27 | private String phone; 28 | 29 | @NotNull(message = "用户名不能为空") 30 | private String username; 31 | 32 | private String password; 33 | 34 | private String qq; 35 | 36 | private String email; 37 | 38 | private String openid; 39 | 40 | private Integer goodsNum = 0; 41 | 42 | 43 | @NotNull(message = "权限值默认为10") 44 | private Byte power = 0; 45 | 46 | 47 | @NotNull(message = "是否冻结默认为0,1为未激活,2为封禁") 48 | private Byte status = 0; 49 | 50 | @Column(name = "user_img") 51 | @NotNull(message = "用户头像") 52 | private String userImg; 53 | 54 | 55 | public Integer getId() { 56 | new Random().nextInt(); 57 | return id; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/repository/ClassificationRepository.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import top.fanfpy.xiaoyuanxianyu.entity.Classification; 5 | /** 6 | * @date 2018/5/16 7 | * @author fanfp 8 | * */ 9 | public interface ClassificationRepository extends JpaRepository { 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/repository/CommentsRepository.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import top.fanfpy.xiaoyuanxianyu.entity.Comments; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * @author fanfp 10 | * @date 2018/5.16 11 | * */ 12 | public interface CommentsRepository extends JpaRepository { 13 | 14 | /** 15 | * @param goodsId 商品id 16 | * @return 返回评论表 17 | * */ 18 | List findAllByGoodsId(Integer goodsId); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/repository/GoodsImgRepository.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.springframework.data.domain.Pageable; 4 | import org.springframework.data.jpa.repository.JpaRepository; 5 | import org.springframework.data.jpa.repository.Query; 6 | import org.springframework.data.repository.query.Param; 7 | import org.springframework.stereotype.Repository; 8 | import top.fanfpy.xiaoyuanxianyu.entity.GoodsImg; 9 | 10 | import java.util.List; 11 | /** 12 | * @author fanfp 13 | * */ 14 | public interface GoodsImgRepository extends JpaRepository { 15 | /** 16 | * @param goodsId 商品id 17 | * @return 返回商品对应的图片 18 | * */ 19 | List findByGoodsId(Integer goodsId, Pageable pageable); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/repository/GoodsRepository.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.data.domain.Page; 6 | import org.springframework.data.domain.Pageable; 7 | import org.springframework.data.jpa.repository.JpaRepository; 8 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * @author fanfp 14 | * */ 15 | public interface GoodsRepository extends JpaRepository { 16 | 17 | /** 18 | * 通过分类id查询 19 | * @param classifiactionId 商品分类id 20 | * @return 返回商品列表 21 | * */ 22 | List findByClassificationId(Integer classifiactionId); 23 | 24 | 25 | List findByUserId(Integer userId); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/repository/UserRepository.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.springframework.data.jpa.repository.JpaRepository; 4 | import org.springframework.data.jpa.repository.Query; 5 | import org.springframework.data.repository.query.Param; 6 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 7 | import top.fanfpy.xiaoyuanxianyu.entity.User; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * @author fanfp 13 | * @date 2018/4/19 14 | * */ 15 | public interface UserRepository extends JpaRepository { 16 | 17 | // List findByUsername(String username); 18 | /** 19 | * 通过name查询 20 | * @param username 用户名 21 | * @return 用户列表 22 | * */ 23 | User findByUsername(String username); 24 | 25 | /** 26 | * @param username 用户名 27 | * @param password 密码 28 | * @return 返回用户 否则为空 29 | * */ 30 | User findByUsernameAndPassword(String username , String password); 31 | 32 | 33 | /** 34 | * @param openid 35 | * @return 返回user 36 | * */ 37 | User findByOpenid(String openid); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/ClassificationService.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service; 2 | 3 | import top.fanfpy.xiaoyuanxianyu.entity.Classification; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author fanfp 9 | * @date 18/4/23 10 | * */ 11 | public interface ClassificationService { 12 | 13 | /** 14 | * 返回分类列表 15 | * @return 返回分类列表 16 | * */ 17 | List listClassification(); 18 | 19 | /**通过id删除分类 20 | * @param id 分类id 21 | * */ 22 | void delClassification(Integer id); 23 | 24 | 25 | /** 26 | * @param classification 分类 27 | * @return 返回增加列表的信息 28 | * 保存分类 29 | * */ 30 | Classification save(Classification classification); 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/CommentsService.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service; 2 | 3 | import top.fanfpy.xiaoyuanxianyu.entity.Comments; 4 | 5 | import java.util.List; 6 | 7 | /** 8 | * @author fanfp 9 | * @date 18/4/23 10 | * */ 11 | public interface CommentsService { 12 | /** 13 | *增加评论 商品品论字段下自增1 14 | * @return 返回评论 15 | * @param comments 评论 16 | * */ 17 | Comments addComment(Comments comments); 18 | 19 | /** 20 | * 删除评论 21 | * @param id 评论id 22 | * */ 23 | void delComment(Integer id); 24 | 25 | /** 26 | * @param goodsId 商品id 27 | * @return 评论 28 | * */ 29 | List getCommentByGoodsId(Integer goodsId); 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/GoodsImgService.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service; 2 | 3 | import top.fanfpy.xiaoyuanxianyu.entity.GoodsImg; 4 | 5 | import java.util.List; 6 | /** 7 | * @author fanfp 8 | * */ 9 | public interface GoodsImgService { 10 | /** 11 | * @param goodsId 商品id 12 | * @return 返回商品图片列表 13 | *通过商品id查询 14 | * */ 15 | List finaByGoodsId(Integer goodsId); 16 | 17 | /** 18 | * @param goodsImg 图片对象 19 | * */ 20 | GoodsImg save(GoodsImg goodsImg); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/GoodsSrevice.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service; 2 | 3 | import top.fanfpy.xiaoyuanxianyu.vo.GoodsInfoVO; 4 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 5 | import org.springframework.data.domain.Page; 6 | import org.springframework.data.domain.Pageable; 7 | 8 | import java.util.List; 9 | import java.util.Optional; 10 | /** 11 | * @author fanfp 12 | * */ 13 | public interface GoodsSrevice { 14 | 15 | 16 | /** 17 | * 查询所有商品 18 | * @return 返回集合 19 | * */ 20 | List listGoods(); 21 | 22 | /** 23 | * @param goods 24 | *增加商品 且增加所在分类下的数字 用户对应的上架数量 25 | * */ 26 | Goods saveGood(Goods goods); 27 | 28 | /** 29 | * @param goods 商品对象 30 | * */ 31 | Goods upGoods(Goods goods); 32 | /** 33 | * 删除商品 34 | * @param id 商品id 35 | * */ 36 | void delGoods(Integer id); 37 | 38 | /** 39 | * 分页查询所有商品 40 | * @param pageable 41 | * @return 返回页 42 | * */ 43 | Page findAll(Pageable pageable); 44 | 45 | List findallGood(); 46 | 47 | /** 48 | * 通过id查商品 49 | * */ 50 | Optional findById(Integer id); 51 | 52 | /**通过分类 返回商品数组 53 | * @return 商品数组 54 | * */ 55 | List findByClassifiaction(Integer classifiactionId); 56 | 57 | /** 58 | * 分页查询热门商品 59 | * @return 商品页 60 | 61 | * */ 62 | Page findByHotGoods(Integer page); 63 | 64 | /** 65 | * 分页查询id倒序 66 | * @return 商品页 67 | 68 | * */ 69 | Page findByNewGoods(Integer page); 70 | 71 | /** 72 | * @date 2018/6/6 73 | *直接返回页面所需要的商品信息 包括用户头像 商品图片 减少Controller的复杂程度 74 | * 因预览页和详情页(预览页最多三张图片) 显示图片的数量不同 所以增加了imgMun 75 | * @param goodsId 商品id 76 | * @param imgNum 图片数量 77 | * */ 78 | GoodsInfoVO GoodsInfo(Integer goodsId,Integer imgNum); 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/UserService.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service; 2 | 3 | 4 | import top.fanfpy.xiaoyuanxianyu.entity.User; 5 | 6 | import java.util.List; 7 | import java.util.Optional; 8 | 9 | /** 10 | * @author fanfp 11 | * @date 2018/4/23 12 | * */ 13 | public interface UserService { 14 | /** 15 | * 登陆 16 | * @param username 用户名 17 | * @param password 密码 18 | * @return user 19 | * */ 20 | User login(String username, String password); 21 | 22 | /** 23 | * @param user 用户 24 | * @return 返回user 25 | * 保存修改用户 26 | * */ 27 | User save(User user); 28 | 29 | /** 30 | * 通过id删除用户 31 | * @param id 用户id 32 | * */ 33 | void delUser(Integer id); 34 | 35 | /** 36 | * @param id 用户ID 37 | * 通过id查询用户 38 | * */ 39 | Optional finaUserId(Integer id); 40 | 41 | /** 42 | * @param openid 微信openid 43 | *通过openid查询用户 44 | * */ 45 | User findByOpenid(String openid); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/impl/ClassificationServiceImpl.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import top.fanfpy.xiaoyuanxianyu.entity.Classification; 6 | import top.fanfpy.xiaoyuanxianyu.repository.ClassificationRepository; 7 | import top.fanfpy.xiaoyuanxianyu.service.ClassificationService; 8 | 9 | import java.util.List; 10 | /** 11 | * @author fanfp 12 | * @date 18/4/23 13 | * */ 14 | @Service 15 | public class ClassificationServiceImpl implements ClassificationService { 16 | 17 | @Autowired 18 | ClassificationRepository classificationRepository; 19 | @Override 20 | public List listClassification() { 21 | return classificationRepository.findAll(); 22 | } 23 | 24 | 25 | @Override 26 | public void delClassification(Integer id) { 27 | classificationRepository.deleteById(id); 28 | } 29 | 30 | @Override 31 | public Classification save(Classification classification) { 32 | return classificationRepository.save(classification); 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/impl/CommentsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import top.fanfpy.xiaoyuanxianyu.entity.Comments; 6 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 7 | import top.fanfpy.xiaoyuanxianyu.repository.CommentsRepository; 8 | import top.fanfpy.xiaoyuanxianyu.repository.GoodsRepository; 9 | import top.fanfpy.xiaoyuanxianyu.service.CommentsService; 10 | 11 | import java.util.List; 12 | import java.util.Optional; 13 | /** 14 | * @date 2018/5/16 15 | * @author fanfp 16 | * */ 17 | @Service 18 | public class CommentsServiceImpl implements CommentsService { 19 | 20 | @Autowired 21 | CommentsRepository commentsRepository; 22 | @Autowired 23 | GoodsRepository goodsRepository; 24 | 25 | @Override 26 | public Comments addComment(Comments comments) { 27 | //取出对应的商品对象 28 | Goods good = goodsRepository.findById(comments.getGoodsId()).get(); 29 | //商品评论字段加一 30 | good.setCommetNum(good.getCommetNum()+1); 31 | goodsRepository.save(good); 32 | return commentsRepository.save(comments); 33 | } 34 | 35 | @Override 36 | public void delComment(Integer id) { 37 | commentsRepository.deleteById(id); 38 | } 39 | 40 | @Override 41 | public List getCommentByGoodsId(Integer goodsId) { 42 | return commentsRepository.findAllByGoodsId(goodsId); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/impl/GoodsImgServiceImpl.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import top.fanfpy.xiaoyuanxianyu.entity.GoodsImg; 6 | import top.fanfpy.xiaoyuanxianyu.repository.GoodsImgRepository; 7 | import top.fanfpy.xiaoyuanxianyu.service.GoodsImgService; 8 | 9 | import java.util.List; 10 | /** 11 | * @author fanfp 12 | * */ 13 | @Service 14 | public class GoodsImgServiceImpl implements GoodsImgService { 15 | 16 | @Autowired 17 | GoodsImgRepository goodsImgRepository; 18 | 19 | @Override 20 | public List finaByGoodsId(Integer goodsId) { 21 | return goodsImgRepository.findByGoodsId(goodsId,null); 22 | } 23 | 24 | @Override 25 | public GoodsImg save(GoodsImg goodsImg) { 26 | return goodsImgRepository.save(goodsImg); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/impl/GoodsServiceImpl.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.data.domain.PageRequest; 5 | import org.springframework.data.domain.Sort; 6 | import org.springframework.stereotype.Service; 7 | import top.fanfpy.xiaoyuanxianyu.vo.GoodsInfoVO; 8 | import top.fanfpy.xiaoyuanxianyu.entity.Classification; 9 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 10 | import top.fanfpy.xiaoyuanxianyu.entity.GoodsImg; 11 | import top.fanfpy.xiaoyuanxianyu.entity.User; 12 | import top.fanfpy.xiaoyuanxianyu.repository.ClassificationRepository; 13 | import top.fanfpy.xiaoyuanxianyu.repository.GoodsImgRepository; 14 | import top.fanfpy.xiaoyuanxianyu.repository.GoodsRepository; 15 | import top.fanfpy.xiaoyuanxianyu.repository.UserRepository; 16 | import top.fanfpy.xiaoyuanxianyu.service.GoodsSrevice; 17 | import org.springframework.data.domain.Page; 18 | import org.springframework.data.domain.Pageable; 19 | 20 | import java.util.ArrayList; 21 | import java.util.List; 22 | import java.util.Optional; 23 | 24 | /** 25 | * @author fanfp 26 | * */ 27 | @Service 28 | public class GoodsServiceImpl implements GoodsSrevice { 29 | 30 | 31 | @Autowired 32 | private GoodsRepository goodsRepository; 33 | @Autowired 34 | private ClassificationRepository classificationRepository; 35 | @Autowired 36 | private UserRepository userRepository; 37 | @Autowired 38 | private GoodsImgRepository goodsImgRepository; 39 | 40 | @Override 41 | public List listGoods() { 42 | return goodsRepository.findAll(); 43 | } 44 | 45 | @Override 46 | public void delGoods(Integer id) { 47 | goodsRepository.deleteById(id); 48 | } 49 | 50 | @Override 51 | public Goods saveGood(Goods goods) { 52 | //取出对应的类目 53 | Classification classification = classificationRepository.findById(goods.getClassificationId()).get(); 54 | //字段加1 55 | classification.setNumber(classification.getNumber()+1); 56 | classificationRepository.save(classification); 57 | 58 | //取出对应字段的用户 59 | User user= userRepository.findById(goods.getUserId()).get(); 60 | //加一 61 | user.setGoodsNum(user.getGoodsNum()+1); 62 | userRepository.save(user); 63 | return goodsRepository.save(goods); 64 | } 65 | 66 | @Override 67 | public Goods upGoods(Goods goods) { 68 | return goodsRepository.save(goods); 69 | } 70 | 71 | @Override 72 | public Page findAll(Pageable pageable) { 73 | return goodsRepository.findAll(pageable); 74 | } 75 | 76 | @Override 77 | public List findallGood() { 78 | return goodsRepository.findAll(); 79 | } 80 | 81 | @Override 82 | public Optional findById(Integer id) { 83 | return goodsRepository.findById(id); 84 | } 85 | 86 | @Override 87 | public List findByClassifiaction(Integer classifiactionId) { 88 | return goodsRepository.findByClassificationId(classifiactionId); 89 | } 90 | 91 | 92 | @Override 93 | public Page findByHotGoods(Integer page) { 94 | //分页方法 95 | Pageable pageable =PageRequest.of(0,page,Sort.Direction.DESC,"PageView"); 96 | return goodsRepository.findAll(pageable); 97 | } 98 | 99 | @Override 100 | public Page findByNewGoods(Integer page) { 101 | Pageable pageable =PageRequest.of(0,page,Sort.Direction.DESC,"Id"); 102 | return goodsRepository.findAll(pageable); 103 | } 104 | 105 | @Override 106 | public GoodsInfoVO GoodsInfo(Integer goodsId, Integer imgNum) { 107 | /** 108 | * @date 2018/6/6 109 | * 创建goodsInfo对象 通过商品id获取 goods对象 获取 商品图片 110 | * 通过goods 获取 用户id 获取用户名 头像 111 | * 然后一次添加到GoodsInfo 112 | */ 113 | GoodsInfoVO goodsInfoVO = new GoodsInfoVO(); 114 | List stringList = new ArrayList<>(); 115 | 116 | //查询对应的商品 117 | Goods goods = goodsRepository.findById(goodsId).get(); 118 | //对应的用户 119 | User user = userRepository.findById(goods.getUserId()).get(); 120 | 121 | //对应商品的图片 122 | 123 | goodsImgRepository.findByGoodsId(goodsId,PageRequest.of(0,3)).forEach(e->stringList.add(e.getImgUrl())); 124 | 125 | goodsInfoVO.setGoodsId(goods.getId()); 126 | goodsInfoVO.setUserId(goods.getUserId()); 127 | goodsInfoVO.setUserName(user.getUsername()); 128 | goodsInfoVO.setUserImg(user.getUserImg()); 129 | goodsInfoVO.setGoodsTitle(goods.getName()); 130 | goodsInfoVO.setPrice(goods.getPrice()); 131 | goodsInfoVO.setPageView(goods.getPageView()); 132 | goodsInfoVO.setStatus(goods.getStatus()); 133 | goodsInfoVO.setDescrible(goods.getDescrible()); 134 | goodsInfoVO.setUpdateTime(goods.getUpdateTime()); 135 | goodsInfoVO.setGoodsImgList(stringList); 136 | 137 | return goodsInfoVO; 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/service/impl/UserServiceImpl.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.service.impl; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.stereotype.Service; 5 | import top.fanfpy.xiaoyuanxianyu.entity.User; 6 | import top.fanfpy.xiaoyuanxianyu.repository.UserRepository; 7 | import top.fanfpy.xiaoyuanxianyu.service.UserService; 8 | 9 | import java.util.List; 10 | import java.util.Optional; 11 | 12 | /** 13 | * @author fanfp 14 | * @date 2018/4/23 15 | * */ 16 | @Service 17 | public class UserServiceImpl implements UserService{ 18 | 19 | @Autowired 20 | private UserRepository userRepository; 21 | 22 | @Override 23 | public User login(String username, String password) { 24 | return userRepository.findByUsernameAndPassword(username,password); 25 | } 26 | 27 | @Override 28 | public User save(User user) { 29 | return userRepository.save(user); 30 | } 31 | 32 | @Override 33 | public void delUser(Integer id) { 34 | userRepository.deleteById(id); 35 | } 36 | 37 | @Override 38 | public Optional finaUserId(Integer id) { 39 | return userRepository.findById(id); 40 | } 41 | 42 | @Override 43 | public User findByOpenid(String openid) { 44 | return userRepository.findByOpenid(openid); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/utils/ResultUtils.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.utils; 2 | 3 | import top.fanfpy.xiaoyuanxianyu.vo.ResultVO; 4 | 5 | /** 6 | * @author fanfp 7 | * @date 2018/4/29 8 | **/ 9 | public class ResultUtils { 10 | public static ResultVO success(Object object){ 11 | ResultVO result = new ResultVO<>(); 12 | result.setCode(0); 13 | result.setMsg("成功"); 14 | result.setData(object); 15 | return result; 16 | } 17 | 18 | public static ResultVO succes(){ 19 | return success(null); 20 | } 21 | 22 | public static ResultVO erro(String msg){ 23 | ResultVO result = new ResultVO(); 24 | result.setCode(1); 25 | result.setMsg(msg); 26 | return result; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/vo/ClassVO.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | import java.util.List; 6 | 7 | 8 | /** 9 | * 商品(包含类目) 10 | * 通过分类id 获取所在分类下的商品 11 | * @author fanfp 12 | * @date 2018/5/4 13 | * */ 14 | public class ClassVO { 15 | 16 | @JsonProperty("id") 17 | private Integer classificationId; 18 | 19 | @JsonProperty("name") 20 | private String classificationName; 21 | 22 | @JsonProperty("status") 23 | private Byte classificationStatus; 24 | 25 | @JsonProperty("goods") 26 | private List goodsList; 27 | 28 | 29 | public Integer getClassificationId() { 30 | return classificationId; 31 | } 32 | 33 | public void setClassificationId(Integer classificationId) { 34 | this.classificationId = classificationId; 35 | } 36 | 37 | public String getClassificationName() { 38 | return classificationName; 39 | } 40 | 41 | public void setClassificationName(String classificationName) { 42 | this.classificationName = classificationName; 43 | } 44 | 45 | public Byte getClassificationStatus() { 46 | return classificationStatus; 47 | } 48 | 49 | public void setClassificationStatus(Byte classificationStatus) { 50 | this.classificationStatus = classificationStatus; 51 | } 52 | 53 | } 54 | 55 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/vo/CommentsInfoVO.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.vo; 2 | 3 | public class CommentsInfoVO { 4 | 5 | 6 | private Integer commentsId; 7 | 8 | private String userImg; 9 | 10 | private String commentsUserName; 11 | 12 | private String comments; 13 | 14 | private String commentsTime; 15 | 16 | 17 | public CommentsInfoVO() { } 18 | 19 | public CommentsInfoVO(Integer commentsId, String userImg, String commentsUserName, String comments, String commentsTime) { 20 | this.commentsId = commentsId; 21 | this.userImg = userImg; 22 | this.commentsUserName = commentsUserName; 23 | this.comments = comments; 24 | this.commentsTime = commentsTime; 25 | } 26 | 27 | public String getUserImg() { 28 | return userImg; 29 | } 30 | 31 | public void setUserImg(String userImg) { 32 | this.userImg = userImg; 33 | } 34 | 35 | public Integer getCommentsId() { 36 | return commentsId; 37 | } 38 | 39 | public void setCommentsId(Integer commentsId) { 40 | this.commentsId = commentsId; 41 | } 42 | 43 | public String getCommentsUserName() { 44 | return commentsUserName; 45 | } 46 | 47 | public void setCommentsUserName(String commentsUserName) { 48 | this.commentsUserName = commentsUserName; 49 | } 50 | 51 | public String getComments() { 52 | return comments; 53 | } 54 | 55 | public void setComments(String comments) { 56 | this.comments = comments; 57 | } 58 | 59 | public String getCommentsTime() { 60 | return commentsTime; 61 | } 62 | 63 | public void setCommentsTime(String commentsTime) { 64 | this.commentsTime = commentsTime; 65 | } 66 | 67 | @Override 68 | public String toString() { 69 | return "CommentsInfoVO{" + 70 | "commentsId=" + commentsId + 71 | ", userImg='" + userImg + '\'' + 72 | ", commentsUserName='" + commentsUserName + '\'' + 73 | ", comments='" + comments + '\'' + 74 | ", commentsTime='" + commentsTime + '\'' + 75 | '}'; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/vo/GoodsInfoVO.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | 5 | import java.math.BigDecimal; 6 | import java.util.List; 7 | /** 8 | * @author fanfp 9 | * @date 2018/5/11 10 | * */ 11 | public class GoodsInfoVO { 12 | 13 | private Integer goodsId; 14 | 15 | private Integer userId; 16 | 17 | private String userName; 18 | 19 | private String userImg; 20 | 21 | private String goodsTitle; 22 | 23 | private BigDecimal price; 24 | 25 | @JsonProperty("date") 26 | private String updateTime; 27 | 28 | 29 | private Integer pageView; 30 | 31 | private Byte status; 32 | 33 | private String describle; 34 | 35 | List goodsimglist; 36 | 37 | public Integer getGoodsId() { 38 | return goodsId; 39 | } 40 | 41 | public void setGoodsId(Integer goodsId) { 42 | this.goodsId = goodsId; 43 | } 44 | 45 | public Integer getUserId() { 46 | return userId; 47 | } 48 | 49 | public void setUserId(Integer userId) { 50 | this.userId = userId; 51 | } 52 | 53 | public String getUserName() { 54 | return userName; 55 | } 56 | 57 | public void setUserName(String userName) { 58 | this.userName = userName; 59 | } 60 | 61 | public String getUserImg() { 62 | return userImg; 63 | } 64 | 65 | public void setUserImg(String userImg) { 66 | this.userImg = userImg; 67 | } 68 | 69 | public String getGoodsTitle() { 70 | return goodsTitle; 71 | } 72 | 73 | public void setGoodsTitle(String goodsTitle) { 74 | this.goodsTitle = goodsTitle; 75 | } 76 | 77 | 78 | public BigDecimal getPrice() { 79 | return price; 80 | } 81 | 82 | public void setPrice(BigDecimal price) { 83 | this.price = price; 84 | } 85 | 86 | public String getUpdateTime() { 87 | return updateTime; 88 | } 89 | 90 | public void setUpdateTime(String updateTime) { 91 | this.updateTime = updateTime; 92 | } 93 | 94 | public Byte getStatus() { 95 | return status; 96 | } 97 | 98 | public void setStatus(Byte status) { 99 | this.status = status; 100 | } 101 | 102 | public String getDescrible() { 103 | return describle; 104 | } 105 | 106 | public void setDescrible(String describle) { 107 | this.describle = describle; 108 | } 109 | 110 | public List getGoodsImgList() { 111 | return goodsimglist; 112 | } 113 | 114 | public void setGoodsImgList(List goodsImgList) { 115 | goodsimglist = goodsImgList; 116 | } 117 | 118 | public Integer getPageView() { 119 | return pageView; 120 | } 121 | 122 | public void setPageView(Integer pageView) { 123 | this.pageView = pageView; 124 | } 125 | 126 | @Override 127 | public String toString() { 128 | return "GoodsInfoVO{" + 129 | "goodsId=" + goodsId + 130 | ", userId=" + userId + 131 | ", userName='" + userName + '\'' + 132 | ", userImg='" + userImg + '\'' + 133 | ", goodsTitle='" + goodsTitle + '\'' + 134 | ", price=" + price + 135 | ", updateTime='" + updateTime + '\'' + 136 | ", pageView=" + pageView + 137 | ", status=" + status + 138 | ", describle='" + describle + '\'' + 139 | ", goodsimglist=" + goodsimglist + 140 | '}'; 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/vo/ResultVO.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.vo; 2 | 3 | /** 4 | * @author fanfp 5 | * @date 2018/5/5 6 | * */ 7 | public class ResultVO { 8 | 9 | /**错误码*/ 10 | private Integer code; 11 | 12 | /**提示信息*/ 13 | private String msg; 14 | 15 | /**内容*/ 16 | private T data; 17 | 18 | 19 | public Integer getCode() { 20 | return code; 21 | } 22 | 23 | public void setCode(Integer code) { 24 | this.code = code; 25 | } 26 | 27 | public String getMsg() { 28 | return msg; 29 | } 30 | 31 | public void setMsg(String msg) { 32 | this.msg = msg; 33 | } 34 | 35 | public T getData() { 36 | return data; 37 | } 38 | 39 | public void setData(T data) { 40 | this.data = data; 41 | } 42 | 43 | @Override 44 | public String toString() { 45 | return "ResultVO{" + 46 | "code=" + code + 47 | ", msg='" + msg + '\'' + 48 | ", data=" + data + 49 | '}'; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/vo/UserInfoVO.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.vo; 2 | 3 | /** 4 | * @author fanfpy 5 | * @date 2018/5/19 6 | * */ 7 | public class UserInfoVO { 8 | private Integer userId; 9 | 10 | private String userNmae; 11 | 12 | private String userImg; 13 | 14 | private String userEmail; 15 | 16 | private String userPhone; 17 | 18 | private Integer goodsNum; 19 | 20 | @Override 21 | public String toString() { 22 | return "UserInfoVO{" + 23 | "userId=" + userId + 24 | ", userNmae='" + userNmae + '\'' + 25 | ", userImg='" + userImg + '\'' + 26 | ", userEmail='" + userEmail + '\'' + 27 | ", userPhone='" + userPhone + '\'' + 28 | ", goodsNum=" + goodsNum + 29 | '}'; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/web/CommentsController.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.web; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; 5 | import org.springframework.web.bind.annotation.*; 6 | import top.fanfpy.xiaoyuanxianyu.vo.CommentsInfoVO; 7 | import top.fanfpy.xiaoyuanxianyu.vo.ResultVO; 8 | import top.fanfpy.xiaoyuanxianyu.entity.Comments; 9 | import top.fanfpy.xiaoyuanxianyu.entity.User; 10 | import top.fanfpy.xiaoyuanxianyu.service.CommentsService; 11 | import top.fanfpy.xiaoyuanxianyu.service.UserService; 12 | import top.fanfpy.xiaoyuanxianyu.utils.ResultUtils; 13 | 14 | import java.util.ArrayList; 15 | import java.util.List; 16 | 17 | /** 18 | * 评论相关 19 | * @author fanfp 20 | * @date 2018/5/16 21 | * */ 22 | @RestController 23 | @RequestMapping(value = "api/comments") 24 | public class CommentsController { 25 | 26 | @Autowired 27 | CommentsService commentsService; 28 | @Autowired 29 | UserService userService; 30 | 31 | 32 | 33 | /** 34 | * 通过商品id获取评论 35 | * */ 36 | @GetMapping(value = "/{goodId}") 37 | public ResultVO getCommentsByGoodsId(@PathVariable("goodId") Integer goodId){ 38 | //评论数量 39 | List commentsList = commentsService.getCommentByGoodsId(goodId); 40 | 41 | 42 | List commentsInfoVOList = new ArrayList<>(); 43 | 44 | for (Comments comment:commentsList) { 45 | User user = userService.finaUserId(comment.getUserId()).get(); 46 | commentsInfoVOList.add(new CommentsInfoVO(comment.getId(),user.getUserImg(), user.getUsername(), comment.getContent(), comment.getDate())); 47 | } 48 | return ResultUtils.success(commentsInfoVOList); 49 | } 50 | 51 | @PostMapping("/") 52 | public void saveComments(Comments comments){ 53 | commentsService.addComment(comments); 54 | } 55 | 56 | @DeleteMapping("/{Commentsid}") 57 | public void delComments(@PathVariable Integer Commentsid){ 58 | commentsService.delComment(Commentsid); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/web/GoodsApiController.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.web; 2 | 3 | import org.springframework.beans.factory.annotation.Autowired; 4 | import org.springframework.web.bind.annotation.*; 5 | import top.fanfpy.xiaoyuanxianyu.vo.GoodsInfoVO; 6 | import top.fanfpy.xiaoyuanxianyu.vo.ResultVO; 7 | import top.fanfpy.xiaoyuanxianyu.entity.Goods; 8 | import top.fanfpy.xiaoyuanxianyu.service.ClassificationService; 9 | import top.fanfpy.xiaoyuanxianyu.service.GoodsImgService; 10 | import top.fanfpy.xiaoyuanxianyu.service.GoodsSrevice; 11 | import top.fanfpy.xiaoyuanxianyu.service.UserService; 12 | import top.fanfpy.xiaoyuanxianyu.utils.ResultUtils; 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | /** 17 | * @author fanfp 18 | * 19 | * */ 20 | @RestController 21 | @RequestMapping(value = "/api/goods") 22 | public class GoodsApiController { 23 | 24 | @Autowired 25 | GoodsSrevice goodsSrevice; 26 | @Autowired 27 | ClassificationService classificationService; 28 | @Autowired 29 | UserService userService; 30 | @Autowired 31 | GoodsImgService goodsImgService; 32 | 33 | @GetMapping(value = "/hot/{num}") 34 | public ResultVO getHotGoodsList(@PathVariable("num") Integer num){ 35 | List goodsInfoVOList = new ArrayList<>(); 36 | //分页 37 | List goodsList = goodsSrevice.findByHotGoods(num).getContent(); 38 | for (Goods goods:goodsList) { 39 | goodsInfoVOList.add(goodsSrevice.GoodsInfo(goods.getId(),3)); 40 | } 41 | return ResultUtils.success(goodsInfoVOList); 42 | } 43 | 44 | 45 | @GetMapping("/new/{num}") 46 | public ResultVO getNewGoodsList(@PathVariable("num") Integer num){ 47 | List goodsInfoVOList = new ArrayList<>(); 48 | //分页 49 | List goodsList = goodsSrevice.findByNewGoods(num).getContent(); 50 | goodsList.forEach(e -> goodsInfoVOList.add(goodsSrevice.GoodsInfo(e.getId(),3))); 51 | return ResultUtils.success(goodsInfoVOList); 52 | } 53 | 54 | 55 | @GetMapping(value = "id/{id}") 56 | public ResultVO getGoodsId(@PathVariable("id") Integer id){ 57 | //商品详细页 58 | return ResultUtils.success(goodsSrevice.GoodsInfo(id,9)); 59 | } 60 | 61 | @PostMapping("/") 62 | public void saveGoods(Goods goods){ 63 | goodsSrevice.saveGood(goods); 64 | } 65 | 66 | @PutMapping("/{id}") 67 | public void updateGoods(Goods goods){ 68 | goodsSrevice.saveGood(goods); 69 | } 70 | 71 | //传入goods 72 | @PostMapping("/add") 73 | public ResultVO addGoods( Goods goods){ 74 | return ResultUtils.success(goodsSrevice.saveGood(goods)); 75 | } 76 | 77 | //返回分类表 78 | @GetMapping("/class") 79 | public ResultVO listClassifiction(){ 80 | return ResultUtils.success(classificationService.listClassification()); 81 | } 82 | 83 | @GetMapping(value = "classId/{classId}") 84 | public ResultVO listGoodsForClass(@PathVariable("classId") Integer classId){ 85 | List goodsInfoVOList = new ArrayList<>(); 86 | List goodsList = goodsSrevice.findByClassifiaction(classId); 87 | goodsList.forEach(e -> goodsInfoVOList.add(goodsSrevice.GoodsInfo(e.getId(),3))); 88 | return ResultUtils.success(goodsInfoVOList); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/web/GoodsImgApiController.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.web; 2 | 3 | 4 | import org.springframework.beans.factory.annotation.Autowired; 5 | import org.springframework.beans.factory.annotation.Value; 6 | import org.springframework.web.bind.annotation.*; 7 | import org.springframework.web.multipart.MultipartFile; 8 | import top.fanfpy.xiaoyuanxianyu.config.AliOss; 9 | import top.fanfpy.xiaoyuanxianyu.entity.GoodsImg; 10 | import top.fanfpy.xiaoyuanxianyu.service.GoodsImgService; 11 | 12 | import java.io.IOException; 13 | 14 | @RestController 15 | @RequestMapping(value = "/api/img") 16 | public class GoodsImgApiController { 17 | 18 | @Autowired 19 | GoodsImgService goodsImgService; 20 | 21 | 22 | @Autowired 23 | AliOss aliOss; 24 | 25 | 26 | @PostMapping("/add") 27 | public GoodsImg addImg(@RequestParam("file") MultipartFile file, @RequestParam(value = "goodsId") Integer goodsId) throws IOException { 28 | return goodsImgService.save(new GoodsImg(goodsId, aliOss.updateImg(file.getInputStream(),file.getOriginalFilename()))); 29 | } 30 | 31 | @PostMapping(value = "test/update") 32 | public String testUpdate(@RequestParam("file") MultipartFile file) throws IOException { 33 | return aliOss.updateImg(file.getInputStream(),file.getOriginalFilename()); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/web/Index.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.web; 2 | 3 | import org.springframework.web.bind.annotation.RequestMapping; 4 | import org.springframework.web.bind.annotation.RestController; 5 | 6 | @RestController 7 | public class Index{ 8 | 9 | @RequestMapping(value = "/") 10 | public String index(){ 11 | return "hello world"; 12 | } 13 | } -------------------------------------------------------------------------------- /src/main/java/top/fanfpy/xiaoyuanxianyu/web/UserApiController.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.web; 2 | 3 | import cn.binarywang.wx.miniapp.api.WxMaService; 4 | import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; 5 | import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; 6 | import me.chanjar.weixin.common.error.WxErrorException; 7 | import org.slf4j.Logger; 8 | import org.slf4j.LoggerFactory; 9 | import org.springframework.beans.factory.annotation.Autowired; 10 | import org.springframework.data.repository.query.Param; 11 | import org.springframework.validation.BindingResult; 12 | import org.springframework.web.bind.annotation.*; 13 | import top.fanfpy.xiaoyuanxianyu.vo.ResultVO; 14 | import top.fanfpy.xiaoyuanxianyu.entity.User; 15 | import top.fanfpy.xiaoyuanxianyu.service.UserService; 16 | import top.fanfpy.xiaoyuanxianyu.utils.ResultUtils; 17 | 18 | import javax.validation.Valid; 19 | 20 | /** 21 | * @author fanfp 22 | * @date 2018/04/18 23 | * */ 24 | @RequestMapping(value = "/api/user") 25 | @RestController 26 | public class UserApiController { 27 | 28 | private Logger logger = LoggerFactory.getLogger(UserApiController.class); 29 | @Autowired 30 | UserService userService; 31 | 32 | @Autowired 33 | private WxMaService wxMaService; 34 | 35 | /** 36 | *通过id更新用户 37 | * 打印错误 38 | * */ 39 | @PutMapping(value = "/{id}") 40 | public ResultVO upateUser(@Valid User user, BindingResult bindingResult, @PathVariable("id") Integer id){ 41 | if (bindingResult.hasErrors()){ 42 | return ResultUtils.erro(bindingResult.getFieldError().getDefaultMessage()); 43 | } 44 | user.setId(id); 45 | return ResultUtils.success(userService.save(user)); 46 | } 47 | 48 | 49 | /** 50 | * 用code换区openid 检查openid是否存在,进行用户注册 51 | * 使用wxjava组件 具体入参请参考wxjava文档 52 | * */ 53 | @GetMapping(value = "/code") 54 | public ResultVO userInfo(@Param("code") String code, 55 | @Param("encryptedData") String encryptedData, 56 | @Param("iv") String iv) throws WxErrorException { 57 | logger.info("code = {} encryptedData ={} iv = {}",code,encryptedData,iv); 58 | WxMaJscode2SessionResult wxMaJscode2SessionResult = wxMaService.getUserService().getSessionInfo(code); 59 | 60 | WxMaUserInfo userInfo = wxMaService.getUserService().getUserInfo(wxMaJscode2SessionResult.getSessionKey(),encryptedData,iv); 61 | if(userService.findByOpenid(userInfo.getOpenId())==null){ 62 | //新用户 63 | User user = new User(); 64 | user.setOpenid(userInfo.getOpenId()); 65 | user.setUserImg(userInfo.getAvatarUrl()); 66 | user.setUsername(userInfo.getNickName()); 67 | user.setGoodsNum(0); 68 | 69 | return ResultUtils.success(userService.save(user)); 70 | }else { 71 | //老用户 72 | return ResultUtils.success(userService.findByOpenid(userInfo.getOpenId())); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | server.port=8080 2 | 3 | spring.datasource.driver-class-name=com.mysql.jdbc.Driver 4 | spring.datasource.url=jdbc:mysql://****:3306/xiaoyuanxianyu?characterEncoding=UTF-8 5 | spring.datasource.username= 6 | spring.datasource.password= 7 | 8 | #spring.jpa.hibernate.ddl-auto= create 9 | Spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 10 | spring.jpa.show-sql=true 11 | 12 | spring.thymeleaf.cache=false 13 | 14 | #logging.path=fanfpylog/log/ 15 | logging.level.con.favorites=DEBUG 16 | logging.level.org.springframework.web=INFO 17 | 18 | logging.level.org.hibernate=ERROR 19 | 20 | wx.miniapp.appid= 21 | wx.miniapp.secret= 22 | wx.miniapp.token=token 23 | wx.miniapp.aesKey=aesKey 24 | wx.miniapp.msgDataFormat=JSON 25 | 26 | endpoint= 27 | accessKeyId= 28 | accessKeySecret= 29 | bucketName= 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/test/java/top/fanfpy/xiaoyuanxianyu/XiaoyuanxianyuApplicationTests.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu; 2 | 3 | 4 | public class XiaoyuanxianyuApplicationTests { 5 | 6 | public void contextLoads() { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/test/java/top/fanfpy/xiaoyuanxianyu/repository/GoodsImgRepositoryTest.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.data.domain.PageRequest; 8 | import org.springframework.test.context.junit4.SpringRunner; 9 | 10 | import static org.junit.jupiter.api.Assertions.*; 11 | 12 | @SpringBootTest 13 | @RunWith(SpringRunner.class) 14 | class GoodsImgRepositoryTest { 15 | 16 | @Autowired 17 | private GoodsImgRepository goodsImgRepository; 18 | 19 | @Test 20 | void findByGoodsIdLimit() { 21 | 22 | } 23 | 24 | @Test 25 | void findByGoodsId() { 26 | goodsImgRepository.findByGoodsId(1, PageRequest.of(0,3)).forEach(System.out::println); 27 | } 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/test/java/top/fanfpy/xiaoyuanxianyu/repository/GoodsRepositoryTest.java: -------------------------------------------------------------------------------- 1 | package top.fanfpy.xiaoyuanxianyu.repository; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.junit.runner.RunWith; 5 | import org.springframework.beans.factory.annotation.Autowired; 6 | import org.springframework.boot.test.context.SpringBootTest; 7 | import org.springframework.test.context.junit4.SpringRunner; 8 | 9 | import static org.junit.jupiter.api.Assertions.*; 10 | 11 | @SpringBootTest 12 | @RunWith(SpringRunner.class) 13 | class GoodsRepositoryTest { 14 | 15 | @Autowired 16 | private GoodsRepository goodsRepository; 17 | 18 | @Test 19 | void findByUserId() { 20 | goodsRepository.findByUserId(1).forEach(System.out::println); 21 | } 22 | } 23 | --------------------------------------------------------------------------------