using Microsoft.EntityFrameworkCore;
|
using Newtonsoft.Json;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
using System;
|
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
using WIDESEA_Comm;
|
using WIDESEA_Comm.LogInfo;
|
using WIDESEA_Comm.MES_Info;
|
using WIDESEA_Comm.MES_Info.Request;
|
using WIDESEA_Comm.TaskNo;
|
using WIDESEA_Common;
|
using WIDESEA_Core.BaseProvider;
|
using WIDESEA_Core.EFDbContext;
|
using WIDESEA_Core.ManageUser;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_Entity.DomainModels;
|
using WIDESEA_Entity.DomainModels.Mes;
|
using WIDESEA_WMS.Common;
|
using WIDESEA_WMS.IRepositories;
|
using WIDESEA_WMS.Repositories;
|
using static WIDESEA_Comm.MES_Info.BasicSN;
|
|
namespace WIDESEA_WMS
|
{
|
public partial class ToMesServer
|
{
|
/// <summary>
|
/// 人工出库
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public WebResponseContent Outsource(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
VOLContext context = new VOLContext();
|
Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context);
|
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
|
string sn = saveModel.MainData["dataSN"].ToString(); //车轮SN号
|
string user = saveModel.MainData["creator"].ToString();
|
string str = "";
|
try
|
{
|
List<string> list = new List<string>();
|
foreach (var SN in sn.Split(","))
|
{
|
if (!string.IsNullOrEmpty(SN))
|
list.Add(SN);
|
}
|
var inventoryList = inventoryRepository.Find(x => list.Contains(x.SN)).ToList();
|
|
foreach (var inventorys in inventoryList.GroupBy(x => x.stationCode))
|
{
|
try
|
{
|
List<detail> lists = new List<detail>();
|
foreach (var inventory in inventorys)
|
{
|
detail detail = new detail();
|
detail.sn = inventory.SN;
|
lists.Add(detail);
|
str += str == "" ? inventory.SN : "," + inventory.SN;
|
}
|
agvInWarehousePara outWarehousePara = new agvInWarehousePara()
|
{
|
//WorkOrder = task.jobID,
|
zoneID = inventorys.Key,
|
//processCode = task.agv_worktype.ToString(),
|
details = lists,
|
layerNo = 1,
|
stackID = "1",
|
warehouseName = "Agv库",
|
Operator = UserContext.Current.UserName,
|
};
|
var postJson = JsonConvert.SerializeObject(outWarehousePara);
|
var mesData = Request.RequestData(postJson, MESAPIAddress.IPAddress_MES + "agvOutWarehouse");
|
if (mesData.Contains("连接尝试失败")) throw new Exception(mesData);
|
MES_Response requestMes = JsonConvert.DeserializeObject<MES_Response>(mesData);
|
if (requestMes.code == "200" && requestMes.Type == "success")
|
{
|
//日志记录上传数据成功
|
WriteWMSLog.LogAdd("", "成功", "MES", "PDA", postJson, mesData, "人工同步MES车轮出库", "agvOutWarehouse", requestMes.message);
|
|
foreach (var inventory in inventorys)
|
{
|
var station = stationinfoRepository.Find(x => x.stationCode == inventory.stationCode).FirstOrDefault();
|
station.quantity = station.quantity - 1;
|
if (station.quantity == 0)
|
{
|
station.stationType = string.Empty;
|
station.heatNumber = string.Empty;
|
station.Number = string.Empty;
|
station.billetID = string.Empty;
|
station.bindSN = string.Empty;
|
station.enable = false;
|
station.tray_status = string.Empty;
|
station.location_state = LocationStateEnum.Empty.ToString();
|
}
|
else
|
{
|
var bindSNS = station.bindSN.Split(",");
|
station.bindSN = OperStr(bindSNS, inventory.SN);
|
var billetS = station.billetID.Split(",");
|
station.billetID = OperStr(billetS, inventory.BilletNumber.ToString());
|
}
|
|
#region 取消跟踪DbContext中被跟踪的实体
|
var currentEntry = stationinfoRepository.DbContext.ChangeTracker.Entries<dt_stationinfo>().FirstOrDefault();
|
if (currentEntry != null) currentEntry.State = EntityState.Detached;
|
#endregion
|
|
stationinfoRepository.Update(station, true);
|
inventoryRepository.Delete(inventory, true);
|
}
|
WriteDBLog.Write($"人工出库成功 ", $"货位编号:{inventorys.Key};SN号:{str}", LogState.Sucess, "PDA", user);
|
}
|
else
|
{
|
WriteWMSLog.LogAdd("", "失败", "MES", "PDA", postJson, mesData, "人工同步MES车轮出库", "agvOutWarehouse", requestMes.message);
|
throw new Exception("人工出库同步MES车轮出库失败!" + requestMes.message);
|
}
|
}
|
catch (Exception ex)
|
{
|
content.Message = ex.Message;
|
WriteDBLog.Write($"人工出库失败 ", new { 错误信息 = ex.Message, 数据 = str }, LogState.Error, "PDA", user);
|
}
|
|
}
|
|
content.OK();
|
}
|
catch (Exception ex)
|
{
|
content.Error($"人工出库失败!:{ex.Message}");
|
WriteDBLog.Write($"人工出库失败 ", new { 错误信息 = ex.Message, 数据 = sn }, LogState.Error, "PDA", user);
|
}
|
return content;
|
}
|
public static string OperStr(string[] strArrty, string SN)
|
{
|
string[] newstr = strArrty.Where(x => x != SN).ToArray();
|
string Newsn = string.Join(",", newstr);
|
|
return Newsn;
|
}
|
/// <summary>
|
/// 外协出库(检测上料)
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
public WebResponseContent OutsourceInbound(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
try
|
{
|
string stationNo = saveModel.MainData["stationNo"].ToString(); //缓存架编号
|
if (string.IsNullOrEmpty(stationNo)) return content.Error("请选择下料口!");
|
string user = saveModel.MainData["creator"].ToString();
|
string sn = saveModel.MainData["dataSN"].ToString(); //车轮SN号
|
|
#region 判断SN号长度、是否存在相同SN号
|
bool strOK = false;
|
bool SNOK = false;
|
for (int i = 1; i < sn.Split(",").Length; i++)
|
{
|
for (int j = 0; j < i; j++)
|
{
|
if (sn.Split(",")[j] == sn.Split(",")[i])
|
strOK = true;
|
if (sn.Split(",")[j].Length != 10)
|
SNOK = true;
|
}
|
}
|
if (strOK)
|
return content.Error("存在相同SN号的车轮信息!请重新扫描!");
|
if (SNOK)
|
return content.Error("车轮SN号有误!请重新扫描!");
|
#endregion
|
|
//dt_mes_detail info = null;
|
//dt_mes_head mes_head = null;
|
VV_Mes_Workinfo mes_Work = null;
|
|
int count = 0; //车轮数量
|
string bindSN = "";
|
List<string> list = new List<string>();
|
foreach (var SN in sn.Split(","))
|
{
|
if (!string.IsNullOrEmpty(SN))
|
list.Add(SN);
|
}
|
foreach (var item in list)
|
{
|
if (item != null)
|
{
|
count++;
|
bindSN += bindSN == "" ? item : "," + item;
|
|
mes_Work = freeDB.Select<VV_Mes_Workinfo>().Where(x => x.SN == item && x.processCode == "28").First();
|
if (mes_Work == null)
|
return content.Error($"第{count}个车轮无检测上料工单信息,请核查工单后在扫描!");
|
//info = freeDB.Select<dt_mes_detail>().Where(x => x.SN == item).First();
|
//if (info == null)
|
// return content.Error($"第{count}个车轮无检测上料工单详情,请核查工单后在扫描!");
|
//mes_head = freeDB.Select<dt_mes_head>().Where(x => x.jobID == info.jobID && x.processCode == "28").First();
|
//if (mes_head == null)
|
// return content.Error($"第{count}个车轮无检测上料工单信息,请核查工单后在扫描!");
|
}
|
}
|
VOLContext Context = new VOLContext();
|
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(Context);
|
var station = freeDB.Select<dt_stationinfo>().Where(x => x.stationCode == stationNo).First();
|
if (freeDB.Select<dt_agvtask>().Where(x => x.agv_fromaddress == station.stationCode).Any())
|
return content.Error($"下料口{stationNo}存在AGV任务,请核实!");
|
if (!station.enable)
|
return content.Error($"下料口{stationNo}被禁用,请核实!");
|
station.quantity = count;
|
station.bindSN = bindSN;
|
station.stationType = mes_Work.drawingNo;
|
station.location_state = "Stroge";
|
station.Number = mes_Work.jobID;
|
if (mes_Work.heatID != null)
|
station.heatNumber = mes_Work.heatID;
|
station.tray_status = "StrogeTray";
|
|
stationinfoRepository.Update(station, true);
|
#region MyRegion
|
//dt_agvtask agvtask = new dt_agvtask
|
//{
|
// //agv_barcode = stationNo,
|
// //agv_code = user,
|
// agv_createtime = DateTime.Now,
|
// agv_fromaddress = stationNo,
|
// agv_qty = i,
|
// agv_grade = 1,
|
// agv_tasktype = AGVTaskTypeEnum.TaskType_Inbound.ToString(),
|
// agv_taskstate = AGVTaskStateEnum.Create.ToString(),
|
// agv_toaddress = "",
|
//};
|
#endregion
|
|
dt_agvtask agvtask = new dt_agvtask()
|
{
|
agv_fromaddress = station.stationCode,
|
agv_id = Guid.NewGuid(),
|
agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
|
agv_grade = 3,
|
agv_createtime = DateTime.Now,
|
agv_taskstate = "Queue",
|
agv_materielid = station.stationType,
|
agv_qty = station.quantity,
|
agv_tasktype = "TaskType_OutsourceOutbound",
|
agv_toaddress = "",
|
agv_userid = user,//"系统",
|
jobID = mes_Work.jobID,
|
bindSN = station.bindSN,
|
agv_worktype = Convert.ToInt32(mes_Work.processCode),
|
agv_materbarcode = mes_Work.materialCode,
|
agv_Traytype = station.tray_type,
|
agv_TrayStatus = station.tray_status
|
};
|
freeDB.Add(agvtask);
|
return content.OK();
|
}
|
catch (Exception ex)
|
{
|
return content.Error($"呼叫AGV失败:{ex.Message}");
|
}
|
}
|
}
|
}
|