diff --git a/AMESCoreStudio.Web/AMESCoreStudio.Web.csproj.user b/AMESCoreStudio.Web/AMESCoreStudio.Web.csproj.user index 350985af..171078ef 100644 --- a/AMESCoreStudio.Web/AMESCoreStudio.Web.csproj.user +++ b/AMESCoreStudio.Web/AMESCoreStudio.Web.csproj.user @@ -1,15 +1,16 @@  - RazorViewEmptyScaffolder + RazorViewScaffolder root/Common/MVC/View - 650 + 650.4 True False False - + ~/Views/PTD/PTD001.cshtml MvcControllerEmptyScaffolder root/Common/MVC/Controller true + 650.4 \ No newline at end of file diff --git a/AMESCoreStudio.Web/Controllers/PTDController.cs b/AMESCoreStudio.Web/Controllers/PTDController.cs new file mode 100644 index 00000000..4cbb4770 --- /dev/null +++ b/AMESCoreStudio.Web/Controllers/PTDController.cs @@ -0,0 +1,237 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AMESCoreStudio.CommonTools.Result; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace AMESCoreStudio.Web.Controllers +{ + public class PTDController : Controller + { + public readonly IPCS _pcsApi; + public readonly IKCS _kcsApi; + + public PTDController(IPCS pcsApi, IKCS kcsApi) + { + _pcsApi = pcsApi; + _kcsApi = kcsApi; + } + + public async Task PTD001Async(string dnNo, string lineNo) + { + ViewData["Title"] = "DN單查詢出貨清單"; + + if (dnNo == null || lineNo == null) + return View(); + + string kpDataList = ""; + string dataList = ""; + try + { + //組表頭 + IResultModel DNDetail = await _pcsApi.GetZDNDetail4PTD001(dnNo,lineNo); + if (DNDetail.DataTotal > 0) + { + dataList = ""; + dataList += ""; + dataList += "kpDataList"; + dataList += "
"; + foreach (var item in DNDetail.Data) + { + JObject jo = JObject.Parse(item.ToString()); + JProperty[] jp = jo.Properties().ToArray(); + for (int i = 0; i < jp.Length; i++) + { + switch (i) + { + case 0: + dataList += ""; + dataList += ""; + break; + case 1: + dataList += ""; + dataList += ""; + break; + case 2: + dataList += ""; + dataList += ""; + break; + case 3: + dataList += ""; + dataList += ""; + break; + + case 4: + dataList += ""; + dataList += ""; + break; + case 5: + dataList += ""; + dataList += ""; + break; + case 6: + dataList += ""; + dataList += ""; + break; + case 7: + dataList += ""; + dataList += ""; + break; + default: + + break; + } + } + } + dataList += "
 DN NO " + jp[i].Value + " Line No " + jp[i].Value + " Product ID " + jp[i].Value + " Ship Qty " + jp[i].Value + "
 Ship To " + jp[i].Value + " Sold To " + jp[i].Value + " Expect Ship Date " + jp[i].Value + " Current Ship Date " + jp[i].Value + "
"; + } + + //組Detail + IResultModel result = await _pcsApi.GetDNInfo4PTD001(dnNo, lineNo); + if (result.DataTotal > 0) + { + + + kpDataList = kpDataList + ""; + + bool titleFlag = true; + foreach (var item in result.Data) + { + string strStartDate = ""; + JObject jo = JObject.Parse(item.ToString()); + JProperty[] jp = jo.Properties().ToArray(); + if (titleFlag) + { + kpDataList = kpDataList + ""; + for (int i = 0; i < jp.Length; i++) + { + switch (i) + { + case 0: + kpDataList = kpDataList + ""; + break; + case 1: + kpDataList = kpDataList + ""; + break; + case 2: + kpDataList = kpDataList + ""; + break; + case 3: + kpDataList = kpDataList + ""; + break; + case 4: + kpDataList = kpDataList + ""; + break; + case 5: + strStartDate = ""; + break; + default: + string kp_name = jp[i].Name.Replace("kP_", ""); + int kp_idx = kp_name.IndexOf("#"); + if (kp_idx > 0) + { + if (kp_name.StartsWith("MB") && kp_name.IndexOf("MAC") > 0) + { + string kp_no = kp_name.Replace("#", "_"); + var kp_item = await _kcsApi.GetItems(kp_no); + if (kp_item.Count > 0) + { + kpDataList = kpDataList + ""; + } + else + { + kpDataList = kpDataList + ""; + } + } + else + { + string kp_no = kp_name.Substring(0, kp_idx); + var kp_item = await _kcsApi.GetItems(kp_no); + if (kp_item.Count > 0) + { + kpDataList = kpDataList + ""; + } + else + { + kpDataList = kpDataList + ""; + } + } + } + else + { + var kp_item = await _kcsApi.GetItems(kp_name); + if (kp_item.Count > 0) + { + kpDataList = kpDataList + ""; + } + else + { + kpDataList = kpDataList + ""; + } + + } + + break; + } + } + + kpDataList = kpDataList + strStartDate; + kpDataList = kpDataList + ""; + titleFlag = false; + } + kpDataList = kpDataList + ""; + + + for (int i = 0; i < jp.Length; i++) + { + switch (i) + { + case 0: + kpDataList = kpDataList + ""; + break; + case 1: + kpDataList = kpDataList + ""; + break; + case 2: + kpDataList = kpDataList + ""; + break; + case 3: + kpDataList = kpDataList + ""; + break; + case 4: + kpDataList = kpDataList + ""; + break; + case 5: + strStartDate = ""; + break; + default: + kpDataList = kpDataList + ""; + break; + } + } + kpDataList = kpDataList + strStartDate; + kpDataList = kpDataList + ""; + } + kpDataList = kpDataList + "
 " + jp[i].Name + " " + jp[i].Name + " " + jp[i].Name + " " + jp[i].Name + " " + jp[i].Name + " " + jp[i].Name + " " + kp_item[0].ItemName + " " + kp_no + " " + kp_item[0].ItemName + " " + kp_no + " " + kp_item[0].ItemName + " " + kp_name + "
 " + jp[i].Value + " '" + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + " " + jp[i].Value + "
"; + } + else + { + kpDataList = kpDataList + "查無資料"; + } + } + catch (Exception e1) + { + kpDataList = kpDataList + "查詢過程超時:" + e1.Message; + } + kpDataList = kpDataList + "
"; + + dataList = dataList.Replace("kpDataList", kpDataList); + + ViewData["list"] = dataList; + return View(); + } + } +} diff --git a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs index b82318b5..25bd15fe 100644 --- a/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs +++ b/AMESCoreStudio.Web/HttpApis/AMES/IPCS.cs @@ -1837,5 +1837,12 @@ namespace AMESCoreStudio.Web ITask> GetTestLogByMSSql(string id); #endregion + + [WebApiClient.Attributes.HttpGet("api/WipInfos/GetZDNDetail4PTD001")] + ITask> GetZDNDetail4PTD001(string dnNo, string lineNo); + + [WebApiClient.Attributes.HttpGet("api/WipInfos/GetDNInfo4PTD001")] + ITask> GetDNInfo4PTD001(string dnNo, string lineNo); + } } diff --git a/AMESCoreStudio.Web/Views/PTD/PTD001.cshtml b/AMESCoreStudio.Web/Views/PTD/PTD001.cshtml new file mode 100644 index 00000000..1849298c --- /dev/null +++ b/AMESCoreStudio.Web/Views/PTD/PTD001.cshtml @@ -0,0 +1,128 @@ +@{ + ViewData["Title"] = "DN單查詢出貨清單"; + Layout = "~/Views/Shared/_AMESLayout.cshtml"; +} + + + + +
+
+
+
+
@ViewBag.Title
+
+
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+ @Html.Raw(ViewData["list"]) +
+
+
+ + diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs index a86b75ee..9314b7c6 100644 --- a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs +++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs @@ -2502,5 +2502,285 @@ FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (S } + /// + /// 查詢DNInfo --表頭 + /// + /// + /// + /// + [Route("[action]")] + [HttpGet] + public async Task> GetZDNDetail4PTD001(string dnNo, string lineNo) + { + ResultModel result = new ResultModel(); + + //安勤連線 + PTDContext _ptd_context = new PTDContext(); + DbConnection connPTD = _ptd_context.Database.GetDbConnection(); + if (connPTD.State != ConnectionState.Open) + { + await connPTD.OpenAsync(); + } + string strSQL = $@"select DNNO,DNLineNO,ProductID,ShipQty,ShipCustomerID,SoldCustomerID,ExpectShipDate,CurrentShipDate + from SFIS_PTD.dbo.ZDNDetail where DNNO ='{dnNo}' and DNLineNO ='{lineNo}'"; + DataTable dtZDNDetail = new DataTable(); + using (var cmd = connPTD.CreateCommand()) + { + cmd.CommandText = strSQL; + + using (var reader = await cmd.ExecuteReaderAsync()) + { + if (reader.HasRows) + { + dtZDNDetail = DataReaderToDataTable(reader); + } + } + } + + List list = new List(); + foreach (DataRow row in dtZDNDetail.Rows) + { + dynamic dyn = new ExpandoObject(); + list.Add(dyn); + foreach (DataColumn column in dtZDNDetail.Columns) + { + var dic = (IDictionary)dyn; + dic[column.ColumnName] = row[column]; + } + } + + result.DataTotal = list.Count(); + result.Data = list; + + if (result == null) + { + result.Msg = "查無資料"; + result.Success = false; + return result; + } + + result.Success = true; + result.Msg = "OK"; + return result; + } + + + /// + /// 查詢DNInfo --細項 + /// + /// + /// + /// + [Route("[action]")] + [HttpGet] + public async Task> GetDNInfo4PTD001(string dnNo,string lineNo) + { + ResultModel result = new ResultModel(); + + //安勤連線 + PTDContext _ptd_context = new PTDContext(); + DbConnection connPTD = _ptd_context.Database.GetDbConnection(); + if (connPTD.State != ConnectionState.Open) + { + await connPTD.OpenAsync(); + } + string strSQL = $@"select SerialNumber from SFIS_PTD.dbo.ZProductTrans where RecordNumber ='{dnNo}' and RCLineNO ='{lineNo}' + order by SerialNumber"; + DataTable dtZProductTrans = new DataTable(); + using (var cmd = connPTD.CreateCommand()) + { + cmd.CommandText = strSQL; + + using (var reader = await cmd.ExecuteReaderAsync()) + { + if (reader.HasRows) + { + dtZProductTrans = DataReaderToDataTable(reader); + } + } + } + + + DbConnection conn = _context.Database.GetDbConnection(); + if (conn.State != ConnectionState.Open) + { + await conn.OpenAsync(); + } + + DataTable dtBarcode = new DataTable(); + foreach (DataRow dr in dtZProductTrans.Rows) + { + string wip_sql = $@"SELECT '{dnNo}' as DN單號,WI.WIP_NO as WipNo,WA.ITEM_NO as ItemNO, BI.EXTRA_BARCODE_NO as ExtraBarcodeNo, BI.BARCODE_NO as BarcodeNo, BI.WIP_ID, + BI.BARCODE_ID,(select min(create_date) from jhames.wip_station where wip_id = BI.WIP_ID) StartDate + FROM jhames.BARCODE_INFO BI, jhames.WIP_INFO WI, jhames.WIP_ATT WA + WHERE BI.WIP_ID = WI.WIP_ID + AND WI.WIP_NO = WA.WIP_NO + AND BI.EXTRA_BARCODE_NO = '{dr["SerialNumber"]}'"; + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = wip_sql; + + using (var reader = await cmd.ExecuteReaderAsync()) + { + if (reader.HasRows) + { + if (dtBarcode == null) + { dtBarcode = DataReaderToDataTable(reader); } + else + { dtBarcode.Merge(DataReaderToDataTable(reader)); } + + } + } + } + } + + //開始取KP資料 + string strbarcode_id = "''"; + foreach (DataRow drbarcode in dtBarcode.Rows) + { + strbarcode_id += $",{drbarcode["BARCODE_ID"]}"; + } + + DataTable dtKp = new DataTable(); + string kp_sql = @"select kp_no, max(kp_qty) kp_qty from( + select item_no as kp_no,count(item_no) kp_qty,barcode_id from jhames.barcode_item where barcode_id + in (" + strbarcode_id + ") group by item_no,barcode_id) a group by kp_no order by kp_no"; + + using (var cmd = conn.CreateCommand()) + { + cmd.CommandText = kp_sql; + + using (var reader = await cmd.ExecuteReaderAsync()) + { + if (reader.HasRows) + { + dtKp = DataReaderToDataTable(reader); + } + } + } + + if (dtKp.Rows.Count > 0) + { + for (int i = 0; i < dtKp.Rows.Count; i++) + { + int kp_qty = int.Parse(dtKp.Rows[i]["KP_QTY"].ToString()); + string kp_no = dtKp.Rows[i]["KP_NO"].ToString(); + if (kp_qty > 1) + { + try + { + dtBarcode.Columns.Add("KP_" + kp_no); + } + catch { } + + for (int j = 1; j < kp_qty; j++) + { + try + { + dtBarcode.Columns.Add("KP_" + kp_no + "#" + j.ToString()); + } + catch { } + } + } + else + { + try + { + dtBarcode.Columns.Add("KP_" + kp_no); + } + catch { } + } + } + dtBarcode.AcceptChanges(); + + for (int i = 0; i < dtBarcode.Rows.Count; i++) + { + string barcode_no = dtBarcode.Rows[i]["BarcodeNo"].ToString(); + + //读取组件 + for (int j = 0; j < dtKp.Rows.Count; j++) + { + string kp_no = dtKp.Rows[j]["KP_NO"].ToString(); + + string barcode_item_sql = string.Format(@"select part_no from jhames.barcode_info a,jhames.barcode_item b where a.barcode_id = b.barcode_id +and b.item_no = '{0}' and a.barcode_no = '{1}'", kp_no, barcode_no); + + using (var item_cmd = conn.CreateCommand()) + { + item_cmd.CommandText = barcode_item_sql; + + using (var item_reader = await item_cmd.ExecuteReaderAsync()) + { + if (item_reader.HasRows) + { + DataTable dtItem = new DataTable(); + dtItem = DataReaderToDataTable(item_reader); + + for (int k = 0; k < dtItem.Rows.Count; k++) + { + string part_no = dtItem.Rows[k]["PART_NO"].ToString(); + try + { + dtBarcode.Rows[i]["KP_" + kp_no + "#" + k.ToString()] = part_no; + } + catch + { + try + { + dtBarcode.Rows[i]["KP_" + kp_no] = part_no; + } + catch { } + } + + dtBarcode.AcceptChanges(); + } + dtBarcode.AcceptChanges(); + } + } + } + } + } + } + + //整理欄位 + dtBarcode.Columns.Remove("WIP_ID"); + dtBarcode.Columns.Remove("BARCODE_ID"); + + dtBarcode.Columns["WipNo"].ColumnName = "MOID"; + dtBarcode.Columns["ItemNO"].ColumnName = "Material(料號)"; + dtBarcode.Columns["ExtraBarcodeNo"].ColumnName = "出貨料號"; + dtBarcode.Columns["BarcodeNo"].ColumnName = "生產序號"; + dtBarcode.AcceptChanges(); + + List list = new List(); + foreach (DataRow row in dtBarcode.Rows) + { + dynamic dyn = new ExpandoObject(); + list.Add(dyn); + foreach (DataColumn column in dtBarcode.Columns) + { + var dic = (IDictionary)dyn; + dic[column.ColumnName] = row[column]; + } + } + + result.DataTotal = list.Count(); + result.Data = list; + + + if (result == null) + { + result.Msg = "查無資料"; + result.Success = false; + return result; + } + + result.Success = true; + result.Msg = "OK"; + return result; + } + + } } diff --git a/AMESCoreStudio.WebApi/Models/PTDContext.cs b/AMESCoreStudio.WebApi/Models/PTDContext.cs new file mode 100644 index 00000000..5153aad8 --- /dev/null +++ b/AMESCoreStudio.WebApi/Models/PTDContext.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; + +namespace AMESCoreStudio.WebApi +{ + /// + /// + /// + public class PTDContext : DbContext + { + /// + /// + /// + /// + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + IConfiguration _config; + _config = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").Build(); + + optionsBuilder.UseSqlServer(_config.GetConnectionString("PTDContext")); + + base.OnConfiguring(optionsBuilder); + } + } +}