【Side Project】 订单清单 - 取得订单资讯

我们已经完成了订单清单的画面了,接着我们来处理资料库的订单资料。

取得资料库资料

我们先前在设计的时候将资料库设计成表头表身两个部分。
那我们今天先来将订单资讯从资料库取回来。

  1. api资料夹底下建立 ProprietorModel.cs
    https://ithelp.ithome.com.tw/upload/images/20211004/20115941MqohbWA8Mt.jpg
    与顾客点菜单的页面一样,我们制作一个Model负责帮我们处理资料的业务
  2. DTOClass资料夹底下创建Order.cs
  3. Order.cs里面存放我们的表头与表身
    https://ithelp.ithome.com.tw/upload/images/20211004/20115941J41q5QcS0a.jpg
public class Order
    {
        public Menulisth head { get; set; }
        public List<Menulistb> bodys { get; set; } = new List<Menulistb>();
    }
  1. ProprietorModel.cs 新增SelectOrder()的函式

    public List<Order> SelectOrder(IConfiguration config)
        {
            var order_list = new List<Order>();
            //连线设定
            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                //连线字串
                ConnectionString = config.GetValue<string>("WebmenuConnectionString"),
                DbType = DbType.SqlServer,//连线类型
                IsAutoCloseConnection = true //自动关闭连线
            });
    
    
            try
            {
    
                //当执行时,触发事件
                db.Aop.OnLogExecuting = (sql, pars) =>
                {
                    Console.WriteLine(sql);//查看SQL语法
                };
                //begin tran
                db.BeginTran();
                //取得菜单表头,并排序(正序)
                var list_h = db.Queryable<Menulisth>().OrderBy(menu => menu.Createtime, OrderByType.Asc).ToList();
                var list_b = db.Queryable<Menulisth, Menulistb>((head, body) => new JoinQueryInfos(JoinType.Left, head.Uid == body.H_uid))
                    .OrderBy(head => head.Createtime, OrderByType.Asc)
                    .Select<Menulistb>().ToList();
                //将表头加入到表身资料写入
                foreach (var head in list_h)
                {
    
                    var order = new Order();
                    //加入表头
                    order.head = head;
                    //加入表身
                    foreach(var body in list_b)
                    {
                        if(body.H_uid == head.Uid)
                        {
                            order.bodys.Add(body);
                        }
                    }
                    order_list.Add(order);
    
                }
    
                db.CommitTran();
            }
            catch
            {
                db.RollbackTran();//rollback
                throw;
            }
            return order_list;
        }
    
  2. 最後在写到HomeController.cs测试一下能不能正常接收

public IActionResult Proprietor()
        {
            var proprietor = ProprietorModel.proprietor;
            var list = proprietor.SelectOrder(_config);
            foreach(var order in list)
            {
                Console.WriteLine("Uid:"+order.head.Uid);
                Console.WriteLine("FormNum:"+order.head.Formnum);
                Console.WriteLine("------------------------");
                foreach (var body in order.bodys)
                {
                    Console.WriteLine("Uid:" + body.Uid);
                    Console.WriteLine("H_Uid:" + body.H_uid);
                    Console.WriteLine("item:" + body.Item);
                    Console.WriteLine("==============================");
                }

            }
            return View();
        }

6.完成
https://ithelp.ithome.com.tw/upload/images/20211004/20115941l5HIQMREvx.jpg
可以先查看一下资料库语法跟构想的有没有一样,还有输出结果是否正确

结语

有细心跟着做的小夥伴会发现,
其实我们资料库的栏位还少一个状态栏位。
用来判断订单是否完成。
之後我们在需要使用到的时候,除了会顺便加上去这个栏位外,
还会顺便介绍我们这样设计模式的好处在哪。


<<:  DAY19:学习率(上)

>>:  【Day 19】- 让 Selenium 去 Dcard 上爬文! (实战 Selenium 模拟使用者划手机 1/2)

成员 4 人:杰克爬上藤蔓,不想救公主

一人企业不会倒,顶多自己过不好。 两人企业不会倒,顶多女友跑掉。 三人企业不会倒,顶多大家说好领得少...

Day 21 - 网际网路的运行

今天,我们来聊一下网路世界中的运行方式。 先提前说,这篇跟 HomeLab 其实就没有特别大的关系了...

安装seldon

上一篇, 我们已使用 xgboost 完成训练并且产生model档, 这个model的档名为bst_...

iOS App开发 OC 第二天, 属性 @property 的特性(attribute)

从Swift 到 OC 第二天, 属性 @property 的特性(attribute) tags:...

初学者跪着学JavaScript Day14 : 创建Array 四种方式

一日客语:睡觉 客语:睡目 soi55mug2 虽木˙ 介绍: 有字面值:[ ] [ ]里面值称为元...