杨张扬
3 天以前 77b654d928c34d32462e212a4ec212f7cc48b50f
wms/SpecHelper.cs
@@ -77,7 +77,7 @@
                var log = JsonConvert.SerializeObject(model);
                if (model != null)
                {
                    model.Expiration = System.DateTime.Now.AddMinutes(GetExportTime(model.Spec));
                    model.EXPIRATION = System.DateTime.Now.AddHours(GetExportTime(model.SPEC));
                    if (db.Insertable<TN_EquipProDetail>(model).ExecuteCommand() > 0)
                    {
@@ -87,27 +87,6 @@
                    {
                        LogHelper.Info($"插入设备生产明细失败,{log}");
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("插入设备生产明细失败", ex);
            }
        }
        /// <summary>
        /// 更新设备生产明细的过期时间
        /// </summary>
        public static void UpdateEquipProDetail(string cg_SID)
        {
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target = db.Queryable<TN_EquipProDetail>().First(a => a.S_ID == cg_SID);
                if (target != null)
                {
                    target.Expiration = System.DateTime.Now.AddMinutes(GetExportTime(target.Spec));
                    db.Updateable<TN_EquipProDetail>().UpdateColumns(it => new { it.Expiration }).ExecuteCommand();
                }
            }
            catch (Exception ex)
@@ -129,8 +108,8 @@
                var log = JsonConvert.SerializeObject(model);
                if (model != null)
                {
                    model.OutAreaTime = System.DateTime.Now;
                    model.Type = "满托出库上线";
                    model.OUTAREATIME = System.DateTime.Now;
                    model.TYPE = "满托出库上线";
                    if (db.Insertable<TN_Component_Detail>(model).ExecuteCommand() > 0)
                    {
@@ -156,11 +135,11 @@
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target  = db.Queryable<TN_Component_Detail>().First(o => o.TaskNo == taskNo);
                var target  = db.Queryable<TN_Component_Detail>().First(o => o.TASKNO == taskNo);
                if (target != null)
                {
                    target.EndTime = System.DateTime.Now;
                    target.ENDTIME = System.DateTime.Now;
                    if (db.Updateable<TN_Component_Detail>(target).ExecuteCommand() > 0)
                    {
@@ -191,7 +170,7 @@
                var log = JsonConvert.SerializeObject(model);
                if (model != null)
                {
                    model.RemeltTime = System.DateTime.Now;
                    model.REMELTTIME = System.DateTime.Now;
                    if (db.Insertable<TN_RemeltDetail>(model).ExecuteCommand() > 0)
                    {
@@ -217,11 +196,11 @@
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target = db.Queryable<TN_RemeltDetail>().First(o => o.TaskNo == taskNo);
                var target = db.Queryable<TN_RemeltDetail>().First(o => o.TASKNO == taskNo);
                if (target != null)
                {
                    target.EndTime = System.DateTime.Now;
                    target.ENDTIME = System.DateTime.Now;
                    if (db.Updateable<TN_RemeltDetail>(target).ExecuteCommand() > 0)
                    {
@@ -252,7 +231,7 @@
                var log = JsonConvert.SerializeObject(model);
                if (model != null)
                {
                    model.RemeltTime = System.DateTime.Now;
                    model.REMELTTIME = System.DateTime.Now;
                    if (db.Insertable<TN_SurplusDetail>(model).ExecuteCommand() > 0)
                    {
@@ -278,11 +257,11 @@
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target = db.Queryable<TN_SurplusDetail>().First(o => o.TaskNo == taskNo);
                var target = db.Queryable<TN_SurplusDetail>().First(o => o.TASKNO == taskNo);
                if (target != null)
                {
                    target.EndTime = System.DateTime.Now;
                    target.ENDTIME = System.DateTime.Now;
                    if (db.Updateable<TN_SurplusDetail>(target).ExecuteCommand() > 0)
                    {
@@ -301,6 +280,94 @@
        }
        /// <summary>
        /// 重置终点货位,只针对去线边的货品和去原材料产线的空托
        /// </summary>
        /// <param name="tN_Task"></param>
        internal static void RestEndLoc(TN_Task tN_Task)
        {
            try
            {
                if (
                    tN_Task.S_END_AREA == Settings.Areas[2] || tN_Task.S_TYPE.Contains("满托出库上线") ||
                    Settings.ProductionLines.Select(a=>a.PointIn).ToList().Contains(tN_Task.S_END_LOC) ||
                    tN_Task.S_TYPE.Contains("线边空托上线")
                    )
                {
                    var db = new SqlHelper<object>().GetInstance();
                    using (var tran = db.Ado.UseTran())
                    {
                        var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == tN_Task.S_END_LOC);
                        if (endLoc != null)
                        {
                            endLoc.N_CURRENT_NUM = 0;
                            endLoc.N_LOCK_STATE = 0;
                            endLoc.S_LOCK_STATE = "无";
                            if (db.Updateable<TN_Location>(endLoc).UpdateColumns(it => new { it.N_CURRENT_NUM, it.N_LOCK_STATE, it.S_LOCK_STATE }).ExecuteCommand() > 0)
                            {
                                LogHelper.Info($"更新终点货位成功,{JsonConvert.SerializeObject(endLoc)}");
                            }
                            else
                            {
                                LogHelper.Info($"更新终点货位失败,{JsonConvert.SerializeObject(endLoc)}");
                                tran.RollbackTran();
                                return;
                            }
                            var locCnt = db.Queryable<TN_Loc_Container>().First(a => a.S_LOC_CODE == endLoc.S_CODE);
                            if (locCnt != null)
                            {
                                var cgInfo = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == locCnt.S_CNTR_CODE);
                                if (db.Deleteable<TN_Loc_Container>(locCnt).ExecuteCommand() > 0)
                                {
                                    LogHelper.Info($"删除货位容器绑定关系成功,{JsonConvert.SerializeObject(locCnt)}");
                                }
                                else
                                {
                                    LogHelper.Info($"删除货位容器绑定关系失败,{JsonConvert.SerializeObject(locCnt)}");
                                    tran.RollbackTran();
                                    return;
                                }
                                if (cgInfo != null)
                                {
                                    if (db.Deleteable<TN_CG_Detail>(cgInfo).ExecuteCommand() > 0)
                                    {
                                        LogHelper.Info($"删除容器货品明细成功,{JsonConvert.SerializeObject(cgInfo)}");
                                    }
                                    else
                                    {
                                        LogHelper.Info($"删除容器货品明细失败,{JsonConvert.SerializeObject(cgInfo)}");
                                        tran.RollbackTran();
                                        return;
                                    }
                                }
                            }
                        }
                        tran.CommitTran();
                        LogHelper.Info($"重置终点货位,成功,{JsonConvert.SerializeObject(tN_Task)}");
                        return;
                    }
                }
                else
                {
                    LogHelper.Info($"当前任务终点货位不是去线边,不需要重置终点货位,{JsonConvert.SerializeObject(tN_Task)}");
                    return;
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("重置终点货位,只针对去线边的货品 失败", ex);
            }
        }
        /// <summary>
        /// 更新余料回库明细
        /// </summary>
        public static void UpdateSurplusDetail(string taskNo,float weight)
@@ -308,11 +375,11 @@
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target = db.Queryable<TN_SurplusDetail>().First(o => o.TaskNo == taskNo);
                var target = db.Queryable<TN_SurplusDetail>().First(o => o.TASKNO == taskNo);
                if (target != null)
                {
                    target.Weight = weight;
                    target.WEIGHT = weight;
                    if (db.Updateable<TN_SurplusDetail>(target).ExecuteCommand() > 0)
                    {
                        LogHelper.Info($"更新余料回库明细成功,{taskNo}");
@@ -342,13 +409,8 @@
                if (model != null)
                {
                    var target = db.Queryable<TN_InventoryM>().First(o => o.RFID == model.RFID);
                    if (target != null)
                    {
                        db.Deleteable<TN_InventoryM>(target).ExecuteCommand();
                    }
                    model.Expiration = System.DateTime.Now.AddMinutes(GetExportTime(model.Spec));
                    if (db.Insertable<TN_InventoryM>(model).ExecuteCommand() > 0)
                    model.EXPIRATION = System.DateTime.Now.AddHours(GetExportTime(model.SPEC));
                    if (db.Storageable<TN_InventoryM>(model).ExecuteCommand() > 0)
                    {
                        LogHelper.Info($"插入WMS库存明细成功,{log}");
                    }
@@ -364,25 +426,108 @@
            }
        }
        /// <summary>
        /// 更新WMS库存明细的过期时间
        /// 更新WMS库存明细的入库时间
        /// </summary>
        public static void UpdateInventoryM(string cg_SID)
        public static void UpdateInventoryM_RuKu(string cntId)
        {
            try
            {
                var db = new SqlHelper<object>().GetInstance();
                var target = db.Queryable<TN_InventoryM>().First(a => a.S_ID == cg_SID);
                var target = db.Queryable<TN_CG_Detail>().First(a => a.S_CNTR_CODE == cntId);
                if (target != null)
                {
                    target.Expiration = System.DateTime.Now.AddMinutes(GetExportTime(target.Spec));
                    db.Updateable<TN_InventoryM>().UpdateColumns(it => new { it.Expiration }).ExecuteCommand();
                    var targetM = db.Queryable<TN_InventoryM>().First(a => a.S_ID == target.S_ID || a.RFID == cntId);
                    if (targetM != null)
                    {
                        targetM.INAREATIME = System.DateTime.Now;
                        if(db.Updateable<TN_InventoryM>(targetM).UpdateColumns(it => new { it.INAREATIME }).ExecuteCommand() > 0)
                        {
                            LogHelper.Info($"更新WMS库存明细的入库时间,成功,容器号:{cntId}");
                        }
                        else
                        {
                            LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId}");
                        }
                    }
                    else
                    {
                        LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_InventoryM为空");
                    }
                }
                else
                {
                    LogHelper.Info($"更新WMS库存明细的入库时间,失败,容器号:{cntId},TN_CG_Detail为空");
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("插入设备生产明细失败", ex);
                LogHelper.Error("更新WMS库存明细的入库时间失败", ex);
            }
        }
        /// <summary>
        /// 删除WMS库存明细
        /// </summary>
        public static void DeleteInventoryM(TN_Task taskTn)
        {
            try
            {
                if (taskTn.S_START_AREA == Settings.Areas[1] || taskTn.S_TYPE.Contains("满托出库上线")) //不是从满托缓存库区移出就不删除
                {
                    var db = new SqlHelper<object>().GetInstance();
                    if (db.Deleteable<TN_InventoryM>().Where(it => it.S_ID == taskTn.S_ID || it.RFID == taskTn.S_CNTR_CODE).ExecuteCommand() > 0)
                    {
                        LogHelper.Info($"删除WMS库存明细,成功,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    }
                    else
                    {
                        LogHelper.Info($"删除WMS库存明细,失败,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    }
                }
                else
                {
                    LogHelper.Info($"不是从满托缓存库区搬出的货位,不需要删除库存明细,物料主键:{taskTn.S_ID},容器号:{taskTn.S_CNTR_CODE}");
                    return;
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error("删除WMS库存明细", ex);
            }
        }
        /// <summary>
        /// 计算时间差
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public static int CalculateDaysDifference(DateTime start, DateTime end)
        {
            try
            {
                // 计算总时间差
                TimeSpan difference = end - start;
                // 如果差值为负(end早于start),返回0
                if (difference.TotalDays < 0)
                {
                    return 0;
                }
                // 获取总小时数(包括小数部分)
                double totalHours = difference.TotalHours;
                // 向上取整
                return (int)Math.Ceiling(totalHours);
            }
            catch (Exception ex)
            {
                return 0;
            }
        }
    }