# mksell **Repository Path**: mokudong/mksell ## Basic Information - **Project Name**: mksell - **Description**: 外卖点餐的微信公众平台项目 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-03-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #sell 商城 # JAVA 后端工程 ``` 技术栈: springboot、redis、websocket 功能: 买家功能:微信授权登录、退出登录,查看订单、查看购物车、添加和修改收货地址 商品分类:添加类目、修改、删除、列表查询,删除时,如果类目下面有商品,不允许删除。 商品管理:商品添加、修改、删除、列表查询,商品的上下架。 订单管理:订单列表查询、订单详情查询、订单发货、取消订单。 公众号授权登录的开发: 1、获取code 2、通过code 换取 openid和access_token 3、获取用户信息 微信支付: https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxx&redirect_uri=http://域名/sell/wechat/userInfo&response_type=code&scope=snsapi_base&state=sell.com/#wechat_redirect 卖家信息:网站的微信联合登录、退出登录。 评论管理:根据评论的类型进行评论,是专题评论,还是商品评论、店铺评论等 ``` 创建订单: 1、通过商品id查询商品的库存和价格 2、判断库存数量是否大于购买的数量 3、计算单个商品的总价,统计整个订单的总价 4、保存订单的数据,订单详情的数据 5、减少商品的库存 查询订单: 1、查询订单列表:直接查询订单主表(订单id,订单总价,生成日期) 2、查询单个订单:(先查询订单主表数据,在查询订单详情表数据) 3、取消订单: 判断订单的状态,未发货状态的订单可以取消,接单的订单是不能够被取消的 修改订单状态 返回库存数量(将库存加回去) 如果已经支付,需要退款 4、订单完成:商家去完成订单 判断订单状态,修改订单状态 5、支付订单:(支付完成后回调这个方法) 判断订单状态,判断支付状态,修改订单的支付状态 微信云支付:SDK 支持微信支付和支付宝。 https://cloud.tencent.com/document/product/569/9806 卖家端: 127.0.0.1:8080/sell/seller/order/list bootstrap网址: http://www.ibootstrap.cn/ 网站应用微信登录开发指南: https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN 授权二维码接口: https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到 https://passport.yhd.com/wechat/callback.do?code=CODE&state=3d6be0a4035d839573b04816624a415e https://passport.yhd.com/passport/login_input.do?returnUrl=http%3A%2F%2Fwww.yhd.com 微信模板消息: 自定义吗模板 ####################################### {{first.DATA}} 商家名称: {{keyword1.DATA}} 商家电话: {{keyword2.DATA}} 订单号: {{keyword3.DATA}} 状态: {{keyword4.DATA}} 总价: {{keyword5.DATA}} {{remark.DATA}} ####################################### websocket 异步提醒: 浏览器的websocket和java服务端的websocket 进行通信; 注意事项: 1、浏览器必须支持 websocket, 2、java注册websocket 监听 onOpen:打开session onClose:关闭session onMessage :接收消息 sendMessage:发送消息 MP3语音生成: https://developer.baidu.com/vcast http://tools.bugscaner.com/tts/ 收费版本音频合成: http://www.yinpinghui.com/a/cc/2/2018180.html 目前中文TTS系统,比较著名的有:NUANCE,IBM,Microsoft,Fujitsu,科大讯飞,捷通华声等研究的系统。目前比较关键的就是中文韵律处理、符号数字、多音字、构词方面有较多的问题,需要不断研究,使得中文语音合成的自然化程度较高。 JS/控制Html标签audio的播放、暂停、停止和播放次数: https://www.jianshu.com/p/22fcc52385cd ![](doc/img/baidu广播开放平台.png) 测试号: ![](doc/img/模板消息接口.png) 正式号: ![](doc/img/模板消息正式号.png) java代码和效果: ![](doc/img/微信模板消息开发.png) 安装ab压测工具: 命令: yum -y install httpd-tools 模拟并发请求100次,总共请求10000次 ab -c 100 -n 10000 待测试网站(建议完整路径) ab -c 100 -n 5000 http://192.168.1.106/index1.html ab -c 10000 -n 50000 http://192.168.1.106/index1.html 简单解释:并发访问量过大 服务器拒绝访问,理论上通过系统配置,可以有更好的承受能力 注意事项: 测试机与被测试机要分开 不要对线上的服务器做压力测试 观察测试工具ab所在机器,以及被测试的前端机的CPU、内存、网络等都不超过最高限度的75% 缓存测试: http://127.0.0.1:8080/seller/product/index IDEA安装 GenerateSerialVersionUID插件: ![](doc/img/redis缓存的对象实例化.png) Setting->Plugins 找到 GenerateSerialVersionUID 的插件 下载安装好,重启idea,alt+insert就可以看到 默认情况下Intellij IDEA是关闭了继承了java.io.Serializable的类生成serialVersionUID的警告。如果需要ide提示生成serialVersionUID,那么需要做以下设置: 1、setting->Inspections->Serialization issues,将serialzable class without "serialVersionUID"打上勾; 2、将光标放到类名上,按atl+enter键,就会提示生成serialVersionUID了。 ![](doc/img/对象id生成.png) lombok注解介绍: https://blog.csdn.net/f641385712/article/details/82081900 reids缓存介绍: https://www.cnblogs.com/fashflying/p/6908028.html 0、@EnableCaching 在启动类开启redis缓存 1、@Cacheable注解: @Cacheable和@CacheEvict. 第一个注解代表从缓存中查询指定的key,如果有,从缓存中取,不再执行方法。 如果没有则执行方法,并且将方法的返回值和指定的key关联起来,放入到缓存中。 而@CacheEvict则是从缓存中清除指定的key对应的数据.使用的代码如下: http://127.0.0.1:8080/sell/redis/cache/findOne?id=1234568 @Cacheable(value="product", key="'product_'+#id") 2、@CacheEvict清除缓存: EL表达式为true才进行缓存,false不缓存返回结果 http://127.0.0.1:8080/sell/redis/cache/updateProductNoAddCache?id=1234 @CacheEvict(value="product", key="'product_'+#id",condition="#id!=1") 3、@CachePut 更新商品同时更新redis缓存: http://127.0.0.1:8080/sell/redis/cache/updateProductAddCache?id=1234 @CachePut(value="product", key="'product_'+#id") 4、unless属性:根据返回值的是否缓存: http://127.0.0.1:8080/sell/buyer/product/list @Cacheable(cacheNames = "product",key = "123",unless = "#result.getCode()!=0") ``` 注意事项: mysql5.7中的测试保存数据时,时间的自动保存和更新对应的两个注解: @DynamicInsert : 用于创建时自动更新时间,对应下面的SQL起作用 create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间' @DynamicUpdate : 用于更新时自动更新时间,对应下面的SQL起作用 update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' 否则很有可能报如下错误: Hibernate: insert into product_category (category_name, category_type, create_time, update_time) values (?, ?, ?, ?) 2019-04-11 00:10:17,401 - SQL Error: 1048, SQLState: 23000 2019-04-11 00:10:17,401 - Column 'create_time' cannot be null ``` 需要加上@DynamicUpdate和@DynamicInsert 这两个注解 ![](doc/img/cannot-be-null.png) # vue 前端项目(饿了么app商家页面) 虚拟机项目位置 :/opt/code/sell_fe_buyer/ 配置路由: /config/index.js cd /opt/code/sell_fe_buyer/ npm run build cp -r dist/* /opt/data/wwwroot/sell/ ``` 商品列表 商品评论 商家页面 各种组件 技术栈: vue2.5.17、vue-cli3.0、cube-UI ``` ![](doc/img/vue-product.png) ![](doc/img/pinglun.png) ![](doc/img/shangjia.png) ![](doc/img/pl.png)