杨张扬
2025-06-12 52adedb218549cde2bdc60c3b338e360e72d94a6
api/ApiHelper.cs
@@ -161,7 +161,10 @@
                    cG_Detail.N_ITEM_STATE = 0;
                    cG_Detail.S_ITEM_STATE = "合格";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[1] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[1]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                             && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 4)//技术合格回库
@@ -169,7 +172,10 @@
                    cG_Detail.N_ITEM_STATE = 4;
                    cG_Detail.S_ITEM_STATE = "技术合格";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[8] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[8]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                            && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 2)//不合格回炉
@@ -177,7 +183,10 @@
                    cG_Detail.N_ITEM_STATE = 2;
                    cG_Detail.S_ITEM_STATE = "不合格";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[8] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[8]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                            && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 5)//混合也回库,通过点对点再发线边
@@ -185,7 +194,10 @@
                    cG_Detail.N_ITEM_STATE = 5;
                    cG_Detail.S_ITEM_STATE = "混合";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[2]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                            && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 6)//一级料二级料回库
@@ -193,7 +205,10 @@
                    cG_Detail.N_ITEM_STATE = 6;
                    cG_Detail.S_ITEM_STATE = "一级料";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[2]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                            && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else if (model.cgState == 7)//一级料二级料回库
@@ -201,7 +216,10 @@
                    cG_Detail.N_ITEM_STATE = 7;
                    cG_Detail.S_ITEM_STATE = "二级料";
                    endLoc = db.Queryable<TN_Location>().
                            Where(o => o.S_AREA_CODE == Settings.Areas[2] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            Where(o => o.S_AREA_CODE == Settings.Areas[2]
                            && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                            && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                            && o.C_ENABLE == "Y" && o.N_CURRENT_NUM == 0).
                            OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位
                }
                else
@@ -230,7 +248,13 @@
                    LocationHelper.LockLoc(endLoc.S_CODE, 1);//终点入库锁
                    LogHelper.Info($"生成{typeName}任务成功,容器号{locCnt.S_CNTR_CODE},起点{startLoc.S_CODE},终点{endLoc.S_CODE}");
                    db.Updateable<TN_CG_Detail>().UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand();
                    if( db.Updateable<TN_CG_Detail>(cG_Detail).UpdateColumns(it => new { it.S_ITEM_STATE, it.N_ITEM_STATE }).ExecuteCommand() <= 0)
                    {
                        result.resultCode = 5;
                        result.resultMsg = $"更新容器{locCnt.S_CNTR_CODE}的货品明细失败";
                        LogHelper.Info(result.resultMsg);
                        return result;
                    }
                    Task task99 = Task.Run(() =>
                    {
@@ -320,7 +344,13 @@
                    return result;
                }
                var endLoc = db.Queryable<TN_Location>().First(o =>o.S_AREA_CODE == Settings.Areas[11] && o.N_CURRENT_NUM == 0 && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无");
                var endLoc = db.Queryable<TN_Location>().
                    Where(o =>o.S_AREA_CODE == Settings.Areas[11]
                    && o.N_CURRENT_NUM == 0
                    && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                    && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                    ).First();
                if (endLoc == null)
                {
                    result.resultCode = 2;
@@ -359,7 +389,7 @@
                endLoc.N_LOCK_STATE = 1;
                endLoc.S_LOCK_STATE = "入库锁";
                startLoc.T_MODIFY = System.DateTime.Now;
                endLoc.T_MODIFY = System.DateTime.Now;
                using (var tran = db.Ado.UseTran())
                {
@@ -654,15 +684,15 @@
            LogHelper.Info("触发API:PDA满托下线入库" + JsonConvert.SerializeObject(model), "API");
            try
            {
                if( model.RfId.Length < 16)
                {
                    result.resultCode = 1;
                    result.resultMsg = $"输入的RFID,长度不够,要大于16位";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }
                //if( model.RfId.Length < 16)
                //{
                //    result.resultCode = 1;
                //    result.resultMsg = $"输入的RFID,长度不够,要大于16位";
                //    LogHelper.Info(result.resultMsg);
                //    return result;
                //}
                model.RfId = WMSHelper.ConvertHexToAscii(model.RfId);
                //model.RfId = WMSHelper.ConvertHexToAscii(model.RfId);
                //该产线的满托下线位置,起点
                var startPoint = Settings.ProductionLines.FirstOrDefault(a => a.PointOut == model.StartLoc);
@@ -728,7 +758,11 @@
                                };
                                var endLoc = db.Queryable<TN_Location>().
                                                      Where(c => c.S_AREA_CODE == Settings.Areas[1] && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0 && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y").
                                                      Where(c => c.S_AREA_CODE == Settings.Areas[1]
                                                      && c.S_LOCK_STATE == "无" && c.N_LOCK_STATE == 0
                                                      && c.N_CURRENT_NUM == 0 && c.C_ENABLE == "Y"
                                                      && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == c.S_CODE).NotAny()//不能有货
                                                      ).
                                                      OrderBy(o => o.T_MODIFY, OrderByType.Asc).First();//查询合适的终点货位,直接判断当前数量为0即可
                                if (endLoc != null)
@@ -969,7 +1003,7 @@
                        return result;
                    }
                    if (endLoc.N_CURRENT_NUM != 0)
                    if (endLoc.N_CURRENT_NUM != 0 || db.Queryable<TN_Loc_Container>().Any(b => b.S_LOC_CODE == model.EndLoc))//不能有货
                    {
                        result.resultCode = 5;
                        result.resultMsg = $"该终点货位{model.EndLoc}已满";
@@ -1264,7 +1298,9 @@
                //查询符合的未锁定已启用指定货区的货位,终点
                var endLoc = db.Queryable<TN_Location>().
                          First(o => o.S_AREA_CODE == Settings.Areas[9] && o.S_CODE == weightPoint && o.C_ENABLE == "Y");//查询合适的终点货位
                          First(o => o.S_AREA_CODE == Settings.Areas[9]
                          && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()
                          && o.S_CODE == weightPoint && o.C_ENABLE == "Y");//查询合适的终点货位
                if (endLoc == null)
                {
@@ -1590,10 +1626,14 @@
                }
                var endLoc_Ok = db.Queryable<TN_Location>().
                          First(o => o.S_AREA_CODE == Settings.Areas[9] && o.S_CODE == weightPoint);//查询合适的终点货位,去称重
                          First(o => o.S_AREA_CODE == Settings.Areas[9]
                          && o.S_CODE == weightPoint);//查询合适的终点货位,去称重
                var endLoc_NG = db.Queryable<TN_Location>().
                          First(o => o.S_AREA_CODE == Settings.Areas[8] && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无" && o.N_CURRENT_NUM == 0);//查询合适的终点货位
                          Where(o => o.S_AREA_CODE == Settings.Areas[8]
                          && o.N_LOCK_STATE == 0 && o.S_LOCK_STATE == "无"
                          && SqlFunc.Subqueryable<TN_Loc_Container>().Where(b => b.S_LOC_CODE == o.S_CODE).NotAny()//不能有货
                          && o.N_CURRENT_NUM == 0).First();//查询合适的终点货位
                if (endLoc_Ok == null)
                {
@@ -1820,10 +1860,10 @@
                var endLoc = db.Queryable<TN_Location>().First(a => a.S_CODE == model.endLoc);
                if (!(endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == "无"))
                if (!(endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == "无") || db.Queryable<TN_Loc_Container>().Any(a=>a.S_LOC_CODE == endLoc.S_CODE))
                {
                    result.resultCode = 2;
                    result.resultMsg = $"终点位置{model.endLoc}不满足条件:endLoc != null && endLoc.N_CURRENT_NUM == 0 && endLoc.N_LOCK_STATE == 0 && endLoc.S_LOCK_STATE == 无";
                    result.resultMsg = $"终点位置{model.endLoc}已锁住或已满";
                    LogHelper.Info(result.resultMsg);
                    return result;
                }