精华内容
下载资源
问答
  • 2.下单

    千次阅读 2020-02-14 23:50:14
    2.下单 2.1 业务分析 点击提交订单的时候,会立即创建订单数据,创建订单数据会将数据存入到2张表中,分别是订单表和订单明细表,此处还需要修改商品对应的库存数量。 订单表结构如下: CREATE TABLE `tb_order` ( ...

    2.下单

    2.1 业务分析

    点击提交订单的时候,会立即创建订单数据,创建订单数据会将数据存入到2张表中,分别是订单表和订单明细表,此处还需要修改商品对应的库存数量。

    在这里插入图片描述

    订单表结构如下:

    CREATE TABLE `tb_order` (
    `id` varchar(50) COLLATE utf8_bin NOT NULL COMMENT '
    展开全文
  • 本期接到的开发需求是:在我们已经开发好的App中,当用户点击立即购买时跳转到小程序端,用户进而在小程序可以浏览商品,下单,查看订单相关操作。这样做的目的是为了打通支付的痛点,目前在原生App的支付因为不同的...

    0.需求简介:

    本期接到的开发需求是:在我们已经开发好的App中,当用户点击立即购买时跳转到小程序端,用户进而在小程序可以浏览商品,下单,查看订单相关操作。这样做的目的是为了打通支付的痛点,目前在原生App的支付因为不同的机型,支付比较复杂,而且IOS还需要经过苹果审核,可能面临审核不通过的烦恼。

    1.小程序端准备工作

    既然是在小程序端做开发,首先必须要申请小程序,注意:这里有个坑的地方,必须要申请微信开放平台账号下的小程序,或者在公众平台下申请的小程序要绑定微信开放平台,单纯的微信公众平台账号下的小程序无法解密unionId(可以解密其它敏感性不高的信息)。注册完成之后就可以拿到AppId和AppSecret了,需要牢记,后面要用。
    点击跳转微信开发平台

    1.1 以jsCode换取SessionKey

    通过调用小程序的wx.login()方法,可以获得一个jsCode(一个jsCode使用一次就会失效),此jsCode可以用于生成sessionKey,而sessionKey又是解密获得unionId或手机号的必须字段,所以第一步很重要。

    前端通过wx.login()方法拿到jsCode之后,传给后台,后台将jsCode,appId,appSecret等字段组装,调用微信服务器的获取sessionKey的地址拿到sessionKey,点击查看官方文档

    在后台我拿到这个sessionKey是直接返给前端,让前端保存在本地了,后端需要用的时候再传给后台,如果你的系统安全性要求比较高,也可以有更严格的管理策略。比如:生成一个随机串作为key,将sessionKey作为value存在redis中,只给前端返key,后台要用时前端将key传给后台,后台根据key从redis中取出sessionKey;或者后台将生成的sessionKey对称加密,给前端密文,后台在需要时,前端将密文传给后台,后台解密,拿到真正的sessionKey,具体看项目要求,我这里是直接将sessionKey交给前端保存了。

    1.2 解密获取用户的unionId

    这里有两个注意点:
    (1)unionId是用户的唯一标识,同一个微信用户在你司一个账号主体下,无论是小程序还是服务号,公众号都是一样的,所以可以使用此字段来标识用户;
    (2)获取unionId和获取手机号的方法其实是一样的,只是传的参数值不一样

    小程序端调用wx.getUserInfo()方法获取到encryptedData和iv,连同上一步获取到的sessionKey传给后台,后台进行解密,可以获取到unionId,openId,昵称,头像等信息,传给前端。点击查看官方文档

    1.3 解密获取用户的手机号

    获取手机号需要用户主动点击授权,而且前端需要写一个button事件,调用微信的getPhoneNumber()方法,拿到encryptedData和iv,连同第一步获取到的sessionkey传给后台(与解密用户unionId一致),后台解密即可获取到该微信号绑定的手机号。

    2.小程序端浏览商品相关

    这一步需要注意的点是:日常网站基本都是读多写少,而且这是在入口页面,很靠上,必须要用缓存,优先走缓存,缓存没有,再从数据库查询并保存在缓存中,数据库必须要加索引,如果有要从很多表查询取数据库,可以开多个线程并行执行,使用CountDownLatch或者java8的CompletableFuture.supplyAsync开启线程并回收执行结果,注意需要设置超时处理,避免一直等待,总的来说这一步都是java的常用操作。

    3.提交订单

    3.1 订单号生成策略和IP获取

    3.1.1 订单号生成

    订单号生成策略我这里采用的是:
    1位下单标识+15时间戳+用户id后4位+4位随机数,共计24位,如下示例:
    W20190710110201200234471
    w代指微信下单,201907101102012代表时间戳,0023代表用户id后4位,不足4位前面补0,4471代表4位随机数

    3.1.2 IP获取

    下单时微信需要下单用户的ip,我们自己也要将用户的ip在日志中打印出来,所以需要写工具类获取用户的ip

    3.2 预下单

    前端提交订单时需要将短信验证码,商品id,价格等带给后台,后台需要校验短信验证码是否正确,商品是否有库存,价格是否与后台计算的一致(所有牵涉到价格类的,前端只负责展示给用户,必须以后台计算的为准,以防金额损失),而且为了防止用户重复提交,在表单接口入口需要加入分布式锁。

    上面所有的校验完成之后就可以处理你自己的业务了,我这里是插入订单,只是订单状态是无效,支付状态是待支付,插入收货地址等。

    业务处理完之后可以调用微信的统一下单接口执行预下单了,点击查看官方文档
    传入这个接口需要的参数,腾讯会返回一个prepay_id的字段,这是预支付交易会话标识,很重要的一个字段。

    如果要在小程序下单,根据小程序的文档 描述,需要将prepay_id,签名,时间戳什么的由小程序给腾讯,我这里处理的时候这些步骤都是在服务端进行的,即拿到prepayid之后,根据时间戳,随机数等生成签名,再把这些参数统一返回给前端

    4.支付回调

    在上一步把参数都返回给前端之后,前端使用wx.requestPayment方法,将参数传给微信,就可以调起微信支付弹窗了,点击查看官方文档

    支付完成后微信会调用你传给他的支付回调地址(支付回调接口是你写的,旨在处理支付成功或失败后你自己的业务逻辑),这个回调接口也需要加分布式锁,点击查看官方文档,在回调参数中有个叫out_trade_no的字段,这是你传给微信的订单号,现在它又传给你了,拿到这个订单号,你要先查看你订单是否存在,订单是否待付款,同时对它传过来的的参数进行验签(防止中间金额错误),一系列操作完成后再更新你的订单状态为已完成,并处理其他的业务逻辑。

    整个支付环节,只有输密码那一步是在前端操作。其他的调用统一下单接口完成预下单,生成时间戳、签名给前端,支付后的接口回调都是在后台服务端操作的,保证了操作的安全。

    5.其它

    5.1缓存同步

    因为查看商品,查看订单,详情等都用到了缓存,所以在内部系统修改完商品信息,或者用户购买成功课,要同步商品,订单等缓存。

    优化

    如果订单量非常大,下订单的时候可以优化成消息队列发送的形式异步的往数据库里生成订单,推荐使用rocketmq或robbitmq,有ack确认机制;同时,此时去调用第三方支付,生成预下单id。
    存在的问题有以下分类:
    1.订单表插入成功,调用支付失败。此时订单就是待支付状态,用户可以去未完成订单继续支付;
    2.订单表插入失败,调用支付失败。此时是操作失败,要给用户相应的提示;
    3.订单表插入失败,调用支付成功。这也分两种情况,调用支付成功后,用户实际付款成功,如果此时消息队列有延迟,用户订单信息还未插入表中,此时虽不能更新订单状态,问题不大,因为第三方支付公司,往往都有失败重试,第一次调用未更新订单状态后,隔一段支付公司还会调用,这时如果订单入库了就会更新状态,唯一不足的就是前段是展示的订单未支付状态;第二种情况是,因为某种原因导致订单插入订单表失败,此时第三方公司的支付回调请求过来后,未查到订单,就没法更新订单状态,此时可以记录回调请求信息至流水表中,每隔一段时间定时扫描流水表,如果发现有流水表中有的数据,订单表中没有,就做补单处理。

    展开全文
  • 整站伪静态:增强搜索引擎的友好度,对于后期网络营销有比较明显作用 ... <template> <div class="login_container">...div class="login_box">...-- 头像区域 --> <div class="avatar_box"> &l

    整站伪静态:增强搜索引擎的友好度,对于后期网络营销有比较明显作用

    通用帐户登陆:让您的可以使用微信号、QQ号码、支付宝、淘宝等社会化网络账号登录您的网站

    <template>
        <div class="login_container">
         <div class="login_box">
             <!-- 头像区域 -->
             <div class="avatar_box">
                 <img src="../assets/logo.png" alt="">
             </div>
             <!-- 登录表单区 -->
             <el-form ref="loginFormRef" :model="loginForm" :rules="loginFormRules" label-width="0px" class="login_form">
                  <!-- 用户名 -->
                <el-form-item prop="username" >
                    <el-input  v-model="loginForm.username" prefix-icon="el-icon-user"></el-input>
                </el-form-item>
    
                 <!-- 密码 -->
                 <el-form-item prop="password">
                    <el-input v-model="loginForm.password" prefix-icon="el-icon-lock" type="password"></el-input>
                </el-form-item>
    
                <!-- 按钮 -->
                <el-form-item class="btns">
                   <el-button type="primary" @click="login">登录</el-button>
                   <el-button type="info" @click="resetloginForm">重置</el-button>
                </el-form-item>
             </el-form>
         </div>
        </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
                // 登录表单的数据绑定对象
                loginForm:{
                    username:'',
                    password:''
                },
                //表单的验证规则
                loginFormRules:{
                    //验证用户名是否合法
                    username:[
                        {required: true, message: '请输入登录名称', trigger: 'blur'},
                        { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' }
                    ],
                    //验证密码是否合法
                    password:[
                        {required: true, message: '请输入登录密码', trigger: 'blur'},
                        { min: 6, max: 15, message: '长度在 6 到 15 个字符', trigger: 'blur'}
                    ]
                }
            }
        },
        methods: {
            //点击重置按钮
            resetloginForm(){
                this.$refs.loginFormRef.resetFields()
            },
            login(){
               this.$refs.loginFormRef.validate(async valid => {
                   if(!valid) return;
                //    const result = await this.$http.post('login',this.loginForm);
                //    console.log(result);
                //     结构赋值data属性
                   const {data:res} = await this.$http.post('login',this.loginForm);
                   if(res.meta.status !== 200)return console.log('登录失败')
                   console.log('登录成功');
               }); 
            }
        }
    }
    </script>
    
    <style lang="less" scoped>
    .login_container{
        background-color: #2b4b6b;
        height: 100%;
    }
    .login_box{
        width: 450px;
        height: 300px;
        background-color: #fff;
        border-radius: 3px;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%,-50%);
    }
    
    .avatar_box{
        height: 130px;
        width: 130px;
        border: 1px solid #eee;
        border-radius: 50%;
        padding: 10px;
        box-shadow: 0 0 10px #ddd;
        position: absolute;
        left:50%;
        transform: translate(-50%,-50%);
        background-color: #fff;
        img{
            height: 100%;
            width: 100%;
            border-radius: 50%;
            background-color: #eee;
        }
    }
    
    .login_form{
        position: absolute;
        bottom: 0;
        width: 100%;
        padding: 0 20px;
        box-sizing: border-box;
    }
    
    .btns{
        display: flex;
        justify-content:flex-end;
    }
    
    
    </style>

    抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:

    1 高并发对数据库产生的压力

    2 竞争状态下如何解决库存的正确减少("超卖"问题)

    下单系统:

    /**
    * Class redisConcurrent
    */
    class RedisConcurrent
    {
    /** lock key
    * @var string
    */
    public $_lockKey = 'redis_lock';
    /** Redis Class
    * @var Redis
    */
    private $_redis ;
    /** ip
    * @var mixed|string
    */
    private $ip ='127.0.0.1' ;
    /** port
    * @var string
    */
    private $port = '6379' ;
    /** init redis connect
    * redisConcurrent constructor.
    * @param array $config
    */
    public function __construct( $config = [] )
    {
    if(!empty($config)) {
    if(isset($config['ip'])) {
    $this->ip = $config['ip'];
    }
    if(isset($config['port'])){
    $this->ip = $config['port'];
    }
    }
    /**
    * Redis连接信息可以用原生,也可以用其它的框架集成
    */
    $this->_redis = new Redis();
    $this->_redis->connect($this->ip,$this->port);
    }
    /** 锁定
    * @param int $intTimeout 默认过期时间(避免死锁)
    * @return bool
    */
    private function lock($intTimeout = 8) {
    #新版set,已经集成了大多数集成操作
    $strRet = $this->_redis->set($this->_lockKey, time().rand(10000,99999).rand(1000,9999).rand(100,999), 'ex', $intTimeout, 'nx');
    if($strRet) {
    return true;
    }else{
    return false;
    }
    }
    /** 解锁
    * @throws \Exception
    */
    private function unlock()
    {
    $strRet = $this->_redis->del($this->_lockKey);
    if($strRet) {
    return true;
    }else{
    if($this->_redis->get($this->_lockKey)) {
    return false ;
    }else{
    return false ;
    }
    }
    }
    /**
    * 业务相关的key,可以是库存,物品数等
    */
    const ORDER_KEY = 'order_num';
    /**
    * 用户相关的key
    */
    const USER_KEY = 'user_num';
    /** Redis下单
    * @param int $num 下单个数
    * @param string $userId 用户ID
    *
    * 场次是为了方便异常处理,方便数据查找
    * @param string $bout 商品场次 => order_num:1 , order_num:2
    * @return bool
    * @throws Exception
    */
    public function order( string $userId ,string $bout = '1' ,int $num = 1)
    {
    $orderKey = self::ORDER_KEY.':'.$bout ;
    $userKey = self::USER_KEY.':'.$bout ;
    //此方法不具备原子性 并发处理是不能做条件判断
    //$len = $this->_redis->llen();
    #实际为n+1次触发完结,这里只做Redis自减
    $check = $this->_redis->lpop($orderKey);
    if(!$check){
    #当前order_num已经为0!
    //自动补货为 100 ,$bout有一定的处理规则,不能乱传
    self::autoBuild(100,$bout);
    return false ;
    }
    //特殊处理,避免n+1次的情况
    $len = $this->_redis->llen($orderKey) ;
    if($len == 0) {
    //自动补货为 100 ,$bout有一定的处理规则,不能乱传
    self::autoBuild(100,$bout);
    return false ;
    }
    //添加用户数据
    $result = $this->_redis->lpush($u

     竞拍系统:在现在产品管理系统上选择相关的产品,设置拍卖开始到结束时间,设置起拍价格、一口价、加价幅度、保证金等参数,前台会员就可以进行商品的竞价了,价高者得。

    团购系统:在现有的产品管理系统上选择需要团购的商品,设置开始到结束时间、保证金、限购数量、赠送积分、价格阶梯以及整个活动的说明,完成后所有的会员即可进行团购活动。

    希望这编文章可以帮助到真正有需要的朋友,如果各位对于互联网开发这块还有什么问题或者有这方面的疑惑,都可以随时私信或微信kjwenlc我一起交流,一起进步哈~
    同时,感谢大家的支持与阅读,如果觉得不错欢迎点赞和分享,谢谢!

    展开全文
  • 《食堂远程下单系统》 需求规格说明书 课程名称:软件工程基础 指导老师:汤世平 小组成员: 姓名:金晨 学号:1120161943 姓名:方姝曼 学号:1120161940 姓名:夏婕 学号:1120161962 姓名:瞿...

     

     

     

     

     

    《食堂远程下单系统》

    需求规格说明书

     

     

     

     

    课程名称:软件工程基础

    指导老师:汤世平

     

    小组成员:

    姓名:金晨   学号:1120161943

    姓名:方姝曼 学号:1120161940

    姓名:夏婕   学号:1120161962

    姓名:瞿凤业 学号:1120161944

     

     

     

    目录

    1. 引言................................................................................................................ 3

    1.1 编写目的................................................................................................. 3

    1.2 项目背景................................................................................................. 3

    1.3 可行性分析............................................................................................. 3

    1.4 NABCD分析.............................................................................................. 4

    2. 项目概述....................................................................................................... 4

    2.1 待开发软件的一般描述......................................................................... 4

    2.2 待开发软件的功能................................................................................. 5

    2.3 用户特征和水平..................................................................................... 8

    2.4 运行环境................................................................................................. 8

    3. 功能需求......................................................................................................... 9

    3.1 功能划分.................................................................................................. 9

    3.2 功能描述.................................................................................................. 9

    4. 外部接口需求............................................................................................ 11

    4.1 用户界面................................................................................................ 11

    4.2 硬件接口................................................................................................ 11

    4.3 软件接口................................................................................................ 12

    4.4 通信接口................................................................................................ 12

    4.5 故障处理................................................................................................ 12

    5. 性能需求..................................................................................................... 12

    5.1 数据精确度........................................................................................... 13

    5.2 时间特性............................................................................................... 13

    5.3 适应性................................................................................................... 13

    6. 其他需求..................................................................................................... 13

    7. 数据库设计................................................................................................. 13

    7.1 静态数据............................................................................................... 14

    7.2 动态数据............................................................................................... 14

    7.3 数据库描述........................................................................................... 14

     

     

     1、引言


     

    1.1编写目的

      书写本文档的目的在于:

        (1) 详细陈述用户需求,明确食堂远程下单系统的具体功能

      (2) 项目相关资料

      项目目标:建立食堂远程下单系统,并建立相应的数据库,有利于校内学生实时便捷地进行线上点餐。

     

    1.2项目背景

      近年来,随着科学技术以及网络的飞速发展,食堂远程下单系统的发展空间越来越大。每所高校都会面临饭点食堂拥挤,学生排队点餐花费大量时间的问题。然而,这些白白浪费的时间,可以通过一个远程下单的系统节省下来,如果学生能够提前通过网络告知食堂自己想要点的菜品,食堂提前准备,这样到了饭点,学生只需要凭借相关证明(如订单号或是学号)便可直接取走先前点过的菜品,节省了一大笔等待时长。

      调查发现,在校的学生确实觉得每天排队等待的时间太过浪费。如果能有一款app或是小程序能够像快餐店一样,不需要等待做餐时间,能够直接到店取餐,那么将会空出很多富余时间。于是,“食堂远程下单系统”应运而生。

     

    1.3可行性分析

      (1) 技术可行性:

      APP开发技术已不是难题。本系统是应用于智能手机上的app,现阶段主要致力于该系统在Android手机上客户端的开发,ios系统上的开发还未做考虑。本系统主要是在Android开发平台上使用Java语言进行开发,数据库用mySQL。这些开发技术基本已经成熟,而且有一定基础,使用起来上手比较快,因此是完全可行的。

      (2) 操作可行性:

      系统的操作方式符合用户操作流程,用户可以登录查看菜品信息也可以购买菜品,并在交易完成后做出相应的评价等。

      (3) 经济可行性:

      获取食堂远程下单的市场需求渠道众多,而且成本较低。

      (4) 法律可行性:

      系统的开发过程和使用符合当前法律。

     

    1.4 NABCD分析

      (1) Need(需求):

      一般同学们吃饭时间都是下完课,所以这时间是食堂的高峰期,食堂人满为患,时间都浪费到了排队点餐和等待取餐的过程。而在下课前几分钟,食堂里用餐的同学较少,很多窗口都处于闲置状态。

      (2) Approach(做法):

      食堂在线点单程序就是基于此而设计,同学可以提前在app上点好餐付款,食堂根据点餐信息提前制作,同学到时直接去拿点好的饭菜,这样便可以省下等待时间。同时,在后续的扩展中我们会考虑加入评论功能,方便同学们参考和食堂方调整。

      (3) Benefit(好处):

      学生可以在线点单支付,通过手机提前点单,(扩展:通过手机提醒点单学生餐点是否完成)省去排队,等待食物制作的过程。学校的课程表安排的比较紧,有时上午十二点下课,下午一点又要上课,这个功能让学生在快下课的时候就可以点好自己想吃的东西,去到食堂就可以取餐吃饭,节省了学生的时间。同时不用排队,排队会使取餐窗口十分拥挤,其他人点餐困难或取餐困难,我们的程序可以解决这一问题。

      (4) Competitors(竞争):

      在校内,我们应该还没有什么竞争者,没有听说过类似软件。同类型的软件大都用于一些小餐厅,与我们的服务群体不同,当然我们很多地方都可以像他们学习。

      (5) Delivery(支付):

      我们应该先和食堂方面联系,让食堂的负责人先接受我们的想法,在某个食堂先进行小规模测试,推销可以使用食堂外的LED屏幕以及在食堂一楼贴宣传海报。在食堂外摆设帐篷推销等等。在测试期开设意见箱接受同学们的意见反馈,在同学们的反馈中改进程序。只要我们的程序确实便利了同学们的生活,同学们就会自发的对这个程序进行传播。在后续的扩展中可以加上一些在校内还不够完善的服务设施,将食扩展到衣食住行。

     

     

    2. 项目概述


     

    2.1待开发软件的一般描述

      学生在食堂排队会面临长队伍,考虑到这一问题,就想开发一个食堂远程下单系统,完成线上点单、下单,线下取餐。食堂远程下单系统为学生提供了方便,减少了排队等候的时间。

    由于本系统的主要服务对象为学生,因此用户的数量十分有保障,并且本系统功能实用、操作简单,易受学生的青睐,前景十分乐观。

     

    2.2待开发软件的功能

      对于本系统的功能主要为:登录系统、菜品购买、下单,而取餐环节则是在线下取餐。具体图形介绍如下:

      顶层数据流图:

       

      ER图:

       

      状态图:

       

      用例图:

       

      系统流程图:

       

     

    2.3用户特征和水平

      本系统的用户主要为在校学生,受教育水平高,对于各类软件的基本操作和使用都较为熟悉。并且用户大多都拥有手机可以随时随地登录本系统来进行在线操作。

     

    2.4运行环境

      手机Android端

     

     

    3. 功能需求


     

    3.1功能划分

      系统的整体功能可以根据不同的用户划分为如下几个功能:

      (1) 管理员:发布菜品,修改菜品,删除菜品;

      (2) 学生:登陆注册,查找菜品,加入购物车,支付,评论;

      (3) 食堂工作人员:查看订单;

      功能划分表如下:

       

    3.2功能叙述

      在顶层数据流图以及功能划分的基础上,我们利用第1层和第2层数据流图来具体描述系统的相关功能。

      DFD图:

      第1层:

       

      第2层:

      对第1层图的第2部分的精化:

       

      对第1层的第3部分的精化:

       

      对第1层的第4部分的精化:

       

     

     

    4. 外部接口需求


     

    4.1用户界面

      (1) 用户界面整体上选择较为简洁的风格;

      (2) 默认背景色为白色;

      (3) 学生在菜品界面可查看北食堂三楼的所有窗口的所有菜品,可通过左栏的窗口对菜品进行筛选。菜品界面呈现菜品的窗口位置、菜品的样式、名称、价格、销量数、好评数、差评数和收藏按钮。下单时弹出订单界面,也可进行点击查看当前正在进行的订单,也可以在该界面删除自己不想要的菜品,该界面呈现购买的菜品、消费的金额,在订单处学生和标注自己的口味以及其他备注需求,还需选择取餐时间。我的界面可以查看自己的收藏和历史订单,在历史订单中可查看历史订单的信息,可进行点赞操作,但是仅展示最近十条订单,在该界面可上传头像,查看自己的昵称;

      (4) 通过界面下方的导航栏可进入订单界面和我的界面和菜品界面;

      (5) 在下订单时,如果没有登录,系统会弹出登录/注册界面,登录/注册后应完成学生身份认证方可继续操作;

      (6) 系统出现错误时会出现弹窗提醒,可选择是否发送错误报告,选择后退回至用户的系统界面。

     

    4.2硬件接口

      支持一般安卓手机

     

    4.3软件接口

      运行于Android操作系统

     

    4.4通信接口

      食堂交易平台、网络通信协议、第三方支付软件、电子邮件

     

    4.5故障处理

      正常运行时不会发生故障;发生故障后由用户选择是否送回错误报告,错误报告包括系统故障时用户所处的界面和之前的主动操作。若用户选择不上传错误报告,则保护系统故障前已上传和下载的数据;若用户选择上传错误报告,则错误报告通过电子邮件的方式发送至开发者邮箱,同时保护系统故障前的用户数据。

     

     

    5. 性能需求


     

    5.1数据精确度

      (1) 维护人员在上传新的菜品时,可选择是否录入菜品简介;

      (2) 用户的数据交流,如留言等,由用户选择保留时长;

      (3) 维护人员要根据食堂的变化尽快更改可下单菜品列表。

     

    5.2时间特性

      (1) 响应时间:网络流畅情况下,下一个新的订单需要3秒钟左右;

      (2) 更新处理时间:菜品的上传与下架信息需要保持实时更新,后台数据库每一天更新一次,30分钟内由用户操作产生的数据以高速缓存的方式存储在后端服务器;

      (3) 数据转换与传输时间:数据输入时传入高速缓存处理器,数据输出时为了避免导出数据量过大,结果超过十个时将进行分页处理;传输时间与交易平台的处理速度有关;

      (4) 运行时间:非服务器维护期间,应保持24小时运行。

     

    5.3适应性

      软件运行于Android操作系统之。非相应操作系统无法使用和进行菜品的购买。

     

     

    6.其他需求


       (1) 用户的交易需要经过第三方支付软件进行,相关信息在操作过程中完全保密;

      (2) 管理人员可对菜品信息进行分类、整理及删除。

     

     

    7. 数据描述


     (账号信息包括密码、用户名、实名学生信息、联系方式等;菜品信息包括菜品名称、菜品简介、菜品展示图、菜品价格等)

     

    7.1静态数据

      用户账号信息

      用户绑定第三方支付软件账号信息

      菜品信息

     

    7.2动态数据

    食堂方:

      输入数据:上架菜品信息  

      输出数据:是否已经完成菜品,建议买家取餐时间范围

    学生方:

      输入数据:菜品名称,份数,取餐时间

      输出数据:是否下单成功

     

    7.3数据库描述

      本软件采用MySQL数据库

     

    转载于:https://www.cnblogs.com/emmm666/p/9190497.html

    展开全文
  • 《食堂远程下单系统》 设计规格说明书 课程名称:软件需求工程与建模 指导老师:汤世平 小组成员: 姓名:金晨 学号:1120161943 姓名:方姝曼 学号:1120161940 姓名:夏婕 学号:1120161962 姓名:...
  • push 的一个 view 第一次push 窗口可以正常出现视频头像 关闭 再push一次 窗口出来 视频无法正常显示 调试好几天 问了一公司技术支持 说:这个view必须是全局的 pop的时候不能被销毁掉 这样想...
  • Android开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j压缩(支持分卷压缩与加密) | 一键集成UCrop选择圆形头像 | 一键集成二维码和条形码的扫描与生成 | 常用Dialog | ...
  • 下单账户与实付账户不一致Discord is all fun and games until your account is stolen. Make sure no one can access your account, even if they steal your password, by implementing two-factor authentication...
  • 这几天小马哥的一则互动的截图又刷爆了互联网:搜狗CEO王小川在朋友圈以“微商”形式首发了搜狗录音翻译笔,通过小程序即可下单,马化腾在朋友圈表示“下了单买个支持下”,经过向腾讯的朋友确认,这个截图,不是PS...
  • 4.2 下单实现 下单的时候,先添加订单往tb_order表中增加数据,再添加订单明细,往tb_order_item表中增加数据。 4.2.1 代码实现 这里先修改changgou-service-order微服务,实现下单操作,这里会生成订单号,我们...
  • RxTool 工欲善其事必先利其器! Android开发过程经常需要用到各式各样的工具类,虽然大部分只需谷歌/百度一下就能找到; 但是有时候急需使用却苦苦搜寻不到,于是整理了自己平常用到的工具类,以便以后的使用。...
  •  查看买家的Facebook主页 如果发现对方的主页什么内容都没有,或者只有几张风景或者卡通头像照片的,就要注意账号的安全性了 三. 亚马逊简介 通过买家提供的亚马逊简介,能知道对方的评论如何,留评率如何,如果...
  • 对于在淘宝开店的商家来说,无论买家一通询问之后没后话,还是下单之后不付款都是让人特别难受的事情,因为要是一直催促买家付款,反而会让买家产生...(李老师的联系方式详见本文最上方我的头像那一栏) 一、为什...
  • 所谓:工欲善其事必先利其器! RxTool是Android开发过程经常需要用到各式各样的工具类集合,虽然大部分只是谷歌/百度一下就能找到。 但是有时候急需使用却却苦苦搜寻不到,于是整理了自己平常用到的工具类,煞以后...
  • //判断有无openid if (re) { that.setData({ ‘paydata.openid‘:re }) //下单 that.xiadan(); } }); }, //下单 xiadan: function (){ var that = this; wx.request({ url: app.globalData.apiurl+‘c=payorder‘, ...
  • 五、订单 完成订单结算页渲染 完成用户下单实现 完成库存变更实现 5.1、 订单结算页 5.1.1、 收件地址分析 用户从购物车页面点击结算,跳转到订单结算页,结算页需要加载用户对应的收件地址,如下图: 表结构分析: ...
  • 用户登录后可修改基本信息,如修改头像,修改昵称,修改密码,头像上传修改,昵称修改实时保存。 编辑地址功能 添加新地址,没有任何地址时会设置为替换地址。可重新修改或删除地址信息。 首页推荐功能 首页推荐闲置...
  • 上传头像,修改用户名 积分商城 服务中心 添加、删除、修改收货地址 付款(很难实现) 项目布局 |-- build // webpack配置文件 |-- config // 项目打包路径 |-- elm // 上线项目文件,放在...
  • 】暗号:易喵团+微博名跟团方法:戳link下单,在买家留言处备注暗号:易喵团+微博名,最后直接团价团期内反馈返前20名返3yuan 。要求: 1.发微博艾特我,三张实图 十个字以上 2.TB给五星好平(记得截图)。3.被转发24h后...
  • - 上传头像,修改用户名 - 积分商城 - 服务中心 - 添加、删除、修改收货地址 - 付款(很难实现) [b]总结[/b] 1、因为并不是elm官方,而且因为要开代理,必须在pc端打开,所以预计最多只能做到下单这一步,下单成功后...
  • 上传头像,修改用户名 积分商城 服务中心 添加、删除、修改收货地址 付款(很难实现) 项目布局 |-- build // webpack配置文件 |-- config // 项目打包路径 |-- elm // 上线项目文件,放在服务器即可正常...
  •  都说抢购是当代年轻人的潮流,几千块的 AJ 、Supreme 秒下单不带一点心疼的。这在神棍局面前都不算什么,微信咨询 90 分钟起步价 1200 元,等级最高的算命先生 90 分钟收费一万元。  尽管如此每个算命先生每周 ...
  • 无数次想充值却始终没下单的Q币;让自己变美变帅的QQ 秀;或粉红系或暗黑系或非主流的QQ 空间; [img=https://img-bbs.csdn.net/upload/201702/14/1487060865_84076.jpg][/img] 一直在饿着的Q宠;半夜起来偷菜...
  • 简介:Android 开发人员不得不收集的工具类集合 | 支付宝支付 | 微信支付(统一下单) | 微信分享 | Zip4j 压缩(支持分卷压缩与加密) | 一键集成 UCrop 选择圆形头像 | 一键集成二维码和条形码的扫描与生成 | 常用...
  • 关于app的几个核心功能的设计想法

    万次阅读 2016-07-11 10:15:03
    关于app的几个核心功能的设计想法...所以话语会很口语化,大家看看就好,有啥不同想法或者本人写的不好的地方,欢迎留言指出关于注册我想,注册可不可以这样,如果用户没注册,他想下单,不管是网页还是应用,跳出注
  • 业务逻辑层承载了用户维度相关的业务操作,不可以按照订单的维度分业务逻辑,例如务逻辑层会请求用户的头像、昵称等,如果继续按照订单分业务逻辑,会导致跨地域调用。 微信红包系统采取的方案是,在订单 SERVER ...
  • 最近有一个需求,是一个出行类的App,需要在乘客下单后在地图上显示乘客的头像以及司机的头像。 这时候就需要在地图上插上一个marker ImageLoader.loadLisenter(mContext,headUrl, imageView); 由于异步加载的问题...
  • 做虚拟变现

    2021-10-15 16:59:32
    这个可以引流到微信,也可以直接小商店下单,能够做的虚拟变现挺多,有手绘头像,老照片修复,表情包壁纸,小程序等等,找到自己想做的 虚拟变现由于是小众需求,竞争少,公司和大佬看不上,而且部分变现方法,需求...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,517
精华内容 606
关键字:

下单头像