【Side Project】 订单清单 - 资料库新增状态栏位

昨天取得资料库中的清单後,会发现一个问题,
我们无法判断哪些订单已经完成和未完成。

状态栏位新增

  1. 开启ssms
  2. 连线到webmenu的资料库中
  3. 新增orderDone 与 itemDone 两个栏位
begin tran
ALTER TABLE menulisth ADD orderDone bit Default 0
ALTER TABLE menulistb ADD itemDone bit Default 0

commit tran

https://ithelp.ithome.com.tw/upload/images/20211005/20115941224xjnn4Fo.jpg
两个数值初始值都给予0,当资料型态变成 1的时候就是已经完成了。

修改Data Class

接着我们需要把刚刚新增的栏位加入到我们的Data Class 中,
这样才可以与资料库的栏位完全匹配

  1. 打开Menulisth.cs
  2. 新增栏位 OrderDone
[SugarColumn(IsOnlyIgnoreInsert = true)]
        public bool OrderDone { get; set; }

我们在新增的时候已经有赋予预设值了,所以在insert的时候不需要给他数值。
另外SQL中的bit 等同於 C#中的 bool
所以我们这边要用bool型态对应。
3. 打开Menulistb.cs
4. 新增栏位 ItemDone

[SugarColumn(IsOnlyIgnoreInsert = true)]
        public bool ItemDone { get; set; }

跟前面一样使用bool型态作对应。

取得未完成的订单

若我们在SelectOrder()中想取得的订单只有未完成订单的话,
我们只需要在SelectOrder中修改

  1. 打开ProprietorModel.cs
  2. 修改SelectOrder(),新增where条件
var list_h = db.Queryable<Menulisth>().Where(item => item.OrderDone == false).OrderBy(menu => menu.Createtime, OrderByType.Asc).ToList();
                var list_b = db.Queryable<Menulistb, Menulisth>((body, head) => new JoinQueryInfos(JoinType.Left, head.Uid == body.H_uid))
                    .Where((body, head) => head.OrderDone == false)
                    .OrderBy((body, head) => head.Createtime, OrderByType.Asc)
                    .Select<Menulistb>().ToList();

完整程序码:

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>().Where(item => item.OrderDone == false).OrderBy(menu => menu.Createtime, OrderByType.Asc).ToList();
                var list_b = db.Queryable<Menulistb, Menulisth>((body, head) => new JoinQueryInfos(JoinType.Left, head.Uid == body.H_uid))
                    .Where((body, head) => head.OrderDone == false)
                    .OrderBy((body, 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;
        }
  1. 这样就可以取得未完成订单的清单
    https://ithelp.ithome.com.tw/upload/images/20211005/20115941Etg5DpNpKN.jpg

结语

从今天的修改可以看出对一些资料进行修改时,是完全不需要动到Controller
当有一天我们程序码成长到上千行之後,我们不需要在茫茫大海里找出我们处理资料的逻辑。
只需要在对应的function()中进行修改即可。

之後的篇章中我们会用到今天新增的栏位来帮我们分已完成与未完成的订单。
这边会需要用到动态新增资料的方式。
如果希望资料库能有更完整的结构的话还可以新增两个栏位:

  1. 资料修改的时间
  2. 资料取得的时间
    透过这两个资料的比对,可以让我们知道说每次应该要取多少笔资料。
    而不用每次做更新时,都需要把所有未完成/已完成的资料再取回来一次。

<<:  【Day 20】QGIS + OSM + folium part 2

>>:  LeetCode 双刀流: 90. Subsets II

我与程序的距离-Day2

不难发现,问题在於该用什麽标准来做决定呢?梁晓声曾讲过,友谊,好比一瓶酒,封存的时间越长,价值则越高...

小测试

这篇就做个小测试来解答我的疑问。 首先上一篇是爬阅览人数并且输入进资料库中,那阅览人数其实算数字嘛,...

Day 3 - 系统面临哪些威胁?

出於书本 Chapter 1. Introduction to Ethical Hacking 非技...

[13th][Day19] http request header(上)

golang 服务 常用於 http server/ http client 来看看一张厉害的图儿 ...

Day22 jQuery 基本教学(二)

selector 选取 JQ 的 DOM 存取方式是透过 selector 来达到索引目标,会先转换...