public async Task <IActionResult> GetUserMealOrderPageListAsync([FromBody] GetUserMealOrderPageListRequestDto requestDto)
        {
            if (string.IsNullOrWhiteSpace(requestDto.UserGuid))
            {
                requestDto.UserGuid = UserID;
            }
            var result = await new MealOrderBiz().GetUserMealOrderPageListAsync(requestDto);

            return(Success(result));
        }
Beispiel #2
0
        /// <summary>
        /// 获取用户点餐订单分页列表
        /// </summary>
        /// <param name="requestDto"></param>
        /// <param name="userId"></param>
        /// <returns></returns>
        public async Task <GetUserMealOrderPageListResponseDto> GetUserMealOrderPageListAsync(GetUserMealOrderPageListRequestDto requestDto)
        {
            var sql         = $@"DROP TEMPORARY TABLE
                        IF
	                        EXISTS t_meal_order_tmp;
                        DROP TEMPORARY TABLE
                        IF
	                        EXISTS t_meal_order_tmp_1;
                        CREATE TEMPORARY TABLE t_meal_order_tmp AS SELECT
                            a.order_guid,
                            a.order_no,
                            a.meal_date,
                            a.meal_start_time,
                            a.meal_end_time,
                            a.category_name,
                            a.total_price,
                            case when a.meal_end_time<NOW() and a.order_status='Paided' then 'Expired' else a.order_status end as real_order_status,
                            a.creation_date ,
                            b.category_advance_day,
                            b.category_schedule_time
                            FROM
	                            t_meal_order a left join t_meal_category b on a.category_guid=b.category_guid
                            WHERE
	                            a.hospital_guid = @HospitalGuid 
	                            AND a.`enable` = 1 
	                            AND a.user_guid = @userId 
                            ORDER BY
	                            case real_order_status when 'Paided' then 1 when 'Completed' then 2 when 'Canceled' then 3 when 'Expired' then 4 else 5 end asc,
	                            a.meal_start_time 
	                            LIMIT @PageIndex,
	                            @PageSize;
                        CREATE TEMPORARY TABLE t_meal_order_tmp_1 AS SELECT
                        * 
                        FROM
	                        t_meal_order_tmp;
                        SELECT
	                        * 
                        FROM
	                        t_meal_order_tmp;
                            
                        SELECT
                            COUNT(order_guid)
                        FROM
	                        t_meal_order 
                        WHERE
	                        hospital_guid = @HospitalGuid 
	                        AND `enable` = 1 
	                        AND user_guid = @userId ;
                        SELECT
	                        a.order_guid,
	                        b.dishes_guid,
	                        b.dishes_name,
	                        b.quantity 
                        FROM
	                        t_meal_order_tmp_1 a
	                        INNER JOIN t_meal_order_detail b ON a.order_guid = b.order_guid
	                        INNER JOIN t_meal_dishes c ON c.dishes_guid = b.dishes_guid;"    ;
            var order       = new List <GetUserMealOrderPageListQueryDto>();
            var orderDetail = new List <GetUserMealOrderDetailQueryDto>();
            var count       = 0;

            using (var conn = MySqlHelper.GetConnection())
            {
                var reader = await conn.QueryMultipleAsync(sql, new
                {
                    userId = requestDto.UserGuid,
                    requestDto.HospitalGuid,
                    PageIndex = (requestDto.PageIndex - 1) * requestDto.PageSize,
                    requestDto.PageSize
                });

                order       = reader.Read <GetUserMealOrderPageListQueryDto>().AsList();
                count       = reader.ReadFirstOrDefault <int?>() ?? 0;
                orderDetail = reader.Read <GetUserMealOrderDetailQueryDto>().AsList();
            }
            return(new GetUserMealOrderPageListResponseDto
            {
                CurrentPage = order.Select(a => new GetUserMealOrderPageListItemDto
                {
                    OrderGuid = a.OrderGuid,
                    OrderNo = a.OrderNo,
                    MealDate = a.MealDate,
                    MealStartTime = a.MealStartTime,
                    MealEndTime = a.MealEndTime,
                    CanCancel = a.RealOrderStatus == MealOrderStatusEnum.Paided.ToString() && Convert.ToDateTime($"{a.MealDate.AddDays(a.CategoryAdvanceDay * (-1)).ToString("yyyy-MM-dd")} {a.CategoryScheduleTime}") > DateTime.Now,
                    CategoryName = a.CategoryName,
                    TotalPrice = a.TotalPrice,
                    OrderStatus = a.RealOrderStatus,
                    CreationDate = a.CreationDate,
                    OrderDetails = orderDetail.Where(d => d.OrderGuid == a.OrderGuid).Select(d => new GetUserMealOrderPageListItemDto.GetUserMealOrderDetailResponseDto
                    {
                        DishesName = d.DishesName,
                        Quantity = d.Quantity
                    }).AsList()
                }),
                Total = count
            });
        }