游戏道具平台|基于Springboot+Vue实现游戏道具平台系统

news2024/11/28 10:46:24

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

前言:

随着社会的进步和网络技术的快速发展,人们的生活娱乐方式逐渐丰富,电脑和网络已经融入了人们生活中的点点滴滴,无时无刻不在影响着我们的日常生活。越来越多的人感受到了网络带给人们的便捷与乐趣,越来越多的人喜欢通过网络游戏来释放压力、愉悦心身,用网络游戏来丰富精神生活。网络游戏的市场发展也推动着越来越多的玩家关注虚拟商品市场的交易,有了更多的需求和供应,便有了物品的交换,而虚拟世界中的虚拟物品也就有了自己的价值,网络游戏中的虚拟物品交易也便随之而来。在用户有很强烈的虚拟物品交易需求,一个便捷、高效与安全的游戏道具交易系统对网络游戏行业来说有很重要的意义,可以提升游戏用户的活跃,进一步加深游戏的社交化程度,拉长游戏的生命周期。所以开发一个游戏道具交易平台,可以为网络游戏带来更广泛的增值服务。

一,项目简介

游戏道具交易平台是面向用户而设计的,系统中存在三个角色:游客、用户、管理员,如图4-1-1

(1)游客:游客使用的是游戏道具交易平台的前台系统,当游客进入系统会首先到达系统首页

1)首页界面:游客可以在首页界面查看热销商品、查看热门游戏,可以通过点击热门游戏查看游戏详情;也可以通过点击热销商品查看商品详情;

2)游戏界面:游客可以在游戏界面查看所有的游戏中的8条数据,通过切换页面查看所有游戏中的其他游戏;游客可以点击其中一个游戏,查看游戏详情数据,还可以查看到该游戏下包含的所有出售商品;

3)我要买界面:游客可以在我要买界面查看所有商品,并且可以通过分类筛选快速查找到相关商品,也可以通过切换商品页面进行查找商品;游客还可以点击其中一个商品,查看商品详情数据,还可以查看该商品所属于那个游戏;

4)咨询中心界面:游客可以在咨询中心界面查看问题描述和问题解答,也可以通过搜索问题标题快速查找问题解答。

其中游客的用例图图如图所示:

(2)用户:用户使用的是游戏道具交易平台的前台系统,当用户进入系统会首先到达系统首页,用户拥有游客的所有功能

1)首页界面:用户在游客功能的基础上,可以在首页购买热销商品;

2)游戏界面:用户可以在游戏详情界面找到需要的商品进行购买;

3)我要买界面:用户可以在商品详情界面购买商品,并且对商品进行留言或者评价;

4)我要卖界面:用户同意相关平台规则,则可以进行发布商品。用户可以选择想发布的游戏,选择该游戏的道具分类,添加相关信息点击发布,便可把商品信息提交给管理员审核,待管理员审核完成,商品便真正被上架到游戏道具交易平台中的商品中;

5)咨询中心界面:当用户在咨询中心中找不到相关问题解答时,可以通过咨询中心中的咨询问题按钮向管理员提问,只需等待片刻便能得到管理员的回复,也可以前往个人中心查看咨询记录;

6)个人中心界面:当用户登录成功后,点击用户自己的头像便可以进入到用户的个人中心界面。在个人中心中主要有个人中心、商品管理、订单管理、用户收藏和用户咨询五个部分功能,在个人信息可以查看个人信息,进行修改个人信息,进行修改密码,设置收款帐号,咨询客服问题;在商品管理可以查看用户发布的商品,还可以查看用户下架的商品;在订单管理可以查看用户买到的商品,可以查看用户卖出的商品,还可以查看用户所有的订单;在用户收藏可以查看用户所有收藏商品,在用户咨询可以查看用户所有的咨询记录,查看管理员回复。

其用户用例图如图所示:

 

 

(3)管理员:管理员使用的是游戏道具交易平台的后台系统,需要管理员登录成功才能进入到游戏道具交易平台的后台系统中。

1)前台管理模块:前台管理模块包括轮播图管理、咨询管理、用户咨询。其中轮播图管理控制了游戏道具交易平台的前台系统轮播图的更换,方便管理员进行修改;咨询管理中包含了管理员发布的相关咨询问题,也包含了用户向管理员提问的咨询问题,管理员可以对这些咨询灵活选择向不向前台界面展示,咨询管理则是管理员向用户回复相关咨询问题答案,也可以选择比较好问题描述和问题解答向前台展示;

2)商品管理模块:商品管理模块包括游戏管理、分类列表、分类管理、商品管理。商品管理包含了对游戏的管理、游戏道具分类管理、分类列表、商品管理,游戏管理主要是填写相关游戏的介绍,让用户更加了解这个游戏,丰富游戏道具商品种类;分类列表则是方便管理员添加游戏道具商品的分类,通过Excel导入并树形展示;分类管理则是对导入的游戏道具商品分类标题不满意的地方进行修改或者删除;商品管理,则是管理游戏道具交易平台中所有的商品,管理商品的上架与下架,对不符合规则的商品对其进行下架处理;

3)销售管理模块:销售管理模块包括商品审核、订单管理、售后管理。其中商品审核则是对用户上架上来的商品进行审查,符合规则则给予上架,不符合的则进行下架处理;订单管理会将用户创建的所有订单显示处理,展示每条订单的相关情况,让管理员更好的了解订单情况;售后管理则是对用户不满意的订单进行处理,比如重新发货或者商品退款处理;

4)管理员功能模块:管理员功能模块包括用户管理、最新商品发布、管理员商品列表。其中用户管理展示了游戏道具交易平台中所有的前台用户,管理员可以对违反规定的用户进行删除操作;最新商品发布功能是可以让管理员去销售相关游戏的商品,可以更好更快的发布游戏道具商品,丰富商品的种类;管理员商品列表是可以查看管理自己发布的商品,可以对自己发布的商品进行编辑操作,也可以进行删除操作以便进行下架处理;

5)权限管理模块:权限管理模块包括用户管理、角色管理、菜单管理。其中用户管理是对后台的登录用户进行管理,因为游戏道具交易平台后台只能通过管理员添加用户进行登录,不能自己进行注册登录;角色管理则是管理员将相关权限添加到某个角色中,当给一个用户赋予这个角色时,这个用户就只能有这个角色的权限,这样可以方便管理员更好的管理游戏道具交易平台的后台系统;菜单管理,则是管理所有功能的路径、名称和位置,通过使用动态路由,可以更好的添加相关功能权限,方便管理员的使用和管理,也可以更好的分工合作,提高管理员的工作效率。

其管理员用例图如图所示:

 

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发技术:Springboot+Mybatis

前台开发技术:Vue+ElementUI

三,系统展示

账户登录注册

 

 系统首页

个人中心

道具购买

 

我的收藏

 

我的评论

 

购买商品

 

我发布的商品

 

 

咨询记录

后台管理

 

 

 

四,核心代码展示

package com.qm.egorder.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qm.commonutils.JwtUtils;
import com.qm.commonutils.R;
import com.qm.egorder.entity.TOrder;
import com.qm.egorder.service.TOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;


@RestController
@RequestMapping("/egorder/order")
public class TOrderController {
    @Autowired
    private TOrderService orderService;

    /**
     * TODO 1、生成订单的功能
     */
    @PostMapping("createOrder/{goodsId}")
    public R saveOrder(@PathVariable String goodsId, HttpServletRequest request) {
        // 通过token得到用户id
        String memberId = JwtUtils.getMemberIdByJwtToken(request);
        // 创建订单,返回订单号
        String orderNo = orderService.createOrder(goodsId,memberId);
        return R.ok().data("orderId",orderNo);
    }

    /**
     * TODO 2、根据订单id查询订单信息
     */
    @GetMapping("getOrderInfo/{orderId}")
    public R getOrderInfo(@PathVariable String orderId) {
        QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
        wrapper.eq("order_no", orderId);
        TOrder order = orderService.getOne(wrapper);
        // 订单id不是表的id,是生成的订单号order_no
        return R.ok().data("item",order);
    }

    /**
     * TODO 3、根据课程id和用户id查询订单表中订单状态
     */
    @GetMapping("isBuyCourse/{goodsId}/{memberId}")
    public boolean isBuyCourse(@PathVariable String goodsId, @PathVariable String memberId) {
        QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
        wrapper.eq("goods_id",goodsId);
        wrapper.eq("member_id",memberId);
        // 支付状态,1代表已经支付
        wrapper.eq("status",1);
        int count = orderService.count(wrapper);
        if (count > 0) {
            // 已经支付
            return true;
        } else {
            return false;
        }
    }

    /**
     * TODO 4、条件分页查询
     */
    @PostMapping("{current}/{limit}")
    public R pageOrders(@PathVariable Long current, @PathVariable Long limit, @RequestBody(required = false) TOrder order) {
        // 创建page对象
        Page<TOrder> pageOrder = new Page<>(current,limit);
        // 调用方法实现条件查询分页
        orderService.pageOrders(pageOrder,order);
        // 总记录数
        long total = pageOrder.getTotal();
        // 数据list集合
        List<TOrder> records = pageOrder.getRecords();
        return R.ok().data("total",total).data("rows",records);
    }

    /**
     * TODO 5、删除订单
     */
    @DeleteMapping("{id}")
    public R removeOrder(@PathVariable String id) {
        boolean flag = orderService.removeById(id);
        if (flag) {
            return R.ok();
        } else {
            return R.error();
        }
    }
}

package com.qm.egorder.controller;


import com.qm.commonutils.R;
import com.qm.egorder.service.TPayLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import java.util.Map;


@RestController
@RequestMapping("/egorder/paylog")
public class TPayLogController {
    @Autowired
    private TPayLogService payLogService;

    /**
     * TODO: 生成微信支付二维码接口
     * 参数是订单号
     */
    @GetMapping("createNative/{orderNo}")
    public R createNative(@PathVariable String orderNo) {
        // 返回信息,包含二维码地址,还有其他需要的信息
        Map map = payLogService.createNative(orderNo);
        System.out.println("=============返回二维码map集合:" + map);
        return R.ok().data(map);
    }

    /**
     * TODO: 查询订单支付状态
     * 参数:订单号,根据订单号查询支付状态
     */
    @GetMapping("queryPayStatus/{orderNo}")
    public R queryPayStatus(@PathVariable String orderNo) {
        Map<String, String> map = payLogService.queryPayStatus(orderNo);
        System.out.println("=============查询订单状态map集合:" + map);
        if (map == null) {
            return R.error().message("支付出错了");
        }
        // 如果返回map不为空,通过map获取订单状态
        if (map.get("trade_state").equals("SUCCESS")) {
            // 添加记录到支付表,更新订单表状态
            payLogService.updateOrderStatus(map);
            return R.ok().message("支付成功");
        }
        return R.ok().code(25000).message("支付中...");
    }
}

package com.qm.gameservice.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qm.commonutils.R;
import com.qm.commonutils.vo.UcenterMemberVo;
import com.qm.gameservice.entity.EgGoods;
import com.qm.gameservice.entity.query.GoodsQuery;
import com.qm.gameservice.entity.vo.GoodsInfoFromVo;
import com.qm.gameservice.entity.vo.GoodsPublishVo;
import com.qm.gameservice.service.EgGameService;
import com.qm.gameservice.service.EgGoodsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@Api(description="商品管理")
@RestController
@RequestMapping("/gameservice/goods")
public class EgGoodsController {
    @Autowired
    private EgGoodsService egGoodsService;

    /**
     * TODO 1.添加商品功能
     * @param goodsInfoFromVo
     * @return
     */
    @ApiOperation(value = "添加商品")
    @PostMapping("addGoods")
    public R addGoods(@RequestBody GoodsInfoFromVo goodsInfoFromVo) {
        String goodsId = egGoodsService.addGoods(goodsInfoFromVo);
        return R.ok().data("goodsId",goodsId);
    }

    /**
     * TODO 2.商品审核列表功能
     *
     */
    @ApiOperation(value = "商品审核列表功能")
    @PostMapping("/getGoodsList/{page}/{limit}")
    public R pageQuery(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,

            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,

            @ApiParam(name = "goodsQuery", value = "查询对象")
            @RequestBody(required = false) GoodsQuery goodsQuery){

        Page<EgGoods> pageParam = new Page<>(page, limit);
        egGoodsService.pageQuery(pageParam, goodsQuery);
        List<EgGoods> records = pageParam.getRecords();

        long total = pageParam.getTotal();

        return  R.ok().data("total", total).data("rows", records);
    }

    /**
     * TODO 3.上架商品列表
     */
    @ApiOperation(value = "上架商品列表")
    @PostMapping("/goodsList/{page}/{limit}")
    public R goodsList(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,

            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,

            @ApiParam(name = "goodsQuery", value = "查询对象")
            @RequestBody(required = false) GoodsQuery goodsQuery){

        Page<EgGoods> pageParam = new Page<>(page, limit);
        egGoodsService.goodsList(pageParam, goodsQuery);
        List<EgGoods> records = pageParam.getRecords();

        long total = pageParam.getTotal();

        return  R.ok().data("total", total).data("rows", records);
    }

    /**
     * TODO 4.管理员上架商品列表
     * @param page
     * @param limit
     * @param goodsQuery
     * @return
     */
    @ApiOperation(value = "管理员上架商品列表")
    @PostMapping("/goodAdminsList/{page}/{limit}")
    public R goodAdminsList(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,

            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,

            @ApiParam(name = "goodsQuery", value = "查询对象")
            @RequestBody(required = false) GoodsQuery goodsQuery){

        Page<EgGoods> pageParam = new Page<>(page, limit);
        egGoodsService.goodAdminsList(pageParam, goodsQuery);
        List<EgGoods> records = pageParam.getRecords();

        long total = pageParam.getTotal();

        return  R.ok().data("total", total).data("rows", records);
    }

    /**
     * TODO 5.根据商品id查询商品基本信息
     */
    @GetMapping("getGoodsInfo/{goodsId}")
    public R getGoodsInfo(@PathVariable String goodsId) {
        GoodsInfoFromVo goodsInfoFromVo = egGoodsService.getGoodsInfo(goodsId);
        return R.ok().data("goodsInfoFromVo", goodsInfoFromVo);
    }

    /**
     * TODO 6.修改商品信息
     */
    @PostMapping("updateGoodsInfo")
    public R updateGoods(@RequestBody GoodsInfoFromVo goodsInfoFromVo) {
        egGoodsService.updateGoodsInfo(goodsInfoFromVo);
        return R.ok();
    }

    /**
     * TODO 7.根据课程id查询课程确认信息
     */
    @GetMapping("getPublish/{id}")
    public R getPublish(@PathVariable String id) {
        GoodsPublishVo goodsPublishVo = egGoodsService.publishGoodsInfo(id);
        return R.ok().data("publishGoods",goodsPublishVo);
    }

    /**
     * TODO 8.商品最终发布
     * 修改课程状态
     */
    @PostMapping("endGoods/{id}")
    public R publishCourse(@PathVariable String id) {
        egGoodsService.publishGoodsById(id);
        return R.ok();
    }

    /**
     * TODO 9.删除商品
     */
    @DeleteMapping("{id}")
    public R deleteGoods(@PathVariable String id) {
        egGoodsService.removeGoods(id);
        return R.ok();
    }

    /**
     * TODO 10.批准上架
     */
    @PostMapping("agreeGoods/{id}")
    public R agreeGoods(@PathVariable String id) {
        egGoodsService.agreeGoods(id);
        return R.ok();
    }

    /**
     * TODO 11.拒绝上架
     */
    @PostMapping("refuseGoods/{id}")
    public R refuseGoods(@PathVariable String id) {
        egGoodsService.refuseGoods(id);
        return R.ok();
    }

    /**
     * TODO 12.查询审核商品数
     * countAuditGoods
     */
    @PostMapping("countAuditGoods")
    public R countAuditGoods() {
        QueryWrapper<EgGoods> wrapper = new QueryWrapper<EgGoods>();
        wrapper.eq("status","UserSell");
        int count =egGoodsService.count(wrapper);
        return R.ok().data("count",count);
    }

    /**
     * TODO 13.查询用户发布商品
     */
    @PostMapping("/userGoodsList/{page}/{limit}/{user}")
    public R userGoodsList(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,

            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,
            @PathVariable String user){
        Page<EgGoods> pageParam = new Page<>(page, limit);
        egGoodsService.userGoodsList(pageParam,user);
        List<EgGoods> records = pageParam.getRecords();

        long total = pageParam.getTotal();

        return  R.ok().data("total", total).data("rows", records);
    }
    /**
     * TODO 14.用户查询自己下架商品
     */
    @PostMapping("/refuseUserGoods/{page}/{limit}/{user}")
    public R refuseUserGoods(
            @ApiParam(name = "page", value = "当前页码", required = true)
            @PathVariable Long page,
            @ApiParam(name = "limit", value = "每页记录数", required = true)
            @PathVariable Long limit,
            @PathVariable String user){
        Page<EgGoods> pageParam = new Page<>(page, limit);
        egGoodsService.refuseUserGoods(pageParam,user);
        List<EgGoods> records = pageParam.getRecords();

        long total = pageParam.getTotal();

        return  R.ok().data("total", total).data("rows", records);
    }

//    @PostMapping
//    public R getUserG() {
//        String user = "许文哲";
//        String status = "RefuseSell";
//        GoodsPublishVo ggg =egGoodsService.selectG(status, user);
//        System.out.println(ggg);
//        return R.ok().data("ggg",ggg);
//    }

}

五,项目总结

游戏道具交易平台中分为前台系统和后台管理系统,前台系统包括用户信息模块、商品购买模块、出售管理模块、咨询管理模块;后台管理系统包括用户管理模块、游戏管理模块、销售管理模块。

前台系统主要功能:查看游戏详情、查看商品详情、购买商品、查看咨询、进行咨询、查看个人信息、修改个人信息、查看自己发布的商品、查看自己下架的商品、查看自己卖出去的商品、查看自己买到的商品、查看自己所有的订单,查看自己的收藏、查看自己的咨询记录等功能;

后台系统中主要功能:权限管理后台登录用户、管理前台轮播图、管理咨询、管理用户咨询、管理游戏、管理分类、管理商品、审核商品、订单管理、售后管理、前台用户管理、最新商品发布、管理员商品列表等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vagrant 搭建虚拟机环境

用 Vagrant 和 VirtualBox 来快速搭建一个开发环境是非常方便的。简单整理一下 Vagrant 搭建 VirtualBox 虚拟机的记录。 首先安装 Vagrant 和 VirtualBox&#xff0c;这一步就直接省略了。自行安装即可。 什么是 Vagrant&#xff0c;我们这里引用 OSChina 上的一段话来进行解释…

浏览器IndexedDB模块损坏及解决办法

浏览器IndexedDB模块损坏及解决办法 表现 提示错误码&#xff1a; UnknownError Internal error opening backing store for indexedDB.open. indexedDB无法展开。 复现方式 进入以下路径 Mac C:\用户\xxx\AppData\Local\Google\Chrome\User Data\Default\IndexedDB Windo…

吴恩达2022机器学习——第二部分高级学习算法第三周笔记

目录1.1决定下一步做什么&#xff08;构建机器学习的实用建议&#xff09;1.2模型评估1.3模型选择&交叉验证测试集的训练方法模型选择总结举例2.1通过偏差与方法进行诊断2.2正则化、偏差、方差1.1决定下一步做什么&#xff08;构建机器学习的实用建议&#xff09; 从一个例…

C++运算符重载【加号、左移、递增、指针、赋值、中括号、关系、函数调用】,统统载了

学习目标 在c对象的学习中&#xff0c;我们会使用到运算符重载&#xff0c;接下来大家一起学习一下吧&#xff01; 学习内容 运算符重载&#xff1a; operator overloading运算符重载是一种形式的C多态 即对已有运算符进行重新定义&#xff0c;赋予新的功能&#xff0c;使其…

我的创作纪念日

机缘 成为创作者的初心&#xff1a; 让大家目光向我看齐&#xff0c;来我这CV&#xff08;狗头&#xff09; 收获 在创作的过程中都有哪些收获 获得了28粉的关注获得了252赞、83评论、233474阅读量、548收藏 &#xff08;还好我自己点了几个赞&#xff0c;不然250赞显得我好…

安洵杯-复现

reee 主要就是这个函数 void __noreturn sub_401640() {char Buffer[52]; // [esp0h] [ebp-60h] BYREFchar ArgList[16]; // [esp34h] [ebp-2Ch] BYREFint v2; // [esp44h] [ebp-1Ch]CHAR Text[13]; // [esp48h] [ebp-18h] BYREFint v4; // [esp55h] [ebp-Bh]__int16 v5; // [e…

《Redis实战篇》一、短信登录

1.1、导入黑马点评项目 1.1.1 、导入SQL 1.1.2、有关当前模型 手机或者app端发起请求&#xff0c;请求我们的nginx服务器&#xff0c;nginx基于七层模型走的事HTTP协议&#xff0c;可以实现基于Lua直接绕开tomcat访问redis&#xff0c;也可以作为静态资源服务器&#xff0c;轻…

Java并发常见面试题(二)

为什么要使用多线程&#xff1f; 从整体上来看 从计算机底层来说&#xff1a; 线程可以看作是轻量级的进程&#xff0c;是最小的程序执行单位&#xff0c;线程间的切换和调度的成本远远小于进程。另外&#xff0c;多核CPU时代&#xff0c;多个线程可以同时运行&#xff0c;这…

PCB布线及后仿真验证过程(干货满满,建议收藏)

一 布线的基本要求 1. 布线次序考虑 1) 规则驱动布线遵循的基本步骤 定义禁布区&#xff0c;或控制区&#xff1b; 若有规则约束&#xff0c;要求设置规则&#xff1b; 试布线&#xff0c;评估单板是否可以布通&#xff0c;若不能布通&#xff0c;需要采用策略&#x…

Linux测试常用命令

Linux测试常用命令1.Linux安装2.linux常用命令1.一些Linux环境下的基本操作2. 目录管理3.文件管理1.Linux安装 在VMWare虚拟机上安装linux操作系统&#xff0c;得到一个ip&#xff0c;然后通过MobaXterm远程连接linux并进行命令操作。 公司测试的时候是直接拿到服务器ip&…

食品经营许可证办理要什么材料

食品经营许可证办理要什么材料 1.食品经营许可申请书&#xff1b; 2.营业执照或者其他主体资格证明文件复印件&#xff1b; 3.法定代表人&#xff08;负责人&#xff09;和食品安全管理人员的名册、身份证明复印件。申请人委托他人办理食品经营许可申请的&#xff0c;代理人…

代码审计-2 SQL注入

代码审计之SQL注入审计流程ThinkPHP框架ThinkPHP的路由PbootCMSPbootCMS留言处存在SQL注入代码分析ThinkPHP框架 ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架 MVC模式的php开发框架 MVC&#xff1a;一种软件架构模式&#xff0c;把系统分为三个部分&#xff1a…

基于OpenDaylight和OVSDB搭建VxLAN网络

1 简介 本文主要介绍基于OpenDaylight子项目OVSDB中的southbound组件来搭建VxLAN网络&#xff0c;包括初始环境搭建和southbound RestConf API调用等。OpenDaylight中的northbound组件也可以用来创建VxLAN网络&#xff0c;但northbound不是基于yang的且OVSDB封装的不好&#x…

overflow属性详解

overflow属性详解_桃花扇J的博客-CSDN博客_overflow属性 原链接 overflow是对溢出内容的处理&#xff0c;有四个属性值visible&#xff0c;hidden&#xff0c;scroll&#xff0c;auto&#xff0c;且可以分别设置overflow-x&#xff0c;overflow-y&#xff0c;需要注意的是&am…

从夜间照明到随动转向速锐得解码比亚迪唐车灯升级改装技术方案

汽车大灯犹如人的眼睛一样&#xff0c;在汽车的正脸&#xff0c;灵魂与窗口一样的存在&#xff0c;我们通过技术手段将汽车大灯升级为更高亮度、更智能化&#xff0c;是从根本解决行车安全问题。行车灯发展了几十年&#xff0c;已经不仅限于满足“夜间照明”的功能&#xff0c;…

lt基站学习总结

目录 1.nanocell基站的介 2.lte的网络结构 2.1 网络实体 2.2 功能划分 2.3功能描述 2.4业务类型 2.5语音回落原理 3 S1接口上用户注册消息的简介 3.1 S1接口的位置 3.2 S1接口的协议栈关系 3.3 S1接口建立实例 4 3g用户附着流程 5. Lte用户开机附着过程 1.nanocell基站…

扫描点读笔搭载北京君正X2000多核异构跨界处理器的案例

外研通云畅VT-S30扫描点读笔搭载北京君正X2000多核异构跨界处理器&#xff0c;X2000多核异构跨界处理器主要面向于智能音频、图像识别、智能家电、智能家居、智能办公等五大领域。CPU采取三核结构&#xff0c;搭载双XBurst2&#xff0c;主频1.2GHz&#xff0c;跨界第三核XBurst…

Vue3.0五问五答

1、Vue 3.0 性能提升主要是通过哪几方面体现的&#xff1f; 响应式系统升级 首先来看一下响应式系统升级。我们都知道Vue2的时候&#xff0c;数据响应式的原理使用的是defineProperty&#xff0c;在初始化的时候会遍历data中的所有成员。通过defineProperty&#xff0c;把对象的…

Clion代码提示功能消失无法标出错误代码

Clion就不用多说了吧&#xff0c;jetbrains永远的神&#xff01; 初次遇到这个问题也不知道是怎么回事&#xff0c;突然代码写着写着感到十分顺利。要是按照往常&#xff0c;依据jetbrains的强迫症&#xff0c;非要对你写的代码催毛求疵找出有误的地方&#xff0c;或者警告&…

spark安装与入门

下载 https://archive.apache.org/dist/spark/spark-3.0.0/spark-3.0.0-bin-hadoop3.2.tgz Local 模式 将 spark-3.0.0-bin-hadoop3.2.tgz 文件上传到 Linux&#xff0c;解压 tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module 重命名 cd /opt/module mv spark-3.0.…