schangxiang@126.com
2025-04-01 2b0d3b1a9f62e5ec48e4b559f95b3d4bdc3bee09
CC/iWareCC_ASRS/FormCC.cs
@@ -20,21 +20,29 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity.Core.Metadata.Edm;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.ServiceModel;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using XiGang.Core.Model;
using XiGang.Core.Model.ViewModels;
using static WZ.Useful.Commons.NativeMethods;
namespace iWareCC
{
    public partial class FormCC : Form
    {
        /// <summary>
        /// 全局-269位置最新扫描的板件数据(格式 包号|Upi|时间点)
        /// </summary>
        public static string Globle_269_LastPackageUpi = "";
        /// <summary>
        /// 全局-配置报警信息列表
@@ -206,12 +214,13 @@
            new Thread(DataProcess_RobotBuffer_ModeChange.Handler).Start();
            //new Thread(DataProcess_RobotBuffer_ModeChange.Handler).Start();
            new Thread(DataProcess_RobotBuffer_IssueOutboundTask.Handler).Start();
            new Thread(DataProcess_RobotBuffer_AutoQiTaoOutbound.Handler).Start();
            //new Thread(DataProcess_RobotBuffer_AutoQiTaoOutbound.Handler).Start();
            new Thread(DataProcess_RobotBuffer_PesonOutbound.Handler).Start();
            new Thread(DataProcess_RobotBuffer_FinishTaskForOutbound.Handler).Start();
@@ -242,7 +251,7 @@
            new Thread(PushPackageCodeToMes.Handler).Start();
            new Thread(PushPaperCutToMes.Handler).Start();
            new Thread(DataProcess_ValidateQiTao.Handler).Start();
            //new Thread(DataProcess_ValidateQiTao.Handler).Start();
            //*/
            #endregion
@@ -256,8 +265,7 @@
        }
        private void FormCC_Load(object sender, EventArgs e)
        {
            dateTimePicker_Start.Value = DateTime.Now;
            dateTimePicker_End.Value = DateTime.Now;
            /*
@@ -272,22 +280,25 @@
            #region 对外发布WCF形式数据访问服务
            try
            Task.Run(() =>
            {
                #region 对外发布WCF形式数据访问服务
                var lineServiceHost = new ServiceHost(typeof(CCWcfService));
                lineServiceHost.Open();
                lbl_WCFMsg.Text = "发布WCF成功," + lineServiceHost.BaseAddresses[0].AbsoluteUri;
                lbl_WCFMsg.ForeColor = Color.Green;
                #endregion
                try
                {
                    #region 对外发布WCF形式数据访问服务
                    var lineServiceHost = new ServiceHost(typeof(CCWcfService));
                    lineServiceHost.Open();
                    lbl_WCFMsg.Text = "发布WCF成功," + lineServiceHost.BaseAddresses[0].AbsoluteUri;
                    lbl_WCFMsg.ForeColor = Color.Green;
                    #endregion
            }
            catch (Exception ex)
            {
                Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "发布WCF失败", ex);
                lbl_WCFMsg.Text = "发布WCF失败:" + ex.Message;
                lbl_WCFMsg.ForeColor = Color.Red;
            }
                }
                catch (Exception ex)
                {
                    Log4NetHelper.WriteErrorLog(iWareCommon.Utils.LogType.CCWCFService, "发布WCF失败", ex);
                    lbl_WCFMsg.Text = "发布WCF失败:" + ex.Message;
                    lbl_WCFMsg.ForeColor = Color.Red;
                }
            });
            #endregion
@@ -612,15 +623,21 @@
        {
            while (true)
            {
                Thread.Sleep(2000);//1秒钟读取一次
                Thread.Sleep(3000);//1秒钟读取一次
                try
                {
                    if (stationServiceClient == null)
                    {
                        continue;
                    }
                    /*
                    Stopwatch main = new Stopwatch();
                    main.Start();
                    iWareCC.StationService.DeviceWarningInfo[] waringList = await stationServiceClient.GetWaringInfoListAsync((int)EDevice.Station, configDeviceWarningList.wmsConfigDeviceWarnings.ToArray());
                    main.Stop();
                    var milliseconds = main.ElapsedMilliseconds;  //-- 操作时间(毫秒)
                    //显示报警信息
                    List<String> warningCodeList = new List<string>();
@@ -672,14 +689,16 @@
                {
                    if (SystemValue.isAllowRuning_DeleteData && SystemValue.isStartedModel)
                    {
                        ClearDataHandler.Delete_Base_SysExceptionInfo(7);
                        ClearDataHandler.Delete_Task_RequestLog(7);
                        ClearDataHandler.Delete_Task_Part(10);
                        ClearDataHandler.Delete_Device_Warning(30);
                        ClearDataHandler.Delete_HttpRequestRecord(14);
                        ClearDataHandler.Delete_wms_record_print(7);
                        ClearDataHandler.Delete_mes_push_papercut(7);
                        ClearDataHandler.Delete_mes_push_packagecode(10);
                        ClearDataHandler.Delete_wms_rbline_task(10);
                        ClearDataHandler.Delete_MES_BTJReceiveReq(30);
                        ClearDataHandler.Delete_MES_OnLineReq(30);
                        //ClearDataHandler.Delete_Device_Warning(30);
                        //ClearDataHandler.Delete_HttpRequestRecord(14);
                        //ClearDataHandler.Delete_MES_BTJReceiveReq(30);
                        //ClearDataHandler.Delete_MES_OnLineReq(30);
                        LogTextHelper.BatchDeleteLog();
@@ -1236,224 +1255,34 @@
        private void button5_Click(object sender, EventArgs e)
        {
            if (SystemValue.isStartedModel)
            {
                WZ.Useful.Commons.MessageUtil.ShowError("手动库位维护,需要将模式关闭!");
                return;
            }
            //手动库位维护
            SrmStockForm frm = new SrmStockForm();
            frm.ShowDialog();
        }
        private void btn_TongJi_Click(object sender, EventArgs e)
        {
            //统计
            int store_FDJ = 0;//现有发动机数
            int store_EmptySalver = 0;//空托盘数量
            int store_EmptySalver_TS = 0;//空托盘托数
            int count_In_FDJ = 0;//查询某天入库了多少发动机
            int count_In_EmptySalver = 0;//查询某天入库了多少 空托盘
            int count_In_EmptySalver_TS = 0;//查询某天入库了多少 空托盘托数
            int count_Out_FDJ = 0;//查询某天出库了多少发动机
            int count_Out_EmptySalver = 0;//查询某天出库了多少 空托盘
            int count_Out_EmptySalver_TS = 0;//查询某天出库了多少 空托盘托数
            int count_ZY_EmptySalver = 0;//查询某天转运了多少 空托盘
            int count_ZY_EmptySalver_TS = 0;//查询某天转运了多少 空托盘托数
            //某段时间的统计
            var str_start = this.dateTimePicker_Start.Value.ToString("yyyy-MM-dd" + " " + "00:00:00");
            var str_end = this.dateTimePicker_End.Value.ToString("yyyy-MM-dd" + " " + "23:59:59");
            var start = Convert.ToDateTime(str_start);
            var end = Convert.ToDateTime(str_end);
            int allPlacesCount = 0;
            using (DbModel edm = new DbModel())
            {
                var queryMaterialType_一般物料 = (int)MaterialTypeEnum.一般物料;
                var queryMaterialType_托盘 = (int)MaterialTypeEnum.托盘;
                var queryInOutFlag_In = (int)MainInOutFlagEnum.入库;
                var queryInOutFlag_Out = (int)MainInOutFlagEnum.出库;
                var queryInOutFlag_ZY = (int)MainInOutFlagEnum.转运;
                var allPlaces = edm.Base_Station.Where(x => x.IsSrmStation == true).ToList();
                allPlaces = StationHandler.FindCommonFilter(allPlaces);
                allPlacesCount = allPlaces.Count;
                store_FDJ = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_一般物料).Count();
                store_EmptySalver_TS = edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Count();
                store_EmptySalver = store_EmptySalver_TS == 0 ? 0 : edm.V_Store.Where(x => x.MaterialType == queryMaterialType_托盘).Sum(x => (int)x.Qty);
                //查询某天入库了多少发动机
                var taskState = (int)MainTaskStatusEnum.已完成;
                count_In_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
                //查询某天入库了多少托盘
                count_In_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
                count_In_EmptySalver = count_In_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_In && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty);
                //查询某天出库了多少发动机
                count_Out_FDJ = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_一般物料 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
                //查询某天入库了多少托盘
                count_Out_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Count();
                count_Out_EmptySalver = count_Out_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_Out && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end)).Sum(x => (int)x.Qty);
                //查询某天转运了多少托盘(注意:只查询去1014位置的)
                count_ZY_EmptySalver_TS = edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Count();
                count_ZY_EmptySalver = count_ZY_EmptySalver_TS == 0 ? 0 : edm.Task_Main.Where(x => x.MaterialType == queryMaterialType_托盘 && x.InOutFlag == queryInOutFlag_ZY && x.TaskState == taskState && (x.FinishTime >= start && x.FinishTime <= end) && x.RealToPlace == "1014").Sum(x => (int)x.Qty);
            }
            //显示
            //var aa = "\r\n";
            var str = "";
            str += "时间范围: " + str_start + "至" + str_end + " \r\n";
            str += "==================【库存】========================= \r\n";
            str += "现有发动机数: " + store_FDJ + "  \r\n";
            str += "现有空托盘数: " + store_EmptySalver + " \r\n";
            str += "现有空托盘托数: " + store_EmptySalver_TS + " \r\n";
            str += "总库位" + allPlacesCount + ",有发动机或托盘库位" + (store_FDJ + store_EmptySalver_TS) + ",库存占比: " + CSharpHelper.ExecPercent((store_FDJ + store_EmptySalver_TS), allPlacesCount) + " \r\n";
            str += "\r\n";
            str += "==================【入库】========================= \r\n";
            str += "入库发动机数: " + count_In_FDJ + " \r\n";
            str += "入库空托盘数: " + count_In_EmptySalver + " \r\n";
            str += "入库空托盘托数: " + count_In_EmptySalver_TS + " \r\n";
            str += "\r\n";
            str += "==================【出库】========================= \r\n";
            str += "出库发动机数: " + count_Out_FDJ + " \r\n";
            str += "出库空托盘数: " + count_Out_EmptySalver + " \r\n";
            str += "出库空托盘托数: " + count_Out_EmptySalver_TS + " \r\n";
            str += "\r\n";
            str += "==================【转运托盘】========================= \r\n";
            str += "转运空托盘数: " + count_ZY_EmptySalver + " \r\n";
            str += "转运空托盘托数: " + count_ZY_EmptySalver_TS + " \r\n";
            str += "\r\n";
            this.tb_TongJi.Text = str;
        }
        private void checkBox_NowDay_CheckedChanged(object sender, EventArgs e)
        {
            if (this.checkBox_NowDay.Checked)
            {
                dateTimePicker_Start.Value = DateTime.Now;
                dateTimePicker_End.Value = DateTime.Now;
            }
        }
        private void rBOnlyIn_CheckedChanged(object sender, EventArgs e)
        {
            SetModelCheckBoxToSystemValue();
        }
        private void btnSMQZYZTG1_Click(object sender, EventArgs e)
        {
            DobtnSMQZYZTG(EDevice.一号堆垛机);
        }
        private void DobtnSMQZYZTG(EDevice device)
        {
            MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
            DialogResult dr = MessageBox.Show("注意:入库口扫码强制验证通过功能,仅适用于扫码器没有扫到码,但是实际托盘码和堆垛机要执行的任务托盘码一致的情况!如果堆垛机要执行的任务跟实际托盘码不符,请不要点击该按钮,及时联系管理员过来处理。您确定要操作吗?", "确认", messButton);
            if (dr == DialogResult.OK)//如果点击“确定”按钮
            {
                var stationCode = MyExtendHelper.GetRgvStationCodeBySrm(device);
                var srm = FormCC.srmViewDict[(int)device];
                //只有当堆垛机有任务执行时,并且是入库任务的时候才判断
                var realSrmSourcePlace = (int)device + "-" + srm.SrmSourcePlace;
                if (srm.R_TaskNo > 0 && (srm.R_State == (int)ESrmState.取货中 || srm.R_State == (int)ESrmState.取货定位中)
                   && SysGloble.Dict_SpecialPlace_IN.ContainsKey(realSrmSourcePlace))
                {
                    var result = MyExtendHelper.WriteScanValidateACK(false, "入库口扫码强制验证通过", stationCode, srm.R_TaskNo, true, "", "");
                    if (result)
                    {
                        MyExtendHelper.SetSrm_IN_SMQZYZTG(device, true);
                        MessageBox.Show("入库口扫码强制验证通过 成功!");
                    }
                    else
                    {
                        MessageBox.Show("入库口扫码强制验证通过 失败!");
                    }
                }
                else
                {
                    MessageBox.Show(device.ToString() + "任务号不是大于0,或者 状态不是 '取货中'或'取货定位中',不允许操作");
                }
            }
            else//如果点击“取消”按钮
            {
            }
        }
        private void button22_Click(object sender, EventArgs e)
        {
            var cargNo = this.tb_wlm.Text.Trim();
            var ret = WmsRequestHelper.test_getEngineInfo(cargNo);
            //转换后
            MesRetModel2<MesRetProductModel> retModel = JsonConvert.DeserializeObject<MesRetModel2<MesRetProductModel>>(ret);
            this.tb_TongJi.Text = "MES返回:" + ret + "\r\n" +
                "转换后:" + "\r\n" +
                JsonConvert.SerializeObject(retModel)
                ;
        }
        private void button23_Click(object sender, EventArgs e)
        {
            var cargNo = this.tb_wlm.Text.Trim();
            var ret = WmsRequestHelper.test_btjReceive(cargNo);
            //转换后
            MessageModel<string> retModel = JsonConvert.DeserializeObject<MessageModel<string>>(ret);
            this.tb_TongJi.Text = "WMS返回:" + ret + "\r\n" +
                "转换后:" + "\r\n" +
                JsonConvert.SerializeObject(retModel);
        }
        private void lbl_Alert_Place1014ClearStoreTask_Click(object sender, EventArgs e)
        {
        }
        private void button24_Click(object sender, EventArgs e)
        {
            //强制该包号出库
            var packageCode = this.tb_PackageCode.Text.Trim();
            ////强制该包号出库
            //var packageCode = this.tb_PackageCode.Text.Trim();
            var alertMsg = "";
            CC_DataProcess_RobotBuffer_ForceOutbound.Handler(packageCode, ref alertMsg);
            if (!string.IsNullOrEmpty(alertMsg))
            {
                MessageBox.Show("错误:" + alertMsg);
            }
            else
            {
                MessageBox.Show("已处理");
            }
            //var alertMsg = "";
            //CC_DataProcess_RobotBuffer_ForceOutbound.Handler(packageCode, ref alertMsg);
            //if (!string.IsNullOrEmpty(alertMsg))
            //{
            //    MessageBox.Show("错误:" + alertMsg);
            //}
            //else
            //{
            //    MessageBox.Show("已处理");
            //}
        }
        private void button25_Click(object sender, EventArgs e)
@@ -1531,5 +1360,101 @@
                MessageBox.Show("已处理");
            }
        }
        private void btn1_Click(object sender, EventArgs e)
        {
            var taskNo = this.tb_taskNo.Text.Trim();
            var alertMsg = "";
            using (WmsDBModel wmsDB = new WmsDBModel())
            {
                var task = wmsDB.wms_rbline_task.Where(x => x.TaskNo == taskNo && x.RbTaskType == (int)RbTaskTypeEnum.入库任务 && x.TaskStatus == (int)TaskStatusEnum.已下发).FirstOrDefault();
                if (task == null)
                {
                    MessageBox.Show("没找到任务");
                    return;
                }
                var upiCode = task.Upi;
                var upiObj = wmsDB.mes_batchOrderUPI_new.Where(x => x.UPI == upiCode).FirstOrDefault();
                if (upiObj == null)
                {
                    MessageBox.Show($"根据UPI:{upiCode}没有找到对象 ");
                    return;
                }
                //增加库存
                wms_stock_quan qun = new wms_stock_quan()
                {
                    Id = Yitter.IdGenerator.YitIdHelper.NextId(),
                    Shelf = upiObj.Shelf,
                    Upi = upiCode,
                    PlanNo = task.PlanNo,
                    DetailName = upiObj.DetailName,
                    OrderId = task.OrderId,
                    CreateTime = DateTime.Now,
                    CreateUserName = SysGloble.WCSSystem,
                    InTime = DateTime.Now,
                    OperReason = "入库",
                    PackageCode = task.PackageCode,
                    Length = task.Length,
                    Width = task.Width,
                    Thk = task.Thk,
                    PlaceCode = task.PlaceCode,
                    StockStatus = (int)StockStatusEnum.在库,
                    StockStatusName = StockStatusEnum.在库.ToString(),
                };
                wmsDB.wms_stock_quan.Add(qun);
                task.TaskStatus = (int)TaskStatusEnum.已完成;
                task.FinishedTime = DateTime.Now;
                var place = StationHandler.GetPlaceByPlaceCode(task.PlaceCode, wmsDB);
                place.PlaceStatus = (int)PlaceStatusEnum.正常;
                WmsRecordUpiProcessHandler.SaveWmsRecordUpiProcess(wmsDB, upiObj, task.PlaceCode, "缓存入库完成:" + task.PlaceCode);
                wmsDB.SaveChanges();
            }
            if (!string.IsNullOrEmpty(alertMsg))
            {
                MessageBox.Show("错误:" + alertMsg);
            }
            else
            {
                MessageBox.Show("已处理");
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //更新库存表中的次序字段
            var alertMsg = "";
            using (WmsDBModel db = new WmsDBModel())
            {
                //查询立体库中的upi列表
                var quanList = db.wms_stock_quan.ToList();
                var query_quanList = quanList.Select(x => x.Upi).ToList();
                var upiList = db.mes_batchOrderUPI_new.Where(x => query_quanList.Contains(x.UPI)).ToList();
                foreach (var item in quanList)
                {
                    var _shelf = upiList.Find(x => x.UPI == item.Upi);
                    item.Shelf = _shelf.Shelf;
                }
                db.SaveChanges();
            }
            if (!string.IsNullOrEmpty(alertMsg))
            {
                MessageBox.Show("错误:" + alertMsg);
            }
            else
            {
                MessageBox.Show("已处理");
            }
        }
    }
}