You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

4831 lines
211 KiB

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using AMESCoreStudio.WebApi.Models.AMES;
using AMESCoreStudio.WebApi.DTO.AMES;
using AMESCoreStudio.CommonTools.Result;
using System.Data.Common;
using System.Data;
using System.Dynamic;
using Microsoft.Extensions.Configuration;
using System.IO;
using System.Collections.ObjectModel;
using AMESCoreStudio.WebApi.Controllers.BLL;
using System.Text;
namespace AMESCoreStudio.WebApi.Controllers.AMES
{
/// <summary>
///
/// </summary>
[Route("api/[controller]")]
[ApiController]
public class WipInfosController : Controller
{
private readonly AMESContext _context;
private readonly ESUNContext _esun_context;
private readonly IConfiguration _config;
/// <summary>
///
/// </summary>
/// <param name="context"></param>
public WipInfosController(AMESContext context)
{
_config = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").Build();
_context = context;
}
/// <summary>
/// 查詢工單資料Info
/// </summary>
/// <returns></returns>
// GET: api/SystemInfoes
[HttpGet]
public async Task<ActionResult<IEnumerable<WipInfo>>> GetWipInfo()
{
IQueryable<WipInfo> q = _context.WipInfos;
q = q.OrderBy(p => p.WipNO);
//q = q.OrderByDescending(p => p.SystemID);
var WipInfo = await q.ToListAsync();
//return await _context.SystemInfoes.ToListAsync();
return WipInfo;
}
/// <summary>
/// 查詢工單資料QRS009
/// </summary>
/// <param name="unitNo"></param>
/// <param name="factoryNo"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS009(string unitNo, string factoryNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.WipID equals q3.WipNo
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q3.LineDesc,
q4.UnitName,
q1.WerksNO
};
q = q.Where(w => w.StatusNO == "A");
if (unitNo != null)
{
q = q.Where(w => w.UnitNO.Equals(unitNo));
}
if (factoryNo != null)
{
q = q.Where(w => w.WerksNO.Equals(factoryNo));
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料PDS003
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4PDS003(string wipNO)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO into wip_att
from x in wip_att.DefaultIfEmpty()
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
x.ItemNO,
q3.LineDesc,
q4.UnitName
};
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料QRS011
/// </summary>
/// <param name="unitNo">生產製程</param>
/// <param name="itemNO">料號</param>
/// <param name="wipNO">工單號碼</param>
/// <param name="wipStatus">工單狀態:N(未完工) E(已完工)</param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS011(string unitNo, string itemNO, string wipNO , string wipStatus = "A")
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q3.LineDesc,
q4.UnitName
};
q = q.Where(w => w.StatusNO == wipStatus);
if (unitNo != "*")
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
///
/// </summary>
/// <param name="reader"></param>
/// <returns></returns>
public static DataTable DataReaderToDataTable(DbDataReader reader)
{
try
{
DataTable dt = new DataTable();
int fieldCount = reader.FieldCount;
for (int fieldIndex = 0; fieldIndex < fieldCount; ++fieldIndex)
{
dt.Columns.Add(reader.GetName(fieldIndex), reader.GetFieldType(fieldIndex));
}
dt.BeginLoadData();
object[] rowValues = new object[fieldCount];
while (reader.Read())
{
reader.GetValues(rowValues);
dt.LoadDataRow(rowValues, true);
}
reader.Close();
dt.EndLoadData();
return dt;
}
catch (Exception ex)
{
throw new Exception("DataReader Convert DataTable Error!", ex);
}
}
/// <summary>
///
/// </summary>
/// <param name="barcodeNo"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> ESUNConnectTest(string barcodeNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
result.Msg = "OK";
result.Success = true;
ESUNContext _esun_context = new ESUNContext();
try
{
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
if (esun_conn.State != System.Data.ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
/*
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", barcodeNo);
*/
string mac_sql = string.Format(@"SELECT B.[ProductSN], B.[PartBarcode], B.[MFID], B.[MOID], B.[PartTypeID], B.[MaterialID], B.[IsActive]
FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (SELECT A.[PartBarcode] FROM [SFIS].[dbo].[ZPDKeyPart] A WHERE A.[IsActive] = 1 AND A.[PartTypeID] = 'MAC' AND A.[PartBarcode] = '{0}')", barcodeNo);
try
{
using (var esun_cmd = esun_conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table.Rows.Count > 0)
{
string mac_list = "";
for (int k = 0; k < esun_table.Rows.Count; k++)
{
mac_list = mac_list + esun_table.Rows[k]["part_barcode"].ToString().Trim() + ",";
}
if (mac_list != "")
{
string mac = mac_list.Substring(0, mac_list.Length - 1);
result.Msg = "OK:" + mac;
result.Success = true;
}
}
}
}
}
}
catch (Exception e2)
{
result.Msg = "NG:" + e2.Message;
result.Success = false;
}
}
catch (Exception e1)
{
result.Msg = "NG:" + e1.Message;
result.Success = false;
}
return result;
}
/// <summary>
/// 查詢工單KeyParts資料QRS013
/// </summary>
/// <param name="wipNO"></param>
/// <param name="factoryNo"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS013(string wipNO, string factoryNo, int page, int limit)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
DbConnection conn = _context.Database.GetDbConnection();
if (conn.State != ConnectionState.Open)
{
await conn.OpenAsync();
}
string kp_sql = "select kp_no, count(kp_seq) as kp_qty from jhames.wip_kp where wip_no = '" + wipNO + "' group by kp_no";
DataTable dtKp = new DataTable();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = kp_sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtKp = DataReaderToDataTable(reader);
}
}
}
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,d.model_no as ModelNO,d.item_no as ItemNO";
sql = sql + " from jhames.barcode_info b,jhames.wip_info c,jhames.wip_att d";
sql = sql + " where b.wip_id = c.wip_id and c.wip_no = d.wip_no";
sql = sql + " and c.wip_no = '" + wipNO + "'";
using (var barcode_cmd = conn.CreateCommand())
{
barcode_cmd.CommandText = sql;
using (var barcode_reader = await barcode_cmd.ExecuteReaderAsync())
{
if (barcode_reader.HasRows)
{
List<dynamic> list = new List<dynamic>();
DataTable dtBarcode = new DataTable();
dtBarcode = DataReaderToDataTable(barcode_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();
try
{
if (kp_no.StartsWith("MB") && !kp_no.StartsWith("MB_MAC"))
{
ESUNContext _esun_context = new ESUNContext();
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
if (esun_conn.State != ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
bool createMacCol = true;
//part_no = "91000237320038";
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", part_no);
using (var esun_cmd = esun_conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
esun_cmd.CommandTimeout = 0;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int m = 0; m < esun_table.Rows.Count; m++)
{
if (dtItem.Rows.Count == 1)
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "_MAC" + (m + 1).ToString());
}
catch { }
}
else
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "_" + (k + 1).ToString() + "_MAC" + (m + 1).ToString());
}
catch { }
}
}
dtBarcode.AcceptChanges();
createMacCol = false;
}
string mac = "";
for (int m = 0; m < esun_table.Rows.Count; m++)
{
mac = esun_table.Rows[m]["part_barcode"].ToString().Trim();
if (dtItem.Rows.Count == 1)
{
dtBarcode.Rows[i]["KP_" + kp_no + "_MAC" + (m + 1).ToString()] = mac;
}
else
{
dtBarcode.Rows[i]["KP_" + kp_no + "_" + (k + 1).ToString() + "_MAC" + (m + 1).ToString()] = mac;
}
dtBarcode.AcceptChanges();
}
}
}
}
}
}
}
catch(Exception e1)
{
string err = e1.Message;
}
}
dtBarcode.AcceptChanges();
}
}
}
}
}
}
foreach (DataRow row in dtBarcode.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtBarcode.Columns)
{
var dic = (IDictionary<string, object>)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;
}
private void WriteTraceLog(string logDesc)
{
try
{
StreamWriter writer;
string path = AppDomain.CurrentDomain.BaseDirectory + "TraceLog";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string logFileName = path + @"\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
if (!System.IO.File.Exists(logFileName))
{
writer = System.IO.File.CreateText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - " + logFileName);
}
else
{
writer = System.IO.File.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - " + logFileName);
}
writer.WriteLine(logDesc);
writer.Close();
}
catch { }
}
/// <summary>
/// 查詢工單KeyParts資料QRS017
/// </summary>
/// <param name="wipNO"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS017(string wipNO)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
DbConnection conn = _context.Database.GetDbConnection();
if (conn.State != ConnectionState.Open)
{
await conn.OpenAsync();
}
string wip_sql = "select b.barcode_id,a.wip_type from jhames.wip_info a,jhames.barcode_info b where a.wip_id = b.wip_id and a.wip_no = '" + wipNO + "'";
DataTable dtWip = new DataTable();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = wip_sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtWip = DataReaderToDataTable(reader);
}
}
}
string wipType = "";
int barcode_id = -1;
if (dtWip.Rows.Count > 0)
{
wipType = dtWip.Rows[0]["WIP_TYPE"].ToString();
barcode_id = int.Parse(dtWip.Rows[0]["BARCODE_ID"].ToString());
}
string kp_sql = "select kp_no, count(kp_seq) as kp_qty, min(kp_seq) kp_seq from jhames.wip_kp where wip_no = '" + wipNO + "' group by kp_no order by kp_seq ";
DataTable dtKp = new DataTable();
if (wipType == "R")
{
kp_sql = "select item_no as kp_no,count(item_no) kp_qty from jhames.barcode_item where barcode_id = " + barcode_id + " group by item_no";
}
else
{
kp_sql = "select item_no as kp_no,count(item_no) kp_qty from jhames.barcode_item where barcode_id = " + barcode_id + " group by item_no";
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = kp_sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtKp = DataReaderToDataTable(reader);
}
}
}
WriteTraceLog("query wip_kp sql:" + kp_sql);
if (dtKp != null)
{
WriteTraceLog("query wip_kp rows qty:" + dtKp.Rows.Count);
}
/*
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,d.model_no as ModelNO,d.item_no as ItemNO";
sql = sql + " from jhames.barcode_info b,jhames.wip_info c,jhames.wip_att d";
sql = sql + " where b.wip_id = c.wip_id and c.wip_no = d.wip_no";
sql = sql + " and c.wip_no = '" + wipNO + "'";
*/
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,e.station_name as StationName,b.box_no as BoxNo,d.model_no as ModelNO,d.item_no as ItemNO";
sql = sql + " from jhames.barcode_info b,jhames.wip_barcode c,jhames.wip_att d,jhames.stations e";
sql = sql + " where b.barcode_no between c.start_no and c.end_no and c.wip_no = d.wip_no and b.station_id = e.station_id";
sql = sql + " and c.wip_no = '" + wipNO + "'";
sql = sql + " order by b.barcode_no ";
using (var barcode_cmd = conn.CreateCommand())
{
barcode_cmd.CommandText = sql;
using (var barcode_reader = await barcode_cmd.ExecuteReaderAsync())
{
if (barcode_reader.HasRows)
{
List<dynamic> list = new List<dynamic>();
DataTable dtBarcode = new DataTable();
WriteTraceLog("query barcode sql:" + sql);
dtBarcode = DataReaderToDataTable(barcode_reader);
if (dtBarcode != null)
{
WriteTraceLog("query barcode rows qty:" + dtBarcode.Rows.Count);
}
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();
try
{
if (kp_no.StartsWith("MB") && !kp_no.StartsWith("MB_MAC"))
{
/*
WriteTraceLog("query mac by mb trace 001");
ESUNContext _esun_context = new ESUNContext();
WriteTraceLog("query mac by mb trace 002");
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
WriteTraceLog("query mac by mb trace 003");
if (esun_conn.State != ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
WriteTraceLog("query mac by mb trace 004");
*/
bool createMacCol = true;
//part_no = "91000237320038";
/*
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", part_no);
*/
/*
string mac_sql = string.Format(@"SELECT B.[ProductSN], B.[PartBarcode], B.[MFID], B.[MOID], B.[PartTypeID], B.[MaterialID], B.[IsActive]
FROM [SFIS].[dbo].[ZPDKeyPart] B WHERE B.[IsActive] = 1 AND B.[ProductSN] = (SELECT A.[PartBarcode] FROM [SFIS].[dbo].[ZPDKeyPart] A WHERE A.[IsActive] = 1 AND A.[PartTypeID] = 'MAC' AND A.[PartBarcode] = '{0}')", part_no);
WriteTraceLog("query mac by mb sql:" + mac_sql);
*/
bool findFlag = false;
string mac_sql = string.Format("select partbarcode from jhames.c_sfis_keyparts where productsn = '{0}' and parttypeid='MAC'", part_no);
using (var esun_cmd = conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
esun_cmd.CommandTimeout = 0;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
findFlag = true;
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table != null)
{
WriteTraceLog("query mac by mb trace 005:esun_talbe rows qty:" + esun_table.Rows.Count);
}
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int m = 0; m < esun_table.Rows.Count; m++)
{
if (dtItem.Rows.Count == 1)
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#MAC" + (m + 1).ToString());
}
catch { }
}
else
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString());
}
catch { }
}
}
dtBarcode.AcceptChanges();
createMacCol = false;
}
WriteTraceLog("query mac by mb trace 006");
string mac = "";
for (int m = 0; m < esun_table.Rows.Count; m++)
{
//mac = esun_table.Rows[m]["part_barcode"].ToString().Trim();
mac = esun_table.Rows[m]["PARTBARCODE"].ToString().Trim();
if (dtItem.Rows.Count == 1)
{
dtBarcode.Rows[i]["KP_" + kp_no + "#MAC" + (m + 1).ToString()] = mac;
}
else
{
dtBarcode.Rows[i]["KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString()] = mac;
}
dtBarcode.AcceptChanges();
}
WriteTraceLog("query mac by mb trace 007");
}
}
}
}
//从barcode_item读取结转数据
if (!findFlag)
{
string mac_sql2 = string.Format("select a.part_no from jhames.barcode_item a,jhames.barcode_info b where a.barcode_id = b.barcode_id and b.barcode_no = '{0}' and item_no like 'MAC%'", part_no);
using (var esun_cmd = conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql2;
esun_cmd.CommandTimeout = 0;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
findFlag = true;
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table != null)
{
WriteTraceLog("query mac by mb trace 005:esun_talbe rows qty:" + esun_table.Rows.Count);
}
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int m = 0; m < esun_table.Rows.Count; m++)
{
if (dtItem.Rows.Count == 1)
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#MAC" + (m + 1).ToString());
}
catch { }
}
else
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString());
}
catch { }
}
}
dtBarcode.AcceptChanges();
createMacCol = false;
}
string mac = "";
for (int m = 0; m < esun_table.Rows.Count; m++)
{
//mac = esun_table.Rows[m]["part_barcode"].ToString().Trim();
mac = esun_table.Rows[m]["PART_NO"].ToString().Trim();
if (dtItem.Rows.Count == 1)
{
dtBarcode.Rows[i]["KP_" + kp_no + "#MAC" + (m + 1).ToString()] = mac;
}
else
{
dtBarcode.Rows[i]["KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString()] = mac;
}
dtBarcode.AcceptChanges();
}
}
}
}
}
}
}
}
catch (Exception e1)
{
string err = e1.Message;
WriteTraceLog("query mac by mb trace 999:" + e1.Message);
}
}
WriteTraceLog("query mac by mb trace 008");
dtBarcode.AcceptChanges();
}
}
}
}
}
}
foreach (DataRow row in dtBarcode.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtBarcode.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
}
}
WriteTraceLog("query mac by mb trace 009");
result.DataTotal = list.Count();
result.Data = list;
WriteTraceLog("query mac by mb trace 010");
}
}
}
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單KeyParts資料QRS013
/// </summary>
/// <param name="wipNO"></param>
/// <param name="factoryNo"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS013V4(string wipNO, string factoryNo, int page, int limit)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
var wip_kp = await _context.WipKps.FromSqlRaw("SELECT * FROM JHAMES.WIP_KP WHERE WIP_NO = '" + wipNO + "' ORDER BY KP_NO").ToListAsync();
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,d.model_no as ModelNO,d.item_no as ItemNO";
string sql1 = "", sql2 = "", sql3 = "";
if (wip_kp.Count > 0)
{
for (int i = 0; i < wip_kp.Count; i++)
{
sql1 = sql1 + ",k" + (i + 1).ToString() + ".part_no as KP_" + wip_kp[i].KpNo;
sql2 = sql2 + ",(select barcode_id,part_no from jhames.barcode_item where item_no = '" + wip_kp[i].KpNo + "') k" + (i + 1).ToString();
sql3 = sql3 + " and b.barcode_id = k" + (i + 1).ToString() + ".barcode_id(+)";
}
}
sql = sql + sql1;
sql = sql + " from jhames.barcode_info b,jhames.wip_info c,jhames.wip_att d";
sql = sql + sql2;
sql = sql + " where b.wip_id = c.wip_id and c.wip_no = d.wip_no";
sql = sql + sql3;
sql = sql + " and c.wip_no = '" + wipNO + "'";
DbConnection conn = _context.Database.GetDbConnection();
if (conn.State != System.Data.ConnectionState.Open)
{
await conn.OpenAsync();
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
List<dynamic> list = new List<dynamic>();
DataTable table = new DataTable();
table = DataReaderToDataTable(reader);
//判断MB组件增加查询MAC
try
{
if (wip_kp.Count > 0)
{
bool mbFlag = false;
for (int i = 0; i < wip_kp.Count; i++)
{
if (wip_kp[i].KpNo.StartsWith("MB"))
{
mbFlag = true;
break;
}
}
if (mbFlag)
{
ESUNContext _esun_context = new ESUNContext();
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
if (esun_conn.State != System.Data.ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
bool createMacCol = true;
for (int j = 0; j < table.Rows.Count; j++)
{
string barcode_no = "";
try
{
barcode_no = table.Rows[j]["KP_MB"].ToString();
}
catch { }
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", barcode_no);
using (var esun_cmd = esun_conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int k = 0; k < esun_table.Rows.Count; k++)
{
table.Columns.Add("KP_MAC" + (k + 1).ToString());
}
table.AcceptChanges();
createMacCol = false;
}
string mac = "";
for (int k = 0; k < esun_table.Rows.Count; k++)
{
mac = esun_table.Rows[k]["part_barcode"].ToString().Trim();
table.Rows[j]["KP_MAC" + (k + 1).ToString()] = mac;
table.AcceptChanges();
}
}
}
}
}
}
}
}
}
catch { }
foreach (DataRow row in table.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in table.Columns)
{
var dic = (IDictionary<string, object>)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;
}
/// <summary>
/// 查詢工單KeyParts資料QRS013
/// </summary>
/// <param name="wipNO"></param>
/// <param name="factoryNo"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS013V3(string wipNO, string factoryNo, int page, int limit)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
var wip_kp = await _context.WipKps.FromSqlRaw("SELECT * FROM JHAMES.WIP_KP WHERE WIP_NO = '" + wipNO + "' ORDER BY KP_NO").ToListAsync();
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,d.model_no as ModelNO,d.item_no as ItemNO";
string sql1 = "", sql2 = "", sql3 = "";
if (wip_kp.Count > 0)
{
for (int i = 0; i < wip_kp.Count; i++)
{
sql1 = sql1 + ",k" + (i + 1).ToString() + ".part_no as KP_" + wip_kp[i].KpNo;
sql2 = sql2 + ",(select barcode_id,part_no from jhames.barcode_item where item_no = '" + wip_kp[i].KpNo + "') k" + (i + 1).ToString();
sql3 = sql3 + " and b.barcode_id = k" + (i + 1).ToString() + ".barcode_id(+)";
}
}
sql = sql + sql1;
sql = sql + " from jhames.barcode_info b,jhames.wip_info c,jhames.wip_att d";
sql = sql + sql2;
sql = sql + " where b.wip_id = c.wip_id and c.wip_no = d.wip_no";
sql = sql + sql3;
sql = sql + " and c.wip_no = '" + wipNO + "'";
DbConnection conn = _context.Database.GetDbConnection();
if (conn.State != System.Data.ConnectionState.Open)
{
await conn.OpenAsync();
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
List<dynamic> list = new List<dynamic>();
DataTable table = new DataTable();
table = DataReaderToDataTable(reader);
//判断MB组件增加查询MAC
try
{
if (wip_kp.Count > 0)
{
/*
for (int i = 0; i < wip_kp.Count; i++)
{
if (wip_kp[i].KpNo.StartsWith("MB"))
{
table.Columns.Add("MAC");
table.AcceptChanges();
break;
}
}
*/
ESUNContext _esun_context = new ESUNContext();
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
if (esun_conn.State != System.Data.ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
bool createMacCol = true;
for (int j = 0; j < table.Rows.Count; j++)
{
string barcode_no = table.Rows[j]["BarcodeNo"].ToString();
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", barcode_no);
using (var esun_cmd = esun_conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int k = 0; k < esun_table.Rows.Count; k++)
{
table.Columns.Add("KP_MAC" + (k + 1).ToString());
}
table.AcceptChanges();
createMacCol = false;
}
string mac = "";
for (int k = 0; k < esun_table.Rows.Count; k++)
{
mac = esun_table.Rows[k]["part_barcode"].ToString().Trim();
table.Rows[j]["KP_MAC" + (k + 1).ToString()] = mac;
table.AcceptChanges();
}
}
}
}
}
}
}
}
catch { }
foreach (DataRow row in table.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in table.Columns)
{
var dic = (IDictionary<string, object>)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;
}
/// <summary>
/// 查詢工單KeyParts資料QRS013
/// </summary>
/// <param name="wipNO"></param>
/// <param name="factoryNo"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS013V2(string wipNO, string factoryNo, int page, int limit)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
var wip_kp = await _context.WipKps.FromSqlRaw("SELECT * FROM JHAMES.WIP_KP WHERE WIP_NO = '" + wipNO + "' ORDER BY KP_NO").ToListAsync();
string sql = @" select c.wip_no as WipNo,b.barcode_no as BarcodeNo,b.extra_barcode_no as ExtraBarcodeNo,d.model_no as ModelNO,d.item_no as ItemNO";
string sql1 = "", sql2 = "", sql3 = "";
if (wip_kp.Count > 0)
{
for (int i = 0; i < wip_kp.Count; i++)
{
sql1 = sql1 + ",k" + (i + 1).ToString() + ".part_no as KP_" + wip_kp[i].KpNo;
sql2 = sql2 + ",(select barcode_id,part_no from jhames.barcode_item where item_no = '" + wip_kp[i].KpNo + "') k" + (i + 1).ToString();
sql3 = sql3 + " and b.barcode_id = k" + (i + 1).ToString() + ".barcode_id(+)";
}
}
sql = sql + sql1;
sql = sql + " from jhames.barcode_info b,jhames.wip_info c,jhames.wip_att d";
sql = sql + sql2;
sql = sql + " where b.wip_id = c.wip_id and c.wip_no = d.wip_no";
sql = sql + sql3;
sql = sql + " and c.wip_no = '" + wipNO + "'";
DbConnection conn = _context.Database.GetDbConnection();
if (conn.State != System.Data.ConnectionState.Open)
{
await conn.OpenAsync();
}
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
List<dynamic> list = new List<dynamic>();
DataTable table = new DataTable();
table = DataReaderToDataTable(reader);
table.Columns.Add("KP_MAC");
table.AcceptChanges();
//判断MB组件增加查询MAC
try
{
if (wip_kp.Count > 0)
{
/*
for (int i = 0; i < wip_kp.Count; i++)
{
if (wip_kp[i].KpNo.StartsWith("MB"))
{
table.Columns.Add("MAC");
table.AcceptChanges();
break;
}
}
*/
ESUNContext _esun_context = new ESUNContext();
//读取MAC
DbConnection esun_conn = _esun_context.Database.GetDbConnection();
if (esun_conn.State != System.Data.ConnectionState.Open)
{
await esun_conn.OpenAsync();
}
for (int j = 0; j < table.Rows.Count; j++)
{
string barcode_no = table.Rows[j]["BarcodeNo"].ToString();
string mac_sql = string.Format(@"select distinct a.工單編號 as mo_id,e.客戶工單編號 as customer_moid,a.工單序號 as product_sn,
case substring(f.avalue_kp_typeid, 1, 3) when 'MAC' then isnull(z.item_prefix,'')+b.SUB_ITEM_SN else b.SUB_ITEM_SN end as part_barcode,
f.avalue_kp_typeid as class,c.material_id,d.r_stn as routeid,'' as workerid,rtrim(g.sn_date) + ' ' + rtrim(g.sn_time) as create_date
from or_sn_story a
left join sub_item_db b on a.工單編號 = b.or_sn and a.工單序號 = b.or_sal
left join jh_sub_item c on a.工單編號 = c.mo_id and b.class = c.part_typeid
left join jh_sub_item_prefix z on c.mo_id = z.mo_id
left join or_sub_db d on a.工單編號 = d.or_sn and b.class = d.class
join or_list e on a.工單編號 = e.工單編號 and e.[客戶] = 'EV'
left join jh_sub_item_mapping f on b.class = f.eversun_kp_typeid
join jh_sn_list g on a.工單序號 = g.sn
where g.sn_result = 'OK'
AND a.工單序號 = '{0}'
AND c.material_id LIKE 'MAC%'", barcode_no);
using (var esun_cmd = esun_conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table.Rows.Count > 0)
{
string mac_list = "";
for (int k = 0; k < esun_table.Rows.Count; k++)
{
mac_list = mac_list + esun_table.Rows[k]["part_barcode"].ToString().Trim() + ",";
}
if (mac_list != "")
{
string mac = mac_list.Substring(0, mac_list.Length - 1);
table.Rows[j]["KP_MAC"] = mac;
table.AcceptChanges();
}
}
}
}
}
}
}
}
catch { }
foreach (DataRow row in table.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in table.Columns)
{
var dic = (IDictionary<string, object>)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;
}
/// <summary>
/// 查詢工單KeyParts資料QRS013
/// </summary>
/// <param name="wipNO"></param>
/// <param name="factoryNo"></param>
/// <param name="page"></param>
/// <param name="limit"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS013V1(string wipNO, string factoryNo, int page, int limit)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Helper helper = new Helper(_context);
var q = from q1 in _context.WipInfos
join q2 in _context.BarcodeInfoes on q1.WipID equals q2.WipID
join q3 in _context.BarcodeItems on q2.BarcodeID equals q3.BarcodeID into item_data
from x in item_data.DefaultIfEmpty()
join q4 in _context.Items on x.ItemNo equals q4.ItemNo into item_base
from y in item_base.DefaultIfEmpty()
join q5 in _context.WipAtts on q1.WipNO equals q5.WipNO
select new
{
q1.WipID,
q1.WipNO,
q1.WerksNO,
q2.BarcodeNo,
q2.ExtraBarcodeNo,
q5.ModelNO,
q5.ItemNO,
KeyPartNo = x.ItemNo,
KeyPartItem = x.KpItemNo,
KeyPartSN = x.PartNo,
KeyPartUserNo = helper.GetUserNo(x.CreateUserID).Result,
KeyPartUserName = helper.GetUserName(x.CreateUserID).Result,
KeyPartDate = x.CreateDate
};
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
if (factoryNo != null && factoryNo != "")
{
q = q.Where(w => w.WerksNO == factoryNo);
}
//紀錄筆數
result.DataTotal = q.Count();
// Table 頁數
if (page > 0)
{
q = q.Skip((page - 1) * limit).Take(limit);
}
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料QRS014
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS014(string unitNo, string itemNO, string wipNO, string dateStart, string dateEnd, string modelNO, string werksNo, string dateType)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
join q5 in _context.FqcResultMasters.GroupBy(x => new { x.WipNo }).Select(x => new { WipNo = x.Key.WipNo, FqcDate = x.Max(o => o.EndTime) }) on q2.WipNO equals q5.WipNo into fqc_data
from x in fqc_data.DefaultIfEmpty()
select new
{
q1.WipID,
q1.WipNO,
q1.WerksNO,
q1.CustomerMedical,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.WipScheduleDate,
q2.ItemNO,
q2.ModelNO,
q3.LineDesc,
q4.UnitName,
FqcDate = (x.FqcDate == null ? DateTime.Now : x.FqcDate)
};
q = q.Where(w => w.CompleteQTY > 0);
if (unitNo != "*")
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (werksNo != "*")
{
q = q.Where(w => w.WerksNO == werksNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (modelNO != null && modelNO != "")
{
q = q.Where(w => w.ModelNO == modelNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
if (dateType == "WipDate" || dateType == null)
{
if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "")
{
q = q.Where(w => w.WipScheduleDate >= DateTime.Parse(dateStart) && w.WipScheduleDate <= DateTime.Parse(dateEnd).AddDays(1));
}
}
else
{
if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "")
{
q = q.Where(w => w.FqcDate >= DateTime.Parse(dateStart) && w.FqcDate <= DateTime.Parse(dateEnd).AddDays(1));
}
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料QRS014
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS014B(string itemNO, string wipNO, string dateStart, string dateEnd, string modelNO, string werksNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.WerksNO,
q1.CustomerMedical,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q2.ModelNO,
q3.LineDesc,
q4.UnitName
};
q = q.Where(w => w.CompleteQTY > 0);
q = q.Where(w => w.UnitNO == "B" && w.CustomerMedical == "N");
if (werksNo != "*")
{
q = q.Where(w => w.WerksNO == werksNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (modelNO != null && modelNO != "")
{
q = q.Where(w => w.ModelNO == modelNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "")
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(dateStart) && w.CreateDate <= DateTime.Parse(dateEnd).AddDays(1));
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料QRS014
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS014S(string itemNO, string wipNO, string dateStart, string dateEnd, string modelNO, string werksNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.WerksNO,
q1.CustomerMedical,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q2.ModelNO,
q3.LineDesc,
q4.UnitName
};
q = q.Where(w => w.CompleteQTY > 0);
q = q.Where(w => w.UnitNO == "S" && w.CustomerMedical == "N");
if (werksNo != "*")
{
q = q.Where(w => w.WerksNO == werksNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (modelNO != null && modelNO != "")
{
q = q.Where(w => w.ModelNO == modelNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "")
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(dateStart) && w.CreateDate <= DateTime.Parse(dateEnd).AddDays(1));
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料QRS014
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfo4QRS014M(string unitNo, string itemNO, string wipNO, string dateStart, string dateEnd, string modelNO, string werksNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.WerksNO,
q1.CustomerMedical,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q2.ModelNO,
q3.LineDesc,
q4.UnitName
};
q = q.Where(w => w.CompleteQTY > 0 && w.CustomerMedical == "Y");
if (unitNo != "*")
{
q = q.Where(w => w.UnitNO == unitNo);
}
if (werksNo != "*")
{
q = q.Where(w => w.WerksNO == werksNo);
}
if (itemNO != null && itemNO != "")
{
q = q.Where(w => w.ItemNO == itemNO);
}
if (modelNO != null && modelNO != "")
{
q = q.Where(w => w.ModelNO == modelNO);
}
if (wipNO != null && wipNO != "")
{
q = q.Where(w => w.WipNO == wipNO);
}
if (dateStart != null && dateStart != "" && dateEnd != null && dateEnd != "")
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(dateStart) && w.CreateDate <= DateTime.Parse(dateEnd).AddDays(1));
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料 by SelectParameter
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfoSelectParameter([FromQuery] WipInfoDto value, int page = 0, int limit = 10)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
join q5 in _context.FactoryInfos on q1.Werks equals q5.FactoryID.ToString()
select new WipQueryDto
{
wipID = q1.WipID,
wipNo = q1.WipNO,
planQTY = q1.PlanQTY,
unitNo = q1.UnitNO,
lineID = q1.LineID,
statusNo = q1.StatusNO,
wipScheduleDate = q1.WipScheduleDate,
wipDueDate = q1.WipDueDate,
factoryNameCh = q5.FactoryNameCh,
description = q1.Description,
CreateDate = q1.CreateDate,
itemNo = q2.ItemNO,
lineDesc = q3.LineDesc,
unitName = q4.UnitName,
wipType = q1.WipType,
factoryNo = q1.WerksNO
};
if (!string.IsNullOrWhiteSpace(value.unitno))
{
q = q.Where(w => w.unitNo == value.unitno);
}
if (!string.IsNullOrWhiteSpace(value.wipno))
{
q = q.Where(w => w.wipNo == value.wipno);
}
if (value.lineid != 0)
{
q = q.Where(w => w.lineID == value.lineid);
}
DateTime dateTime = DateTime.Now;
if (DateTime.TryParse(value.date_str, out dateTime))
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(value.date_str));
}
if (DateTime.TryParse(value.date_end, out dateTime))
{
q = q.Where(w => w.CreateDate <= DateTime.Parse(value.date_end));
}
if (!string.IsNullOrWhiteSpace(value.itemno))
{
q = q.Where(w => w.itemNo.Contains(value.itemno.ToUpper().Trim()));
}
if (!string.IsNullOrWhiteSpace(value.wipType))
{
q = q.Where(w => w.wipType == value.wipType);
}
if (!string.IsNullOrWhiteSpace(value.factoryno))
{
q = q.Where(w => w.factoryNo == value.factoryno);
}
if (!string.IsNullOrWhiteSpace(value.statusNo))
{
if (value.statusNo == "N")
q = q.Where(w => w.statusNo != "E" && w.statusNo != "C");
else
q = q.Where(w => w.statusNo == value.statusNo);
}
q.Take(1000);
// 紀錄筆數
result.DataTotal = q.Count();
// Table 頁數
if (page > 0)
{
q = q.Skip((page - 1) * limit).Take(limit);
}
var qq = await q.ToListAsync();
// 塞入開工日
foreach (var item in qq)
{
var workDate = _context.WipStations.Where(w => w.WipID == item.wipID)
.OrderBy(s => s.CreateDate)
.FirstOrDefault();
item.workDate = workDate == null ? "" : workDate.CreateDate.ToString("yyyy/MM/dd");
}
// 塞檢驗完成日期
foreach (var item in qq)
{
var fqcDate = _context.FqcResultMasters.Where(w => w.WipNo == item.wipNo && w.QaResult != "A")
.OrderBy(s => s.EndTime)
.FirstOrDefault();
item.fqcDate = fqcDate == null ? "" : fqcDate.EndTime.ToString("yyyy/MM/dd");
}
result.Data = qq;
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料 未結工單查詢
/// </summary>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetWipInfoPCS008([FromQuery] WipInfoDto value, string statusNo = null)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
var q = from q1 in _context.WipInfos
where q1.CompleteQTY != 0
join q2 in _context.WipAtts on q1.WipNO equals q2.WipNO
join q3 in _context.LineInfoes on q1.LineID equals q3.LineID
join q4 in _context.FactoryUnits on q1.UnitNO equals q4.UnitNo
select new
{
q1.WipID,
q1.WipNO,
q1.PlanQTY,
q1.CompleteQTY,
q1.UnitNO,
q1.LineID,
q1.FlowRuleID,
q1.StatusNO,
q1.CreateDate,
q2.ItemNO,
q3.LineDesc,
q4.UnitName,
q1.WerksNO
};
if (statusNo == null)
{
q = q.Where(w => w.StatusNO != "E");
}
if (value.wipno != null)
{
q = q.Where(w => w.WipNO.Equals(value.wipno));
}
if (value.itemno != null)
{
q = q.Where(w => w.ItemNO.Equals(value.itemno));
}
if (value.unitno != null)
{
q = q.Where(w => w.UnitNO.Equals(value.unitno));
}
if (value.factoryno != null)
{
q = q.Where(w => w.WerksNO.Equals(value.factoryno));
}
DateTime dateTime = DateTime.Now;
if (DateTime.TryParse(value.date_str, out dateTime))
{
q = q.Where(w => w.CreateDate >= DateTime.Parse(value.date_str));
}
if (DateTime.TryParse(value.date_end, out dateTime))
{
q = q.Where(w => w.CreateDate <= DateTime.Parse(value.date_end));
}
//紀錄筆數
result.DataTotal = q.Count();
result.Data = await q.ToListAsync();
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
/// <summary>
/// 查詢工單資料Info By WipID
/// </summary>
/// <param name="id">WipID</param>
/// <returns></returns>
// GET: api/RoleModules/Role/5
[HttpGet("{id}")]
public async Task<ActionResult<IEnumerable<WipInfo>>> GetWipInfo(int id)
{
IQueryable<WipInfo> q = _context.WipInfos.Where(w => w.WipID == id);
var WipInfo = await q.ToListAsync();
if (WipInfo == null)
{
return NotFound();
}
return WipInfo;
}
/// <summary>
/// 查詢工單資料Info By WipNO
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <returns></returns>
// GET: api/RoleModules/Role/5
[HttpGet("WipInfoByWipNo/{wipno}")]
public async Task<ActionResult<IEnumerable<WipInfo>>> GetWipInfoByWipNo(string wipno)
{
IQueryable<WipInfo> q = _context.WipInfos.Where(w => w.WipNO.ToUpper().Trim() == wipno.ToUpper().Trim());
var WipInfo = await q.ToListAsync();
return WipInfo;
}
/// <summary>
/// 查詢工單是否投入
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <returns>Y:投入N:未投入</returns>
[HttpGet("CheckStart/{wipno}")]
public ActionResult<string> GetWipInfoCheckStart(string wipno)
{
// 判斷是否有投產紀錄
var q = from q1 in _context.WipInfos
join q2 in _context.BarcodeInfoes on q1.WipID equals q2.WipID
where q1.WipNO == wipno
select q2;
if (q.Count() != 0)
return "Y";
else
return "N";
}
/// <summary>
/// 查詢工單是否開線
/// </summary>
/// <param name="wipno">工單號碼</param>
/// <returns>Y:已開線N:未開線</returns>
[HttpGet("CheckStartLine/{wipno}")]
public ActionResult<string> GetWipInfoCheckStartLine(string wipno)
{
// 判斷是否已經開線
var q = from q1 in _context.WipInfos
join q2 in _context.LineInfoes on q1.WipID equals q2.WipNo
where q1.WipNO == wipno
select q2;
if (q.Count() != 0)
return "Y";
else
return "N";
}
/// <summary>
/// 新增工單資料
/// </summary>
/// <param name="WipInfo"></param>
/// <returns></returns>
[HttpPost]
public async Task<ResultModel<WipInfo>> PostWipInfo([FromBody] WipInfo WipInfo)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
Helper helper = new Helper(_context);
WipInfo.WipID = helper.GetIDKey("WIP_ID").Result;
// 工單號碼去空白
WipInfo.WipNO = WipInfo.WipNO.Trim().ToUpper();
// 委外廠編號抓WERKS廠別代碼
var q = _context.FactoryInfos.Where(w => w.FactoryID.ToString() == WipInfo.Werks).ToList();
if (q.Count() !=0)
{
WipInfo.WerksNO = q.FirstOrDefault().FactoryNo;
}
_context.WipInfos.Add(WipInfo);
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = WipInfo.WipID.ToString();
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
//return CreatedAtAction("GetWipInfo", new { id = WipInfo.WipID }, WipInfo);
}
/// <summary>
/// 更新工單資本資料-狀態
/// </summary>
/// <param name="id">工單ID</param>
/// <param name="statusno">狀態</param>
/// <returns></returns>
[HttpPut("{id}/{statusno}")]
public async Task<ResultModel<WipInfo>> PutWipinfoToStatusNO(int id = 0, string statusno = null)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
try
{
await _context.Database.ExecuteSqlInterpolatedAsync
($"UPDATE JHAMES.WIP_INFO SET STATUS_NO={statusno} , UPDATE_DATE={DateTime.Now} WHERE WIP_ID={id}");
//WipInfo wipinfo = new WipInfo
//{
// WipID = id,
// StatusNO = statusno,
// UpdateDate = DateTime.Now
//};
//_context.WipInfos.Attach(wipinfo);
//// 指定更新某個欄位
//_context.Entry(wipinfo).Property(p => p.StatusNO).IsModified = true;
//_context.Entry(wipinfo).Property(p => p.UpdateDate).IsModified = true;
//await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
return result;
}
/// <summary>
/// 更新工單資本資料
/// </summary>
/// <returns></returns>
[HttpPut]
public async Task<ResultModel<WipInfo>> PutWipinfo([FromBody] WipInfo wipInfo)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
// 工單號碼去空白
wipInfo.WipNO = wipInfo.WipNO.Trim().ToUpper();
// 委外廠編號抓WERKS廠別代碼
var q = _context.FactoryInfos.Where(w => w.FactoryID.ToString() == wipInfo.Werks).ToList();
if (q.Count() != 0)
{
wipInfo.WerksNO = q.FirstOrDefault().FactoryNo;
}
_context.Entry(wipInfo).State = EntityState.Modified;
_context.Entry<WipInfo>(wipInfo).Property("CompleteQTY").IsModified = false;
_context.Entry<WipInfo>(wipInfo).Property("StatusNO").IsModified = false;
_context.Entry<WipInfo>(wipInfo).Property("CreateDate").IsModified = false;
_context.Entry<WipInfo>(wipInfo).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;
}
/// <summary>
/// 更新工單第一站完成數量
/// </summary>
/// <returns></returns>
[HttpPut("UpdateCompleteQty/ById/{id}")]
public async Task<ResultModel<WipInfo>> PutWipinfoByCompleteQTY(int id)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
result.Success = true;
var wipInfo = await _context.WipInfos.FindAsync(id);
if (wipInfo != null)
{
wipInfo.CompleteQTY += 1;
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
}
return result;
}
/// <summary>
/// 删除工單相關資料
/// </summary>
/// <param name="id">工單號碼</param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task<ResultModel<WipInfo>> DeleteWipinfo(int id)
{
ResultModel<WipInfo> result = new ResultModel<WipInfo>();
var wipinfos = await _context.WipInfos.Where(w => w.WipID == id).FirstOrDefaultAsync();
var WiwipinfoByWipNo= await _context.WipInfos.Where(w => w.WipNO == wipinfos.WipNO).ToListAsync();
_context.WipInfos.RemoveRange(wipinfos);
var wipBarcode = await _context.WipBarcodes.Where(w => w.WipNO == wipinfos.WipNO && w.UnitNO == wipinfos.UnitNO).ToListAsync();
_context.WipBarcodes.RemoveRange(wipBarcode);
if (WiwipinfoByWipNo.Count() == 1)
{
var WipNo = WiwipinfoByWipNo.FirstOrDefault().WipNO;
var wipAtt = await _context.WipAtts.Where(w => w.WipNO == WipNo).ToListAsync();
_context.WipAtts.RemoveRange(wipAtt);
var wipKp = await _context.WipKps.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipKps.RemoveRange(wipKp);
var wipSop = await _context.WipSops.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipSops.RemoveRange(wipSop);
var wipOutfit = await _context.WipOutfits.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipOutfits.RemoveRange(wipOutfit);
var wipLabel = await _context.WipLabels.Where(w => w.WipNO == WipNo).ToListAsync();
_context.WipLabels.RemoveRange(wipLabel);
var wipBarcodeOther = await _context.WipBarcodeOthers.Where(w => w.WipNO == WipNo).ToListAsync();
_context.WipBarcodeOthers.RemoveRange(wipBarcodeOther);
var wipBoard = await _context.WipBoards.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipBoards.RemoveRange(wipBoard);
var wipSystem = await _context.WipSystems.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipSystems.RemoveRange(wipSystem);
var wipChecks = await _context.WipChecks.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipChecks.RemoveRange(wipChecks);
var wipInfoBlob = await _context.WipInfoBlobs.Where(w => w.WipNo == WipNo).ToListAsync();
_context.WipInfoBlobs.RemoveRange(wipInfoBlob);
}
try
{
await _context.SaveChangesAsync();
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
return result;
}
/// <summary>
/// 查詢DNInfo --表頭
/// </summary>
/// <param name="dnNo"></param>
/// <param name="lineNo"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetZDNDetail4PTD001(string dnNo, string lineNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
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}' ";
if (string.IsNullOrEmpty(lineNo))
{
strSQL += $@"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);
}
}
}
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZDNDetail.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZDNDetail.Columns)
{
var dic = (IDictionary<string, object>)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;
}
/// <summary>
/// 查詢DNInfo --細項
/// </summary>
/// <param name="dnNo"></param>
/// <param name="lineNo"></param>
/// <returns></returns>
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetDNInfo4PTD001(string dnNo,string lineNo)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
string strSQL = $@"select RecordNumber as DN單號,MOID as WipNo,ProductID as ItemNO,SerialNumber as ExtraBarcodeNo,'' as BarcodeNo,
RecordDate as StartDate
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();
try
{
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,TO_CHAR((select min(create_date) from jhames.wip_station where wip_id = BI.WIP_ID),'YYYY-MM-DD HH24:MI:SS') 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["ExtraBarcodeNo"]}'";
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = wip_sql;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (dtBarcode.Columns.Count == 0)
{
for (int i = 0; i < reader.FieldCount; i++)
{
dtBarcode.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
}
}
if (reader.HasRows)
{
dtBarcode.Merge(DataReaderToDataTable(reader));
}
else
{
DataRow newRow = dtBarcode.NewRow();
foreach (DataColumn col in dtZProductTrans.Columns)
{
newRow[col.ColumnName] = dr[col.ColumnName];
}
dtBarcode.Rows.Add(newRow);
}
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
//開始取KP資料
string strbarcode_id = "''";
foreach (DataRow drbarcode in dtBarcode.Rows)
{
if (!string.IsNullOrEmpty(drbarcode["BARCODE_ID"].ToString()))
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();
try
{
if (kp_no.StartsWith("MB") && !kp_no.StartsWith("MB_MAC"))
{
bool createMacCol = true;
bool findFlag = false;
string mac_sql = string.Format("select partbarcode from jhames.c_sfis_keyparts where productsn = '{0}' and parttypeid='MAC'", part_no);
using (var esun_cmd = conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql;
esun_cmd.CommandTimeout = 0;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
findFlag = true;
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table != null)
{
WriteTraceLog("query mac by mb trace 005:esun_talbe rows qty:" + esun_table.Rows.Count);
}
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int m = 0; m < esun_table.Rows.Count; m++)
{
if (dtItem.Rows.Count == 1)
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#MAC" + (m + 1).ToString());
}
catch { }
}
else
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString());
}
catch { }
}
}
dtBarcode.AcceptChanges();
createMacCol = false;
}
WriteTraceLog("query mac by mb trace 006");
string mac = "";
for (int m = 0; m < esun_table.Rows.Count; m++)
{
//mac = esun_table.Rows[m]["part_barcode"].ToString().Trim();
mac = esun_table.Rows[m]["PARTBARCODE"].ToString().Trim();
if (dtItem.Rows.Count == 1)
{
dtBarcode.Rows[i]["KP_" + kp_no + "#MAC" + (m + 1).ToString()] = mac;
}
else
{
dtBarcode.Rows[i]["KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString()] = mac;
}
dtBarcode.AcceptChanges();
}
WriteTraceLog("query mac by mb trace 007");
}
}
}
}
//从barcode_item读取结转数据
if (!findFlag)
{
string mac_sql2 = string.Format("select a.part_no from jhames.barcode_item a,jhames.barcode_info b where a.barcode_id = b.barcode_id and b.barcode_no = '{0}' and item_no like 'MAC%'", part_no);
using (var esun_cmd = conn.CreateCommand())
{
esun_cmd.CommandText = mac_sql2;
esun_cmd.CommandTimeout = 0;
using (var esun_reader = await esun_cmd.ExecuteReaderAsync())
{
if (esun_reader.HasRows)
{
findFlag = true;
List<dynamic> esun_list = new List<dynamic>();
DataTable esun_table = new DataTable();
esun_table = DataReaderToDataTable(esun_reader);
if (esun_table != null)
{
WriteTraceLog("query mac by mb trace 005:esun_talbe rows qty:" + esun_table.Rows.Count);
}
if (esun_table.Rows.Count > 0)
{
if (createMacCol)
{
for (int m = 0; m < esun_table.Rows.Count; m++)
{
if (dtItem.Rows.Count == 1)
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#MAC" + (m + 1).ToString());
}
catch { }
}
else
{
try
{
dtBarcode.Columns.Add("KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString());
}
catch { }
}
}
dtBarcode.AcceptChanges();
createMacCol = false;
}
string mac = "";
for (int m = 0; m < esun_table.Rows.Count; m++)
{
//mac = esun_table.Rows[m]["part_barcode"].ToString().Trim();
mac = esun_table.Rows[m]["PART_NO"].ToString().Trim();
if (dtItem.Rows.Count == 1)
{
dtBarcode.Rows[i]["KP_" + kp_no + "#MAC" + (m + 1).ToString()] = mac;
}
else
{
dtBarcode.Rows[i]["KP_" + kp_no + "#" + (k + 1).ToString() + "_MAC" + (m + 1).ToString()] = mac;
}
dtBarcode.AcceptChanges();
}
}
}
}
}
}
}
}
catch (Exception e1)
{
string err = e1.Message;
WriteTraceLog("query mac by mb trace 999:" + e1.Message);
}
}
dtBarcode.AcceptChanges();
}
}
}
}
}
}
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
if (dtBarcode.Rows.Count > 0)
{
//整理欄位
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 <dynamic> list = new List<dynamic>();
foreach (DataRow row in dtBarcode.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtBarcode.Columns)
{
var dic = (IDictionary<string, object>)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;
}
#region "PTD002 PTD002 一段式入出庫作業"
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD002Commit(PTD002CommitDataModel Data)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
List<string> SNList = new List<string>();
Collection<string> colSQL = new Collection<string>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = "";
string strRecordType = Data.RecordType;
string strRmaNo = Data.RmaNo;
string strRbu = Data.Rbu;
string strWorkCenter = Data.WorkCenter;
string strRecordDate = Data.RecordDate;
string strLocation = Data.Location;
string strCustomer = Data.Customer;
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
string strMaterial = "";
string strMailBodyHtml = "";
//確認備貨數量
string strDNNo = Data.TableData[0].DnNo;
string strLineNo = Data.TableData[0].LineNo;
int intAddQty = Data.TableData.Count();
CheckShipQty(strDNNo, strLineNo, intAddQty);
//若選擇 DOA 出貨(601DB)、DOA 還貨(657),需加填 RMANo
if (strRecordType == "601DB" || strRecordType == "657")
{
if (string.IsNullOrEmpty(strRmaNo))
throw new Exception("RMANo 不得為空!");
}
//Mail Body Html
StringBuilder htmlTable = new StringBuilder();
htmlTable.AppendLine("<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">");
htmlTable.AppendLine("<thead>");
htmlTable.AppendLine("<tr>");
htmlTable.AppendLine("<th>DN單號</th>");
htmlTable.AppendLine("<th>LineNo</th>");
htmlTable.AppendLine("<th>Material(料號)</th>");
htmlTable.AppendLine("<th>SN</th>");
htmlTable.AppendLine("</tr>");
htmlTable.AppendLine("</thead>");
htmlTable.AppendLine("<tbody>");
foreach (SNDataModel SNData in Data.TableData)
{
CheckFlowRules(strRecordType, SNData.Sn);
strMaterial = SNData.Material;
string strLatest;
//確認此出貨序號是否有ZHistoryKeyDefine
strSQL = $@"select Seed FROM [SFIS_PTD].[dbo].[ZHistoryKeyDefine] where serialnumber ='{SNData.Sn}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
int seed = Convert.ToInt32(reader["Seed"]);
int nIdx = seed + 1;
strLatest = SNData.Sn + nIdx.ToString().PadLeft(4, '0');//組成HistoryID
//HistoryKeyDefine
strSQL = @$"UPDATE [SFIS_PTD].[dbo].[ZHistoryKeyDefine]
SET [Seed] = {nIdx} where [SerialNumber]='{SNData.Sn}'";
Console.WriteLine(strSQL);
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"Update SFIS_PTD..ZSNInfo SET LatestHistoryID='{strLatest}',RecordTypeID='{strRecordType}',
CurrentProductID='{SNData.Material}'
where SerialNumber='{SNData.Sn}'";
Console.WriteLine(strSQL);
colSQL.Add(strSQL);
}
else
{
strLatest = SNData.Sn + 1.ToString().PadLeft(4, '0');//組成HistoryID
//ZHistoryKeyDefine
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZHistoryKeyDefine] ([SerialNumber],[Seed])
VALUES ('{SNData.Sn}',1)";
Console.WriteLine(strSQL);
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZSNInfo] ([SerialNumber],[CurrentProductID],[OriginalProductID],
[LocationID],[LatestHistoryID],[RecordTypeID],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[ModifyDate]) VALUES
('{SNData.Sn}','{SNData.Material}','{SNData.Material}',
'{strLocation}','{strLatest}','{strRecordType}',
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'{strCreateDate}')";
Console.WriteLine(strSQL);
colSQL.Add(strSQL);
}
//ZProductTrans
strSQL = $@"INSERT INTO [SFIS_PTD].[dbo].[ZProductTrans]
([HistoryID],[SerialNumber],[RecordTypeID],[RecordNumber],[RCLineNO],[RecordDate],
[ProductID],[IsChangeID],[LocationID],[EmplID],[IsDelete],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[CreatorID],[CreateDate],[ModifierID],[ModifyDate],
[chkflag],[IsBranchCoReceived],[MOID]) VALUES
('{strLatest}','{SNData.Sn}','{strRecordType}','{SNData.DnNo}','{SNData.LineNo}','{strRecordDate}',
'{SNData.Material}',0,'{strLocation}','{strCustomer}',0,
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'WH00','{strCreateDate}','WH00','{strCreateDate}',0,0,'{strRmaNo}')";
Console.WriteLine(strSQL);
colSQL.Add(strSQL);
SNList.Add(SNData.Sn);
}
}
//Mail Body Html
htmlTable.AppendLine("<tr>");
htmlTable.AppendLine($"<td>{SNData.DnNo}</td>");
htmlTable.AppendLine($"<td>{SNData.LineNo}</td>");
htmlTable.AppendLine($"<td>{SNData.Material}</td>");
htmlTable.AppendLine($"<td>{SNData.Sn}</td>");
htmlTable.AppendLine("</tr>");
}
//Mail Body Html
htmlTable.AppendLine("</tbody>");
htmlTable.AppendLine("</table>");
using (var cmd = connPTD.CreateCommand())
{
using (var transaction = connPTD.BeginTransaction())
{
try
{
foreach (string query in colSQL)
{
cmd.CommandText = query;
cmd.Transaction = transaction;
cmd.ExecuteNonQuery();
}
// Commit the transaction
transaction.Commit();
}
catch (Exception ex)
{
// Rollback the transaction in case of an exception
transaction.Rollback();
throw ex; // Rethrow the exception after rollback
}
}
}
if (strRecordType == "601")
{
strSQL = $@"select MailGroup FROM [SFIS_PTD].[dbo].[CustomerItemMailGroup] where [StatusNo] = 'A'
And [ItemNumber] ='{strMaterial}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
string toMail = reader["MailGroup"].ToString();
string Subject = $"[AMES系統通知] 出貨單號:" + strDNNo;
string emailBody = htmlTable.ToString();
await new MailController(_context, _config).PostMail(Subject, emailBody, "", toMail, false);
}
}
}
}
result.Success = true;
result.Msg = "OK";
result.Data = SNList;
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
private bool CheckShipQty(string recordNumber, string lineNo, int addQty)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
connPTD.Open();
}
try
{
//查剩餘數
string strSQL = $@"select ShipQty -
(SELECT count(1)
FROM [SFIS_PTD].[dbo].[ZWHPickListDetail]
where RecordNumber =DNNO and RCLineNO =DNLineNO and TaskStatus ='Picked') as surplusQty
from [SFIS_PTD].[dbo].ZDNDetail where DNNO ='{recordNumber}' and DNLineNO ='{lineNo}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
if (addQty > Convert.ToInt32(reader["surplusQty"]))
throw new Exception("數量已超過,不允許新增!");
}
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return true;
}
private bool CheckFlowRules(string recordType, string serialNumber)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
connPTD.Open();
}
try
{
//用ZProductTrans最新RecordType 檢查PTDFlowRules邏輯
bool bolChkFlow = false;
string strSQL = $@"Select [FormID] FROM [SFIS_PTD].[dbo].[PTDFlowRules]
where [ToID] ='{recordType}'";
DataTable dtPTDFlowRules = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
dtPTDFlowRules = DataReaderToDataTable(reader);
}
}
}
strSQL = @$"Select [RecordTypeID] FROM [SFIS_PTD].[dbo].[ZProductTrans]
where [SerialNumber] ='{serialNumber}'
Order by [RecordDate] Desc";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
foreach (DataRow dr in dtPTDFlowRules.Rows)
{
if (reader["RecordTypeID"].ToString() == dr["FormID"].ToString())
{
bolChkFlow = true;
break;
}
}
}
else if (recordType == "101" || recordType == "292") //101、292可能沒有前身資訊
{
bolChkFlow = true;
}
}
}
if (!bolChkFlow)
throw new Exception("序號:" + serialNumber + " 流程狀態不允許!");
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return true;
}
//[Route("[action]")]
//[HttpGet]
//public async Task<ResultModel<dynamic>> CheckShipQtyAsyn(string recordNumber, string lineNo, int addQty)
//{
// ResultModel<dynamic> result = new ResultModel<dynamic>();
// try
// {
// //安勤連線
// PTDContext _ptd_context = new PTDContext();
// DbConnection connPTD = _ptd_context.Database.GetDbConnection();
// if (connPTD.State != ConnectionState.Open)
// {
// await connPTD.OpenAsync();
// }
// //查剩餘數
// string strSQL = $@"select ShipQty -
// (SELECT count(1)
// FROM [SFIS_PTD].[dbo].[ZWHPickListDetail]
// where RecordNumber =DNNO and RCLineNO =DNLineNO and TaskStatus ='Picked') as surplusQty
// from [SFIS_PTD].[dbo].ZDNDetail where DNNO ='{recordNumber}' and DNLineNO ='{lineNo}'";
// using (var cmd = connPTD.CreateCommand())
// {
// cmd.CommandText = strSQL;
// using (var reader = await cmd.ExecuteReaderAsync())
// {
// if (reader.Read())
// {
// if (addQty > Convert.ToInt32(reader["surplusQty"]))
// throw new Exception("數量已超過,不允許新增!");
// }
// }
// }
// result.Success = true;
// result.Msg = "OK";
// }
// catch (Exception ex)
// {
// result.Success = false;
// result.Msg = ex.Message;
// }
// return result;
//}
//[Route("[action]")]
//[HttpGet]
//public async Task<ResultModel<dynamic>> CheckFlowRulesAsyn(string recordType, string serialNumber)
//{
// ResultModel<dynamic> result = new ResultModel<dynamic>();
// try
// {
// //安勤連線
// PTDContext _ptd_context = new PTDContext();
// DbConnection connPTD = _ptd_context.Database.GetDbConnection();
// if (connPTD.State != ConnectionState.Open)
// {
// await connPTD.OpenAsync();
// }
// //用ZProductTrans最新RecordType 檢查PTDFlowRules邏輯
// bool bolChkFlow = false;
// string strSQL = $@"Select [FormID] FROM [SFIS_PTD].[dbo].[PTDFlowRules]
// where [ToID] ='{recordType}'";
// DataTable dtPTDFlowRules = new DataTable();
// using (var cmd = connPTD.CreateCommand())
// {
// cmd.CommandText = strSQL;
// using (var reader = await cmd.ExecuteReaderAsync())
// {
// if (reader.HasRows)
// {
// dtPTDFlowRules = DataReaderToDataTable(reader);
// }
// }
// }
// strSQL = @$"Select [RecordTypeID] FROM [SFIS_PTD].[dbo].[ZProductTrans]
// where [SerialNumber] ='{serialNumber}'
// Order by [RecordDate] Desc";
// using (var cmd = connPTD.CreateCommand())
// {
// cmd.CommandText = strSQL;
// using (var reader = await cmd.ExecuteReaderAsync())
// {
// if (reader.Read())
// {
// foreach (DataRow dr in dtPTDFlowRules.Rows)
// {
// if (reader["RecordTypeID"].ToString() == dr["FormID"].ToString())
// {
// bolChkFlow = true;
// break;
// }
// }
// }
// }
// }
// if (!bolChkFlow)
// throw new Exception("流程狀態不允許!");
// result.Success = true;
// result.Msg = "OK";
// }
// catch (Exception ex)
// {
// result.Success = false;
// result.Msg = ex.Message;
// }
// return result;
//}
#endregion
#region "PTD003 作業查詢"
[Route("[action]")]
[HttpGet]
public async Task<List<RecordTypeInfo>> GetRecordTypes()
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select a.RecordTypeID,(select TypeName from SFIS_PTD.dbo.RecordTypeInfo where ID = a.RecordTypeID ) as TypeName
from SFIS_PTD.dbo.ZProductTrans a group by a.RecordTypeID";
DataTable dtRecordTypes = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtRecordTypes = DataReaderToDataTable(reader);
}
}
}
List<RecordTypeInfo> list = new List<RecordTypeInfo>();
foreach (DataRow row in dtRecordTypes.Rows)
{
list.Add(new RecordTypeInfo
{ ID = Convert.ToString(row["RecordTypeID"]),
TypeName = Convert.ToString(row["TypeName"])
});
}
return list;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetData4PTD003(string recordType, string recordNumber, string lineNo, string materialNo, string shippingSN, string dateStart, string dateEnd)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"SELECT a.RecordTypeID ,a.RecordNumber ,a.RCLineNO 'LineNo',
a.SerialNumber 'SN',a.ProductID ,a.EmplID 'Customer',a.LocationID 'Location',
a.CreatorID ,a.RecordDate
FROM SFIS_PTD.dbo.ZProductTrans a where 1=1 ";
if (recordType != null && recordType != "" && recordType != "全部")
{
strSQL += $" And a.RecordTypeID ='{recordType}'";
}
if (recordNumber != null && recordNumber != "")
{
strSQL += $" And a.RecordNumber ='{recordNumber}'";
}
if (lineNo != null && lineNo != "")
{
strSQL += $" And a.RCLineNO ='{lineNo}'";
}
if (materialNo != null && materialNo != "")
{
strSQL += $" And a.ProductID like '{materialNo}%'";
}
if (shippingSN != null && shippingSN != "")
{
strSQL += $" And a.SerialNumber like '{shippingSN}%'";
}
if (dateStart != null && dateEnd != null)
{
if (DateTime.Parse(dateStart) > DateTime.Parse(dateEnd))
{
result.Msg = "起 不可大於 迄!";
result.Success = false;
return result;
}
strSQL += $" And a.RecordDate Between '{dateStart.Replace("/","-") + " 00:00:00"}' And '{dateEnd.Replace("/", "-") + " 23:59:59"}'";
}
//排序:ZProductTrans.CreateDate DESC
strSQL += " Order by a.RecordDate DESC";
DataTable dtZProductTrans = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtZProductTrans = DataReaderToDataTable(reader);
}
}
}
List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZProductTrans.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZProductTrans.Columns)
{
var dic = (IDictionary<string, object>)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;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[HttpGet("GetCustomer/{recordNumber}")]
public async Task<string> GetCustomer(string recordNumber)
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"Select top 1 SoldCustomerID 'Customer' from SFIS_PTD.dbo.ZDNDetail where DNNo ='{recordNumber}'";
string strCustomer = "";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
strCustomer = reader.GetString(0);
}
}
}
return strCustomer;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
#endregion
#region "PTD004 單頭說明維護"
[Route("[action]")]
[HttpGet]
public async Task<ActionResult<IEnumerable<RecordTypeInfo>>> GetRecordTypeInfo()
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo";
DataTable dtRecordTypeInfo = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtRecordTypeInfo = DataReaderToDataTable(reader);
}
}
}
List<RecordTypeInfo> RecordTypeInfo = new List<RecordTypeInfo>();
foreach (DataRow row in dtRecordTypeInfo.Rows)
{
RecordTypeInfo.Add(new RecordTypeInfo
{
RBU = Convert.ToString(row["RBU"]),
ID = Convert.ToString(row["ID"]),
TypeName = Convert.ToString(row["TypeName"]),
TypeDesc = Convert.ToString(row["TypeDesc"]),
Source = Convert.ToString(row["Source"]),
PrefixCode = Convert.ToString(row["PrefixCode"]),
Length = row["Length"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["Length"])
});
}
return RecordTypeInfo;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[HttpGet("GetRecordTypeInfo/{id}")]
public async Task<ActionResult<IEnumerable<RecordTypeInfo>>> GetRecordTypeInfo(string id)
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select * from SFIS_PTD.dbo.RecordTypeInfo";
if (id != null && id != "")
{
strSQL += $@" Where id ='{id}'";
}
DataTable dtRecordTypeInfo = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtRecordTypeInfo = DataReaderToDataTable(reader);
}
}
}
List<RecordTypeInfo> RecordTypeInfo = new List<RecordTypeInfo>();
foreach (DataRow row in dtRecordTypeInfo.Rows)
{
RecordTypeInfo.Add(new RecordTypeInfo
{
RBU = Convert.ToString(row["RBU"]),
ID = Convert.ToString(row["ID"]),
TypeName = Convert.ToString(row["TypeName"]),
TypeDesc = Convert.ToString(row["TypeDesc"]),
Source = Convert.ToString(row["Source"]),
PrefixCode = Convert.ToString(row["PrefixCode"]),
Length = row["Length"] == DBNull.Value ? (int?)null : Convert.ToInt32(row["Length"])
});
}
return RecordTypeInfo;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<RecordTypeInfo>> PostRecordTypeInfo(RecordTypeInfo RecordTypeInfo)
{
ResultModel<RecordTypeInfo> result = new ResultModel<RecordTypeInfo>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"INSERT INTO SFIS_PTD.dbo.RecordTypeInfo (ID, RBU, TypeName, TypeDesc, Source, PrefixCode, Length)
VALUES ('{RecordTypeInfo.ID}','{RecordTypeInfo.RBU}', '{RecordTypeInfo.TypeName}', '{RecordTypeInfo.TypeDesc}',
'{RecordTypeInfo.Source}', '{RecordTypeInfo.PrefixCode}', {RecordTypeInfo.Length})";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
[HttpPut("PutRecordTypeInfo/{id}")]
public async Task<ResultModel<RecordTypeInfo>> PutRecordTypeInfo(string id, [FromBody] RecordTypeInfo RecordTypeInfo)
{
ResultModel<RecordTypeInfo> result = new ResultModel<RecordTypeInfo>();
if (id != RecordTypeInfo.ID)
{
result.Success = false;
result.Msg = "ID錯誤";
return result;
}
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"UPDATE SFIS_PTD.dbo.RecordTypeInfo
SET RBU = '{RecordTypeInfo.RBU}',
TypeName = '{RecordTypeInfo.TypeName}',
TypeDesc = '{RecordTypeInfo.TypeDesc}',
Source = '{RecordTypeInfo.Source}',
PrefixCode = '{RecordTypeInfo.PrefixCode}',
Length = {RecordTypeInfo.Length}
WHERE ID = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
[HttpDelete("DeleteRecordTypeInfo/{id}")]
public async Task<ResultModel<RecordTypeInfo>> DeleteRecordTypeInfo(int id)
{
ResultModel<RecordTypeInfo> result = new ResultModel<RecordTypeInfo>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"DELETE FROM SFIS_PTD.dbo.RecordTypeInfo
WHERE ID = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
#region "PTD005 設定 ERP 客戶代號和客戶收件人名單"
[Route("[action]")]
[HttpGet]
public async Task<ActionResult<IEnumerable<CustomerItemMailGroupModel>>> GetCustomerItemMailGroup()
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select * from SFIS_PTD.dbo.CustomerItemMailGroup";
DataTable dtCustomerItemMailGroup = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtCustomerItemMailGroup = DataReaderToDataTable(reader);
}
}
}
List<CustomerItemMailGroupModel> CustomerItemMailGroup = new List<CustomerItemMailGroupModel>();
foreach (DataRow row in dtCustomerItemMailGroup.Rows)
{
CustomerItemMailGroup.Add(new CustomerItemMailGroupModel
{
ItemNumber = Convert.ToString(row["ItemNumber"]),
CustomerCode = Convert.ToString(row["CustomerCode"]),
MailGroup = Convert.ToString(row["MailGroup"]),
StatusNo = Convert.ToString(row["StatusNo"])
});
}
return CustomerItemMailGroup;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[HttpGet("GetCustomerItemMailGroup/{id}")]
public async Task<ActionResult<IEnumerable<CustomerItemMailGroupModel>>> GetCustomerItemMailGroup(string id)
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select * from SFIS_PTD.dbo.CustomerItemMailGroup Where 1=1";
if (id != null && id != "")
{
strSQL += $@" And ItemNumber ='{id}'";
}
DataTable dtCustomerItemMailGroup = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtCustomerItemMailGroup = DataReaderToDataTable(reader);
}
}
}
List<CustomerItemMailGroupModel> CustomerItemMailGroup = new List<CustomerItemMailGroupModel>();
foreach (DataRow row in dtCustomerItemMailGroup.Rows)
{
CustomerItemMailGroup.Add(new CustomerItemMailGroupModel
{
ItemNumber = Convert.ToString(row["ItemNumber"]),
CustomerCode = Convert.ToString(row["CustomerCode"]),
MailGroup = Convert.ToString(row["MailGroup"]),
StatusNo = Convert.ToString(row["StatusNo"])
});
}
return CustomerItemMailGroup;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<CustomerItemMailGroupModel>> PostCustomerItemMailGroup(CustomerItemMailGroupModel CustomerItemMailGroup)
{
ResultModel<CustomerItemMailGroupModel> result = new ResultModel<CustomerItemMailGroupModel>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"INSERT INTO SFIS_PTD.dbo.[CustomerItemMailGroup] ([ItemNumber],[CustomerCode],[MailGroup],[StatusNo])
VALUES ('{CustomerItemMailGroup.ItemNumber}','{CustomerItemMailGroup.CustomerCode}',
'{CustomerItemMailGroup.MailGroup}', '{CustomerItemMailGroup.StatusNo}')";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
[HttpPut("PutCustomerItemMailGroup/{id}")]
public async Task<ResultModel<CustomerItemMailGroupModel>> PutCustomerItemMailGroup(string id, [FromBody] CustomerItemMailGroupModel CustomerItemMailGroup)
{
ResultModel<CustomerItemMailGroupModel> result = new ResultModel<CustomerItemMailGroupModel>();
if (id != CustomerItemMailGroup.ItemNumber)
{
result.Success = false;
result.Msg = "ID錯誤";
return result;
}
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"UPDATE SFIS_PTD.dbo.CustomerItemMailGroup
SET CustomerCode = '{CustomerItemMailGroup.CustomerCode}',
MailGroup = '{CustomerItemMailGroup.MailGroup}'
WHERE ItemNumber = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
[HttpDelete("DeleteCustomerItemMailGroup/{id}")]
public async Task<ResultModel<CustomerItemMailGroupModel>> DeleteCustomerItemMailGroup(string id)
{
ResultModel<CustomerItemMailGroupModel> result = new ResultModel<CustomerItemMailGroupModel>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"UPDATE SFIS_PTD.dbo.CustomerItemMailGroup
SET StatusNo =
CASE
WHEN StatusNo = 'A' THEN 'S'
WHEN StatusNo = 'S' THEN 'A'
ELSE 'A'
END
WHERE ItemNumber = '{id}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
#region "PTD006 備貨作業"
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetZWHPickListDetail(string recordNumber,string? LineNO)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"select [RecordTypeID] as 'recordType',
[RecordNumber] as 'dnNo',
[RCLineNO] as 'lineNo',
[ProductID] as 'material',
[InputSN] as 'sn'
from dbo.[ZWHPickListDetail] where TaskStatus ='Picked' And RecordNumber ='{recordNumber}'";
if (!string.IsNullOrEmpty(LineNO))
{
strSQL += $@" And RCLineNO ='{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<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZDNDetail.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZDNDetail.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
}
}
result.DataTotal = list.Count();
result.Data = list;
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD006Commit(PTD006CommitDataModel Data)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
List<string> SNList = new List<string>();
Collection<string> colSQL = new Collection<string>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = "";
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
CheckShipQty(Data.RecordNumber, Data.RCLineNO, 1);
//用ZProductTrans最新RecordType 檢查PTDFlowRules邏輯
bool bolChkFlow = false;
strSQL = $@"Select [FormID] FROM [SFIS_PTD].[dbo].[PTDFlowRules]
where [ToID] ='{Data.RecordTypeID}'";
DataTable dtPTDFlowRules = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtPTDFlowRules = DataReaderToDataTable(reader);
}
}
}
strSQL = @$"Select [RecordTypeID] FROM [SFIS_PTD].[dbo].[ZProductTrans]
where [SerialNumber] ='{Data.ShipmentSN}'
Order by [RecordDate] Desc";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
foreach (DataRow dr in dtPTDFlowRules.Rows)
{
if (reader["RecordTypeID"].ToString() == dr["FormID"].ToString())
{
bolChkFlow = true;
break;
}
}
}
else if (Data.RecordTypeID == "101" || Data.RecordTypeID == "292") //101、292可能沒有前身資訊
{
bolChkFlow = true;
}
}
}
if (!bolChkFlow)
throw new Exception("流程狀態不允許!");
//ZWHPickListDetail
strSQL = @$"INSERT INTO [dbo].[ZWHPickListDetail]([RecordTypeID],[RecordNumber],[RCLineNO],[InputSN],[SNFunction]
,[ShipmentSN],[ProductID],[TaskStatus],[EmplID],[ExtNotes],[OwnerPlantID],[OwnerCompanyID]
,[CreateDeptID],[CreatorID],[CreateDate],[ModifyDeptID],[ModifierID],[ModifyDate],[chkflag])
VALUES ('{Data.RecordTypeID}','{Data.RecordNumber}','{Data.RCLineNO}','{Data.InputSN}','ShipmentSN',
'{Data.InputSN}','{Data.ProductID}','Picked','{Data.EmplID}',N'{Data.ExtNotes}','{Data.OwnerPlantID}','{Data.OwnerCompanyID}',
'{Data.CreateDeptID}','{Data.CreatorID}','{strCreateDate}','{Data.ModifyDeptID}','{Data.ModifierID}','{strCreateDate}','0')";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
[HttpDelete("DeleteZWHPickListDetail/{sn}")]
public async Task<ResultModel<RecordTypeInfo>> DeleteZWHPickListDetail(string sn)
{
ResultModel<RecordTypeInfo> result = new ResultModel<RecordTypeInfo>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"DELETE FROM SFIS_PTD.dbo.[ZWHPickListDetail]
WHERE [TaskStatus] = 'Picked' And [ShipmentSN] ='{sn}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
cmd.ExecuteNonQuery();
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
#region "PTD007 扣帳作業"
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetZDNDetailJoinZWHPickListDetail(string recordType, string recordNumber)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = $@"SELECT b.RecordNumber as DNNO
,b.RCLineNO as DNLineNO
,b.ProductID
,b.EmplID as SoldCustomerID
,a.ExpectShipDate
,a.ShipQty
,b.Qty
FROM [dbo].ZDNDetail a right join (select sum(1) as Qty,RecordNumber,RCLineNO,RecordTypeID,ProductID,EmplID
from dbo.[ZWHPickListDetail] where TaskStatus ='Picked' group by RecordTypeID,RecordNumber,RCLineNO,ProductID,EmplID)b
on (b.RecordNumber = a.DNNO and b.RCLineNO = a.DNLineNO)
where b.RecordNumber = '{recordNumber}' and b.RecordTypeID = '{recordType}'";
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<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZDNDetail.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZDNDetail.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
}
}
result.DataTotal = list.Count();
result.Data = list;
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.InnerException.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
if (result == null)
{
result.Msg = "查無資料";
result.Success = false;
return result;
}
result.Success = true;
result.Msg = "OK";
return result;
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD007Commit(PTD007CommitDataModel Data)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
List<string> SNList = new List<string>();
Collection<string> colSQL = new Collection<string>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = "";
string strRecordType = Data.RecordType;
string strRbu = Data.Rbu;
string strWorkCenter = Data.WorkCenter;
string strRecordDate = Data.RecordDate;
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
foreach (PTD007TableDataModel SNData in Data.TableData)
{
//ZWHPickListDetail查SN資訊
strSQL = $@"Select * FROM [SFIS_PTD].[dbo].[ZWHPickListDetail]
where RecordNumber='{SNData.dnno}' and RCLineNO='{SNData.dnLineNO}'";
DataTable dtSNData = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtSNData = DataReaderToDataTable(reader);
}
}
}
foreach (DataRow row in dtSNData.Rows)
{
string strLatest;
//確認此出貨序號是否有ZHistoryKeyDefine
strSQL = $@"select Seed FROM [SFIS_PTD].[dbo].[ZHistoryKeyDefine] where serialnumber ='{row["ShipmentSN"]}'";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
int seed = Convert.ToInt32(reader["Seed"]);
int nIdx = seed + 1;
strLatest = row["ShipmentSN"].ToString() + nIdx.ToString().PadLeft(4, '0');//組成HistoryID
//HistoryKeyDefine
strSQL = @$"UPDATE [SFIS_PTD].[dbo].[ZHistoryKeyDefine]
SET [Seed] = {nIdx} where [SerialNumber]='{row["ShipmentSN"]}'";
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"Update SFIS_PTD..ZSNInfo SET LatestHistoryID='{strLatest}',RecordTypeID='{strRecordType}',
CurrentProductID='{row["ProductID"]}'
where SerialNumber='{row["ShipmentSN"]}'";
colSQL.Add(strSQL);
}
else
{
strLatest = row["ShipmentSN"].ToString() + 1.ToString().PadLeft(4, '0');//組成HistoryID
//ZHistoryKeyDefine
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZHistoryKeyDefine] ([SerialNumber],[Seed])
VALUES ('{row["ShipmentSN"]}',1)";
colSQL.Add(strSQL);
//ZSNInfo
strSQL = @$"INSERT INTO [SFIS_PTD].[dbo].[ZSNInfo] ([SerialNumber],[CurrentProductID],[OriginalProductID],
[LocationID],[LatestHistoryID],[RecordTypeID],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[ModifyDate]) VALUES
('{row["ShipmentSN"]}','{row["ProductID"]}','{row["ProductID"]}',
'9000','{strLatest}','{strRecordType}',
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'{strCreateDate}')";
colSQL.Add(strSQL);
}
//ZProductTrans
strSQL = $@"INSERT INTO [SFIS_PTD].[dbo].[ZProductTrans]
([HistoryID],[SerialNumber],[RecordTypeID],[RecordNumber],[RCLineNO],[RecordDate],
[ProductID],[IsChangeID],[LocationID],[EmplID],[IsDelete],
[OwnerPlantID],[OwnerCompanyID],[CreatePlantID],[CreateCompanyID],
[CreatorID],[CreateDate],[ModifierID],[ModifyDate],
[chkflag],[IsBranchCoReceived],[MOID]) VALUES
('{strLatest}','{row["ShipmentSN"]}','{strRecordType}','{SNData.dnno}','{SNData.dnLineNO}','{strRecordDate}',
'{SNData.productID}',0,'9000','{SNData.soldCustomerID.ToString()}',0,
'{strWorkCenter}','{strRbu}','{strWorkCenter}','{strRbu}',
'WH00','{strCreateDate}','WH00','{strCreateDate}',0,0,'')";
colSQL.Add(strSQL);
}
}
}
strSQL = $@"Update [SFIS_PTD].[dbo].[ZWHPickListDetail] set TaskStatus ='Recorded'
where RecordNumber='{SNData.dnno}' and RCLineNO='{SNData.dnLineNO}'";
colSQL.Add(strSQL);
}
foreach (string query in colSQL)
{
Console.WriteLine(query);
}
using (var cmd = connPTD.CreateCommand())
{
using (var transaction = connPTD.BeginTransaction())
{
try
{
foreach (string query in colSQL)
{
cmd.CommandText = query;
cmd.Transaction = transaction;
cmd.ExecuteNonQuery();
}
// Commit the transaction
transaction.Commit();
}
catch (Exception ex)
{
// Rollback the transaction in case of an exception
transaction.Rollback();
throw ex; // Rethrow the exception after rollback
}
}
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
#region "PTD008 還原作業"
[Route("[action]")]
[HttpGet]
public async Task<ResultModel<dynamic>> GetData4PTD008( string recordNumber, string lineNo, string materialNo, string shippingSN)
{
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
string strSQL = $@"SELECT RecordTypeID,RecordNumber,RCLineNO 'LineNo',
SerialNumber 'SN',ProductID
FROM SFIS_PTD.dbo.ZProductTrans where RecordNumber ='{recordNumber}' And RCLineNO ='{lineNo}'
And ProductID = '{materialNo}'";
if (shippingSN != null && shippingSN != "")
{
strSQL += $" And SerialNumber = '{shippingSN}'";
}
DataTable dtZProductTrans = new DataTable();
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.HasRows)
{
dtZProductTrans = DataReaderToDataTable(reader);
}
}
}
List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dtZProductTrans.Rows)
{
dynamic dyn = new ExpandoObject();
list.Add(dyn);
foreach (DataColumn column in dtZProductTrans.Columns)
{
var dic = (IDictionary<string, object>)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;
}
catch (Exception e)
{
throw e;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
}
[Route("[action]")]
[HttpPost]
public async Task<ResultModel<dynamic>> PostPTD008Commit(PTD008CommitDataModel Data)
{
ResultModel<dynamic> result = new ResultModel<dynamic>();
Collection<string> colSQL = new Collection<string>();
//安勤連線
PTDContext _ptd_context = new PTDContext();
DbConnection connPTD = _ptd_context.Database.GetDbConnection();
if (connPTD.State != ConnectionState.Open)
{
await connPTD.OpenAsync();
}
try
{
string strSQL = "";
string strCreateDate = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");
foreach (PTD008TableDataModel SNData in Data.tableData)
{
if (Data.type == 0) //還原
{
//SQL Server 2012後才能使用
//strSQL = $"Select HistoryID,RecordTypeID,ModifyDate from [SFIS_PTD].[dbo].[ZProductTrans] " +
// $"where [SerialNumber] = '{SNData.sn}' " +
// $"Order by HistoryID desc offset 1 row fetch next 1 rows only ";
strSQL = $@"WITH RankedResults AS (
SELECT
HistoryID,
RecordTypeID,
ModifyDate,
ROW_NUMBER() OVER (ORDER BY HistoryID DESC) AS RowNum
FROM [SFIS_PTD].[dbo].[ZProductTrans]
WHERE [SerialNumber] = '{SNData.sn}'
)
SELECT
HistoryID,
RecordTypeID,
ModifyDate
FROM RankedResults
WHERE RowNum = 2";
using (var cmd = connPTD.CreateCommand())
{
cmd.CommandText = strSQL;
using (var reader = await cmd.ExecuteReaderAsync())
{
if (reader.Read())
{
strSQL = $"Update [SFIS_PTD].[dbo].[ZSNInfo] set RecordTypeID ='{reader["RecordTypeID"]}',ModifyDate ='{reader["ModifyDate"]}',LatestHistoryID ='{reader["HistoryID"]}' " +
$"where SerialNumber ='{SNData.sn}'";
colSQL.Add(strSQL);
}
else
{
strSQL = $"Delete [SFIS_PTD].[dbo].[ZSNInfo] where SerialNumber ='{SNData.sn}'";
colSQL.Add(strSQL);
}
}
}
}
else if (SNData.recordTypeID != "292"
&& SNData.recordTypeID != "101") //狀態為 292 樣品入庫、101 樣品入庫 才能刪除
{
throw new Exception(SNData.recordTypeID + "狀態不能刪除!");
}
strSQL = $"Delete [SFIS_PTD].[dbo].[ZProductTrans] " +
$"where [SerialNumber] = '{SNData.sn}' " +
$"and RecordNumber = '{SNData.recordNumber}' and RCLineNO ='{SNData.lineNo}' " +
$"and ProductID ='{SNData.productID}'";
colSQL.Add(strSQL);
}
using (var cmd = connPTD.CreateCommand())
{
using (var transaction = connPTD.BeginTransaction())
{
try
{
foreach (string query in colSQL)
{
cmd.CommandText = query;
cmd.Transaction = transaction;
cmd.ExecuteNonQuery();
}
// Commit the transaction
transaction.Commit();
}
catch (Exception ex)
{
// Rollback the transaction in case of an exception
transaction.Rollback();
throw ex; // Rethrow the exception after rollback
}
}
}
result.Success = true;
result.Msg = "OK";
}
catch (Exception ex)
{
result.Success = false;
result.Msg = ex.Message;
}
finally
{
if (connPTD.State == ConnectionState.Open)
{
connPTD.Close();
connPTD.Dispose();
}
}
return result;
}
#endregion
}
}