using HH.WCS.Mobox3.FJJF.models;
using HH.WCS.Mobox3.FJJT.models;
using HH.WCS.Mobox3.FJJT.models.other;
using HH.WCS.Mobox3.FJJT.util;
using Newtonsoft.Json;
using NLog.Fluent;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.ConstrainedExecution;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using static HH.WCS.Mobox3.FJJT.api.ApiModel;
using static HH.WCS.Mobox3.FJJT.util.Settings;
namespace HH.WCS.Mobox3.FJJT.wms {
///
/// wms管到作业
///
internal class WMSHelper {
internal static string GenerateTaskNo() {
var id = SYSHelper.GetSerialNumber("作业号", "OP");
var date = DateTime.Now.ToString("yyMMdd");
return $"OP{date}{id.ToString().PadLeft(4, '0')}";
}
internal static string GenerateSortingNo() {
var id = SYSHelper.GetSerialNumber("分拣单", "SO");
var date = DateTime.Now.ToString("yyMMdd");
return $"SO{date}{id.ToString().PadLeft(4, '0')}";
}
internal static string GenerateAlarmNo()
{
var id = SYSHelper.GetSerialNumber("报警记录单", "AL");
var date = DateTime.Now.ToString("yyMMdd");
return $"AL{date}{id.ToString().PadLeft(4, '0')}";
}
internal static string GenerateTempCntrNo()
{
var id = SYSHelper.GetSerialNumber("临时容器号", "CN");
var date = DateTime.Now.ToString("yyMMdd");
return $"CN{date}{id.ToString().PadLeft(4, '0')}";
}
internal static List GetOperationListByState(string state) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList();
}
internal static List GetOperationListByState(int state) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.N_B_STATE == state && a.S_FACTORY == Settings.FacCode).ToList();
}
internal static List GetWaitingOperationList() {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => (a.N_B_STATE == 0 || a.N_B_STATE == 3) && a.S_FACTORY == Settings.FacCode).ToList();
}
internal static bool CreateWmsTask(WMSTask wmsTask) {
try {
var db = new SqlHelper().GetInstance();
return db.Insertable(wmsTask).ExecuteCommand() > 0;
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
throw;
}
}
internal static bool DeleteWmsTask(string code)
{
try
{
var db = new SqlHelper().GetInstance();
return db.Deleteable().Where(a => a.S_CODE == code).ExecuteCommand() > 0;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
internal static WMSTask GetAwaitWmsTaskByMaterialCode(string materialCode) {
WMSTask wmsTask = null;
var db = new SqlHelper().GetInstance();
var wmsTaskList = db.Queryable()
.LeftJoin((a,b) => a.S_CNTR_CODE == b.S_CNTR_CODE)
.Where((a, b) => a.N_B_STATE == 1 && b.S_ITEM_CODE.Trim() == materialCode && a.S_TYPE.Trim() == "叫料出库任务").ToList();
foreach (var task in wmsTaskList)
{
var result = db.Queryable().Where(a => a.S_OP_CODE == task.S_CODE && a.N_B_STATE > 0).Count() == 0;
if (result)
{
wmsTask = task;
return wmsTask;
}
}
return wmsTask;
}
internal static WMSTask GetWmsTaskByCntr(string cntr, bool active = true)
{
WMSTask result = null;
var db = new SqlHelper().GetInstance();
if (active)
{
result = db.Queryable().Where(a => a.S_CNTR_CODE.Contains(cntr) && a.N_B_STATE < 2).First();
}
else
{
result = db.Queryable().Where(a => a.S_CNTR_CODE.Contains(cntr)).First();
}
return result;
}
internal static Location GetEnd(WMSTask a) {
throw new NotImplementedException();
}
internal static Location GetStart(WMSTask a) {
throw new NotImplementedException();
}
internal static void UpdateTaskState(WMSTask task) {
var db = new SqlHelper().GetInstance();
task.T_MODIFY = DateTime.Now;
task.S_B_STATE = WMSTask.GetStateStr(task.N_B_STATE);
db.Updateable(task).UpdateColumns(a => new { a.N_TYPE,a.N_B_STATE, a.S_B_STATE, a.T_MODIFY,a.T_END_TIME }).ExecuteCommand();
}
internal static bool UpdateTaskEnd(WMSTask a) {
var db = new SqlHelper().GetInstance();
a.T_MODIFY = DateTime.Now;
return db.Updateable(a).UpdateColumns(it => new { it.S_TYPE,it.S_END_LOC,it.S_END_AREA, it.T_MODIFY }).ExecuteCommand() > 0;
}
internal static WMSTask GetWmsTask(string code) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_CODE.Trim() == code).First();
}
internal static WMSTask GetWmsTaskByEnd(string endLoc)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_END_LOC.Trim() == endLoc && a.N_B_STATE < 2).First();
}
internal static WMSTask GetWmsTaskByStart(string startLoc)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_START_LOC.Trim() == startLoc && a.N_B_STATE < 2).First();
}
internal static bool isFinishTask(string wmsTaskNo)
{
bool result = false;
var db = new SqlHelper().GetInstance();
result = db.Queryable().Where(a => a.S_OP_CODE.Trim() == wmsTaskNo && a.N_B_STATE < 3).Count() == 0;
return result;
}
///
///
///
///
///
public static string getReturnMaterialLocCode(string locCode)
{
var db = new SqlHelper().GetInstance();
var returnMaterialLoc = db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
if (returnMaterialLoc != null) {
return returnMaterialLoc.S_RETURN_LOC_CODE;
}
return null;
}
// --------------------------------------------------------福建佳通-----------------------------------------
///
/// 查询逻辑配置表
///
/// 任务类型
///
internal static List getLogicConfigByTaskType(string taskType)
{
var db = new SqlHelper().GetInstance();
var logicConfigList = db.Queryable()
.Where(a => a.S_TASK_TYPE.Trim() == taskType && a.S_ENABLE.Trim() == "是")
.OrderBy(a => a.S_PRI)
.ToList();
return logicConfigList;
}
///
/// 查询逻辑配置表
///
/// 补空缓存位
///
internal static LogicConfig getLogicConfigByHcLoc(string hcLocCode)
{
var db = new SqlHelper().GetInstance();
var logicConfig = db.Queryable()
.Where(a => a.S_LKBKHCLOC.Trim() == hcLocCode && a.S_ENABLE.Trim() == "是")
.OrderBy(a => a.S_PRI)
.First();
return logicConfig;
}
///
/// 查询逻辑配置表
///
/// 满料接驳位
///
internal static LogicConfig getLogicConfigByMtjbLoc(string mtjbLoc)
{
var db = new SqlHelper().GetInstance();
var logicConfig = db.Queryable()
.Where(a => a.S_MTJBLOC.Trim() == mtjbLoc && a.S_ENABLE.Trim() == "是")
.OrderBy(a => a.S_PRI)
.First();
return logicConfig;
}
///
/// 查询逻辑配置表
///
///
///
internal static LogicConfig getLogicConfigByJtCode(string jtCode)
{
var db = new SqlHelper().GetInstance();
var logicConfig = db.Queryable()
.Where(a => a.S_JT_CODE.Trim() == jtCode && a.S_ENABLE.Trim() == "是")
.OrderBy(a => a.S_PRI)
.First();
return logicConfig;
}
///
/// 查询出库开始起点
/// 注:需过滤堆垛机故障的巷道
///
///
/// 0.默认、1.异常
///
///
///
internal static Location getOutStockStartLoc(string areaCode ,string materialCode,int traySatus = 0, string trayCode = "")
{
Location loc = null;
var db = new SqlHelper().GetInstance();
var queryable = db.Queryable()
.LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE)
.LeftJoin((a, b, c) => b.S_CNTR_CODE == c.S_CODE)
.LeftJoin((a, b, c, d) => c.S_CODE == d.S_CNTR_CODE)
.Where((a, b, c, d) => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE.Trim() == "Y" );
if (areaCode != null && areaCode != "")
{
queryable = queryable.Where((a, b, c, d ) => a.S_AREA_CODE.Trim() == areaCode);
}
if (traySatus == 0)
{
queryable = queryable.Where((a, b, c, d) => c.N_E_STATE == 0);
}
else if (traySatus == 1)
{
queryable = queryable.Where((a, b, c, d) => c.N_E_STATE != 0);
}
if (materialCode != null && materialCode != "")
{
queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE.Trim() == materialCode);
}
else
{
queryable = queryable.Where((a, b, c, d) => d.S_ITEM_CODE == null);
}
if (trayCode != null && trayCode != "")
{
queryable = queryable.Where((a, b, c, d) => b.S_CNTR_CODE.Trim() == trayCode);
}
loc = queryable.OrderBy((a, b, c, d) => d.T_INBOUND_TIME).First();
return loc;
}
///
/// 查询入库终点货位
///
///
/// 0.空车 1.满车
///
///
internal static Location getInStockEndLoc(string areaCode,int trayStatus, int trayType = 0)
{
LogHelper.Info("开始查询立库终点货位", "WMS");
Location location = null;
var db = new SqlHelper().GetInstance();
try
{
string S_ZONE_CLS_CODE = "";
if (trayStatus == 0)
{
S_ZONE_CLS_CODE = "KT";
}
else if (trayStatus == 1)
{
S_ZONE_CLS_CODE = "ML";
}
if (areaCode == null)
{
if (trayType != 0)
{
// 根据托盘类型查询对应的立库编码
List areaCodes = Settings.getCntrAreaList(trayType);
LogHelper.Info($"托盘类型对应的库区:{JsonConvert.SerializeObject(areaCodes)}", "WMS");
// 计算立库的容积率,取容积率最大的库区
var areaList = db.Queryable()
.LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE)
.LeftJoin((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
.Where((a, b, c) => areaCodes.Contains(a.S_AREA_CODE.Trim()) && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE.Trim() == S_ZONE_CLS_CODE)
.GroupBy((a, b, c) => a.S_AREA_CODE)
.Select((a, b, c) => new
{
S_AREA_CODE = a.S_AREA_CODE,
num = SqlFunc.AggregateCount(a.S_CODE)
})
.MergeTable()
.OrderByDescending(s => s.num)
.ToList();
LogHelper.Info($"按容积率排序的库区:{JsonConvert.SerializeObject(areaList)}", "WMS");
foreach (var item in areaList)
{
location = db.Queryable()
.LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE)
.LeftJoin((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
.Where((a, b, c) => a.S_AREA_CODE.Trim() == item.S_AREA_CODE.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE.Trim() == S_ZONE_CLS_CODE)
.OrderBy((a, b, c) => a.N_LAYER)
.First();
}
}
// 库区安全库存监测,并报警
/* var safety_Inventory = getSafetyInventory(areaCode,null, trayType.ToString());
if (safety_Inventory != null)
{
}*/
}
else
{
location = db.Queryable()
.LeftJoin((a, b) => a.S_CODE == b.S_LOC_CODE)
.LeftJoin((a, b, c) => b.S_ZONE_CODE == c.S_CODE)
.Where((a, b, c) => a.S_AREA_CODE.Trim() == areaCode && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && c.S_ZONE_CLS_CODE == S_ZONE_CLS_CODE)
.OrderBy((a, b, c) => a.N_LAYER)
.First();
}
LogHelper.Info($"查询结束,立库终点货位:{JsonConvert.SerializeObject(location)}","WMS");
}
catch (Exception ex)
{
LogHelper.Info($"WMS内部错误:查询入库终点货位(getInStockEndLoc)错误,错误原因:{ex.Message}", "WMS");
throw ex;
}
return location;
}
public static bool addAlarmRecord(string alarmType , string alarmLevel ,string alarmMsg ,string logSite = "WMS") {
var db = new SqlHelper().GetInstance();
bool result = true;
LogHelper.Info(alarmMsg, logSite);
var alarmRecord = db.Queryable().Where(a => a.N_IS_READ == 0 && a.S_ALARM_MSG == alarmMsg).First();
if (alarmRecord == null)
{
alarmRecord = new AlarmRecord()
{
S_ALARM_CODE = GenerateAlarmNo(),
S_ALARM_TYPE = alarmType,
S_ALARM_LEVEL = alarmLevel,
S_ALARM_MSG = alarmMsg,
S_FILE_NAME = logSite,
};
result = db.Insertable(alarmRecord).ExecuteCommand() > 0;
}
return result;
}
public static bool addRfidAnomalyRecord(string rfid ,int anomalyType ,string locCode ,string taskNo)
{
var db = new SqlHelper().GetInstance();
RfidAnomalyRecord anomalyRecord = new RfidAnomalyRecord()
{
S_RFID = rfid,
N_ANOMALY_TYPE = anomalyType,
S_ANOMALY_TYPE = RfidAnomalyRecord.getAnomalyType(anomalyType),
S_LOC_CODE = locCode,
S_TASK_NO = taskNo
};
return db.Insertable(anomalyRecord).ExecuteCommand() > 0;
}
///
/// 查询成型机线边
///
///
///
public static SideLocConfig GetLineSideLoc(string locCode)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
}
///
/// 获取异常库货位
///
///
///
public static Location getAbnormalAreaLoc(string areaCode)
{
Location loc = null;
var db = new SqlHelper().GetInstance();
loc = db.Queryable()
.LeftJoin((a, b) => a.S_AREA_CODE == b.S_SUP_AREA)
.Where((a, b) => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y" && b.S_AREA_CODE.Trim() == areaCode)
.First();
return loc;
}
///
/// 查询接驳位关联属性
///
///
///
public static TransfeRelevance GetTransfeRelevance(string locCode) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_LOC_CODE.Trim() == locCode).First();
}
///
/// 查询接驳位关联属性
/// 注:
/// 1.查询异常区货位
///
/// 库区
/// 货位属性(1.直连 2.非直连)
/// 动作类型(0.人工接驳位 1.入库接驳位 2.出库接驳位)
///
public static Location GetTransfeRelevanceLoc(string areaCode ,int type ,int property )
{
Location loc = null;
var db = new SqlHelper().GetInstance();
loc = db.Queryable()
.LeftJoin((a,b)=> a.S_CODE == b.S_LOC_CODE)
.Where((a, b) => b.S_RELE_AREA.Trim() == areaCode && b.N_PROPERTY == property && b.N_TYPE == type && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y")
.First();
return loc;
}
///
/// 查询接驳位关联属性
///
///
/// 货位属性 (0.非人工 1.人工)
///
public static bool updateTransfeLocProperty(string locCode ,int isManual)
{
bool result = false;
var db = new SqlHelper().GetInstance();
result = db.Updateable().SetColumns(a => new TransfeRelevance() { N_IS_MANUAL = isManual } ).Where(a => a.S_LOC_CODE.Trim() == locCode).ExecuteCommand() > 0;
return result;
}
///
/// 查询立库接驳位
/// 注:查询任务最少的接驳位
///
/// 库区
/// 货位属性 ( 1.直连 2.非直连)
/// 动作类型 (1.入库接驳位 2.出库接驳位)
///
public static Location GetMinTaskTransfeLoc(string areaCode ,int type, int property)
{
var db = new SqlHelper().GetInstance();
var loc = db.Queryable()
.LeftJoin((a,b) => a.S_CODE == b.S_LOC_CODE)
.LeftJoin((a,b,c) => a.S_CODE == c.S_END_LOC && c.N_B_STATE < 3)
.Where((a, b, c) => b.S_RELE_AREA.Trim() == areaCode && b.N_TYPE == type && b.N_PROPERTY == property && a.N_LOCK_STATE < 3 && a.C_ENABLE == "Y")
.GroupBy((a, b, c) => a.S_CODE)
.Select((a, b, c) => new {
count = SqlFunc.AggregateCount(c.S_END_LOC),
code = a.S_CODE.Trim()
})
.MergeTable() //需要加MergeTable才能排序统计过的列
.OrderBy(it => it.count)
.First();
if (loc != null)
{
return LocationHelper.GetLoc(loc.code);
}
return null;
}
///
/// 查询物料信息
///
///
///
public static TN_Material GetMaterial(string materialCode) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.S_ITEM_CODE.Trim() == materialCode).First();
}
///
/// 查询安全库存
///
public static Safety_Inventory getSafetyInventory(string areaCode, string materialCode ,string trayType)
{
var db = new SqlHelper().GetInstance();
var query = db.Queryable().Where(a => a.S_AREA_CODE.Trim() == areaCode);
if (materialCode != null)
{
query = query.Where(a => a.S_MATERIAL_CODE == materialCode);
}
if (trayType != null)
{
query = query.Where(a => a.S_PALLET_TYPE == trayType);
}
return query.First();
}
//------------------------------------------------MES中间表-----------------------------------------------
///
/// 读取MES下料任务
/// 1.备份容器物料信息
/// 2.更新中间表状态为已读
///
///
///
///
internal static LjMesTask readLjMesOffItemTask(string taskNo , int id)
{
LogHelper.Info($"查询到MES下发WMS任务,mesTaskId:{id},任务号:{taskNo}" , "WMS");
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
// 1.查询MES任务表
var mesTask = db.Queryable().Where(a => a.ID == id && a.RECEIVE_FLAG.Trim() == "PENDING" ).OrderByDescending(a => a.T_CREATE).First();
if (mesTask != null)
{
// 重置空工装信息
ContainerHelper.AddContainer(mesTask.PALLET_ID, int.Parse(mesTask.PALLET_TYPE),mesTask.QTY == 0 ? 0 : 1);
mesTask.AGVORDER_ID = taskNo;
mesTask.RETURN_CODE = "1";
mesTask.RECEIVE_FLAG = "COMPLETE";
mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
db.Updateable(mesTask).ExecuteCommand();
}
else
{
LogHelper.Info("未查询到MES下发WMS任务", "WMS");
}
db.CommitTran();
return mesTask;
}
catch (Exception ex)
{
db.RollbackTran();
LogHelper.Info($"读取MES下发任务失败,错误原因:{ex.Message}" , "WMS");
WMSHelper.addAlarmRecord("系统错误", "高", $"读取MES下发任务失败,错误原因:{ex.Message}");
}
return null;
}
///
/// 更新托盘物料信息
///
public static void updatePalletAndMateral()
{
var db = new SqlHelper().GetInstance();
var lotCarrierList = db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList();
foreach (var lotCarrier in lotCarrierList)
{
CntrItemRel cntrItemRel = db.Queryable().Where(a => a.S_CNTR_CODE == lotCarrier.PALLET_ID).First();
if (cntrItemRel != null)
{
cntrItemRel.S_CNTR_CODE = lotCarrier.PALLET_ID;
cntrItemRel.S_BATCH_NO = lotCarrier.LOT_NAME;
cntrItemRel.S_SERIAL_NO = lotCarrier.YCL_BATCH;
cntrItemRel.S_ITEM_CODE = lotCarrier.MATERIALCODE;
cntrItemRel.F_QTY = lotCarrier.QTY;
cntrItemRel.D_PRD_DATE = lotCarrier.PRODUCTION_DATE;
cntrItemRel.S_ITEM_STATE = lotCarrier.QC_STATUS;
cntrItemRel.D_EXP_DATE = lotCarrier.SHELFLIFE_DATE;
cntrItemRel.D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE;
db.Updateable(cntrItemRel).ExecuteCommand();
}
else
{
cntrItemRel = new CntrItemRel()
{
S_CNTR_CODE = lotCarrier.PALLET_ID,
S_BATCH_NO = lotCarrier.LOT_NAME,
S_SERIAL_NO = lotCarrier.YCL_BATCH,
S_ITEM_CODE = lotCarrier.MATERIALCODE,
F_QTY = lotCarrier.QTY,
D_PRD_DATE = lotCarrier.PRODUCTION_DATE,
S_ITEM_STATE = lotCarrier.QC_STATUS,
D_EXP_DATE = lotCarrier.SHELFLIFE_DATE,
D_EXP_DATE1 = lotCarrier.MINSHELFLIFE_DATE,
};
db.Insertable(cntrItemRel).ExecuteCommand();
}
lotCarrier.RECEIVE_FLAG = "COMPLETE";
lotCarrier.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
db.Updateable(lotCarrier).UpdateColumns(a => new { a.RECEIVE_FLAG, a.RECEIVE_DATE }).ExecuteCommand();
}
}
///
/// 更新物料信息
///
public static void updateMateral()
{
var db = new SqlHelper().GetInstance();
var materialList = db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == "PENDING").ToList();
foreach (var item in materialList)
{
TN_Material material = db.Queryable().Where(a => a.S_ITEM_CODE == item.MATERIAL_CODE).First();
if (material != null)
{
material.S_ITEM_CODE = item.MATERIAL_CODE;
material.S_ITEM_NAME = item.MATERIAL_NAME;
material.S_SPEC = item.SPEC;
material.S_MODEL = item.MODEL;
material.S_UNIT = item.UNIT;
material.S_MEMO = item.MEMO;
db.Updateable(material).ExecuteCommand();
}
else
{
material = new TN_Material()
{
S_ITEM_CODE = item.MATERIAL_CODE,
S_ITEM_NAME = item.MATERIAL_NAME,
S_SPEC = item.SPEC,
S_MODEL = item.MODEL,
S_UNIT = item.UNIT,
S_MEMO = item.MEMO,
};
db.Insertable(material).ExecuteCommand();
}
item.RECEIVE_FLAG = "COMPLETE";
item.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
db.Updateable(item).ExecuteCommand();
}
}
///
/// 查询托盘物料信息
///
///
///
internal static LjLotCarrier getLjCntrMaterial(string trayNo)
{
// 1.查询MES任务表
var db = new SqlHelper().GetInstance();
var lotCarrier = db.Queryable().Where(a => a.PALLET_ID.Trim() == trayNo).First();
return lotCarrier;
}
///
/// 查询MES反料任务
///
///
///
internal static LjMesTask getLjMesTaskByCntr(string cntrCode)
{
// 1.查询MES任务表
var db = new SqlHelper().GetInstance();
var mesTask = db.Queryable().Where(a => a.PALLET_ID.Trim() == cntrCode && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First();
return mesTask;
}
///
/// 查询MES叫料任务
///
///
///
internal static LjMesTask getLjMesTaskByLoc(string positionId)
{
// 1.查询MES任务表
var db = new SqlHelper().GetInstance();
var mesTask = db.Queryable().Where(a => a.POSITION_ID.Trim() == positionId && a.RECEIVE_FLAG.Trim() == "PENDING").OrderByDescending(a => a.T_CREATE).First();
return mesTask;
}
///
/// 更新MES任务中间表
///
///
///
internal static bool updateLjMesTask(LjMesTask mesTask)
{
bool result = false;
var db = new SqlHelper().GetInstance();
mesTask.RECEIVE_FLAG = "COMPLETE";
mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
result = db.Updateable(mesTask).ExecuteCommand() > 0;
return result;
}
///
/// 读取MES叫料任务
/// 1.备份容器物料信息
/// 2.更新中间表状态为已读
///
///
///
///
internal static bool readLjMesCallItemTask(string taskNo, int id)
{
LogHelper.Info( $"读取MES叫料任务,任务号:{taskNo},MES下发任务ID:{id}", "WMS");
bool result = false;
var db = new SqlHelper().GetInstance();
try
{
db.BeginTran();
var mesTask = db.Queryable().Where(a => a.ID == id ).OrderByDescending(a => a.T_CREATE).First();
if (mesTask != null)
{
mesTask.AGVORDER_ID = taskNo;
mesTask.RETURN_CODE = "1";
mesTask.RECEIVE_FLAG = "COMPLETE";
mesTask.RECEIVE_DATE = DateTime.Now.ToString("yyyy-MM-dd");
result = db.Updateable(mesTask).ExecuteCommand() > 0;
}
else
{
LogHelper.Info("未查询到MES下发WMS任务", "WMS");
}
db.CommitTran();
}
catch (Exception ex)
{
db.RollbackTran();
LogHelper.Error("读取MES叫料任务,ERROR_MSG:" + ex.Message, ex, "WMS");
}
return result;
}
///
/// 查询MES任务表
///
///
///
public static LjMesTask GetLjMesTaskByAgvorderId(string taskNo) {
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.AGVORDER_ID.Trim() == taskNo).First();
}
///
/// 查询MES任务表
///
///
///
public static LjMesTask GetLjMesTaskById(int mesTaskId)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.ID == mesTaskId).First();
}
///
/// 查询MES任务表
///
/// 已读标识
///
public static List GetLjMesTaskList(string receiveFlag )
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.RECEIVE_FLAG.Trim() == receiveFlag ).ToList();
}
///
/// 更新MES任务状态
///
///
/// 0:默认值 1:任务已生成 2:任务运行中 3:任务完成 4:任务失败 5:任务取消 6:其他错误 等
///
///
public static bool updateMesTaskStatus(string taskNo, string status, string msg = "")
{
bool result = false;
var db = new SqlHelper().GetInstance();
result = db.Updateable().SetColumns(a => new LjMesTask() { RETURN_CODE = status , RECEIVE_MSG = msg}).Where(a => a.AGVORDER_ID.Trim() == taskNo).ExecuteCommand() > 0;
return result;
}
///
/// 更新出库任务中间表状态
///
///
/// 1:执行中,2:完成 等
///
public static bool updateMesOutTaskStatus(int taskNo, string status)
{
bool result = false;
var db = new SqlHelper().GetInstance();
result = db.Updateable().SetColumns(a => new LjLotOutTask() { TASK_STATUS = status }).Where(a => a.ID == taskNo).ExecuteCommand() > 0;
return result;
}
///
/// 添加库存表
///
///
///
public static bool addLjLotOnhand(LjLotOnhand ljLotOnhand) {
bool result = false;
var db = new SqlHelper().GetInstance();
ljLotOnhand.CREATION_DATE = DateTime.Now;
result = db.Insertable(ljLotOnhand).ExecuteCommand()>0;
return result;
}
///
/// 添加出库任务记录
///
///
///
public static bool addLotOutTask(string locCode) {
bool result = false;
var db = new SqlHelper().GetInstance();
var locCntrs = LocationHelper.GetLocCntr(locCode);
if (locCntrs != null && locCntrs.Count > 0)
{
LjLotOutTask ljLotOutTask = new LjLotOutTask()
{
PALLET_ID = locCntrs[0].S_CNTR_CODE,
POSITION_ID = locCntrs[0].S_LOC_CODE,
CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd"),
TASK_STATUS = "1" // 1.执行中
};
var cntrItems = ContainerHelper.GetCntrItemRel(locCntrs[0].S_CNTR_CODE);
if (cntrItems != null && cntrItems.Count > 0)
{
ljLotOutTask.MATERIAL_CODE = cntrItems[0].S_ITEM_CODE;
ljLotOutTask.LOT_NAME = cntrItems[0].S_BATCH_NO;
ljLotOutTask.QC_STATUS = cntrItems[0].S_ITEM_STATE;
ljLotOutTask.UNIT = cntrItems[0].S_UOM;
ljLotOutTask.QTY = (int)cntrItems[0].F_QTY;
}
result = db.Insertable(ljLotOutTask).ExecuteCommand() > 0;
}
return result;
}
///
/// 更新出库任务记录
///
///
///
///
public static bool updateLotOutTask(string cntrCode,string status)
{
bool result = false;
var db = new SqlHelper().GetInstance();
var ljLotOutTask = db.Queryable().Where(a => a.PALLET_ID == cntrCode && a.TASK_STATUS == "1").OrderByDescending(a => a.T_CREATE).First();
if (ljLotOutTask != null) {
ljLotOutTask.TASK_STATUS = status;
result = db.Updateable(ljLotOutTask).ExecuteCommand()>0;
}
return result;
}
// -----------------------------------------斜裁中间表----------------------------------------------
///
/// 下发XC任务
///
///
///
public static bool addLjXcTask(int mesTaksId)
{
bool result = false;
var db = new SqlHelper().GetInstance();
var ljMesTask = GetLjMesTaskById(mesTaksId);
if (ljMesTask != null) {
LjXcTask ljXcTask = new LjXcTask() {
ID = ljMesTask.ID,
POSITION_ID = ljMesTask.POSITION_ID,
RETURN_CODE = ljMesTask.RETURN_CODE,
MSG_TYPE = ljMesTask.MSG_TYPE,
PALLET_TYPE = ljMesTask.PALLET_TYPE,
MATERIAL_NAME = ljMesTask.MATERIAL_NAME,
MATERIAL_CODE = ljMesTask.MATERIAL_CODE,
QTY = ljMesTask.QTY,
YCL_BATCH = ljMesTask.YCL_BATCH,
PALLET_ID = ljMesTask.PALLET_ID,
AGVORDER_ID = ljMesTask.AGVORDER_ID,
CREATION_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
RECEIVE_FLAG = ljMesTask.RECEIVE_FLAG,
EQP = ljMesTask.EQP,
PLAN_ID = ljMesTask.PLAN_ID
};
result = db.Insertable(ljXcTask).ExecuteCommand() > 0;
}
return result;
}
///
/// 查询斜裁任务表
///
///
///
public static LjXcTask GetLjXcTaskById(int mesTaskId)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.ID == mesTaskId).First();
}
///
/// 查询斜裁出库任务表
///
///
///
///
public static List getLjXcOutTask(string receiveFlag ,string taskStatus)
{
var db = new SqlHelper().GetInstance();
return db.Queryable().Where(a => a.RECEIVE_FLAG == receiveFlag && a.TASK_STATUS == taskStatus).ToList();
}
}
}