# 杭师二手 **Repository Path**: call-me-master/hangshi-second-hand ## Basic Information - **Project Name**: 杭师二手 - **Description**: 杭师大二手交易小程序 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-06-12 - **Last Updated**: 2024-06-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 杭师二手商城使用手册 ## 1.注册 因为是学校专用,用户在注册后不能马上进行登录,要等后台审核后才可以使用注册的账号,账号,手机号不能重复。 如: ![register](ershou-images/register1.png) 若信息属实,则后台会通过验证,若验证通过,会发送短信提示,不通过也会发送短信提示 ![register](ershou-images/register2.png) ![register](ershou-images/register3.png) 注册成功后就可以通过手机验证码或者学号密码登录 ## 2.登录 注册后通过验证的账号通过手机验证码或者学号密码登录 1.手机验证码 ![login](ershou-images/login.png) 2.学号密码 ![login](ershou-images/login2.png) ## 3.商品购买 在商品分类中,寻找大致的需要的商品,或者直接搜索商品 ![buy](ershou-images/buy1.png) 点击进入商品界面,可以先通过商品详情中的联系方式,或者通过平台的消息聊天工具(没有通知),也可以直接下单。 ![buy](ershou-images/buy2.png) 下单后就可以在订单列表看到订单 ![buy](ershou-images/buy3.png) 进入卖家端的订单管理,交易成功后,可以点击发货,这时候订单时待收货状态 ![buy](ershou-images/buy4.png) 发货后订单处于待收货状态,用户确认收货后就可以完成本次交易 ![buy](ershou-images/buy5.png) ## 4.需求商品 在求购界面查看需求的商品,商品中有商品详情,以及联系方式,同时也可以通过平台聊天工具进行交流 ![needbuy](ershou-images/needbuy.png) ![needbuy](ershou-images/needbuy2.png) ## 5.商品发布 填写商品的相关信息 ![goods](ershou-images/goods.png) 填写完成后等待管理端审核,同时也可以在商品列表中看到商品,可以对商品进行修改 ![goods](ershou-images/goods2.png) ## 6.需求商品发布 与商品发布类似 填写需求商品相关信息 填写完后发布就能看到 ![goods](ershou-images/needgoods.png) ## 7.订单管理 商品订单 ![order](ershou-images/order1.png) 商品订单需要发货,用户确认收货,而虚拟订单可以直接核验完成,用户不需要确认 ![order](ershou-images/order3.png) ![order](ershou-images/order2.png) ## 8.论坛 学生可以在此发布帖子,回复帖子 ![forum](ershou-images/forum1.jpg) ![forum](ershou-images/forum2.jpg) ## 9.其他 商家消息接收在我的店铺,用户消息接收我的界面 ![other](ershou-images/other.png) ![other](ershou-images/other3.jpg) 除此之外,可以进行修改个人信息和店铺信息,以及进行意见反馈 # 本地搭建 ## 一.环境准备 本文档环境准备不使用docker方式搭建,若要使用docker方式搭建,请参考[官方文档](https://docs.pickmall.cn/deploy/win/deploy.html) **本文档电脑操作系统:Windows11 家庭版** [下载docker配置原码](https://gitee.com/beijing_hongye_huicheng/lilishop) [下载后端源码](https://gitee.com/beijing_hongye_huicheng/lilishop) [下载PC前端源码]("https://gitee.com/beijing_hongye_huicheng/lilishop-ui") ### 1.Mysql Mysql下载[参考文档](https://blog.csdn.net/weixin_42869365/article/details/83472466), 下载对应的Mysql版本后推荐下载Navicat,方便数据库的使用 下载完成后在下载官方的[初始数据库](https://gitee.com/beijing_hongye_huicheng/docker/tree/master/init/mysql) 把数据库导入到本地的数据库中,下面是导入后的样子 ![sql1](input-images/mysql1.png) ### 2.Redis Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于NoSQL数据库而言,作为持久层,它存储的数据是半结构化的没这就意味着计算机在读入内存中有更少的规则,读入速度更快。 [Redius下载](https://url81.ctfile.com/d/19524381-47205674-894631) 密码3360 下载完成解压后就可以使用。 下载后的目录 ![Redius1](input-images/redius1.png) ### 3.Elasticsearch+ik分词器 在我们做电商网站的时候,如果直接用传统的通过数据库去搜索数据,数据库内容比较少的情况下还能勉强做好及时搜索,但是如果成百上千的数据在数据库里面,你还是用传统的搜索数据库的方法,那就要等很长一段时间,影响用户体验,所以一般数据搜索引擎采用的是Elasticsearch来进行搜索。 [Elasticsearch官网下载地址](https://www.elastic.co/cn/downloads/past-releases#elasticsearch) [ik分词器下载地址](https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.1) **注意版本最好要一致** Elastticsearch下载解压后,进入bin目录下,双击执行elasticsearch.bat,可以使用浏览器进入localhost:9200 ![elasticsearch](input-images/elasticsearch.png) 若出现以上画面则表示下载成功 ik分词器下载之后解压到elasticsearch文件夹中的plugins中 ![elasticsearch](input-images/elasticsearch2.png) 安装完插件后,重启ElasticSearch, 可以使用浏览器进入localhost:9200/_cat/plugins ![elasticsearch](input-images/elasticsearch3.png) 出现以上画面则表示安装ik分词器成功 *若elasticsearch-7.6.1如果不在c盘启动出错的话建议放在c盘* ### 4.Rocketmq RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点 1、’能够保证严格的消息顺序 2、提供丰富的消息拉取模式 3、高效的订阅者水平扩展能力 4、实时的消息订阅机制 5、亿级消息堆积能力 [Rocketmq官方下载](https://rocketmq.apache.org/download/) 选择Binary下载 下载完成可以参考[这篇文档](https://blog.csdn.net/caoli201314/article/details/119798973?ops_request_misc=&request_id=&biz_id=102&utm_term=rocket-server%E6%98%AF%E4%BB%80%E4%B9%885&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-119798973.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187),只需第一步加入到系统环境变量中。注意目录不要带空格,最好不使用中文 ### 5.Logstash 这也是Elasticsearch的一部分,Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到 Elasticsearch。虽然不下载好像也可以运行,但根据配置文件中,建议下载 ![logstash](input-images/logstash.png) [下载官网地址](https://www.elastic.co/cn/downloads/past-releases#logstash) **es,logstash版本一定要一致(包括ik分词器)** 解压之后在bin目录下新建.conf文件(名称随意)这里以logstash.conf为例 ![logstash](input-images/logstash2.png) 之后添加配置文件的内容(即官方docker源码中,config/logstash-springboot.conf,因为是手动配置,所以手动添加) ``` input { tcp { mode => "server" host => "0.0.0.0" port => 4560 codec => json_lines } } output { elasticsearch { hosts => "http://localhost:9200/" index => "application-%{+YYYY.MM.dd}" } } ``` 然后打开当前目录的命令窗口 输入 ``` logstash -f logstash.conf -t ``` ![logstash](input-images/logstash3.png) 若出现以上画面则表示安装成功 ### 6.xxl-job XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用 这个不用自己去官网下载,后端源码中自带了,注意把数据库导入到本地数据库中 ![xxl-job](input-images/xxl-job.png) ![xxl-job](input-images/xxl-job2.png) 同时修改application.properties中数据库的配置,改成本地数据库 ![xxl-job](input-images/xxl-job3.png) ### 7.node.js 安装比较简单见[node.js安装博客](https://blog.csdn.net/qq_43647051/article/details/114947117?ops_request_misc=&request_id=&biz_id=102&utm_term=node.jsV14.16.0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-114947117.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187) ## 二。环境搭建 ### 1.Mysql 只要注意把数据库内容导入到数据库,以及在后端源码中 config/application.yml修改数据库为本地数据库 ![mysql](input-images/mysql2.png) ### 2.Redius 在下载Redius目录中找到redis-server.exe启动 ![redius](input-images/rediusStart1.png) 启动后界面 ![redius](input-images/rediusStart2.png) ### 3.Elasticsearch+ik分词器 找到下载文件目录中,bin目录下elasticsearch.bat,点击启动就可以 ![Elasticsearch](input-images/elsticsearchStart1.png) 启动后界面 ![Elasticsearch](input-images/elsticsearchStart2.png) ### 4.Rocketmq 在安装目录的bin目录下打开命令窗口 分两个窗口执行 ``` .\mqnamesrv .\mqbroker -n 127.0.0.1:9876 ``` 执行后的界面 ![rocketmq](input-images/roocketmq1.png) ![rocketmq](input-images/rocketmq2.png) ### 5.Logstash 启动logstash,在bin目录命令行窗口里输入 ``` logstash -f logstash.conf ``` ![logstash](input-images/logstash4.png) ### 6.执行xxl-job 在对应目录下使用命令行 ``` java -jar xxl-job-admin-2.3.0-SNAPSHOT.jar --spring.config.location=application.properties ``` 使用后的界面 ![xxl-job](input-images/xxl-jobStart1.png) ## 三,后端部署 检查一下config/application.yml配置文件中,准备的环境是否是本地ip地址,也就是127.0.0.1,以及数据库导入和数据库配置 然后打开每个main目录下的application端口 ![houduan](input-images/houduan1.png) 若idea出现提示直接点击JAR manifest就可以执行 ![houduan](input-images/houduan.png) 若启动过多,导致redius报错,建议分模块测试,测试完后关闭API,换另一个模块测试 ## 四,前端部署 首先修改每个模块的api请求地址,在每个模块的public/config.js,改成本地地址 ``` API_DEV: { common: "http://127.0.0.1:8890", buyer: "http://127.0.0.1:8888", seller: "http://127.0.0.1:8889", manager: "http://127.0.0.1:8887" }, API_PROD: { common: "http://127.0.0.1:8890", buyer: "http://127.0.0.1:8888", seller: "http://127.0.0.1:8889", manager: "http://127.0.0.1:8887" } ``` ![qianduan](input-images/qianduan6.png) 然后在每个界面目录下发现README.md文件,让后点击可以运行的部分,如下图 ![qianduan](input-images/qianduan.png) 点击后就可以下载,若出现下面错误,可以在命令行中添加对应module ![qianduan](input-images/qianduan2.png) ![qianduan](input-images/qianduan3.png) 下在完成后在对应模块的命令窗口输入 ``` npm run dev ``` ![qianduan](input-images/qianduan4.png) ![qianduan](input-images/qianduan5.png) 然后输入对应的端口地址就可以打开了 ## 五,移动端部署 先下载[hbuliderx](https://www.dcloud.io/hbuilderx.html) 下载完成后界面 ![HbuilerX](input-images/HbuilderX.png) 之后[下载微信开发工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html) 之后导入移动端工程目录,并运行,可以选择任意一种你可以运行的模式,我这里展示内置浏览器的运行 ![HbuilerX](input-images/mobile.png) 注意更改在config/api.js下配置地址 ``` // 开发环境 const dev = { im: "http://127.0.0.1:8885", common: "http://127.0.0.1:8890", buyer: "http://127.0.0.1:8888", // common: "http://192.168.0.113:8890", // buyer: "http://192.168.0.113:8888", // im: "http://192.168.0.113:8885", }; // 生产环境 const prod = { im: "http://127.0.0.1:8885", common: "http://127.0.0.1:8890", buyer: "http://127.0.0.1:8888", }; ``` 先在config/api.js下配置地址 # 阿里云服务器配置 ## 一.环境搭建前准备(服务器Ubuntu 2核16G) ### 1.安装docker [安装教程](https://blog.csdn.net/weixin_50999155/article/details/119581698?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167886119516800186555753%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167886119516800186555753&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-119581698-null-null.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=ubuntu%E5%AE%89%E8%A3%85docker&spm=1018.2226.3001.4187) ![docker](aliyun/docker.png) ### 2.安装jdk8 [安装教程](https://blog.csdn.net/qq_42257666/article/details/123745391?ops_request_misc=&request_id=&biz_id=102&utm_term=ubuntu%E5%AE%89%E8%A3%85jdk1.8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-123745391.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187) ![jdk](aliyun/jdk.png) ### 3.使用宝塔 [官网下载教程](https://www.bt.cn/new/download.html) ![Nginx](aliyun/baota.png) ### 4.安装Nginx [下载教程](https://blog.csdn.net/ZGL_cyy/article/details/117845308?ops_request_misc=&request_id=&biz_id=102&utm_term=Ubuntunginx%E5%AE%89%E8%A3%85&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-117845308.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187) ![Nginx](aliyun/nginx.png) ### 5.xshell传输文件到服务器 [安装教程](https://blog.csdn.net/houhouhhh/article/details/122202513?ops_request_misc=&request_id=&biz_id=102&utm_term=ubuntu%20xshell%E4%BC%A0%E9%80%81%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-122202513.142^v73^wechat_v2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187) ![Xshell](aliyun/Xshell.png) ## 二.部署 ### 前提 在服务器控制端的安全组或防火墙和宝塔中打开需要的端口 ![duankou](aliyun/duankou1.png) ![duankou](aliyun/duankou2.png) ### 1.docker部署 从lilishop官网下载docker配置,注意文件config/broker.conf的配置是服务器的内网IP地址,以及docker-compose.yml,mysql和redis的密码与后端服务器配置文件中设置密码相同 ![docker](aliyun/docker1.png) ![docker](aliyun/docker2.png) 让后进行压缩,并用Xshell上传到服务器中,并解压 ![docker](aliyun/docker3.png) 在docker目录下执行脚本 ``` docker-compose up -d ``` 执行完后可以在宝塔的docker界面中看是否执行 ![docker](aliyun/docker4.png) ### 2.后端代码部署 首先在配置文件中把mysql和redis密码配置与docker配置相同 下一步把文件通过Maven进行jar打包, ![后端](aliyun/houduan1.png) 打包完后检查是否有jar包 ![后端](aliyun/houduan2.png) 之后压缩后端代码,并通过xshell传输到服务器中,并进行解压,让后执行 ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/manager-api/target/manager-api-4.2.5.jar --server.port=8887 > /dev/null 2> /dev/null & ``` ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/common-api/target/common-api-4.2.5.jar --server.port=8890 > /dev/null 2> /dev/null & ``` ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/buyer-api/target/buyer-api-4.2.5.jar --server.port=8888 > /dev/null 2> /dev/null & ``` ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/consumer/target/consumer-4.2.5.jar --server.port=8886 > /dev/null 2> /dev/null & ``` ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/seller-api/target/seller-api-4.2.5.jar --server.port=8889 > /dev/null 2> /dev/null & ``` ``` nohup java -Xmx256m -Xms128m -Xss256k -jar /home/source/lilishop/im-api/target/im-api-4.2.5.jar --server.port=8885 > /dev/null 2> /dev/null & ``` 运行jar包,就可以了 ![后端](aliyun/houduan3.png) ``` nohup java -jar /root/lilishop/lilishop/common-api/target/common-api-4.2.5.jar --server.port=8890 > /dev/null 2> /dev/null & ``` 用这个命令启动所有jar包可以在服务器一直运行 ### 3.前端部署 首先修改每个配置文件中的ip地址,是服务器的外网地址 ![前端](aliyun/qianduan.png) 然后压缩文件通过Xshell传输到服务器中,并解压 通过宝塔 网站->Node项目->添加node项目 选择目录,端口,node版本,就可以进行配置。 然后到服务器到对应目录下,进行node项目启动 ``` yarn install yarn build ``` ![前端](aliyun/qianduan2.png) 会生成dist文件 ### 4.配置域名 在阿里云购买域名和ssl证书,并把域名和服务器绑定,同时申请子域名,配置ssl证书 ![域名](aliyun/yuming1.png) 通过备案后,下载密匙放入服务器中,和下面nginx中配置的地址相同 ![域名](aliyun/yuming2.png) ### 5.nginx服务器配置 在/etc/nginx/目录下修改nginx.conf ``` # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user root root; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; proxy_hide_header X-Powered-By; proxy_hide_header Server; # 开启gzip gzip on; # 启用gzip压缩的最小文件;小于设置值的文件将不会被压缩 gzip_min_length 1k; # gzip 压缩级别 1-10 gzip_comp_level 5; gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; #管理端 server { listen 10003; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; server_name 47.98.186.150; try_files $uri $uri/ /index.html; root /root/lilishop/lilishop-ui/manager/dist; } #商家端 server { listen 10002; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; server_name 47.98.186.150; try_files $uri $uri/ /index.html; root /root/lilishop/lilishop-ui/seller/dist; } #h5端 server { #listen 443 ssl; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; server_name m-b2b2c.pickmall.cn; try_files $uri $uri/ /index.html; root /root/lilishop/h5; } #PC端 server { listen 10000; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; server_name 47.98.186.150; try_files $uri $uri/ /index.html; root /root/lilishop/lilishop-ui/buyer/dist; } #common-api server { #listen 443 ssl; ##ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; server_name common-api.pickmall.cn; location / { proxy_pass http://127.0.0.1:8890; } } #admin-api server { #listen 443 ssl; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server_name admin-api.pickmall.cn; location / { proxy_pass http://127.0.0.1:8887; } } #buyer-api server { #listen 443 ssl; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server_name buyer-api.pickmall.cn; location / { proxy_pass http://127.0.0.1:8888; } } #store-api server { #listen 443 ssl; #ssl_certificate "/etc/nginx/ssl/pickmall.cn.pem"; #ssl_certificate_key "/etc/nginx/ssl/pickmall.cn.key"; #ssl_session_cache shared:SSL:1m; #ssl_session_timeout 10m; #ssl_ciphers HIGH:!aNULL:!MD5; #ssl_prefer_server_ciphers on; include /etc/nginx/default.d/*.conf; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; server_name store-api.pickmall.cn; location / { proxy_pass http://127.0.0.1:8889; } } } ``` 注意没有配置https注释到相关配置,同时配置server的监听端口和路径 ``` service nginx restart ``` 启动nginx服务器