public long msp_GetTransactNo( int communityID, int count, string tableName, string userCode, long sysLogID, string opNodes, string voucherNo, out int errCode, out string errText, bool isCheckTran = false) { try { if (count > 10000) { errCode = 999999; errText = "申请序列号过多!"; return(-1); } long transactNo = msp_GetSequenceNo("NextTransactNo", 1); if (transactNo < 1) { errCode = 999999; errText = "申请序列号不正确,请检查服务器地址配置是否正确!IRAPORM.xml"; return(-1); } IRAPSQLConnection conn = new IRAPSQLConnection(); STB009 sysLogIDRow = (STB009)conn.Get( new STB009() { PartitioningKey = 10000L * communityID, SysLogID = sysLogID }); if (sysLogIDRow == null) { errCode = 99999; errText = string.Format( "无效的登陆标识 [{0}]!", sysLogID); return(-1); } STB010 tRow = new STB010(); tRow.PartitioningKey = long.Parse( (DateTime.Now.Year.ToString() + (100000000L + communityID).ToString().Substring(1, 8))); tRow.TransactNo = transactNo; tRow.IPAddress = ""; tRow.OperTime = DateTime.Now; if (isCheckTran) { tRow.OkayTime = DateTime.Now; tRow.Status = 5; tRow.Checked = userCode; tRow.AgencyLeaf2 = sysLogIDRow.AgencyLeaf; tRow.AgencyLeaf1 = sysLogIDRow.AgencyLeaf; } else { tRow.Status = 0; tRow.OkayTime = new DateTime(1800, 1, 1); } tRow.RevokeTime = new DateTime(1800, 1, 1); tRow.OpNodes = opNodes; tRow.VoucherNo = voucherNo; tRow.VoucherNoEx = ""; tRow.WFInstanceID = ""; tRow.Operator = userCode; conn.Insert(tableName, tRow); conn.Close(); errCode = 0; errText = "申请交易号成功!"; return(transactNo); } catch (Exception err) { errCode = 9999; errText = string.Format("申请交易号出错:[{0}]", err.Message); return(-1); } }
/// <summary> /// 人工检查记录保存 /// </summary> /// <param name="userCode">系统登录用户号</param> /// <param name="agencyLeaf">登录用户的机构叶标识</param> /// <param name="productLeaf">产品叶标识</param> /// <param name="workUnitLeaf">工位叶标识</param> /// <param name="t107EntityID">工位实体标识</param> /// <param name="t132LeafID">产品族叶标识</param> /// <param name="containerNo">容器号</param> /// <param name="functionName">功能名称</param> /// <param name="wipInspecting">人工检查实体对象</param> /// <param name="confirmTime">检查确认时间</param> /// <returns></returns> public IRAPJsonResult msp_SaveFact_ManualInspecting( int communityID, string userCode, int agencyLeaf, int productLeaf, int workUnitLeaf, int t107EntityID, int t132LeafID, string containerNo, string functionName, Inspecting wipInspecting, DateTime confirmTime, long sysLogID, out int errCode, out string errText) { string strProcedureName = string.Format("{0}.{1}", className, MethodBase.GetCurrentMethod().Name); WriteLog.Instance.WriteBeginSplitter(strProcedureName); try { WriteLog.Instance.Write(string.Format("CommunityID={0}|UserCode={1}|AgencyLeaf={2}|" + "ProductLeaf={3}|WorkUnitLeaf={4}|T107EntityID={5}|T132LeafID={6}|" + "ContainerNo={7}|FunctionName={8}|ConfirmTime={9}|SysLogID={10}", communityID, userCode, agencyLeaf, productLeaf, workUnitLeaf, t107EntityID, t132LeafID, containerNo, functionName, confirmTime, sysLogID), strProcedureName); using (IRAPSQLConnection conn = new IRAPSQLConnection()) { long transactNo = 0; #region 申请交易号 WriteLog.Instance.Write("开始申请交易号", strProcedureName); try { ssp_GetSequenceNo( communityID, "NextTransactNo", 1, sysLogID, "-6", "", ref transactNo, out errCode, out errText); WriteLog.Instance.Write( string.Format("({0}){1}", errCode, errText), strProcedureName); if (errCode == 0) { WriteLog.Instance.Write(string.Format("申请到的交易号:{0}", transactNo), strProcedureName); } else { errCode = 99001; errText = string.Format("申请交易号出错:{0}", errText); WriteLog.Instance.Write(errText, strProcedureName); return(Json(errCode)); } } catch (Exception error) { errCode = 99001; errText = string.Format("申请交易号出错:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); return(Json(errCode)); } #endregion int passByTimes = ufn_GetWIPPassByTimes( communityID, productLeaf, workUnitLeaf, wipInspecting.MainWIPIDCode.WIPCode); long stdcycleTimeOfOperation = ufn_GetStdCycleTimeOfOperation( communityID, productLeaf, workUnitLeaf); long unscheduledPDTofAWorkUnit = ufn_GetUnscheduledPDTofAWorkUnit( communityID, workUnitLeaf, wipInspecting.MainWIPIDCode.MoveInTime, confirmTime, sysLogID); // 开始事务处理 conn.BeginTran(); foreach (SubWIPIDCodeInfo_Inspecting wip in wipInspecting.SubWIPIDCodes) { long factID = 0; long partitionPolicy = 0; long factPartitioningKey = 0; #region 申请事实编号 try { factID = IRAPDAL.UTS.Instance.msp_GetSequenceNo("NextFactNo", 1); } catch (Exception error) { errCode = 99001; errText = string.Format("申请事实编号出错:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } if (factID <= 0) { errCode = 99001; errText = "未申请到事实编号!"; WriteLog.Instance.Write(errText, strProcedureName); conn.RollBack(); return(Json(errCode)); } else { WriteLog.Instance.Write(string.Format("申请到的事实编号:{0}", factID), strProcedureName); } #endregion #region 在行集事实表(RSFact_Inspecting)中添加纪录 WriteLog.Instance.Write("保存行集事实", strProcedureName); partitionPolicy = Int64.Parse(DateTime.Now.Year.ToString() + (100000000L + communityID).ToString().Substring(1, 8) + "0006"); wip.GetListFromDataTable(); for (int i = 0; i < wip.FailureItems.Count; i++) { RSFact_Inspecting rsFactInspecting = new RSFact_Inspecting() { FactID = factID, PartitionPolicy = partitionPolicy, WFInstanceID = wipInspecting.MainWIPIDCode.PWONo, Ordinal = i + 1, T101LeafID = wip.FailureItems[i].T101LeafID, T110LeafID = wip.FailureItems[i].T110LeafID, T118LeafID = wip.FailureItems[i].T118LeafID, T216LeafID = wip.FailureItems[i].T216LeafID, T183LeafID = wip.FailureItems[i].T183LeafID, T184LeafID = wip.FailureItems[i].T184LeafID, CntDefect = wip.FailureItems[i].CntDefect, }; try { conn.Insert(rsFactInspecting); } catch (Exception error) { errCode = 99002; errText = string.Format("保存行集事实失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } } WriteLog.Instance.Write("行集事实保存完成", strProcedureName); #endregion #region 在辅助事实表(AuxFact_PDC)中添加纪录 WriteLog.Instance.Write("保存辅助事实", strProcedureName); partitionPolicy = Int64.Parse(communityID.ToString() + (100000000L + t132LeafID).ToString().Substring(1, 8) + DateTime.Now.Year.ToString()); factPartitioningKey = Int64.Parse(DateTime.Now.Year.ToString() + (100000000L + communityID).ToString().Substring(1, 8) + "0006"); AuxFact_PDC auxFactPDC = new AuxFact_PDC() { FactID = factID, PartitioningKey = partitionPolicy, FactPartitioningKey = factPartitioningKey, WFInstanceID = wipInspecting.MainWIPIDCode.PWONo, WIPCode = wip.SubWIPIDCode, AltWIPCode = wipInspecting.MainWIPIDCode.AltWIPCode, SerialNumber = wipInspecting.MainWIPIDCode.SerialNumber, LotNumber = wipInspecting.MainWIPIDCode.LotNumber, ContainerNo = containerNo, FakePreventingCode = "", CustomerAssignedID = "", ElectronicProductCode = "", }; #region 计算 QCStatus 值 if (wip.InspectingStatus == 3) { wip.QCStatus = CalculateQCStatus(communityID, productLeaf, workUnitLeaf, wipInspecting.MainWIPIDCode.PWONo, wip.QCStatus); } auxFactPDC.QCStatus = wip.QCStatus; #endregion try { conn.Insert(auxFactPDC); } catch (Exception error) { errCode = 99002; errText = string.Format("保存辅助事实表失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } WriteLog.Instance.Write("辅助事实保存完成", strProcedureName); #endregion #region 在主事实表(FixedFact_MES)中添加记录 WriteLog.Instance.Write("保存主事实", strProcedureName); partitionPolicy = Int64.Parse(DateTime.Now.Year.ToString() + (100000000L + communityID).ToString().Substring(1, 8) + "0006"); #region 准备需要保存的数据 FixedFact_MES fixedFactMES = new FixedFact_MES() { FactID = factID, PartitioningKey = partitionPolicy, TransactNo = transactNo, IsFixed = 1, OpID = 6, OpType = wip.InspectingStatus, BusinessDate = confirmTime, Code01 = wipInspecting.MainWIPIDCode.T102Code, Code02 = wipInspecting.MainWIPIDCode.T120Code, Code03 = wipInspecting.MainWIPIDCode.T107Code, Code04 = wipInspecting.MainWIPIDCode.T126Code, Code05 = wipInspecting.MainWIPIDCode.T1Code, Code06 = wipInspecting.MainWIPIDCode.T134Code, Code07 = wipInspecting.MainWIPIDCode.T181Code, Code08 = wipInspecting.MainWIPIDCode.T1002Code, Leaf01 = wipInspecting.MainWIPIDCode.T102Leaf, Leaf02 = wipInspecting.MainWIPIDCode.T120Leaf, Leaf03 = wipInspecting.MainWIPIDCode.T107Leaf, Leaf04 = wipInspecting.MainWIPIDCode.T126Leaf, Leaf05 = wipInspecting.MainWIPIDCode.T1Leaf, Leaf06 = wipInspecting.MainWIPIDCode.T134Leaf, Leaf07 = wipInspecting.MainWIPIDCode.T181Leaf, Leaf08 = wipInspecting.MainWIPIDCode.T1002Leaf, }; fixedFactMES.AChecksum = 0; fixedFactMES.CorrelationID = 0; fixedFactMES.Metric01 = 1; // 此处应该由前台传入 fixedFactMES.Metric02 = passByTimes; fixedFactMES.Metric03 = 1; fixedFactMES.Metric04 = Int64.Parse((confirmTime - wipInspecting.MainWIPIDCode.MoveInTime).TotalMilliseconds.ToString()) / wipInspecting.MainWIPIDCode.NumOfSubWIPs; fixedFactMES.Metric05 = fixedFactMES.Metric04 + fixedFactMES.Metric02; fixedFactMES.Metric06 = fixedFactMES.Metric04 + fixedFactMES.Metric03; fixedFactMES.Metric07 = stdcycleTimeOfOperation; fixedFactMES.Metric08 = TimeParser.LocalTimeToUnix(confirmTime); fixedFactMES.Metric09 = (long)(wipInspecting.ScanTime - wipInspecting.MainWIPIDCode.MoveInTime).TotalMilliseconds; fixedFactMES.Metric10 = unscheduledPDTofAWorkUnit; fixedFactMES.BChecksum = 0; fixedFactMES.MeasurementID = 0; fixedFactMES.WFInstanceID = wipInspecting.MainWIPIDCode.PWONo; fixedFactMES.Remark = functionName; fixedFactMES.LinkedFactID = 0; #endregion #region 添加记录 try { conn.Insert(fixedFactMES); } catch (Exception error) { errCode = 99002; errText = string.Format("保存主事实表失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } #endregion WriteLog.Instance.Write("主事实保存完成", strProcedureName); #endregion } if (NeedRepair(wipInspecting)) { #region 调整路由送修(IRAPMES..usp_MarkNGWIP) { WriteLog.Instance.Write("调整路由送修", strProcedureName); WIP wip = new WIP(); try { IRAPJsonResult rlt = wip.usp_MarkNGWIP( communityID, productLeaf, wipInspecting.MainWIPIDCode.WIPCode, wipInspecting.MainWIPIDCode.LotNumber, containerNo, wipInspecting.MainWIPIDCode.PWONo, wipInspecting.MainWIPIDCode.QCStatus, workUnitLeaf, 0, sysLogID, out errCode, out errText); WriteLog.Instance.Write(string.Format("({0}){1}", errCode, errText), strProcedureName); if (errCode != 0) { conn.RollBack(); return(Json(errCode)); } } catch (Exception error) { errCode = 99003; errText = string.Format("调用 usp_MarkNGWIP 失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } WriteLog.Instance.Write("路由送修调整完毕", strProcedureName); } #endregion } else { #region 调整路由(IRAPMES..usp_WIPForward) { WriteLog.Instance.Write("调整路由", strProcedureName); WIP wip = new WIP(); try { IRAPJsonResult rlt = wip.usp_WIPForward( communityID, productLeaf, wipInspecting.MainWIPIDCode.WIPPattern, wipInspecting.MainWIPIDCode.LotNumber, containerNo, wipInspecting.MainWIPIDCode.PWONo, wipInspecting.MainWIPIDCode.QCStatus, workUnitLeaf, 0, sysLogID, out errCode, out errText); WriteLog.Instance.Write(string.Format("({0}){1}", errCode, errText), strProcedureName); if (errCode != 0) { conn.RollBack(); return(Json(errCode)); } } catch (Exception error) { errCode = 99003; errText = string.Format("调用 usp_WIPForward 失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } WriteLog.Instance.Write("路由调整完成", strProcedureName); } #endregion } #region 更新工位的第二个瞬态属性(IRAPMDM..stb060) { WriteLog.Instance.Write("更新工位第二个瞬态属性", strProcedureName); int partitioningKey = Int32.Parse(communityID.ToString() + "0107"); List <IDataParameter> paramList = new List <IDataParameter>(); paramList.Add(new IRAPProcParameter("@Statistic02", DbType.Int64, TimeParser.LocalTimeToUnix(confirmTime))); paramList.Add(new IRAPProcParameter("@PartitioningKey", DbType.Int64, partitioningKey)); paramList.Add(new IRAPProcParameter("@T107EntityID", DbType.Int32, t107EntityID)); try { conn.Update("UPDATE IRAPMDM..stb060 SET Statistic02 = @Statistic02 " + "WHERE PartitioningKey = @PartitioningKey AND EntityID = @T107EntityID", paramList); } catch (Exception error) { errCode = 99004; errText = string.Format("更新工位(IRAPMDM..stb060)的第二个瞬态属性失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } WriteLog.Instance.Write("工位第二个瞬态属性更新完成", strProcedureName); } #endregion #region 交易复核(IRAPMES..stb010) { WriteLog.Instance.Write("交易复核", strProcedureName); long partitionPolicy = Int64.Parse(confirmTime.Year.ToString() + (100000000L + communityID).ToString().Substring(1, 8)); List <IDataParameter> paramList = new List <IDataParameter>(); paramList.Add(new IRAPProcParameter("@OkayTime", DbType.DateTime2, confirmTime)); paramList.Add(new IRAPProcParameter("@AgencyLeaf2", DbType.Int32, agencyLeaf)); paramList.Add(new IRAPProcParameter("@Checked", DbType.String, userCode)); paramList.Add(new IRAPProcParameter("@TransactNo", DbType.Int64, transactNo)); paramList.Add(new IRAPProcParameter("@PartitioningKey", DbType.Int64, partitionPolicy)); try { conn.Update("UPDATE IRAPMES..stb010 SET OkayTime = @OkayTime, " + "AgencyLeaf2 = @AgencyLeaf2, Checked = @Checked, " + "Status = 5 WHERE TransactNo = @TransactNo AND " + "PartitioningKey = @PartitioningKey", paramList); } catch (Exception error) { errCode = 99004; errText = string.Format("交易复核(IRAPMES..stb010)失败:{0}", error.Message); WriteLog.Instance.Write(errText, strProcedureName); WriteLog.Instance.Write(error.StackTrace, strProcedureName); conn.RollBack(); return(Json(errCode)); } WriteLog.Instance.Write("交易复核完成", strProcedureName); } #endregion conn.Commit(); errCode = 0; errText = "保存成功"; return(Json(errCode)); } } finally { WriteLog.Instance.WriteEndSplitter(strProcedureName); } }