diff --git a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
index fb021b0e..881209e1 100644
--- a/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
+++ b/AMESCoreStudio.WebApi/Controllers/AMES/WipInfosController.cs
@@ -400,6 +400,190 @@ namespace AMESCoreStudio.WebApi.Controllers.AMES
                 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;