using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEA_Comm;
|
using WIDESEA_Comm.TaskNo;
|
using WIDESEA_Common;
|
using WIDESEA_Core.EFDbContext;
|
using WIDESEA_Core.Utilities;
|
using WIDESEA_Entity.DomainModels;
|
using WIDESEA_WMS.IRepositories;
|
using WIDESEA_WMS.Repositories;
|
using static FreeSql.Internal.GlobalFilter;
|
using static System.Collections.Specialized.BitVector32;
|
|
namespace WIDESEA_WMS
|
{
|
public partial class ToMesServer
|
{
|
/// <summary>
|
/// 库内移库
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
public WebResponseContent shiftingparking(SaveModel saveModel)
|
{
|
WebResponseContent content = new WebResponseContent();
|
VOLContext context = new VOLContext();
|
Idt_stationinfoRepository stationinfoRepository = new dt_stationinfoRepository(context);
|
Idt_agvtaskRepository agvtaskRepository = new dt_agvtaskRepository(context);
|
Idt_inventoryRepository inventoryRepository = new dt_inventoryRepository(context);
|
try
|
{
|
string user = saveModel.MainData["creator"].ToString();
|
string from_address = saveModel.MainData["from_address"].ToString();
|
string to_address = saveModel.MainData["to_address"].ToString();
|
var station1 = stationinfoRepository.Find(t => t.stationCode == from_address).FirstOrDefault();
|
if (station1 == null) return content.Error("请输入正确的起点地址!");
|
var station2 = stationinfoRepository.Find(t => t.stationCode == to_address).FirstOrDefault();
|
if (station2 == null) return content.Error("请输入正确的起点地址!");
|
if (!station1.tray_type.Contains("Small") && station2.area != "4")
|
throw new Exception($"大托盘只能存放在库区4!");
|
if (station1.tray_type.Contains("Small") && station2.area != "3" && station2.area != "2")
|
throw new Exception($"小托盘只能存放在库区2/库区3!");
|
if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(from_address) || x.agv_toaddress.Contains(from_address)).Any())
|
throw new Exception($"起点{from_address}已存在任务!");
|
if (agvtaskRepository.Find(x => x.agv_fromaddress.Contains(to_address) || x.agv_toaddress.Contains(to_address)).Any())
|
throw new Exception($"终点{to_address}已存在任务!");
|
if (station1.location_state != LocationStateEnum.Stroge.ToString())
|
throw new Exception($"起点{from_address}不是有货!");
|
if (station2.location_state != LocationStateEnum.Empty.ToString())
|
throw new Exception($"终点{to_address}不是空货位!");
|
if (string.IsNullOrEmpty(station1.stationType))
|
throw new Exception($"起点{from_address}未绑定物料类型!");
|
|
if (stationinfoRepository.Find(x => x.area == station2.area && x.line == station2.line && x.enable && x.location_state != LocationStateEnum.Empty.ToString() && x.stationType != station1.stationType).Any())
|
throw new Exception($"终点{to_address}同行存在与起点物料类型不匹配!");
|
var inventory = inventoryRepository.Find(x => x.stationCode == station1.stationCode).FirstOrDefault();
|
if (inventory == null) throw new Exception($"起点{from_address}未找到库存信息!");
|
|
dt_agvtask agvtask = new dt_agvtask()
|
{
|
agv_fromaddress = station1.stationCode,
|
agv_id = Guid.NewGuid(),
|
agv_tasknum = IdenxManager.GetTaskNo("KH-", "WMS"),
|
agv_grade = 1,
|
agv_createtime = DateTime.Now,
|
agv_taskstate = "Create",
|
agv_materielid = station1.stationType,
|
agv_qty = station1.quantity,
|
agv_tasktype = AGVTaskTypeEnum.TaskType_Carry.ToString(),
|
agv_toaddress = station2.stationCode,
|
agv_userid = user,//"系统",
|
jobID = station1.Number,// mes_head.jobID,
|
bindSN = station1.bindSN,
|
agv_worktype = 0, //Convert.ToInt32(mes_head.processCode),
|
agv_materbarcode = inventory.materialCode,
|
agv_Traytype = station1.tray_type,
|
agv_TrayStatus = station1.tray_status
|
};
|
agvtaskRepository.Add(agvtask, true);
|
station1.location_state = LocationStateEnum.OutBusy.ToString();
|
stationinfoRepository.Update(station1, true);
|
station2.location_state = LocationStateEnum.InBusy.ToString();
|
station2.heatNumber = station1.heatNumber;
|
station2.Number = station1.Number;
|
station2.billetID = station1.billetID;
|
station2.stationType = station1.stationType;
|
stationinfoRepository.Update(station2, true);
|
content.OK();
|
|
}
|
catch (Exception ex)
|
{
|
content.Error($"呼叫AGV失败:{ex.Message}");
|
}
|
return content;
|
}
|
}
|
}
|