using Model.ModelDto;
|
using Model.ModelVm;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Linq.Expressions;
|
using Model.InterFaceModel;
|
using Model.ModelDto.BllSoDto;
|
using Model.ModelDto.SysDto;
|
using Model.ModelVm.SysVm;
|
using Newtonsoft.Json;
|
using Utility.Tools;
|
using WMS.BLL.Logic;
|
using WMS.BLL.LogServer;
|
using WMS.BLL.SysServer;
|
using WMS.DAL;
|
using WMS.Entity.BllAsnEntity;
|
using WMS.Entity.BllSoEntity;
|
using WMS.Entity.Context;
|
using WMS.Entity.DataEntity;
|
using WMS.Entity.LogEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.IBllAsnServer;
|
using System.Diagnostics;
|
using System.Security.Policy;
|
using System.Threading.Tasks;
|
using WMS.IBLL.IBllSoServer;
|
using WMS.Entity.BllQualityEntity;
|
using ZXing.IMB;
|
using System.Collections;
|
using Microsoft.VisualBasic;
|
|
namespace WMS.BLL.BllAsnServer
|
{
|
enum SkuTypeEnum
|
{
|
原料吨袋,
|
袋子,
|
成品罐装满桶,
|
原料罐装桶,
|
成品吨袋,
|
母托盘,
|
子托盘塑料,
|
子托盘木质,
|
其它
|
|
}
|
public class PalletBindServer : DbHelper<BllPalletBind>, IPalletBindServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
public PalletBindServer() : base(Db)
|
{
|
}
|
|
#region 托盘绑定
|
public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count)
|
{
|
string sqlString = string.Empty;
|
string sqlCount = string.Empty;
|
string sqlPub = string.Empty;
|
try
|
{
|
//var strList = new List<int>();
|
|
//if (!string.IsNullOrWhiteSpace(model.SkuNo) || !string.IsNullOrWhiteSpace(model.SkuName) || !string.IsNullOrWhiteSpace(model.LotNo))
|
//{
|
// var detailList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0")
|
// .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), m => m.SkuNo.Contains(model.SkuNo.Trim()))
|
// .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), m => m.SkuNo.Contains(model.SkuName.Trim()))
|
// .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), m => m.SkuNo.Contains(model.LotNo.Trim()))
|
// .Select(m => m.Id).Distinct().ToList();
|
// strList = detailList;
|
//}
|
//Expression<Func<BllPalletBind, bool>> item = Expressionable.Create<BllPalletBind>()
|
// .AndIF(!string.IsNullOrWhiteSpace(model.ASNNo), it => it.ASNNo.Contains(model.ASNNo.Trim()))
|
// .AndIF(!string.IsNullOrWhiteSpace(model.PalletNo), it => it.PalletNo.Contains(model.PalletNo.Trim()))
|
// .AndIF(!string.IsNullOrWhiteSpace(model.LocatNo), it => it.LocatNo.Contains(model.LocatNo.Trim()))
|
// .AndIF(!string.IsNullOrWhiteSpace(model.Status), it => it.Status == model.Status)
|
// .AndIF(!string.IsNullOrWhiteSpace(model.StartTime), it => it.CreateTime >= Convert.ToDateTime(model.StartTime))
|
// .AndIF(!string.IsNullOrWhiteSpace(model.EndTime), it => it.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1))
|
// .AndIF(!string.IsNullOrWhiteSpace(model.SkuNo) || !string.IsNullOrWhiteSpace(model.SkuName) || !string.IsNullOrWhiteSpace(model.LotNo), m => strList.Contains((int)m.ASNDetailNo))
|
// .ToExpression();//注意 这一句 不能少
|
|
var total = 0;
|
var data = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0")
|
.LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
|
.LeftJoin<BllPalletBind>((a, b, c, d) => a.BindNo == d.Id)
|
.WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), (a, b, c, d) => a.LotNo == model.LotNo)
|
.WhereIF(!string.IsNullOrWhiteSpace(model.ASNNo), (a, b, c, d) => d.ASNNo.Contains(model.ASNNo.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(model.PalletNo), (a, b, c, d) => d.PalletNo.Contains(model.PalletNo.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(model.LocatNo), (a, b, c, d) => d.LocatNo.Contains(model.LocatNo.Trim()))
|
.WhereIF(!string.IsNullOrWhiteSpace(model.Status), (a, b, c, d) => d.Status == model.Status)
|
.WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), (a, b, c, d) => d.CreateTime >= Convert.ToDateTime(model.StartTime))
|
.WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), (a, b, c, d) => d.CreateTime <= Convert.ToDateTime(model.EndTime).AddDays(1))
|
.WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), (a, b, c, d) => a.SkuNo == model.SkuNo)
|
.Select((a, b, c, d) => new PalletBindDto()
|
{
|
Id = d.Id,
|
ASNNo = d.ASNNo,
|
ASNDetailNo = d.ASNDetailNo,
|
|
LocatNo = d.LocatNo,
|
LotNo = d.LotNo,
|
LotText = d.LotText,
|
SupplierLot = d.SupplierLot,
|
|
PalletNo = d.PalletNo,
|
PalletNo2 = d.PalletNo2,
|
PalletNo3 = d.PalletNo3,
|
IsBale = d.IsBale,
|
IsBelt = d.IsBelt,
|
Qty = d.Qty,
|
FullQty = d.FullQty,
|
PalletType = d.PalletType,
|
|
Status = d.Status,
|
CompleteTime = d.CompleteTime,
|
ProductionTime = d.ProductionTime,
|
ExpirationTime = d.ExpirationTime,
|
|
InspectMark = d.InspectMark,
|
BitPalletMark = d.BitPalletMark,
|
RealWeight = a.RealWeight, //实际重量
|
|
SkuNo = a.SkuNo, //物料编码
|
SkuName = a.SkuName, //物料名称
|
|
CreateUser = b.RealName,
|
CreateTime = d.CreateTime,
|
|
}).OrderByDescending(a => a.CreateTime)
|
.ToOffsetPage(model.Page, model.Limit, ref total);
|
count = total;
|
|
return data;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
public List<BoxInfoDto> GetBoxInfoList(BoxInfoVm model, out int count)
|
{
|
try
|
{
|
var total = 0;
|
var data = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == model.BindNo)
|
.LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
|
.LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id)
|
.LeftJoin<BllPalletBind>((a, b, c, d) => a.BindNo == d.Id)
|
.Select((a, b, c, d) => new BoxInfoDto()
|
{
|
Id = a.Id,
|
ASNNo = a.ASNNo,
|
ASNDetailNo = a.ASNDetailNo,
|
BindNo = a.BindNo,
|
BoxNo = a.BoxNo,
|
BoxNo2 = a.BoxNo2,
|
BoxNo3 = a.BoxNo3,
|
PalletNo = a.PalletNo,
|
PalletNo2 = a.PalletNo2,
|
PalletNo3 = a.PalletNo3,
|
Qty = a.Qty,
|
FullQty = a.FullQty,
|
Status = a.Status,
|
SkuNo = a.SkuNo,
|
SkuName = a.SkuName,
|
LotNo = a.LotNo,
|
LotText = a.LotText,
|
ProductionTime = a.ProductionTime,
|
CompleteTime = a.CompleteTime,
|
ExpirationTime = a.ExpirationTime,
|
SupplierLot = a.SupplierLot,
|
InspectMark = a.InspectMark,
|
BitBoxMark = a.BitBoxMark,
|
InspectStatus = a.InspectStatus,
|
Origin = a.Origin,
|
BindStatus = d.Status,
|
|
CreateUserName = b.RealName,
|
UpdateUserName = c.RealName,
|
CreateTime = a.CreateTime,
|
UpdateTime = a.UpdateTime
|
}).ToOffsetPage(model.Page, model.Limit, ref total);
|
count = total;
|
return data;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
//删除托盘绑定信息
|
public void DelPalletBind(int id, int userId)
|
{
|
try
|
{
|
var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Id == id);
|
if (bind == null)
|
{
|
throw new Exception("未查询到托盘绑定信息");
|
}
|
if (bind.Status != "0")
|
{
|
throw new Exception("该托盘绑定信息的状态不是等待入库,不能删除");
|
}
|
//获取托盘信息
|
var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.Status != "0" && m.PalletNo == bind.PalletNo);
|
if (pallet == null)
|
{
|
throw new Exception("未查询到托盘信息");
|
}
|
if (pallet.Status == "0")
|
{
|
throw new Exception("该托盘信息的状态是未使用,不能删除");
|
}
|
Db.BeginTran();
|
var time = DateTime.Now;
|
//托盘绑定的箱支信息集合
|
var boxList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == bind.Id).ToList();
|
|
foreach (var b in boxList)
|
{
|
b.ASNNo = "";
|
b.ASNDetailNo = null;
|
b.BindNo = null;
|
b.Status = "0";
|
b.IsDel = "1";
|
b.CompleteTime = null;
|
b.UpdateTime = time;
|
b.UpdateUser = userId;
|
var i = Db.Updateable(b).ExecuteCommand();
|
if (i != 1)
|
{
|
throw new Exception($"{b.BoxNo}箱码、{b.BoxNo3}支码删除失败");
|
}
|
}
|
//判断是否有指定储位
|
if (!string.IsNullOrWhiteSpace(bind.LocatNo))
|
{
|
//储位状态变更为空储位
|
var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == bind.LocatNo);
|
locate.Status = "0";
|
Db.Updateable(locate).ExecuteCommand();
|
}
|
//判断是否有任务
|
if (!string.IsNullOrWhiteSpace(bind.TaskNo))
|
{
|
var task = Db.Queryable<LogTask>().First(m => m.TaskNo == bind.TaskNo);
|
Db.Deleteable(task).ExecuteCommand();
|
}
|
//删除托盘绑定信息
|
bind.IsDel = "1";
|
bind.UpdateTime = time;
|
bind.UpdateUser = userId;
|
Db.Updateable(bind).ExecuteCommand();
|
|
pallet.Status = "0";
|
pallet.UpdateTime = time;
|
pallet.UpdateUser = userId;
|
Db.Updateable(pallet).ExecuteCommand();
|
|
//入库单明细
|
var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == bind.ASNDetailNo);
|
if (noticeDetail == null)
|
{
|
throw new Exception("未查询到托盘绑定的入库单明细信息");
|
}
|
//修改入库单明细
|
noticeDetail.FactQty -= bind.Qty;
|
//判断入库单明细组托数量是否为0,是:修改明细状态
|
if (noticeDetail.FactQty == 0)
|
{
|
noticeDetail.Status = "0";
|
//获取状态不是等待执行的明细信息
|
var count = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.Id != noticeDetail.Id && m.ASNNo == bind.ASNNo && m.Status != "0");
|
if (count == 0)
|
{
|
//修改入库单信息
|
var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == bind.ASNNo);
|
notice.Status = "0";
|
notice.UpdateTime = time;
|
notice.UpdateUser = userId;
|
Db.Updateable(notice).ExecuteCommand();
|
}
|
|
}
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
new OperationASNServer().AddLogOperationAsn("入库作业", "托盘绑定", bind.PalletNo, "删除", $"删除了入库单:{bind.ASNNo}、托盘码:{bind.PalletNo}的信息", userId);
|
Db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
//删除绑定的箱码信息
|
public void DelBindBoxInfo(int id, int userId)
|
{
|
try
|
{
|
var boxInfo = Db.Queryable<BllBoxInfo>().First(m => m.IsDel == "0" && m.Id == id);
|
if (boxInfo == null)
|
{
|
throw new Exception("未查询到绑定箱支信息");
|
}
|
if (boxInfo.Status == "2")
|
{
|
throw new Exception("该箱支信息状态为已入库,不能删除");
|
}
|
var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Id == boxInfo.BindNo);
|
if (bind == null)
|
{
|
throw new Exception("未查询到托盘绑定信息");
|
}
|
if (bind.Status != "0")
|
{
|
throw new Exception("该托盘绑定信息的状态不是等待入库,不能删除");
|
}
|
var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.Status != "0" && m.PalletNo == bind.PalletNo);
|
if (pallet == null)
|
{
|
throw new Exception("未查询到托盘信息");
|
}
|
if (pallet.Status == "0")
|
{
|
throw new Exception("该托盘信息的状态是未使用,不能删除");
|
}
|
Db.BeginTran();
|
var time = DateTime.Now;
|
//删除解绑箱支信息
|
boxInfo.ASNNo = "";
|
boxInfo.ASNDetailNo = null;
|
boxInfo.BindNo = null;
|
boxInfo.Status = "0";
|
boxInfo.CompleteTime = null;
|
boxInfo.IsDel = "1";
|
boxInfo.UpdateTime = time;
|
boxInfo.UpdateUser = userId;
|
Db.Updateable(boxInfo).ExecuteCommand();
|
//修改托盘绑定信息
|
bind.Qty -= boxInfo.Qty;
|
|
if (bind.Qty == 0)
|
{
|
//判断是否有指定储位
|
if (!string.IsNullOrWhiteSpace(bind.LocatNo))
|
{
|
bind.LocatNo = "";
|
//储位状态变更为空储位
|
var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == bind.LocatNo);
|
locate.Status = "0";
|
Db.Updateable(locate).ExecuteCommand();
|
}
|
//判断是否有任务
|
if (!string.IsNullOrWhiteSpace(bind.TaskNo))
|
{
|
var task = Db.Queryable<LogTask>().First(m => m.TaskNo == bind.TaskNo);
|
Db.Deleteable(task).ExecuteCommand();
|
}
|
//删除托盘绑定信息
|
bind.IsDel = "1";
|
bind.UpdateTime = time;
|
bind.UpdateUser = userId;
|
|
//修改托盘信息状态
|
pallet.Status = "0";
|
pallet.UpdateTime = time;
|
pallet.UpdateUser = userId;
|
Db.Updateable(pallet).ExecuteCommand();
|
}
|
Db.Updateable(bind).ExecuteCommand();
|
|
//入库单明细
|
var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == bind.ASNDetailNo);
|
if (noticeDetail == null)
|
{
|
throw new Exception("未查询到托盘绑定的入库单明细信息");
|
}
|
//修改入库单明细 因在取消任务时已减去数量 所以不需要再次减
|
//noticeDetail.FactQty -= boxInfo.Qty;
|
//判断入库单明细组托数量是否为0,是:修改明细状态
|
if (noticeDetail.FactQty == 0)
|
{
|
noticeDetail.Status = "0";
|
//获取状态不是等待执行的明细信息
|
var count = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.Id != noticeDetail.Id && m.ASNNo == bind.ASNNo && m.Status != "0");
|
if (count == 0)
|
{
|
//修改入库单信息
|
var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == bind.ASNNo);
|
notice.Status = "0";
|
notice.UpdateTime = time;
|
notice.UpdateUser = userId;
|
Db.Updateable(notice).ExecuteCommand();
|
}
|
|
}
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
new OperationASNServer().AddLogOperationAsn("入库作业", "托盘绑定", boxInfo.BoxNo3, "删除", $"删除了箱码:{boxInfo.BoxNo}、追溯码:{boxInfo.BoxNo3}的箱支物料信息", userId);
|
Db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
#endregion
|
|
#region 指定储位
|
//指定储位数据源(正常的空储位)
|
public List<LocatDto> GetLocateList(string houseNo, string roadwayNo, string row, string column, string layer, string locateNo, int page, int limit, out int count)
|
{
|
try
|
{
|
Expression<Func<SysStorageLocat, bool>> item = Expressionable.Create<SysStorageLocat>()
|
.AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo)
|
.AndIF(!string.IsNullOrWhiteSpace(row), m => m.Row == int.Parse(row))
|
.AndIF(!string.IsNullOrWhiteSpace(column), m => m.Column == int.Parse(column))
|
.AndIF(!string.IsNullOrWhiteSpace(layer), m => m.Layer == int.Parse(layer))
|
.AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo.Contains(locateNo))
|
.And(m => m.IsDel == "0" && m.Status == "0" && m.Flag == "0" && m.WareHouseNo == houseNo)
|
.ToExpression();//注意 这一句 不能少
|
var total = 0;
|
var list = Db.Queryable<SysStorageLocat>().Where(item)
|
.Select(a => new LocatDto()
|
{
|
Id = a.Id,
|
RoadwayNo = a.RoadwayNo,
|
LocatNo = a.LocatNo,
|
Row = a.Row,
|
Column = a.Column,
|
Layer = a.Layer,
|
Status = a.Status
|
}).ToOffsetPage(page, limit, ref total);
|
count = total;
|
|
return list;
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
//保存指定的储位
|
public void SaveAppointSlot(int bindId, int locateId, int userId)
|
{
|
try
|
{
|
//托盘绑定信息
|
var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.Id == bindId);
|
if (bind == null)
|
{
|
throw new Exception("未查询到托盘绑定的信息");
|
}
|
if (bind.Status != "0")
|
{
|
throw new Exception("该托盘绑定的信息状态不是等待执行,不能指定储位,请核实!");
|
}
|
//储位
|
var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.Id == locateId);
|
if (locate == null)
|
{
|
throw new Exception("未查询到储位的信息");
|
}
|
if (locate.Status != "0" || locate.Flag != "0")
|
{
|
throw new Exception("该储位状态不是空储位或标志不是正常的");
|
}
|
Db.BeginTran();
|
try
|
{
|
var time = DateTime.Now;
|
//判断托盘绑定信息是否已有指定储位
|
if (!string.IsNullOrWhiteSpace(bind.LocatNo))
|
{
|
var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == bind.LocatNo);
|
locate2.Status = "0";
|
Db.Updateable(locate2).ExecuteCommand();
|
}
|
//获取同托盘的托盘绑定信息
|
var bindList = Db.Queryable<BllPalletBind>()
|
.Where(m => m.IsDel == "0" && m.PalletNo == bind.PalletNo && m.Status == "0").ToList();
|
if (bindList.Count > 0)
|
{
|
foreach (var b in bindList)
|
{
|
b.LocatNo = locate.LocatNo;
|
b.UpdateTime = time;
|
b.UpdateUser = userId;
|
}
|
|
Db.Updateable(bindList).ExecuteCommand();
|
}
|
//修改指定的储位
|
bind.LocatNo = locate.LocatNo;
|
bind.UpdateTime = time;
|
bind.UpdateUser = userId;
|
locate.Status = "2";
|
Db.Updateable(bind).ExecuteCommand();
|
Db.Updateable(locate).ExecuteCommand();
|
|
new OperationASNServer().AddLogOperationAsn("入库作业", "托盘绑定", bind.PalletNo, "编辑", $"指定了储位:{locate.LocatNo}、单据号:{bind.ASNNo}、托盘码:{bind.PalletNo}的信息", userId);
|
Db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
#endregion
|
|
// 绑定物料托盘
|
public void WcsBindPallet(WcsPalletBindVm model)
|
{
|
try
|
{
|
#region 判断
|
|
var skuNo = "";
|
var materials = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();
|
SysMaterials material = null;
|
switch (model.SkuType)
|
{
|
case "10":
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.母托盘).ToString());
|
//material = materials.FirstOrDefault(m => m.Type == ((int)SkuTypeEnum.母托盘).ToString());
|
break;
|
case "20": //子托盘塑料-蓝色 100098
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.子托盘塑料).ToString());
|
break;
|
case "21": //子托盘木制-单面 100097
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.子托盘木质).ToString());
|
break;
|
case "22": //子托盘塑料-黑色 100096
|
material = materials.First(m => m.SkuNo == "100096");
|
break;
|
case "23": //子拖盘木制-双面 100095
|
material = materials.First(m => m.SkuNo == "100095");
|
break;
|
case "30":
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.成品吨袋).ToString());
|
break;
|
case "31":
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.原料吨袋).ToString());
|
break;
|
case "40":
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.袋子).ToString());
|
break;
|
case "50": //50:塑料空桶 可拆桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.原料罐装桶).ToString());
|
break;
|
case "51": //51:钢质空桶 可拆桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.原料罐装桶).ToString());
|
break;
|
case "52": //52:纸质空桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.原料罐装桶).ToString());
|
break;
|
case "53": //53:铁质空桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.原料罐装桶).ToString());
|
break;
|
case "60": //60:塑料满桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.成品罐装满桶).ToString());
|
break;
|
case "61": //61:钢质满桶 可拆桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.成品罐装满桶).ToString());
|
break;
|
case "62": //62:纸质满桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.成品罐装满桶).ToString());
|
break;
|
case "63": //63:铁质满桶
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.成品罐装满桶).ToString());
|
break;
|
case "99":
|
material = materials.First(m => m.Type == ((int)SkuTypeEnum.其它).ToString());
|
break;
|
default:
|
break;
|
}
|
|
if (material == null)
|
{
|
throw new Exception("任务类型无效!");
|
}
|
else
|
{
|
skuNo = material.SkuNo;
|
}
|
if (string.IsNullOrEmpty(model.PalletNo))
|
{
|
throw new Exception("托盘号不可为空!");
|
}
|
|
if (model.SkuQty <= 0)
|
{
|
throw new Exception("物料数量不可为空!");
|
}
|
|
#endregion
|
|
Db.BeginTran();
|
|
//托盘是否存在
|
var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
|
if (pallet == null)
|
{
|
throw new Exception("未查询到托盘信息,请核实!");
|
}
|
|
if (pallet.Status == "1")
|
{
|
throw new Exception("托盘的状态为使用中,请核实!");
|
}
|
var plnList = new List<string>()
|
{
|
"100099",
|
"100098",
|
"100097",
|
"100096",
|
"100095",
|
};
|
//根据批次获取入库单 根据入库单获取物料信息
|
//var stockDetali = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.LotNo == model.LotNo);
|
|
if (plnList.Contains(skuNo))//空托盘跺
|
{
|
var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == skuNo);
|
// 插入托盘绑定表
|
var modelPb = new BllPalletBind
|
{
|
ASNNo = "",
|
PalletNo = model.PalletNo,
|
PalletNo2 = "",
|
PalletNo3 = "",
|
PalletType = model.SubPallet,
|
Qty = model.SkuQty,
|
FullQty = null,
|
Status = "0",
|
Type = "1",
|
LotNo = "",
|
LotText = "",
|
SupplierLot = model.SupplierLot,
|
InspectMark = "",
|
BitPalletMark = "",
|
IsBale = "",
|
IsBelt = "",
|
|
CreateUser = 0,
|
};
|
var id = Db.Insertable(modelPb).ExecuteReturnIdentity();
|
// 添加箱支关系表
|
var box = new BllBoxInfo()
|
{
|
ASNNo = "",
|
ASNDetailNo = null,
|
BindNo = id,
|
PalletNo = model.PalletNo,
|
Status = "1",
|
CompleteTime = DateTime.Now,
|
Qty = model.SkuQty,
|
FullQty = null,
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
LotNo = model.LotNo,
|
LotText = model.LotText,
|
SupplierLot = model.SupplierLot,
|
InspectStatus = "1",
|
Origin = "PLC",
|
Weight = sku.Weight,
|
RealWeight = decimal.Parse(model.SkuWeight),
|
|
CreateUser = 0,
|
};
|
|
Db.Insertable(box).ExecuteCommand();
|
// 更改托盘使用状态
|
var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
//添加托盘记录表数据
|
sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{model.PalletNo}','组盘','0',getDate(),0,NULL,NULL);";
|
Db.Ado.ExecuteCommand(sqlStr);
|
Db.CommitTran();
|
}
|
else
|
{
|
// 根据物料批次查找入库单显示
|
var notice = Db.Queryable<BllArrivalNotice>()
|
.Where(m => m.IsDel == "0" && m.Status != "2" && m.Status != "3" && m.Status != "4" && m.Status != "5" && m.Status != "6")
|
.WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), m => m.LotNo == model.LotNo)
|
.WhereIF(!string.IsNullOrWhiteSpace(model.SupplierLot), m => m.SupplierLot == model.SupplierLot)
|
.OrderBy(m => m.CreateTime).First();
|
|
var detail = Db.Queryable<BllArrivalNoticeDetail>().Where(a => a.IsDel == "0" && a.ASNNo == notice.ASNNo).First();
|
////.Where(m => m.SkuNo == skuNo)
|
//.WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), m => m.LotNo == model.LotNo)
|
//.WhereIF(!string.IsNullOrWhiteSpace(model.SupplierLot), m => m.SupplierLot == model.SupplierLot)
|
//.Where(m => m.IsDel == "0" && m.Status == "0" && m.Status == "1")
|
//.OrderBy(m => m.CreateTime).First();
|
if (detail == null)
|
{
|
throw new Exception("当前物料及批次未查询到相对应的单据,请核实!");
|
}
|
int rqty = (int)(detail.CompleteQty + model.SkuQty);
|
int zqty = (int)(detail.FactQty + model.SkuQty);
|
//判断入库数量是否超入
|
if (rqty > detail.Qty)
|
{
|
throw new Exception("-1:当前入库单据入库数量已超入,请核实!");
|
}
|
//判断已组数量是否超出
|
if (zqty > detail.Qty)
|
{
|
throw new Exception("-1:当前入库单据已组数量已超出,请核实!");
|
}
|
//获取入库单总单
|
var arrival = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == detail.ASNNo);
|
if (arrival == null)
|
{
|
throw new Exception("当前物料及批次未查询到相对应的单据,请核实!");
|
}
|
|
#region 包装信息
|
var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0");
|
var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo);
|
var pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo);
|
var pNum = 0;//托盘物品数量
|
if (pack.L5Num.HasValue)
|
{
|
pNum = (int)pack.L5Num;
|
}
|
else if (pack.L4Num.HasValue)
|
{
|
pNum = (int)pack.L4Num;
|
}
|
else if (pack.L3Num.HasValue)
|
{
|
pNum = (int)pack.L3Num;
|
}
|
else if (pack.L2Num.HasValue)
|
{
|
pNum = (int)pack.L2Num;
|
}
|
else if (pack.L1Num.HasValue)
|
{
|
pNum = (int)pack.L1Num;
|
}
|
if (pNum == 0)
|
{
|
throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!");
|
}
|
|
if (model.SkuQty > pNum)
|
{
|
throw new Exception($"绑定失败,托盘{model.PalletNo}实际数量大于物品包装数量!");
|
}
|
#endregion
|
//托盘绑定信息
|
var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == detail.Id && m.PalletNo == model.PalletNo && m.Status != "2");
|
var bindId = 0;
|
if (bind == null)
|
{
|
bind = new BllPalletBind
|
{
|
ASNNo = detail.ASNNo,
|
ASNDetailNo = detail.Id,
|
PalletNo = model.PalletNo,
|
PalletNo2 = "",
|
PalletNo3 = "",
|
PalletType = model.SubPallet,
|
Qty = model.SkuQty,
|
FullQty = pNum,
|
Status = "0",
|
Type = "0",
|
LotNo = model.LotNo,
|
LotText = "",
|
SupplierLot = "",
|
InspectMark = materials[0].IsInspect == "0" ? "0" : "1",
|
BitPalletMark = model.SkuQty == pNum ? "0" : "1",
|
IsBale = model.IsBale,//是否裹包
|
IsBelt = model.IsBelt,//是否打带
|
CreateUser = 0
|
};
|
if (arrival.Type == "5")
|
{
|
bind.InspectMark = "1";
|
|
}
|
if (model.ManuFactureDate != null)
|
{
|
bind.ProductionTime = model.ManuFactureDate;
|
bind.ExpirationTime = model.ManuFactureDate.AddDays((double)material.Warranty);
|
}
|
|
// 插入托盘绑定表
|
bindId = Db.Insertable(bind).ExecuteReturnIdentity();
|
}
|
else
|
{
|
if (bind.Status != "4")
|
{
|
throw new Exception("-1:当前托盘正在执行中,绑定失败,请核实!");
|
}
|
}
|
|
// 添加箱支关系表
|
var box = new BllBoxInfo()
|
{
|
ASNNo = detail.ASNNo,
|
ASNDetailNo = detail.Id,
|
BindNo = bindId,
|
PalletNo = model.PalletNo,
|
Status = "1",
|
CompleteTime = DateTime.Now,
|
Qty = model.SkuQty,
|
FullQty = pNum,
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
LotNo = model.LotNo,
|
LotText = model.LotText,
|
SupplierLot = model.SupplierLot,
|
InspectStatus = sku.IsInspect == "0" ? "0" : "1",
|
Origin = "PLC",
|
Weight = sku.Weight,
|
RealWeight = decimal.Parse(model.SkuWeight),
|
|
|
CreateUser = 0,
|
};
|
if (arrival.Type == "5")
|
{
|
box.InspectMark = "1";
|
|
}
|
if (model.ManuFactureDate != null)
|
{
|
box.ProductionTime = model.ManuFactureDate;
|
box.ExpirationTime = model.ManuFactureDate.AddDays((double)material.Warranty);
|
}
|
|
Db.Insertable(box).ExecuteCommand();
|
|
// 更新托盘绑定表
|
if (bind.FullQty < bind.Qty)
|
{
|
throw new Exception("托盘绑定数量已超出该物料包装数量");
|
}
|
|
if (bind.FullQty == bind.Qty)
|
{
|
bind.BitPalletMark = "0";
|
}
|
Db.Updateable(bind).Where(m => m.Id == bindId).ExecuteCommand();
|
|
// 更改入库单明细已组数量
|
var sqlString = string.Empty;
|
sqlString += $"update BllArrivalNoticeDetail set FactQty = FactQty + '{model.SkuQty}' where id = '{detail.Id}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
|
// 更改入库单及入库明细状态
|
if (detail.Status == "0")
|
{
|
var sqlString2 = string.Empty;
|
sqlString2 += $"update BllArrivalNotice set Status = '1',CompleteTime= getDate() where ASNNo = '{detail.ASNNo}' and Status ='0';";
|
sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',CompleteTime= getDate() where id = '{detail.Id}' and Status ='0';";
|
Db.Ado.ExecuteCommand(sqlString2);
|
}
|
|
// 更改托盘使用状态
|
var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
//添加托盘记录表数据
|
sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{detail.ASNNo}','组盘','0',getDate(),0,NULL,NULL);";
|
Db.Ado.ExecuteCommand(sqlStr);
|
Db.CommitTran();
|
}
|
|
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
throw ex;
|
}
|
}
|
|
//申请储位(包含组托的信息)
|
public OutCommandDto RequestLocation(RequestLocate model)
|
{
|
try
|
{
|
OutCommandDto comDto;//返回wcs的入库命令
|
|
if (model.IsBale != "0")
|
{
|
model.IsBale = "1";
|
}
|
|
var isHaveLocateNo = false; //托盘绑定信息中是否已有指定储位
|
|
var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == model.PalletNo);//托盘信息
|
|
//判断托盘条码是否有效
|
if (stock == null)
|
{
|
throw new Exception("托盘条码不受WMS管理,不可入库!");
|
}
|
|
//获取当前托盘的拣货信息 是否存在待拣货等状态
|
var allot = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.PalletNo == model.PalletNo).ToList();
|
//var allotStatus = "1,2,3,4";
|
var allotStatus = new List<string>() { "1", "2", "3", "4" };
|
if (allot.Count > 0)
|
{
|
if (allotStatus.Contains(allot[allot.Count - 1].Status))
|
//if (allot[allot.Count].Status == "1" || allot[allot.Count].Status=="2" || allot[allot.Count].Status == "3" || allot[allot.Count].Status == "4")
|
{
|
throw new Exception("当前托盘拣货状态信息异常,不可入库!");
|
}
|
}
|
|
#region
|
|
//获取入库单是否拥有
|
//var arrival = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.Status == "1" && a.LotNo == model.LotNo);
|
//
|
|
//判断是否是已经申请的任务
|
var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.Type == "0" && m.PalletNo == model.PalletNo && m.Status == "1");
|
if (task != null)
|
{
|
var r = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
|
comDto = new OutCommandDto()
|
{
|
PalletNo = model.PalletNo,//托盘号
|
PalletType = model.SubPallet,//托盘类型
|
StartLocat = model.StationNum, // 起始位置
|
EndLocat = task.EndLocat, // 目标位置
|
EndRoadway = r.RoadwayNo, // 目标巷道
|
TaskNo = task.TaskNo, // 任务号
|
Type = "0",// 任务类型 (入库)
|
OutMode = "", //目标地址
|
Order = 1
|
};
|
return comDto;
|
|
}
|
int aa = 1;
|
var bol = true;
|
// 回流入库
|
var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == model.PalletNo).ToList();
|
if (stockDetail.Count > 0)
|
{
|
bol = false;
|
//判断是否为相同托盘码入库
|
if (!string.IsNullOrEmpty(stockDetail[0].LocatNo))
|
{
|
throw new Exception("当前托盘条码已在库内,请核实是否为重复托盘!");
|
}
|
aa = 0;
|
}
|
|
|
Db.BeginTran();
|
//绑定托盘信息
|
if (bol)
|
{
|
// 判断组盘信息是否已存在 //查找托盘绑定信息 状态为等待入库
|
var palletBind = Db.Queryable<BllPalletBind>().Where(m => m.PalletNo == model.PalletNo && m.IsDel == "0" && m.Status == "0").ToList();
|
if (palletBind.Count <= 0)
|
{
|
WcsBindPallet(model);
|
}
|
}
|
|
//查询托盘绑定信息(状态为等待入库的或者正在入库的)
|
var palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.Status == "0").ToList();
|
if (aa == 0)
|
{
|
palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == model.PalletNo && m.LotNo == model.LotNo).OrderByDescending(m => m.CreateTime).ToList();
|
}
|
var haveLocate = palletBindList.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m.LocatNo));
|
if (palletBindList.Count >= 1) //正常入库
|
{
|
if (haveLocate != null)
|
{
|
isHaveLocateNo = true; //已有指定储位
|
}
|
if (palletBindList.First().Type == "0") //物料托入库
|
{
|
if (aa == 1)
|
{
|
//判断是否绑定单据及单据状态是否正常
|
foreach (var item in palletBindList)
|
{
|
var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == item.ASNNo);
|
if (notice == null)
|
{
|
throw new Exception("托盘存在物料未绑定入库单,不可入库!");
|
}
|
|
if (notice.Status == "3")
|
{
|
throw new Exception($"入库单{item.ASNNo}已关闭,不可入库!");
|
}
|
}
|
}
|
}
|
}
|
|
var areaCode = "";
|
SysStorageArea area = null;
|
switch (model.SubPallet)
|
{
|
case "0":
|
area = Db.Queryable<SysStorageArea>().First(m => m.WareHouseNo == "W03" && m.AreaName == "母托盘区" && m.IsDel == "0");
|
break;
|
case "1":
|
case "2":
|
case "3":
|
case "4":
|
area = Db.Queryable<SysStorageArea>().First(m => m.WareHouseNo == "W03" && m.AreaName == "子母托盘区" && m.IsDel == "0");
|
break;
|
}
|
if (area != null)
|
{
|
areaCode = area.AreaNo;
|
}
|
var plnList = new List<string>()
|
{
|
"10",
|
"20",
|
"30",
|
};
|
if (!plnList.Contains(model.TaskType))
|
{
|
areaCode = "";
|
}
|
if (string.IsNullOrWhiteSpace(areaCode) && !plnList.Contains(model.TaskType))
|
{
|
throw new Exception("未查询到当前托盘有无子托定义,请核实");
|
}
|
|
var allotLocate = new AllotLocation();
|
|
SysStorageLocat locate;
|
//if (isHaveLocateNo) //指定储位
|
//{
|
// locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == haveLocate.LocatNo);
|
//}
|
//else
|
//{
|
locate = allotLocate.GetSuiTableLocate("W03", areaCode);
|
//}
|
|
try
|
{
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //入库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "WCS",
|
IsSuccess = 1, //是否下发成功 0失败 1成功
|
SendDate = DateTime.Now, //发送时间
|
BackDate = DateTime.Now, //返回时间
|
StartLocat = model.StationNum,//起始位置
|
EndLocat = locate.LocatNo,//目标位置
|
PalletNo = model.PalletNo,//托盘码
|
IsSend = 1,//是否可再次下发
|
IsCancel = 1,//是否可取消
|
IsFinish = 1,//是否可完成
|
Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "1",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = model.StationNum + " ==>> " + locate.LocatNo + "的入库任务",
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
locate.Status = "2";
|
Db.Updateable(locate).ExecuteCommand();
|
if (palletBindList.Count >= 1)
|
{
|
foreach (var item in palletBindList)
|
{
|
item.Status = "1";
|
item.LocatNo = locate.LocatNo;
|
item.TaskNo = taskNo;
|
}
|
Db.Updateable(palletBindList).ExecuteCommand();
|
}
|
var log = new RoadwayUseLogServer();
|
var bl = log.AddRoadwayUseLog(new AddRoadwayUseLogVm()
|
{
|
WareHouseNo = locate.WareHouseNo,
|
RoadwayNo = locate.RoadwayNo,
|
|
LocateNo = locate.LocatNo,
|
Row = locate.Row,
|
Column = locate.Column,
|
Layer = locate.Layer,
|
Depth = locate.Depth,
|
}, 0);
|
if (!bl)
|
{
|
throw new Exception("巷道使用记录添加失败");
|
}
|
Db.CommitTran();
|
comDto = new OutCommandDto()
|
{
|
PalletNo = model.PalletNo,//托盘号
|
PalletType = model.SubPallet,//托盘类型
|
StartLocat = "", // 起始位置
|
EndLocat = locate.LocatNo, // 目标位置
|
EndRoadway = locate.RoadwayNo, // 目标位置
|
TaskNo = exTask.TaskNo, // 任务号
|
Type = "0",// 任务类型 (入库)
|
OutMode = "", //出库口
|
Order = 1
|
};
|
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw new Exception(ex.Message);
|
}
|
#endregion
|
|
|
return comDto;
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
|
//入库完成--正常入库、回流入库、盘点回库(wcs反馈、wms手动完成)
|
public void ArrivalSuccess(string taskNo, int userId, string url)
|
{
|
try
|
{
|
//url = "http://localhost:57061/api/WCSApi/FinshTasks";
|
//正常入库
|
var task = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == taskNo);
|
if (task == null)
|
{
|
throw new Exception("未查询到任务信息");
|
}
|
if (task.Status == "2")
|
{
|
throw new Exception("当前任务已完成");
|
}
|
Db.BeginTran();
|
|
int huistatus = 0; //回流状态
|
|
task.Status = "2";//任务状态
|
task.IsSend = 0;
|
task.IsCancel = 0;
|
task.IsFinish = 0;
|
task.FinishDate = DateTime.Now;//完成时间
|
Db.Updateable(task).ExecuteCommand();
|
var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList();
|
//当前任务中的储位信息
|
var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat);
|
string skunno = "";
|
BllBoxInfo bind = new BllBoxInfo();
|
if (stockDetail.Count <= 0)
|
{
|
string str = $"select Top 1 * from BllBoxInfo where IsDel = '0' and PalletNo = '{task.PalletNo}' order by CreateTime desc";
|
bind = Db.Ado.SqlQuerySingle<BllBoxInfo>(str);
|
skunno = bind.SkuNo;
|
}
|
else if (stockDetail.Count > 0)
|
{
|
skunno = stockDetail[0].SkuNo;
|
}
|
//获取对应物料当天库存信息
|
string strinfo = $"select top 1 * from DataStockInfo where IsDel = '0' and SkuNo = '{skunno}' order by CreateTime desc";
|
var datainfo = Db.Ado.SqlQuerySingle<DataStockInfo>(strinfo);
|
if (locate == null)
|
{
|
throw new Exception("未查询到任务中的储位信息");
|
}
|
|
if (userId != 0)
|
{
|
//添加操作日志记录
|
var k = new OperationSOServer().AddLogOperationSo("入库作业", "入库日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId);
|
|
// 正式运行程序放开
|
var jsonData = JsonConvert.SerializeObject(task);
|
string response = "";
|
|
try
|
{
|
var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
response = HttpHelper.DoPost(url, jsonData, "下发给WCS入库完成", "WCS");
|
var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
|
//解析返回数据
|
var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw new Exception(ex.Message);
|
}
|
|
}
|
//判断是否是回流入库完成
|
if (stockDetail.Any())
|
{
|
foreach (var item in stockDetail)
|
{
|
item.WareHouseNo = locate.WareHouseNo;
|
item.RoadwayNo = locate.RoadwayNo;
|
item.AreaNo = locate.AreaNo;
|
item.LocatNo = locate.LocatNo;
|
item.UpdateTime = DateTime.Now;
|
if (userId != 0)
|
{
|
item.UpdateUser = userId;
|
}
|
}
|
|
locate.Status = "1";
|
Db.Updateable(locate).ExecuteCommand();
|
Db.Updateable(stockDetail).ExecuteCommand();
|
Db.CommitTran();
|
huistatus = 1;
|
return;
|
}
|
//正常入库
|
var bindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo && m.Status == "1").ToList();
|
if (bindList.Count == 0)
|
{
|
throw new Exception($"{taskNo}该任务没有对应的流水信息");
|
}
|
|
var comTime = DateTime.Now;
|
|
var datatime = DateTime.Now.ToString("yyyy-MM-dd"); //当天日期
|
|
|
|
|
foreach (var item in bindList)
|
{
|
|
switch (item.Type)
|
{
|
case "1":
|
var boxInfo = Db.Queryable<BllBoxInfo>().First(m => m.IsDel == "0" && m.BindNo == item.Id);
|
var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == boxInfo.SkuNo);
|
|
#region 库存明细
|
var sd1 = new DataStockDetail()
|
{
|
LotNo = item.LotNo,
|
LotText = item.LotText,
|
SupplierLot = item.SupplierLot,
|
SkuNo = boxInfo.SkuNo,
|
SkuName = boxInfo.SkuName,
|
Standard = sku.Standard,
|
Qty = item.Qty,
|
LockQty = 0,
|
FrozenQty = 0,
|
InspectQty = 0,
|
ASNNo = item.ASNNo,
|
ASNDetailNo = item.ASNDetailNo,
|
WareHouseNo = locate.WareHouseNo,
|
RoadwayNo = locate.RoadwayNo,
|
AreaNo = locate.AreaNo,
|
LocatNo = locate.LocatNo,
|
PalletNo = item.PalletNo,
|
PalletNo2 = item.PalletNo2,
|
PalletNo3 = item.PalletNo3,
|
PalletType = item.PalletType,
|
CompleteTime = comTime,
|
ProductionTime = item.ProductionTime,
|
ExpirationTime = item.ExpirationTime,
|
Status = "0",
|
InspectMark = item.InspectMark,
|
InspectStatus = "1",
|
BitPalletMark = item.BitPalletMark,
|
PackagNo = sku.PackagNo,
|
IsBale = item.IsBale,
|
IsBelt = item.IsBelt,
|
|
IsDel = "0",
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
var sdId1 = Db.Insertable(sd1).ExecuteReturnIdentity();
|
#endregion
|
|
#region 库存箱码明细
|
|
var box1 = new DataBoxInfo()
|
{
|
StockDetailId = sdId1,
|
BindNo = item.Id,
|
BoxNo = boxInfo.BoxNo,
|
BoxNo2 = boxInfo.BoxNo2,
|
BoxNo3 = boxInfo.BoxNo3,
|
PalletNo = boxInfo.PalletNo,
|
PalletNo2 = boxInfo.PalletNo2,
|
PalletNo3 = boxInfo.PalletNo3,
|
Qty = boxInfo.Qty,
|
FullQty = boxInfo.FullQty,
|
Status = "2",
|
LotNo = boxInfo.LotNo,
|
LotText = boxInfo.LotText,
|
SkuNo = boxInfo.SkuNo,
|
SkuName = boxInfo.SkuName,
|
Standard = sku.Standard,
|
ProductionTime = boxInfo.ProductionTime,
|
SupplierLot = boxInfo.SupplierLot,
|
InspectStatus = boxInfo.InspectStatus,
|
InspectMark = boxInfo.InspectMark,
|
BitBoxMark = boxInfo.BitBoxMark,
|
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
boxInfo.Status = "2";
|
Db.Updateable(boxInfo).ExecuteCommand();
|
Db.Insertable(box1).ExecuteCommand();
|
#endregion
|
|
#region 库存
|
var dataStock1 = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == sku.SkuNo);
|
if (dataStock1 != null)
|
{
|
dataStock1.Qty += item.Qty;
|
Db.Updateable(dataStock1).ExecuteCommand();
|
}
|
else
|
{
|
var stock = new DataStock()
|
{
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
Standard = sku.Standard,
|
LotNo = "",
|
LotText = "",
|
Qty = item.Qty,
|
LockQty = 0,
|
FrozenQty = 0,
|
|
IsDel = "0",
|
CreateUser = userId,
|
CreateTime = comTime
|
};
|
Db.Insertable(stock).ExecuteCommand();
|
}
|
#endregion
|
|
#region 库存记录
|
if (huistatus == 0)
|
{
|
if (datainfo == null)
|
{
|
datainfo = new DataStockInfo
|
{
|
SkuNo = sku.SkuNo, //物料编码
|
SkuName = sku.SkuName, //物料名称
|
Standard = sku.Standard, //规格
|
Type = sku.Type, //类型
|
|
ArrivalQty = item.Qty, // 入库数量
|
YearArrivalQty = item.Qty, // 入库数量(月)
|
ExportQty = 0, //出库数量
|
YearExportQty = 0, // 出库数量(月)
|
ExpectedQty = 0, //期初数量
|
YearExpectedQty = 0, //期初数量(月)
|
BalanceQty = item.Qty, // 结存数量
|
YearBalanceQty = item.Qty, // 结存数量(月)
|
|
IsDel = "0", //是否删除
|
CreateTime = DateTime.Now, //创建时间
|
CreateUser = 1, //创建人
|
};
|
Db.Insertable(datainfo).ExecuteCommand();
|
}
|
else
|
{
|
datainfo.ArrivalQty += item.Qty;//入库数量
|
//datainfo.ExportQty += item.LockQty.Value;//出库数量
|
datainfo.BalanceQty += item.Qty;//结存数量
|
datainfo.YearBalanceQty += item.Qty;//结存数量(月)
|
datainfo.YearArrivalQty += item.Qty;//入库数量(月)
|
Db.Updateable(datainfo).ExecuteCommand();
|
|
}
|
}
|
|
|
#endregion
|
|
break;
|
case "0":
|
var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.ASNDetailNo);
|
if (noticeDetail == null)
|
{
|
throw new Exception("未查询到托盘绑定的入库单明细信息");
|
}
|
//获取入库单总单信息Arrival
|
//var arrival = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo);
|
|
var sku1 = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo);
|
string isinspect = "0";
|
//判断物料是否免检
|
if (sku1.IsInspect == "1")
|
{
|
isinspect = sku1.IsInspect;
|
}
|
if (sku1.Type == "8")
|
{
|
isinspect = "1";
|
}
|
|
//获取该批次最终质检结果
|
var quality = Db.Queryable<BllQualityInspect>().First(a => a.LotNo == noticeDetail.LotNo && a.ASNNo == noticeDetail.ASNNo && a.IsDel == "0");
|
|
#region 库存明细
|
var sd = new DataStockDetail()
|
{
|
LotNo = noticeDetail.LotNo,
|
LotText = noticeDetail.LotText,
|
SupplierLot = noticeDetail.SupplierLot,
|
SkuNo = noticeDetail.SkuNo,
|
SkuName = noticeDetail.SkuName,
|
Standard = noticeDetail.Standard,
|
Qty = item.Qty,
|
LockQty = 0,
|
FrozenQty = 0,
|
InspectQty = 0,
|
ASNNo = item.ASNNo,
|
ASNDetailNo = item.ASNDetailNo,
|
WareHouseNo = locate.WareHouseNo,
|
RoadwayNo = locate.RoadwayNo,
|
AreaNo = locate.AreaNo,
|
LocatNo = locate.LocatNo,
|
PalletNo = item.PalletNo,
|
PalletNo2 = item.PalletNo2,
|
PalletNo3 = item.PalletNo3,
|
PalletType = item.PalletType,
|
CompleteTime = comTime,
|
ProductionTime = item.ProductionTime,
|
ExpirationTime = item.ExpirationTime,
|
Status = "0",
|
InspectMark = item.InspectMark,
|
InspectStatus = isinspect,
|
BitPalletMark = item.BitPalletMark,
|
PackagNo = noticeDetail.PackagNo,
|
IsBale = item.IsBale,
|
IsBelt = item.IsBelt,
|
|
IsDel = "0",
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
if (quality != null)
|
{
|
if (quality.IsQualified != "2")
|
{
|
//修改合格不合格数量
|
if (quality.IsQualified == "1") //合格
|
{
|
//增加合格数量
|
quality.PassQty += item.Qty;
|
sd.InspectStatus = "1";
|
}
|
else if (quality.IsQualified == "0") //不合格
|
{
|
//增加不合格数量
|
quality.FailQty += item.Qty;
|
sd.InspectStatus = "2";
|
}
|
Db.Updateable(quality).ExecuteCommand(); //修改质检信息
|
}
|
}
|
var sdId = Db.Insertable(sd).ExecuteReturnIdentity(); //新增库存明细信息
|
|
#endregion
|
|
#region 库存箱码明细
|
var boxInfoList = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item.Id).ToList();
|
var boxList = new List<DataBoxInfo>();
|
foreach (var demo in boxInfoList)
|
{
|
var box = new DataBoxInfo()
|
{
|
StockDetailId = sdId,
|
BindNo = demo.BindNo,
|
BoxNo = demo.BoxNo,
|
BoxNo2 = demo.BoxNo2,
|
BoxNo3 = demo.BoxNo3,
|
PalletNo = demo.PalletNo,
|
PalletNo2 = demo.PalletNo2,
|
PalletNo3 = demo.PalletNo3,
|
Qty = demo.Qty,
|
FullQty = demo.FullQty,
|
Status = "2",
|
LotNo = demo.LotNo,
|
LotText = demo.LotText,
|
SkuNo = demo.SkuNo,
|
SkuName = demo.SkuName,
|
Standard = noticeDetail.Standard,
|
ProductionTime = demo.ProductionTime,
|
SupplierLot = demo.SupplierLot,
|
InspectStatus = demo.InspectStatus,
|
InspectMark = demo.InspectMark,
|
BitBoxMark = demo.BitBoxMark,
|
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
boxList.Add(box);
|
demo.Status = "2";
|
}
|
Db.Updateable(boxInfoList).ExecuteCommand();
|
Db.Insertable(boxList).ExecuteCommand();
|
|
#endregion
|
|
#region 库存
|
var dataStock = Db.Queryable<DataStock>().First(m =>
|
m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo && m.LotNo == noticeDetail.LotNo);
|
if (dataStock != null)
|
{
|
dataStock.Qty += item.Qty;
|
Db.Updateable(dataStock).ExecuteCommand();
|
}
|
else
|
{
|
var stock = new DataStock()
|
{
|
SkuNo = noticeDetail.SkuNo,
|
SkuName = noticeDetail.SkuName,
|
Standard = noticeDetail.Standard,
|
LotNo = noticeDetail.LotNo,
|
LotText = noticeDetail.LotText,
|
Qty = item.Qty,
|
LockQty = 0,
|
FrozenQty = 0,
|
|
IsDel = "0",
|
CreateUser = userId,
|
CreateTime = comTime
|
};
|
Db.Insertable(stock).ExecuteCommand();
|
}
|
#endregion
|
|
#region 入库单 及 明细
|
//入库单明细
|
noticeDetail.CompleteQty += item.Qty;
|
if (noticeDetail.CompleteQty == noticeDetail.Qty)
|
{
|
noticeDetail.Status = "2";
|
noticeDetail.CompleteTime = comTime;
|
}
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
//入库单
|
var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>()
|
.Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2");
|
if (asnDetailNum == 0)
|
{
|
var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo);
|
notice.Status = "2";
|
notice.CompleteTime = comTime;
|
Db.Updateable(notice).ExecuteCommand();
|
}
|
|
#endregion
|
|
|
#region 库存记录
|
|
if (huistatus == 0)
|
{
|
if (datainfo == null)
|
{
|
datainfo = new DataStockInfo
|
{
|
SkuNo = sku1.SkuNo, //物料编码
|
SkuName = sku1.SkuName, //物料名称
|
Standard = sku1.Standard, //规格
|
Type = sku1.Type, //类型
|
|
ArrivalQty = item.Qty, // 入库数量
|
YearArrivalQty = item.Qty, // 入库数量(月)
|
ExportQty = 0, //出库数量
|
YearExportQty = 0, // 出库数量(月)
|
ExpectedQty = 0, //期初数量
|
YearExpectedQty = 0, //期初数量(月)
|
BalanceQty = item.Qty, // 结存数量
|
YearBalanceQty = item.Qty, // 结存数量(月)
|
|
IsDel = "0", //是否删除
|
CreateTime = DateTime.Now, //创建时间
|
CreateUser = 1, //创建人
|
};
|
Db.Insertable(datainfo).ExecuteCommand();
|
}
|
else
|
{
|
datainfo.ArrivalQty += item.Qty;//入库数量
|
//datainfo.ExportQty += item.LockQty.Value;//出库数量
|
datainfo.BalanceQty += item.Qty;//结存数量
|
datainfo.YearBalanceQty += item.Qty;//结存数量(月)
|
datainfo.YearArrivalQty += item.Qty;//入库数量(月)
|
Db.Updateable(datainfo).ExecuteCommand();
|
|
}
|
}
|
|
#endregion
|
|
|
break;
|
}
|
item.Status = "2";
|
item.CompleteTime = comTime;
|
|
|
}
|
locate.Status = "1";
|
Db.Updateable(locate).ExecuteCommand();
|
Db.Updateable(bindList).ExecuteCommand();
|
|
Db.CommitTran();
|
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
|
//手动取消入库任务
|
public void CancelAsnTask(string taskNo, int userId, string url)
|
{
|
try
|
{
|
var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0");
|
if (task == null)
|
{
|
throw new Exception("未查询到任务信息");
|
}
|
Db.BeginTran();
|
var time = DateTime.Now;
|
//修改任务
|
task.IsSuccess = 1;
|
task.IsCancel = 0;
|
task.IsFinish = 0;
|
task.Status = "3";
|
task.CancelDate = DateTime.Now;
|
Db.Updateable(task).ExecuteCommand();
|
|
//入库绑定托盘信息
|
var bind = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.TaskNo == taskNo).ToList();
|
foreach (var item in bind)
|
{
|
item.IsDel = "0";
|
item.TaskNo = "";
|
item.Status = "0";//修改托盘绑定状态信息
|
item.UpdateTime = time;
|
item.UpdateUser = userId;
|
if (item.Type == "0")
|
{
|
// 更改入库单明细已组数量
|
var sqlString = string.Empty;
|
//sqlString += $"update BllArrivalNoticeDetail set FactQty = FactQty - '{item.Qty}' where id = '{item.ASNDetailNo}';";
|
//Db.Ado.ExecuteCommand(sqlString);
|
var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.Id == item.ASNDetailNo);
|
// 更改入库单及入库明细状态
|
if (detail.FactQty <= 0)
|
{
|
var sqlString2 = string.Empty;
|
sqlString2 += $"update BllArrivalNoticeDetail set Status = '0',CompleteTime= getDate() where id = '{detail.Id}' and Status ='1';";
|
Db.Ado.ExecuteCommand(sqlString2);
|
var count = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.Status != "0");
|
if (count > 0)
|
{
|
sqlString2 = $"update BllArrivalNotice set Status = '0',CompleteTime= getDate() where ASNNo = '{item.ASNNo}' and Status ='0';";
|
Db.Ado.ExecuteCommand(sqlString2);
|
}
|
}
|
// 更改托盘使用状态
|
var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{item.PalletNo}';";
|
//添加托盘记录表数据
|
sqlStr += $"insert into LogPalletTrack values('{item.PalletNo}','{item.ASNNo}','解绑组盘','0',getDate(),0,NULL,NULL);";
|
Db.Ado.ExecuteCommand(sqlStr);
|
}
|
}
|
Db.Updateable(bind).ExecuteCommand();
|
|
//添加操作日志记录
|
var k = new OperationASNServer().AddLogOperationAsn("入库作业", "入库日志", taskNo, "取消", $"点击取消按钮取消了任务号为:{taskNo}的任务", (int)userId);
|
|
// 正式运行程序放开
|
var jsonData = JsonConvert.SerializeObject(task);
|
string response = "";
|
|
try
|
{
|
var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
response = HttpHelper.DoPost(url, jsonData, "下发给WCS取消入库", "WCS");
|
var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
|
//解析返回数据
|
var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response);
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw new Exception(ex.Message);
|
}
|
|
Db.CommitTran();
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
|
#region 申请空托盘
|
|
/// <summary>
|
/// 申请空托出库
|
/// </summary>
|
/// <param name="skuNo"></param>
|
/// <param name="endLocat"></param>
|
/// <returns></returns>
|
public List<OutCommandDto> PalletLocation(string skuNo, string endLocat)
|
{
|
OutCommandDto comDto;//返回wcs的入库命令
|
try
|
{
|
var outDto1 = new List<OutCommandDto>(); //先出库数据的集合(深度为1的储位)
|
var outDto2 = new List<OutCommandDto>(); //后出库数据的集合(深度为2的储位)
|
var moveDto = new List<OutCommandDto>(); //要移库数据的集合
|
var com = new Common();
|
//var skuNolist = skuNo.Substring(',');
|
|
Db.BeginTran();
|
|
//先进行分配 因为无出库单
|
|
|
//此物品直接拣货成功
|
//根据托盘号前往库位查询库存明细表信息
|
//获取以后根据最大任务号生成任务
|
|
//判断储位信息 深度为1 直接出库并下发出库任务 同时库存明细表中 增加分配数量 锁定数量 出库后直接拣货完成 更改库存表状态
|
//深度为2 先进行移库 再下发出库任务 下发移库任务和出库任务同时下发 移库时 修改库存明细表状态为 移库锁定 锁定数量 库存总表增加锁定数量 分配最近储位 下发移库任务
|
|
//新增任务
|
|
#region 空托盘出库业务
|
|
#region 判断
|
var palletSkuNo = new List<string>()
|
{
|
"100099",
|
"100098",
|
"100097",
|
"100096",
|
"100095",
|
};
|
if (!palletSkuNo.Contains(skuNo))
|
{
|
throw new Exception("托盘物料不包含当前物料编码!");
|
}
|
|
//获取物料信息
|
var sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == skuNo && m.IsDel == "0");
|
if (sku == null)
|
{
|
throw new Exception("未获取到物料信息!");
|
}
|
|
//判断该托盘是否为100098、100097
|
//if (sku.SkuNo == "100098" || sku.SkuNo == "100097")
|
//{
|
// //塑料
|
// if (sku.SkuNo == "100098")
|
// {
|
// if (sku.Demo == "使用黑色")
|
// {
|
// sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == "100096" && m.IsDel == "0");
|
// }
|
// }
|
// //木制
|
// else if (sku.SkuNo == "100097")
|
// {
|
// if (sku.Demo == "使用双面")
|
// {
|
// sku = Db.Queryable<SysMaterials>().First(m => m.SkuNo == "100095" && m.IsDel == "0");
|
// }
|
// }
|
//}
|
|
var roadway = Db.Queryable<SysStorageRoadway>().Where(a => a.IsDel == "0" && a.WareHouseNo == "W03" && a.Status == "0").Select(a => a.RoadwayNo).ToList();
|
if (roadway.Count == 0)
|
{
|
throw new Exception("当前巷道已被全部禁用!");
|
}
|
|
//先获取库存总表是否存在该空托盘在库中
|
var dataStock = Db.Queryable<DataStock>().First(m => m.SkuNo == sku.SkuNo && m.IsDel == "0" && (m.Qty - m.FrozenQty - m.LockQty - m.FrozenQty) > 0);
|
if (dataStock == null)
|
{
|
//库存中没有该空托盘剁
|
|
throw new Exception("库存中没有该空托盘剁!");
|
}
|
//根据库存总表获取库存明细信息 库存状态为待分配和部分分配
|
var dataStockDeali = Db.Queryable<DataStockDetail>().Where(m => roadway.Contains(m.RoadwayNo) && m.SkuNo == sku.SkuNo && m.IsDel == "0" && (m.Qty - m.FrozenQty - m.LockQty - m.FrozenQty) > 0 && m.Status == "0" || m.Status == "1").OrderBy(m => m.CompleteTime).ToList();
|
//判断空托盘是否有待分配和部分分配
|
if (dataStockDeali.Count == 0)
|
{
|
//库内该空托盘没有待分配和部分分配的
|
|
throw new Exception("库内该空托盘没有待分配和部分分配的!");
|
}
|
|
//int? dataStockQtyCount = 0;
|
//foreach (var item in dataStockDeali)
|
//{
|
// dataStockQtyCount += item.Qty;
|
// if (dataStockQtyCount >= needQty)
|
// {
|
// break;
|
// }
|
//}
|
//if (dataStockQtyCount < needQty)
|
//{
|
// throw new Exception("当前未禁用巷道可分配货物不足,禁止分配!");
|
//}
|
//string EndLocatList[] = new string[];
|
var EndLocatList = new List<string>()
|
{
|
"23",
|
"33",
|
"41",
|
};
|
if (!EndLocatList.Contains(endLocat))
|
{
|
throw new Exception("当前申请工位不是叠托机工位,请核实后再次申请!");
|
}
|
//判断是否已存在该任务 存在返回
|
var logTasks = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.Type == "1" && m.EndLocat == endLocat && (m.Status == "1" || m.Status == "0"));
|
if (logTasks != null)
|
{
|
|
throw new Exception("已存在正在执行或等待执行的托盘任务!");
|
}
|
|
|
#endregion
|
|
#region 包装信息
|
|
////包装信息
|
//var packList = Db.Queryable<SysPackag>().First(m => m.PackagNo == sku.PackagNo && m.IsDel == "0");
|
//if (packList == null)
|
//{
|
// throw new Exception("未查询到物料包装");
|
//}
|
//var pNum = 0;//托盘物品数量
|
//var bNum = 0;//箱物品数量
|
//if (packList.L5Num.HasValue)
|
//{
|
// pNum = Convert.ToInt32(packList.L5Num);
|
// bNum = Convert.ToInt32(packList.L4Num);
|
//}
|
//else if (packList.L4Num.HasValue)
|
//{
|
// pNum = Convert.ToInt32(packList.L4Num);
|
// bNum = Convert.ToInt32(packList.L3Num);
|
//}
|
//else if (packList.L3Num.HasValue)
|
//{
|
// pNum = Convert.ToInt32(packList.L3Num);
|
// bNum = Convert.ToInt32(packList.L2Num);
|
//}
|
//else if (packList.L2Num.HasValue)
|
//{
|
// pNum = Convert.ToInt32(packList.L2Num);
|
// bNum = Convert.ToInt32(packList.L1Num);
|
//}
|
//else if (packList.L1Num.HasValue)
|
//{
|
// pNum = Convert.ToInt32(packList.L1Num);
|
// bNum = Convert.ToInt32(packList.L1Num);
|
//}
|
//if (pNum == 0)
|
//{
|
// throw new Exception("未查询到物料包装托箱关系信息");
|
//}
|
#endregion
|
|
#region 分配
|
|
//进行分配空托盘
|
//var assign = new AllotSku();
|
//取合适库存商品
|
//Dictionary<int, int> stockQtyDic = new Dictionary<int, int>();//托出库物品数
|
//分配货物
|
//int qty = assign.AllotPallets(dataStockDeali, (int)dataStockDeali[0].Qty, (int)dataStockDeali[0].Qty, 1, stockQtyDic);
|
|
//获取库存明细信息
|
DataStockDetail stockDeali = new DataStockDetail();
|
|
foreach (var sc in dataStockDeali)
|
{
|
stockDeali = dataStockDeali.First(it => it.Id == sc.Id);
|
var s = dataStockDeali.FirstOrDefault(m => m.Id == sc.Id);
|
//添加分配表信息
|
var allot = new BllExportAllot
|
{
|
SONo = "",
|
WaveNo = "",
|
SODetailNo = 0,
|
StockId = sc.Id,
|
LotNo = "",
|
LotText = "",
|
SupplierLot = "",
|
SkuNo = s.SkuNo,
|
SkuName = s.SkuName,
|
Standard = s.Standard,
|
PalletNo = s.PalletNo,
|
IsBale = "0", //是否裹包
|
IsBelt = "0", //是否打带
|
|
BoxexQty = s.Qty,
|
Qty = (int)sc.Qty,
|
CompleteQty = 0,
|
Status = "0",
|
LogisticsId = 0,
|
IsAdvance = "0",
|
OutMode = "",//出库口
|
|
CreateUser = 0,
|
CreateTime = DateTime.Now
|
};
|
Db.Insertable(allot).ExecuteCommand();
|
dataStock.LockQty += (int)sc.Qty;
|
s.LockQty += sc.Qty;
|
|
if (s.LockQty == s.Qty)
|
{
|
s.Status = "2";
|
}
|
else
|
{
|
s.Status = "1";
|
}
|
Db.Updateable(dataStock).ExecuteCommand(); //库存总表锁定数量修改
|
var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); //库存明细总表锁定数量修改
|
break;
|
}
|
|
#endregion
|
|
#region 出库
|
|
|
|
//所有要出库的出库分配信息(未下发的信息和待拣货的信息)
|
var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SkuNo == stockDeali.SkuNo && a.PalletNo == stockDeali.PalletNo && (a.Status == "0" || (a.Status == "2" && a.CompleteQty == 0))).ToList();
|
if (list.Count == 0) //判断是否有需要下发的出库流水
|
{
|
throw new Exception("当前出库单据无需要下发的托盘");
|
}
|
|
//要出库的托盘集合
|
var outLpnList = list.Select(m => m.PalletNo).ToList();
|
//要出库的明细集合
|
var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList();
|
|
|
|
//记录错误信息的集合
|
var flagList = new List<int>();//1:当前要出库的储位正在移出、2 出库的托盘储位信息错误(在储位表中未查询到)、3储位损坏不能出库、4 要出库的托盘正在入库,5 双深度出库前面储位是入库中或者移入中
|
|
//循环分配的信息生成出库任务
|
foreach (var item in list)
|
{
|
var taskNoStr = "";
|
var stockDetail = outStockDetail.First(m => m.PalletNo == item.PalletNo);
|
// 储位号
|
var locateNo = stockDetail.LocatNo;
|
//托盘上物料(用于判断物料是否是桶装类型)
|
var skuinfo = Db.Queryable<SysMaterials>().First(m => m.SkuNo == item.SkuNo);
|
#region 判断
|
|
//判断托盘是否在库内(不在库内)
|
if (string.IsNullOrWhiteSpace(locateNo))
|
{
|
//判断托盘是否在入库中
|
var imBl = com.GetImTask(item.PalletNo);
|
if (imBl != null)
|
{
|
flagList.Add(4);
|
continue;
|
}
|
//(状态为待拣货的 1)
|
if (item.Status == "0")
|
{
|
//if (sku.Type == "2" || sku.Type == "3" || sku.Type == "4")//桶装类型手持拣货
|
//{
|
//}
|
//如果不在仓库内,当前分配信息直接更新出库完成
|
item.Status = "2";//状态
|
//item.OutMode = "1号口";//出库口
|
Db.Updateable(item).ExecuteCommand();
|
|
}
|
continue;
|
}
|
|
var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//当前出库的储位信息
|
if (locate == null)
|
{
|
flagList.Add(2);
|
continue;
|
}
|
//判断储位标志是否为损坏
|
if (locate.Flag == "2")
|
{
|
flagList.Add(3);
|
continue;
|
}
|
|
#endregion
|
|
if (locate.Status == "1") //有物品
|
{
|
if (locate.Depth == "01") //深度为1
|
{
|
#region 添加出库任务
|
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //出库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "WCS",
|
IsSuccess = 0, //是否下发成功 0失败 1成功
|
|
StartLocat = locate.LocatNo,//起始位置
|
EndLocat = sku.SkuNo == "100099" ? "41" : sku.SkuNo == "100097" ? "33" : sku.SkuNo == "100095" ? "33" : "23",//目标位置
|
PalletNo = item.PalletNo,//托盘码
|
IsSend = 1,//是否可再次下发
|
IsCancel = 1,//是否可取消
|
IsFinish = 1,//是否可完成
|
Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "0",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = locate.LocatNo + "的出库任务"
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
|
outDto1.Add(new OutCommandDto()
|
{
|
StartRoadway = locate.RoadwayNo, //起始巷道
|
PalletNo = item.PalletNo,//托盘号
|
StartLocat = locate.LocatNo, // 起始位置
|
EndLocat = "", // 目标位置
|
TaskNo = exTask.TaskNo, // 任务号
|
Type = "1",// 任务类型 (出库)
|
OutMode = "", //目标地址
|
Order = 1,
|
SkuType = sku.Type, //物料类型
|
LotNo = item.LotNo, // 批次
|
IsBale = item.IsBale, //是否裹包
|
IsBelt = item.IsBelt, //是否打带
|
Qty = item.Qty, //拣货数量
|
//FullQty = (int)item.BoxexQty, //托盘数量
|
PalletType = stockDetail.PalletType, //托盘类型(有无子托)0||空||null:无子托盘1:有子托盘
|
});
|
taskNoStr = exTask.TaskNo;
|
#endregion
|
|
}
|
else if (locate.Depth == "02") //深度为2
|
{
|
//获取出库深度为2储位前面的储位信息
|
var slotBefore = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo);
|
if (slotBefore.Status == "1") //前面的储位有货物、进行移库操作
|
{
|
//要出库深度为2的储位前面的储位中货物是否要出库
|
var isout = outStockDetail.Count(m => m.LocatNo == slotBefore.LocatNo);
|
|
if (isout <= 0) //进行移库
|
{
|
//去库存表中找到储位对应的托盘码操作
|
var stockNew = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo);
|
if (stockNew == null)
|
{
|
var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == slotBefore.LocatNo);
|
slotChange.Status = "0";
|
Db.Updateable(slotChange).ExecuteCommand();
|
}
|
else
|
{
|
//获取移库的库位
|
var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, slotBefore.AreaNo);
|
//当前移库库位的储位信息
|
var locatey = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0");
|
if (!string.IsNullOrEmpty(newSlot))
|
{
|
#region 添加出库时发生的移库任务
|
|
var exYkTaskNo = new Common().GetMaxNo("TK");
|
var exYkTask = new LogTask //出库时产生移库任务
|
{
|
TaskNo = exYkTaskNo,
|
Sender = "WMS",
|
Receiver = "WCS",
|
IsSuccess = 0, //是否下发成功 0失败 1成功
|
|
StartLocat = stockNew.LocatNo,//起始位置
|
EndLocat = newSlot,//目标位置
|
PalletNo = stockNew.PalletNo,//托盘码
|
IsSend = 1,//是否可再次下发
|
IsCancel = 1,//是否可取消
|
IsFinish = 1,//是否可完成
|
Type = "2",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "0",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单
|
|
Msg = stockNew.LocatNo + " ==>> " + newSlot + "的移库任务",
|
};
|
Db.Insertable(exYkTask).ExecuteCommand();
|
|
moveDto.Add(new OutCommandDto()
|
{
|
StartRoadway = slotBefore.RoadwayNo, //起始巷道
|
PalletNo = stockNew.PalletNo,//托盘号
|
StartLocat = stockNew.LocatNo, // 起始位置
|
EndLocat = newSlot, // 目标位置
|
EndRoadway = locatey.RoadwayNo, // 目标巷道
|
TaskNo = exYkTask.TaskNo, // 任务号
|
Type = "2",// 任务类型 (移库)
|
OutMode = "", //目标地址
|
Order = 1,
|
SkuType = sku.Type, //物料类型
|
LotNo = stockNew.LotNo,
|
Qty = 0, //拣货数量
|
//FullQty = (int)stockNew.Qty, //托盘数量
|
PalletType = stockNew.PalletType, //托盘类型(有无子托)0||空||null:无子托盘1:有子托盘
|
});
|
#endregion
|
|
#region 改变储位装填
|
var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
|
var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot);
|
slotChange.Status = "5"; //改变状态(正在移出)
|
slotChange2.Status = "4"; // 改变状态(正在移入)
|
Db.Updateable(slotChange).ExecuteCommand();
|
Db.Updateable(slotChange2).ExecuteCommand();
|
#endregion
|
}
|
else
|
{
|
#region 添加出库任务
|
|
var exYkTaskNo1 = new Common().GetMaxNo("TK");
|
var exYkTask1 = new LogTask //出库移库没有库位了进行出库任务
|
{
|
TaskNo = exYkTaskNo1,
|
Sender = "WMS",
|
Receiver = "WCS",
|
IsSuccess = 0, //是否下发成功 0失败 1成功
|
|
StartLocat = stockNew.LocatNo,//起始位置
|
EndLocat = sku.SkuNo == "100099" ? "41" : sku.SkuNo == "100097" ? "33" : sku.SkuNo == "100095" ? "33" : "23",//目标位置
|
PalletNo = stockNew.PalletNo,//托盘码
|
IsSend = 1,//是否可再次下发
|
IsCancel = 1,//是否可取消
|
IsFinish = 1,//是否可完成
|
Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "0",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = locate.LocatNo + "的出库任务"
|
};
|
Db.Insertable(exYkTask1).ExecuteCommand();
|
|
outDto1.Add(new OutCommandDto()
|
{
|
StartRoadway = slotBefore.RoadwayNo, //起始巷道
|
PalletNo = stockNew.PalletNo,//托盘号
|
StartLocat = stockNew.LocatNo, // 起始位置
|
EndLocat = "", // 目标位置
|
TaskNo = exYkTask1.TaskNo, // 任务号
|
Type = "1",// 任务类型 (出库)
|
OutMode = "", //目标地址
|
Order = 1,
|
SkuType = sku.Type, //物料类型
|
LotNo = "", // 批次
|
IsBale = "0", //是否裹包
|
IsBelt = "0", //是否打带
|
Qty = 0, //拣货数量
|
//FullQty = (int)stockNew.Qty, //托盘数量
|
PalletType = stockNew.PalletType, //托盘类型(有无子托)0||空||null:无子托盘1:有子托盘
|
});
|
#endregion
|
|
#region MyRegion
|
|
var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id);
|
slotChange.Status = "3"; //改变状态(正在出库)
|
Db.Updateable(slotChange).ExecuteCommand();
|
|
#endregion
|
}
|
}
|
}
|
}
|
else if (slotBefore.Status == "2" || slotBefore.Status == "4") //前面储位状态是入库中或者移入中
|
{
|
flagList.Add(5);
|
continue;
|
}
|
|
#region 添加出库任务
|
|
var taskNo1 = new Common().GetMaxNo("TK");
|
var exTask1 = new LogTask //出库任务
|
{
|
TaskNo = taskNo1,
|
Sender = "WMS",
|
Receiver = "WCS",
|
IsSuccess = 0, //是否下发成功 0失败 1成功
|
|
StartLocat = locate.LocatNo,//起始位置
|
EndLocat = sku.SkuNo == "100099" ? "41" : sku.SkuNo == "100097" ? "33" : sku.SkuNo == "100095" ? "33" : "23",//目标位置
|
PalletNo = item.PalletNo,//托盘码
|
IsSend = 1,//是否可再次下发
|
IsCancel = 1,//是否可取消
|
IsFinish = 1,//是否可完成
|
Type = "1",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "0",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "1",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = locate.LocatNo + "的出库任务"
|
};
|
Db.Insertable(exTask1).ExecuteCommand();
|
|
outDto2.Add(new OutCommandDto()
|
{
|
StartRoadway = locate.RoadwayNo, //起始巷道
|
PalletNo = item.PalletNo,//托盘号
|
StartLocat = locate.LocatNo, // 起始位置
|
EndLocat = "", // 目标位置
|
TaskNo = exTask1.TaskNo, // 任务号
|
Type = "1",// 任务类型 (出库)
|
OutMode = "", //目标地址
|
Order = 1,
|
SkuType = sku.Type, //物料类型
|
IsBale = item.IsBale, //是否裹包
|
IsBelt = item.IsBelt, //是否打带
|
Qty = item.Qty, //拣货数量
|
//FullQty = (int)item.BoxexQty, //托盘数量
|
PalletType = stockDetail.PalletType, //托盘类型(有无子托)0||空||null:无子托盘1:有子托盘
|
});
|
taskNoStr = exTask1.TaskNo;
|
#endregion
|
|
}
|
|
|
#region 改变数据
|
if (item.Status == "0")//判断托盘是否下发过
|
{
|
var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
|
if (noticeDetail != null) //更新出库单据的下发数量
|
{
|
noticeDetail.FactQty += item.Qty;
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
}
|
}
|
item.TaskNo = taskNoStr; // 出库分配信息中更新任务号
|
item.Status = "1"; // 出库分配信息状态改为正在执行
|
Db.Updateable(item).ExecuteCommand();
|
locate.Status = "3"; //要出库的储位改变状态 正在出库
|
Db.Updateable(locate).ExecuteCommand();
|
|
#endregion
|
|
flagList.Add(0);
|
}
|
else if (locate.Status == "3") //出库中
|
{
|
if (sku.Type == "2" || sku.Type == "3" || sku.Type == "4")
|
{
|
continue;
|
}
|
#region 改变数据
|
//判断是否是已经出过库又回库(状态为待拣货的 1)
|
if (item.Status == "0")
|
{
|
var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo);
|
if (noticeDetail != null) //更新出库单据的下发数量
|
{
|
noticeDetail.FactQty += item.Qty;
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
}
|
}
|
var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo);
|
item.TaskNo = taskNo.TaskNo;
|
item.Status = "1"; // 出库分配信息状态改为正在执行
|
Db.Updateable(item).ExecuteCommand();
|
|
#endregion
|
}
|
else if (locate.Status == "5") //移出中
|
{
|
flagList.Add(1);
|
}
|
}
|
|
//先移库后出库
|
outDto1.AddRange(moveDto);
|
outDto1.AddRange(outDto2);
|
var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
// 正式运行程序放开
|
var list2 = outDto1.Select(m => m.TaskNo).ToList();
|
var jsonData = JsonConvert.SerializeObject(outDto1);
|
//更改任务的发送返回时间//
|
new TaskServer().EditTaskIssueOk(list2, time1, time2);
|
|
|
|
|
#endregion
|
|
#endregion
|
Db.CommitTran();
|
return outDto1;
|
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
|
#region 移库目标库位
|
/// <summary>
|
/// 获取移库目标库位
|
/// </summary>
|
/// <param name="oldAddress">需要移动的库位地址</param>
|
/// <param name="roadWay">巷道</param>
|
/// <param name="area">区域</param>
|
/// <returns>目标库位地址 为"" 直接下发两次出库指令</returns>
|
public string MoveAddress(string oldAddress, string roadWay, string area)//01020201 排-列-层-深度
|
{
|
string nowAddress = "";
|
// 获取移库目标储位
|
var row = int.Parse(oldAddress.Substring(0, 2));
|
var lie = int.Parse(oldAddress.Substring(2, 2));
|
var ceng = int.Parse(oldAddress.Substring(4, 2));
|
|
var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum
|
from SysStorageLocat
|
where Flag = '0' and Status in ('0','3','5') and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo = '{area}'
|
order by distNum;";
|
|
var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
|
if (addressModels.Count > 0) // 判断同巷道内排空库位
|
{
|
var listLocaete = new List<string>();
|
foreach (var item in addressModels)
|
{
|
// 目标内库位对应的外库位
|
string addressee = item.LocatNo.Substring(0, 6) + "01";
|
|
// 判断目标库位的外库位是否存在货物 (正常情况下正在移入情况不存在,因为移库先移入里面,后移入外面)
|
//SlotStatus 0: 空储位 1:有货 2:正在入库 3:正在出库 4:正在移入 5:正在移出
|
sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status in ('0','3','5') and Flag in ('0','1') ; ";
|
var rowNum = Db.Ado.SqlQuery<int>(sqlString).First();
|
if (rowNum == 0)
|
{
|
continue;
|
}
|
else
|
{
|
nowAddress = item.LocatNo;
|
break;
|
}
|
}
|
}
|
if (nowAddress == "")
|
{
|
// 判断同巷道外排空库位
|
sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum
|
from SysStorageLocat
|
where Flag = '0' and Status in ('0','3','5') and Depth = '01' and RoadwayNo = '{roadWay}' and AreaNo = '{area}'
|
order by distNum;";
|
var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList();
|
if (adderModeling.Count > 0)
|
{
|
nowAddress = adderModeling[0].LocatNo;
|
}
|
else
|
{
|
// 库内不存在空储位
|
nowAddress = "";
|
}
|
}
|
|
|
return nowAddress;
|
}
|
#endregion
|
|
#endregion
|
|
#region 满放空取
|
|
|
public OutCommandDto ReLocation(RequestLocate model)
|
{
|
try
|
{
|
OutCommandDto comDto = new OutCommandDto();//返回wcs的入库命令
|
|
var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == model.PalletNo);//托盘信息
|
|
//判断托盘条码是否有效
|
if (stock == null)
|
{
|
throw new Exception("托盘条码不受WMS管理,不可入库!");
|
}
|
|
//获取托盘绑定信息
|
var palletbind = Db.Queryable<BllPalletBind>().Where(a => a.PalletNo == model.PalletNo).OrderByDescending(a => a.Id).First();
|
|
//获取任务信息
|
var logtask = Db.Queryable<LogTask>().Where(a => a.PalletNo == model.PalletNo).OrderByDescending(a => a.TaskNo).First();
|
|
//获取储位信息
|
var locat = Db.Queryable<SysStorageLocat>().First(a => a.LocatNo == logtask.EndLocat);
|
|
Db.BeginTran();
|
|
#region 修改储位属性
|
|
//验证储位是深度1或深度2
|
if (locat.Depth == "01")
|
{
|
//获取深度2储位
|
var locat2 = Db.Queryable<SysStorageLocat>().First(a => a.LocateGroup == locat.LocateGroup && a.Depth == "02");
|
//locat.Flag = "1";
|
locat2.Flag = "1";
|
Db.Updateable(locat2).ExecuteCommand();
|
}
|
//else
|
//{
|
|
//}
|
locat.Flag = "1";
|
Db.Updateable(locat).ExecuteCommand();
|
|
#endregion
|
|
#region 重新申请储位
|
|
var areaCode = "";
|
SysStorageArea area = null;
|
switch (model.SubPallet)
|
{
|
case "0":
|
area = Db.Queryable<SysStorageArea>().First(m => m.WareHouseNo == "W03" && m.AreaName == "母托盘区" && m.IsDel == "0");
|
break;
|
case "1":
|
case "2":
|
case "3":
|
case "4":
|
area = Db.Queryable<SysStorageArea>().First(m => m.WareHouseNo == "W03" && m.AreaName == "子母托盘区" && m.IsDel == "0");
|
break;
|
}
|
if (area != null)
|
{
|
areaCode = area.AreaNo;
|
}
|
var plnList = new List<string>()
|
{
|
"10",
|
"20",
|
"30",
|
};
|
if (!plnList.Contains(model.TaskType))
|
{
|
areaCode = "";
|
}
|
if (string.IsNullOrWhiteSpace(areaCode) && !plnList.Contains(model.TaskType))
|
{
|
throw new Exception("未查询到当前托盘有无子托定义,请核实");
|
}
|
|
var allotLocate = new AllotLocation();
|
|
SysStorageLocat locate;
|
//if (isHaveLocateNo) //指定储位
|
//{
|
// locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == haveLocate.LocatNo);
|
//}
|
//else
|
//{
|
//获取同巷道新储位
|
locate = allotLocate.GetSuiTableLocate("W03", areaCode, locat.RoadwayNo);
|
//}
|
|
#endregion
|
|
#region 重新申请后 修改相关信息
|
|
//修改储位状态
|
locate.Status = "2";
|
Db.Updateable(locate).ExecuteCommand();
|
//修改托盘绑定储位地址
|
palletbind.LocatNo = locate.LocatNo;
|
Db.Updateable(palletbind).ExecuteCommand();
|
//修改任务目标地址
|
logtask.EndLocat = locate.LocatNo;
|
Db.Updateable(logtask).ExecuteCommand();
|
|
var log = new RoadwayUseLogServer();
|
var bl = log.AddRoadwayUseLog(new AddRoadwayUseLogVm()
|
{
|
WareHouseNo = locate.WareHouseNo,
|
RoadwayNo = locate.RoadwayNo,
|
|
LocateNo = locate.LocatNo,
|
Row = locate.Row,
|
Column = locate.Column,
|
Layer = locate.Layer,
|
Depth = locate.Depth,
|
}, 0);
|
if (!bl)
|
{
|
throw new Exception("满放巷道使用记录添加失败");
|
}
|
|
#endregion
|
|
Db.CommitTran();
|
|
comDto = new OutCommandDto()
|
{
|
PalletNo = model.PalletNo,//托盘号
|
PalletType = model.SubPallet,//托盘类型
|
StartLocat = "", // 起始位置
|
EndLocat = locate.LocatNo, // 目标位置
|
EndRoadway = locate.RoadwayNo, // 目标位置
|
TaskNo = logtask.TaskNo, // 任务号
|
Type = "0",// 任务类型 (入库)
|
OutMode = "", //出库口
|
Order = 1
|
};
|
|
return comDto;
|
}
|
catch (Exception e)
|
{
|
Db.RollbackTran();
|
throw new Exception(e.Message);
|
}
|
}
|
|
#endregion
|
|
}
|
}
|