/// <summary> /// R01 每日菜單報表 /// </summary> /// <param name="parm"></param> /// <returns></returns> public IHttpActionResult GetDailyMealInfo([FromUri]ParmGetDailyMealInfo parm) { db0 = getDB0(); try { R01_DailyMeal data = new R01_DailyMeal(); Matters matters = new Matters(); //取得正在用餐日期內的客戶生產編號 var all_born_id = db0.RecordDetail.Where(x => x.product_type == (int)ProdyctType.PostnatalMeal & x.real_meal_start <= parm.meal_day & x.real_meal_end >= parm.meal_day & x.is_release == false & x.company_id == this.companyId) .OrderBy(x => x.meal_id) .Select(x => new { x.born_id, x.meal_id, x.real_meal_start, x.real_meal_end }).ToList(); MealDay pause_meal = new MealDay(); MealDay start_meal = new MealDay(); MealDay end_meal = new MealDay(); MealDaybyTryout tryout_meal = new MealDaybyTryout(); #region 塞空資料 pause_meal.breakfast = new List<string>(); pause_meal.lunch = new List<string>(); pause_meal.dinner = new List<string>(); start_meal.breakfast = new List<string>(); start_meal.lunch = new List<string>(); start_meal.dinner = new List<string>(); end_meal.breakfast = new List<string>(); end_meal.lunch = new List<string>(); end_meal.dinner = new List<string>(); #endregion foreach (var born_id in all_born_id) { #region 停餐 var pause_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & x.meal_day == parm.meal_day).FirstOrDefault(); if (pause_DailyMeal == null) { pause_meal.breakfast.Add(born_id.meal_id); pause_meal.lunch.Add(born_id.meal_id); pause_meal.dinner.Add(born_id.meal_id); } else { if (pause_DailyMeal.breakfast_state <= 0) pause_meal.breakfast.Add(born_id.meal_id); if (pause_DailyMeal.lunch_state <= 0) pause_meal.lunch.Add(born_id.meal_id); if (pause_DailyMeal.dinner_state <= 0) pause_meal.dinner.Add(born_id.meal_id); } #endregion #region 開始 var start_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0)) .OrderBy(x => x.meal_day).FirstOrDefault(); if (start_DailyMeal.meal_day == parm.meal_day)//開始用餐日期為當日 { if (start_DailyMeal.breakfast_state > 0) { start_meal.breakfast.Add(born_id.meal_id); } else if (start_DailyMeal.lunch_state > 0) { start_meal.lunch.Add(born_id.meal_id); } else if (start_DailyMeal.dinner_state > 0) { start_meal.dinner.Add(born_id.meal_id); } } #endregion #region 結束 var end_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0)) .OrderByDescending(x => x.meal_day).FirstOrDefault(); if (end_DailyMeal.meal_day == parm.meal_day)//結束用餐日期為當日 { if (end_DailyMeal.dinner_state > 0) { end_meal.dinner.Add(born_id.meal_id); } else if (end_DailyMeal.lunch_state > 0) { end_meal.lunch.Add(born_id.meal_id); } else if (end_DailyMeal.breakfast_state > 0) { end_meal.breakfast.Add(born_id.meal_id); } } #endregion } #region 試吃 var tryout_DailyMeal = db0.DailyMeal.Where(x => x.product_type == (int)ProdyctType.Tryout & x.meal_day == parm.meal_day & x.company_id == this.companyId); tryout_meal.breakfast = tryout_DailyMeal.Where(x => x.breakfast_state > 0).Count(); tryout_meal.lunch = tryout_DailyMeal.Where(x => x.lunch_state > 0).Count(); tryout_meal.dinner = tryout_DailyMeal.Where(x => x.dinner_state > 0).Count(); #endregion matters.pause_meal = pause_meal; matters.start_meal = start_meal; matters.end_meal = end_meal; matters.tryout_meal = tryout_meal; //取得今天用餐排程 var getDailyMeal = db0.DailyMeal.Where(x => x.meal_day == parm.meal_day && x.product_type == (int)ProdyctType.PostnatalMeal & x.company_id == this.companyId).OrderBy(x => x.meal_id).ToList(); List<Require> special_diet = new List<Require>(); MealDiet breakfast = new MealDiet(); MealDiet lunch = new MealDiet(); MealDiet dinner = new MealDiet(); breakfast.dishs = new List<Dish>(); lunch.dishs = new List<Dish>(); dinner.dishs = new List<Dish>(); #region 取得三餐菜單 //取得當日菜單 var getDailyMenu = db0.DailyMenu.Where(x => x.day == parm.meal_day & x.company_id == this.companyId).ToList(); foreach (var DailyMenu_item in getDailyMenu) { #region 取得對應組合菜單 List<Dish> dishs = new List<Dish>(); var constitute_id = db0.DailyMenuOfConstitute.Where(x => x.dail_menu_id == DailyMenu_item.dail_menu_id & x.company_id == this.companyId) .OrderByDescending(x => x.ConstituteFood.All_Category_L2.sort).Select(x => new { x.constitute_id, x.ConstituteFood.constitute_name }).ToList(); foreach (var id in constitute_id) { List<Require> Empty_RequireData = new List<Require>(); var dish = new Dish() { constitute_id = id.constitute_id, dish_name = id.constitute_name, meal_diet = Empty_RequireData//暫時塞空資料 }; dishs.Add(dish); } #endregion if (DailyMenu_item.meal_type == (int)MealType.Breakfast) { breakfast.dishs = dishs; breakfast.isHaveData = true; breakfast.count = getDailyMeal.Where(x => x.breakfast_state > 0).Count(); } if (DailyMenu_item.meal_type == (int)MealType.Lunch) { lunch.dishs = dishs; lunch.isHaveData = true; lunch.count = getDailyMeal.Where(x => x.lunch_state > 0).Count(); } if (DailyMenu_item.meal_type == (int)MealType.Dinner) { dinner.dishs = dishs; dinner.isHaveData = true; dinner.count = getDailyMeal.Where(x => x.dinner_state > 0).Count(); } } #endregion foreach (var DailyMeal_Item in getDailyMeal) { if (DailyMeal_Item.breakfast_state > 0 || DailyMeal_Item.lunch_state > 0 || DailyMeal_Item.dinner_state > 0) {//只要三餐有一餐有,就列特殊飲食 //取得該客戶需求元素id var dietary_need_id = db0.CustomerOfDietaryNeed.Where(x => x.CustomerNeed.born_id == DailyMeal_Item.born_id & x.company_id == this.companyId).Select(x => x.dietary_need_id); #region 無對應特殊飲食習慣 //未對應 var no_correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & !x.is_correspond & x.company_id == this.companyId).ToList(); foreach (var dn_item in no_correspond) { //檢查此特殊飲食是否出現過 bool check_r = special_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_r) { var s = special_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; special_diet.Add(s); } } #endregion #region 有對應特殊飲食習慣 //有對應 var correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & x.is_correspond & x.company_id == this.companyId).ToList(); foreach (var dn_item in correspond) { #region 早餐 if (DailyMeal_Item.breakfast_state > 0 && dn_item.is_breakfast && breakfast.isHaveData) { foreach (var b in breakfast.dishs) { //取得菜單元素對應元素 var b_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == b.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => b_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_b = b.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_b) { var s = b.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; b.meal_diet.Add(s); } } #endregion } } #endregion #region 午餐 if (DailyMeal_Item.lunch_state > 0 && dn_item.is_lunch && lunch.isHaveData) { foreach (var l in lunch.dishs) { //取得菜單元素對應元素 var l_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == l.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => l_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_l = l.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_l) { var s = l.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; l.meal_diet.Add(s); } } #endregion } } #endregion #region 晚餐 if (DailyMeal_Item.dinner_state > 0 && dn_item.is_dinner && dinner.isHaveData) { foreach (var d in dinner.dishs) { //取得菜單元素對應元素 var d_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == d.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => d_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_d = d.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_d) { var s = d.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; d.meal_diet.Add(s); } } #endregion } } #endregion } #endregion } } data.matters = matters; data.special_diet = special_diet; data.breakfast = breakfast; data.lunch = lunch; data.dinner = dinner; return Ok(data); } catch (Exception ex) { string test = ex.ToString(); return Ok(test); } finally { db0.Dispose(); } }
// GET: ExcelReport public FileResult downloadExcel_DailyMeal(ParmGetDailyMealInfo parm) { ExcelPackage excel = null; MemoryStream fs = null; var db0 = getDB0(); try { fs = new MemoryStream(); excel = new ExcelPackage(fs); excel.Workbook.Worksheets.Add("DailyMealData"); ExcelWorksheet sheet = excel.Workbook.Worksheets["DailyMealData"]; sheet.View.TabSelected = true; #region 取得用餐排程 R01_DailyMeal data = new R01_DailyMeal(); Matters matters = new Matters(); //取得正在用餐日期內的客戶生產編號 var all_born_id = db0.RecordDetail.Where(x => x.product_type == (int)ProdyctType.PostnatalMeal & x.real_meal_start <= parm.meal_day & x.real_meal_end >= parm.meal_day & x.is_release == false) .OrderBy(x => x.meal_id) .Select(x => new { x.born_id, x.meal_id, x.real_meal_start, x.real_meal_end }).ToList(); MealDay pause_meal = new MealDay(); MealDay start_meal = new MealDay(); MealDay end_meal = new MealDay(); MealDaybyTryout tryout_meal = new MealDaybyTryout(); #region 塞空資料 pause_meal.breakfast = new List<string>(); pause_meal.lunch = new List<string>(); pause_meal.dinner = new List<string>(); start_meal.breakfast = new List<string>(); start_meal.lunch = new List<string>(); start_meal.dinner = new List<string>(); end_meal.breakfast = new List<string>(); end_meal.lunch = new List<string>(); end_meal.dinner = new List<string>(); #endregion foreach (var born_id in all_born_id) { #region 停餐 var pause_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & x.meal_day == parm.meal_day).FirstOrDefault(); if (pause_DailyMeal == null) { pause_meal.breakfast.Add(born_id.meal_id); pause_meal.lunch.Add(born_id.meal_id); pause_meal.dinner.Add(born_id.meal_id); } else { if (pause_DailyMeal.breakfast_state <= 0) pause_meal.breakfast.Add(born_id.meal_id); if (pause_DailyMeal.lunch_state <= 0) pause_meal.lunch.Add(born_id.meal_id); if (pause_DailyMeal.dinner_state <= 0) pause_meal.dinner.Add(born_id.meal_id); } #endregion #region 開始 var start_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0)) .OrderBy(x => x.meal_day).FirstOrDefault(); if (start_DailyMeal.meal_day == parm.meal_day)//開始用餐日期為當日 { if (start_DailyMeal.breakfast_state > 0) { start_meal.breakfast.Add(born_id.meal_id); } else if (start_DailyMeal.lunch_state > 0) { start_meal.lunch.Add(born_id.meal_id); } else if (start_DailyMeal.dinner_state > 0) { start_meal.dinner.Add(born_id.meal_id); } } #endregion #region 結束 var end_DailyMeal = db0.DailyMeal.Where(x => x.born_id == born_id.born_id & x.product_type == (int)ProdyctType.PostnatalMeal & (x.breakfast_state > 0 || x.lunch_state > 0 || x.dinner_state > 0)) .OrderByDescending(x => x.meal_day).FirstOrDefault(); if (end_DailyMeal.meal_day == parm.meal_day)//結束用餐日期為當日 { if (end_DailyMeal.dinner_state > 0) { end_meal.dinner.Add(born_id.meal_id); } else if (end_DailyMeal.lunch_state > 0) { end_meal.lunch.Add(born_id.meal_id); } else if (end_DailyMeal.breakfast_state > 0) { end_meal.breakfast.Add(born_id.meal_id); } } #endregion } #region 試吃 var tryout_DailyMeal = db0.DailyMeal.Where(x => x.product_type == (int)ProdyctType.Tryout & x.meal_day == parm.meal_day); tryout_meal.breakfast = tryout_DailyMeal.Where(x => x.breakfast_state > 0).Count(); tryout_meal.lunch = tryout_DailyMeal.Where(x => x.lunch_state > 0).Count(); tryout_meal.dinner = tryout_DailyMeal.Where(x => x.dinner_state > 0).Count(); #endregion matters.pause_meal = pause_meal; matters.start_meal = start_meal; matters.end_meal = end_meal; matters.tryout_meal = tryout_meal; //取得今天用餐排程 var getDailyMeal = db0.DailyMeal.Where(x => x.meal_day == parm.meal_day && x.product_type == (int)ProdyctType.PostnatalMeal).OrderBy(x => x.meal_id).ToList(); List<Require> special_diet = new List<Require>(); MealDiet breakfast = new MealDiet(); MealDiet lunch = new MealDiet(); MealDiet dinner = new MealDiet(); breakfast.dishs = new List<Dish>(); lunch.dishs = new List<Dish>(); dinner.dishs = new List<Dish>(); #region 取得三餐菜單 //取得當日菜單 var getDailyMenu = db0.DailyMenu.Where(x => x.day == parm.meal_day).ToList(); foreach (var DailyMenu_item in getDailyMenu) { #region 取得對應組合菜單 List<Dish> dishs = new List<Dish>(); var constitute_id = db0.DailyMenuOfConstitute.Where(x => x.dail_menu_id == DailyMenu_item.dail_menu_id) .OrderByDescending(x => x.ConstituteFood.All_Category_L2.sort).Select(x => new { x.constitute_id, x.ConstituteFood.constitute_name }).ToList(); foreach (var id in constitute_id) { List<Require> Empty_RequireData = new List<Require>(); var dish = new Dish() { constitute_id = id.constitute_id, dish_name = id.constitute_name, meal_diet = Empty_RequireData//暫時塞空資料 }; dishs.Add(dish); } #endregion if (DailyMenu_item.meal_type == (int)MealType.Breakfast) { breakfast.dishs = dishs; breakfast.isHaveData = true; breakfast.count = getDailyMeal.Where(x => x.breakfast_state > 0).Count(); } if (DailyMenu_item.meal_type == (int)MealType.Lunch) { lunch.dishs = dishs; lunch.isHaveData = true; lunch.count = getDailyMeal.Where(x => x.lunch_state > 0).Count(); } if (DailyMenu_item.meal_type == (int)MealType.Dinner) { dinner.dishs = dishs; dinner.isHaveData = true; dinner.count = getDailyMeal.Where(x => x.dinner_state > 0).Count(); } } #endregion foreach (var DailyMeal_Item in getDailyMeal) { if (DailyMeal_Item.breakfast_state > 0 || DailyMeal_Item.lunch_state > 0 || DailyMeal_Item.dinner_state > 0) {//只要三餐有一餐有,就列特殊飲食 //取得該客戶需求元素id var dietary_need_id = db0.CustomerOfDietaryNeed.Where(x => x.CustomerNeed.born_id == DailyMeal_Item.born_id).Select(x => x.dietary_need_id); #region 無對應特殊飲食習慣 //未對應 var no_correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & !x.is_correspond).ToList(); foreach (var dn_item in no_correspond) { //檢查此特殊飲食是否出現過 bool check_r = special_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_r) { var s = special_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; special_diet.Add(s); } } #endregion #region 有對應特殊飲食習慣 //有對應 var correspond = db0.DietaryNeed.Where(x => dietary_need_id.Contains(x.dietary_need_id) & x.is_correspond).ToList(); foreach (var dn_item in correspond) { #region 早餐 if (DailyMeal_Item.breakfast_state > 0 && dn_item.is_breakfast && breakfast.isHaveData) { foreach (var b in breakfast.dishs) { //取得菜單元素對應元素 var b_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == b.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => b_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_b = b.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_b) { var s = b.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; b.meal_diet.Add(s); } } #endregion } } #endregion #region 午餐 if (DailyMeal_Item.lunch_state > 0 && dn_item.is_lunch && lunch.isHaveData) { foreach (var l in lunch.dishs) { //取得菜單元素對應元素 var l_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == l.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => l_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_l = l.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_l) { var s = l.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; l.meal_diet.Add(s); } } #endregion } } #endregion #region 晚餐 if (DailyMeal_Item.dinner_state > 0 && dn_item.is_dinner && dinner.isHaveData) { foreach (var d in dinner.dishs) { //取得菜單元素對應元素 var d_element_id = db0.ConstituteOfElement.Where(x => x.constitute_id == d.constitute_id).Select(x => x.element_id).ToList(); //如果和需求元素對應元素d有重疊 bool check_element_id = db0.DietaryNeedOfElement.Any(x => d_element_id.Contains(x.element_id) && x.dietary_need_id == dn_item.dietary_need_id); #region 有重疊就加入 if (check_element_id) { //檢查此飲食是否在此餐出現過 bool check_d = d.meal_diet.Any(x => x.dietary_need_id == dn_item.dietary_need_id); if (check_d) { var s = d.meal_diet.Where(x => x.dietary_need_id == dn_item.dietary_need_id).FirstOrDefault(); s.count = s.count + 1; s.meal_id.Add(DailyMeal_Item.meal_id); } else { List<string> meal_id = new List<string>(); meal_id.Add(DailyMeal_Item.meal_id); var s = new Require() { dietary_need_id = dn_item.dietary_need_id, require_name = dn_item.short_name, count = 1, meal_id = meal_id }; d.meal_diet.Add(s); } } #endregion } } #endregion } #endregion } } data.matters = matters; data.special_diet = special_diet; data.breakfast = breakfast; data.lunch = lunch; data.dinner = dinner; #endregion #region Excel Handle int detail_row = 8; #region 標題 sheet.Cells[1, 1].Value = "R01每日菜單報表-" + parm.meal_day.ToString("yyyy-MM-dd"); sheet.Cells[1, 1, 1, 6].Merge = true; #region 當日事項 sheet.Cells[2, 1].Value = "[當日事項]"; sheet.Cells[2, 1, 2, 6].Merge = true; setFontColor_green(sheet, 2, 1); setGreenTitle(sheet, 2, 1, 6); #endregion #region 特殊飲食 sheet.Cells[detail_row, 1].Value = "[特殊飲食]"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; setFontColor_red(sheet, detail_row, 1); setRedTitle(sheet, detail_row, 1, 6); #endregion #endregion #region 內容 #region 當日事項 #region 停餐 #region 早 string p_breakfast = "停早(" + data.matters.pause_meal.breakfast.Count() + "):"; foreach (var i in data.matters.pause_meal.breakfast) { p_breakfast += i + "、"; } sheet.Cells[3, 1].Value = p_breakfast; sheet.Cells[3, 1, 3, 2].Merge = true; #endregion #region 午 string p_lunch = "停午(" + data.matters.pause_meal.lunch.Count() + "):"; foreach (var i in data.matters.pause_meal.lunch) { p_lunch += i + "、"; } sheet.Cells[3, 3].Value = p_lunch; sheet.Cells[3, 3, 3, 4].Merge = true; #endregion #region 晚 string p_dinner = "停晚(" + data.matters.pause_meal.dinner.Count() + "):"; foreach (var i in data.matters.pause_meal.dinner) { p_dinner += i + "、"; } sheet.Cells[3, 5].Value = p_dinner; sheet.Cells[3, 5, 3, 6].Merge = true; #endregion #endregion #region 開始用餐 #region 早 string s_breakfast = "早開始(" + data.matters.start_meal.breakfast.Count() + "):"; foreach (var i in data.matters.start_meal.breakfast) { s_breakfast += i + "、"; } sheet.Cells[4, 1].Value = s_breakfast; sheet.Cells[4, 1, 4, 2].Merge = true; #endregion #region 午 string s_lunch = "午開始(" + data.matters.start_meal.lunch.Count() + "):"; foreach (var i in data.matters.start_meal.lunch) { s_lunch += i + "、"; } sheet.Cells[4, 3].Value = s_lunch; sheet.Cells[4, 3, 4, 4].Merge = true; #endregion #region 晚 string s_dinner = "晚開始(" + data.matters.start_meal.dinner.Count() + "):"; foreach (var i in data.matters.start_meal.dinner) { s_dinner += i + "、"; } sheet.Cells[4, 5].Value = s_dinner; sheet.Cells[4, 5, 4, 6].Merge = true; #endregion #endregion #region 結束用餐 #region 早 string e_breakfast = "早結束(" + data.matters.end_meal.breakfast.Count() + "):"; foreach (var i in data.matters.end_meal.breakfast) { e_breakfast += i + "、"; } sheet.Cells[5, 1].Value = e_breakfast; sheet.Cells[5, 1, 5, 2].Merge = true; #endregion #region 午 string e_lunch = "午結束(" + data.matters.end_meal.lunch.Count() + "):"; foreach (var i in data.matters.end_meal.lunch) { e_lunch += i + "、"; } sheet.Cells[5, 3].Value = e_lunch; sheet.Cells[5, 3, 5, 4].Merge = true; #endregion #region 晚 string e_dinner = "晚結束(" + data.matters.end_meal.dinner.Count() + "):"; foreach (var i in data.matters.end_meal.dinner) { e_dinner += i + "、"; } sheet.Cells[5, 5].Value = e_dinner; sheet.Cells[5, 5, 5, 6].Merge = true; #endregion #endregion #region 試吃 #region 早 string t_breakfast = "早試吃(" + data.matters.tryout_meal.breakfast + ")"; sheet.Cells[6, 1].Value = t_breakfast; sheet.Cells[6, 1, 6, 2].Merge = true; #endregion #region 午 string t_lunch = "午試吃(" + data.matters.tryout_meal.lunch + ")"; sheet.Cells[6, 3].Value = t_lunch; sheet.Cells[6, 3, 6, 4].Merge = true; #endregion #region 晚 string t_dinner = "晚試吃(" + data.matters.tryout_meal.dinner + ")"; sheet.Cells[6, 5].Value = t_dinner; sheet.Cells[6, 5, 6, 6].Merge = true; #endregion #endregion #endregion #region 特殊飲食 detail_row += 1; foreach (var i in data.special_diet) { sheet.Cells[detail_row, 1].Value = i.require_name + "(" + i.count + "):"; string tmp = ""; foreach (var id in i.meal_id) { tmp += id + "、"; } sheet.Cells[detail_row, 2].Value = tmp; sheet.Cells[detail_row, 2, detail_row, 6].Merge = true; detail_row++; } #endregion #region 早餐 detail_row += 1; #region 標題 sheet.Cells[detail_row, 1].Value = "[早餐(" + data.breakfast.count + ")]"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; setFontColor_orange(sheet, detail_row, 1); setYellowTitle(sheet, detail_row, 1, 6); #endregion detail_row += 1; foreach (var i in data.breakfast.dishs) { int start = detail_row; sheet.Cells[detail_row, 1].Value = i.dish_name; foreach (var j in i.meal_diet) { sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):"; string tmp = ""; foreach (var id in j.meal_id) { tmp += id + "、"; } sheet.Cells[detail_row, 3].Value = tmp; sheet.Cells[detail_row, 3, detail_row, 6].Merge = true; detail_row++; } if (i.meal_diet.Count() == 0) { sheet.Cells[detail_row, 2, detail_row, 6].Merge = true; detail_row++; } else { sheet.Cells[start, 1, detail_row - 1, 1].Merge = true; sheet.Cells[start, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center; } } if (data.breakfast.dishs.Count() == 0) { sheet.Cells[detail_row, 1].Value = "目前暫無排餐!"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; detail_row++; } #endregion #region 午餐 detail_row += 1; #region 標題 sheet.Cells[detail_row, 1].Value = "[午餐(" + data.lunch.count + ")]"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; setFontColor_orange(sheet, detail_row, 1); setYellowTitle(sheet, detail_row, 1, 6); #endregion detail_row += 1; foreach (var i in data.lunch.dishs) { int start = detail_row; sheet.Cells[detail_row, 1].Value = i.dish_name; foreach (var j in i.meal_diet) { sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):"; string tmp = ""; foreach (var id in j.meal_id) { tmp += id + "、"; } sheet.Cells[detail_row, 3].Value = tmp; sheet.Cells[detail_row, 3, detail_row, 6].Merge = true; detail_row++; } if (i.meal_diet.Count() == 0) { sheet.Cells[detail_row, 2, detail_row, 6].Merge = true; detail_row++; } else { sheet.Cells[start, 1, detail_row - 1, 1].Merge = true; sheet.Cells[start, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center; } } if (data.lunch.dishs.Count() == 0) { sheet.Cells[detail_row, 1].Value = "目前暫無排餐!"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; detail_row++; } #endregion #region 晚餐 detail_row += 1; #region 標題 sheet.Cells[detail_row, 1].Value = "[晚餐(" + data.dinner.count + ")]"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; setFontColor_orange(sheet, detail_row, 1); setYellowTitle(sheet, detail_row, 1, 6); #endregion detail_row += 1; foreach (var i in data.dinner.dishs) { int start = detail_row; sheet.Cells[detail_row, 1].Value = i.dish_name; foreach (var j in i.meal_diet) { sheet.Cells[detail_row, 2].Value = j.require_name + "(" + j.count + "):"; string tmp = ""; foreach (var id in j.meal_id) { tmp += id + "、"; } sheet.Cells[detail_row, 3].Value = tmp; sheet.Cells[detail_row, 3, detail_row, 6].Merge = true; detail_row++; } if (i.meal_diet.Count() == 0) { sheet.Cells[detail_row, 2, detail_row, 6].Merge = true; detail_row++; } else { sheet.Cells[start, 1, detail_row - 1, 1].Merge = true; sheet.Cells[start, 1].Style.VerticalAlignment = ExcelVerticalAlignment.Center; } } if (data.dinner.dishs.Count() == 0) { sheet.Cells[detail_row, 1].Value = "目前暫無排餐!"; sheet.Cells[detail_row, 1, detail_row, 6].Merge = true; sheet.Cells[detail_row, 1].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; detail_row++; } #endregion #endregion #region excel排版 int startColumn = sheet.Dimension.Start.Column; int endColumn = sheet.Dimension.End.Column; for (int j = startColumn; j <= endColumn; j++) { //sheet.Column(j).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;//靠左對齊 //sheet.Column(j).Width = 30;//固定寬度寫法 sheet.Column(j).AutoFit();//依內容fit寬度 }//End for #endregion //sheet.Cells.Calculate(); //要對所以Cell做公計計算 否則樣版中的公式值是不會變的 #endregion string filename = "R01每日菜單報表" + "[" + DateTime.Now.ToString("yyyyMMddHHmm") + "].xlsx"; excel.Save(); fs.Position = 0; return File(fs, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename); } catch (Exception ex) { Console.Write(ex.Message); return null; } finally { db0.Dispose(); } }