using Model.ModelDto;
|
using Model.ModelVm;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using WMS.BLL.LogServer;
|
using WMS.Entity.Context;
|
using WMS.IBLL.IPdaServer;
|
using WMS.DAL;
|
using WMS.Entity.BllAsnEntity;
|
using WMS.Entity.DataEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.Entity.LogEntity;
|
using WMS.Entity.BllSoEntity;
|
using Model.ModelVm.PdaVm;
|
using Model.ModelDto.PdaDto;
|
using Dm;
|
using Model.InterFaceModel;
|
using WMS.Entity.BllQualityEntity;
|
using Newtonsoft.Json;
|
using Utility.Tools;
|
using System.Reflection;
|
using System.IO;
|
using System.Security.Cryptography.X509Certificates;
|
using System.Net.WebSockets;
|
using WMS.BLL.SysServer;
|
|
namespace WMS.BLL.BllPdaServer
|
{
|
public class PdaAsnServer : IPdaAsnServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
#region 修改托盘绑定时入库单去除变为物料+数量
|
|
/// <summary>
|
/// 获取单据明细显示的物料
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public List<ArrivalNoticeDetailDto> GetArrivalNoticesInfo(ArrivalNoticeVm model)
|
{
|
try
|
{
|
//model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数
|
var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status !="2" && m.Status != "3" && m.Status != "4").Select(m => m.ASNNo).ToList();
|
var list = new List<ArrivalNoticeDetailDto>();
|
if (model.Type.Contains("0"))//0贴标
|
{
|
list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && !string.IsNullOrWhiteSpace(m.PackagNo)).Select(m => new ArrivalNoticeDetailDto()).ToList();
|
}
|
else if (model.Type.Contains("1"))//1不贴标
|
{
|
list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && string.IsNullOrWhiteSpace(m.PackagNo)).Select(m=>new ArrivalNoticeDetailDto()).ToList();
|
}
|
else
|
{
|
throw new Exception("页签类型参数错误");
|
}
|
|
List<ArrivalNoticeDetailDto> noticeList = new List<ArrivalNoticeDetailDto>();
|
foreach (var item in list)
|
{
|
if (string.IsNullOrEmpty(item.LotNo))
|
{
|
noticeList.Add(item);
|
}
|
else
|
{
|
string[] LotNoList = item.LotNo.Split(';');
|
foreach (var item2 in LotNoList)
|
{
|
ArrivalNoticeDetailDto entry = new ArrivalNoticeDetailDto()
|
{
|
Id = item.Id,
|
ASNNo = item.ASNNo,
|
CompleteQty = item.CompleteQty,
|
CompleteTime = item.CompleteTime,
|
CreateTime = item.CreateTime,
|
Qty = item.Qty,
|
FactQty = item.FactQty,
|
LotNo = item2,
|
Money = item.Money,
|
PackagNo = item.PackagNo,
|
PackagName = item.PackagName,
|
Status = item.Status,
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
};
|
|
|
noticeList.Add(entry);
|
}
|
}
|
}
|
//List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>();
|
//foreach (var item in noticeList)
|
//{
|
// string str = BySkuNoGetPackInfo(item.SkuNo);
|
// if (str == "存在")
|
// {
|
// list.Add(item);
|
// }
|
//}
|
|
return noticeList;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
|
#endregion
|
|
// 获取单据列表
|
public List<string> GetArrivalNotices(ArrivalNoticeVm model)
|
{
|
string sqlString = string.Empty;
|
try
|
{
|
// 未关单的单据
|
//sqlString = $"select * from BllArrivalNotice where Type in ({model.Type}) and Status != '3' and Status != '4' and IsDel='0' order by CreateTime;";
|
//var modelList = Db.Ado.SqlQuery<ArrivalNoticeDto>(sqlString);
|
|
//model.Type:单据类型 在这里代表前端页签类型:即标签页签:贴标物料; 数量页签:不贴表物料,原因:懒得加参数
|
var data = Db.Queryable<BllArrivalNotice>().Where(m => m.IsDel == "0" && m.Status != "3" && m.Status != "4").Select(m=>m.ASNNo).ToList();
|
var list = new List<string>();
|
if (model.Type.Contains("0"))//0贴标
|
{
|
list = Db.Queryable<BllArrivalNoticeDetail>().Where(m =>m.IsDel == "0" && data.Contains(m.ASNNo) && !string.IsNullOrWhiteSpace(m.PackagNo)).Select(m => m.ASNNo).Distinct().ToList();
|
}
|
else if(model.Type.Contains("1"))//1不贴标
|
{
|
list = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && data.Contains(m.ASNNo) && string.IsNullOrWhiteSpace(m.PackagNo)).Select(m=>m.ASNNo).Distinct().ToList();
|
}
|
else
|
{
|
throw new Exception("页签类型参数错误");
|
}
|
|
|
return list;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
//根据入库单号获取入库总单信息
|
public List<BllArrivalNotice> GetArrivalNotice(ArrivalNoticeVm model)
|
{
|
string sqlString = string.Empty;
|
try
|
{
|
sqlString = $"select * from BllArrivalNotice where ASNNo = '{model.ASNNo}' and isdel='0' ";
|
var modelList = Db.Ado.SqlQuery<BllArrivalNotice>(sqlString);
|
|
return modelList;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 根据单据号获取单据明细列表
|
public List<ArrivalNoticeDetailDto> GetArrivalNoticeDetails(ArrivalNoticeVm model)
|
{
|
string sqlString = string.Empty;
|
try
|
{
|
sqlString = $"select * from BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' and isdel='0' order by CreateTime;";
|
var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString);
|
|
List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>();
|
foreach (var item in modelList)
|
{
|
string str = BySkuNoGetPackInfo(item.SkuNo);
|
if (str == "不存在")
|
{
|
list.Add(item);
|
}
|
}
|
|
return list;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 根据单据明细ID获取明细详情
|
public ArrivalNoticeDetailDto GetArrivalNoticeDetail(ArrivalNoticeDetailVm model)
|
{
|
string sqlString = string.Empty;
|
try
|
{
|
if (model.Id == null || model.Id == 0)
|
{
|
throw new Exception("明细ID不可为空!");
|
}
|
|
sqlString = $"select * from BllArrivalNoticeDetail where Id = '{model.Id}' and isdel='0' order by CreateTime;";
|
var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString);
|
|
if (modelList.Count > 0)
|
{
|
var notice = Db.Queryable<BllArrivalNotice>().First(m=>m.IsDel == "0" && m.ASNNo == modelList[0].ASNNo);
|
modelList[0].UDF5 = notice.Demo;
|
return modelList[0];
|
}
|
|
return new ArrivalNoticeDetailDto();
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 验证托盘是否存在
|
/// </summary>
|
/// <param name="palletNo">托盘号</param>
|
/// <returns>"":可使用 -1:不可使用(原因)</returns>
|
public string IsEnablePalletNo(string palletNo)
|
{
|
string sqlMsg = "";
|
string sqlString = string.Empty;
|
try
|
{
|
sqlString = $"select * from SysPallets where PalletNo = '{palletNo}' and isdel = '0';";
|
var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString);
|
|
if (models.Count > 1)
|
{
|
sqlMsg = "-1:存在重复托盘号,请检查!";
|
return sqlMsg;
|
}
|
if (models.Count > 0)
|
{
|
if (models[0].Status == "1")
|
{
|
sqlString = $"select count(id) from DataStockDetail where PalletNo = '{palletNo}' and isnull(LocatNo,'') != '' and isdel = '0';";
|
int rowNum = Db.Ado.GetInt(sqlString);
|
if (rowNum > 0)
|
{
|
sqlMsg = "-1:托盘使用中,此托盘应在库内请核实!";
|
}
|
}
|
}
|
else
|
{
|
sqlMsg = "-1:托盘号不存在!";
|
}
|
|
return sqlMsg;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
|
|
/// <summary>
|
/// 验证地码是否存在
|
/// </summary>
|
/// <param name="locatNo">地码</param>
|
/// <returns>"":可使用 -1:不可使用(原因)</returns>
|
public string IsEnableLocatNo(string locatNo)
|
{
|
string sqlMsg = "";
|
string sqlString = string.Empty;
|
try
|
{
|
sqlString = $"select * from SysStorageLocat where LocatNo = '{locatNo}' and WareHouseNo = 'W02' and isdel = '0';";
|
var models = Db.Ado.SqlQuery<PalletBindVm>(sqlString);
|
|
if (models.Count > 0)
|
{
|
if (models[0].Status != "0")
|
{
|
sqlMsg = "-1:此库位使用中,请在库内请核实!";
|
}
|
}
|
else
|
{
|
sqlMsg = "-1:库位不存在!";
|
}
|
|
return sqlMsg;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 根据箱码或托盘号获取箱支信息 liudl
|
public List<BoxInfoDto> GetBoxInfos(BoxInfoVm model)
|
{
|
try
|
{
|
string sqlString = string.Empty;
|
if (model.IsHuiKu == 0)
|
{
|
sqlString = "select BoxNo, SkuNo,SkuName, LotNo, SUM(Qty) as Qty from BllBoxInfo where IsDel = '0' ";
|
if (!string.IsNullOrEmpty(model.PalletNo))
|
{
|
sqlString += $"and PalletNo = '{model.PalletNo}' and Status in ('0','1') ";
|
}
|
if (!string.IsNullOrEmpty(model.BoxNo))
|
{
|
sqlString += $"and BoxNo = '{model.BoxNo}' and Status in ('0','1') ";
|
}
|
sqlString += $"group by BoxNo,SkuNo,SkuName,LotNo; ";
|
}
|
else
|
{
|
sqlString = "select BoxNo, SkuNo,SkuName, LotNo, SUM(Qty) as Qty from DataBoxInfo where IsDel = '0' ";
|
if (!string.IsNullOrEmpty(model.PalletNo))
|
{
|
sqlString += $"and PalletNo = '{model.PalletNo}' ";
|
}
|
sqlString += $"group by BoxNo,SkuNo,SkuName,LotNo; ";
|
}
|
var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
|
|
return models;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 根据托盘号或箱码获取托盘信息 liudl
|
public List<PalletBindDto> GetPalletBindInfo(BllPalletBind model)
|
{
|
try
|
{
|
string sqlString = string.Empty;
|
sqlString = "select b.SkuNo,b.SkuName,a.LotNo,a.Qty,a.PalletNo,a.Id from BllPalletBind a left join BllArrivalNoticeDetail b on a.ASNDetailNo = b.Id where a.IsDel = '0' and b.IsDel = '0' ";
|
if (!string.IsNullOrEmpty(model.PalletNo))
|
{
|
sqlString += $"and PalletNo = '{model.PalletNo}' and a.Status = '0' ";
|
}
|
else
|
{
|
throw new Exception("托盘号异常!");
|
}
|
var models = Db.Ado.SqlQuery<PalletBindDto>(sqlString);
|
|
return models;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 绑定空托盘
|
public string BindNullPallet(PalletBindVm model)
|
{
|
string strMsg = "";
|
string type = model.BindType == "0" ? "PDA" : "叠托机";
|
try
|
{
|
var datetime = Db.GetDate();
|
|
//获取托盘绑定信息
|
string str = "select * from BllPalletBind where IsDel = '0' and PalletNo = @palletno and Status = '0' ";
|
List<PalletBindVm> list = Db.Ado.SqlQuery<PalletBindVm>(str, new
|
{
|
palletno = model.PalletNo //托盘号
|
});
|
//判断是否已绑定该托盘
|
if (list.Count > 0)
|
{
|
strMsg = "-1:该托盘已被绑定!";
|
return strMsg;
|
}
|
if (string.IsNullOrEmpty(model.PalletNo))
|
{
|
strMsg = "-1:托盘号不可为空!";
|
return strMsg;
|
}
|
if (model.Qty == null || model.Qty == 0)
|
{
|
strMsg = "-1:空托盘数量不可为空!";
|
return strMsg;
|
}
|
//获取托盘信息
|
var pallet = Db.Queryable<SysPallets>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo);
|
|
if (pallet == null)
|
{
|
strMsg = "-1:托盘信息为空!";
|
return strMsg;
|
}
|
if (pallet.Status != "0")
|
{
|
strMsg = "-1:该托盘正在使用!";
|
return strMsg;
|
}
|
|
Db.BeginTran();
|
|
//var taskNo = new Common().GetMaxNo("TK");
|
//var exTask = new LogTask //入库任务
|
//{
|
// TaskNo = taskNo,
|
// Sender = "WMS",
|
// Receiver = "",
|
// IsSuccess = 1, //是否下发成功 0失败 1成功
|
// SendDate = DateTime.Now, //发送时间
|
// BackDate = DateTime.Now, //返回时间
|
// StartLocat = "",//起始位置
|
// EndLocat = "",//目标位置
|
// PalletNo = model.PalletNo,//托盘码
|
// IsSend = 1,//是否可再次下发
|
// IsCancel = 1,//是否可取消
|
// IsFinish = 1,//是否可完成
|
// Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
// Status = "0",//任务状态0:等待执行1正在执行2执行完成
|
// OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单
|
// Msg = "母托盘的入库任务",
|
//};
|
//Db.Insertable(exTask).ExecuteCommand();
|
|
// 插入托盘绑定表
|
var modelpb = new BllPalletBind
|
{
|
ASNNo = "",
|
ASNDetailNo = 0,
|
TaskNo = "", //任务号
|
PalletNo = model.PalletNo,
|
PalletNo2 = model.PalletNo2,
|
PalletNo3 = model.PalletNo3,
|
Qty = (int)model.Qty,
|
FullQty = model.FullQty,
|
Status = "0", //等待执行
|
Type = "1", //0 物料托 1 空托
|
LotNo = "",
|
LotText = "",
|
SupplierLot = "",
|
InspectMark = "0", //0 否 1 是
|
BitPalletMark = "0",
|
IsBale = "0",
|
IsBelt = "0",
|
CreateUser = (int)model.CreateUser,
|
CreateTime = Db.GetDate()
|
};
|
var id = Db.Insertable(modelpb).ExecuteReturnIdentity();
|
|
var modelbb = new BllBoxInfo
|
{
|
ASNNo = "",
|
ASNDetailNo = null,
|
BindNo = id,
|
PalletNo = model.PalletNo,
|
PalletNo2 = model.PalletNo2,
|
PalletNo3 = model.PalletNo3,
|
Status = "1",
|
CompleteTime = DateTime.Now,
|
Qty = (int)model.Qty,
|
FullQty = null,
|
SkuNo = "100099",
|
SkuName = "托盘",
|
LotNo = "",
|
LotText = "",
|
SupplierLot = "",
|
InspectStatus = "1",
|
Origin = type,
|
BoxNo = "",
|
BoxNo2 = "",
|
BoxNo3 = "",
|
InspectMark = "",
|
BitBoxMark = "0",
|
|
CreateUser = (int)model.CreateUser,
|
CreateTime = datetime
|
};
|
Db.Insertable(modelbb).ExecuteCommand();
|
|
|
// 更改托盘使用状态
|
string sqlStr = string.Empty;
|
sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
Db.Ado.ExecuteCommand(sqlStr);
|
Db.CommitTran();
|
|
// 插入操作日志
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "空托入库", model.PalletNo, "添加", $"在PDA上添加了空托盘跺", (int)model.CreateUser);
|
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
throw ex;
|
}
|
}
|
|
// 叠托机绑定空托盘
|
public string BindNullPallets(PalletsBind model)
|
{
|
string strMsg = "";
|
string type = model.BindType == "0" ? "PDA" : "叠托机";
|
try
|
{
|
var datetime = Db.GetDate();
|
|
//获取托盘绑定信息
|
string str = "select * from BllPalletBind where IsDel = '0' and PalletNo = @palletno and Status = '0' ";
|
List<PalletBindVm> list = Db.Ado.SqlQuery<PalletBindVm>(str, new
|
{
|
palletno = model.PalletNo //托盘号
|
});
|
//判断是否已绑定该托盘
|
if (list.Count > 0)
|
{
|
strMsg = "-1:该托盘已被绑定!";
|
return strMsg;
|
}
|
if (string.IsNullOrEmpty(model.PalletNo))
|
{
|
strMsg = "-1:托盘号不可为空!";
|
return strMsg;
|
}
|
if (model.Qty == null || model.Qty == 0)
|
{
|
strMsg = "-1:空托盘数量不可为空!";
|
return strMsg;
|
}
|
//获取托盘信息
|
var pallet = Db.Queryable<SysPallets>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo);
|
|
if (pallet == null)
|
{
|
strMsg = "-1:托盘信息为空!";
|
return strMsg;
|
}
|
if (pallet.Status != "0")
|
{
|
strMsg = "-1:该托盘正在使用!";
|
return strMsg;
|
}
|
|
Db.BeginTran();
|
|
// 插入托盘绑定表
|
var modelpb = new BllPalletBind
|
{
|
ASNNo = "",
|
ASNDetailNo = 0,
|
TaskNo = "", //任务号
|
PalletNo = model.PalletNo,
|
Qty = (int)model.Qty,
|
Status = "0", //等待执行
|
Type = "1", //0 物料托 1 空托
|
LotNo = "",
|
LotText = "",
|
SupplierLot = "",
|
InspectMark = "0", //0 否 1 是
|
BitPalletMark = "0",
|
IsBale = "0",
|
IsBelt = "0",
|
CreateTime = Db.GetDate()
|
};
|
var id = Db.Insertable(modelpb).ExecuteReturnIdentity();
|
|
var modelbb = new BllBoxInfo
|
{
|
ASNNo = "",
|
ASNDetailNo = null,
|
BindNo = id,
|
PalletNo = model.PalletNo,
|
Status = "1",
|
CompleteTime = DateTime.Now,
|
Qty = (int)model.Qty,
|
FullQty = null,
|
SkuNo = "100099",
|
SkuName = "托盘",
|
LotNo = "",
|
LotText = "",
|
SupplierLot = "",
|
InspectStatus = "1",
|
Origin = type,
|
BoxNo = "",
|
BoxNo2 = "",
|
BoxNo3 = "",
|
InspectMark = "",
|
BitBoxMark = "0",
|
|
CreateTime = datetime
|
};
|
Db.Insertable(modelbb).ExecuteCommand();
|
|
|
// 更改托盘使用状态
|
string sqlStr = string.Empty;
|
sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
Db.Ado.ExecuteCommand(sqlStr);
|
Db.CommitTran();
|
|
// 插入操作日志
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "空托入库", model.PalletNo, "添加", $"在PDA上添加了空托盘跺", 1);
|
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 解绑空托盘
|
/// </summary>
|
/// <param name="upBindPalletNo">解绑托盘号</param>
|
/// <param name="createUser">创建人</param>
|
/// <returns></returns>
|
public string UnBindNullPallet(string upBindPalletNo, int createUser)
|
{
|
string strMsg = "";
|
//捕获异常
|
try
|
{
|
//获取任务信息
|
var logtask = Db.Queryable<LogTask>().First(a => a.PalletNo == upBindPalletNo && a.IsDel == "0" && a.Status == "1");
|
if (logtask != null)
|
{
|
strMsg = "该托盘任务已完成 或未成功创建任务 请核实!";
|
return strMsg;
|
}
|
string bindstr = "select * from BllPalletBind Where IsDel = @isdel and PalletNo = @palletno and ASNDetailNo = 0 and ASNNo = '' ";
|
//获取绑定托盘表信息
|
List<PalletBindVm> bindVms = Db.Ado.SqlQuery<PalletBindVm>(bindstr, new
|
{
|
isdel = "0", //是否删除
|
palletno = upBindPalletNo //托盘号
|
});
|
//获取箱码信息
|
var box = Db.Queryable<BllBoxInfo>().First(a => a.PalletNo == upBindPalletNo && a.IsDel == "0" && a.Status != "2" && a.BindNo == bindVms[0].Id);
|
//判断空托入库的托盘是否有该托盘
|
if (bindVms.Count != 1)
|
{
|
strMsg = "该托盘不是空托托盘 或未绑定 请核实托盘";
|
return strMsg;
|
}
|
//删除绑定托盘表信息
|
string delstr = "update BllPalletBind set IsDel = 1,UpdateUser = @UpdateUser,UpdateTime = @UpdateTime Where PalletNo = @palletno and Id =@Id ";
|
int i = Db.Ado.ExecuteCommand(delstr, new
|
{
|
UpdateUser = createUser,
|
UpdateTime = DateTime.Now,
|
palletno = upBindPalletNo,
|
Id = bindVms[0].Id
|
});
|
//修改托盘状态
|
Db.BeginTran();
|
// 插入解绑托盘表
|
BllPalletUnbind modelpb = new BllPalletUnbind
|
{
|
|
UpbindPalletNo = upBindPalletNo,
|
PalletNo2 = bindVms[0].PalletNo2,
|
PalletNo3 = bindVms[0].PalletNo3,
|
Qty = bindVms[0].Qty,
|
LotNo = bindVms[0].LotNo,
|
LotText = bindVms[0].LotText,
|
SupplierLot = bindVms[0].SupplierLot,
|
CreateUser = createUser,
|
CreateTime = Db.GetDate()
|
};
|
Db.Insertable(modelpb).ExecuteCommand();
|
|
//修改箱码信息
|
box.Status = "3";
|
box.UpdateTime = DateTime.Now;
|
box.UpdateUser = createUser;
|
box.IsDel = "1";
|
Db.Updateable(box).ExecuteCommand();
|
|
////修改任务状态
|
//logtask.IsDel = "1";
|
//logtask.Status = "4"; //3 已取消
|
//logtask.UpdateUser = createUser; //取消人
|
//logtask.UpdateTime = DateTime.Now; //取消时间
|
//Db.Updateable(logtask).ExecuteCommand();
|
//更改库存数量
|
//string str = $"update DataStock set Qty = Qty - {(int)bindVms[0].Qty} Where SkuNo = '100099'";
|
// 更改托盘使用状态
|
string sqlStr = string.Empty;
|
sqlStr = $"update SysPallets set Status = '0' where PalletNo = '{upBindPalletNo}';";
|
Db.Ado.ExecuteCommand(sqlStr);
|
Db.CommitTran();
|
|
// 插入操作日志
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "空托入库", upBindPalletNo, "添加", $"在PDA上解绑了空托盘跺", createUser);
|
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
//抛出异常
|
Db.Ado.RollbackTran();
|
throw ex;
|
}
|
}
|
|
// 删除已组信息
|
public string DelBoxInfo(BoxInfoVm model)
|
{
|
string strMsg = "";
|
string sqlString = string.Empty;
|
try
|
{
|
if (model.Id == null || model.Id == 0)
|
{
|
strMsg = "-1:箱支ID不可为空!";
|
return strMsg;
|
}
|
|
// 获取箱支信息和托盘状态(已组未入库的可删除;入库成功又出库的不可删除)
|
sqlString = $"select * from BllBoxInfo where id = '{model.Id}' and Status='1' and isdel = '0';";
|
var boxModel = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
|
if (boxModel.Count <= 0)
|
{
|
strMsg = "-1:箱支信息状态已变更或已存在库存信息,请检查!";
|
}
|
|
// 查询托盘上其他物料数量
|
sqlString = string.Empty;
|
sqlString += $"select count(id) from BllBoxInfo where PalletNo = '{boxModel[0].PalletNo}' and isdel = '0' and id != '{model.Id}';";
|
int rowNum = Db.Ado.GetInt(sqlString);
|
|
// 查询入库单明细是否有其他托盘绑定信息
|
sqlString = string.Empty;
|
sqlString += $"select count(id) from BllBoxInfo where ASNDetailNo = '{boxModel[0].ASNDetailNo}' and isdel = '0' and id != '{model.Id}';";
|
int asnDetailNum = Db.Ado.GetInt(sqlString);
|
|
// 查询入库单明细是否有其他托盘绑定信息
|
sqlString = string.Empty;
|
sqlString += $"select count(id) from BllBoxInfo where ASNNo = '{boxModel[0].ASNNo}' and isdel = '0' and id != '{model.Id}';";
|
int asnNum = Db.Ado.GetInt(sqlString);
|
|
Db.BeginTran();
|
// 解除箱支和托盘的关联
|
sqlString = string.Empty;
|
sqlString = $"Update BllBoxInfo set ASNNo = '',ASNDetailNo='',BindNo = '',PalletNo='' ";
|
sqlString += $",UpdateTime=GETDATE(),UpdateUser='{model.CreateUser} where id = '{model.Id}';";
|
|
// 判断托盘上是否还有物料 无:删除绑定的托盘信息并更改托盘状态
|
if (rowNum <= 0)
|
{
|
// 删除托盘绑定信息
|
sqlString = string.Empty;
|
sqlString = $"Update BllPalletBind set IsDel = '1' where id = '{model.Id}';";
|
|
|
// 判断入库单明细是否存在其他已组托盘的
|
if (asnDetailNum <= 0)
|
{
|
// 更改入库单明细状态
|
sqlString = string.Empty;
|
sqlString += $"update BllArrivalNoticeDetail set FactQty = FactQty - '{boxModel[0].Qty}',Status = '0', ";
|
sqlString += $"CompleteTime=GETDATE() where id = '{boxModel[0].ASNDetailNo}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
|
// 判断入库单是否有其他组托信息
|
if (asnNum <= 0)
|
{
|
// 更改入库单状态
|
sqlString = string.Empty;
|
sqlString += $"update BllArrivalNotice set Status = '0',CompleteTime=GETDATE() where ASNNo = '{boxModel[0].ASNNo}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
}
|
}
|
|
// 更改托盘状态
|
sqlString = string.Empty;
|
sqlString = $"update SysPallets set Status = '0' where PalletNo = '{boxModel[0].PalletNo}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
}
|
|
Db.CommitTran();
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
|
// 删除已组信息
|
public string DelPalletBind(BllPalletBind model)
|
{
|
string strMsg = "";
|
string sqlString = string.Empty;
|
try
|
{
|
if (model.Id == 0)
|
{
|
throw new Exception("-1:托盘ID不可为0!");
|
}
|
|
//获取托盘绑定信息
|
var bind = Db.Queryable<BllPalletBind>().First(a => a.IsDel == "0" && a.Status == "0" && a.Id == model.Id);
|
//验证托盘绑定信息是否为空
|
if (bind == null)
|
{
|
throw new Exception("-1:未获取到对应托盘信息,请核实!");
|
}
|
//判断托盘绑定信息是否不是等待执行
|
if (bind.Status != "0")
|
{
|
throw new Exception("-1:该托盘已正在入库,请核实!");
|
}
|
//获取是否有指定库位
|
SysStorageLocat locat = new SysStorageLocat();
|
int isNullLocat = 0;
|
//判断储位是否为空
|
if (!string.IsNullOrWhiteSpace(bind.LocatNo))
|
{
|
isNullLocat = 1;
|
locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == bind.WareHouseNo && a.RoadwayNo == bind.RoadwayNo && a.LocatNo == bind.LocatNo);
|
//判断储位地址是否为正在入库
|
if (locat.Status != "2")
|
{
|
throw new Exception("-1:当前托盘绑定的储位地址不是正在入库,请核实!");
|
}
|
}
|
//获取托盘信息
|
var pallet = Db.Queryable<SysPallets>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo);
|
//判断托盘信息是否为空
|
if (pallet == null)
|
{
|
throw new Exception("-1:未获取到对应托盘信息,请核实!");
|
}
|
//获取对应入库单据总单
|
var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == bind.ASNNo);
|
//验证入库单总单信息
|
if (notice == null)
|
{
|
throw new Exception("-1:未获取到对应入库单总单信息,请核实!");
|
}
|
//获取对应入库单据明细
|
var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(a => a.IsDel == "0" && a.Id == bind.ASNDetailNo);
|
//验证入库单单据明细
|
if (noticeDetail == null)
|
{
|
throw new Exception("-1:未获取到对应入库单单据明细信息,请核实!");
|
}
|
|
|
Db.BeginTran();
|
//减少入库单明细数量 判断已组数量是否为0 再判断完成数量是否为0
|
noticeDetail.FactQty -= bind.Qty;
|
//判断已组数量是否为0
|
if (noticeDetail.FactQty == 0)
|
{
|
//判断是否有完成数量
|
if (noticeDetail.CompleteQty == 0)
|
{
|
noticeDetail.Status = "0"; //入库单明细状态
|
notice.Status = "0"; //入库单总单状态
|
}
|
}
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
Db.Updateable(notice).ExecuteCommand();
|
|
|
// 清除托盘绑定上信息
|
//ASNNo,ASNDetailNo,Qty,FullQty,LotNo,LotText,SupplierLot,IsDel,UpdateTime,UpdateUser
|
bind.ASNNo = ""; //入库单号
|
bind.ASNDetailNo = 0; //入库单明细id
|
bind.Qty = 0; //数量
|
bind.FullQty = 0; //整托数量
|
bind.LotNo = ""; //批次
|
bind.LotText = ""; //批次描述
|
bind.SupplierLot = ""; //供货批次
|
bind.IsDel = "1"; //是否删除
|
bind.UpdateTime = Db.GetDate(); //修改时间
|
bind.UpdateUser = model.CreateUser; //修改人
|
if (isNullLocat == 1)
|
{
|
bind.LocatNo = ""; //储位地址
|
bind.RoadwayNo = ""; //所属巷道
|
bind.WareHouseNo = ""; //所属仓库
|
//修改储位信息状态
|
locat.Status = "0"; //储位状态 0:空储位
|
Db.Updateable(locat).ExecuteCommand();
|
}
|
Db.Updateable(bind).ExecuteCommand();
|
|
//修改托盘信息状态
|
pallet.Status = "0"; //0:未使用
|
Db.Updateable(pallet).ExecuteCommand();
|
|
Db.CommitTran();
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
|
// 平库完成入库操作
|
public string CompleteInStock(PalletBindVm model)
|
{
|
string strMsg = "";
|
string sqlString = string.Empty;
|
try
|
{
|
///平库入库业务
|
///1:判断一系列条件
|
///1.1:判断托盘状态 是否为使用中
|
///1.2:判断组托、箱码信息 是否已入库
|
///1.3:判断单据是否关单 已关单无法入库 请重新创建其它单据
|
///1.4:判断任务信息是否为已完成(先判断 等确定组托后是否创建任务再决定是否注释)
|
///2:更改库存
|
///2.1:更改前判断库存是否存在该物料 如存在 直接增加数量 不存在 新增库存信息 增加库存明细信息
|
///3:更改单据
|
///3.1:更改单据时判断单据状态是否为已完成 如已完成 则只增加完成数量
|
///3.1.1:如正在执行 则判断完成数量加入库数量是否等于或大于入库单数量
|
///3.2:如正在执行或等待执行 则判断完成数量加入库数量是否等于或大于入库单数量
|
///3.2.1:不大于或等于 则变更状态为正在执行
|
///3.2.2:如大于或等于 则变更状态为已完成
|
///4:更改组托信息和箱码信息
|
///4.1:组托信息更改为已入库
|
///4.2:更改任务信息
|
|
//获取当前时间
|
DateTime serverTime = Db.Ado.GetDateTime("select GETDATE();");
|
#region 判断
|
|
#region 是否回流入库
|
int iscount = 0;
|
//库存明细信息
|
var stockDetail = Db.Queryable<DataStockDetail>().Where(a => a.IsDel == "0" && a.PalletNo == model.PalletNo).ToList();
|
//验证库存是否拥有该托信息
|
if (stockDetail != null && stockDetail.Count > 0)
|
{
|
foreach (var item in stockDetail)
|
{
|
if (!string.IsNullOrEmpty(item.WareHouseNo))
|
{
|
strMsg = "-1:该托盘未在库外,请核查!";
|
return strMsg;
|
}
|
}
|
iscount = 1; //回流入库
|
}
|
#endregion
|
|
#region 地码信息(储位信息)
|
var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == model.LocatNo && w.Status == "0" && w.WareHouseNo == "W02");
|
if (storageLocat == null)
|
{
|
strMsg = "-1:储位信息不存在或非空闲状态,请核查!";
|
return strMsg;
|
}
|
#endregion
|
|
#region 组托信息
|
// 验证组托信息
|
var palletbind = Db.Queryable<BllPalletBind>().Where(p => p.IsDel == "0" && p.ASNNo == model.ASNNo && p.PalletNo == model.PalletNo && p.Status != "2").ToList();
|
|
if (iscount == 0)
|
{
|
//验证组托信息是否为空
|
if (palletbind == null || palletbind.Count <= 0)
|
{
|
strMsg = "-1:组托信息为空,请核查!";
|
return strMsg;
|
}
|
}
|
#endregion
|
|
#region 箱码信息
|
//获取箱码信息
|
var boxinfo = new List<BllBoxInfo>();
|
if (iscount == 0)
|
{
|
string boxstr = $"select * from BLLBoxInfo where IsDel = '0' and ASNNo = '{model.ASNNo}'";
|
boxinfo = Db.Ado.SqlQuery<BllBoxInfo>(boxstr).ToList();
|
|
//验证箱码信息是否存在
|
if (boxinfo.Count <= 0)
|
{
|
strMsg = "-1:箱码信息不存在,请核查!";
|
return strMsg;
|
}
|
}
|
#endregion
|
|
#region 单据信息
|
//获取入库单据总单
|
var arrival = new BllArrivalNotice();
|
if (iscount == 0)
|
{
|
arrival = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.Status != "3" && a.ASNNo == model.ASNNo);
|
|
//验证入库单总单是否关闭
|
if (arrival == null)
|
{
|
strMsg = "-1:入库单总单为空,请核查!";
|
return strMsg;
|
}
|
//判断入库单总单是否为已关闭
|
if (arrival.Status == "3")
|
{
|
strMsg = "-1:入库单总单已关闭,请核查!";
|
return strMsg;
|
}
|
}
|
//获取入库单明细信息
|
var arrivalnotice = new List<BllArrivalNoticeDetail>();
|
if (iscount == 0)
|
{
|
arrivalnotice = Db.Queryable<BllArrivalNoticeDetail>().Where(d => d.IsDel == "0" && d.ASNNo == arrival.ASNNo && d.Status == "1").ToList();
|
//验证入库单明细是否存在
|
if (arrivalnotice == null || arrivalnotice.Count <= 0)
|
{
|
strMsg = "-1:入库单明细为空,请核查!";
|
return strMsg;
|
}
|
}
|
#endregion
|
|
#endregion
|
|
Db.BeginTran();//开启事务
|
//判断是否回流入库
|
if (iscount == 0)
|
{
|
#region 正常入库
|
bool isFinsh = true;//入库单明细是否全部完成
|
//遍历入库单详情
|
foreach (var noticeItem in arrivalnotice)
|
{
|
#region 物料信息
|
var sku = Db.Queryable<SysMaterials>().First(s => s.SkuNo == noticeItem.SkuNo && s.IsDel == "0" && s.SkuName == noticeItem.SkuName);
|
//判断物料信息是否为空
|
if (sku == null)
|
{
|
strMsg = "-1:物料信息为空,请核查!";
|
return strMsg;
|
}
|
#endregion
|
decimal pallQty = 0;//托盘上数量
|
var boxinfo2 = boxinfo.Where(w => w.SkuNo == noticeItem.SkuNo && w.LotNo == noticeItem.LotNo && w.PalletNo == model.PalletNo).ToList();
|
if (boxinfo2.Count <= 0)
|
{
|
strMsg = "-1:箱码信息不存在,请核查!";
|
return strMsg;
|
}
|
else
|
{
|
// 改变箱支关系表状态:已入库
|
sqlString = $"Update BllBoxInfo set Status = '2' where PalletNo = '{model.PalletNo}' and ASNNo = '{model.ASNNo}' and Status = '1'";
|
Db.Ado.ExecuteCommand(sqlString);
|
|
pallQty = boxinfo2.Sum(w => w.Qty);
|
//入库单明细完成数量增加
|
noticeItem.CompleteQty += pallQty;
|
}
|
//判断入库数量增加后是否大于等于单据数量
|
if (noticeItem.CompleteQty >= noticeItem.Qty)
|
{
|
noticeItem.Status = "2";
|
noticeItem.CompleteTime = serverTime;
|
}
|
else
|
{
|
noticeItem.Status = "1";
|
|
isFinsh = false;
|
}
|
noticeItem.UpdateUser = model.CreateUser;
|
noticeItem.UpdateTime = serverTime;
|
Db.Updateable(arrivalnotice).ExecuteCommand();
|
|
#region 库存总表
|
// 判断当前物料库存表是否已存在
|
string str = $"select * from DataStock where SkuNo = '{noticeItem.SkuNo}' and LotNo = '{noticeItem.LotNo}' and Standard = '{noticeItem.Standard}' and SkuName = '{noticeItem.SkuName}' and IsDel = '0'";
|
var stockModel = Db.Ado.SqlQuerySingle<DataStock>(str);
|
|
if (stockModel == null || stockModel.Id == 0)
|
{
|
stockModel = new DataStock
|
{
|
LotNo = noticeItem.LotNo,
|
LotText = noticeItem.LotText,
|
SupplierLot = noticeItem.SupplierLot,
|
SkuNo = noticeItem.SkuNo,
|
SkuName = noticeItem.SkuName,
|
Qty = pallQty,
|
Standard = noticeItem.Standard,
|
CreateUser = (int)model.CreateUser,
|
CreateTime = serverTime
|
};
|
Db.Insertable<DataStock>(stockModel).ExecuteCommand();
|
}
|
else
|
{
|
sqlString = $"update DataStock set Qty = Qty + {pallQty}," +
|
$"UpdateTime = GETDATE(),UpdateUser='{model.CreateUser}' where id = '{stockModel.Id}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
}
|
#endregion
|
|
#region 库存明细表
|
var palletbindInfo = palletbind.First(w => w.ASNDetailNo == noticeItem.Id);
|
// 判断当前托盘是否已存在(拣货回库托盘)
|
var detailModel = Db.Queryable<DataStockDetail>()
|
.First(it => it.PalletNo == palletbindInfo.PalletNo && it.LotNo == noticeItem.LotNo && it.SkuNo == noticeItem.SkuNo
|
&& it.Standard == noticeItem.Standard && it.IsDel == "0");
|
var stId = 0;
|
if (detailModel == null || detailModel.Id == 0)
|
{
|
// 获取可抽检数量
|
sqlString = "select sum(qty) from BllBoxInfo where isdel = 0 and ";
|
sqlString += $"BindNo = '{palletbindInfo.Id}'";
|
int inspectQty = Db.Ado.GetInt(sqlString);
|
|
// 添加库存明细表
|
detailModel = new DataStockDetail()
|
{
|
LotNo = noticeItem.LotNo,
|
LotText = noticeItem.LotText,
|
SupplierLot = noticeItem.SupplierLot,
|
SkuNo = noticeItem.SkuNo,
|
SkuName = noticeItem.SkuName,
|
Standard = noticeItem.Standard,
|
Qty = pallQty,
|
LockQty = 0,
|
FrozenQty = 0,
|
InspectQty = inspectQty,
|
ASNNo = noticeItem.ASNNo,
|
ASNDetailNo = (int)palletbindInfo.ASNDetailNo,
|
WareHouseNo = "W02",
|
RoadwayNo = "",
|
AreaNo = "",
|
LocatNo = model.LocatNo,
|
PalletNo = model.PalletNo,
|
PalletNo2 = palletbindInfo.PalletNo2,
|
PalletNo3 = palletbindInfo.PalletNo3,
|
CompleteTime = serverTime,
|
ProductionTime = palletbindInfo.ProductionTime,
|
ExpirationTime = palletbindInfo.ExpirationTime,
|
Status = "0",
|
InspectMark = palletbindInfo.InspectMark,
|
BitPalletMark = palletbindInfo.BitPalletMark,
|
InspectStatus = sku.IsInspect, // 组盘的时候就要默认设定好是否合格
|
PackagNo = sku.PackagNo,
|
IsBale = palletbindInfo.IsBale,
|
IsBelt = palletbindInfo.IsBelt,
|
CreateUser = (int)model.CreateUser,
|
CreateTime = serverTime
|
};
|
|
stId = Db.Insertable<DataStockDetail>(detailModel).ExecuteReturnIdentity();
|
|
}
|
else
|
{
|
stId = detailModel.Id;
|
detailModel.LocatNo = model.LocatNo;
|
detailModel.UpdateTime = serverTime;
|
detailModel.UpdateUser = (int)model.CreateUser;
|
// 变更储位地址
|
Db.Updateable<DataStockDetail>(detailModel).UpdateColumns(it => new { it.LocatNo, it.UpdateTime, it.UpdateUser }).ExecuteCommand();
|
}
|
#endregion
|
|
#region 任务及组托信息
|
//创建任务信息
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //入库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "PDA",
|
IsSuccess = 1, //是否下发成功 0失败 1成功
|
SendDate = DateTime.Now, //发送时间
|
BackDate = DateTime.Now, //返回时间
|
StartLocat = "",//起始位置
|
EndLocat = "零箱库",//目标位置
|
PalletNo = palletbindInfo.PalletNo,//托盘码
|
IsSend = 0,//是否可再次下发
|
IsCancel = 0,//是否可取消
|
IsFinish = 0,//是否可完成
|
Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "2",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = "零箱库的入库任务",
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
|
//修改组托状态
|
palletbindInfo.Status = "2"; //2 入库完成
|
palletbindInfo.WareHouseNo = "W02";//所属仓库
|
palletbindInfo.LocatNo = model.LocatNo;//储位地址
|
palletbindInfo.UpdateTime = serverTime;
|
palletbindInfo.UpdateUser = model.CreateUser;
|
palletbindInfo.CompleteTime = serverTime; //完成时间
|
palletbindInfo.TaskNo = taskNo; //任务号
|
Db.Updateable(palletbind).ExecuteCommand();
|
#endregion
|
|
#region 库存箱支明细表
|
// 插入新组的箱支信息
|
var comTime = DateTime.Now;
|
foreach (var item in boxinfo2)
|
{
|
var info = new DataBoxInfo()
|
{
|
StockDetailId = stId,
|
BindNo = palletbindInfo.Id,
|
BoxNo = item.BoxNo,
|
BoxNo2 = item.BoxNo2,
|
BoxNo3 = item.BoxNo3,
|
PalletNo = item.PalletNo,
|
PalletNo2 = item.PalletNo2,
|
PalletNo3 = item.PalletNo3,
|
Qty = item.Qty,
|
FullQty = item.FullQty,
|
Status = "2",
|
LotNo = item.LotNo,
|
LotText = item.LotText,
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = sku.Standard,
|
ProductionTime = item.ProductionTime,
|
SupplierLot = item.SupplierLot,
|
InspectMark = item.InspectMark,
|
BitBoxMark = item.BitBoxMark,
|
InspectStatus = item.InspectStatus,
|
//InspectTime = item.,
|
|
IsDel = "0",
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
Db.Insertable(info).ExecuteCommand();
|
}
|
|
|
//sqlString = $"insert into DataBoxInfo select a.Id StockDetailId,b.BindNo,b.BoxNo,b.BoxNo2,b.BoxNo3,b.PalletNo,b.PalletNo2,b.PalletNo3,b.Qty,b.FullQty,b.Status,b.LotNo,b.LotText,b.SkuNo,b.SkuName,a.Standard,a.ProductionTime,a.SupplierLot,a.InspectMark,b.BitBoxMark,a.InspectStatus,a.InspectTime,'0' IsDel,GETDATE() CreateTime,{model.CreateUser} CreateUser,null UpdateTime,null UpdateUser from DataStockDetail a left join BllBoxInfo b on a.SkuNo=b.skuno where b.isdel = '0' and b.Status='2' and b.BindNo = '{palletbind.Id}' and b.PalletNo = '{model.PalletNo}'";
|
|
//Db.Ado.ExecuteCommand(sqlString);
|
|
//sqlString = $"insert into DataBoxInfo select stock.Id StockDetailId,box.BindNo,box.BoxNo,box.BoxNo2,box.BoxNo3,box.PalletNo,box.PalletNo2,box.PalletNo3,box.Qty,box.FullQty,box.Status,box.LotNo,box.LotText,box.SkuNo,box.SkuName,stock.Standard,stock.ProductionTime,stock.SupplierLot,stock.InspectMark,box.BitBoxMark,stock.InspectStatus,stock.InspectTime,'0' IsDel,GETDATE() CreateTime,{model.CreateUser} CreateUser,null UpdateTime,null UpdateUser from DataStockDetail stock left join BllBoxInfo box on stock.PalletNo = box.PalletNo where box.isdel = '0' and box.Status='2' and box.BindNo = '{palletbind.Id}' and stock.WareHouseNo = 'W02' and box.PalletNo = '{model.PalletNo}'";
|
//sqlString = $"select stock.Id StockDetailId,box.BindNo,box.BoxNo,box.BoxNo2,box.BoxNo3,box.PalletNo,box.PalletNo2,box.PalletNo3,box.Qty,box.FullQty,box.Status,box.LotNo,box.LotText,box.SkuNo,box.SkuName,stock.Standard,stock.ProductionTime,stock.SupplierLot,stock.InspectMark,box.BitBoxMark,stock.InspectStatus,stock.InspectTime,'0' IsDel,GETDATE() CreateTime,{model.CreateUser} CreateUser from DataStockDetail stock left join BllBoxInfo box on stock.PalletNo = box.PalletNo where box.isdel = '0' and box.Status='2' and box.BindNo = '{palletbind.Id}' and stock.WareHouseNo = 'W02' and box.PalletNo = '{model.PalletNo}'";
|
////and a.LocatNo = '{model.LocatNo},null UpdateTime,null UpdateUser'
|
|
//var databox = Db.Ado.SqlQuery<DataBoxInfo>(sqlString);
|
|
//foreach (var item in databox)
|
//{
|
// var boxdata = Db.Queryable<DataBoxInfo>().First(b => b.BoxNo == item.BoxNo);
|
|
// if (boxdata == null)
|
// {
|
// Db.Insertable(item).ExecuteCommand();
|
// }
|
// else
|
// {
|
// boxdata.Qty += item.Qty;
|
// Db.Updateable(boxdata).ExecuteCommand();
|
// }
|
//}
|
|
//sqlString = $"insert into DataBoxInfo ";
|
//sqlString += "select BindNo,BoxNo,BoxNo2,BoxNo3,PalletNo,PalletNo2,PalletNo3, ";
|
//sqlString += "Qty,FullQty,'0' as Status,LotNo,LotText,ProductionTime,SupplierLot,";
|
//sqlString += "InspectMark,BitBoxMark,InspectStatus ";
|
//sqlString += $"from BllBoxInfo where isdel = 0 and Status='1' and BindNo = '{bindModel.Id}';";
|
|
#endregion
|
}
|
if (isFinsh)//入库单明细全部完成
|
{
|
//修改入库单总单信息
|
arrival.Status = "2";
|
arrival.UpdateUser = model.CreateUser;
|
arrival.UpdateTime = serverTime;
|
Db.Updateable(arrival).ExecuteCommand();
|
}
|
else
|
{
|
//判断总单状态是否为正在执行
|
if (arrival.Status == "0")
|
{
|
//修改入库单总单信息
|
arrival.Status = "1";
|
arrival.UpdateUser = model.CreateUser;
|
arrival.UpdateTime = serverTime;
|
Db.Updateable(arrival).ExecuteCommand();
|
|
}
|
}
|
#endregion
|
}
|
if (iscount == 1)
|
{
|
//回流入库
|
#region 回流入库
|
|
//不修改库存 入库单据不做更改
|
//修改库存明细信息
|
//修改拣货信息为已完成
|
|
//修改库存明细信息
|
foreach (var item in stockDetail)
|
{
|
item.Status = "0"; //状态更改为待分配
|
item.WareHouseNo = "W02"; //所属仓库
|
item.UpdateTime = serverTime; //修改时间
|
item.UpdateUser = model.CreateUser; //修改人
|
//修改库存明细信息
|
Db.Updateable(item).ExecuteCommand();
|
}
|
//获取拣货信息
|
var alotr = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo && a.Status == "4");
|
if (alotr != null)
|
{
|
alotr.Status = "5"; //5 已完成
|
alotr.UpdateUser = model.CreateUser; //修改人
|
alotr.UpdateTime = serverTime; //修改时间
|
//修改拣货信息
|
Db.Updateable(alotr).ExecuteCommand();
|
}
|
#region 任务及组托信息
|
//创建任务信息
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //入库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "PDA",
|
IsSuccess = 1, //是否下发成功 0失败 1成功
|
SendDate = DateTime.Now, //发送时间
|
BackDate = DateTime.Now, //返回时间
|
StartLocat = "",//起始位置
|
EndLocat = "零箱库",//目标位置
|
PalletNo = model.PalletNo,//托盘码
|
IsSend = 0,//是否可再次下发
|
IsCancel = 0,//是否可取消
|
IsFinish = 0,//是否可完成
|
Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "2",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = "零箱库的回库任务",
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
|
//修改组托状态
|
//palletbind.Status = "2"; //2 入库完成
|
//palletbind.UpdateTime = serverTime;
|
//palletbind.UpdateUser = model.CreateUser;
|
//palletbind.CompleteTime = serverTime; //完成时间
|
//palletbind.TaskNo = taskNo; //任务号
|
//Db.Updateable(palletbind).ExecuteCommand();
|
|
#endregion
|
|
#endregion
|
}
|
storageLocat.Status = "1";
|
storageLocat.UpdateTime = serverTime; //修改时间
|
storageLocat.UpdateUser = model.CreateUser; //修改人
|
//修改储位状态
|
Db.Updateable(storageLocat).ExecuteCommand();
|
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成单据号为:{model.ASNNo}的托盘码为:{model.PalletNo}的平库入库操作", (int)model.CreateUser);
|
|
Db.CommitTran();
|
|
#region 平库入库注释代码
|
// 改变储位状态; 有货物
|
//sqlString = $"Update SysStorageLocat set Status = '1' where LocatNo = '{model.LocatNo}' and WareHouseNo = 'W01';";
|
//Db.Ado.ExecuteCommand(sqlString);
|
|
//// 改变箱支关系表状态:已入库
|
//sqlString = $"Update BllBoxInfo set Status = '2' where PalletNo = '{model.PalletNo}' and ASNNo = '{model.ASNNo}' and Status = '1';";
|
//Db.Ado.ExecuteCommand(sqlString);
|
|
//// 改变托盘绑定表状态:已入库 完成时间:当前时间
|
//sqlString = $"Update BllPalletBind set LocatNo = '{model.LocatNo}',Status = '2',CompleteTime=GETDATE() where PalletNo = '{model.PalletNo}' and ASNNo = '{model.ASNNo}';";
|
//Db.Ado.ExecuteCommand(sqlString);
|
|
// 改变入库明细表状态:若完成数量和数量相等:执行完成 不相等:正在执行;
|
//foreach (PalletBindVm bindModel in bindModels)
|
//{
|
// // 判断入库明细是否完成
|
// sqlString = $"select count(id) from BllArrivalNoticeDetail where isdel = '0' ";
|
// sqlString += $"and id = '{bindModel.ASNDetailNo}';";/*Qty = CompleteQty + {bindModel.Qty} and*/
|
// int detailNum = Db.Ado.GetInt(sqlString);
|
// if (detailNum > 0)
|
// {
|
// // 改变入库单明细状态和完成时间
|
// sqlString = $"Update BllArrivalNoticeDetail set Status = '2',CompleteTime=GETDATE() ";
|
// sqlString += $"where id = '{bindModel.ASNDetailNo}';";
|
// Db.Ado.ExecuteCommand(sqlString);
|
|
// // 判断入库单总表是否完成
|
// sqlString = $"select count(id) from BllArrivalNoticeDetail where isdel = '0' and Status != '2' ";
|
// sqlString += $"and ASNNo = '{bindModel.ASNNo}' and id !='{bindModel.ASNDetailNo}';";
|
// int asnNum = Db.Ado.GetInt(sqlString);
|
// if (detailNum <= 0)
|
// {
|
// // 改变入库单状态和完成时间 若入库明细表所有状态为执行完毕:执行完毕 否:正在执行;
|
// sqlString = $"Update BllArrivalNotice set CompleteQty = CompleteQty+{bindModel.Qty},Status = '2',CompleteTime=GETDATE() ";
|
// sqlString += $"where ASNNo = '{bindModel.ASNNo}';";
|
// Db.Ado.ExecuteCommand(sqlString);
|
// }
|
// }
|
|
// #region 库存总表
|
|
// // var stockModel = Db.Queryable<DataStock>()
|
// //.First(it => it.SkuNo == bindModel.SkuNo && it.LotNo == bindModel.LotNo
|
// // && it.Standard == bindModel.Standard && it.SupplierLot == bindModel.SupplierLot && it.IsDel == "0");
|
|
// //获取当前入库物料信息
|
// string str = string.Empty;
|
// str += $"select * from BllArrivalNoticeDetail where id in (select ASNDetailNo from BllBoxInfo where ASNNo = '{bindModel.ASNNo}' and PalletNo = '{bindModel.PalletNo}' and Status = '1');";
|
// //string sttr = "select * from BllArrivalNoticeDetail where id in (select ASNDetailNo from BllBoxInfo where ASNNo = 'ASN2023042400002' and PalletNo = 'T2300004' and Status = '1');";
|
// var noticeDetail = Db.Ado.SqlQuery<BllArrivalNoticeDetail>(str);
|
// // 判断当前物料库存表是否已存在
|
// str = $"select * from DataStock where SkuNo = '{noticeDetail[0].SkuNo}' and LotNo = '{noticeDetail[0].LotNo}' and Standard = '{noticeDetail[0].Standard}' and SkuName = '{noticeDetail[0].SkuName}' and IsDel = '0'";
|
// var stockModel = Db.Ado.SqlQuerySingle<DataStock>(str);
|
|
// if (stockModel == null || stockModel.Id == 0)
|
// {
|
// stockModel = new DataStock
|
// {
|
// LotNo = bindModel.LotNo,
|
// LotText = bindModel.LotText,
|
// SupplierLot = bindModel.SupplierLot,
|
// SkuNo = bindModel.SkuNo,
|
// SkuName = bindModel.SkuName,
|
// Qty = (int)bindModel.Qty,
|
// Standard = bindModel.Standard,
|
// CreateUser = (int)model.CreateUser
|
// };
|
// Db.Insertable<DataStock>(stockModel).ExecuteCommand();
|
// }
|
// else
|
// {
|
// sqlString = $"update DataStock set Qty = Qty + {bindModel.Qty}," +
|
// $"UpdateTime = GETDATE(),UpdateUser='{model.CreateUser}' where id = '{stockModel.Id}';";
|
// Db.Ado.ExecuteCommand(sqlString);
|
// }
|
// #endregion
|
|
// #region 库存明细表
|
// // 判断当前托盘是否已存在(拣货回库托盘)
|
// var detailModel = Db.Queryable<DataStockDetail>()
|
// .First(it => it.PalletNo == bindModel.PalletNo && it.LotNo == noticeDetail[0].LotNo && it.SkuNo == noticeDetail[0].SkuNo
|
// && it.Standard == noticeDetail[0].Standard && it.IsDel == "0");
|
// if (detailModel == null || detailModel.Id == 0)
|
// {
|
// // 获取可抽检数量
|
// sqlString = "select sum(qty) from BllBoxInfo where isdel = 0 and ";
|
// sqlString += $"BindNo = '{bindModel.Id}'";
|
// int inspectQty = Db.Ado.GetInt(sqlString);
|
|
// // 添加库存明细表
|
// detailModel = new DataStockDetail()
|
// {
|
// LotNo = noticeDetail[0].LotNo,
|
// LotText = noticeDetail[0].LotText,
|
// SupplierLot = noticeDetail[0].SupplierLot,
|
// SkuNo = noticeDetail[0].SkuNo,
|
// SkuName = noticeDetail[0].SkuName,
|
// Standard = noticeDetail[0].Standard,
|
// Qty = noticeDetail[0].Qty,
|
// LockQty = 0,
|
// FrozenQty = 0,
|
// InspectQty = inspectQty,
|
// ASNNo = bindModel.ASNNo,
|
// ASNDetailNo = (int)bindModel.ASNDetailNo,
|
// WareHouseNo = locatModel.WareHouseNo,
|
// RoadwayNo = locatModel.RoadwayNo,
|
// AreaNo = locatModel.AreaNo,
|
// LocatNo = model.LocatNo,
|
// PalletNo = model.PalletNo,
|
// PalletNo2 = bindModel.PalletNo2,
|
// PalletNo3 = bindModel.PalletNo3,
|
// CompleteTime = serverTime,
|
// ProductionTime = bindModel.ProductionTime,
|
// ExpirationTime = bindModel.ExpirationTime,
|
// Status = "0",
|
// InspectMark = bindModel.InspectMark,
|
// BitPalletMark = bindModel.BitPalletMark,
|
// InspectStatus = bindModel.InspectMark, // 组盘的时候就要默认设定好是否合格
|
// PackagNo = bindModel.PackagNo,
|
// IsBale = bindModel.IsBale,
|
// IsBelt = bindModel.IsBelt,
|
// CreateUser = (int)model.CreateUser
|
// };
|
|
// Db.Insertable<DataStockDetail>(detailModel).ExecuteCommand();
|
// }
|
// else
|
// {
|
// detailModel.LocatNo = model.LocatNo;
|
// detailModel.UpdateTime = serverTime;
|
// detailModel.UpdateUser = (int)model.CreateUser;
|
// // 变更储位地址
|
// Db.Updateable<DataStockDetail>(detailModel).UpdateColumns(it => new { it.LocatNo, it.UpdateTime, it.UpdateUser }).ExecuteCommand();
|
// }
|
// #endregion
|
|
|
//}
|
#endregion
|
|
|
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
|
//根据托盘号获取入库单号
|
public string GetASNNoByPalletNo(string palletNo)
|
{
|
try
|
{
|
//入库中
|
var aSNNoList = Db.Ado.SqlQuery<string>($"SELECT DISTINCT ASNNo from BllPalletBind where IsDel=0 and Status=0 and PalletNo='{palletNo}' ").ToList();
|
if (aSNNoList.Count <= 0)
|
{
|
//库外托盘或平库托盘
|
var dataStockList = Db.Ado.SqlQuery<string>($"select DISTINCT PalletNo from DataStockDetail where IsDel=0 and isnull(LocatNo,'') = '' and PalletNo='{palletNo}' ").ToList();
|
if (dataStockList.Count <= 0)
|
{
|
throw new Exception("托盘信息不存在或托盘在立库中!");
|
}
|
return "";
|
}
|
if (aSNNoList.Count > 1)
|
{
|
throw new Exception("同一个托盘号存在多个入库单,请检查!");
|
}
|
return aSNNoList[0];
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
|
/// <summary>
|
/// 验证储位地址(地码)是否可用
|
/// </summary>
|
/// <param name="locatNo">储位编码</param>
|
/// <returns></returns>
|
public string CheckLocatNo(string locatNo)
|
{
|
try
|
{
|
string strMsg = "";
|
var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == locatNo && w.Status == "0" && w.WareHouseNo == "W02");
|
if (storageLocat == null)
|
{
|
throw new Exception("-1:地码(储位信息)不存在或非空闲状态,请核查!");
|
}
|
|
return strMsg;
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
|
//根据箱码获取物料、批次、数量等信息
|
public PdaPalletNoCheckDto GetBoxInfoByBoxNo(string boxNo)
|
{
|
try
|
{
|
if (string.IsNullOrWhiteSpace(boxNo))
|
{
|
throw new Exception("箱码不能为空");
|
}
|
|
var info = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo)
|
.GroupBy(m => new { m.BoxNo, m.SkuNo, m.SkuName, m.LotNo }).Select(a => new PdaPalletNoCheckDto
|
{
|
BoxNo = a.BoxNo,
|
SkuNo = a.SkuNo,
|
SkuName = a.SkuName,
|
LotNo = a.LotNo,
|
Qty = SqlFunc.AggregateSum(a.Qty)
|
}).ToList();
|
if (info.Count > 1)
|
{
|
throw new Exception("当前箱码查询出多条物料或批次信息,请核实");
|
}
|
|
return info.FirstOrDefault();
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
//拼托入库
|
public void CompleteInStockLing(PdaLingAsnVm model, int userId)
|
{
|
try
|
{
|
if (string.IsNullOrWhiteSpace(model.AsnNo))
|
{
|
throw new Exception("-1:盘点单据不能为空!");
|
}
|
if (model.AsnDetailId == null || model.AsnDetailId == 0)
|
{
|
throw new Exception("-1:物料批次不能为空!");
|
}
|
if (string.IsNullOrWhiteSpace(model.PalletNo))
|
{
|
throw new Exception("-1:托盘条码不能为空!");
|
}
|
if (string.IsNullOrWhiteSpace(model.BoxNo))
|
{
|
throw new Exception("-1:箱码不能为空!");
|
}
|
//获取当前时间
|
DateTime serverTime = Db.Ado.GetDateTime("select GETDATE();");
|
|
Db.BeginTran();//开启事务
|
|
#region 箱码信息
|
//获取箱码信息
|
string boxstr = $"select * from BLLBoxInfo where IsDel = '0' and BoxNo = '{model.BoxNo}'";
|
List<BllBoxInfo> boxinfo = Db.Ado.SqlQuery<BllBoxInfo>(boxstr).ToList();
|
//验证箱码信息是否存在
|
if (boxinfo.Count <= 0)
|
{
|
throw new Exception("-1:箱码信息不存在,请核查!");
|
}
|
decimal bNum = 0;//数量
|
//验证箱码是否已绑定托盘
|
foreach (var item in boxinfo)
|
{
|
if (!string.IsNullOrEmpty(item.PalletNo))
|
{
|
throw new Exception("-1:该箱码已绑定其他托盘,请先解绑托盘!");
|
}
|
bNum += item.Qty;
|
}
|
if (bNum == boxinfo[0].FullQty)
|
{
|
throw new Exception("-1:该箱子不是零箱,不能入零箱库!");
|
}
|
#endregion
|
|
#region 单据信息
|
//获取入库单据总单
|
var isFinsh = true;
|
var arrival = new BllArrivalNotice();
|
arrival = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo);
|
//验证入库单总单是否关闭
|
if (arrival == null)
|
{
|
throw new Exception("-1:入库单总单为空,请核查!");
|
}
|
//判断入库单总单是否为已关闭
|
if (arrival.Status == "3")
|
{
|
throw new Exception("-1:入库单总单已关闭,请核查!");
|
}
|
// 验证入库单明细是否存在
|
var arrivalnotice = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId && m.ASNNo == model.AsnNo);
|
if (arrivalnotice == null)
|
{
|
throw new Exception("-1:当前物料及批次与单据无关联,请核实!");
|
}
|
arrivalnotice.FactQty += bNum;
|
arrivalnotice.CompleteQty += bNum;
|
//判断入库数量增加后是否大于等于单据数量
|
if (arrivalnotice.CompleteQty >= arrivalnotice.Qty)
|
{
|
arrivalnotice.Status = "2";
|
arrivalnotice.CompleteTime = serverTime;
|
}
|
else
|
{
|
arrivalnotice.Status = "1";
|
|
isFinsh = false;
|
}
|
arrivalnotice.UpdateUser = userId;
|
arrivalnotice.UpdateTime = serverTime;
|
Db.Updateable(arrivalnotice).ExecuteCommand();
|
|
var arrivalnoticeList = Db.Queryable<BllArrivalNoticeDetail>().Where(m => m.IsDel == "0" && m.ASNNo == model.AsnNo).ToList();
|
foreach (var item in arrivalnoticeList)
|
{
|
if (item.CompleteQty < item.Qty)
|
{
|
isFinsh = false;
|
break;
|
}
|
}
|
if (isFinsh)
|
{
|
//修改入库单总单信息
|
arrival.Status = "2";
|
arrival.CompleteTime = serverTime;
|
arrival.UpdateUser = userId;
|
arrival.UpdateTime = serverTime;
|
Db.Updateable(arrival).ExecuteCommand();
|
}
|
else
|
{
|
//判断总单状态是否为正在执行
|
if (arrival.Status == "0")
|
{
|
//修改入库单总单信息
|
arrival.Status = "1";
|
arrival.UpdateUser = userId;
|
arrival.UpdateTime = serverTime;
|
Db.Updateable(arrival).ExecuteCommand();
|
}
|
}
|
#endregion
|
|
#region 托盘信息
|
//托盘是否存在
|
var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
|
if (pallet == null)
|
{
|
throw new Exception("-1:未查询到托盘信息,请核实!");
|
}
|
if (pallet.Status == "0")
|
{
|
// 更改托盘使用状态
|
var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
Db.Ado.ExecuteCommand(sqlStr);
|
}
|
|
var palletStockDetail = Db.Ado.SqlQuery<DataStock>($"select * from DataStockDetail where PalletNo='{model.PalletNo}' and ISNULL(LocatNo,'')<>''").ToList();
|
if (palletStockDetail != null && palletStockDetail.Count > 0)
|
{
|
throw new Exception("-1:托盘在立库中不允许拼托,请核查!");
|
}
|
#endregion
|
|
#region 物料信息
|
var sku = Db.Queryable<SysMaterials>().First(s => s.SkuNo == arrivalnotice.SkuNo && s.IsDel == "0" && s.SkuName == arrivalnotice.SkuName);
|
//判断物料信息是否为空
|
if (sku == null)
|
{
|
throw new Exception("-1:物料信息为空,请核查!");
|
}
|
#endregion
|
|
#region 绑定托盘
|
var bindId = 0;
|
var bind = new BllPalletBind
|
{
|
ASNNo = model.AsnNo,
|
ASNDetailNo = (int)model.AsnDetailId,
|
PalletNo = model.PalletNo,
|
PalletNo2 = "",
|
PalletNo3 = "",
|
Qty = bNum,
|
FullQty = 0,//整托数量,托盘上可能放的是不同包装的箱子
|
Status = "2",
|
CompleteTime = serverTime,
|
Type = "0",
|
LotNo = arrivalnotice.LotNo,
|
LotText = arrivalnotice.LotText,
|
SupplierLot = "",
|
InspectMark = "0",
|
BitPalletMark = "1",
|
IsBale = arrivalnotice.IsBale,
|
IsBelt = arrivalnotice.IsBelt,
|
CreateUser = userId
|
};
|
// 插入托盘绑定表
|
bindId = Db.Insertable(bind).ExecuteReturnIdentity();
|
#endregion
|
|
#region 库存总表
|
// 判断当前物料库存表是否已存在
|
string str = $"select * from DataStock where SkuNo = '{arrivalnotice.SkuNo}' and LotNo = '{arrivalnotice.LotNo}' and Standard = '{arrivalnotice.Standard}' and SkuName = '{arrivalnotice.SkuName}' and IsDel = '0'";
|
var stockModel = Db.Ado.SqlQuerySingle<DataStock>(str);
|
|
if (stockModel == null || stockModel.Id == 0)
|
{
|
stockModel = new DataStock
|
{
|
LotNo = arrivalnotice.LotNo,
|
LotText = arrivalnotice.LotText,
|
SupplierLot = arrivalnotice.SupplierLot,
|
SkuNo = arrivalnotice.SkuNo,
|
SkuName = arrivalnotice.SkuName,
|
Qty = bNum,
|
Standard = arrivalnotice.Standard,
|
CreateUser = userId,
|
CreateTime = serverTime
|
};
|
Db.Insertable<DataStock>(stockModel).ExecuteCommand();
|
}
|
else
|
{
|
string sqlString = $"update DataStock set Qty = Qty + {bNum}," +
|
$"UpdateTime = GETDATE(),UpdateUser='{userId}' where id = '{stockModel.Id}';";
|
Db.Ado.ExecuteCommand(sqlString);
|
}
|
#endregion
|
|
#region 库存明细表
|
var boxinfoItem = boxinfo.First();
|
var detailModel = Db.Queryable<DataStockDetail>().First(it => it.PalletNo == model.PalletNo && it.LotNo == arrivalnotice.LotNo
|
&& it.SkuNo == arrivalnotice.SkuNo && it.Standard == arrivalnotice.Standard && it.IsDel == "0");
|
var stId = 0;
|
if (detailModel == null || detailModel.Id == 0)
|
{
|
// 添加库存明细表
|
detailModel = new DataStockDetail()
|
{
|
LotNo = arrivalnotice.LotNo,
|
LotText = arrivalnotice.LotText,
|
SupplierLot = arrivalnotice.SupplierLot,
|
SkuNo = arrivalnotice.SkuNo,
|
SkuName = arrivalnotice.SkuName,
|
Standard = arrivalnotice.Standard,
|
Qty = bNum,
|
LockQty = 0,
|
FrozenQty = 0,
|
InspectQty = bNum,
|
ASNNo = arrivalnotice.ASNNo,
|
ASNDetailNo = (int)bind.ASNDetailNo,
|
WareHouseNo = "W02",
|
RoadwayNo = "",
|
AreaNo = "",
|
LocatNo = "",
|
PalletNo = model.PalletNo,
|
PalletNo2 = "",
|
PalletNo3 = "",
|
CompleteTime = serverTime,
|
ProductionTime = boxinfoItem.ProductionTime,
|
ExpirationTime = boxinfoItem.ProductionTime.Value.AddDays((int)sku.Warranty),//过期时间
|
Status = "0",
|
InspectMark = boxinfoItem.InspectMark,
|
BitPalletMark = "1",
|
InspectStatus = sku.IsInspect,// 组盘的时候就要默认设定好是否合格
|
PackagNo = sku.PackagNo,
|
IsBale = arrivalnotice.IsBale,
|
IsBelt = arrivalnotice.IsBelt,
|
CreateUser = userId,
|
CreateTime = serverTime
|
};
|
stId = Db.Insertable<DataStockDetail>(detailModel).ExecuteReturnIdentity();
|
}
|
else
|
{
|
stId = detailModel.Id;
|
detailModel.Qty += bNum;
|
detailModel.InspectQty += bNum;
|
detailModel.LocatNo = "";
|
detailModel.UpdateTime = serverTime;
|
detailModel.UpdateUser = userId;
|
// 变更储位地址
|
Db.Updateable<DataStockDetail>(detailModel).UpdateColumns(it => new { it.Qty, it.InspectQty, it.LocatNo, it.UpdateTime, it.UpdateUser }).ExecuteCommand();
|
}
|
#endregion
|
|
#region 库存箱支明细表
|
var comTime = DateTime.Now;
|
foreach (var item in boxinfo)
|
{
|
// 维护箱支关系表
|
string sqlString = $"Update BLLBoxInfo set ASNNo='{model.AsnNo}',ASNDetailNo='{model.AsnDetailId}',BindNo='{bindId}',PalletNo='{model.PalletNo}',Status='2' where IsDel = '0' and BoxNo = '{model.BoxNo}'";
|
Db.Ado.ExecuteCommand(sqlString);
|
// 插入新组的箱支信息
|
var info = new DataBoxInfo()
|
{
|
StockDetailId = stId,
|
BindNo = bindId,
|
BoxNo = item.BoxNo,
|
BoxNo2 = item.BoxNo2,
|
BoxNo3 = item.BoxNo3,
|
PalletNo = model.PalletNo,
|
PalletNo2 = item.PalletNo2,
|
PalletNo3 = item.PalletNo3,
|
Qty = item.Qty,
|
FullQty = item.FullQty,
|
Status = "2",
|
LotNo = item.LotNo,
|
LotText = item.LotText,
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = sku.Standard,
|
ProductionTime = item.ProductionTime,
|
SupplierLot = item.SupplierLot,
|
InspectMark = item.InspectMark,
|
BitBoxMark = item.BitBoxMark,
|
InspectStatus = item.InspectStatus,
|
|
IsDel = "0",
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
Db.Insertable(info).ExecuteCommand();
|
}
|
#endregion
|
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "零箱入库", model.PalletNo, "完成", $"在PDA上完成单据号为:{model.AsnNo}的托盘码为:{model.PalletNo}的零箱入库操作", userId);
|
|
Db.CommitTran();
|
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();//事务回滚
|
throw ex;
|
}
|
}
|
|
#region 产品组托
|
|
public void GetBoxInfoByFuMa(string boxNo,string url,string fuMaTokenUrl,string levelType)
|
{
|
try
|
{
|
if (levelType == "0")
|
{
|
throw new Exception("未找到该物料的箱包装级别");
|
}
|
if (levelType == "3")
|
{
|
throw new Exception("未调试该级别包装!");
|
}
|
var list = new List<BllBoxInfo>();
|
|
var data = new { BoxNo = boxNo };
|
var jsonData = JsonConvert.SerializeObject(data);
|
|
#region 测试版本
|
|
////读取json文件,添加数据
|
//var ss = AppDomain.CurrentDomain.BaseDirectory;
|
//string filePath = Path.Combine(ss, "CreateBoxInfo.json");
|
//string json = File.ReadAllText(filePath);
|
//var person = JsonConvert.DeserializeObject<List<BllBoxInfo>>(json);
|
|
var comTime = DateTime.Now;
|
////添加箱码信息表中 //暂时这些写--添加数据,后续需要和赋码系统对接后 根据明确返回的数据格式更改
|
//foreach (var item in person)
|
//{
|
// if (item.BoxNo!= boxNo)
|
// {
|
// continue;
|
// }
|
|
// var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel =="0" && m.SkuNo == item.SkuNo);
|
// if (sku == null)
|
// {
|
// continue;
|
// }
|
// var boxInfo = new BllBoxInfo()
|
// {
|
// ASNNo = "",
|
// //ASNDetailNo = 0,
|
// OrderCode = "",
|
// //BindNo = 0,
|
// BoxNo = item.BoxNo,
|
// BoxNo2 = item.BoxNo2,
|
// BoxNo3 = item.BoxNo3,
|
// PalletNo = "",
|
// Qty = item.Qty,
|
// FullQty = item.FullQty,
|
// Status = "0",
|
// SkuNo = item.SkuNo,
|
// SkuName = sku.SkuName,
|
// LotNo = item.LotNo,
|
// LotText = item.LotText,
|
// SupplierLot = item.SupplierLot,
|
// ProductionTime = item.ProductionTime,
|
// ExpirationTime = item.ExpirationTime,
|
// //CompleteTime = comTime,
|
// InspectMark = item.InspectMark,
|
// BitBoxMark = item.BitBoxMark,
|
// InspectStatus = item.InspectStatus,
|
// Origin = "赋码",
|
// Standard = item.Standard,
|
// PackageStandard = item.PackageStandard,
|
// StoreTime = item.StoreTime,
|
// QtyOrd = item.QtyOrd,
|
// QtyCount = item.QtyCount,
|
// CreateUser = 0,
|
// CreateTime = comTime,
|
// };
|
// list.Add(boxInfo);
|
//}
|
//Db.Insertable(list).ExecuteCommand();
|
|
#endregion
|
|
#region 正式版本
|
var token = new Token().GetFuMaToken(fuMaTokenUrl);
|
var getParentVal = levelType == "1" ? "true" : "false";
|
var getChildrenVal = levelType == "2" ? "true" : "false";
|
Dictionary<string, string> paramDic = new Dictionary<string, string>
|
{
|
{ "Token", token }, //分配的令牌(变量)
|
{ "Barcode", boxNo },//要查询的条码
|
{ "getParent", getParentVal },//是否查询父码
|
{ "getChildren", getChildrenVal } //是否查询子码 aaa
|
};
|
|
//程序正式发布后放开
|
var time1 = DateTime.Now;//发送时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
var response = HttpHelper.DoGet(url, "赋码", "获取箱码信息", paramDic);
|
var time2 = DateTime.Now;//返回时间 .ToString("yyyy-MM-dd HH:mm:ss")
|
|
//解析返回数据
|
var fuMaModel = JsonConvert.DeserializeObject<FuMaGetBoxModel>(response);
|
if (fuMaModel.IsSuccess)
|
{
|
//赋码返回信息成功状态
|
if (fuMaModel.Product == null || fuMaModel.Barcodes.Count == 0)
|
{
|
throw new Exception("产品信息或箱支信息为空");
|
}
|
|
if (levelType == "1")
|
{
|
if (fuMaModel.Barcodes.First().Barcode != boxNo)
|
{
|
throw new Exception("获取信息不一致");
|
}
|
|
var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.MaterialNum);
|
if (sku == null)
|
{
|
throw new Exception("未查询到箱码中和赋码提供的物料信息一致的数据");
|
}
|
var boxInfo = new BllBoxInfo()
|
{
|
ASNNo = "",
|
//ASNDetailNo = 0,
|
OrderCode = "",
|
//BindNo = 0,
|
BoxNo = fuMaModel.Barcodes.First().Barcode,
|
PalletNo = "",
|
Qty = fuMaModel.Barcodes.First().BoxItemQty,
|
FullQty = fuMaModel.BoxItemQty,
|
Status = "0",
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
LotNo = fuMaModel.Barcodes.First().BatchNo,
|
//LotText = "",
|
//SupplierLot = item.SupplierLot,
|
ProductionTime = DateTime.Parse(fuMaModel.Barcodes.First().ProductionDate),
|
ExpirationTime = DateTime.Parse(fuMaModel.Barcodes.First().ExpirationDate),
|
//CompleteTime = comTime,
|
InspectMark = "0",
|
BitBoxMark = fuMaModel.Barcodes.First().Status == "零箱" ? "1" : "0",
|
InspectStatus = "0",
|
Origin = "赋码",
|
Standard = fuMaModel.Product.Spec,
|
PackageStandard = fuMaModel.Product.PackageSpec,
|
//StoreTime = item.StoreTime,
|
//QtyOrd = item.QtyOrd,
|
//QtyCount = item.QtyCount,
|
CreateUser = 0,
|
CreateTime = comTime,
|
};
|
list.Add(boxInfo);
|
}
|
else
|
{
|
foreach (var item in fuMaModel.Barcodes)
|
{
|
if (item.Barcode == boxNo)
|
{
|
continue; //获取支码时第一个码为父码
|
}
|
|
var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == fuMaModel.MaterialNum);
|
if (sku == null)
|
{
|
throw new Exception("未查询到箱码中和赋码提供的物料信息一致的数据");
|
}
|
var boxInfo = new BllBoxInfo()
|
{
|
ASNNo = "",
|
//ASNDetailNo = 0,
|
OrderCode = "",
|
//BindNo = 0,
|
BoxNo = item.ParentBarcode,
|
BoxNo3 = item.Barcode,
|
PalletNo = "",
|
Qty = item.MinLevelCount,
|
FullQty = fuMaModel.BoxItemQty,
|
Status = "0",
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
LotNo = item.BatchNo,
|
//LotText = "",
|
//SupplierLot = item.SupplierLot,
|
ProductionTime = DateTime.Parse(item.ProductionDate),
|
ExpirationTime = DateTime.Parse(item.ExpirationDate),
|
//CompleteTime = comTime,
|
InspectMark = "0",
|
BitBoxMark = item.Status == "零箱" ? "1" : "0",
|
InspectStatus = "0",
|
Origin = "赋码",
|
Standard = fuMaModel.Product.AuthorizedNo,
|
PackageStandard = fuMaModel.Product.PackageSpec,
|
//StoreTime = item.StoreTime,
|
//QtyOrd = item.QtyOrd,
|
QtyCount = (int)fuMaModel.BoxItemQty,
|
CreateUser = 0,
|
CreateTime = comTime,
|
};
|
list.Add(boxInfo);
|
}
|
}
|
|
Db.Insertable(list).ExecuteCommand();
|
}
|
else
|
{
|
//赋码返回信息失败状态
|
throw new Exception($"赋码系统返回状态异常:{fuMaModel.Message}");
|
}
|
#endregion
|
|
}
|
catch (Exception e)
|
{
|
throw new Exception(e.Message);
|
}
|
}
|
|
/// <summary>
|
/// 根据箱码获取标签箱码信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public List<BoxInfoDto> GetBindBoxInfos(BoxInfoVm model, string url, string fuMaTokenUrl)
|
{
|
try
|
{
|
if (string.IsNullOrEmpty(model.BoxNo))
|
{
|
throw new Exception("请扫描外箱条码!");
|
}
|
if (!string.IsNullOrWhiteSpace(model.ASNNo))
|
{
|
var detailId = model.ASNNo.Split("-")[0];
|
var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m=>m.IsDel =="0" && m.Id == int.Parse(detailId));
|
if (detail != null)
|
{
|
var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo);
|
if (asnData != null && (asnData.Type == "0" || asnData.Type == "3"))
|
{
|
var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo == model.BoxNo);
|
if (count == 0)
|
{
|
//获取物料包装级别
|
string level = "0";
|
var levelType = Db.Queryable<SysPackag>().First(w => w.IsDel == "0" && w.PackagNo == detail.SkuNo);
|
if (levelType.L1Name == "箱")
|
{
|
level = "1";
|
}
|
if (levelType.L2Name == "箱")
|
{
|
level = "2";
|
}
|
if (levelType.L3Name == "箱")
|
{
|
level = "3";
|
}
|
GetBoxInfoByFuMa(model.BoxNo, url, fuMaTokenUrl, level); //从赋码系统获取箱码信息
|
}
|
}
|
}
|
|
|
}
|
string sqlString = $@"SELECT
|
ASNNo,
|
BoxNo,
|
SkuNo,
|
SkuName,
|
LotNo,
|
SUM(Qty) as Qty
|
FROM BllBoxInfo
|
WHERE IsDel = '0'
|
AND Status='0'
|
AND BoxNo = '{model.BoxNo}'
|
GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo; ";
|
var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
|
if (models.Count == 0)
|
{
|
throw new Exception("箱码信息不存在!");
|
}
|
return models;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 根据箱码获取标签最小追溯码信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public List<BoxInfoDto> GetBindBoxInfo2s(BoxInfoVm model, string url, string fuMaTokenUrl)
|
{
|
try
|
{
|
if (string.IsNullOrEmpty(model.BoxNo3))
|
{
|
throw new Exception("请扫描最小追溯条码!");
|
}
|
if (!string.IsNullOrWhiteSpace(model.ASNNo))
|
{
|
var detailId = model.ASNNo.Split("-")[0];
|
var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == int.Parse(detailId));
|
if (detail != null)
|
{
|
var asnData = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo);
|
if (asnData != null)
|
{
|
if (asnData.Type != "3")
|
{
|
throw new Exception("单据请选择退货入库单!");
|
}
|
var count = Db.Queryable<BllBoxInfo>().Count(m => m.IsDel == "0" && m.Status == "0" && m.BoxNo3 == model.BoxNo3);
|
if (count == 0)
|
{
|
//优先WMS查找
|
|
var comDetail = Db.Queryable<BllBoxInfo>().First(m=>m.BoxNo3 == model.BoxNo3 && m.IsDel =="0" && m.Status =="2");
|
if (comDetail!= null)
|
{
|
var boxInfo = new BllBoxInfo()
|
{
|
ASNNo = "",
|
//ASNDetailNo = 0,
|
OrderCode = "",
|
//BindNo = 0,
|
BoxNo = comDetail.BoxNo,
|
BoxNo2 = comDetail.BoxNo2,
|
BoxNo3 = comDetail.BoxNo3,
|
PalletNo = "",
|
Qty = comDetail.Qty,
|
FullQty = comDetail.FullQty,
|
Status = "0",
|
SkuNo = comDetail.SkuNo,
|
SkuName = comDetail.SkuName,
|
LotNo = comDetail.LotNo,
|
LotText = comDetail.LotText,
|
SupplierLot = comDetail.SupplierLot,
|
ProductionTime = comDetail.ProductionTime,
|
ExpirationTime = comDetail.ExpirationTime,
|
//CompleteTime = comTime,
|
InspectMark = comDetail.InspectMark,
|
BitBoxMark = "1",
|
InspectStatus = comDetail.InspectStatus,
|
Origin = "赋码",
|
Standard = comDetail.Standard,
|
PackageStandard = comDetail.PackageStandard,
|
StoreTime = comDetail.StoreTime,
|
QtyOrd = comDetail.QtyOrd,
|
QtyCount = comDetail.QtyCount,
|
CreateUser = 0,
|
CreateTime = DateTime.Now,
|
};
|
Db.Insertable(boxInfo).ExecuteCommand();
|
}
|
else
|
{
|
GetBoxInfoByFuMa(model.BoxNo3, url, fuMaTokenUrl,"3"); //从赋码系统获取箱码信息
|
}
|
}
|
}
|
}
|
|
|
}
|
string sqlString = $@"SELECT
|
ASNNo,
|
BoxNo,
|
SkuNo,
|
SkuName,
|
LotNo,
|
SUM(Qty) as Qty
|
FROM BllBoxInfo
|
WHERE IsDel = '0'
|
AND Status='0'
|
AND BoxNo3 = '{model.BoxNo3}'
|
GROUP BY ASNNo,BoxNo,SkuNo,SkuName,LotNo; ";
|
var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString);
|
if (models.Count == 0)
|
{
|
throw new Exception("最小追溯码信息不存在!");
|
}
|
return models;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
// 根据单据号获取单据明细列表
|
public List<ArrivalNoticeDetailDto> GetBindArrivalNoticeDetails(ArrivalNoticeVm model)
|
{
|
string sqlString = string.Empty;
|
try
|
{
|
sqlString = $"select * from BllArrivalNoticeDetail where ASNNo = '{model.ASNNo}' and isdel='0' order by CreateTime;";
|
var modelList = Db.Ado.SqlQuery<ArrivalNoticeDetailDto>(sqlString);
|
List<ArrivalNoticeDetailDto> noticeList = new List<ArrivalNoticeDetailDto>();
|
foreach (var item in modelList)
|
{
|
if (string.IsNullOrEmpty(item.LotNo))
|
{
|
noticeList.Add(item);
|
}
|
else
|
{
|
string[] LotNoList = item.LotNo.Split(';');
|
foreach (var item2 in LotNoList)
|
{
|
ArrivalNoticeDetailDto entry = new ArrivalNoticeDetailDto()
|
{
|
Id = item.Id,
|
ASNNo = item.ASNNo,
|
CompleteQty = item.CompleteQty,
|
CompleteTime = item.CompleteTime,
|
CreateTime = item.CreateTime,
|
Qty = item.Qty,
|
FactQty = item.FactQty,
|
LotNo = item2,
|
Money = item.Money,
|
PackagNo = item.PackagNo,
|
PackagName = item.PackagName,
|
Status = item.Status,
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
};
|
|
|
noticeList.Add(entry);
|
}
|
}
|
}
|
List<ArrivalNoticeDetailDto> list = new List<ArrivalNoticeDetailDto>();
|
foreach (var item in noticeList)
|
{
|
string str = BySkuNoGetPackInfo(item.SkuNo);
|
if (str == "存在")
|
{
|
list.Add(item);
|
}
|
}
|
|
return list;
|
}
|
catch (Exception ex)
|
{
|
throw ex;
|
}
|
}
|
|
//根据物料获取是否存在包装信息
|
public string BySkuNoGetPackInfo(string skuNo)
|
{
|
try
|
{
|
//获取物料信息
|
var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == skuNo);
|
//判断物料信息是否为空
|
if (!string.IsNullOrWhiteSpace(sku.PackagNo))
|
{
|
return "存在";
|
}
|
else
|
{
|
return "不存在";
|
}
|
}
|
catch (Exception ex)
|
{
|
return ex.Message;
|
}
|
}
|
|
/// <summary>
|
/// 绑定托盘
|
/// </summary>
|
/// <param name="model"></param>
|
/// <param name="userId"></param>
|
/// <param name="origin"></param>
|
public void BindPallet(PdaPalletBindVm model, int userId, string origin)
|
{
|
try
|
{
|
#region 判断
|
|
//0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料入库 5:其它入库 6:代储入库 7:寄存入库
|
var TypeLot = "1, 2, 5, 6, 7";
|
|
if (string.IsNullOrEmpty(model.AsnNo))
|
{
|
throw new Exception("-1:物料明细不可为空!");
|
}
|
//if (model.AsnDetailId == null || model.AsnDetailId == 0)
|
//{
|
// throw new Exception("-1:物料明细不可为空!");
|
//}
|
if (string.IsNullOrEmpty(model.PalletNo))
|
{
|
throw new Exception("-1:托盘号不可为空!");
|
}
|
var detailId = model.AsnNo.Split("-");
|
model.AsnDetailId = int.Parse(detailId[0]);
|
// 验证入库单明细是否存在
|
var detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailId);
|
if (detail == null)
|
{
|
throw new Exception("-1:当前物料未查询到单据,请核实!");
|
}
|
model.AsnNo = detail.ASNNo;
|
//根据单据号获取入库单总单
|
var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == detail.ASNNo);
|
if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2")
|
{
|
throw new Exception("-1:该单据已关单!");
|
}
|
if (string.IsNullOrEmpty(model.LotNo))
|
{
|
//判断是否为不限制批次单据
|
if (!TypeLot.Contains(notice.Type))
|
{
|
throw new Exception("-1:物料批次不可为空!");
|
}
|
|
}
|
else
|
{
|
//从物料名称-批次中取出批次
|
var indexOfDash = model.LotNo.Split("-");
|
var len = indexOfDash.Length;
|
if (len == 3)
|
{
|
model.LotNo =indexOfDash[len-1];
|
}
|
else
|
{
|
model.LotNo = "";
|
}
|
}
|
//判断物料数量是否为0 为0判断箱码信息 不为0继续
|
if (model.TableType == 0)
|
{
|
if (notice.Type != "3")
|
{
|
if (string.IsNullOrEmpty(model.BoxNo))
|
{
|
throw new Exception("-1:箱码信息不可为空!");
|
}
|
if (model.IsContinue == "1")
|
{
|
if (string.IsNullOrWhiteSpace(model.TailBoxNo))
|
{
|
throw new Exception("-1:开启连续组托时,尾箱码信息不可为空!");
|
}
|
|
}
|
}
|
else
|
{
|
if (string.IsNullOrEmpty(model.BoxNo01))
|
{
|
throw new Exception("-1:追溯码信息不可为空!");
|
}
|
if (model.IsContinue == "1")
|
{
|
throw new Exception("-1:追溯码不可连续组托!");
|
}
|
}
|
|
|
|
}
|
int isTextTable = model.TableType;
|
int isDeposit = 0;
|
//判断总单单据是否为寄存单据
|
if (notice.Type == "7")
|
{
|
isDeposit = 1;
|
}
|
if (isDeposit == 1)
|
{
|
//判断总单备注是否为空
|
if (!string.IsNullOrWhiteSpace(notice.Demo))
|
{
|
//分割总单备注及托盘备注
|
var noticeDemo = notice.Demo.Split('、'); //总单备注
|
var palletDemo = model.Demo.Split('、'); //托盘备注
|
|
//循环托盘备注
|
foreach (var itemPallet in palletDemo)
|
{
|
int isDemo = 0;
|
//循环总单备注
|
foreach (var itemNotice in noticeDemo)
|
{
|
//判断是否有相同备注
|
if (itemPallet == itemNotice)
|
{
|
isDemo = 1;
|
break;
|
}
|
}
|
if (isDemo == 0)
|
{
|
throw new Exception("-1:总单备注与托盘备注不符,请核实后重新绑定!");
|
}
|
}
|
}
|
else if (string.IsNullOrWhiteSpace(notice.Demo))
|
{
|
//判断托盘备注是否为空
|
if (!string.IsNullOrWhiteSpace(model.Demo))
|
{
|
throw new Exception("-1:请添加总单备注后输入托盘备注!");
|
}
|
}
|
}
|
|
|
#endregion
|
|
Db.BeginTran();
|
|
//托盘是否存在
|
var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
|
if (pallet == null)
|
{
|
throw new Exception("未查询到托盘信息,请核实!");
|
}
|
//判断托盘是否在库外
|
var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo);
|
if (stockDetail != null)// && !string.IsNullOrEmpty(stockDetail.WareHouseNo)
|
{
|
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;//托盘物品数量
|
var bNum = 0;//箱码物品数量
|
|
//判断是否为寄存物料
|
if (isDeposit == 0 && isTextTable == 0)
|
{
|
if (pack == null)
|
{
|
throw new Exception("-1:获取物料包装失败,请核实!");
|
}
|
if (pack.L5Num.HasValue)
|
{
|
pNum = (int)pack.L5Num;
|
bNum = (int)pack.L4Num;
|
}
|
else if (pack.L4Num.HasValue)
|
{
|
pNum = (int)pack.L4Num;
|
bNum = (int)pack.L3Num;
|
}
|
else if (pack.L3Num.HasValue)
|
{
|
pNum = (int)pack.L3Num;
|
bNum = (int)pack.L2Num;
|
}
|
else if (pack.L2Num.HasValue)
|
{
|
pNum = (int)pack.L2Num;
|
bNum = (int)pack.L1Num;
|
}
|
else if (pack.L1Num.HasValue)
|
{
|
pNum = (int)pack.L1Num;
|
bNum = (int)pack.L1Num;
|
}
|
if (pNum == 0 || bNum == 0)
|
{
|
throw new Exception($"绑定失败,{detail.SkuNo}物品包装未找到!");
|
}
|
}
|
#endregion
|
|
#region 验证是否允许立库同托盘不同物料入库或同托盘同物料不同批次入库
|
var palletBind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNNo == model.AsnNo && m.PalletNo == model.PalletNo && m.ASNDetailNo != model.AsnDetailId);
|
if (palletBind != null)
|
{
|
var box = Db.Queryable<BllBoxInfo>().First(m => m.IsDel == "0" && m.BindNo == palletBind.Id && m.BitBoxMark == "0");
|
if (box != null && (box.SkuNo != detail.SkuNo || box.LotNo != detail.LotNo))
|
{
|
var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun045");
|
if (funSetting == null || funSetting.IsEnable == "OFF")
|
{
|
throw new Exception($"不允许立库同托盘不同物料入库或同托盘不同批次入库!");
|
}
|
}
|
}
|
#endregion
|
var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == model.AsnDetailId && m.PalletNo == model.PalletNo && m.Status != "2");
|
var bindId = 0;
|
if (bind == null)
|
{
|
|
DateTime proTime;
|
DateTime expTime;
|
DateTime sortTime;
|
var bl1 = DateTime.TryParse(detail.Lot1, out proTime);
|
var bl2 = DateTime.TryParse(detail.Lot2, out expTime);
|
|
if (!bl1 && !string.IsNullOrWhiteSpace(detail.Lot1))
|
{
|
throw new Exception("生产日期转换失败");
|
}
|
|
if (!bl2 && !string.IsNullOrWhiteSpace(detail.Lot2))
|
{
|
throw new Exception("有效期转换失败");
|
}
|
bind = new BllPalletBind
|
{
|
ASNNo = model.AsnNo,
|
ASNDetailNo = (int)model.AsnDetailId,
|
PalletNo = model.PalletNo,
|
PalletNo2 = "",
|
PalletNo3 = "",
|
Qty = model.SkuQty,
|
FullQty = pNum,
|
Status = "0",
|
Type = "0",
|
LotNo = model.LotNo,
|
LotText = detail.LotText,
|
SupplierLot = detail.SupplierLot,
|
InspectMark = "0",
|
BitPalletMark = "1",
|
IsBale = detail.IsBale,
|
IsBelt = detail.IsBelt,
|
CreateUser = userId,
|
Demo = model.Demo,
|
|
};
|
|
if (bl1)
|
{
|
bind.ProductionTime = proTime;
|
}
|
if (bl2)
|
{
|
bind.ExpirationTime = expTime;
|
}
|
//if (model.TableType == 0 && isDeposit == 0 && isTextTable == 0) 不太理解这段代码的含义
|
//{
|
// throw new Exception($"绑定失败,{model.PalletNo}托盘绑定数量大于该物品托盘包装数量!");
|
//}
|
// 插入托盘绑定表
|
bindId = Db.Insertable(bind).ExecuteReturnIdentity();
|
}
|
else
|
{
|
if (bind.Status != "0")
|
{
|
throw new Exception("-1:当前托盘正在执行中,绑定失败,请核实!");
|
}
|
bindId = bind.Id;
|
bind.Qty += model.SkuQty;
|
}
|
|
#region 箱码信息
|
var msgStr = $"箱号为{model.BoxNo}";
|
var boxInfoList = new List<BllBoxInfo>();
|
if (model.SkuQty == 0)
|
{
|
if (notice.Type == "3")
|
{
|
//首箱
|
var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo3 == model.BoxNo01 && m.Status == "0").ToList();
|
if (boxInfo.Count == 0)
|
{
|
throw new Exception("-1:箱码信息不存在!");
|
}
|
boxInfoList.AddRange(boxInfo);
|
}
|
else
|
{
|
//首箱
|
var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.BoxNo && m.Status == "0").ToList();
|
if (boxInfo.Count == 0)
|
{
|
throw new Exception("-1:箱码信息不存在!");
|
}
|
boxInfoList.AddRange(boxInfo);
|
//是否连续组托
|
if (model.IsContinue == "1")
|
{
|
//尾箱
|
var boxInfo2 = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == model.TailBoxNo && m.Status == "0").ToList();
|
if (boxInfo2.Count == 0)
|
{
|
throw new Exception("-1:尾箱码信息不存在!");
|
}
|
boxInfoList.AddRange(boxInfo2);
|
var sql = $"select * from BllBoxInfo where IsDel = '0' and Status = '0' and boxNo>'{model.BoxNo}' and boxNo<'{model.TailBoxNo}'; ";
|
var list = Db.Ado.SqlQuery<BllBoxInfo>(sql);
|
boxInfoList.AddRange(list);
|
msgStr += $"尾箱号为{model.TailBoxNo}";
|
}
|
}
|
}
|
#endregion
|
|
// 更改箱支关系表
|
decimal factQty = 0.00m;//托盘总数量
|
//成品组托
|
if (isTextTable == 0)
|
{
|
var boxGroup = boxInfoList.GroupBy(m => m.BoxNo).ToList();
|
foreach (var g in boxGroup)
|
{
|
decimal boxFullQty = 0;//箱内总数量
|
foreach (var box in g)
|
{
|
if (box.BindNo != null && box.BindNo != 0)
|
{
|
continue;
|
}
|
//箱内物料批次与单据明细不符合
|
if (box.SkuNo != detail.SkuNo || box.LotNo != model.LotNo)
|
{
|
throw new Exception($"-1:{box.BoxNo}箱内物料及批次与单据不一致,请核实!");
|
}
|
|
box.ASNNo = model.AsnNo;
|
box.ASNDetailNo = model.AsnDetailId;
|
box.BindNo = bindId;
|
box.PalletNo = model.PalletNo;
|
box.Status = "1";
|
box.CompleteTime = DateTime.Now;
|
box.UpdateTime = DateTime.Now;
|
box.UpdateUser = userId;
|
|
factQty += box.Qty;
|
boxFullQty += box.Qty;
|
}
|
//if (boxFullQty > bNum)
|
//{
|
// throw new Exception($"绑定失败,{g.Key}箱码绑定数量大于该物品包装数量!");
|
//}
|
}
|
Db.Updateable(boxInfoList).ExecuteCommand();
|
|
// 更新托盘绑定表
|
bind.Qty += factQty;
|
}
|
//if (bind.FullQty < bind.Qty && isDeposit == 0 && isTextTable == 0)
|
//{
|
// throw new Exception("托盘绑定数量已超出该物料包装数量");
|
//}
|
|
if (bind.FullQty <= bind.Qty)
|
{
|
bind.BitPalletMark = "0";
|
}
|
//if (bind.Qty > pNum && isDeposit == 0 && isTextTable == 0)
|
//{
|
// throw new Exception($"绑定失败,{bind.PalletNo}托盘绑定数量大于该物品托盘包装数量!");
|
//}
|
Db.Updateable(bind).Where(m => m.Id == bindId).ExecuteCommand();
|
|
// 更改入库单明细已组数量
|
var sqlString = string.Empty;
|
if (factQty == 0)
|
{
|
sqlString += $"update BllArrivalNoticeDetail set FactQty = FactQty + '{model.SkuQty}' where id = '{model.AsnDetailId}';";
|
}
|
else
|
{
|
sqlString += $"update BllArrivalNoticeDetail set FactQty = FactQty + '{factQty}' where id = '{model.AsnDetailId}';";
|
}
|
|
Db.Ado.ExecuteCommand(sqlString);
|
|
// 更改入库单及入库明细状态
|
if (detail.Status == "0")
|
{
|
var sqlString2 = string.Empty;
|
sqlString2 += $"update BllArrivalNotice set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='0';";
|
sqlString2 += $"update BllArrivalNoticeDetail set Status = '1',UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='0';";
|
Db.Ado.ExecuteCommand(sqlString2);
|
}
|
else if (detail.Status == "1")
|
{
|
var sqlString2 = string.Empty;
|
sqlString2 += $"update BllArrivalNotice set UpdateTime= getDate(),UpdateUser = {userId} where ASNNo = '{model.AsnNo}' and Status ='1';";
|
sqlString2 += $"update BllArrivalNoticeDetail set UpdateTime= getDate(),UpdateUser = {userId} where id = '{model.AsnDetailId}' and Status ='1';";
|
Db.Ado.ExecuteCommand(sqlString2);
|
}
|
|
// 更改托盘使用状态
|
var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';";
|
//添加托盘记录表数据
|
sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{model.AsnNo}','组盘','0',getDate(),{userId},NULL,NULL);";
|
Db.Ado.ExecuteCommand(sqlStr);
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "托盘绑定", model.AsnNo, "添加", $"添加了托盘码为:{model.PalletNo}、{msgStr}的组盘信息", userId);
|
|
Db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
#endregion
|
|
#region 平库入库
|
/// <summary>
|
/// 平库确认入库
|
/// </summary>
|
/// <param name="model"></param>
|
public void ConfirmInStock(PalletBindVm model)
|
{
|
try
|
{
|
#region 验证信息
|
//if (string.IsNullOrEmpty(model.ASNNo))
|
//{
|
// throw new Exception("入库单不能为空!");
|
//}
|
if (string.IsNullOrEmpty(model.PalletNo))
|
{
|
throw new Exception("托盘条码不能为空!");
|
}
|
if (string.IsNullOrEmpty(model.LocatNo))
|
{
|
throw new Exception("储位地址不能为空!");
|
}
|
#endregion
|
//获取当前时间
|
DateTime serverTime = Db.Ado.GetDateTime("select GETDATE();");
|
|
#region 是否回流入库
|
int iscount = 0;
|
//库存明细信息
|
var stockDetail = Db.Queryable<DataStockDetail>().Where(a => a.IsDel == "0" && a.PalletNo == model.PalletNo).ToList();
|
//验证库存是否拥有该托信息
|
if (stockDetail != null && stockDetail.Count > 0)
|
{
|
foreach (var item in stockDetail)
|
{
|
if (!string.IsNullOrEmpty(item.WareHouseNo))
|
{
|
throw new Exception("该托盘未在库外,请核查!");
|
}
|
}
|
iscount = 1; //回流入库
|
}
|
#endregion
|
|
#region 托盘绑定信息
|
var bindInfo = Db.Queryable<BllPalletBind>().First(w => w.IsDel == "0" && w.ASNNo == model.ASNNo && w.PalletNo == model.PalletNo && w.Status != "2");
|
if (iscount == 0)
|
{
|
if (bindInfo == null)
|
{
|
throw new Exception("托盘绑定信息不存在,请核查!");
|
}
|
if (!string.IsNullOrEmpty(bindInfo.WareHouseNo))
|
{
|
throw new Exception("该托盘未在库外,请核查!");
|
}
|
}
|
|
#endregion
|
|
#region 地码信息(储位信息)
|
var storageLocat = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == model.LocatNo && w.Status == "0" && w.WareHouseNo == "W02");
|
if (storageLocat == null)
|
{
|
throw new Exception("储位信息不存在或非空闲状态,请核查!");
|
}
|
#endregion
|
|
Db.BeginTran();//开启事务
|
if (iscount == 0)//正常入库
|
{
|
#region 入库总单信息
|
var notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.Status != "3" && a.ASNNo == model.ASNNo);
|
//验证入库单总单是否关闭
|
if (notice == null)
|
{
|
throw new Exception("入库单总单信息不存在,请核查!");
|
}
|
//判断入库单总单是否为已关闭
|
if (notice.Status == "3")
|
{
|
throw new Exception("入库单总单已关闭,请核查!");
|
}
|
#endregion
|
|
#region 箱码信息
|
var boxInfoList = Db.Queryable<BllBoxInfo>().Where(w => w.IsDel == "0" && w.ASNNo == model.ASNNo && w.PalletNo == model.PalletNo).ToList();
|
// type 0:成品入库 1:采购入库 2:中间品入库 3:退货入库 4:车间余料退回入库 5:其它入库 6:代储入库 7:寄存入库
|
if (notice.Type == "2" || notice.Type == "6" || notice.Type == "7")
|
{
|
// 不贴码物料 无需验证箱码信息
|
}
|
else
|
{
|
//验证箱码信息是否存在
|
if (boxInfoList.Count <= 0)
|
{
|
throw new Exception("箱码信息不存在,请核查!");
|
}
|
foreach (var item in boxInfoList)
|
{
|
item.Status = "2"; // 改变箱支关系表状态:已入库
|
item.UpdateTime = serverTime;
|
item.UpdateUser = model.CreateUser;
|
}
|
Db.Updateable(boxInfoList).ExecuteCommand();
|
}
|
#endregion
|
|
bool isFinsh = true;//是否全部入库完成
|
#region 入库单明细
|
var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.IsDel == "0" && w.ASNNo == model.ASNNo && w.Id == bindInfo.ASNDetailNo);
|
if (noticeDetail == null)
|
{
|
throw new Exception("入库单明细信息不存在,请核查!");
|
}
|
noticeDetail.CompleteQty += bindInfo.Qty;//增加入库数量
|
//判断入库数量增加后是否大于等于单据数量
|
if (noticeDetail.CompleteQty >= noticeDetail.Qty)
|
{
|
noticeDetail.Status = "2";//执行完成
|
noticeDetail.CompleteTime = serverTime;
|
}
|
else
|
{
|
noticeDetail.Status = "1";//正在执行
|
|
isFinsh = false;
|
}
|
noticeDetail.UpdateUser = model.CreateUser;
|
noticeDetail.UpdateTime = serverTime;
|
Db.Updateable(noticeDetail).ExecuteCommand();
|
#endregion
|
|
#region 物料信息
|
var sku = Db.Queryable<SysMaterials>().First(s => s.SkuNo == noticeDetail.SkuNo && s.IsDel == "0" && s.SkuName == noticeDetail.SkuName);
|
//判断物料信息是否为空
|
if (sku == null)
|
{
|
throw new Exception("物料信息不存在,请核查!");
|
}
|
#endregion
|
|
#region 库存总表
|
// 判断当前物料库存表是否已存在
|
var stockModel = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == noticeDetail.SkuNo && w.LotNo == bindInfo.LotNo && w.Standard == noticeDetail.Standard);
|
if (stockModel == null || stockModel.Id == 0)
|
{
|
stockModel = new DataStock
|
{
|
LotNo = bindInfo.LotNo,
|
LotText = bindInfo.LotText,
|
SupplierLot = bindInfo.SupplierLot,
|
SkuNo = noticeDetail.SkuNo,
|
SkuName = noticeDetail.SkuName,
|
Qty = bindInfo.Qty,
|
Standard = noticeDetail.Standard,
|
CreateUser = (int)model.CreateUser,
|
CreateTime = serverTime
|
};
|
//维护库存货主信息
|
if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库
|
{
|
stockModel.OwnerNo = notice.CustomerNo;//货主编码
|
stockModel.OwnerName = notice.CustomerName;//货主名称
|
}
|
//新增库存总信息
|
Db.Insertable<DataStock>(stockModel).ExecuteCommand();
|
}
|
else
|
{
|
stockModel.Qty += bindInfo.Qty;
|
stockModel.UpdateUser = (int)model.CreateUser;
|
stockModel.UpdateTime = serverTime;
|
//修改库存总信息
|
Db.Updateable(stockModel).ExecuteCommand();
|
}
|
#endregion
|
|
#region 库存明细表
|
// 判断当前托盘是否已存在(拣货回库托盘)
|
var detailModel = Db.Queryable<DataStockDetail>().First(it => it.PalletNo == bindInfo.PalletNo && it.LotNo == bindInfo.LotNo && it.SkuNo == noticeDetail.SkuNo
|
&& it.Standard == noticeDetail.Standard && it.IsDel == "0");
|
var stId = 0;
|
if (detailModel == null || detailModel.Id == 0)
|
{
|
// 添加库存明细表
|
detailModel = new DataStockDetail()
|
{
|
LotNo = bindInfo.LotNo,
|
LotText = bindInfo.LotText,
|
SupplierLot = noticeDetail.SupplierLot,
|
SkuNo = noticeDetail.SkuNo,
|
SkuName = noticeDetail.SkuName,
|
Standard = noticeDetail.Standard,
|
Qty = bindInfo.Qty,
|
LockQty = 0,
|
FrozenQty = 0,
|
InspectQty = bindInfo.Qty,
|
ASNNo = noticeDetail.ASNNo,
|
ASNDetailNo = (int)bindInfo.ASNDetailNo,
|
WareHouseNo = "W02",
|
RoadwayNo = "",
|
AreaNo = storageLocat.AreaNo,
|
LocatNo = model.LocatNo,
|
PalletNo = model.PalletNo,
|
PalletNo2 = bindInfo.PalletNo2,
|
PalletNo3 = bindInfo.PalletNo3,
|
CompleteTime = serverTime,
|
ProductionTime = bindInfo.ProductionTime,
|
ExpirationTime = bindInfo.ExpirationTime,
|
Status = "0",
|
InspectMark = bindInfo.InspectMark,
|
BitPalletMark = bindInfo.BitPalletMark,
|
InspectStatus = sku.IsInspect,// 组盘的时候就要默认设定好是否合格
|
PackagNo = sku.PackagNo,
|
IsBale = bindInfo.IsBale,
|
IsBelt = bindInfo.IsBelt,
|
Demo = bindInfo.Demo,
|
CreateUser = (int)model.CreateUser,
|
CreateTime = serverTime
|
};
|
//维护库存明细货主/供应商信息
|
if (notice.Type == "0" || notice.Type == "2" || notice.Type == "4" || notice.Type == "6" || notice.Type == "7")//0:成品入库,2:中间品入库,4:车间余料入库,6:代储入库,7:寄存入库
|
{
|
detailModel.OwnerNo = notice.CustomerNo;//货主编码
|
detailModel.OwnerName = notice.CustomerName;//货主名称
|
}
|
else if (notice.Type == "1" || notice.Type == "5")//1:采购入库,2:其它入库
|
{
|
detailModel.SupplierNo = notice.CustomerNo;//供应商编码
|
detailModel.SupplierName = notice.CustomerName;//供应商名称
|
}
|
#region 维护质检结果
|
|
//获取该批次最终质检结果
|
var quality = Db.Queryable<BllQualityInspect>().Where(a => a.LotNo == noticeDetail.LotNo && a.IsDel == "0").OrderByDescending(a => a.CreateTime).First();
|
if (notice.Type == "3")
|
{
|
quality = Db.Queryable<BllQualityInspect>().Where(a => a.LotNo == noticeDetail.LotNo && a.ASNNo == notice.ASNNo && a.IsDel == "0").OrderByDescending(a => a.CreateTime).First();
|
}
|
if (quality != null)
|
{
|
//修改合格不合格数量
|
if (quality.IsQualified == "1") //合格
|
{
|
//增加合格数量
|
quality.PassQty += detailModel.Qty;
|
detailModel.InspectStatus = "1";
|
}
|
else if (quality.IsQualified == "0") //不合格
|
{
|
//增加不合格数量
|
quality.FailQty += detailModel.Qty;
|
detailModel.InspectStatus = "2";
|
}
|
Db.Updateable(quality).ExecuteCommand(); //修改质检信息
|
}
|
#endregion
|
stId = Db.Insertable<DataStockDetail>(detailModel).ExecuteReturnIdentity();
|
}
|
else
|
{
|
stId = detailModel.Id;
|
detailModel.LocatNo = model.LocatNo;
|
detailModel.AreaNo = storageLocat.AreaNo;
|
detailModel.UpdateTime = serverTime;
|
detailModel.UpdateUser = (int)model.CreateUser;
|
// 变更储位地址
|
Db.Updateable<DataStockDetail>(detailModel).UpdateColumns(it => new { it.LocatNo, it.UpdateTime, it.UpdateUser }).ExecuteCommand();
|
}
|
#endregion
|
|
#region 任务及组托信息
|
//创建任务信息
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //入库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "PDA",
|
IsSuccess = 1, //是否下发成功 0失败 1成功
|
SendDate = serverTime, //发送时间
|
BackDate = serverTime, //返回时间
|
StartLocat = "",//起始位置
|
EndLocat = model.LocatNo,//目标位置
|
PalletNo = bindInfo.PalletNo,//托盘码
|
IsSend = 0,//是否可再次下发
|
IsCancel = 0,//是否可取消
|
IsFinish = 0,//是否可完成
|
Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "2",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "0",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = "力诺平库的入库任务",
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
|
//修改组托状态
|
bindInfo.Status = "2"; //2 入库完成
|
bindInfo.WareHouseNo = "W02";//所属仓库
|
bindInfo.LocatNo = model.LocatNo;//储位地址
|
bindInfo.UpdateTime = serverTime;
|
bindInfo.UpdateUser = model.CreateUser;
|
bindInfo.CompleteTime = serverTime; //完成时间
|
bindInfo.TaskNo = taskNo; //任务号
|
Db.Updateable(bindInfo).ExecuteCommand();
|
#endregion
|
|
#region 库存箱支明细表
|
// 插入新组的箱支信息
|
var comTime = DateTime.Now;
|
foreach (var item in boxInfoList)
|
{
|
var info = new DataBoxInfo()
|
{
|
StockDetailId = stId,
|
BindNo = bindInfo.Id,
|
BoxNo = item.BoxNo,
|
BoxNo2 = item.BoxNo2,
|
BoxNo3 = item.BoxNo3,
|
PalletNo = item.PalletNo,
|
PalletNo2 = item.PalletNo2,
|
PalletNo3 = item.PalletNo3,
|
Qty = item.Qty,
|
FullQty = item.FullQty,
|
Status = "2",
|
LotNo = item.LotNo,
|
LotText = item.LotText,
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = sku.Standard,
|
ProductionTime = item.ProductionTime,
|
ExpirationTime = item.ExpirationTime,
|
SupplierLot = item.SupplierLot,
|
InspectMark = item.InspectMark,
|
BitBoxMark = item.BitBoxMark,
|
InspectStatus = item.InspectStatus,
|
UDF1 = item.StoreTime == null? "":((DateTime)item.StoreTime).ToString("yyyy-MM-dd"),
|
//InspectTime = item.StoreTime,
|
|
IsDel = "0",
|
CreateUser = 0,
|
CreateTime = comTime
|
};
|
Db.Insertable(info).ExecuteCommand();
|
}
|
#endregion
|
|
var entryList = Db.Queryable<BllArrivalNoticeDetail>().Where(w => w.IsDel == "0" && w.ASNNo == notice.ASNNo && w.Id != noticeDetail.Id && w.Status != "2").ToList();
|
if (isFinsh && entryList.Count <= 0)//入库单明细全部完成
|
{
|
//修改入库单总单信息
|
notice.Status = "2";
|
notice.UpdateUser = model.CreateUser;
|
notice.UpdateTime = serverTime;
|
Db.Updateable(notice).ExecuteCommand();
|
}
|
else
|
{
|
//判断总单状态是否为正在执行
|
if (notice.Status == "0")
|
{
|
//修改入库单总单信息
|
notice.Status = "1";
|
notice.UpdateUser = model.CreateUser;
|
notice.UpdateTime = serverTime;
|
Db.Updateable(notice).ExecuteCommand();
|
}
|
}
|
}
|
else
|
{
|
//修改库存明细信息
|
foreach (var item in stockDetail)
|
{
|
item.Status = "0"; //状态更改为待分配
|
item.WareHouseNo = "W02"; //所属仓库
|
item.LocatNo = model.LocatNo;//储位地址
|
item.UpdateTime = serverTime; //修改时间
|
item.UpdateUser = model.CreateUser; //修改人
|
//修改库存明细信息
|
Db.Updateable(item).ExecuteCommand();
|
}
|
//获取拣货信息
|
var alotr = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.PalletNo == model.PalletNo && a.Status == "4");
|
if (alotr != null)
|
{
|
alotr.Status = "5"; //5 已完成
|
alotr.UpdateUser = model.CreateUser; //修改人
|
alotr.UpdateTime = serverTime; //修改时间
|
//修改拣货信息
|
Db.Updateable(alotr).ExecuteCommand();
|
}
|
#region 任务及组托信息
|
//创建任务信息
|
var taskNo = new Common().GetMaxNo("TK");
|
var exTask = new LogTask //入库任务
|
{
|
TaskNo = taskNo,
|
Sender = "WMS",
|
Receiver = "PDA",
|
IsSuccess = 1, //是否下发成功 0失败 1成功
|
SendDate = DateTime.Now, //发送时间
|
BackDate = DateTime.Now, //返回时间
|
StartLocat = "",//起始位置
|
EndLocat = model.LocatNo,//目标位置
|
PalletNo = model.PalletNo,//托盘码
|
IsSend = 0,//是否可再次下发
|
IsCancel = 0,//是否可取消
|
IsFinish = 0,//是否可完成
|
Type = "0",//任务类型 0 入库任务 1 出库任务 2 移库任务
|
Status = "2",//任务状态0:等待执行1正在执行2执行完成
|
OrderType = "3",//0 入库单 1 出库单 2 盘点单 3 移库单
|
Msg = "力诺平库的回库任务",
|
};
|
Db.Insertable(exTask).ExecuteCommand();
|
#endregion
|
}
|
storageLocat.Status = "1";//状态已使用
|
storageLocat.UpdateTime = serverTime; //修改时间
|
storageLocat.UpdateUser = model.CreateUser; //修改人
|
//修改储位信息
|
Db.Updateable(storageLocat).ExecuteCommand();
|
|
if (iscount == 1)
|
{
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成托盘码为:{model.PalletNo}的平库回流入库操作", (int)model.CreateUser);
|
}
|
else
|
{
|
new OperationASNServer().AddLogOperationAsn("PDA模块", "平库入库", model.PalletNo, "完成", $"在PDA上完成单据号为:{model.ASNNo}的托盘码为:{model.PalletNo}的平库入库操作", (int)model.CreateUser);
|
}
|
Db.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
#endregion
|
}
|
}
|