Example #1
0
        /// <summary>
        /// Lấy bảng điểm tổng kết học kỳ theo lớp
        /// </summary>
        /// <param name="maLop">String: mã lớp</param>
        /// <param name="maHocKy">String: Mã học kỳ</param>
        /// <returns>List BangDiemHocKyDTO</returns>
        public List <BangDiemHocKyDTO> LayList_BangDiem_Lop_HocKy(string maLop, string maHocKy)
        {
            var bangDiemHocKy = new List <BangDiemHocKyDTO>();
            // Lấy ds học sinh của lớp
            List <HocSinhDTO> dsHocsinh    = _hocSinhDAL.LayList_HocSinh_LopHoc(maLop);
            MonHoc_HeSoDTO    dsHeSoMonHoc = _monHocDAL.LayDTO_HeSoMonHoc();

            foreach (HocSinhDTO hocsinh in dsHocsinh)
            {
                var bangDiemCaNhan = new BangDiemHocKyDTO
                {
                    STT        = hocsinh.STT,
                    MaHocSinh  = hocsinh.MaHocSinh,
                    TenHocSinh = hocsinh.TenHocSinh
                };
                // Tinh điểm tb
                DataTable tbBangDiem  = _bangDiemDAL.LayBangDiem_HocKy_HocSinh(maLop, hocsinh.MaHocSinh, maHocKy);
                int       soMonHoc    = tbBangDiem.Rows.Count;
                int       soMonDuDiem = 0;
                double    tongDiem    = 0;
                double    tongHeSo    = 0;
                double    heso        = 0;
                foreach (DataRow dr in tbBangDiem.Rows)
                {
                    object dtb;
                    if (dr["DTB"] is DBNull)
                    {
                        dtb = "_";
                    }
                    else
                    {
                        dtb = dr["DTB"];
                    }

                    switch (Convert.ToString(dr["MaMonHoc"]))
                    {
                    case "toan":
                        bangDiemCaNhan.Dtoan = dtb;
                        heso = dsHeSoMonHoc.toan;
                        break;

                    case "ly":
                        bangDiemCaNhan.Dly = dtb;
                        heso = dsHeSoMonHoc.ly;
                        break;

                    case "hoa":
                        bangDiemCaNhan.Dhoa = dtb;
                        heso = dsHeSoMonHoc.hoa;
                        break;

                    case "sinh":
                        bangDiemCaNhan.Dsinh = dtb;
                        heso = dsHeSoMonHoc.sinh;
                        break;

                    case "ngvan":
                        bangDiemCaNhan.Dngvan = dtb;
                        heso = dsHeSoMonHoc.nngu;
                        break;

                    case "su":
                        bangDiemCaNhan.Dsu = dtb;
                        heso = dsHeSoMonHoc.su;
                        break;

                    case "dia":
                        bangDiemCaNhan.Ddia = dtb;
                        heso = dsHeSoMonHoc.dia;
                        break;

                    case "nngu":
                        bangDiemCaNhan.Dnngu = dtb;
                        heso = dsHeSoMonHoc.nngu;
                        break;

                    case "tin":
                        bangDiemCaNhan.Dtin = dtb;
                        heso = dsHeSoMonHoc.tin;
                        break;

                    case "tduc":
                        bangDiemCaNhan.Dtduc = dtb;
                        heso = dsHeSoMonHoc.tduc;
                        break;

                    case "gdcd":
                        bangDiemCaNhan.Dgdcd = dtb;
                        heso = dsHeSoMonHoc.gdcd;
                        break;

                    case "qphong":
                        bangDiemCaNhan.Dqphong = dtb;
                        heso = dsHeSoMonHoc.qphong;
                        break;

                    case "cnghe":
                        bangDiemCaNhan.Dcnghe = dtb;
                        heso = dsHeSoMonHoc.cnghe;
                        break;
                    }
                    if (!Convert.ToString(dtb).Equals("_"))
                    {
                        tongDiem += heso * Convert.ToDouble(dtb);
                        tongHeSo += heso;
                        soMonDuDiem++;
                    }
                }
                if (soMonDuDiem == soMonHoc)
                {
                    bangDiemCaNhan.DTB = ObjectUtil.LamTron(tongDiem / tongHeSo, 2);
                }
                else
                {
                    bangDiemCaNhan.DTB = "_";
                }

                bangDiemHocKy.Add(bangDiemCaNhan);
            }

            return(bangDiemHocKy);
        }
        public int BatchUpdate(List <Te> entities, Expression <Func <Te, dynamic> > expression = null)
        {
            if (entities == null || entities.Count < 1)
            {
                return(0);
            }

            var updateColumnNames = new List <string>();

            string body = expression.Body.ToString();

            body = new Regex(@"new <>f__[^\(\)]+\(", RegexOptions.IgnoreCase).Replace(body, "");
            if (body.Substring(0, 1) == "(")
            {
                body = body.Substring(1);
            }
            if (body.Substring(body.Length - 1, 1) == ")")
            {
                body = body.Substring(0, body.Length - 1);
            }
            var bodies = body.Replace(" ", "").Split(",");

            foreach (var s in bodies)
            {
                var temp = s.Split('=');
                if (temp.Length == 2)
                {
                    updateColumnNames.Add(temp[0]);
                }
            }

            string       primaryKey  = "";
            PropertyInfo primaryType = null;

            var columns    = new Dictionary <string, PropertyInfo>();
            var properties = typeof(Te).GetProperties();

            foreach (var p in properties)
            {
                var columnName   = p.Name;
                var filedComment = (FiledComment)p.GetCustomAttribute(typeof(FiledComment));
                if (filedComment != null)
                {
                    if (!string.IsNullOrEmpty(filedComment.ColumnName))
                    {
                        columnName = filedComment.ColumnName;
                    }
                    if ((filedComment.IsIdentity || filedComment.IsPrimaryKey))
                    {
                        if (string.IsNullOrEmpty(primaryKey))
                        {
                            primaryKey  = columnName;
                            primaryType = p;
                        }
                        continue;
                    }
                    if (filedComment.UpdateIgnore)
                    {
                        continue;
                    }
                    if (updateColumnNames.Count > 0 && updateColumnNames.Contains(p.Name))
                    {
                        columns.Add(columnName, p);
                    }
                }
                else
                {
                    if (updateColumnNames.Count > 0 && updateColumnNames.Contains(p.Name))
                    {
                        columns.Add(columnName, p);
                    }
                }
            }

            var sb        = new StringBuilder();
            var tableName = ObjectUtil.GetTableName <Te>(false);

            sb.AppendFormat("update [{0}] set ", tableName);
            foreach (var key in columns.Keys)
            {
                sb.AppendFormat("[{0}].[{1}]=t.[{1}], ", tableName, key, key);
            }
            sb.Append("from(").Replace(", from(", " from(");

            var primaryTypeName = primaryType.Name;

            foreach (Te item in entities)
            {
                sb.AppendFormat("select {0} as [{1}], ", StringUtil.FormatValue(primaryTypeName, primaryType.GetValue(item, null)), primaryKey);
                foreach (var key in columns.Keys)
                {
                    var p       = columns[key];
                    var @object = columns[key].GetValue(item, null);
                    if (@object != null && @object is IList)
                    {
                        continue;
                    }
                    string value = StringUtil.FormatValue(p.RealTypeName(), @object);
                    sb.AppendFormat("{0} as [{1}], ", value, key);
                }
                sb.Append("union all ");
            }
            sb.AppendFormat(")t where [{0}].[{1}]=t.[{1}]", tableName, primaryKey);
            sb.Replace(", union all ", " union all ").Replace("union all )t", ")t");

            return(this.Execute(sb.ToString()));
        }
Example #3
0
 private void OnDestroy()
 {
     ObjectUtil.UnregisterObserver(this);
 }
Example #4
0
 public override int GetHashCode()
 {
     return(ObjectUtil.GetHashCode(owner, nameToRestore));
 }
Example #5
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            object obj = ObjectUtil.GetObject(stateItem.State);

            if (obj == null)
            {
                return;
            }

            switch (stateItem.ItemName)
            {
            case "ReadFinished":
                try
                {
                    object o          = ObjectUtil.GetObject(stateItem.State);
                    string TaskFinish = o.ToString();
                    if (TaskFinish.Equals("True") || TaskFinish.Equals("1"))
                    {
                        string BarCode = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "BarCode")));

                        if (BarCode.Length <= 0 || BarCode == "?")
                        {
                            return;
                        }
                        bool blnInnver     = false;
                        bool blnHasOutTask = false;
                        int  Count         = bll.GetRowCount("WCS_TASK", string.Format("TaskType='11' and State in (0,3) and PalletCode!='{0}'", BarCode));
                        if (Count > 0)
                        {
                            WriteToService(stateItem.Name, "WriteFinished", 2);
                            Logger.Error("还有其他入库任务未完成,不能入库!");
                            return;
                        }
                        Count = bll.GetRowCount("WCS_TASK", string.Format("TaskType='11' and State in (0,3) and PalletCode='{0}'", BarCode));
                        if (Count == 0)
                        {
                            Count = bll.GetRowCount("WCS_TASK", "TaskType='12' and State=0");
                            if (Count > 0)
                            {
                                blnHasOutTask = true;
                            }
                            else
                            {
                                if (bll.GetRowCount("WCS_TASK", string.Format("TaskType='14' and State<7 and PalletCode='{0}'", BarCode)) > 0)
                                {
                                    blnInnver = true;
                                }
                            }
                        }
                        if (blnHasOutTask)
                        {
                            WriteToService(stateItem.Name, "WriteFinished", 2);
                            Logger.Error("堆垛机正在执行出库任务,不能入库!");
                            return;
                        }


                        //判断货位表中是否含有该条码的货位.
                        int i = bll.GetRowCount("CMD_CELL", string.Format("CellName='{0}' and IsTurnover=0", BarCode));
                        if (i == 0 && !blnInnver)
                        {
                            WriteToService(stateItem.Name, "WriteFinished", 4);
                            Logger.Error("条码不正确,不存在货位名称为 " + BarCode + " 的货位!");
                            return;
                        }
                        if (i > 0)
                        {
                            //判断该货位是否含有货,托盘条码是否重复
                            int k = bll.GetRowCount("CMD_CELL", string.Format("CellName='{0}' and PalletCode='{1}' and InDate is not Null ", BarCode, BarCode));
                            if (k == 1 && !blnInnver)
                            {
                                WriteToService(stateItem.Name, "WriteFinished", 3);
                                Logger.Error("条码重复,货位名称为 " + BarCode + " 的货位已经入库!");
                                return;
                            }
                        }
                        bll.ExecNonQuery("WCS.SpCreateInTaskByPallet", new DataParameter[] { new DataParameter("@PalletCode", BarCode) });
                        string strValue = "";
                        //入库时输入冲程数
                        DataTable dtTask = bll.FillDataTable("WCS.SelectTask", new DataParameter[] { new DataParameter("{0}", string.Format("WCS_Task.TaskType='11' and WCS_Task.State in (0,3) and WCS_Task.PalletCode='{0}'", BarCode)) });
                        if (dtTask.Rows.Count > 0)
                        {
                            string[] str = new string[3];
                            str[0] = "1";
                            while ((strValue = FormDialog.ShowDialog(str, dtTask)) != "")
                            {
                                break;
                            }
                        }

                        WriteToService(stateItem.Name, "WriteFinished", 1);
                        Logger.Info("托盘条码为 " + BarCode + " 开始入库!");
                    }
                }
                catch (Exception ex1)
                {
                    Logger.Info("CarProcess中ReadFinished出错:" + ex1.Message);
                }
                break;

            case "AlarmCode":
                object o1 = ObjectUtil.GetObject(stateItem.State);
                if (o1.ToString() != "0")
                {
                    Logger.Error(dicCarErr[int.Parse(o1.ToString())]);
                }
                break;

            default:
                break;
            }
        }
Example #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="craneNo"></param>
        private void CraneIn(int craneNo)
        {
            // 判断堆垛机的状态 自动  空闲
            try
            {
                //判断堆垛机
                if (!Check_Crane_Status_IsOk(craneNo))
                {
                    return;
                }

                //切换入库优先
                dCrnStatus[craneNo].io_flag = 0;
            }
            catch (Exception e)
            {
                //Logger.Debug("Crane out 状态检查错误:" + e.Message.ToString());
                return;
            }

            string serviceName = "CranePLC" + craneNo;

            object[] obj       = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(serviceName, "CraneTaskNo"));
            string   plcTaskNo = Util.ConvertStringChar.BytesToString(obj);

            string CraneNo = "0" + craneNo.ToString();

            //获取任务,排序优先等级、任务时间
            DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", string.Format("((WCS_Task.TaskType='11' and WCS_Task.State='1') or (WCS_Task.TaskType='14' and WCS_Task.State='5')) and WCS_Task.CraneNo='{0}' and WCS_TASK.AreaCode='{1}' and WCS_TASK.CellCode!=''", CraneNo, AreaCode)) };
            DataTable       dt        = bll.FillDataTable("WCS.SelectTask", parameter);

            //出库
            if (dt.Rows.Count > 0)
            {
                DataRow dr = dt.Rows[0];

                string TaskNo = dr["TaskNo"].ToString();

                string BillID      = dr["BillID"].ToString();
                byte   taskType    = byte.Parse(dt.Rows[0]["TaskType"].ToString().Substring(1, 1));
                string fromStation = dt.Rows[0]["FromStation"].ToString();
                string toStation   = dt.Rows[0]["ToStation"].ToString();

                int[] cellAddr = new int[9];
                cellAddr[0] = 0;
                cellAddr[1] = 0;
                cellAddr[2] = 0;

                cellAddr[3] = byte.Parse(fromStation.Substring(3, 3));
                cellAddr[4] = byte.Parse(fromStation.Substring(6, 3));
                cellAddr[5] = byte.Parse(fromStation.Substring(0, 3));
                cellAddr[6] = byte.Parse(toStation.Substring(3, 3));
                cellAddr[7] = byte.Parse(toStation.Substring(6, 3));
                cellAddr[8] = byte.Parse(toStation.Substring(0, 3));

                sbyte[] taskNo = new sbyte[10];
                Util.ConvertStringChar.stringToBytes(dr["TaskNo"].ToString(), 10).CopyTo(taskNo, 0);

                WriteToService(serviceName, "TaskAddress", cellAddr);
                WriteToService(serviceName, "TaskNo", taskNo);
                if (WriteToService(serviceName, "WriteFinished", 1))
                {
                    string State = "3";
                    if (taskType == 4)
                    {
                        State = "6";
                    }
                    //更新任务状态为执行中
                    bll.ExecNonQuery("WCS.UpdateTaskTimeByTaskNo", new DataParameter[] { new DataParameter("@State", State), new DataParameter("@TaskNo", TaskNo) });
                    bll.ExecNonQuery("WCS.UpdateBillStateByBillID", new DataParameter[] { new DataParameter("@State", 3), new DataParameter("@BillID", BillID) });
                }
                Logger.Info("任务:" + dr["TaskNo"].ToString() + "已下发给" + craneNo + "堆垛机;起始地址:" + fromStation + ",目标地址:" + toStation);
            }
        }
Example #7
0
 void OnDestroy()
 {
     ObjectUtil.Destroy(_mesh);
     _mesh = null;
 }
Example #8
0
        private void UpdateGrid(String qualifier)
        {
            Repository repository        = Global.GetRepository();
            Feed <PersistentObject> feed = repository.ExecuteDQL <PersistentObject>("select r_object_id,object_name,subject,title,i_folder_id from " + qualifier,
                                                                                    new FeedGetOptions()
            {
                Inline = true, Links = true
            });
            List <PersistentObject>         items = feed == null ? new List <PersistentObject>() : ObjectUtil.getFeedAsList <PersistentObject>(feed);
            List <SimpleDocumentProperties> lst   = new List <SimpleDocumentProperties>();

            foreach (PersistentObject item in items)
            {
                SimpleDocumentProperties sdp = new SimpleDocumentProperties();
                sdp.Id      = item.GetPropertyString("r_object_id");
                sdp.Name    = item.GetPropertyString("object_name");
                sdp.Subject = item.GetPropertyString("subject");
                sdp.Title   = item.GetPropertyString("title");
                String folderId   = item.GetRepeatingString("i_folder_id", 0);
                Folder folder     = repository.GetSysObjectById <Folder>(folderId);
                String folderPath = folder.GetRepeatingString("r_folder_path", 0);
                sdp.FolderPath = folderPath;
                lst.Add(sdp);
            }
            gridView.DataSource = lst;
            gridView.DataBind();
        }
Example #9
0
 public void WhenNullThenShouldThrowException()
 {
     Assert.ThrowsException <ArgumentNullException>(() => ObjectUtil.DeepClone <Foo>(null));
 }
Example #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="craneNo"></param>
        private void CraneIn(int craneNo)
        {
            try
            {
                if (!CheckCraneStatus(craneNo, false))
                {
                    return;
                }
                dicCranStatus[craneNo] = 1;
            }
            catch (Exception e)
            {
                dicCranStatus[craneNo] = 1;
                Logger.Error("CraneProcess中CraneIn状态检查错误:" + e.Message.ToString());
                return;
            }
            try
            {
                string Server  = ServerName + craneNo.ToString();
                int    CarItem = 102 + (craneNo - 1) * 4;
                string TaskNos = ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService("CarPLC", CarItem.ToString() + "_TaskNo"))).PadLeft(27, ' ');
                if (TaskNos != "")
                {
                    string    TaskNo = TaskNos.Substring(0, 10).Trim();
                    DataTable dtTask = bll.FillDataTable("WCS.SelectWCSTask", new DataParameter[] { new DataParameter("{0}", string.Format("TASKID='{0}' AND TASKSTATUS='2' AND ASRSID='{1}'", TaskNo, craneNo)) });

                    if (dtTask.Rows.Count > 0)
                    {
                        string  PalletCode = dtTask.Rows[0]["PALLETID"].ToString();
                        sbyte[] staskNo    = new sbyte[20];
                        Util.ConvertStringChar.stringToBytes(TaskNo, 12).CopyTo(staskNo, 0);
                        Util.ConvertStringChar.stringToBytes(PalletCode, 8).CopyTo(staskNo, 12);
                        string strDLocation = dtTask.Rows[0]["DLOCATION"].ToString();
                        int[]  Location     = new int[6];
                        Location[0] = 2 * craneNo - 1;
                        Location[1] = 0;
                        Location[2] = 2;
                        Location[3] = int.Parse(strDLocation.Split('-')[0]);
                        Location[4] = int.Parse(strDLocation.Split('-')[1]);
                        int ToRow = int.Parse(strDLocation.Split('-')[2]);
                        if (ToRow > 1)
                        {
                            ToRow += 1;
                        }
                        Location[5] = ToRow;
                        WriteToService(Server, "Address", Location);
                        WriteToService(Server, "WriteTask", staskNo);
                        if (WriteToService(Server, "WriteFinish", true))
                        {
                            //更新WCSTask状态为3
                            bll.ExecNonQuery("WCS.UpdateWCSTaskState", new DataParameter[] { new DataParameter("{0}", 3), new DataParameter("{1}", TaskNo) });
                            Logger.Info("入库任务:" + TaskNo + " 托盘编号:" + PalletCode + " 位:" + strDLocation + " 已下发给第" + craneNo + "堆垛机");
                        }
                        else
                        {
                            Logger.Error("CraneProcess入库任务:" + TaskNo + " 托盘编号:" + PalletCode + " 无法写入堆垛机" + craneNo);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("CraneProcess中CraneIn异常:" + ex.Message);
                return;
            }
        }
Example #11
0
        /// <summary>
        /// 堆垛机任务完成处理
        /// </summary>
        private void TaskFinishProcess(StateItem Item)
        {
            object obj = ObjectUtil.GetObject(Item.State);

            if (obj == null)
            {
                return;
            }
            string TaskFinish = obj.ToString();

            if (TaskFinish.Equals("False") || TaskFinish.Equals("0"))
            {
                return;
            }

            int CraneNo = int.Parse(Item.Name.Replace("CranePLC", ""));

            try
            {
                string TaskNo = ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(Item.Name, "ReadTaskNo")));

                if ((TaskFinish.Equals("True") || TaskFinish.Equals("1")) && TaskNo != "")
                {
                    DataTable dtTask = bll.FillDataTable("WCS.SelectWCSTask", new DataParameter[] { new DataParameter("{0}", string.Format("TASKID='{0}' and ASRSID='{1}'", TaskNo, CraneNo)) });
                    if (dtTask.Rows.Count > 0)
                    {
                        DataRow dr         = dtTask.Rows[0];
                        string  TaskType   = dtTask.Rows[0]["TASKTYPE"].ToString();
                        string  PalletCode = dtTask.Rows[0]["PALLETID"].ToString();
                        if (TaskType == "IB")//入库
                        {
                            //更新入库完成
                            bll.ExecNonQueryTran("WCS.SpTaskFinished", new DataParameter[] { new DataParameter("VTaskNo", TaskNo) });
                            sbyte[] taskNo = new sbyte[20];
                            ConvertStringChar.stringToBytes("", 20).CopyTo(taskNo, 0);
                            WriteToService(Item.Name, "GetRequest", false);
                            WriteToService(Item.Name, "PutRequest", false);
                            WriteToService(Item.Name, "ClearTaskNo", taskNo);
                            WriteToService(Item.Name, "TaskFinish", false);
                            Logger.Info("第" + CraneNo + "堆垛机入库任务:" + TaskNo + "托盘编号:" + PalletCode + "任务完成!");
                        }
                        else if (TaskType == "OB")//出库
                        {
                            //更新任务状态
                            bll.ExecNonQuery("WCS.UpdateWCSTaskState", new DataParameter[] { new DataParameter("{0}", 2), new DataParameter("{1}", TaskNo) });

                            //更新堆垛机PLC
                            sbyte[] taskNo = new sbyte[20];
                            ConvertStringChar.stringToBytes("", 20).CopyTo(taskNo, 0);

                            WriteToService(Item.Name, "GetRequest", false);
                            WriteToService(Item.Name, "PutRequest", false);
                            WriteToService(Item.Name, "ClearTaskNo", taskNo);
                            WriteToService(Item.Name, "TaskFinish", false);
                            Logger.Info("第" + CraneNo + "堆垛机出库任务:" + TaskNo + "托盘编号:" + PalletCode + "堆垛机任务完成!");
                            //下载任务到输送线。
                            int CarItem = 104 + (CraneNo - 1) * 4;

                            sbyte[]  staskNo = new sbyte[26];
                            string[] LedMsgs = dtTask.Rows[0]["LEDNO"].ToString().Split(',');
                            ConvertStringChar.stringToBytes(TaskNo, 10).CopyTo(staskNo, 0);
                            ConvertStringChar.stringToBytes(LedMsgs[0], 8).CopyTo(staskNo, 10);
                            ConvertStringChar.stringToBytes(LedMsgs[1], 8).CopyTo(staskNo, 18);
                            WriteToService("CarPLC", CarItem + "_WriteTaskNo", staskNo);

                            if (WriteToService("CarPLC", CarItem + "_WriteFinished", 1))
                            {
                                bll.ExecNonQuery("WCS.UpdateWCSTaskState", new DataParameter[] { new DataParameter("{0}", 3), new DataParameter("{1}", TaskNo) });
                                Logger.Info("出库任务:" + TaskNo + "托盘编号:" + PalletCode + "任务下达" + CarItem + "输送线!");
                            }
                        }
                        else
                        {
                            //更新入库完成
                            bll.ExecNonQueryTran("WCS.SpTaskFinished", new DataParameter[] { new DataParameter("VTaskNo", TaskNo) });
                            sbyte[] taskNo = new sbyte[20];
                            WriteToService(Item.Name, "GetRequest", false);
                            WriteToService(Item.Name, "PutRequest", false);
                            ConvertStringChar.stringToBytes("", 20).CopyTo(taskNo, 0);
                            WriteToService(Item.Name, "ClearTaskNo", taskNo);
                            WriteToService(Item.Name, "TaskFinish", false);
                            Logger.Info("第" + CraneNo + "堆垛机任务:" + TaskNo + "托盘编号:" + PalletCode + "任务完成!");
                        }
                    }
                    else
                    {
                        WriteToService(Item.Name, "TaskFinish", false);
                        Logger.Error("CraneProcess第" + CraneNo + "堆垛机任务号:" + TaskNo + "在任务表中没有找到,请查询任务!");
                    }
                }
                else
                {
                    Logger.Error("CraneProcess第" + CraneNo + "堆垛机任务号为空!");
                }
            }
            catch (Exception ex)
            {
                Logger.Error("CraneProcess 第" + CraneNo + "堆垛机Finish:" + ex.Message);
            }
        }
Example #12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="craneNo"></param>
        private void CraneOut(int craneNo)
        {
            try
            {
                if (!CheckCraneStatus(craneNo, true))
                {
                    return;
                }
                dicCranStatus[craneNo] = 2;

                int    CarNo      = 104 + (craneNo - 1) * 4;
                string ReadTaskNo = ObjectUtil.GetObject(WriteToService("CarPLC", CarNo.ToString() + "_HasProduct")).ToString();
                if (ReadTaskNo == "1" || ReadTaskNo == "True")
                {
                    return;
                }
            }
            catch (Exception e)
            {
                dicCranStatus[craneNo] = 2;
                Logger.Error("CraneProcess中Craneout 状态检查错误:" + e.Message.ToString());
                return;
            }
            try
            {
                string    Server = ServerName + craneNo.ToString();
                DataTable dtTask = bll.FillDataTable("WCS.SelectWmsTask", new DataParameter[] { new DataParameter("{0}", string.Format("TASKSTATUS='0' AND TASKTYPE in ('OB','MB') AND ASRSID='{0}'", craneNo)) });
                if (dtTask.Rows.Count > 0)
                {
                    string TaskNo     = dtTask.Rows[0]["TASKID"].ToString();
                    string PalletCode = dtTask.Rows[0]["PALLETID"].ToString();

                    sbyte[] staskNo = new sbyte[20];
                    Util.ConvertStringChar.stringToBytes(TaskNo, 12).CopyTo(staskNo, 0);
                    Util.ConvertStringChar.stringToBytes(PalletCode, 8).CopyTo(staskNo, 12);
                    string strSLocation = dtTask.Rows[0]["SLOCATION"].ToString();
                    string strDLocation = dtTask.Rows[0]["DLOCATION"].ToString();
                    int[]  Location     = new int[6];
                    Location[0] = int.Parse(strSLocation.Split('-')[0]);
                    Location[1] = int.Parse(strSLocation.Split('-')[1]);
                    int fromRow = int.Parse(strSLocation.Split('-')[2]);
                    if (fromRow > 1)
                    {
                        fromRow += 1;
                    }
                    Location[2] = fromRow;
                    int D1 = 0;
                    try
                    {
                        int.TryParse(strDLocation.Split('-')[0], out D1);
                    }
                    catch (Exception etd)
                    {
                    }
                    if (D1 == 0)
                    {
                        Location[3] = 2 * craneNo;
                        Location[4] = 0;
                        Location[5] = 2;
                    }
                    else
                    {
                        Location[3] = int.Parse(strDLocation.Split('-')[0]);
                        Location[4] = int.Parse(strDLocation.Split('-')[1]);
                        int DRow = int.Parse(strDLocation.Split('-')[2]);
                        if (DRow > 1)
                        {
                            DRow += 1;
                        }
                        Location[5] = DRow;
                    }
                    WriteToService(Server, "Address", Location);
                    WriteToService(Server, "WriteTask", staskNo);
                    if (WriteToService(Server, "WriteFinish", true))
                    {
                        //接收WMS_Task
                        bll.ExecNonQueryTran("WCS.SPReciveWmsTask", new DataParameter[] { new DataParameter("VTASKNO", TaskNo) });
                        Logger.Info("出库任务:" + TaskNo + " 托盘编号:" + PalletCode + " 位:" + strSLocation + " 已下发给第" + craneNo + "堆垛机");
                    }
                    else
                    {
                        Logger.Error("CraneProcess出库任务:" + TaskNo + " 托盘编号:" + PalletCode + "无法写入堆垛机" + craneNo);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("CraneProcess中CraneOut异常" + ex.Message.ToString());
                return;
            }
        }
Example #13
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            object obj = ObjectUtil.GetObject(stateItem.State);

            if (obj == null)
            {
                return;
            }

            BLL.BLLBase bll     = new BLL.BLLBase();
            string      Request = obj.ToString();

            if (Request.Equals("True") || Request.Equals("0"))
            {
                string AreaCode = BLL.Server.GetAreaCode();
                string AisleNo  = "";
                try
                {
                    string taskNo = "";
                    switch (stateItem.ItemName)
                    {
                    case "OutFinish1":
                        taskNo = ObjectUtil.GetObject(WriteToService(stateItem.Name, "ReadTaskNo1")).ToString();
                        break;

                    case "OutFinish2":
                        taskNo = ObjectUtil.GetObject(WriteToService(stateItem.Name, "ReadTaskNo2")).ToString();
                        break;
                    }

                    //DataTable dtT = bll.FillDataTable("WCS.SelectTask", new DataParameter("{0}", string.Format("WCS_Task.AreaCode='{0}' and S1.AisleNo='{1}' and WCS_TASK.State=10  and (WCS_TASK.TaskType='12' or WCS_TASK.taskType='14')", AreaCode, AisleNo)));
                    //if (dtT.Rows.Count==0)
                    //{
                    //    return;
                    //}
                    //string taskNo = dtT.Rows[0]["taskNo"].ToString();

                    if (taskNo.Trim().Length > 0)
                    {
                        DataTable dt = bll.FillDataTable("WCS.SelectReadTaskByTaskNo", new DataParameter[] { new DataParameter("@TaskNo", taskNo) });
                        if (dt.Rows.Count > 0)
                        {
                            string TaskType  = dt.Rows[0]["TaskType"].ToString();
                            string strState  = dt.Rows[0]["State"].ToString();
                            string StationNo = dt.Rows[0]["StationNo"].ToString();
                            if (TaskType == "11")
                            {
                                DataParameter[] param;
                                param = new DataParameter[] { new DataParameter("@StationNo", StationNo), new DataParameter("@TaskNo", taskNo) };
                                bll.ExecNonQuery("WCS.UpdateTaskInStockRequest", param);
                                Logger.Info("任务号:" + taskNo + " 托盘:" + " 开始入库,到达入库口:" + StationNo);
                            }

                            if (TaskType == "12" || TaskType == "15" || TaskType == "14") //出库,托盘出库,盘点
                            {
                                DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", taskNo) };
                                DataTable       dtXml = bll.FillDataTable("WCS.Sp_TaskProcess", param);
                                Logger.Info("出库任务完成,任务号:" + taskNo);


                                string Flag = "";

                                if (TaskType == "12")
                                {
                                    Flag = "BatchOutStock";
                                }

                                if (dtXml.Rows.Count > 0)
                                {
                                    string BillNo = dtXml.Rows[0][0].ToString();
                                    if (BillNo.Trim().Length > 0)
                                    {
                                        string xml = Util.ConvertObj.ConvertDataTableToXmlOperation(dtXml, Flag);
                                        WriteToService("ERP", "ACK", xml);
                                        Logger.Info("单号" + dtXml.Rows[0][0].ToString() + "已完成,开始上报ERP系统");
                                    }
                                }
                                //盘点入库
                                if (TaskType == "14")
                                {
                                    int    SlideNum = 1;
                                    string CellCode = dt.Rows[0]["CellCode"].ToString();
                                    if (CellCode.Length > 0)
                                    {
                                        if (CellCode.Substring(3, 1) == "1" || CellCode.Substring(3, 1) == "2")
                                        {
                                            StationNo = "01";
                                            SlideNum  = 1;
                                        }
                                        else if (CellCode.Substring(3, 1) == "3" || CellCode.Substring(3, 1) == "4")
                                        {
                                            StationNo = "02";
                                            SlideNum  = 2;
                                        }
                                        else if (CellCode.Substring(3, 1) == "5" || CellCode.Substring(3, 1) == "6")
                                        {
                                            StationNo = "03";
                                            SlideNum  = 3;
                                        }
                                        else
                                        {
                                            StationNo = "04";
                                            SlideNum  = 4;
                                        }
                                    }
                                    else
                                    {
                                        Logger.Error("盘点任务货位丢失,请核对");
                                        return;
                                    }
                                    int staskNo = int.Parse(taskNo);

                                    if (StationNo == "01")
                                    {
                                        Context.ProcessDispatcher.WriteToService("TranLine", "TaskNo", staskNo);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "SlideNum", SlideNum);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "NewTask", 1);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "TaskType", 1);
                                    }
                                    else
                                    {
                                        Context.ProcessDispatcher.WriteToService("TranLine", "TaskNo1", staskNo);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "SlideNum1", SlideNum);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "NewTask1", 1);
                                        Context.ProcessDispatcher.WriteToService("TranLine", "TaskType1", 1);
                                    }

                                    bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 2), new DataParameter("@TaskNo", taskNo) });
                                }

                                //string strValue = "";
                                //string[] str = new string[3];
                                //if (TaskType == "12" || TaskType == "14")//显示拣货信息.
                                //{
                                //    str[0] = "1";
                                //    if (TaskType == "14")
                                //        str[0] = "2";

                                //    while ((strValue = FormDialog.ShowDialog(str, dt)) != "")
                                //    {
                                //        break;
                                //    }
                                //}
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("到达出库口,错误讯息:" + ex.Message);
                }
            }
        }
Example #14
0
        private string GetLedMessage(string LedNo, string ItemNo, StateItem item)
        {
            string strMsg = "";

            try
            {
                string Stock = "外盘:";
                if (int.Parse(ItemNo) % 2 == 0)
                {
                    Stock = "内盘:";
                }
                string PalletCode   = "";
                string CellCode     = " 位:";
                string CraneErrorNo = "0";
                if (int.Parse(LedNo) % 2 == 0 && int.Parse(ItemNo) % 2 == 0)
                {
                    int CarNo = int.Parse(LedNo) / 2;
                    CraneErrorNo = ObjectUtil.GetObject(WriteToService("CranePLC" + CarNo, "nAlarmCode")).ToString();
                }
                if (CraneErrorNo != "0")
                {
                    string    ErrMsg = "堆垛机未知错误";
                    DataRow[] drs    = dtCraneError.Select(string.Format("warncode='{0}'", CraneErrorNo));
                    if (drs.Length > 0)
                    {
                        ErrMsg = drs[0]["WARNDESC"].ToString();
                    }

                    strMsg = ErrMsg;
                }
                else
                {
                    object [] obj  = ObjectUtil.GetObjects(WriteToService(StockPLC, ItemNo + "_TaskNo"));
                    byte[]    berr = new byte[1];
                    berr[0] = byte.Parse(obj[26].ToString());
                    string sTaskno = Util.ConvertStringChar.BytesToString(obj).PadLeft(27, ' ');
                    string errorNo = Util.ConvertStringChar.BytesToString(berr);
                    if (errorNo != "0" && errorNo.Length != 0)
                    {
                        PalletCode = sTaskno.Substring(10, 8).Trim();
                        strMsg     = Stock + (PalletCode.Length > 0 ? PalletCode : "") + " " + dicStockWarning[errorNo];
                        if (ItemNo == item.ItemName.Split('_')[0])
                        {
                            Logger.Error("输送线:" + ItemNo + (PalletCode.Length > 0 ? "托盘编号:" + PalletCode : "") + dicStockWarning[errorNo]);
                        }
                    }
                    else
                    {
                        PalletCode = sTaskno.Substring(10, 8).Trim();
                        if (PalletCode.Length > 0)
                        {
                            CellCode = " 位:" + sTaskno.Substring(18, 8).Trim();
                        }
                        strMsg = Stock + PalletCode + CellCode;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("LEDProcess中GetLedMessage异常:" + ex.Message);
            }
            return(strMsg);
        }
Example #15
0
 protected void fromBase(ELongHotelSurroundingAdapter adapter)
 {
     this.hotelFk   = adapter.exHotelId;
     this.name      = adapter.Name;
     this.distances = ObjectUtil.ParseFloat(adapter.Distances, -1);
 }
Example #16
0
        /// <summary>
        /// Lưu hồ sơ học sinh
        /// </summary>
        /// <param name="hocsinh">HocSinhDTO</param>
        /// <param name="MaLop">String: Mã lớp (nếu rỗng thì không phan lớp)</param>
        /// <returns>Bool</returns>
        public bool LuuHoSo_HocSinh(HocSinhDTO hocsinh, string MaLop = null)
        {
            DateTime ngayAD_QD = _quyDinhBUS.LayNgayApDung_QuyDinh();
            int      namCanDuoi = _quyDinhBUS.LayNamTuoi_CanDuoi(), namCanTren = _quyDinhBUS.LayNamTuoi_CanTren();
            DateTime ngayNhapHoc;

            // Sửa hồ sơ học sinh
            if (_hocSinhDAL.KiemTraTonTai_MaHocSinh(hocsinh.MaHocSinh))
            {
                // Nếu hồ sơ có phân lớp và có sửa STT
                if (MaLop != null && hocsinh.STT != _phanLopBUS.LaySTT_HienTai(hocsinh.MaHocSinh, MaLop) &&
                    _phanLopBUS.KiemTra_STT_TonTai(hocsinh.STT, MaLop))    // STT mới này đã tồn tại
                {
                    ExceptionUtil.Throw("Sửa hồ sơ học sinh không hợp lệ!"
                                        + "\nSố thứ tự " + hocsinh.STT + " đã tồn tại trong lớp " + MaLop + "."
                                        + "\nBạn có thể sử dụng chức năng \"Tự động sắp xếp số thứ tự\" theo alpha.");
                    return(false);
                }
                ngayNhapHoc = _hocSinhDAL.Lay_HoSo(hocsinh.MaHocSinh).NgayNhapHoc;
                // Nếu ngày nhập học sau ngày áp dụng quy định
                if (ngayNhapHoc >= ngayAD_QD)
                {
                    // Kiểm tra độ tuổi theo quy định
                    if (hocsinh.NgaySinh.Year < namCanDuoi || hocsinh.NgaySinh.Year > namCanTren)
                    {
                        ExceptionUtil.Throw("Sửa hồ sơ học sinh không hợp lệ!"
                                            + "\nNăm sinh của học sinh phải theo quy định trong khoảng từ năm " +
                                            namCanDuoi + " đến năm " + namCanTren);
                        return(false);
                    }
                }
                return(_hocSinhDAL.Sua_HoSo(hocsinh, MaLop));
            }
            else // Thêm mới hồ sơ học sinh
            {
                ngayNhapHoc = DateTime.Now;
                // Nếu hồ sơ có phân lớp và kiểm tra STT đã tồn tại hay chưa?
                if (MaLop != null && _phanLopBUS.KiemTra_STT_TonTai(hocsinh.STT, MaLop))
                {
                    ExceptionUtil.Throw("Tiếp nhận học sinh không hợp lệ!"
                                        + "\nSố thứ tự " + hocsinh.STT + " đã tồn tại trong lớp."
                                        + "\nChương trình sẽ tự động tạo số thứ tự tiếp theo trong bảng điểm"
                                        + "\nBạn có thể sử dụng chức năng \"Tự động sắp xếp số thứ tự\" theo alpha.");
                    return(false);
                }
                hocsinh.MaHocSinh = ObjectUtil.NextID(_hocSinhDAL.Lay_MaCuoiCung(), "HS", 8);
                // Nếu ngày nhập học sau ngày áp dụng quy định
                if (ngayNhapHoc >= ngayAD_QD)
                {
                    // Kiểm tra độ tuổi theo quy định
                    if (hocsinh.NgaySinh.Year < namCanDuoi || hocsinh.NgaySinh.Year > namCanTren)
                    {
                        ExceptionUtil.Throw("Tiếp nhận học sinh không hợp lệ!"
                                            + "\nNăm sinh của học sinh phải theo quy định trong khoảng từ năm " +
                                            namCanDuoi + " đến năm " + namCanTren);
                        return(false);
                    }
                }
                return(_hocSinhDAL.Them_HoSo(hocsinh, MaLop));
            }
        }
Example #17
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="craneNo"></param>
        private void CraneOut(int craneNo)
        {
            // 判断堆垛机的状态 自动  空闲
            //Logger.Debug("判断堆垛机" + piCrnNo.ToString() + "能否出库");
            try
            {
                //判断堆垛机
                if (!Check_Crane_Status_IsOk(craneNo))
                {
                    //Logger.Info("堆垛机状态不符合出库");
                    return;
                }
                //切换入库优先
                dCrnStatus[craneNo].io_flag = 1;
            }
            catch (Exception e)
            {
                Logger.Debug("Crane out 状态检查错误:" + e.Message.ToString());
                return;
            }

            string serviceName = "CranePLC" + craneNo;


            string CraneNo = "0" + craneNo.ToString();

            //获取任务,排序优先等级、任务时间
            DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", string.Format("WCS_Task.TaskType in ('12','13','14','15') and WCS_Task.State='0' and WCS_Task.CellCode!='' and WCS_Task.CraneNo='{0}' and WCS_TASK.AreaCode='{1}'", CraneNo, AreaCode)) };
            DataTable       dt        = bll.FillDataTable("WCS.SelectOutTask", parameter);

            //出库
            if (dt.Rows.Count > 0)
            {
                DataRow dr       = dt.Rows[0];
                string  TaskNo   = dr["TaskNo"].ToString();
                string  BillID   = dr["BillID"].ToString();
                byte    taskType = byte.Parse(dt.Rows[0]["TaskType"].ToString().Substring(1, 1));

                string fromStation = dt.Rows[0]["FromStation"].ToString();
                string toStation   = dt.Rows[0]["ToStation"].ToString();
                string stationNo   = dt.Rows[0]["StationNo"].ToString();

                if (taskType != 3)
                {
                    string StationLoad = ObjectUtil.GetObject(Context.ProcessDispatcher.WriteToService(serviceName, "StationLoad" + stationNo)).ToString();
                    //判断出库站台无货
                    if (StationLoad.Equals("True") || StationLoad.Equals("1"))
                    {
                        Logger.Info("站台状态不符合堆垛机出库");
                        return;
                    }
                }

                int[] cellAddr = new int[9];
                cellAddr[0] = 0;
                cellAddr[1] = 0;
                cellAddr[2] = 0;

                cellAddr[3] = byte.Parse(fromStation.Substring(3, 3));
                cellAddr[4] = byte.Parse(fromStation.Substring(6, 3));
                cellAddr[5] = byte.Parse(fromStation.Substring(0, 3));
                cellAddr[6] = byte.Parse(toStation.Substring(3, 3));
                cellAddr[7] = byte.Parse(toStation.Substring(6, 3));
                cellAddr[8] = byte.Parse(toStation.Substring(0, 3));

                sbyte[] taskNo = new sbyte[10];
                Util.ConvertStringChar.stringToBytes(dr["TaskNo"].ToString(), 10).CopyTo(taskNo, 0);

                WriteToService(serviceName, "TaskAddress", cellAddr);
                WriteToService(serviceName, "TaskNo", taskNo);
                if (WriteToService(serviceName, "WriteFinished", 1))
                {
                    //更新任务状态为执行中
                    bll.ExecNonQuery("WCS.UpdateTaskTimeByTaskNo", new DataParameter[] { new DataParameter("@State", 3), new DataParameter("@TaskNo", TaskNo) });
                    bll.ExecNonQuery("WCS.UpdateBillStateByBillID", new DataParameter[] { new DataParameter("@State", 3), new DataParameter("@BillID", BillID) });
                }
                Logger.Info("任务:" + dr["TaskNo"].ToString() + "已下发给" + craneNo + "堆垛机;起始地址:" + fromStation + ",目标地址:" + toStation);
            }
        }
Example #18
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            //object obj2 = ObjectUtil.GetObject(stateItem.State);
            //if (obj2 == null)
            //    return;

            switch (stateItem.ItemName)
            {
            case "CraneTaskFinished1":
            case "CraneTaskFinished2":
                try
                {
                    object obj = ObjectUtil.GetObject(stateItem.State);
                    if (obj == null)
                    {
                        return;
                    }
                    string TaskFinish = obj.ToString();
                    if (TaskFinish.Equals("1"))
                    {
                        int    taskIndex = int.Parse(stateItem.ItemName.Substring(stateItem.ItemName.Length - 1, 1));
                        string TaskNo    = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo" + taskIndex)));

                        if (TaskNo.Length == 0)
                        {
                            return;
                        }
                        DataParameter[] param  = new DataParameter[] { new DataParameter("{0}", string.Format("TaskNo='{0}'", TaskNo)), new DataParameter("{1}", "TaskNo"), new DataParameter("{2}", 1) };
                        DataTable       dtTask = bll.FillDataTable("WCS.SelectCraneTask", param);
                        if (dtTask.Rows.Count > 0)
                        {
                            string TaskType = dtTask.Rows[0]["TaskType"].ToString();
                            string CellCode = dtTask.Rows[0]["CellCode"].ToString();

                            string Msg      = "上架";
                            string strState = "5";

                            if (TaskType == "12")
                            {
                                Msg      = "下架";
                                strState = "13";
                            }
                            bll.ExecNonQuery("WCS.UpdateTaskState", new DataParameter[] { new DataParameter("{0}", string.Format("State={0},Crane_FinishDate=getdate()", strState)), new DataParameter("{1}", string.Format("TaskNo='{0}'", TaskNo)) });
                            Logger.Info("载货提升机" + Msg + "任务完成,任务號:" + TaskNo + " 货位:" + CellCode);
                        }
                        else
                        {
                            Logger.Error("载货提升机任务完成,但WCS中找不到任务號:" + TaskNo);
                        }
                        sbyte[] ClearTaskNo = new sbyte[20];
                        Util.ConvertStringChar.stringToBytes("", 20).CopyTo(ClearTaskNo, 0);
                        WriteToService(stateItem.Name, "TaskNo" + taskIndex, ClearTaskNo);
                    }
                }
                catch (Exception ex1)
                {
                    Logger.Info("CraneProcess中CraneTaskFinished出錯:" + ex1.Message);
                }
                break;

            case "Run":
                blRun = (int)stateItem.State == 1;
                if (blRun)
                {
                    tmWorkTimer.Start();
                    Logger.Info("载货提升机联机");
                }
                else
                {
                    tmWorkTimer.Stop();
                    Logger.Info("载货提升机脱机");
                }
                break;

            case "PLCCheck":

                #region PLC CheckTask
                try
                {
                    if (ObjectUtil.GetObject(stateItem.State) == null)
                    {
                        return;
                    }
                    string objCheck = ObjectUtil.GetObject(stateItem.State).ToString();
                    if (objCheck.Equals("True") || objCheck.Equals("1"))
                    {
                        WriteToService(stateItem.Name, "WriteFinished", 0);
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("CraneProcess.StateChanged中PLCCheck出現錯誤,內容:" + ex.Message);
                }
                #endregion
                break;

            case "CraneAlarmCode":
                if (ObjectUtil.GetObject(stateItem.State) == null)
                {
                    return;
                }
                if (ObjectUtil.GetObject(stateItem.State).ToString() == "0")
                {
                    return;
                }
                string    CraneNo        = stateItem.Name.Replace("MiniLoad", "");
                string    strWarningCode = ObjectUtil.GetObject(stateItem.State).ToString();
                DataRow[] drs            = dtDeviceAlarm.Select(string.Format("AlarmCode='{0}'", strWarningCode));
                string    strError       = "";
                if (drs.Length > 0)
                {
                    strError = drs[0]["AlarmDesc"].ToString();
                }
                else
                {
                    strError = "未知错误,错误号:" + strWarningCode;
                }
                if (strWarningCode == "28" || strWarningCode == "29" || strWarningCode == "35" || strWarningCode == "36")
                {
                    string k = "1";
                    if (strWarningCode == "35" || strWarningCode == "36")
                    {
                        k = "2";
                    }

                    string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo" + k)));
                    bll.ExecNonQuery("WCS.UpdateTaskError", new DataParameter[] { new DataParameter("@AlarmCode", strWarningCode), new DataParameter("@AlarmDesc", strError), new DataParameter("@TaskNo", TaskNo) });
                }
                Logger.Error("载货提升机" + strError);
                break;

            default:
                break;
            }
        }
Example #19
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            //object obj = ObjectUtil.GetObject(stateItem.State);
            //if (obj == null)
            //    return;

            switch (stateItem.ItemName)
            {
            case "CraneTaskFinished":
                try
                {
                    object obj        = ObjectUtil.GetObject(stateItem.State);
                    string TaskFinish = obj.ToString();
                    if (TaskFinish.Equals("True") || TaskFinish.Equals("1"))
                    {
                        string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo")));

                        if (TaskNo.Length <= 0)
                        {
                            return;
                        }
                        sbyte[]  taskNo = new sbyte[10];
                        object[] objRow = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService("CranePLC1", "CraneAlarmCode"));
                        int      Column = int.Parse(objRow[2].ToString());
                        int      Height = int.Parse(objRow[3].ToString());
                        int      Row    = int.Parse(objRow[4].ToString());

                        //更新任务状态
                        DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) };
                        //bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param);
                        DataTable dtXml = bll.FillDataTable("WCS.Sp_TaskProcess", param);

                        //判断任务号是什么类型,如果是盘点另外处理
                        param = new DataParameter[] { new DataParameter("{0}", string.Format("WCS_Task.TaskNo='{0}'", TaskNo)) };
                        DataTable dt = bll.FillDataTable("WCS.SelectTask", param);

                        string Flag     = "BatchInStock";
                        string TaskType = "";
                        string CellCode = "";
                        string strState = "";
                        if (dt.Rows.Count > 0)
                        {
                            TaskType = dt.Rows[0]["TaskType"].ToString();
                            CellCode = dt.Rows[0]["CellCode"].ToString();
                            strState = dt.Rows[0]["State"].ToString();
                            if (TaskType == "12")
                            {
                                Flag = "BatchOutStock";
                            }
                            else if (TaskType == "14")
                            {
                                Flag = "BatchCheckStock";
                            }
                        }
                        if (dtXml.Rows.Count > 0)
                        {
                            string BillNo = dtXml.Rows[0][0].ToString();
                            if (BillNo.Trim().Length > 0)
                            {
                                string xml = Util.ConvertObj.ConvertDataTableToXmlOperation(dtXml, Flag);
                                WriteToService("ERP", "ACK", xml);
                                Logger.Info("单号" + dtXml.Rows[0][0].ToString() + "已完成,开始上报ERP系统");
                            }
                        }

                        string[] str = new string[3];
                        str[0] = "6";
                        string strValue = "";
                        if (TaskType == "14" && strState == "4")
                        {
                            while ((strValue = FormDialog.ShowDialog(str, dt)) != "")
                            {
                                if (strValue != "1")
                                {
                                    //更新货位信息
                                    bll.ExecNonQuery("WCS.UpdateErrCell", new DataParameter[] { new DataParameter("@CellCode", CellCode) });
                                }
                                bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 5), new DataParameter("@TaskNo", TaskNo) });

                                //线程继续。
                                break;
                            }
                        }
                        //清除堆垛机任务号

                        if (Column == 1 && Height == 1)
                        {
                            int[] cellAddr = new int[9];
                            cellAddr[0] = 0;
                            cellAddr[1] = 0;
                            cellAddr[2] = 0;

                            cellAddr[3] = 1;
                            cellAddr[4] = 1;
                            cellAddr[5] = Row * 2 - 1;
                            cellAddr[6] = 1;
                            cellAddr[7] = 2;
                            cellAddr[8] = Row * 2 - 1;
                            Util.ConvertStringChar.stringToBytes("", 10).CopyTo(taskNo, 0);
                            Context.ProcessDispatcher.WriteToService("CranePLC1", "TaskAddress", cellAddr);
                            Context.ProcessDispatcher.WriteToService("CranePLC1", "TaskNo", taskNo);
                            Context.ProcessDispatcher.WriteToService("CranePLC1", "WriteFinished", 2);
                            Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo);
                            return;
                        }
                        else
                        {
                            Util.ConvertStringChar.stringToBytes("", 10).CopyTo(taskNo, 0);
                            WriteToService(stateItem.Name, "TaskNo", taskNo);
                            Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo);
                        }
                    }
                }
                catch (Exception ex1)
                {
                    Logger.Info("CraneProcess中CraneTaskFinished出错:" + ex1.Message);
                }
                break;

            case "Run":
                blRun = (int)stateItem.State == 1;
                if (blRun)
                {
                    tmWorkTimer.Start();
                    Logger.Info("堆垛机联机");
                }
                else
                {
                    tmWorkTimer.Stop();
                    Logger.Info("堆垛机脱机");
                }
                break;

            default:
                break;
            }


            return;
        }
Example #20
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            try
            {
                object obj = ObjectUtil.GetObject(stateItem.State);
                if (obj == null)
                {
                    return;
                }
                if (obj.ToString() == "48" || obj.ToString() == "0")
                {
                    return;
                }


                string carNo = stateItem.ItemName.Substring(0, 2);

                Logger.Info("小车" + carNo + "接到入库确认请求");
                string CraneNo = "01";
                if (carNo == "02")
                {
                    CraneNo = "02";
                }

                BLL.BLLBase bll = new BLL.BLLBase();
                //判断堆垛机状态是否可用

                //查找有无请求状态(state='1')的任务,如没有则认为是空托盘回库
                string          filter    = string.Format("WCS_Task.State='1' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo);
                DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", filter) };
                DataTable       dt        = bll.FillDataTable("WCS.SelectTask", parameter);

                int rows = 0;
                if (dt.Rows.Count > 0)
                {
                    rows = bll.ExecNonQuery("WCS.UpdateTaskState", new DataParameter[] { new DataParameter("@State", 2), new DataParameter("@CarNo", carNo) });
                    WriteToService("CarPLC", carNo + "_CarReply", 49);
                    Logger.Info("小车:" + carNo + "收到入库请求,更新任务状态,影响行数" + rows);
                }
                else
                {
                    //判断有无正在执行的任务,如有不做处理,如没有则产生一笔空盘回库任务
                    filter    = string.Format("WCS_Task.State='3' and WCS_TASK.TaskType='11' and WCS_TASK.CarNo='{0}'", carNo);
                    parameter = new DataParameter[] { new DataParameter("{0}", filter) };
                    DataTable dting = bll.FillDataTable("WCS.SelectTask", parameter);

                    if (dting.Rows.Count > 0)
                    {
                        WriteToService("CarPLC", carNo + "_CarReply", 50);
                        return;
                    }
                    //有无盘点回库任务
                    filter    = string.Format("WCS_Task.State='4' and WCS_TASK.TaskType='14' and WCS_TASK.CarNo='{0}'", carNo);
                    parameter = new DataParameter[] { new DataParameter("{0}", filter) };
                    dting     = bll.FillDataTable("WCS.SelectTask", parameter);
                    if (dting.Rows.Count > 0)
                    {
                        //盘点任务改变状态为5,堆垛机调度回库
                        string TaskNo = dting.Rows[0]["TaskNo"].ToString();
                        bll.ExecNonQuery("WCS.UpdateTaskStateByTaskNo", new DataParameter[] { new DataParameter("@State", 5), new DataParameter("@TaskNo", TaskNo) });

                        WriteToService("CarPLC", carNo + "_CarReply", 49);
                        return;
                    }

                    //查找锁定货位,且产品是托盘的货位,如有判断为实托盘出库后,托盘回库
                    string ProductCode = "00" + CraneNo;
                    parameter = new DataParameter[]
                    {
                        new DataParameter("{0}", string.Format("CMD_Cell.ProductCode='{0}' and CMD_Cell.IsActive='1' and CMD_Cell.IsLock='1' and CMD_Cell.ErrorFlag!='1'", ProductCode)),
                        new DataParameter("{1}", carNo)
                    };
                    dt = bll.FillDataTable("CMD.SelectCellByCar", parameter);
                    if (dt.Rows.Count > 0)
                    {
                        //产生一笔空托盘入库任务
                        //锁定货位
                        parameter = new DataParameter[]
                        {
                            new DataParameter("@CarNo", carNo),
                            new DataParameter("@CraneNo", CraneNo),
                            new DataParameter("@CellCode", dt.Rows[0]["CellCode"].ToString())
                        };
                        bll.ExecNonQueryTran("WCS.Sp_RequestPalletInTask", parameter);
                        WriteToService("CarPLC", carNo + "_CarReply", 49);
                        Logger.Info("小车:" + carNo + "接到入库请求,产生一笔托盘回库任务");
                    }
                }
                WriteToService("CarPLC", carNo + "_CarReply", 50);
            }
            catch (Exception e)
            {
                Logger.Error("Dispatching.Process.CarProcess:" + e.Message);
            }
        }
Example #21
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            try
            {
                lock (this)
                {
                    switch (stateItem.ItemName)
                    {
                    case "CarAlarm01":
                    case "CarAlarm02":

                        object obj = ObjectUtil.GetObject(stateItem.State);
                        if (obj == null)
                        {
                            return;
                        }

                        string carNo     = stateItem.ItemName.Substring(8, 2);
                        string DeviceNo  = stateItem.Name.Substring(5, 2) + carNo;
                        string AlarmCode = obj.ToString();
                        string AlarmDesc = "";
                        //更新故障表
                        DataTable dtDevice      = bll.FillDataTable("CMD.SelectDevice", new DataParameter("{0}", string.Format("DeviceNo2='{0}' and WarehouseCode='{1}'", DeviceNo, Program.WarehouseCode)));
                        string    WarehouseCode = dtDevice.Rows[0]["WarehouseCode"].ToString();
                        string    AreaCode      = dtDevice.Rows[0]["AreaCode"].ToString();
                        if (AlarmCode != "0")
                        {
                            bll.ExecNonQuery("WCS.InsertDeviceAlarmRecord", new DataParameter[] { new DataParameter("@WareHouseCode", WarehouseCode), new
                                                                                                  DataParameter("@AreaCode", AreaCode), new DataParameter("@DeviceNo", DeviceNo), new DataParameter("@AlarmCode", AlarmCode) });

                            DataRow[] drs = dtDeviceAlarm.Select(string.Format("AlarmCode={0}", AlarmCode));
                            if (drs.Length > 0)
                            {
                                AlarmDesc = drs[0]["AlarmDesc"].ToString();
                            }
                            else
                            {
                                AlarmDesc = "穿梭车未知错误!";
                            }
                            //更新任务报警
                            string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(WriteToService(stateItem.Name, "CarTask" + carNo)));
                            if (TaskNo.Length > 0)
                            {
                                DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo), new DataParameter("@AlarmCode", obj), new DataParameter("@AlarmDesc", AlarmDesc) };
                                bll.ExecNonQueryTran("WCS.UpdateTaskDeviceAlarm", param);

                                report.Send2MJWcs(base.Context, 2, TaskNo);
                                //Send2MJWcs(2, TaskNo);
                            }

                            Logger.Error("设备编号" + DeviceNo + "发生报警,代号:" + obj.ToString() + ";描述:" + AlarmDesc);
                        }
                        else
                        {
                            bll.ExecNonQuery("WCS.UpdateDeviceAlarmRecord", new DataParameter[] { new DataParameter("@AreaCode", AreaCode), new DataParameter("@WarehouseCode", WarehouseCode), new
                                                                                                  DataParameter("@DeviceNo", DeviceNo) });
                        }
                        DataParameter[] paramb = new DataParameter[] { new DataParameter("@AlarmCode", obj), new DataParameter("@DeviceNo", DeviceNo) };
                        bll.ExecNonQueryTran("WCS.UpdateDeviceAlarm", paramb);
                        //上报设备状态
                        report.SendDeviceStatus2(base.Context, stateItem.Name, carNo, AlarmDesc);
                        //SendDeviceStatus(stateItem.Name, AlarmDesc);
                        break;

                    case "ElevatorAlarm":
                        break;

                    default:
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("ElevatorAlarmProcess StateChanged方法出错,原因:" + ex.Message);
            }
        }
Example #22
0
        private static void BuildDir(string output, string toBuild)
        {
            string infosFolder = Path.Combine(output, "infos");
            string pkgsFolder  = Path.Combine(output, "handlers");

            string indexPagePath = Path.Combine(output, "index.html");
            string indexData     = "<html><head><link rel='stylesheet' href='bootstrap.css'><link rel='stylesheet' href='style.css'></head><body>";

            if (Directory.Exists(output))
            {
                Directory.Delete(output, true);
            }

            Directory.CreateDirectory(output);
            Directory.CreateDirectory(infosFolder);
            Directory.CreateDirectory(pkgsFolder);

            string sourceCssPath = "..\\..\\MainRepo\\bootstrap.min.css";
            string cssPath       = Path.Combine(output, "bootstrap.css");

            File.Copy(sourceCssPath, cssPath);

            sourceCssPath = "..\\..\\MainRepo\\style.css";
            cssPath       = Path.Combine(output, "style.css");
            File.Copy(sourceCssPath, cssPath);

            DirectoryInfo dirSource = new DirectoryInfo(toBuild);

            DirectoryInfo[] dirs = dirSource.GetDirectories();

            List <Infos> infos = new List <Infos>();

            for (int i = 0; i < dirs.Length; i++)
            {
                DirectoryInfo dir = dirs[i];

                if (dir.Name.Contains("239140")) // ignore dying light, unfinished
                {
                    continue;
                }

                // read handler data
                string handlerPath           = Path.Combine(dir.FullName, "info.json");
                string handlerData           = File.ReadAllText(handlerPath);
                GameHandlerMetadata metadata = JsonConvert.DeserializeObject <GameHandlerMetadata>(handlerData);
                if (metadata.GameID.ToLower().StartsWith("debug"))
                {
                    continue;
                }

                string pkgName  = PackageManager.GetPackageFileName(metadata) + ".nc";
                string destName = Path.Combine(pkgsFolder, pkgName);

                infos.Add(new Infos()
                {
                    Metadata = metadata, RootFolder = dir.FullName
                });

                string firstPic = Path.Combine(dir.FullName, "header.jpg");
                if (!File.Exists(firstPic))
                {
                    // see if steam has a header pic
                    string headerUrl = string.Format("https://steamcdn-a.opskins.media/steam/apps/{0}/header.jpg", metadata.GameID);

                    try
                    {
                        using (WebClient client = new WebClient())
                        {
                            client.DownloadFile(headerUrl, firstPic);
                        }
                    }
                    catch { }
                }

                using (var file = new ZipFile())
                {
                    file.AddDirectory(dir.FullName);
                    file.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;

                    file.Save(destName);
                }
            }

            var newInfos = infos.OrderBy(c => c.Metadata.GameTitle);

            indexData += "<div id='grid'>";

            foreach (Infos info in newInfos)
            {
                GameHandlerMetadata metadata = info.Metadata;

                // write info file
                GameHandlerBaseMetadata baseMetadata = new GameHandlerBaseMetadata();
                ObjectUtil.DeepCopy(metadata, baseMetadata);

                string metadataSerialized = JsonConvert.SerializeObject(baseMetadata);
                string infoFolder         = Path.Combine(infosFolder, metadata.HandlerID);
                Directory.CreateDirectory(infoFolder);

                string infoFile = Path.Combine(infoFolder, "info.json");
                File.WriteAllText(infoFile, metadataSerialized);

                string firstPic = Path.Combine(info.RootFolder, "header.jpg");
                if (File.Exists(firstPic))
                {
                    string destHeaderScreenshot = Path.Combine(infoFolder, "header.jpg");
                    Directory.CreateDirectory(Path.GetDirectoryName(destHeaderScreenshot));
                    File.Copy(firstPic, destHeaderScreenshot);
                }

                indexData += "<div>";

                string pkgName = PackageManager.GetPackageFileName(metadata);

                indexData += string.Format("<a href='packages/{0}.nc'>", pkgName);
                indexData += string.Format("<img src='infos/{0}/header.jpg' /></a> ", metadata.HandlerID);
                indexData += string.Format("<h3>{0}</h3><h4>{1}</h4><h5><a href='handlers/{2}.nc'>[DOWNLOAD HANDLER v{3}]</a></h5>",
                                           metadata.GameTitle, metadata.Title, pkgName, metadata.V);
                indexData += "<br /> </div>";
            }

            indexData += "</div>";


            indexData += "</body></html>";
            File.WriteAllText(indexPagePath, indexData);
        }
        public IPageMaker CreateObject(params object[] args)
        {
            IPageData pageData = ObjectUtil.ConfirmQueryObject <IPageData>(this, args);

            return(new RazorModuleTemplatePageMaker(this, pageData));
        }
Example #24
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            switch (stateItem.ItemName)
            {
            case "CraneTaskFinished":
                object obj        = ObjectUtil.GetObject(stateItem.State);
                string TaskFinish = obj.ToString();
                if (TaskFinish.Equals("True") || TaskFinish.Equals("1"))
                {
                    string TaskNo = Util.ConvertStringChar.BytesToString(ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(stateItem.Name, "CraneTaskNo")));
                    //清除堆垛机任务号
                    sbyte[] taskNo = new sbyte[10];
                    Util.ConvertStringChar.stringToBytes("", 10).CopyTo(taskNo, 0);
                    WriteToService(stateItem.Name, "TaskNo", taskNo);
                    //存储过程处理
                    if (TaskNo != "")
                    {
                        Logger.Info(stateItem.ItemName + "完成标志,任务号:" + TaskNo);
                        //更新任务状态
                        DataParameter[] param = new DataParameter[] { new DataParameter("@TaskNo", TaskNo) };
                        bll.ExecNonQueryTran("WCS.Sp_TaskProcess", param);
                    }
                }
                break;

            case "CraneAlarmCode":
                object obj1 = ObjectUtil.GetObject(stateItem.State);
                if (obj1 == null)
                {
                    return;
                }
                if (obj1.ToString() != "0")
                {
                    string    strError = "";
                    DataRow[] drs      = dtCraneErr.Select(string.Format("CraneErrCode={0}", obj1.ToString()));
                    if (drs.Length > 0)
                    {
                        strError = drs[0]["CraneErrDesc"].ToString();
                    }
                    else
                    {
                        strError = "堆垛机未知错误!";
                    }
                    Logger.Error(strError);
                }
                break;

            case "Run":
                blRun = (int)stateItem.State == 1;
                if (blRun)
                {
                    tmWorkTimer.Start();
                    Logger.Info("堆垛机联机");
                }
                else
                {
                    tmWorkTimer.Stop();
                    Logger.Info("堆垛机脱机");
                }
                break;

            default:
                break;
            }


            return;
        }
Example #25
0
        protected override void StateChanged(StateItem stateItem, IProcessDispatcher dispatcher)
        {
            object obj = ObjectUtil.GetObject(stateItem.State);

            if (obj == null)
            {
                return;
            }

            if (stateItem.ItemName.IndexOf("nAlarmCode") >= 0)
            {
                int CraneNo = int.Parse(stateItem.Name.Replace("CranePLC", "")) * 2;
                ShowLedMessage(CraneNo.ToString(), stateItem);
                return;
            }
            string ItemNo = stateItem.ItemName.Split('_')[0];

            ShowLedMessage(GetLedNo(int.Parse(ItemNo)), stateItem);

            try
            {
                if (stateItem.ItemName.IndexOf("TaskNo") >= 0 && (ItemNo == "102" || ItemNo == "106" || ItemNo == "110" || ItemNo == "114" || ItemNo == "118" || ItemNo == "103" || ItemNo == "107" || ItemNo == "111" || ItemNo == "115" || ItemNo == "119"))
                {
                    string Tasks = ConvertStringChar.BytesToString(ObjectUtil.GetObjects(stateItem.State));
                    Tasks = Tasks.PadRight(26, ' ');
                    if (Tasks.Length > 0)
                    {
                        string      TaskNo = Tasks.Substring(0, 10);
                        BLL.BLLBase bll    = new BLL.BLLBase();
                        DataTable   dtTask = bll.FillDataTable("WCS.SelectWCSTask", new DataParameter[] { new DataParameter("{0}", string.Format("TaskID='{0}'", TaskNo)) });
                        if (dtTask.Rows.Count > 0)
                        {
                            string PalletCode = dtTask.Rows[0]["PALLETID"].ToString();
                            switch (ItemNo)
                            {
                            case "102":
                            case "106":
                            case "110":
                            case "114":
                            case "118":
                                //更新WCS_Task入库状态
                                bll.ExecNonQuery("WCS.UpdateWCSTaskStateByStatus", new DataParameter[] { new DataParameter("{0}", "2"), new DataParameter("{1}", TaskNo), new DataParameter("{2}", 1) });
                                Logger.Info("入库任务:" + TaskNo + "托盘编号:" + PalletCode + "到达入库端!");
                                break;

                            case "103":
                            case "107":
                            case "111":
                            case "115":
                            case "119":
                                //更新出库完成
                                bll.ExecNonQueryTran("WCS.SpTaskFinished", new DataParameter[] { new DataParameter("VTaskNo", TaskNo) });
                                Logger.Info("出库任务:" + TaskNo + "托盘编号:" + PalletCode + "完成任务!");
                                break;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("LEDProcess中StateChanged出现异常" + ex.Message);
            }
        }
Example #26
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="craneNo"></param>
        private void CraneIn(int craneNo)
        {
            // 判断堆垛机的状态 自动  空闲
            try
            {
                //判断堆垛机
                if (!Check_Crane_Status_IsOk(craneNo))
                {
                    return;
                }

                //切换入库优先
                dCrnStatus[craneNo].io_flag = 0;
            }
            catch (Exception e)
            {
                //Logger.Debug("Crane out 状态检查错误:" + e.Message.ToString());
                return;
            }

            string serviceName = "CranePLC" + craneNo;

            int[]    craneInfo = new int[6];
            object[] obj       = ObjectUtil.GetObjects(WriteToService(serviceName, "CraneInfo"));
            for (int j = 0; j < obj.Length; j++)
            {
                craneInfo[j] = Convert.ToInt16(obj[j]) - 48;
            }

            obj = ObjectUtil.GetObjects(Context.ProcessDispatcher.WriteToService(serviceName, "CraneTaskNo"));
            string plcTaskNo = Util.ConvertStringChar.BytesToString(obj);

            string CraneNo = "0" + craneNo.ToString();

            //获取任务,排序优先等级、任务时间
            DataParameter[] parameter = new DataParameter[] { new DataParameter("{0}", string.Format("((WCS_Task.TaskType='11' and WCS_Task.State='2') or (WCS_Task.TaskType='14' and WCS_Task.State='5')) and WCS_Task.CraneNo='{0}'", CraneNo)) };
            DataTable       dt        = bll.FillDataTable("WCS.SelectTask", parameter);

            //出库
            if (dt.Rows.Count > 0)
            {
                DataRow dr    = dt.Rows[0];
                string  carNo = dr["CarNo"].ToString();


                if (craneInfo[4] != 5)
                {
                    //判断小车,出库小车必须待机+空载
                    if (!Check_Car_In_Status_IsOk(carNo))
                    {
                        return;
                    }
                }

                string TaskNo = dr["TaskNo"].ToString();

                //如果重入,需要重新下任务需判断堆垛机任务号跟当前要下的任务号是否一致,如不一致不能下达
                if (plcTaskNo != "0000000000" && TaskNo != plcTaskNo.Trim())
                {
                    return;
                }

                string BillID      = dr["BillID"].ToString();
                byte   taskType    = byte.Parse(dt.Rows[0]["TaskType"].ToString().Substring(1, 1));
                string fromStation = dt.Rows[0]["FromStation"].ToString();
                string toStation   = dt.Rows[0]["ToStation"].ToString();
                //string fromStation = dt.Rows[0]["StationNo"].ToString();
                //string toStation = dt.Rows[0]["CellCode"].ToString();
                //if (taskType == 2)
                //{
                //    fromStation = dt.Rows[0]["CellCode"].ToString();
                //    toStation = dt.Rows[0]["StationNo"].ToString();
                //}
                //else if (taskType == 3)
                //{
                //    fromStation = dt.Rows[0]["CellCode"].ToString();
                //    toStation = dt.Rows[0]["ToCellCode"].ToString();
                //}

                byte[] cellAddr = new byte[8];
                if (craneInfo[4] == 5)
                {
                    cellAddr[0] = 5;
                }
                else
                {
                    cellAddr[0] = taskType;
                }
                cellAddr[1] = 0;  //0-不允许伸叉,1-允许伸叉
                cellAddr[2] = byte.Parse(fromStation.Substring(0, 3));
                cellAddr[3] = byte.Parse(fromStation.Substring(3, 3));
                cellAddr[4] = byte.Parse(fromStation.Substring(6, 3));
                cellAddr[5] = byte.Parse(toStation.Substring(0, 3));
                cellAddr[6] = byte.Parse(toStation.Substring(3, 3));
                cellAddr[7] = byte.Parse(toStation.Substring(6, 3));


                for (int i = 0; i < cellAddr.Length; i++)
                {
                    cellAddr[i] += 48;
                }

                sbyte[] palletBarcode = new sbyte[8];
                Util.ConvertStringChar.stringToBytes(dr["PalletCode"].ToString(), 8).CopyTo(palletBarcode, 0);

                sbyte[] taskNo = new sbyte[10];
                Util.ConvertStringChar.stringToBytes(dr["TaskNo"].ToString(), 10).CopyTo(taskNo, 0);

                WriteToService(serviceName, "TaskAddress", cellAddr);
                WriteToService(serviceName, "PalletCode", palletBarcode);
                WriteToService(serviceName, "TaskNo", taskNo);
                WriteToService(serviceName, "ProductType", 49);
                if (WriteToService(serviceName, "WriteFinished", 49))
                {
                    string State = "3";
                    if (taskType == 4)
                    {
                        State = "6";
                    }
                    //更新任务状态为执行中
                    bll.ExecNonQuery("WCS.UpdateTaskTimeByTaskNo", new DataParameter[] { new DataParameter("@State", State), new DataParameter("@TaskNo", TaskNo) });
                    bll.ExecNonQuery("WCS.UpdateBillStateByBillID", new DataParameter[] { new DataParameter("@State", 3), new DataParameter("@BillID", BillID) });
                }
                Logger.Info("任务:" + dr["TaskNo"].ToString() + "已下发给" + craneNo + "堆垛机;起始地址:" + fromStation + ",目标地址:" + toStation);
            }
        }
        //任务输送到某一位置后,通知更新状态。【入库口任务到位,密集存储道穿过到位】
        public override void Execute()
        {
            int[] data = null;
            try
            {
                string positionName = string.Empty;
                int    taskID       = 0;

                object state = AutomationContext.Read(memoryServiceName, memoryItemName);
                object obj   = ObjectUtil.GetObjects(state);
                if (obj is Array)
                {
                    Array arrayObj = (Array)obj;
                    if (arrayObj.Length == 2)
                    {
                        positionName = arrayObj.GetValue(0).ToString();
                        taskID       = Convert.ToInt32(arrayObj.GetValue(1));
                    }
                }

                if (positionName == string.Empty || positionName == "0" || taskID == 0)
                {
                    return;
                }

                data = new int[] { Convert.ToInt32(positionName), taskID };

                using (TransactionScopeManager TM = new TransactionScopeManager(true, IsolationLevel.Serializable))
                {
                    positionDal.TransactionScopeManager = TM;
                    taskDal.TransactionScopeManager     = TM;

                    int positionID        = positionDal.GetPositionIDByPositionName(positionName);
                    int currentPositionID = taskDal.GetCurrentPositionID(taskID);
                    int nextPositionID    = taskDal.GetNextPositionID(taskID);
                    int endPositionID     = taskDal.GetEndPositionID(taskID);
                    if (positionID != 0 && currentPositionID != endPositionID && positionID == nextPositionID)
                    {
                        positionDal.UpdateHasGoodsToTrue(positionID);
                        taskDal.UpdateTaskPosition(taskID, positionID);
                        taskDal.UpdateTaskPositionStateToArrived(taskID);

                        if (positionID == endPositionID)
                        {
                            string orderType = taskDal.GetOrderType(taskID);
                            if (orderType == "03")//出库单
                            {
                                if (!AutomationContext.Write(memoryServiceName1, memoryItemName1, new int[] { taskID, positionID }))
                                {
                                    AutomationContext.Write(memoryServiceName, memoryItemName, data);
                                    Logger.Error(string.Format("{0} 完成[{1}]任务失败!", Name, taskID));
                                    return;
                                }
                            }
                            else if (orderType == "04")//盘点单
                            {
                                if (!AutomationContext.Write(memoryServiceName1, memoryItemName2, new int[] { taskID, positionID }))
                                {
                                    AutomationContext.Write(memoryServiceName, memoryItemName, data);
                                    Logger.Error(string.Format("{0} 完成[{1}]任务失败!", Name, taskID));
                                    return;
                                }
                            }
                            else
                            {
                                if (!AutomationContext.Write(memoryServiceName, memoryItemName3, taskID))
                                {
                                    AutomationContext.Write(memoryServiceName, memoryItemName, data);
                                    Logger.Error(string.Format("{0} 完成[{1}]任务失败!", Name, taskID));
                                    return;
                                }
                            }
                        }
                        TM.Commit();
                    }
                    else
                    {
                        Logger.Error(string.Format("{0} 处理[{1}]任务到达失败,到达位置{2}与任务不符!", Name, taskID, positionName));
                    }
                }
            }
            catch (Exception ex)
            {
                if (data != null)
                {
                    AutomationContext.Write(memoryServiceName, memoryItemName, data);
                }
                Logger.Error("TaskArriveDataProcess 出错,原因:" + ex.Message + "/n" + ex.StackTrace);
            }
        }
 private void OnDestroy()
 {
     ObjectUtil.UnregisterObserver(this);
     _callerEvent?.Dispose();
 }
Example #29
0
        //播放战斗效果
        public void PlayFightEffect(ushort wSkillID, int damage, byte byAttackEvent, SceneEntity killerHero)
        {
            if (byAttackEvent == (byte)KAttackEvent.aeMiss)
            {
                if (Owner.property.isMainHero)
                {
                    Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "2", "FightFont", "effect_ui_shuzitanchu_putong.res");
                }
                else
                {
                    Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "1", "FightFont", "effect_ui_shuzitanchu_putong.res");
                }
                return;
            }
            else if (byAttackEvent == (byte)KAttackEvent.aeCrit)
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "CritFont", "effect_ui_shuzitanchu_baoji2.res");
            }
            else if (Owner.property.isMainHero)
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "HurtFont", "effect_ui_shuzitanchu_putong.res", NumTip.OFFSET_TYPE.LEFT);
            }
            else
            {
                Owner.TipsCmp.CreateTip(new Vector3(0, Owner.heroSetting.TipPos0, 0), "+" + damage, "AttackFont", "effect_ui_shuzitanchu_putong.res");
            }
            KSkillDisplay skillDisplay = KConfigFileManager.GetInstance().GetSkillDisplay(wSkillID, Owner.TabID);

            if (skillDisplay.OnHitAction.CompareTo("JUMP") == 0)
            {
                ActionBeAttactedAndThrowUp action = new ActionBeAttactedAndThrowUp(Owner);
                action.hitAnim     = skillDisplay.OnHitAnim;
                action.time        = skillDisplay.OnHitEffecTime;
                action.height      = skillDisplay.OnHitHeight;
                Owner.ActiveAction = action;
                //action
            }
            else if (Owner.property.heroObjType == KHeroObjectType.hotMonster && Owner.heroSetting.MonsterGrade == KMonsterGrade.mgQuestBoss)
            {
                if (Owner.property.activeAction.TryFinish())
                {
                    ActiionBeAttack beAttack = new ActiionBeAttack(Owner);
                    Owner.DispatchEvent(ControllerCommand.SetActiveAction, beAttack);
                }
            }
            else
            {
                Owner.DispatchEvent(ControllerCommand.BE_HIT);
            }

            Vector3 forward = Vector3.forward;

            if (null != killerHero)
            {
                forward = killerHero.transform.position - Owner.transform.position;
                forward = new Vector3(forward.x, 0, forward.z);
                forward.Normalize();
            }
            if (skillDisplay.HitShakeTime > 0 && skillDisplay.HitShakeDelta > 0)
            {
                Owner.DispatchEvent(ControllerCommand.HIT_SLOW, skillDisplay.HitShakeTime, skillDisplay.HitShakeDelta);
            }

            if (null != skillDisplay && skillDisplay.HitEffect.Length > 0 /*&& skillDisplay.BulletEffect.Length == 0*/)
            {
                AssetInfo inf = AssetLoader.GetInstance().Load(URLUtil.GetResourceLibPath() + skillDisplay.HitEffect);
                if (inf.isDone(false))
                {
                    if (skillDisplay.SingleHitFx)
                    {
                        GameObject _hit = null;
                        if (hitFxs.TryGetValue(skillDisplay.HitEffect, out _hit))
                        {
                            GameObject.Destroy(_hit);
                        }
                    }
                    GameObject hitObject = inf.CloneGameObject();
                    ObjectUtil.SetTagWithAllChildren(hitObject, CameraLayerManager.GetInstance().GetMissionSignName());
                    hitObject.transform.parent   = Owner.transform.parent;
                    hitObject.transform.position = Owner.transform.position;
                    hitObject.transform.forward  = forward;
                    if (skillDisplay.SingleHitFx)
                    {
                        hitFxs[skillDisplay.HitEffect] = hitObject;
                    }
                    KingSoftCommonFunction.SetLayer(hitObject, 11);
                    DestoryObject dos = hitObject.AddComponent <DestoryObject>();
                    dos.delta = 5;
                    if (skillDisplay.HitBindPoint.Length > 0)
                    {
                        if (skillDisplay.HitBindPoint.CompareTo("Ground") != 0)
                        {
                            Transform t = Owner.GetChildTransform(skillDisplay.HitBindPoint);
                            if (null != t)
                            {
                                hitObject.transform.parent        = t;
                                hitObject.transform.localPosition = Vector3.zero;
                                hitObject.transform.localScale    = Vector3.one;
                            }
                        }
                    }
                    hitObject.SetActive(true);
                }
            }
        }
        public override void Execute()
        {
            try
            {
                object state = AutomationContext.Read(memoryServiceName, memoryItemName);
                if (state == null || state.ToString() != "InventoryWholePalletScan")
                {
                    return;
                }

                int taskID = 0, positionID = 0;
                state = AutomationContext.Read(memoryServiceName1, memoryItemName1);
                object obj = ObjectUtil.GetObjects(state);
                if (obj is Array)
                {
                    Array arrayObj = (Array)obj;
                    if (arrayObj.Length == 2)
                    {
                        taskID     = Convert.ToInt32(arrayObj.GetValue(0));
                        positionID = Convert.ToInt32(arrayObj.GetValue(1));
                    }
                }
                if (taskID == 0 || positionID == 0)
                {
                    return;
                }

                //弹出输入窗,获取数量;
                state = AutomationContext.Read(memoryServiceName2, memoryItemName2);
                if (state != null)
                {
                    UserLookAndFeel.Default.SetSkinStyle(state.ToString());
                }

                InventoryDialog inventoryDialog = new InventoryDialog(taskID);
                if (inventoryDialog.ShowDialog() == DialogResult.OK)
                {
                    RestClient rest = new RestClient();
                    taskID = rest.FinishInventoryTask(taskID, inventoryDialog.RealQuantity);
                    if (taskID > 0)
                    {
                        string positionName = taskDal.GetTaskNextPosition(taskID);
                        if (positionName != string.Empty)
                        {
                            int[] data = new int[] { taskID, Convert.ToInt32(positionName), 1 };
                            AutomationContext.Write(plcServiceName, O_Whole_Pallet_StockIn_Task_Info, data);
                            Thread.Sleep(sleepTime);
                            obj = AutomationContext.Read(plcServiceName, I_Whole_Pallet_StockIn_Task_Info);
                            obj = ObjectUtil.GetObjects(obj);
                            if (obj is Array)
                            {
                                Array arrayObj = (Array)obj;
                                if (arrayObj.Length == 3 &&
                                    data[0] == Convert.ToInt32(arrayObj.GetValue(0)) &&
                                    data[1] == Convert.ToInt32(arrayObj.GetValue(1)) &&
                                    data[2] == Convert.ToInt32(arrayObj.GetValue(2)))
                                {
                                    AutomationContext.Write(plcServiceName, O_Whole_Pallet_StockIn_Task_Info_Complete, 1);
                                    AutomationContext.Write(memoryServiceName1, memoryItemName1, 0);
                                    positionDal.UpdateHasGoodsToFalse(positionID);
                                }
                            }
                        }
                    }
                    else if (taskID == -1)
                    {
                        positionDal.UpdateHasGoodsToFalse(positionID);
                        AutomationContext.Write(memoryServiceName1, memoryItemName1, 0);
                    }
                }
                inventoryDialog = null;
                GC.Collect();
            }
            catch (Exception ex)
            {
                Logger.Error("InventoryWholePalletScanProcess 出错,原因:" + ex.Message + "/n" + ex.StackTrace);
            }
        }