华恒Mes鼎捷代码
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.

586 lines
23 KiB

using ICSSoft.Base.Config.AppConfig;
using ICSSoft.Base.Config.DBHelper;
using ICSSoft.Frame.Common;
using ICSSoft.Frame.Data.Entity;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
namespace ICSSoft.Frame.Data.DAL
{
public class ICSAGVDAL
{
public static string CreateAGVTaskJJorBack(List<AGVCreateTaskModel> Model_List, List<ICSAGVTASKLOG> Log_List ,string Appconstr, string workpoint)
{
StringBuilder RtnMes = new StringBuilder("");
AGVCreateTaskReturnModel rr = new AGVCreateTaskReturnModel();
try
{
string CreateTaskUrl = "";
//获取URL地址
string sql = @" select vv.define1 from Sys_EnumValues vv
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
where kk.enumname='AGV管控'
and vv.EnumText='CreateTaskUrl'
and kk.WorkPointCode ='" + workpoint + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-CreateTaskUrl");
}
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
for (int i = 0; i < Model_List.Count; i++)
{
var Model = Model_List[i];
var Log = Log_List[i];
try
{
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
StringBuilder str = new StringBuilder();
str.AppendLine("创建AGV接口(CreateAGVTask):" + Model.trackingNumber);
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
str.AppendLine("接口返回数据:" + ReturnStr);
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
if (string.IsNullOrEmpty(ReturnStr))
{
throw new Exception("调用接口返回信息为空");
}
JObject obj = new JObject();
obj = JObject.Parse(ReturnStr);
if (obj["code"] == null)
{
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
}
else if (obj["code"].ToString() != "200")
{
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
}
try
{
rr = JsonConvert.DeserializeObject<AGVCreateTaskReturnModel>(ReturnStr);
}
catch (Exception ex)
{
throw new Exception("解析接口返回数据失败:数据内容:" + ReturnStr + Environment.NewLine +
"失败原因:" + ex.Message);
}
Log.ParamsMes = JsonConvert.SerializeObject(Model);
Log.ReturnMes = ReturnStr;
Log.Eattribute2 = rr.data.id; //AGV任务编号,后续如果要回写小车到位状态,用此编号查询
WriteMesAgvLog(Log);
}
catch (Exception ex)
{
RtnMes.Append("条码:"+Log.Lotno+",工序:"+Log.Opcode+",点位:"+Log.LocationCode+",区域:"+Log.Area+" 子件物料:"+Log.MaterialCode+":"+ex.Message+","+Log.TaskType+"失败,已跳过!\r\n");
continue;
}
}
return RtnMes.ToString();
}
catch (Exception ex)
{
throw ex;
}
}
public static void AgvAreaToArea(AgvAreaToAreaModel Model, ICSAGVTASKLOG log, string Appconstr, string workpoint) {
try
{
string Url = "";
//获取URL地址
string sql = @" select vv.define1 from Sys_EnumValues vv
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
where kk.enumname='AGV管控'
and vv.EnumText='regionalMoveUrl'
and kk.WorkPointCode ='" + workpoint + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-regionalMoveUrl");
}
Url = dt.Rows[0]["define1"].ToString();
string ReturnStr = CustWebRequest.WorkDayPostData(Url, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
StringBuilder str = new StringBuilder();
str.AppendLine("创建AGV接口(regionalMove):" + Model.trackingNumber+" "+log.Opcode);
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
str.AppendLine("接口返回数据:" + ReturnStr);
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
if (string.IsNullOrEmpty(ReturnStr))
{
throw new Exception("调用接口返回信息为空");
}
JObject obj = new JObject();
obj = JObject.Parse(ReturnStr);
if (obj["code"] == null)
{
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
}
else if (obj["code"].ToString() != "200")
{
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
}
log.ParamsMes = JsonConvert.SerializeObject(Model);
log.ReturnMes = ReturnStr;
WriteMesAgvLog(log);
}
catch (Exception ex)
{
throw ex;
}
}
public static string AgvPointToPoint(List<PointToPointModel> Model_List, List<ICSAGVTASKLOG> Log_List, string Appconstr, string workpoint)
{
StringBuilder RtnMes = new StringBuilder("");
try
{
string CreateTaskUrl = "";
//获取URL地址
string sql = @" select vv.define1 from Sys_EnumValues vv
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
where kk.enumname='AGV管控'
and vv.EnumText='PointToPointUrl'
and kk.WorkPointCode ='" + workpoint + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-PointToPointUrl");
}
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
for (int i = 0; i < Model_List.Count; i++)
{
var Model = Model_List[i];
var Log = Log_List[i];
try
{
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
StringBuilder str = new StringBuilder();
str.AppendLine("创建AGV接口(PointToPointUrl):" +Log.Lotno);
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
str.AppendLine("接口返回数据:" + ReturnStr);
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
if (string.IsNullOrEmpty(ReturnStr))
{
throw new Exception("调用接口返回信息为空");
}
JObject obj = new JObject();
obj = JObject.Parse(ReturnStr);
if (obj["code"] == null)
{
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
}
else if (obj["code"].ToString() != "200")
{
throw new Exception("接口返回数据异常:异常信息:" + obj["msg"].ToString());
}
Log.ParamsMes = JsonConvert.SerializeObject(Model);
Log.ReturnMes = ReturnStr;
WriteMesAgvLog(Log);
}
catch (Exception ex)
{
RtnMes.Append("条码:" + Log.Lotno + ",工序:" + Log.Opcode + ",起始点位:" + Log.LocationCode + ",结束点位:" + Log.EndLocation + " :" + ex.Message + "," + Log.TaskType + "失败,已跳过!\r\n");
continue;
}
}
return RtnMes.ToString();
}
catch (Exception ex)
{
throw ex;
}
}
public static AGVCancelTaskReturnModel CancelAGVTask(AGVCancelTaskModel Model, string Appconstr, string workpoint)
{
AGVCancelTaskReturnModel rr = new AGVCancelTaskReturnModel();
try
{
string CreateTaskUrl = "";
//获取URL地址
string sql = @" select vv.define1 from Sys_EnumValues vv
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
where kk.enumname='AGV管控'
and vv.EnumText='CancelTaskUrl'
and kk.WorkPointCode ='" + workpoint + "'";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt == null || dt.Rows.Count == 0)
{
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-CancelTaskUrl");
}
CreateTaskUrl = dt.Rows[0]["define1"].ToString();
string ReturnStr = CustWebRequest.WorkDayPostData(CreateTaskUrl, JsonConvert.SerializeObject(Model), "application/json;charset=UTF-8");
StringBuilder str = new StringBuilder();
str.AppendLine("创建AGV接口(CancelAGVTask):" );
str.AppendLine("接口传入数据:" + JsonConvert.SerializeObject(Model));
str.AppendLine("接口返回数据:" + ReturnStr);
ICSMO2UserDAL.WriteLogFile(str.ToString(), "AGV接口");
if (string.IsNullOrEmpty(ReturnStr))
{
throw new Exception("调用接口返回信息为空");
}
JObject obj = new JObject();
obj = JObject.Parse(ReturnStr);
if (obj.Property("message") == null || obj.Property("result") == null)
{
throw new Exception("接口返回数据异常:数据内容:" + ReturnStr);
}
try
{
rr = JsonConvert.DeserializeObject<AGVCancelTaskReturnModel>(ReturnStr);
}
catch (Exception ex)
{
throw new Exception("解析接口返回数据失败:数据内容:" + ReturnStr + Environment.NewLine +
"失败原因:" + ex.Message);
}
return rr;
}
catch (Exception ex)
{
rr.result = null;
rr.message = ex.Message;
return rr;
}
}
public static bool IsCanToAGV(string Lotno,string Opcode,string Type, string Appconstr, string workpoint)
{
try
{
//获取URL地址
string sql = @" select vv.define1 from Sys_EnumValues vv
inner join Sys_Enumkey kk on kk.WorkPointCode=vv.WorkPointCode and kk.EnumKey=vv.EnumKey
where kk.enumname='AGV管控'
and vv.EnumText='" + Type + @"'
and kk.WorkPointCode ='" + workpoint+@"'
Select SEGCODE FROM ICSMO2USER WHERE lotno='"+Lotno+"' and opcode='"+Opcode+@"'
";
DataSet set = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql);
DataTable dt = set.Tables[0];
DataTable dt1 = set.Tables[1];
if (dt != null && dt.Rows.Count > 0)
{
if (dt.Rows[0]["define1"].ToString() == "是"&& dt1.Rows[0]["SEGCODE"].ToString()=="1")
{
return true;
}
else
{
return false;
}
}
else
{
throw new Exception("请联系管理员,在自定义档案中维护信息:AGV管控-" + Type);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static List<MaterialItem> GetOPBOM(string LotNo, string opcode, string Appconstr, string workpoint)
{
List<MaterialItem> List = new List<MaterialItem>();
try
{
string sql = @"
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
DROP TABLE #TEMP_MODD
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
DROP TABLE #TEMP_MONewbom
SELECT
lot.lotqty, mo.itemcode, rr.routecode, mo.workpoint
INTO #TEMP_MODD
FROM
icsitemlot lot
LEFT JOIN icsmo mo ON mo.mocode= lot.TransNO
AND mo.moseq= lot.TransLine
AND mo.workpoint= lot.workpoint
LEFT JOIN ICSMO2ROUTE rr ON rr.mocode= mo.mocode
AND rr.moid= mo.id
AND rr.workpoint= mo.workpoint
WHERE
lot.lotno= '" + LotNo + @"'
AND mo.workpoint= '" + workpoint + @"'
SELECT
itemcode, SBOMVER, workpoint INTO #TEMP_MONewbom
FROM
(
SELECT
MM.itemcode ,
mm.SBOMVER ,
MM.workpoint,
row_number ( ) OVER ( partition BY MM.itemcode ORDER BY mm.SBOMVER DESC ) rn
FROM
ICSSBOM MM
WHERE
EXISTS ( SELECT 1 FROM #TEMP_MODD DD WHERE MM.ITEMCODE= DD.ITEMCODE AND MM.workpoint= dd.workpoint )
) gg
WHERE
rn = 1
SELECT
ll.obitemcode, ll.obitemqty* dd.lotqty obitemqty
FROM
ICSOPBOMDETAIL ll
INNER JOIN #TEMP_MONewbom bb ON bb.itemcode= ll.itemcode
AND bb.WorkPoint= ll.workpoint
INNER JOIN #TEMP_MODD dd ON dd.routecode= ll.obcode
WHERE ll.opcode= '" + opcode + @"'
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MODD' ) )
DROP TABLE #TEMP_MODD
IF EXISTS ( SELECT * FROM tempdb..sysobjects WHERE id = object_id( 'tempdb..#TEMP_MONewbom' ) )
DROP TABLE #TEMP_MONewbom
";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
MaterialItem mm = new MaterialItem();
mm.materialCode = dr["obitemcode"].ToString();
mm.qty = Convert.ToInt32(Convert.ToDouble(dr["obitemqty"].ToString()));
List.Add(mm);
}
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return List;
}
public static bool IsFirstOP(string LOTNO, string opcode, string Appconstr, string workpoint)
{
try
{
string sql = @"
SELECT opcode FROM ICSITEMROUTE2OPLOT WHERE LOTNO='" + LOTNO + @"' ORDER BY OPSEQ
";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
if (opcode == dt.Rows[0]["opcode"].ToString())
{
return true;
}
else
{
return false;
}
}
else
{
throw new Exception("查询工艺路线数据异常");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static bool IsLastOP(string LOTNO, string opcode, string Appconstr, string workpoint)
{
try
{
string sql = @"
SELECT opcode FROM ICSITEMROUTE2OPLOT WHERE LOTNO='" + LOTNO+@"' ORDER BY OPSEQ DESC
";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
if (opcode == dt.Rows[0]["opcode"].ToString())
{
return true;
}
else
{
return false;
}
}
else
{
throw new Exception("查询工艺路线数据异常");
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static bool NextOPisWW(string LOTNO, string opcode, string Appconstr, string workpoint)
{
try
{
string sql = @"
SELECT TOP 1 A.OPCODE,OPSEQ,C.EATTRIBUTE1 FROM ICSITEMROUTE2OPLOT A
LEFT JOIN ICSMO2USER C ON C.LOTNO=A.LOTNO AND C.OPCODE=A.OPCODE
WHERE A.LOTNO='"+LOTNO+@"'
AND OPSEQ>(SELECT OPSEQ FROM ICSITEMROUTE2OPLOT B WHERE B.LotNo=A.LotNo AND B.OPCODE='"+opcode+@"') ORDER BY A.OPSEQ
";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
if (String.IsNullOrEmpty(dt.Rows[0]["EATTRIBUTE1"].ToString())|| dt.Rows[0]["EATTRIBUTE1"].ToString()=="0")
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static bool NextOPisWG(string LOTNO, string opcode, string Appconstr, string workpoint)
{
try
{
string sql = @"
SELECT ACTIONRESULT FROM ICSLOTONWIP WHERE LOTNO='"+LOTNO+@"' AND OPCODE IN
(SELECT TOP 1 A.OPCODE FROM ICSITEMROUTE2OPLOT A
LEFT JOIN ICSMO2USER C ON C.LOTNO=A.LOTNO AND C.OPCODE=A.OPCODE
WHERE A.LOTNO='" + LOTNO + @"'
AND OPSEQ>(SELECT OPSEQ FROM ICSITEMROUTE2OPLOT B WHERE B.LotNo=A.LotNo AND B.OPCODE='" + opcode + @"') ORDER BY A.OPSEQ );
";
DataTable dt = DBHelper.ExecuteDataset(Appconstr, CommandType.Text, sql).Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
if (dt.Rows[0]["ACTIONRESULT"].ToString()== "COLLECT_END")
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public static string GetAreaCode(string enumkey, string EnumValue, string Appconstr, string workpoint) {
try
{
string sql = "select ENUMTEXT,DEFINE1,DEFINE2,DEFINE3 FROM Sys_EnumValues WHERE EnumKey='{0}' AND ENUMVALUE='{1}' and workpointcode='{2}'";
sql = string.Format(sql, enumkey, EnumValue,workpoint);
var reader = DBHelper.ExecuteReader(Appconstr, CommandType.Text, sql);
string returnmes = "";
while (reader.Read())
{
returnmes = reader.GetString(0) + ":" + reader.GetString(1)+"@"+ reader.GetString(2)+":"+ reader.GetString(3);
}
return returnmes;
}
catch (Exception ex) {
throw ex;
}
}
public static void WriteMesAgvLog(ICSAGVTASKLOG log)
{
FramDataContext db = new FramDataContext(AppConfig.AppConnectString);
db.Connection.Open();
db.Transaction = db.Connection.BeginTransaction();
try
{
db.ICSAGVTASKLOG.InsertOnSubmit(log);
db.SubmitChanges();
db.Transaction.Commit();
}
catch (Exception ex)
{
db.Transaction.Rollback();
throw ex;
}
finally
{
db.Connection.Close();
}
}
}
}