using System;
using System.Collections.Generic;
using System.Text;
using WIDESEA_WCS.WCSClient;
using WIDESEA_Entity.DomainModels;
using WIDESEA_Services.Repositories;
using System.Linq;
using System.Threading;
using WIDESEA_Core.Utilities;
using System.Diagnostics;
using Quartz.Impl;
using WIDESEA_Common.CutomerModel;
using WIDESEA_Common;
using WIDESEA_Services.IRepositories;
using WIDESEA_Common.Tools;
using WIDESEA_Services.Services;
using WIDESEA_Services;
using WIDESEA_Core.EFDbContext;
using System.Threading.Tasks;
using WIDESEA_WCS.SchedulerExecute;
using Newtonsoft.Json;
namespace WIDESEA_WCS
{
public class WCSService
{
public static bool choose = true;
public static string type = "";
///
/// PLC连接集合
///
public static List Clients;
///
/// PLC连接失败集合
///
public static List ClientsNoConn;
///
/// 调度中心
///
public static ISchedulerCenterServer scheduler;
///
/// Job集合
///
static List jobs = new List();
#region 开启服务
///
/// 开启服务
///
///
public static WebResponseContent StartService()
{
WebResponseContent responseContent = new WebResponseContent();
try
{
if (!CheckServerState().Status)//开启服务之前检查调度是否已开启及PLC是否已连接
{
WIDESEA.Helper.GetToken();
WebResponseContent content = ConnectServer();
if (content.Status)
{
responseContent = StartSchedule();
if (!responseContent.Status)
{
DisconnectServer();
}
}
else
{
DisconnectServer();
responseContent = content;
}
}
else
{
responseContent = WebResponseContent.Instance.Error("服务已开启");
}
}
catch (Exception ex)
{
responseContent = responseContent.Error(ex.Message);
}
return responseContent;
}
#endregion
#region 关闭服务
///
/// 关闭服务(调度及PLC连接)
///
///
public static WebResponseContent CloseService()
{
WebResponseContent content = new WebResponseContent();
try
{
if (scheduler != null)
{
CloseSchedule();
DisconnectServer();
scheduler = null;
content = content.OK();
}
else
{
content = WebResponseContent.Instance.Error("任务调度已停止");
}
}
catch (Exception ex)
{
content = WebResponseContent.Instance.Error(ex.Message);
}
return content;
}
#endregion
#region 检查服务状态
///
/// 检查服务状态
///
///
public static WebResponseContent CheckServerState()
{
WebResponseContent content = new WebResponseContent();
try
{
if (scheduler != null && Clients.Any())
{
content = content.OK(message: "");
}
else
{
CloseService();
content = content.Error(message: "服务已关闭");
}
//if (ClientsNoConn!=null && ClientsNoConn.Count>0)
//{
// foreach (var item in ClientsNoConn)
// {
// string msg = item.Connect();
// if (msg.Contains("连接成功"))
// {
// ClientsNoConn.Remove(item);
// Clients.Add(item);
// }
// }
//}
}
catch (Exception ex)
{
content = WebResponseContent.Instance.Error(ex.Message);
}
return content;
}
#endregion
#region 暂停或恢复指定的计划任务
///
/// 暂停或恢复指定的计划任务
///
///
///
public static WebResponseContent PauseOrResumeJob(SaveModel saveModel)
{
return dt_equipmentinfoRepository.Instance.DbContextBeginTransaction(() =>
{
Idt_equipmentinfoRepository repository = new dt_equipmentinfoRepository(new WIDESEA_Core.EFDbContext.VOLContext());
dt_equipmentinfo equipmentinfo = repository.FindFirst(x => x.equipment_name == saveModel.MainData["equipNum"].ToString());
if (equipmentinfo == null)
return WebResponseContent.Instance.Error($"未找到该设备【{saveModel.MainData["equipNum"]}】");
if (equipmentinfo.equipment_state == EquipmentState.Enable.ToString())
equipmentinfo.equipment_state = EquipmentState.Disenable.ToString();
else
equipmentinfo.equipment_state = EquipmentState.Enable.ToString();
if (dt_equipmentinfoRepository.Instance.Update(equipmentinfo, true) <= 0)
return WebResponseContent.Instance.Error("设备状态修改失败");
JobOptions options = new JobOptions { JobName = equipmentinfo.equipment_name, JobGroup = equipmentinfo.equipment_type };
if (scheduler == null)
return WebResponseContent.Instance.OK("设备状态修改成功");
if (!scheduler.IsExistScheduleJobAsync(options).Result)
{
return WebResponseContent.Instance.OK("设备状态修改成功");
}
if (saveModel.MainData["equipStatus"].ToString() == EquipmentState.Enable.ToString())
{
return scheduler.PauseJob(options).Result;
}
else
{
return scheduler.ResumeJob(options).Result;
}
});
}
#endregion
#region 开启调度
///
/// 开启调度
///
///
public static WebResponseContent StartSchedule()
{
WebResponseContent responseContent = new WebResponseContent();
try
{
StdSchedulerFactory factory = new StdSchedulerFactory();
scheduler = new SchedulerCenterServer(factory);
List jobOptions = VV_DispatchRepository.Instance.FindToJobOptions(x => true && x.Enable == EquipmentState.Enable.ToString() && x.JobGroup != "EquipmentType_Stacker");
jobOptions.ForEach(x => { x.JobParams = Clients.Where(y => y.PLCName == x.JobName).FirstOrDefault(); });
if (!jobOptions.Any())
{
responseContent = WebResponseContent.Instance.Error("当前未配置调度");
return responseContent;
}
for (int i = 0; i < jobOptions.Count; i++)
{
WebResponseContent content = scheduler.AddScheduleJobAsync(jobOptions[i]).Result;
if (!content.Status)
{
factory = null;
scheduler = null;
return content;
}
}
responseContent = scheduler.StartScheduleAsync().Result;
}
catch (Exception ex)
{
responseContent = responseContent.Error(ex.Message);
scheduler = null;
}
return responseContent;
}
#endregion
#region 停止调度
///
/// 停止调度
///
///
public static WebResponseContent CloseSchedule()
{
WebResponseContent content = new WebResponseContent();
try
{
content = scheduler.StopScheduleAsync().Result;
}
catch (Exception ex)
{
content = content.Error(ex.Message);
}
return content;
}
#endregion
#region 连接PLC
///
/// 连接PLC
///
///
public static WebResponseContent ConnectServer()
{
WebResponseContent content = new WebResponseContent();
try
{
if (Clients != null)
{
DisconnectServer();
}
//if (ClientsNoConn==null)
//{
// ClientsNoConn = new List();
//}
jobs = new List();
jobs = VV_DispatchRepository.Instance.FindJobOptions(x => true);
List plcNames = VV_DispatchRepository.Instance.FindToJobOptions(x => true && x.Enable == EquipmentState.Enable.ToString() && x.JobName != "正机2号分切机5012").Select(x => x.JobName).ToList();
// List plcNames = VV_DispatchRepository.Instance.FindToJobOptions(v=>).ToList(); http://192.168.12.251:8099
if (plcNames.Count == 0)
return content = WebResponseContent.Instance.Error("当前无PLC连接配置或设备被禁用");
Clients = new List();
List plcinfoheads = dt_plcinfoheadRepository.Instance.Find(x => plcNames.Contains(x.plcinfo_name));
foreach (dt_plcinfohead item in plcinfoheads)
{
PLCClient client = new PLCClient(item.plcinfo_type, item)
{
PLCName = item.plcinfo_name,
PLCDescroption = item.plcinfo_remark,
PLCDownLoc = item.plcinfo_down
};
string msg = client.Connect();
if (msg.Contains("连接成功"))
{
jobs.Where(x => x.JobName == item.plcinfo_name).FirstOrDefault().PLCConnectState = msg;
Clients.Add(client);
}
//else
//{
// ClientsNoConn.Add(client);
//}
}
content = WebResponseContent.Instance.OK("PLC连接成功!");
}
catch (Exception ex)
{
content = WebResponseContent.Instance.Error(ex.Message);
Clients = null;
}
return content;
}
#endregion
#region 断开与PLC的连接
///
/// 断开与PLC的连接
///
///
public static WebResponseContent DisconnectServer()
{
WebResponseContent content = new WebResponseContent();
try
{
if (Clients.Any() && Clients != null)
{
for (int i = 0; i < Clients.Count; i++)
{
Clients[i]?.Disconnect();
}
content = WebResponseContent.Instance.OK(message: "已断开与PLC的连接!");
}
else
{
content = WebResponseContent.Instance.Error("当前与PLC无连接!");
}
Clients = null;
}
catch (Exception ex)
{
content = WebResponseContent.Instance.Error(ex.Message);
}
return content;
}
#endregion
#region ThreadMethod PLC连接内置线程 方法
static void Read(PLCClient client)
{
//Console.Out.WriteLine(client.Read("DB3.0", "INT"));
}
#endregion
#region 获取任务触发器状态
///
/// 获取任务触发器状态
///
///
public static WebResponseContent GetTaskStaus()
{
WebResponseContent responseContent = new WebResponseContent();
List taskInfoDtos = new List();
if (jobs.FirstOrDefault() == null)
jobs = VV_DispatchRepository.Instance.FindJobOptions(x => true);
for (int i = 0; i < jobs.Count; i++)
{
List temp = new List();
if (scheduler == null)
{
temp = new List
{
new TaskInfoDto()
{
JobId = jobs[i].JobName.ObjToString(),
JobGroup = jobs[i].JobGroup,
TriggerId = "",
TriggerGroup = "",
TriggerStatus = "不存在",
IsConnected = Clients.Where(x=>x.PLCName == jobs[i].JobName).FirstOrDefault()?.IsConnected??false
}
};
}
else
{
temp = scheduler.GetTaskStaus(jobs[i]).Result;
}
taskInfoDtos.AddRange(temp);
}
return WebResponseContent.Instance.OK(data: taskInfoDtos);
}
#endregion
#region 立即执行 一个任务
///
/// 立即执行 一个任务
///
///
///
public static WebResponseContent ExecuteJobAsync(string jobName)
{
WebResponseContent result = new WebResponseContent();
try
{
JobOptions job = jobs.Where(x => x.JobName == jobName).FirstOrDefault();
if (job == null)
{
result = WebResponseContent.Instance.Error($"立即执行计划任务失败:未找到该任务计划,任务计划:{jobName}");
}
else
{
result = scheduler.ExecuteJobAsync(job).Result;
}
}
catch (Exception ex)
{
result.Message = $"立即执行计划任务失败:【{ex.Message}】";
}
return result;
}
#endregion
#region 获取任务触发器状态
///
/// 获取任务触发器状态
///
///
public static PageGridData GetPageData()
{
try
{
List taskInfoDtos = new List();
if (jobs.FirstOrDefault() == null)
jobs = VV_DispatchRepository.Instance.FindJobOptions(x => true);
for (int i = 0; i < jobs.Count; i++)
{
List temp = new List();
if (scheduler == null)
{
temp = new List
{
new TaskInfoDto()
{
JobId = jobs[i].JobName.ObjToString(),
JobGroup = jobs[i].JobGroup,
TriggerId = "",
TriggerGroup = "",
TriggerStatus = "不存在",
PLCConnetState = jobs[i].PLCConnectState,
IsConnected = false
}
};
}
else
{
temp = scheduler.GetTaskStaus(jobs[i]).Result;
if (Clients != null)
{
for (int j = 0; j < temp.Count; j++)
{
temp[j].IsConnected = Clients.Where(x => x.PLCName == temp[j].JobId).FirstOrDefault()?.IsConnected ?? false;
}
}
}
taskInfoDtos.AddRange(temp);
}
return new PageGridData { rows = taskInfoDtos, total = taskInfoDtos?.Count ?? 0 };
}
catch (Exception ex)
{
return new PageGridData { rows = null, total = 0, status = 404, msg = ex.Message };
}
}
#endregion
public static JobOptions GetJobOptions(string jobName)
{
return jobs.Where(x => x.JobName == jobName).FirstOrDefault();
}
private static int _MESCallLock = 0;
public static ResultMaterstateUp Updatestockstate(MESupdateMaterStateRequest request)
{
WriteLog.Info("更新物料信息MES调我们的接口").Write("开始,缓存架编号:" + request.Devid + "\t" + "物料条码:" + request.BarCode + "\t" + "物料状态:" + request.MaterialStatus + "\t" + DateTime.Now, "更新物料信息");
if (Interlocked.Exchange(ref _MESCallLock, 1) == 0)
{
ResultMaterstateUp result = new ResultMaterstateUp();
try
{
VOLContext Context = new VOLContext();
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context);
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
WebResponseContent responseContent = new WebResponseContent();
responseContent = locRepository.DbContextBeginTransaction(() =>
{
var stockisexist = groupRepository.FindFirst(v=>v.BarCode== request.BarCode);
if (stockisexist!=null)
{
throw new Exception("当前条码已存在库存"+ request.BarCode);
}
var location = locRepository.FindFirst(v => v.down_code == request.Devid || v.upper_code == request.Devid);
if (string.IsNullOrEmpty(request.MaterialStatus))
{
throw new Exception("物料状态不能为空");
}
var task = agvRepository.FindFirst(f => f.agv_fromaddress == location.upper_code || f.agv_fromaddress == location.down_code);
if (task != null)
{
result.Message = "该货位有正在进行的任务,不能绑定";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
WriteLog.Info("更新物料信息MES调我们的接口").Write("异常,缓存架编码:" + request.Devid + "\t" + "反馈结果" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "更新物料信息");
return WebResponseContent.Instance.Error(result.Message);
}
var stock = groupRepository.Find(v => v.location_id == location.id).OrderByDescending(v => v.created_time).FirstOrDefault();
string materialtype = request.BarCode.Split('*')[2];
if (stock == null)
{
bill_group_stock bill_Group = new bill_group_stock()
{
first_tb = 1,
BarCode = request.BarCode,
created_time = DateTime.Now,
created_user = "admin",
stock_id = new Guid(),
location_id = location.id,
MaterialType = materialtype,
MaterialStatus = request.MaterialStatus,
updated_time = DateTime.Now,
updated_user = "admin"
};
if (request.Devid.Contains("JJK"))
{
bill_Group.FQ_Status = "";
bill_Group.GY_Status = "";
bill_Group.QX_Status = "";
bill_Group.FQ_Status = "";
}
else
{
bill_Group.TB_Status = request.Devid.Contains("TB") ? request.MaterialStatus : "nou";
bill_Group.GY_Status = request.Devid.Contains("GY") ? request.MaterialStatus : "nou";
bill_Group.FQ_Status = request.Devid.Contains("FQ") || request.Devid.Contains("ZZLJ") ? request.MaterialStatus : "nou";
bill_Group.QX_Status = request.Devid.Contains("QX") ? request.MaterialStatus : "nou";
}
groupRepository.Add(bill_Group, true);
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locRepository.Update(location, true);
for (int i = 0; i < 10; i++)
{
var st = groupRepository.FindFirst(f => f.BarCode == request.BarCode);
WriteLog.Info("货位id").Write(request.Devid + "\t" + st.location_id + "\t" + st.BarCode + "\t" + st.MaterialStatus + "\t" + DateTime.Now, "货位id");
if (string.IsNullOrEmpty(st.location_id.ToString()))
{
st.location_id = location.id;
groupRepository.Update(st, true);
}
if (st.MaterialStatus == "nou")
{
st.MaterialStatus = request.MaterialStatus;
groupRepository.Update(st, true);
}
else
{
break;
}
}
}
else
{
if (location.equipment_type == "TBHCJ")
{
stock.TB_Status = request.MaterialStatus;
}
else if (location.equipment_type == "GYHCJ" && location.area == "FJSL")
{
stock.TB_Status = request.MaterialStatus;
}
else if (location.equipment_type == "GYHCJ" && location.area == "ZJSL")
{
stock.QX_Status = request.MaterialStatus;
}
else if (location.equipment_type == "QXHCJ" && location.area == "FJSL")
{
stock.GY_Status = request.MaterialStatus;
}
else if (location.equipment_type == "QXHCJ" && location.area == "ZJSL")
{
stock.TB_Status = request.MaterialStatus;
}
else if (location.equipment_type == "FQHCJ" && location.area == "FJSL")
{
stock.QX_Status = request.MaterialStatus;
}
else if (location.equipment_type == "FQHCJ" && location.area == "ZJSL")
{
stock.GY_Status = request.MaterialStatus;
}
else if (location.equipment_type == "ZZLJ")
{
stock.FQ_Status = request.MaterialStatus;
}
else if (location.equipment_type == "JJK")
{
stock.TB_Status = "";
stock.FQ_Status = "";
stock.QX_Status = "";
stock.GY_Status = "";
}
if (stock.BarCode == request.BarCode)
{
result.Message = "请不要重复绑定该物料";
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
}
else
{
stock.BarCode = request.BarCode;
}
stock.MaterialStatus = request.MaterialStatus;
stock.MaterialType = materialtype;
stock.location_id = location.id;
stock.created_time = DateTime.Now;
stock.updated_time = DateTime.Now;
groupRepository.Update(stock, true);
for (int i = 0; i < 10; i++)
{
var st = groupRepository.FindFirst(f => f.BarCode == request.BarCode);
WriteLog.Info("货位id").Write(request.Devid + "\t" + st.location_id + "\t" + st.BarCode + "\t" + st.MaterialStatus + "\t" + DateTime.Now, "货位id");
if (string.IsNullOrEmpty(st.location_id.ToString()))
{
st.location_id = location.id;
groupRepository.Update(st, true);
}
if (st.MaterialStatus == "nou")
{
st.MaterialStatus = request.MaterialStatus;
groupRepository.Update(st, true);
}
else
{
break;
}
}
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locRepository.Update(location, true);
}
if (location.area == "ZJSL")
{
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == "正极1号AGV");
if (plc == null)
{
result.Message = "正极1号AGVplc未连接上";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
return WebResponseContent.Instance.Error(result.Message);
}
if (request.MaterialStatus == "OK")
{
plc.WriteValue(ConveyorLineInfoDBName.MaterOK.ToString(), request.Devid, 1);
}
else
{
plc.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), request.Devid, 1);
}
}
else if (location.area == "FJSL")
{
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == "负极1号AGV");
if (plc == null)
{
result.Message = "负极1号AGVplc未连接上";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
return WebResponseContent.Instance.Error(result.Message);
}
if (request.MaterialStatus == "OK")
{
plc.WriteValue(ConveyorLineInfoDBName.MaterOK.ToString(), request.Devid, 1);
}
else
{
plc.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), request.Devid, 1);
}
}
result.Code = 0;
return WebResponseContent.Instance.OK();
});
if (responseContent.Status == false)
{
throw new Exception(responseContent.Message);
}
WriteLog.Info("更新物料信息MES调我们的接口").Write("结束,缓存架编码:" + request.Devid + "\t" + "物料条码" + request.BarCode + "\t" + "物料状态" + request.MaterialStatus + "\t" + "反馈结果" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "更新物料信息");
return result;
}
catch (Exception ex)
{
result.Message = ex.Message;
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
WriteLog.Info("更新物料信息MES调我们的接口").Write("异常,缓存架编码:" + request.Devid + "\t" + "物料条码" + request.BarCode + "\t" + "物料状态" + request.MaterialStatus + "\t" + "反馈结果" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "更新物料信息");
}
finally
{
Interlocked.Exchange(ref _MESCallLock, 0);
}
return result;
}
else
{
ResultMaterstateUp result = new ResultMaterstateUp();
result.Message = "请勿重复调用";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("Updatestockstate", "物料条码:" + request.BarCode, request.Devid, result.Code, result.Message);
WriteLog.Info("更新物料信息MES调我们的接口").Write("异常,缓存架编码:" + request.Devid + "\t" + "物料条码" + request.BarCode + "\t" + "物料状态" + request.MaterialStatus + "\t" + "反馈结果" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "更新物料信息");
return result;
}
}
///
/// MES查看AGV库位状态
///
///
///
public static List GetLocationState(string Devid)
{
List result = new List();
try
{
if (Devid != null)
{
var Id = base_ware_locationRepository.Instance.FindFirst(v => v.down_code == Devid || v.upper_code == Devid);
var location = bill_group_stockRepository.Instance.FindFirst(v => v.location_id == Id.id);
ResultLocationState content = new ResultLocationState();
content.BarCode = location.BarCode;
content.MaterialStatus = location.MaterialStatus;
content.MaterialType = location.MaterialType;
content.Devid = Devid;
result.Add(content);
}
else
{
var IdList = base_ware_locationRepository.Instance.Find(v => 1 == 1).ToList();
for (int i = 0; i < IdList.Count; i++)
{
ResultLocationState content = new ResultLocationState();
var locationList = bill_group_stockRepository.Instance.FindFirst(v => v.location_id == IdList[i].id);
if (locationList != null)
{
content.BarCode = locationList.BarCode;
content.MaterialStatus = locationList.MaterialStatus;
content.MaterialType = locationList.MaterialType;
content.Devid = Devid;
}
else
{
content.BarCode = "";
content.MaterialStatus = "";
content.MaterialType = "";
content.Devid = IdList[i].down_code;//暂时不知道给那个
}
result.Add(content);
}
}
//
//result.Code = 0;
}
catch (Exception ex)
{
//result.Code = 1;
}
return result;
}
///
/// 三楼卷绕上料请求逻辑
///
///
///
public static ResultMaterstateUp Uprequest(UpThreerequest request)
{
VOLContext Context = new VOLContext();
ResultMaterstateUp result = new ResultMaterstateUp();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context);
Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context);
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
IJROutBindRepository jrRepository = new JROutBindRepository(Context);
Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context);
try
{
WriteLog.Info("卷绕上料").Write("开始,请求:" + request.Uprequest + "\t" + "设备编号:" + request.UpequipNo + "\t" + "工单号:" + request.UpbatchNo + DateTime.Now, "卷绕上料");
if (request.Uprequest == "1")
{
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == "正极2号AGV");
var task = agvRepository.FindFirst(f => f.agv_toaddress == request.UpequipNo);
if (task == null)
{
string isWork = null;
//获取上料请求
if (request.UpequipNo == "ZJSL-JRSB003" || request.UpequipNo == "ZJSL-JRSB007" || request.UpequipNo == "ZJSL-JRSB010" || request.UpequipNo == "ZJSL-JRSB014" || request.UpequipNo == "ZJSL-JRSB019" || request.UpequipNo == "ZJSL-JRSB023" || request.UpequipNo == "ZJSL-JRSB026" || request.UpequipNo == "ZJSL-JRSB030" || request.UpequipNo == "ZJSL-JRSB035" || request.UpequipNo == "ZJSL-JRSB039")
{
isWork = plc.ReadValue(ConveyorLineInfoDBName.R_JRSB1_UPrequest.ToString(), request.UpequipNo).ToString();
}
else if (request.UpequipNo == "ZJSL-JRSB004" || request.UpequipNo == "ZJSL-JRSB008" || request.UpequipNo == "ZJSL-JRSB009" || request.UpequipNo == "ZJSL-JRSB013" || request.UpequipNo == "ZJSL-JRSB020" || request.UpequipNo == "ZJSL-JRSB024" || request.UpequipNo == "ZJSL-JRSB025" || request.UpequipNo == "ZJSL-JRSB029" || request.UpequipNo == "ZJSL-JRSB036" || request.UpequipNo == "ZJSL-JRSB040")
{
isWork = plc.ReadValue(ConveyorLineInfoDBName.R_JRSB2_UPrequest.ToString(), request.UpequipNo).ToString();
}
else if (request.UpequipNo == "FJSL-JRSB001" || request.UpequipNo == "FJSL-JRSB005" || request.UpequipNo == "FJSL-JRSB012" || request.UpequipNo == "FJSL-JRSB016" || request.UpequipNo == "FJSL-JRSB017" || request.UpequipNo == "FJSL-JRSB021" || request.UpequipNo == "FJSL-JRSB028" || request.UpequipNo == "FJSL-JRSB032" || request.UpequipNo == "FJSL-JRSB033" || request.UpequipNo == "FJSL-JRSB037")
{
isWork = plc.ReadValue(ConveyorLineInfoDBName.R_JRSB3_UPrequest.ToString(), request.UpequipNo).ToString();
}
else if (request.UpequipNo == "FJSL-JRSB002" || request.UpequipNo == "FJSL-JRSB006" || request.UpequipNo == "FJSL-JRSB011" || request.UpequipNo == "FJSL-JRSB015" || request.UpequipNo == "FJSL-JRSB018" || request.UpequipNo == "FJSL-JRSB022" || request.UpequipNo == "FJSL-JRSB027" || request.UpequipNo == "FJSL-JRSB031" || request.UpequipNo == "FJSL-JRSB034" || request.UpequipNo == "FJSL-JRSB038")
{
isWork = plc.ReadValue(ConveyorLineInfoDBName.R_JRSB4_UPrequest.ToString(), request.UpequipNo).ToString();
}
WriteLog.Info("卷绕上料口请求").Write(request.UpequipNo + "\t" + isWork + DateTime.Now, "卷绕上料口请求");
if (bool.Parse(isWork))
{
dt_agvtask agvtask = new dt_agvtask
{
agv_barcode = "",
agv_code = "正极2号AGV",
agv_createtime = DateTime.Now,
agv_fromaddress = "nou",
agv_grade = 1,
agv_materbarcode = "daiding",
agv_qty = 1,
agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep),
agv_taskstate = "WaitStockOut",
agv_tasktype = "TaskType_Outbound",
agv_toaddress = request.UpequipNo,
agv_userid = "WCS",
agv_worktype = 1,
agv_materielid = request.UpbatchNo
};
List StockList = new List { "ZJXL-FBT001", "ZJXL-FBT002" };
MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(agvtask.agv_tasknum, StockList, 4, request.UpbatchNo, "", agvtask.agv_toaddress);
if (WMSbackresult == null)
{
result.Code = 1;
result.Message = WMSbackresult.Message;
WriteLog.Info("卷绕上料").Write(request.UpequipNo + "要料失败" + WMSbackresult.Message + "\t" + DateTime.Now, "卷绕上料");
return result;
}
agvRepository.Add(agvtask, true);
result.Code = 0;
result.MaterialType = request.UpbatchNo;
result.BarCode = null;
WriteLog.Info("卷绕上料").Write("结束,任务号:" + agvtask.agv_tasknum + "\t" + "请求:" + request.Uprequest + "\t" + "设备编号:" + request.UpequipNo + "\t" + "工单号:" + request.UpbatchNo + "\t" + DateTime.Now, "卷绕上料");
}
else
{
result.Code = 1;
result.Message = "上料口请求是:" + isWork;
WriteLog.Info("卷绕上料").Write("结束,请求:" + request.Uprequest + "\t" + "设备编号:" + request.UpequipNo + "\t" + "工单号:" + request.UpbatchNo + "\t" + "上料口请求:" + isWork + DateTime.Now, "卷绕上料");
return result;
}
}
}
}
catch (Exception ex)
{
result.Code = 1;
result.Message = ex.Message;
WriteLog.Info("卷绕上料").Write("异常,请求:" + request.Uprequest + "\t" + "设备编号:" + request.UpequipNo + "\t" + "工单号:" + request.UpbatchNo + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "卷绕上料");
MESAPIInvoke.GetInterfaceInfo("Uprequest", request.Uprequest, request.UpequipNo, result.Code, result.Message);
}
return result;
}
///
/// 入库物料确认搬走
///
///
///
public static ResultMaterstateUp InStockMaterMove(MEStockMaterMoveRequest request)
{
VOLContext Context = new VOLContext();
ResultMaterstateUp result = new ResultMaterstateUp();
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context);
try
{
WriteLog.Info("入库物料确认搬走MES调我们的接口").Write("开始,缓存架编号:" + request.Devid + "\t" + "物料类型:" + request.MaterialType + "\t" + DateTime.Now, "入库物料确认搬走");
var location = locRepository.FindFirst(v => v.upper_code == request.Devid || v.down_code == request.Devid);
if (location == null)
{
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("InStockMaterMove", "物料类型:" + request.MaterialType, request.Devid, result.Code, result.Message);
WriteLog.Info("入库物料确认搬走MES调我们的接口结束").Write("结束,缓存架编号:" + request.Devid + "\t" + "物料类型:" + request.MaterialType + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "入库物料确认搬走");
return result;
}
location.location_state = LocationStateEnum.LocationState_Empty.ToString();
locRepository.Update(location, true);
var stock = groupRepository.FindFirst(v => v.MaterialType == request.MaterialType && v.location_id == location.id);
if (stock == null)
{
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("InStockMaterMove", "物料类型:" + request.MaterialType, request.Devid, result.Code, result.Message);
WriteLog.Info("入库物料确认搬走MES调我们的接口结束").Write("结束,缓存架编号:" + request.Devid + "\t" + "物料类型:" + request.MaterialType + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "入库物料确认搬走");
return result;
}
stock.location_id = null;
groupRepository.Update(stock, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("InStockMaterMove", "物料类型:" + request.MaterialType, request.Devid, result.Code, result.Message);
WriteLog.Info("入库物料确认搬走MES调我们的接口结束").Write("结束,缓存架编号:" + request.Devid + "\t" + "物料类型:" + request.MaterialType + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "入库物料确认搬走");
}
catch (Exception ex)
{
result.Code = 1;
result.Message = ex.Message;
MESAPIInvoke.GetInterfaceInfo("InStockMaterMove", "物料类型:" + request.MaterialType, request.Devid, result.Code, result.Message);
WriteLog.Info("入库物料确认搬走MES调我们的接口异常").Write("异常,缓存架编号:" + request.Devid + "\t" + "物料类型:" + request.MaterialType + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息" + result.Message + "\t" + DateTime.Now, "入库物料确认搬走");
}
return result;
}
///
/// 出库物料绑定 UpdateAGVTaskState
///
///
///
public static ResultMaterstateUp OutStockMaterBind(MEStockMaterBindRequest request)
{
VOLContext Context = new VOLContext();
ResultMaterstateUp result = new ResultMaterstateUp();
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
Ibill_group_stockRepository groupRepository = new bill_group_stockRepository(Context);
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
IJROutBindRepository jrRepository = new JROutBindRepository(Context);
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
try
{
//WriteLog.Info("出库物料绑定MES调我们的接口").Write("开始,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + choose + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
WriteLog.Info("出库物料绑定").Write($"\n{DateTime.Now}开始,{JsonConvert.SerializeObject(request)}\n", "出库物料绑定");
if (string.IsNullOrEmpty(request.TaskID))
{
dt_agvtask task = new dt_agvtask();
if (request.MaterialType == "空托盘")
{
PLCClient plc = WCSService.Clients.Find(v => v.PLCName == "正极提升机");
if (request.Devid.Contains("Z") && (choose == true || type == "空托盘"))
{
string isZWork = plc.ReadValue(ConveyorLineInfoDBName.R_ZKPHLXLocation.ToString(), plc.PLCDescroption).ToString();
WriteLog.Info("空盘回流线的请求").Write("正极:" + isZWork + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + DateTime.Now, "空盘回流线的请求");
if (isZWork == "False")
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "正极空盘回流线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束," + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
string ZWLXWork = plc.ReadValue(ConveyorLineInfoDBName.R_ZWLX2_UPrequest.ToString(), plc.PLCDescroption).ToString();
SchedulerExecuteBase.GetEquipmentInfo("WLX002", "正极物流线上料请求:" + ZWLXWork, "", "", "");
//获取空盘回流线负极货位是否有料
if (bool.Parse(ZWLXWork))
{
if (request.CacheDevid.Substring(0, 2) == "ZJ")
{
var tasks = agvRepository.FindFirst(f => f.agv_toaddress == "ZJSL-WLX002");
if (tasks != null)
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "AGV有正极物流线的任务";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
task = new dt_agvtask
{
agv_fromaddress = "ZJXL-KPHLX001",
agv_toaddress = "ZJSL-WLX002"
};
}
else if (request.CacheDevid.Substring(0, 2) == "FJ")
{
var tasks = agvRepository.FindFirst(f => f.agv_toaddress == "FJSL-WLX002");
if (tasks != null)
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "AGV有负极物流线的任务";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
task = new dt_agvtask
{
agv_fromaddress = "ZJXL-KPHLX001",
agv_toaddress = "FJSL-WLX002"
};
}
task.agv_materielid = request.MaterialType;
task.agv_qty = 1;
task.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep);
task.agv_grade = 1;
task.agv_materbarcode = "";
task.agv_barcode = "";
task.agv_code = "负极2号AGV";
task.agv_createtime = DateTime.Now;
task.agv_taskstate = "Create";
task.agv_tasktype = "TaskType_Outbound";
task.agv_userid = "WCS";
task.agv_worktype = 2;
agvRepository.Add(task, true);
choose = true;
type = "";
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "物流线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
}
}
else if (request.Devid.Contains("F") && (choose == true || type == "空托盘"))
{
string isZWork = plc.ReadValue(ConveyorLineInfoDBName.R_FKPHLXLocation.ToString(), plc.PLCDescroption).ToString();
WriteLog.Info("空盘回流线的请求").Write("负极:" + isZWork + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + DateTime.Now, "空盘回流线的请求");
if (isZWork == "False")
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "负极空盘回流线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束," + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
string FWLXWork = plc.ReadValue(ConveyorLineInfoDBName.R_FWLX2_UPrequest.ToString(), plc.PLCDescroption).ToString();
SchedulerExecuteBase.GetEquipmentInfo("WLX002", "负极物流线上料请求:" + FWLXWork, "", "", "");
//获取空盘回流线负极货位是否有料
if (bool.Parse(FWLXWork))
{
if (request.CacheDevid.Substring(0, 2) == "ZJ")
{
var tasks = agvRepository.FindFirst(f => f.agv_toaddress == "ZJSL-WLX002");
if (tasks != null)
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "AGV有正极物流线的任务";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
task = new dt_agvtask
{
agv_fromaddress = "FJXL-KPHLX001",
agv_toaddress = "ZJSL-WLX002"
};
}
else if (request.CacheDevid.Substring(0, 2) == "FJ")
{
var tasks = agvRepository.FindFirst(f => f.agv_toaddress == "FJSL-WLX002");
if (tasks != null)
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "AGV有负极物流线的任务";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
task = new dt_agvtask
{
agv_fromaddress = "FJXL-KPHLX001",
agv_toaddress = "FJSL-WLX002"
};
}
task.agv_materielid = request.MaterialType;
task.agv_qty = 1;
task.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep);
task.agv_grade = 1;
task.agv_materbarcode = "";
task.agv_barcode = "";
task.agv_code = "负极2号AGV";
task.agv_createtime = DateTime.Now;
task.agv_taskstate = "Create";
task.agv_tasktype = "TaskType_Outbound";
task.agv_userid = "WCS";
task.agv_worktype = 2;
agvRepository.Add(task, true);
choose = true;
type = "";
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "物流线没有请求 ";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
}
}
}
else if (request.MaterialType == "隔膜空托盘")
{
PLCClient tsjplc = WCSService.Clients.Find(v => v.PLCName == "正极提升机");
if (request.Devid.Contains("Z") && (choose == true || type == "隔膜空托盘"))
{
string isZWork = tsjplc.ReadValue(ConveyorLineInfoDBName.R_ZKPHLXLocation.ToString(), tsjplc.PLCDescroption).ToString();
WriteLog.Info("空盘回流线的请求").Write("正极:" + isZWork + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + DateTime.Now, "空盘回流线的请求");
if (isZWork == "False")
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "正极空盘回流线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束," + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
string isZGMWork = tsjplc.ReadValue(ConveyorLineInfoDBName.R_ZGMWork.ToString(), tsjplc.PLCDescroption).ToString();
string isZState = tsjplc.ReadValue(ConveyorLineInfoDBName.R_ZGMState.ToString(), tsjplc.PLCDescroption).ToString();
//获取空盘回流线负极货位是否有料
if (bool.Parse(isZGMWork) && int.Parse(isZState) == 1)
{
task = new dt_agvtask
{
agv_fromaddress = "ZJXL-KPHLX001",
agv_toaddress = "GMSL-LJHCX001"
};
task.agv_materielid = request.MaterialType;
task.agv_qty = 1;
task.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep);
task.agv_grade = 1;
task.agv_materbarcode = "";
task.agv_barcode = "";
task.agv_code = "负极2号AGV";
task.agv_createtime = DateTime.Now;
task.agv_taskstate = "Create";
task.agv_tasktype = "TaskType_Outbound";
task.agv_userid = "WCS";
task.agv_worktype = 2;
agvRepository.Add(task, true);
result.Code = 0;
choose = true;
type = "";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "隔膜缓存线没有请求 ";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
}
}
else if (request.Devid.Contains("F") && (choose == true || type == "隔膜空托盘"))
{
string isZWork = tsjplc.ReadValue(ConveyorLineInfoDBName.R_FKPHLXLocation.ToString(), tsjplc.PLCDescroption).ToString();
WriteLog.Info("空盘回流线的请求").Write("负极:" + isZWork + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + DateTime.Now, "空盘回流线的请求");
if (isZWork == "False")
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "负极空盘回流线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束," + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
string isFGMWork = tsjplc.ReadValue(ConveyorLineInfoDBName.R_FGMWork.ToString(), tsjplc.PLCDescroption).ToString();
string isFState = tsjplc.ReadValue(ConveyorLineInfoDBName.R_FGMState.ToString(), tsjplc.PLCDescroption).ToString();
//获取空盘回流线负极货位是否有料
if (bool.Parse(isFGMWork) && int.Parse(isFState) == 1)
{
task = new dt_agvtask
{
agv_fromaddress = "FJXL-KPHLX001",
agv_toaddress = "GMSL-LJHCX002",
};
task.agv_materielid = request.MaterialType;
task.agv_qty = 1;
task.agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep);
task.agv_grade = 1;
task.agv_materbarcode = "";
task.agv_barcode = "";
task.agv_code = "负极2号AGV";
task.agv_createtime = DateTime.Now;
task.agv_taskstate = "Create";
task.agv_tasktype = "TaskType_Outbound";
task.agv_userid = "WCS";
task.agv_worktype = 2;
agvRepository.Add(task, true);
choose = true;
type = "";
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else
{
choose = false;
type = request.MaterialType;
result.Code = 1;
result.Message = "隔膜缓存线没有请求";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
}
}
}
else
{
if (choose == true)
{
task = new dt_agvtask()
{
agv_materbarcode = request.MaterialType,
agv_barcode = "",
agv_code = "负极2号AGV",
agv_createtime = DateTime.Now,
agv_fromaddress = request.Devid,
agv_grade = 1,
agv_materielid = "",
agv_qty = 1,
agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep),
agv_taskstate = "Create",
agv_tasktype = "TaskType_Outbound",
agv_toaddress = request.BarCode,
agv_userid = "WCS",
agv_worktype = 1
};
agvRepository.Add(task, true);
choose = true;
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "choose:" + choose + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else
{
choose = false;
result.Code = 1;
result.Message = "choose:" + choose.ToString();
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message + "type" + type);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + task.agv_tasknum + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + request.CacheDevid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + type + "\t" + DateTime.Now, "出库物料绑定");
}
}
}
else
{
if (request.TaskID.Contains("GH-")) { request.TaskID = request.TaskID.Remove(0, 3); }
var agvtask = agvRepository.FindFirst(v => v.agv_tasknum == request.TaskID);
if (agvtask == null)
{
if (request.Devid.Contains("FBT"))
{
MESback WMSbackresult = new MESback();
WMSbackresult = MESAPIInvoke.OutStockMaterMove(request.Devid, request.MaterialType, 4, request.sum);
if (WMSbackresult.Code > 0) { result.Code = 1; result.Message = "分拨台出库确认搬走接口MES不通过"; return result; }
}
result.Code = 0;
result.Message = "未查询到当前任务号的信息";
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + request.TaskID + "\t" + "物料类型:" +
request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" +
"缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" +
"反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
if (agvtask.agv_toaddress == "nou" && agvtask.agv_fromaddress == "nou")
{
var location = locRepository.FindFirst(v => v.upper_code == request.Devid || v.down_code == request.Devid);
if (location == null)
{
result.Message = "未查询到当前任务的货位信息";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束1,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locRepository.Update(location, true);
if (request.Devid.Contains("Z"))
{
agvtask.agv_toaddress = "ZJSL-WLX001";
}
else
{
agvtask.agv_toaddress = "FJSL-WLX001";
}
var stock = groupRepository.FindFirst(v => v.BarCode == request.BarCode);
if (stock == null)
{
bill_group_stock bill_Group = new bill_group_stock()
{
Remark1 = agvtask.agv_remark,
first_tb = 1,
TB_Status = request.Devid.Contains("TB") ? request.MaterialStatus : "",
BarCode = request.BarCode,
GY_Status = request.Devid.Contains("GY") ? request.MaterialStatus : "",
created_time = DateTime.Now,
created_user = "admin",
stock_id = new Guid(),
FQ_Status = request.Devid.Contains("FQ") || request.Devid.Contains("ZZLJ") ? request.MaterialStatus : "",
location_id = location.id,
MaterialType = request.MaterialType,
MaterialStatus = request.MaterialStatus == null || request.MaterialStatus == "" ? "" : request.MaterialStatus,
QX_Status = request.Devid.Contains("QX") ? request.MaterialStatus : "",
updated_time = DateTime.Now,
updated_user = "admin"
};
groupRepository.Add(bill_Group, true);
}
else
{
stock.MaterialStatus = request.MaterialStatus;
stock.MaterialType = request.MaterialType;
stock.location_id = location.id;
stock.Remark1 = agvtask.agv_remark;
groupRepository.Update(stock, true);
}
agvtask.agv_fromaddress = request.Devid;
agvtask.agv_taskstate = "Create";
agvtask.agv_materbarcode = request.BarCode;
agvtask.agv_materielid = request.MaterialType;
agvRepository.Update(agvtask, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else if (agvtask.agv_toaddress.Contains("JR"))
{
string barcodes = "";
for (int i = 0; i < request.BarCodes.Count(); i++)
{
barcodes = request.BarCodes[i] + ",";
WriteLog.Info("MES卷绕绑定条码").Write("卷绕绑定条码:" + request.Devid + "\t" + request.BarCodes[i] + DateTime.Now, "MES卷绕绑定条码");
}
/*2023.8.2新增 冠宏传递卷绕长度*/
agvtask.size = request.size;
agvRepository.Update(agvtask, true);
WriteLog.Info("卷绕size").Write($"冠宏MES请求:{JsonConvert.SerializeObject(request)}", "卷绕size");
WebResponseContent content = new WebResponseContent();
jrRepository.DbContextBeginTransaction(() =>
{
var bind = jrRepository.FindFirst(f => f.Devid == request.Devid);
bind.barcode = request.BarCode;
bind.Devid = request.Devid;
bind.materialtype = request.MaterialType;
bind.sum = request.sum;
bind.taskid = request.TaskID;
bind.barcodes = barcodes;
bind.size = request.size;
jrRepository.Update(bind, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束2,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "数量:" + request.sum + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
return WebResponseContent.Instance.OK();
});
}
else if (agvtask.agv_toaddress.Contains("SB"))
{
var loc = locRepository.FindFirst(f => f.down_code == request.Devid || f.upper_code == request.Devid);
var stock = groupRepository.FindFirst(f => f.BarCode == request.BarCode);
if (stock == null)
{
bill_group_stock bill_Group_Stock = new bill_group_stock()
{
BarCode = request.BarCode,
created_time = DateTime.Now,
MaterialStatus = request.MaterialStatus,
MaterialType = request.MaterialType,
location_id = loc.id,
Remark1 = agvtask.agv_remark,
stock_id = new Guid(),
updated_time = DateTime.Now,
updated_user = "admin",
created_user = "admin",
GY_Status = "",
FQ_Status = "",
QX_Status = "",
TB_Status = "",
first_tb = 1
};
groupRepository.Add(bill_Group_Stock, true);
}
else
{
stock.GY_Status = "";
stock.FQ_Status = "";
stock.QX_Status = "";
stock.TB_Status = "";
stock.MaterialStatus = request.MaterialStatus;
stock.MaterialType = request.MaterialType;
stock.location_id = loc.id;
groupRepository.Update(stock, true);
}
agvtask.agv_fromaddress = request.Devid;
agvtask.agv_taskstate = "Create";
agvtask.agv_materbarcode = request.BarCode;
agvtask.agv_materielid = request.MaterialType;
agvRepository.Update(agvtask, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束3,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
else if (agvtask.agv_toaddress.Contains("HCJ") || agvtask.agv_toaddress.Contains("ZZLJ"))
{
var location = locRepository.FindFirst(v => v.down_code == agvtask.agv_toaddress || v.upper_code == agvtask.agv_toaddress);
var loc = locRepository.FindFirst(f => f.down_code == request.Devid || f.upper_code == request.Devid);
if (location == null)
{
result.Message = "未查询到当前任务的货位信息";
result.Code = 1;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
return result;
}
if (!request.MaterialType.Contains("空托盘"))
{
var stock = groupRepository.FindFirst(f => f.BarCode == request.BarCode);
if (stock == null)
{
bill_group_stock bill_Group_Stock = new bill_group_stock()
{
BarCode = request.BarCode,
created_time = DateTime.Now,
location_id = loc.id,
MaterialStatus = request.MaterialStatus,
MaterialType = request.MaterialType,
Remark1 = agvtask.agv_remark,
stock_id = new Guid(),
updated_time = DateTime.Now,
updated_user = "admin",
created_user = "admin",
GY_Status = "",
FQ_Status = "",
QX_Status = "",
TB_Status = "",
first_tb = 1
};
groupRepository.Add(bill_Group_Stock, true);
}
else
{
stock.GY_Status = "";
stock.FQ_Status = "";
stock.QX_Status = "";
stock.TB_Status = "";
stock.MaterialStatus = request.MaterialStatus;
stock.MaterialType = request.MaterialType;
stock.location_id = loc.id;
groupRepository.Update(stock, true);
}
}
agvtask.agv_fromaddress = request.Devid;
agvtask.agv_taskstate = "Create";
agvtask.agv_materbarcode = request.BarCode;
agvtask.agv_materielid = request.MaterialType;
agvRepository.Update(agvtask, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束4,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
}
}
catch (Exception ex)
{
result.Code = 1;
result.Message = ex.Message;
MESAPIInvoke.GetInterfaceInfo("OutStockMaterBind", request.TaskID, request.Devid, result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("异常,任务号:" + request.TaskID + "\t" + "物料类型:" + request.MaterialType + "\t" + "物料状态" + request.MaterialStatus + "\t" + "物料条码" + request.BarCode + "\t" + "缓存架编号:" + request.Devid + "\t" + "反馈结果:" + result.Code + "\t" + "反馈信息:" + result.Message + "\t" + DateTime.Now, "出库物料绑定");
}
return result;
}
public static ResultMaterstateUp UpdateAGVTaskState(MEStockMaterBindRequest request)
{
ResultMaterstateUp responseContent = new ResultMaterstateUp();
try
{
VOLContext Context = new VOLContext();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
Ibase_ware_locationRepository locationRepository = new base_ware_locationRepository(Context);
Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context);
Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context);
Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
Ibill_group_stockRepository group_StockRepository = new bill_group_stockRepository(Context);
Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(Context);
var agvTask = agvtaskRepository.FindFirst(v => v.agv_tasknum == request.TaskID);
WriteLog.Info("手动完成任务").Write("UpdateAGVTaskState,任务号:" + agvTask.agv_tasknum + DateTime.Now, "手动完成任务");
if (agvTask == null)
{
throw new Exception(string.Format("未查询到手动完成任务:" + request.TaskID));
responseContent.Code = 1;
return responseContent;
}
PLCClient plcClient = WCSService.Clients.Find(v => v.PLCName == agvTask.agv_code);
//起点货位改为空
var fromloc = locationRepository.FindFirst(f => f.upper_code == agvTask.agv_fromaddress || f.down_code == agvTask.agv_fromaddress);
if (fromloc != null)
{
fromloc.location_state = LocationStateEnum.LocationState_Empty.ToString();
locationRepository.Update(fromloc, true);
}
//如果是设备就不用更改,是缓存架货位状态为已存储,(库存表)location_id=(货位表)的货位
base_ware_location location = locationRepository.FindFirst(f => f.upper_code == agvTask.agv_toaddress || f.down_code == agvTask.agv_toaddress);
bill_group_stock stock = new bill_group_stock();
if (agvTask.agv_fromaddress.Contains("0201") && agvTask.agv_toaddress.Contains("ZZLJ"))
{
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locationRepository.Update(location, true);
}
else if (agvTask.agv_fromaddress.Contains("WLX") && agvTask.agv_toaddress.Contains("0101"))
{
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locationRepository.Update(location, true);
MESback WMSbackresult = MESAPIInvoke.InStockMaterBind(agvTask.agv_toaddress, "空托盘", agvTask.agv_tasknum, "OK", 3);
if (WMSbackresult.Code > 0)
{
responseContent.Code = 1;
responseContent.Message = WMSbackresult.Message;
WriteLog.Info("手动完成任务").Write("手动完成任务失败,任务号:" + agvTask.agv_tasknum + responseContent.Message + DateTime.Now, "手动完成任务");
return responseContent;
}
}
else if (agvTask.agv_toaddress.Contains("JR"))
{
if (agvTask.agv_taskstate == AGVTaskStateEnum.Complete.ToString())
{
var iswork = agvtaskRepository.FindFirst(f => f.agv_remark == "true" && f.agv_tasknum == agvTask.agv_tasknum);
if (iswork != null)
{
MESback WMSbackresult = new MESback();
WMSbackresult = MESAPIInvoke.OutStockMaterMove(agvTask.agv_fromaddress, agvTask.agv_materielid, 4, Convert.ToInt32(iswork.agv_qty), agvTask.agv_tasknum);
if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); }
}
}
}
else if (agvTask.agv_toaddress.Contains("HXWLX"))
{ //如果是进烘箱的任务,需要告诉WMS两个进烘箱物料的条码和位置,需要问胡工怎么给他值
if (agvTask.agv_fromaddress.Contains("KPHLX"))
{
var materials = WebApiHelper.ParseFromJson>(agvTask.agv_materbarcode);
MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.agv_toaddress, materials);
if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); }
}
else
{
WebResponseContent content = new WebResponseContent();
content = group_StockRepository.DbContextBeginTransaction(() =>
{
var materbarcode = agvTask.agv_materbarcode.Split(";");
List materials = new List();
for (int i = 0; i < materbarcode.Count(); i++)
{
BakingClass bakingClass = new BakingClass();
stock = group_StockRepository.Find(f => f.BarCode == materbarcode[i]).OrderByDescending(f => f.created_time).FirstOrDefault();
bakingClass.BarCode = materbarcode[i];
bakingClass.MaterialType = stock.MaterialType;
materials.Add(bakingClass);
group_StockRepository.Delete(stock, true);
WriteLog.Info("烘烤").Write("materials" + materials[i].BarCode + "\t" + materials[i].MaterialType + "\t" + bakingClass.BarCode + "\t" + bakingClass.MaterialType + DateTime.Now, "烘烤物料条码");
}
MESback WMSbackresult = MESAPIInvoke.BakingFeedingBinding(agvTask.agv_toaddress, materials);
if (WMSbackresult.Code > 0) { return content = WebResponseContent.Instance.Error(WMSbackresult.Message); }
//如果终点地址是去烘烤箱的删除库存
location.location_state = LocationStateEnum.LocationState_Empty.ToString();
locationRepository.Update(location, true);
return WebResponseContent.Instance.OK();
});
if (content.Status == false)
{
responseContent.Code = 1;
responseContent.Message = "手动完成任务失败";
return responseContent;
}
}
}
else
{
stock = group_StockRepository.FindFirst(f => f.BarCode == agvTask.agv_materbarcode);
if (!agvTask.agv_toaddress.Contains("SB") && !agvTask.agv_fromaddress.Contains("WLX") && !agvTask.agv_toaddress.Contains("JJK") && !agvTask.agv_toaddress.Contains("WLX"))
{
if (stock == null)
{
bill_group_stock newstock = new bill_group_stock
{
BarCode = agvTask.agv_materbarcode,
MaterialType = agvTask.agv_materielid,
MaterialStatus = agvTask.agv_materbarcode.Split('*')[6],
first_tb = 0,
location_id = location.id,
TB_Status = "",
FQ_Status = "",
GY_Status = "",
QX_Status = "",
created_time = DateTime.Now,
created_user = "WCS",
updated_time = DateTime.Now,
updated_user = "WCS"
};
group_StockRepository.Add(newstock, true);
}
else
{
stock.location_id = location.id;
group_StockRepository.Update(stock, true);
}
location.location_state = LocationStateEnum.LocationState_Stored.ToString();
locationRepository.Update(location, true);
if (agvTask.agv_toaddress.Contains("HCJ") || agvTask.agv_toaddress.Contains("CBJ") || agvTask.agv_toaddress.Contains("ZZLJ"))
{
if (stock.MaterialStatus == "OK")
{
plcClient.WriteValue(ConveyorLineInfoDBName.MaterOK.ToString(), agvTask.agv_toaddress, 0);
}
else if (stock.MaterialStatus == "nou") { }
else
{
plcClient.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), agvTask.agv_toaddress, 0);
}
}
//如果终点地址是库内,需要给WMS反馈入库物料绑定
if (agvTask.agv_toaddress.Contains("0101"))
{
MESback WMSbackresult = MESAPIInvoke.InStockMaterBind(agvTask.agv_toaddress, agvTask.agv_materielid, agvTask.agv_materbarcode, agvTask.agv_materbarcode.Split('*')[6], 3);
if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); }
}
}
else if (agvTask.agv_toaddress.Contains("SB"))
{
//如果终点地址是去设备
location.location_state = LocationStateEnum.LocationState_Empty.ToString();
locationRepository.Update(location, true);
group_StockRepository.Delete(stock, true);
}
else if (agvTask.agv_toaddress.Contains("WLX"))
{
if (agvTask.agv_code.Contains("正"))
{
//添加物料条码,三楼输送线出口取前两个条码
var barcode = tasknumberRep.FindFirst(v => v.taskno == 1);
barcode.numtype = barcode.numtype + agvTask.agv_materbarcode + ";";
tasknumberRep.Update(barcode, true);
}
else
{
//添加物料条码,三楼输送线出口取前两个条码
var barcode = tasknumberRep.FindFirst(v => v.taskno == 2);
barcode.numtype = barcode.numtype + agvTask.agv_materbarcode + ";";
tasknumberRep.Update(barcode, true);
}
}
else if (agvTask.agv_toaddress.Contains("JJK"))
{
if (stock.MaterialStatus == "OK")
{
plcClient.WriteValue(ConveyorLineInfoDBName.MaterOK.ToString(), agvTask.agv_toaddress, 0);
}
else
{
plcClient.WriteValue(ConveyorLineInfoDBName.MaterNG.ToString(), agvTask.agv_toaddress, 0);
}
if (agvTask.agv_toaddress.Contains("Z"))
{
MESback WMSbackresult = MESAPIInvoke.InStockMaterBind(agvTask.agv_toaddress, agvTask.agv_materielid, agvTask.agv_materbarcode, agvTask.agv_materbarcode.Split('*')[6], 1);
if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); }
}
else if (agvTask.agv_toaddress.Contains("F"))
{
MESback WMSbackresult = MESAPIInvoke.InStockMaterBind(agvTask.agv_toaddress, agvTask.agv_materielid, agvTask.agv_materbarcode, agvTask.agv_materbarcode.Split('*')[6], 2);
if (WMSbackresult.Code > 0) { new Exception(WMSbackresult.Message); }
}
}
}
agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.ManualCompletion.ToString());
agvtaskRepository.Delete(agvTask, true);
responseContent.Code = 0;
}
catch (Exception ex)
{
responseContent.Code = 1;
responseContent.Message = ex.Message;
}
return responseContent;
}
public static ResultMaterstateUp DeleteAGVTaskState(MEStockMaterBindRequest request)
{
ResultMaterstateUp result = new ResultMaterstateUp();
try
{
VOLContext Context = new VOLContext();
WebResponseContent responseContent = new WebResponseContent();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
Ibase_ware_locationRepository locationRepository = new base_ware_locationRepository(Context);
Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context);
Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context);
Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
Ibill_group_stockRepository group_StockRepository = new bill_group_stockRepository(Context);
Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(Context);
var agvTask = agvtaskRepository.FindFirst(v => v.agv_tasknum == request.TaskID);
PLCClient plcClient = WCSService.Clients.Find(v => v.PLCName == agvTask.agv_code);
if (plcClient == null)
{
WriteLog.Info("DeleteAGVTaskState").Write("取消任务失败," + agvTask.agv_code + "plc未连接" + "\t" + DateTime.Now, "DeleteAGVTaskState");
result.Code = 1;
result.Message = "取消任务失败";
return result;
}
plcClient.WriteValue(TaskDBName.taskID.ToString(), agvTask.agv_tasknum);
Task.Delay(2000).Wait();
string taskId = plcClient.ReadValue(TaskDBName.taskID.ToString()).ToString();
if (taskId == agvTask.agv_tasknum)
{
plcClient.WriteValue(TaskDBName.taskInteractiveW.ToString(), 2);
for (int i = 0; i < 5; i++)
{
Task.Delay(2000).Wait();
var agvnumber = Convert.ToInt32(plcClient.ReadValue(TaskDBName.taskInteractiveW.ToString()));
if (agvnumber != 2)
{
plcClient.WriteValue(TaskDBName.taskInteractiveW.ToString(), 2);
}
else
{
break;
}
}
Task.Delay(2000).Wait();
int TaskInteractive = Convert.ToInt32(plcClient.ReadValue(TaskDBName.taskInteractiveR.ToString()));
if (TaskInteractive == 1)
{
plcClient.WriteValue(TaskDBName.taskInteractiveW.ToString(), 0);
for (int i = 0; i < 5; i++)
{
Task.Delay(2000).Wait();
var agvnumber = Convert.ToInt32(plcClient.ReadValue(TaskDBName.taskInteractiveW.ToString()));
if (agvnumber != 0)
{
plcClient.WriteValue(TaskDBName.taskInteractiveW.ToString(), 0);
}
else
{
break;
}
}
Task.Delay(2000).Wait();
int TaskInteractiver = Convert.ToInt32(plcClient.ReadValue(TaskDBName.taskInteractiveR.ToString()));
if (TaskInteractiver == 0)
{
responseContent = agvtaskRepository.DbContextBeginTransaction(() =>
{
agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.CancelManually.ToString());
WriteLog.Info("DeleteAGVTaskState").Write("DeleteAGVTaskState" + agvTask.agv_tasknum + DateTime.Now, "DeleteAGVTaskState");
var location = locationRepository.FindFirst(f => f.upper_code == agvTask.agv_fromaddress || f.down_code == agvTask.agv_fromaddress);
if (location != null)
{
location.location_state = LocationStateEnum.LocationState_Empty.ToString();
locationRepository.Update(location, true);
}
var stock = group_StockRepository.FindFirst(v => v.BarCode == agvTask.agv_materbarcode);
if (stock != null)
{
group_StockRepository.Delete(stock, true);
}
var toloc = locationRepository.FindFirst(f => f.upper_code == agvTask.agv_toaddress || f.down_code == agvTask.agv_toaddress);
if (toloc != null)
{
toloc.location_state = LocationStateEnum.LocationState_Empty.ToString();
locationRepository.Update(toloc, true);
}
agvtaskRepository.Delete(agvTask, true);
result.Code = 0;
return WebResponseContent.Instance.OK();
});
}
else
{
WriteLog.Info("DeleteAGVTaskState").Write("取消任务失败,AGV的taskInteractiveR的值不为0,是" + TaskInteractiver + "\t" + DateTime.Now, "DeleteAGVTaskState");
result.Code = 1;
result.Message = "取消任务失败";
return result;
}
}
else
{
WriteLog.Info("DeleteAGVTaskState").Write("取消任务失败,AGV的taskInteractiveR的值不为1,是" + TaskInteractive + "\t" + DateTime.Now, "DeleteAGVTaskState");
result.Code = 1;
result.Message = "取消任务失败";
return result;
}
}
else
{
WriteLog.Info("DeleteAGVTaskState").Write("取消任务失败,AGV的taskId的值与写入的taskId不一致,写入的taskId是" + agvTask.agv_tasknum + "\t" + DateTime.Now, "DeleteAGVTaskState");
result.Code = 1;
result.Message = "取消任务失败";
return result;
}
}
catch (Exception ex)
{
throw;
}
return result;
}
public static ResulAbnormalState GetAbnormalState(AbnormalId abnormalId)
{
ResulAbnormalState responseContent = new ResulAbnormalState();
try
{
VOLContext Context = new VOLContext();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
dt_task_numberService tasknumber = new dt_task_numberService(tasknumberRep);
Ibase_ware_locationRepository locationRepository = new base_ware_locationRepository(Context);
Ibase_routing_tableRepository routingRepository = new base_routing_tableRepository(Context);
Ibill_pda_groupdiskRepository pdaRepository = new bill_pda_groupdiskRepository(Context);
Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(Context);
Ibill_group_stockRepository group_StockRepository = new bill_group_stockRepository(Context);
Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(Context);
var agvTask = new dt_agvtask();
if (abnormalId.taskId.Contains("GH-"))
{
string taskId = abnormalId.taskId.Remove(0, 3);
agvTask = agvtaskRepository.FindFirst(v => v.agv_tasknum == taskId);
}
else
{
agvTask = agvtaskRepository.FindFirst(v => v.agv_tasknum == abnormalId.taskId);
}
dt_agvtask newagvtask = new dt_agvtask
{
agv_materbarcode = agvTask.agv_materbarcode,
agv_barcode = agvTask.agv_barcode,
agv_code = agvTask.agv_code,
agv_createtime = DateTime.Now,
agv_realesstime = DateTime.Now,
agv_fromaddress = agvTask.agv_fromaddress,
agv_grade = 1,
agv_materielid = agvTask.agv_materielid,
agv_qty = 1,
agv_tasknum = "KH-" + tasknumber.GetTaskNumber(tasknumberRep),
agv_taskstate = "WaitStockOut",
agv_tasktype = "TaskType_Outbound",
agv_toaddress = agvTask.agv_toaddress,
agv_userid = "WCS",
agv_remark = agvTask.agv_remark
};
if (newagvtask.agv_materielid == "空托盘")
{
newagvtask.agv_worktype = 2;
}
else
{
newagvtask.agv_worktype = 1;
}
//调用WMS呼叫物料出库
if (newagvtask.agv_code == "正极1号AGV")
{
//调用WMS呼叫物料出库
List StockList = new List { "ZXD0201", "ZXC0201", "ZXB0201", "ZXA0201" };
MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(newagvtask.agv_tasknum, StockList, 3, newagvtask.agv_materielid, "", newagvtask.agv_remark);
if (WMSbackresult == null || WMSbackresult.Code > 0) { responseContent.Code = 1; throw new Exception($"失败,任务号:{newagvtask.agv_tasknum}"); }
}
else if (newagvtask.agv_code == "负极1号AGV")
{
//调用WMS呼叫物料出库
List StockList = new List { "FXD0201", "FXC0201", "FXB0201", "FXA0201" };
MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(newagvtask.agv_tasknum, StockList, 3, newagvtask.agv_materielid, "", newagvtask.agv_remark);
if (WMSbackresult == null || WMSbackresult.Code > 0) { responseContent.Code = 1; throw new Exception($"失败,任务号:{newagvtask.agv_tasknum}"); }
}
else if (newagvtask.agv_toaddress.Contains("JR") && newagvtask.agv_code == "负极2号AGV")
{
List StockList = new List { "FJXL-FBT001", "FJXL-FBT002" };
MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(newagvtask.agv_tasknum, StockList, 4, newagvtask.agv_materielid, "", newagvtask.agv_toaddress);
if (WMSbackresult == null || WMSbackresult.Code > 0) { responseContent.Code = 1; throw new Exception($"失败,任务号:{newagvtask.agv_tasknum}"); }
}
else if (newagvtask.agv_toaddress.Contains("JR") && newagvtask.agv_code == "正极2号AGV")
{
List StockList = new List { "ZJXL-FBT001", "ZJXL-FBT002" };
MESback WMSbackresult = MESAPIInvoke.OutNeedStosk(newagvtask.agv_tasknum, StockList, 4, newagvtask.agv_materielid, "", newagvtask.agv_toaddress);
if (WMSbackresult == null || WMSbackresult.Code > 0) { responseContent.Code = 1; throw new Exception($"失败,任务号:{newagvtask.agv_tasknum}"); }
}
agvtaskRepository.Add(newagvtask, true);
WriteLog.Info("GetAbnormalState").Write("GetAbnormalState" + newagvtask.agv_tasknum + DateTime.Now, "GetAbnormalState");
agvtask_HtyRepository.AddTaskHistory(agvTask, OperateType.Abnormal.ToString());
agvtaskRepository.Delete(agvTask, true);
responseContent.Code = 0;
MESAPIInvoke.GetInterfaceInfo("GetAbnormalState", abnormalId.taskId, "", responseContent.Code, responseContent.Message);
}
catch (Exception ex)
{
responseContent.Code = 1;
responseContent.Message = ex.Message;
MESAPIInvoke.GetInterfaceInfo("GetAbnormalState", abnormalId.taskId, "", responseContent.Code, responseContent.Message);
}
return responseContent;
}
public static List Getlocationwork(LocationworkRequest request)
{
VOLContext Context = new VOLContext();
ResultMaterstateUp result = new ResultMaterstateUp();
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
List locationInfo = new List();
try
{
var client = WCSService.Clients;
PLCClient zagvplc = client.Find(v => v.PLCName == "正极1号AGV");
PLCClient fagvplc = client.Find(v => v.PLCName == "负极1号AGV");
if (string.IsNullOrEmpty(request.PLCDescroption))
{
var cbjlocation = locRepository.Find(f => f.down_code.Contains("CBJ") || f.upper_code.Contains("ZZLJ") || f.upper_code.Contains("JJK")).Select(s => s.down_code).ToList();
var location = locRepository.Find(w => !w.upper_code.Contains("CBJ") && w.upper_code.Contains("HCJ")).Select(s => s.upper_code).ToList();
string isZWork = "";
foreach (var item in cbjlocation)
{
if (item.Contains("ZJSL") || item.Contains("ZJXL"))
{
LocationInfo locInfo = new LocationInfo();
isZWork = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item).ToString();
locInfo.Devid = item;
locInfo.name = zagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
else
{
LocationInfo locInfo = new LocationInfo();
isZWork = fagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item).ToString();
locInfo.Devid = item;
locInfo.name = fagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
}
foreach (var item in location)
{
if (item.Contains("ZJSL") || item.Contains("ZJXL"))
{
LocationInfo locInfo = new LocationInfo();
isZWork = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item).ToString();
locInfo.Devid = item;
locInfo.name = zagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
else
{
LocationInfo locInfo = new LocationInfo();
isZWork = fagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item).ToString();
locInfo.Devid = item;
locInfo.name = fagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
}
}
else
{
var location = locRepository.Find(f => f.upper_code.Contains(request.PLCDescroption) || f.down_code.Contains(request.PLCDescroption));
string isZWork = "";
string Devid = "";
foreach (var item in location)
{
if (item.upper_code.Contains("ZJSL") || item.down_code.Contains("ZJXL"))
{
if (item.down_code.Contains("CBJ") || item.upper_code.Contains("ZZLJ") || item.upper_code.Contains("JJK"))
{
isZWork = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item.down_code).ToString();
Devid = item.down_code;
}
else
{
isZWork = zagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item.upper_code).ToString();
Devid = item.upper_code;
}
LocationInfo locInfo = new LocationInfo();
locInfo.Devid = Devid;
locInfo.name = zagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
else
{
if (item.down_code.Contains("CBJ") || item.upper_code.Contains("ZZLJ") || item.upper_code.Contains("JJK"))
{
isZWork = fagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item.down_code).ToString();
Devid = item.down_code;
}
else
{
isZWork = fagvplc.ReadValue(ConveyorLineInfoDBName.R_Location_iswork.ToString(), item.upper_code).ToString();
Devid = item.upper_code;
}
LocationInfo locInfo = new LocationInfo();
locInfo.Devid = Devid;
locInfo.name = fagvplc.PLCName;
if (isZWork == "1")
{
isZWork = "空";
}
else if (isZWork == "2")
{
isZWork = "有货";
}
locInfo.iswork = isZWork;
locationInfo.Add(locInfo);
}
}
}
}
catch (Exception ex)
{
}
return locationInfo;
}
public static ResultMaterstateUp DeleteTask(MESDeleteRequest request)
{
VOLContext Context = new VOLContext();
ResultMaterstateUp result = new ResultMaterstateUp();
Ibase_ware_locationRepository locRepository = new base_ware_locationRepository(Context);
Idt_agvtaskRepository agvRepository = new dt_agvtaskRepository(Context);
Idt_agvtask_htyRepository agvtask_HtyRepository = new dt_agvtask_htyRepository(Context);
try
{
WriteLog.Info("删除任务MES调我们的接口").Write(request.taskid + "\t" + DateTime.Now, "DeleteTask");
if (request.taskid.Contains("GH-")) { request.taskid = request.taskid.Remove(0, 3); }
var agvtask = agvRepository.FindFirst(v => v.agv_tasknum == request.taskid);
if (agvtask == null)
{
result.Code = 0;
result.Message = "没有当前任务号";
MESAPIInvoke.GetInterfaceInfo("DeleteTask", request.taskid, "", result.Code, result.Message);
return result;
}
else
{
var fromlocation = locRepository.FindFirst(f => f.down_code == agvtask.agv_fromaddress || f.upper_code == agvtask.agv_fromaddress);
fromlocation.location_state = LocationStateEnum.LocationState_Empty.ToString();
locRepository.Update(fromlocation, true);
var tolocation = locRepository.FindFirst(f => f.down_code == agvtask.agv_toaddress || f.upper_code == agvtask.agv_toaddress);
tolocation.location_state = LocationStateEnum.LocationState_Empty.ToString();
locRepository.Update(tolocation, true);
agvtask_HtyRepository.AddTaskHistory(agvtask, OperateType.Delete.ToString());
agvRepository.Delete(agvtask, true);
result.Code = 0;
MESAPIInvoke.GetInterfaceInfo("DeleteTask", request.taskid, "", result.Code, result.Message);
WriteLog.Info("出库物料绑定MES调我们的接口").Write("结束," + request.taskid + "\t" + DateTime.Now, "DeleteTask");
}
}
catch (Exception ex)
{
result.Code = 1;
result.Message = ex.Message;
MESAPIInvoke.GetInterfaceInfo("DeleteTask", request.taskid, "", result.Code, result.Message);
WriteLog.Info("删除任务MES调我们的接口").Write("异常," + request.taskid + "\t" + ex.Message + "\t" + DateTime.Now, "DeleteTask");
}
return result;
}
public static ResultMaterstateUp DeleteZHXBarCode()
{
ResultMaterstateUp result = new ResultMaterstateUp();
try
{
VOLContext Context = new VOLContext();
WebResponseContent responseContent = new WebResponseContent();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
Ibill_group_stockRepository group_StockRepository = new bill_group_stockRepository(Context);
responseContent = tasknumberRep.DbContextBeginTransaction(() =>
{
var barcodelist = tasknumberRep.FindFirst(v => v.taskno == 1);
WriteLog.Info("没有删除之前的正极烘箱条码").Write(barcodelist + "\t" + DateTime.Now, "没有删除之前的正极烘箱条码");
string[] BarCodelist = barcodelist.numtype.Split(";");
string newBarcode = "";
if (BarCodelist.Length <= 2)
{
barcodelist.numtype = "";
tasknumberRep.Update(barcodelist, true);
for (int i = 1; i <= BarCodelist.Length; i++)
{
var stock = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[i - 1]);
if (stock != null)
{
group_StockRepository.Delete(stock, true);
}
}
}
else
{
for (int i = 2; i < BarCodelist.Length; i++)
{
if (!string.IsNullOrEmpty(BarCodelist[i]))
{
newBarcode = newBarcode + BarCodelist[i] + ";";
}
}
barcodelist.numtype = newBarcode;
tasknumberRep.Update(barcodelist, true);
var stock1 = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[0]);
if (stock1 != null)
{
group_StockRepository.Delete(stock1, true);
}
var stock2 = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[1]);
if (stock2 != null)
{
group_StockRepository.Delete(stock2, true);
}
}
result.Code = 0;
return WebResponseContent.Instance.OK();
});
}
catch (Exception ex)
{
throw;
}
return result;
}
public static ResultMaterstateUp DeleteFHXBarCode()
{
ResultMaterstateUp result = new ResultMaterstateUp();
try
{
VOLContext Context = new VOLContext();
WebResponseContent responseContent = new WebResponseContent();
Idt_task_numberRepository tasknumberRep = new dt_task_numberRepository(Context);
Ibill_group_stockRepository group_StockRepository = new bill_group_stockRepository(Context);
responseContent = tasknumberRep.DbContextBeginTransaction(() =>
{
var barcodelist = tasknumberRep.FindFirst(v => v.taskno == 2);
WriteLog.Info("没有删除之前的负极烘箱条码").Write(barcodelist + "\t" + DateTime.Now, "没有删除之前的负极烘箱条码");
string[] BarCodelist = barcodelist.numtype.Split(";");
string newBarcode = "";
if (BarCodelist.Length <= 2)
{
barcodelist.numtype = "";
tasknumberRep.Update(barcodelist, true);
for (int i = 1; i <= BarCodelist.Length; i++)
{
var stock = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[i - 1]);
if (stock != null)
{
group_StockRepository.Delete(stock, true);
}
}
}
else
{
for (int i = 2; i < BarCodelist.Length; i++)
{
if (!string.IsNullOrEmpty(BarCodelist[i]))
{
newBarcode = newBarcode + BarCodelist[i] + ";";
}
}
barcodelist.numtype = newBarcode;
tasknumberRep.Update(barcodelist, true);
var stock1 = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[0]);
if (stock1 != null)
{
group_StockRepository.Delete(stock1, true);
}
var stock2 = group_StockRepository.FindFirst(v => v.BarCode == BarCodelist[1]);
if (stock2 != null)
{
group_StockRepository.Delete(stock2, true);
}
}
result.Code = 0;
return WebResponseContent.Instance.OK();
});
}
catch (Exception ex)
{
throw;
}
return result;
}
}
}