using AMESCoreStudio.CommonTools.Result; using AMESCoreStudio.WebApi.DTO.AMES; using AMESCoreStudio.WebApi.Extensions; using AMESCoreStudio.WebApi.Models.AMES; using Dapper; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Threading.Tasks; namespace AMESCoreStudio.WebApi.Controllers.AMES { /// /// 鋼板基本資料檔 /// [Route("api/[controller]")] [ApiController] public class SteelPlateInfoController : ControllerBase { private readonly AMESContext _context; public SteelPlateInfoController(AMESContext context) { _context = context; } // GET: api/SteelPlateInfo [HttpGet] public async Task>> GetSteelPlateInfos() { return await _context.SteelPlateInfos.ToListAsync(); } // GET: api/SteelPlateInfo/5 [HttpGet("{id}")] public async Task> GetSteelPlateInfo(int id) { var steelPlateInfo = await _context.SteelPlateInfos.FindAsync(id); if (steelPlateInfo == null) { return NotFound(); } return steelPlateInfo; } /// /// By 鋼板編號 查詢 /// /// 鋼板編號 /// [HttpGet("ByNo/{id}")] public async Task>> GetSteelPlateInfoByNo(string id) { var steelPlateInfos = await _context.SteelPlateInfos.Where(w => w.SteelPlateNo == id.ToUpper()) .ToListAsync(); return steelPlateInfos; } /// /// 鋼板資料查詢 /// /// 鋼板編號 /// 儲存位置 /// 料號 /// 狀態 /// 到廠日_起 /// 到廠日_迄 /// 鋼板未下線狀態 Y/N /// 頁數 /// 筆數 /// [HttpGet("SteelPlateInfoQuery")] public async Task> GetSteelPlateInfoQuery(string steelPlateNo, string storageLocation, string item, string status, string date_str, string date_end, string checkOff, int page = 0, int limit = 10) { // 需要查詢鋼板未下線資料 var SteelPlateIDs = new List(); if (checkOff == "Y") { SteelPlateIDs = _context.SteelPlateMeasures.Where(w => w.OffDate == null && w.OnDate != null) .Select(s => s.SteelPlateID) .Distinct().ToList(); } var q = await _context.SteelPlateInfos.ToListAsync(); if (SteelPlateIDs.Count() != 0) { q = q.Where(w => SteelPlateIDs.Contains(w.SteelPlateID)).ToList(); } if (!string.IsNullOrWhiteSpace(steelPlateNo)) { q = q.Where(w => w.SteelPlateNo.Contains(steelPlateNo.Trim().ToUpper())).ToList(); } if (!string.IsNullOrWhiteSpace(item)) { q = q.Where(w => w.Items.Contains(item.Trim().ToUpper())).ToList(); } if (!string.IsNullOrWhiteSpace(storageLocation)) { q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper()).ToList(); } if (!string.IsNullOrWhiteSpace(status)) { q = q.Where(w => w.Status == status).ToList(); } DateTime dateTime = DateTime.Now; if (DateTime.TryParse(date_str, out dateTime)) { q = q.Where(w => w.ArrivalDate >= DateTime.Parse(date_str)).ToList(); } if (DateTime.TryParse(date_end, out dateTime)) { q = q.Where(w => w.ArrivalDate <= DateTime.Parse(date_end)).ToList(); } ResultModel result = new ResultModel(); // Table 頁數 if (page > 0) { q = q.Skip((page - 1) * limit).Take(limit).ToList(); } // 紀錄筆數 result.DataTotal = q.Count(); result.Data = q.Select(s => new SteelPlateInfoDto { SteelPlateID = s.SteelPlateID, SteelPlateNo = s.SteelPlateNo, ArrivalDate = s.ArrivalDate, Items = s.Items, StorageLocation = s.StorageLocation, Boards = s.Boards, UsedTimes = s.UsedTimes, BeUseTimes = s.BeUseTimes, TotalTimes = s.TotalTimes, StatusName = s.Status == "0" ? "失效" : "有效", Remark = s.Remark }).ToList(); return result; } /// /// 鋼板資料查詢 Report /// /// 鋼板編號 /// 儲存位置 /// 料號 /// 工單號碼 /// 到廠日_起 /// 到廠日_迄 /// 頁數 /// 筆數 /// [HttpGet("SteelPlateInfoReport")] public ResultModel GetSteelPlateInfoReport(string steelPlateNo, string storageLocation, string item, string wipNo , string date_str, string date_end, int page = 0, int limit = 10) { var q = from q1 in _context.SteelPlateInfos join q2 in _context.SteelPlateMeasures on q1.SteelPlateID equals q2.SteelPlateID into s from q2 in s.DefaultIfEmpty() join q3 in _context.UserInfoes on q2.OnUserID equals q3.UserID into s1 from q3 in s1.DefaultIfEmpty() join q4 in _context.UserInfoes on q2.OffUserID equals q4.UserID into s2 from q4 in s2.DefaultIfEmpty() join q5 in _context.UserInfoes on q1.CreateUserID equals q5.UserID into s3 from q5 in s3.DefaultIfEmpty() select new PCB016ViewDto { SteelPlateID = q1.SteelPlateID, SteelPlateNo = q1.SteelPlateNo, Items = q1.Items, StorageLocation = q1.StorageLocation, Boards = q1.Boards, CreateUserName = q3.UserName, Remark = q1.Remark, ArrivalDate = q1.ArrivalDate, BeUseTimes = q1.BeUseTimes, UsedTimes = q1.UsedTimes, WipNo = q2.WipNo, OnTension1 = q2.OnTension1, OnTension2 = q2.OnTension2, OnTension3 = q2.OnTension3, OnTension4 = q2.OnTension4, OnTension5 = q2.OnTension5, OnUserName = q4.UserName, OnDate = q2.OnDate, OffTension1 = q2.OffTension1, OffTension2 = q2.OffTension2, OffTension3 = q2.OffTension3, OffTension4 = q2.OffTension4, OffTension5 = q2.OffTension5, OffUserName = q5.UserName, OffDate = q2.OffDate, }; if (!string.IsNullOrWhiteSpace(steelPlateNo)) { q = q.Where(w => w.SteelPlateNo.Contains(steelPlateNo.Trim().ToUpper())); } if (!string.IsNullOrWhiteSpace(item)) { q = q.Where(w => w.Items.Contains(item.Trim().ToUpper())); } if (!string.IsNullOrWhiteSpace(storageLocation)) { q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper()); } if (!string.IsNullOrWhiteSpace(wipNo)) { q = q.Where(w => w.WipNo.Contains(wipNo.Trim().ToUpper())); } DateTime dateTime = DateTime.Now; if (DateTime.TryParse(date_str, out dateTime)) { q = q.Where(w => w.ArrivalDate >= DateTime.Parse(date_str)); } if (DateTime.TryParse(date_end, out dateTime)) { q = q.Where(w => w.ArrivalDate <= DateTime.Parse(date_end)); } ResultModel result = new ResultModel(); // Table 頁數 if (page > 0) { q = q.Skip((page - 1) * limit).Take(limit); } // 紀錄筆數 result.DataTotal = q.Count(); result.Data = q.ToList(); return result; } /// /// 鋼板資料查詢 Report (未使用) /// /// 鋼板編號 /// 儲存位置 /// 料號 /// 工單號碼 /// 到廠日_起 /// 到廠日_迄 /// 頁數 /// 筆數 /// [HttpGet("SteelPlateInfoReportByUnused")] public async Task> GetSteelPlateInfoReportByUnused(string steelPlateNo, string storageLocation, string item, string wipNo , string date_str, string date_end, int page = 0, int limit = 10) { var query = @$" SELECT I.STEEL_PLATE_ID AS SteelPlateID , I.STEEL_PLATE_NO AS SteelPlateNo , I.ITEMS AS Items , I.BOARDS AS Boards , I.STORAGE_LOCATION AS StorageLocation , I.BE_USE_TIMES AS BeUseTimes , I.USED_TIMES AS UsedTimes , I.ARRIVAL_DATE AS ArrivalDate FROM JHAMES.STEEL_PLATE_INFO I WHERE NOT EXISTS ( SELECT 1 FROM JHAMES.STEEL_PLATE_MEASURE M WHERE I.STEEL_PLATE_ID = M.STEEL_PLATE_ID ) AND NOT EXISTS ( SELECT 1 FROM JHAMES.STEEL_PLATE_MEASURE_NG G WHERE I.STEEL_PLATE_ID = G.STEEL_PLATE_ID ) "; DynamicParameters p = new DynamicParameters(); var q = await _context.Database.DapperQueryAsync(query, p); if (!string.IsNullOrWhiteSpace(steelPlateNo)) { q = q.Where(w => w.SteelPlateNo.Contains(steelPlateNo.Trim().ToUpper())); } if (!string.IsNullOrWhiteSpace(item)) { q = q.Where(w => w.Items.Contains(item.Trim().ToUpper())); } if (!string.IsNullOrWhiteSpace(storageLocation)) { q = q.Where(w => w.StorageLocation == storageLocation.Trim().ToUpper()); } DateTime dateTime = DateTime.Now; if (DateTime.TryParse(date_str, out dateTime)) { q = q.Where(w => w.ArrivalDate >= DateTime.Parse(date_str)); } if (DateTime.TryParse(date_end, out dateTime)) { q = q.Where(w => w.ArrivalDate <= DateTime.Parse(date_end)); } ResultModel result = new ResultModel(); // Table 頁數 if (page > 0) { q = q.Skip((page - 1) * limit).Take(limit); } // 紀錄筆數 result.DataTotal = q.Count(); result.Data = q.ToList(); return result; } /// /// 更新鋼板基本資料檔 /// /// /// [HttpPut] public async Task> PutSteelPlateInfo(SteelPlateInfo steelPlateInfo) { ResultModel result = new ResultModel(); _context.Entry(steelPlateInfo).State = EntityState.Modified; _context.Entry(steelPlateInfo).Property("CreateDate").IsModified = false; _context.Entry(steelPlateInfo).Property("CreateUserID").IsModified = false; try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } /// /// 更新鋼板狀態 /// /// data /// [HttpPut("ByStatus")] public ResultModel PutSteelPlateInfoByStatus(SteelPlateInfo steelPlateInfo) { ResultModel result = new ResultModel(); var query = @" UPDATE JHAMES.STEEL_PLATE_INFO SET STATUS = :status , UPDATE_USERID = :upuser , UPDATE_DATE = sysdate WHERE STEEL_PLATE_ID = :id "; DynamicParameters p = new DynamicParameters(); p.Add("id", steelPlateInfo.SteelPlateID, DbType.Int32); p.Add("status", steelPlateInfo.Status); p.Add("upuser", steelPlateInfo.UpdateUserID, DbType.Int32); try { _context.Database.DapperExecute(query, p); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } /// /// 新增鋼板基本資料檔 /// /// /// [HttpPost] public async Task> PostSteelPlateInfo(SteelPlateInfo steelPlateInfo) { ResultModel result = new ResultModel(); if (await _context.SteelPlateInfos.Where(w => w.SteelPlateNo == steelPlateInfo.SteelPlateNo).AnyAsync()) { result.Success = false; result.Msg = "鋼板編號有重複"; return result; } Helper helper = new Helper(_context); steelPlateInfo.SteelPlateID = helper.GetIDKey("STEEL_PLATE_ID").Result; _context.SteelPlateInfos.Add(steelPlateInfo); try { await _context.SaveChangesAsync(); result.Success = true; result.Msg = "OK"; } catch (Exception ex) { result.Success = false; result.Msg = ex.InnerException.Message; } return result; } // DELETE: api/SteelPlateInfo/5 [HttpDelete("{id}")] public async Task> DeleteSteelPlateInfo(int id) { var steelPlateInfo = await _context.SteelPlateInfos.FindAsync(id); if (steelPlateInfo == null) { return NotFound(); } _context.SteelPlateInfos.Remove(steelPlateInfo); await _context.SaveChangesAsync(); return steelPlateInfo; } private bool SteelPlateInfoExists(int id) { return _context.SteelPlateInfos.Any(e => e.SteelPlateID == id); } } }