You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1223 lines
56 KiB
1223 lines
56 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.ServiceModel;
|
|
using System.ServiceModel.Description;
|
|
using SSWMS.Common;
|
|
|
|
namespace SSWMS.Server
|
|
{
|
|
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single,
|
|
ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = int.MaxValue, UseSynchronizationContext = false)]
|
|
public class S_ManageService : I_ManageService
|
|
{
|
|
// 立库入库
|
|
public bool ManageInCell(STORAGE_MAIN sm, IList<STORAGE_LIST> lStorageList,
|
|
string sEndCellCode, bool isManual, string sOperator, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
// 校验
|
|
if (!StringUtils.StockBarcodeValidate(sm.STOCK_BARCODE))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 格式错误";
|
|
return false;
|
|
}
|
|
if (sm.CELL_CODE.Contains("-"))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {sm.CELL_CODE} 不能立库入库";
|
|
return false;
|
|
}
|
|
if (isManual && S_BaseService._P_MANAGE_MAIN.GetModelByInSend(sm.CELL_CODE) != null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {sm.CELL_CODE} 已存在入库任务";
|
|
return false;
|
|
}
|
|
|
|
// 库存
|
|
if (lStorageList.Count > 2)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = "一个托盘最多绑定两个物料条码";
|
|
return false;
|
|
}
|
|
if (sm.STORAGE_ID == 0)
|
|
{
|
|
// 更新库存
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = "请输入托盘物料";
|
|
return false;
|
|
}
|
|
if (!this.ManageInUpdateStorage(sm, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// 申请入库
|
|
if (S_BaseService._P_MANAGE_MAIN.GetModelByStockBarcode(sm.STOCK_BARCODE) != null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
lStorageList = S_BaseService._P_STORAGE_LIST.GetListByStorageID(sm.STORAGE_ID);
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 未找到库存";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 目标位置
|
|
WH_CELL wcEndDevice = null;
|
|
if (string.IsNullOrWhiteSpace(sEndCellCode))
|
|
{
|
|
wcEndDevice = S_BaseService._S_CellService.GetEndCell(sm, null, 0, 0, out sResult);
|
|
if (wcEndDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wcEndDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(sEndCellCode);
|
|
if (wcEndDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"未找到目标位置 {sEndCellCode}";
|
|
return false;
|
|
}
|
|
if (lStorageList[0].STORAGE_PROPERTY_10 == SystemCode.STOCK_SIZE.Square)
|
|
{
|
|
if (S_BaseService._P_IO_CONTROL_ROUTE.GetModelByDeviceCode(sm.CELL_CODE, wcEndDevice.DEVICE_CODE) == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{sm.CELL_CODE}-{wcEndDevice.DEVICE_CODE} 路径不可用";
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (S_BaseService._P_IO_CONTROL_ROUTE.GetModelByDeviceCode_L(sm.CELL_CODE, wcEndDevice.DEVICE_CODE) == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{sm.CELL_CODE}-{wcEndDevice.DEVICE_CODE} 长托路径不可用";
|
|
return false;
|
|
}
|
|
}
|
|
if (!S_BaseService._S_CellService.CheckEndCell(wcEndDevice))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"目标位置 {wcEndDevice.CELL_CODE} 状态不可用";
|
|
return false;
|
|
}
|
|
//if (sm.CELL_MODEL == SystemCode.CELL_MODEL.High &&
|
|
// wcEndDevice.CELL_MODEL == SystemCode.CELL_MODEL.Low)
|
|
//{
|
|
// S_BaseService._P_Base_House.RollBackTransaction();
|
|
// sResult = "高物料不能入库低货位";
|
|
// return false;
|
|
//}
|
|
}
|
|
string sLockCellCode = wcEndDevice.CELL_CODE;
|
|
if (wcEndDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
sLockCellCode = wcEndDevice.CELL_CODE_P;
|
|
}
|
|
|
|
// 更新计划
|
|
if (sm.PLAN_ID > 0 && !ManageUpdatePlan(sm.PLAN_ID, true, true, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
// 新增任务 立库入库
|
|
this.ManageCreate(sm.CELL_CODE, wcEndDevice.CELL_CODE, sLockCellCode,
|
|
SystemCode.MANAGE_TYPE.InCell, isManual ? SystemCode.MANAGE_STATUS.Send : SystemCode.MANAGE_STATUS.Waiting,
|
|
sm, lStorageList, sm.PLAN_ID, 0, sOperator);
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = ex.Message;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 暂存入库
|
|
public bool ManageInStation(STORAGE_MAIN sm, IList<STORAGE_LIST> lStorageList,
|
|
string sOperator, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
// 校验
|
|
if (!StringUtils.StockBarcodeValidate(sm.STOCK_BARCODE))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 格式错误";
|
|
return false;
|
|
}
|
|
if (sm.CELL_CODE.Contains("-"))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"货位编码 {sm.CELL_CODE} 不能暂存入库";
|
|
return false;
|
|
}
|
|
|
|
// 更新库存
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = "请输入托盘物料";
|
|
return false;
|
|
}
|
|
if (!this.ManageInUpdateStorage(sm, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
// 更新计划
|
|
if (sm.PLAN_ID > 0 && !this.ManageUpdatePlan(sm.PLAN_ID, true, false, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
// 新增入出库记录 暂存入库
|
|
S_BaseService._S_ControlService.CreateRecord(sm.CELL_CODE.Contains("-") ?
|
|
SystemCode.MANAGE_TYPE.InPing : SystemCode.MANAGE_TYPE.InStation, sm, lStorageList, sOperator);
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = ex.Message;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 入库 更新库存
|
|
public bool ManageInUpdateStorage(STORAGE_MAIN sm, IList<STORAGE_LIST> lStorageList, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
// 校验任务
|
|
if (S_BaseService._P_MANAGE_MAIN.GetModelByStockBarcode(sm.STOCK_BARCODE) != null)
|
|
{
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
List<string> lBoxBarcode = new List<string>();
|
|
List<string> lGoodsBarcode = new List<string>();
|
|
foreach (STORAGE_LIST sl in lStorageList)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(sl.BOX_BARCODE))
|
|
{
|
|
//if (sl.GOODS_ID > SystemCode.GOODS_ID.MaxStock)
|
|
//{
|
|
// sResult = $"请输入箱条码";
|
|
// return false;
|
|
//}
|
|
}
|
|
else if (lBoxBarcode.Contains(sl.BOX_BARCODE))
|
|
{
|
|
//sResult = $"箱条码 {vsl.BOX_BARCODE} 重复";
|
|
//return false;
|
|
}
|
|
else
|
|
{
|
|
lBoxBarcode.Add(sl.BOX_BARCODE);
|
|
if (S_BaseService._P_MANAGE_LIST.GetListByBoxBarcode(sl.BOX_BARCODE).Count > 0)
|
|
{
|
|
sResult = $"箱条码 {sl.BOX_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
}
|
|
if (string.IsNullOrWhiteSpace(sl.GOODS_BARCODE))
|
|
{
|
|
//if (sl.GOODS_ID > SystemCode.GOODS_ID.MaxStock)
|
|
//{
|
|
// sResult = $"请输入物料条码";
|
|
// return false;
|
|
//}
|
|
}
|
|
else if (lGoodsBarcode.Contains(sl.GOODS_BARCODE))
|
|
{
|
|
sResult = $"物料条码 {sl.GOODS_BARCODE} 重复";
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
lGoodsBarcode.Add(sl.GOODS_BARCODE);
|
|
if (S_BaseService._P_MANAGE_LIST.GetModelByGoodsBarcode(sl.GOODS_BARCODE) != null)
|
|
{
|
|
sResult = $"物料条码 {sl.GOODS_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 更新库存
|
|
STORAGE_MAIN smBase = S_BaseService._P_STORAGE_MAIN.GetModelByStockBarcode(sm.STOCK_BARCODE);
|
|
if (smBase != null)
|
|
{
|
|
//IList<STORAGE_LIST> lStorageListBase = S_BaseService._P_STORAGE_LIST.GetListByStorageID(smBase.STORAGE_ID);
|
|
//foreach (STORAGE_LIST slBase in lStorageListBase)
|
|
//{
|
|
// if (slBase.GOODS_ID > SystemCode.GOODS_ID.MaxStock)
|
|
// {
|
|
// sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在库存";
|
|
// return false;
|
|
// }
|
|
//}
|
|
//if (!smBase.CELL_CODE.Contains("-"))
|
|
//{
|
|
// S_BaseService._P_STORAGE_LIST.DeleteByStorageID(smBase.STORAGE_ID);
|
|
// S_BaseService._P_STORAGE_MAIN.Delete(smBase.STORAGE_ID);
|
|
// smBase = null;
|
|
//}
|
|
sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在库存";
|
|
return false;
|
|
//WH_CELL wcBase = S_BaseService._P_WH_CELL.GetModelByCellCode(smBase.CELL_CODE);
|
|
//if (wcEndDevice.CELL_TYPE != SystemCode.CELL_TYPE.Station)
|
|
//{
|
|
// if (wcBase.CELL_TYPE != SystemCode.CELL_TYPE.Station)
|
|
// {
|
|
// sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在库存";
|
|
// return false;
|
|
// }
|
|
// S_BaseService._P_STORAGE_MAIN.Delete(smBase.STORAGE_ID);
|
|
// S_BaseService._P_STORAGE_LIST.DeleteByStorageID(smBase.STORAGE_ID);
|
|
//}
|
|
//else if (smBase.GOODS_ID > 0 && smBase.GOODS_ID < SystemCode.GOODS_ID.MaxStock &&
|
|
// (wcBase.CELL_CODE == wcEndDevice.CELL_CODE || wcBase.CELL_TYPE == SystemCode.CELL_TYPE.Station))
|
|
//{
|
|
// S_BaseService._P_STORAGE_MAIN.Delete(smBase.STORAGE_ID);
|
|
// S_BaseService._P_STORAGE_LIST.DeleteByStorageID(smBase.STORAGE_ID);
|
|
//}
|
|
//else if (wcBase.CELL_CODE == wcEndDevice.CELL_CODE ||
|
|
// (wcBase.CELL_TYPE == SystemCode.CELL_TYPE.Station && wcEndDevice.CELL_TYPE == SystemCode.CELL_TYPE.Station))
|
|
//{
|
|
// IList<STORAGE_LIST> lStorageListBase = S_BaseService._P_STORAGE_LIST.GetListByStorageID(smBase.STORAGE_ID);
|
|
// foreach (STORAGE_LIST slBase in lStorageListBase)
|
|
// {
|
|
// if (slBase.GOODS_ID < SystemCode.GOODS_ID.MaxStock)
|
|
// {
|
|
// sResult = $"托盘条码 {sm.STOCK_BARCODE} 库存异常";
|
|
// return false;
|
|
// }
|
|
// }
|
|
// smBase.UPDATE_TIME = StringUtils.GetCurrentTime();
|
|
// smBase.CELL_CODE = wcEndDevice.CELL_CODE;
|
|
// if (smBase.GOODS_ID > 0 && smBase.GOODS_ID < SystemCode.GOODS_ID.MaxStock)
|
|
// {
|
|
// smBase.GOODS_ID = lStorageList[0].GOODS_ID;
|
|
// }
|
|
// foreach (STORAGE_LIST sl in lStorageList)
|
|
// {
|
|
// if (sl.GOODS_ID < SystemCode.GOODS_ID.MaxStock)
|
|
// {
|
|
// sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在库存";
|
|
// return false;
|
|
// }
|
|
// if (smBase.GOODS_ID != sl.GOODS_ID)
|
|
// {
|
|
// smBase.GOODS_ID = 0;
|
|
// break;
|
|
// }
|
|
// }
|
|
// S_BaseService._P_STORAGE_MAIN.Update(smBase);
|
|
// foreach (STORAGE_LIST sl in lStorageList)
|
|
// {
|
|
// bool bAdd = true;
|
|
// bool bAddBox = true;
|
|
// foreach (STORAGE_LIST slBase in lStorageListBase)
|
|
// {
|
|
// if (slBase.BOX_BARCODE == sl.BOX_BARCODE)
|
|
// {
|
|
// bAddBox = false;
|
|
// }
|
|
// if (slBase.GOODS_ID > SystemCode.GOODS_ID.MaxStock &&
|
|
// slBase.BOX_BARCODE == sl.BOX_BARCODE &&
|
|
// slBase.GOODS_BARCODE == sl.GOODS_BARCODE &&
|
|
// slBase.GOODS_ID == sl.GOODS_ID)
|
|
// {
|
|
// slBase.STORAGE_LIST_QUANTITY += sl.STORAGE_LIST_QUANTITY;
|
|
// S_BaseService._P_STORAGE_LIST.Update(slBase);
|
|
// bAdd = false;
|
|
// break;
|
|
// }
|
|
// }
|
|
// if (bAdd)
|
|
// {
|
|
// if (!string.IsNullOrWhiteSpace(sl.BOX_BARCODE) && bAddBox)
|
|
// {
|
|
// if (S_BaseService._P_STORAGE_LIST.GetListByBoxBarcode(sl.BOX_BARCODE).Count > 0)
|
|
// {
|
|
// sResult = $"箱条码 {sl.BOX_BARCODE} 存在库存";
|
|
// return false;
|
|
// }
|
|
// }
|
|
// if (!string.IsNullOrWhiteSpace(sl.GOODS_BARCODE))
|
|
// {
|
|
// if (S_BaseService._P_STORAGE_LIST.GetModelByGoodsBarcode(sl.GOODS_BARCODE) != null)
|
|
// {
|
|
// sResult = $"物料条码 {sl.GOODS_BARCODE} 存在库存";
|
|
// return false;
|
|
// }
|
|
// }
|
|
// S_BaseService._P_STORAGE_LIST.Add(new STORAGE_LIST()
|
|
// {
|
|
// STORAGE_ID = smBase.STORAGE_ID,
|
|
// GOODS_ID = sl.GOODS_ID,
|
|
// BOX_BARCODE = sl.BOX_BARCODE,
|
|
// GOODS_BARCODE = sl.GOODS_BARCODE,
|
|
// STORAGE_LIST_QUANTITY = sl.STORAGE_LIST_QUANTITY
|
|
// });
|
|
// }
|
|
// }
|
|
// return true;
|
|
//}
|
|
//else
|
|
//{
|
|
// sResult = $"托盘条码 {sm.STOCK_BARCODE} 存在库存";
|
|
// return false;
|
|
//}
|
|
}
|
|
// 新增库存
|
|
if (sm.CELL_CODE.Contains("-"))
|
|
{
|
|
sResult = $"货位编码 {sm.CELL_CODE} 不能入库";
|
|
return false;
|
|
//if (S_BaseService._P_STORAGE_MAIN.GetModelByCellCode(sEndCellCode) != null)
|
|
//{
|
|
// sResult = $"目标位置 {sEndCellCode} 存在库存";
|
|
// return false;
|
|
//}
|
|
}
|
|
foreach (string sBoxBarcode in lBoxBarcode)
|
|
{
|
|
if (S_BaseService._P_STORAGE_LIST.GetListByBoxBarcode(sBoxBarcode).Count > 0)
|
|
{
|
|
sResult = $"箱条码 {sBoxBarcode} 存在库存";
|
|
return false;
|
|
}
|
|
}
|
|
foreach (string sGoodsBarcode in lGoodsBarcode)
|
|
{
|
|
if (S_BaseService._P_STORAGE_LIST.GetModelByGoodsBarcode(sGoodsBarcode) != null)
|
|
{
|
|
sResult = $"物料条码 {sGoodsBarcode} 存在库存";
|
|
return false;
|
|
}
|
|
}
|
|
sm.ENTRY_TIME = StringUtils.GetCurrentTime();
|
|
sm.UPDATE_TIME = sm.ENTRY_TIME;
|
|
S_BaseService._S_StorageService.UpdateStorageProperty(sm, lStorageList);
|
|
S_BaseService._P_STORAGE_MAIN.Add(sm);
|
|
foreach (STORAGE_LIST sl in lStorageList)
|
|
{
|
|
sl.STORAGE_ID = sm.STORAGE_ID;
|
|
S_BaseService._P_STORAGE_LIST.Add(sl);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 多选立库出库
|
|
public bool ManageOutCellMulti(List<string> lStockBarcode, string sEndDeviceCode,
|
|
int iPlanID, string sManageType, string sOperator, out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
string sSingleResult = string.Empty;
|
|
foreach (string sStockBarcode in lStockBarcode)
|
|
{
|
|
if (this.ManageOutCell(sStockBarcode, sEndDeviceCode, 0,
|
|
iPlanID, 0, sManageType, sOperator, out sSingleResult))
|
|
{
|
|
sResult += $"托盘条码 {sStockBarcode} 出库成功\n";
|
|
}
|
|
else
|
|
{
|
|
bResult = false;
|
|
sResult += $"托盘条码 {sStockBarcode} 出库失败 {sSingleResult}\n";
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sResult += ex.Message;
|
|
return false;
|
|
}
|
|
sResult.TrimEnd('\n');
|
|
return bResult;
|
|
}
|
|
|
|
// 立库出库
|
|
public bool ManageOutCell(string sStockBarcode, string sEndDeviceCode, int iGoodsID,
|
|
int iPlanID, int iPlanListID, string sManageType, string sOperator, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
// 起始位置 库存
|
|
WH_CELL wcStartDevice = null;
|
|
STORAGE_MAIN sm = null;
|
|
if (!string.IsNullOrWhiteSpace(sStockBarcode))
|
|
{
|
|
sm = S_BaseService._P_STORAGE_MAIN.GetModelByStockBarcode(sStockBarcode);
|
|
if (sm == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sStockBarcode} 未找到库存";
|
|
return false;
|
|
}
|
|
wcStartDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(sm.CELL_CODE);
|
|
if (wcStartDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"未找到起始位置 {sm.CELL_CODE}";
|
|
return false;
|
|
}
|
|
if (wcStartDevice.CELL_TYPE != SystemCode.CELL_TYPE.Cell)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {wcStartDevice.CELL_CODE} 不能立库出库";
|
|
return false;
|
|
}
|
|
}
|
|
else if (iGoodsID > 0)
|
|
{
|
|
wcStartDevice = S_BaseService._S_CellService.GetStartCell(sEndDeviceCode,
|
|
new PLAN_LIST() { GOODS_ID = iGoodsID }, 0, 0, out sResult);
|
|
if (wcStartDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
sm = S_BaseService._P_STORAGE_MAIN.GetModelByCellCode(wcStartDevice.CELL_CODE);
|
|
if (sm == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"货位编码 {wcStartDevice.CELL_CODE} 未找到库存";
|
|
return false;
|
|
}
|
|
sStockBarcode = sm.STOCK_BARCODE;
|
|
}
|
|
else if (iPlanListID > 0)
|
|
{
|
|
wcStartDevice = S_BaseService._S_CellService.GetStartCell(sEndDeviceCode,
|
|
S_BaseService._P_PLAN_LIST.GetModel(iPlanListID), 0, 0, out sResult);
|
|
if (wcStartDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
sm = S_BaseService._P_STORAGE_MAIN.GetModelByCellCode(wcStartDevice.CELL_CODE);
|
|
if (sm == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"货位编码 {wcStartDevice.CELL_CODE} 未找到库存";
|
|
return false;
|
|
}
|
|
sStockBarcode = sm.STOCK_BARCODE;
|
|
}
|
|
else
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"请设置出库参数";
|
|
return false;
|
|
}
|
|
IList<STORAGE_LIST> lStorageList = S_BaseService._P_STORAGE_LIST.GetListByStorageID(sm.STORAGE_ID);
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sStockBarcode} 未找到库存";
|
|
return false;
|
|
}
|
|
string sLockCellCode = wcStartDevice.CELL_CODE;
|
|
if (wcStartDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
sLockCellCode = string.Empty;
|
|
}
|
|
|
|
// 目标位置
|
|
if (lStorageList[0].STORAGE_PROPERTY_10 == SystemCode.STOCK_SIZE.Square)
|
|
{
|
|
if (S_BaseService._P_IO_CONTROL_ROUTE.GetModelByDeviceCode(wcStartDevice.DEVICE_CODE, sEndDeviceCode) == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{wcStartDevice.DEVICE_CODE}-{sEndDeviceCode} 路径不可用";
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (S_BaseService._P_IO_CONTROL_ROUTE.GetModelByDeviceCode_L(wcStartDevice.DEVICE_CODE, sEndDeviceCode) == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{wcStartDevice.DEVICE_CODE}-{sEndDeviceCode} 长托路径不可用";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// 校验任务
|
|
MANAGE_MAIN mm = S_BaseService._P_MANAGE_MAIN.GetModelByStockBarcode(sStockBarcode);
|
|
if (mm == null)
|
|
{
|
|
if (!S_BaseService._S_CellService.CheckStartCell(wcStartDevice))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {wcStartDevice.CELL_CODE} 状态不可用";
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {sStockBarcode} 存在任务";
|
|
return false;
|
|
}
|
|
|
|
// 更新计划
|
|
if (iPlanID > 0 && !this.ManageUpdatePlan(iPlanID, false, true, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
if (mm == null)
|
|
{
|
|
// 新增任务 立库出库
|
|
this.ManageCreate(wcStartDevice.CELL_CODE, sEndDeviceCode, sLockCellCode, sManageType,
|
|
wcStartDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar ? SystemCode.MANAGE_STATUS.Send : SystemCode.MANAGE_STATUS.Waiting,
|
|
sm, lStorageList, iPlanID, 0, sOperator);
|
|
}
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = ex.Message;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 多选暂存出库
|
|
public bool ManageOutStationMulti(Dictionary<int, string> dStorageStockBarcode,
|
|
IList<STORAGE_LIST> lStorageList, int iPlanID, string sOperator, out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
string sSingleResult = string.Empty;
|
|
int iStorageID = 0;
|
|
List<STORAGE_LIST> lStorageListSingle = null;
|
|
foreach (STORAGE_LIST sl in lStorageList.OrderBy(sl => sl.STORAGE_ID).ThenBy(sl => sl.STORAGE_LIST_ID))
|
|
{
|
|
if (sl.STORAGE_ID == iStorageID)
|
|
{
|
|
lStorageListSingle.Add(new STORAGE_LIST()
|
|
{
|
|
STORAGE_ID = sl.STORAGE_ID,
|
|
STORAGE_LIST_ID = sl.STORAGE_LIST_ID,
|
|
STORAGE_LIST_QUANTITY = sl.STORAGE_LIST_QUANTITY
|
|
});
|
|
}
|
|
else
|
|
{
|
|
if (lStorageListSingle != null && lStorageListSingle.Count > 0)
|
|
{
|
|
string sStockBarcode = string.Empty;
|
|
if (dStorageStockBarcode != null &&
|
|
dStorageStockBarcode.ContainsKey(lStorageListSingle[0].STORAGE_ID))
|
|
{
|
|
sStockBarcode = $"托盘条码 {dStorageStockBarcode[lStorageListSingle[0].STORAGE_ID]} ";
|
|
}
|
|
if (this.ManageOutStation(lStorageListSingle, iPlanID, sOperator, out sSingleResult))
|
|
{
|
|
sResult += $"{sStockBarcode}出库成功\n";
|
|
}
|
|
else
|
|
{
|
|
bResult = false;
|
|
sResult += $"{sStockBarcode}出库失败 {sSingleResult}\n";
|
|
}
|
|
}
|
|
iStorageID = sl.STORAGE_ID;
|
|
lStorageListSingle = new List<STORAGE_LIST>()
|
|
{
|
|
new STORAGE_LIST()
|
|
{
|
|
STORAGE_ID = sl.STORAGE_ID,
|
|
STORAGE_LIST_ID = sl.STORAGE_LIST_ID,
|
|
STORAGE_LIST_QUANTITY = sl.STORAGE_LIST_QUANTITY
|
|
}
|
|
};
|
|
}
|
|
}
|
|
if (lStorageListSingle != null && lStorageListSingle.Count > 0)
|
|
{
|
|
string sStockBarcode = string.Empty;
|
|
if (dStorageStockBarcode != null &&
|
|
dStorageStockBarcode.ContainsKey(lStorageListSingle[0].STORAGE_ID))
|
|
{
|
|
sStockBarcode = $"托盘条码 {dStorageStockBarcode[lStorageListSingle[0].STORAGE_ID]} ";
|
|
}
|
|
if (this.ManageOutStation(lStorageListSingle, iPlanID, sOperator, out sSingleResult))
|
|
{
|
|
sResult += $"{sStockBarcode}出库成功\n";
|
|
}
|
|
else
|
|
{
|
|
bResult = false;
|
|
sResult += $"{sStockBarcode}出库失败 {sSingleResult}\n";
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sResult += ex.Message;
|
|
return false;
|
|
}
|
|
sResult.TrimEnd('\n');
|
|
return bResult;
|
|
}
|
|
|
|
// 暂存出库
|
|
private bool ManageOutStation(List<STORAGE_LIST> lStorageList, int iPlanID, string sOperator, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
// 库存
|
|
int iStorageID = lStorageList[0].STORAGE_ID;
|
|
STORAGE_MAIN smBase = S_BaseService._P_STORAGE_MAIN.GetModel(iStorageID);
|
|
IList<STORAGE_LIST> lStorageListBase = S_BaseService._P_STORAGE_LIST.GetListByStorageID(iStorageID);
|
|
if (smBase == null || lStorageListBase == null || lStorageListBase.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"未找到库存ID {iStorageID}";
|
|
return false;
|
|
}
|
|
if (S_BaseService._P_MANAGE_MAIN.GetModelByStorageID(smBase.STORAGE_ID) != null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"托盘条码 {smBase.STOCK_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
if (smBase.CELL_CODE.Contains("-"))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"立库货位编码 {smBase.CELL_CODE} 不能暂存出库";
|
|
return false;
|
|
}
|
|
|
|
// 更新库存 更新货位状态
|
|
if (!ManageOutStationUpdateStorage(smBase, lStorageListBase, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
// 更新计划
|
|
smBase.PLAN_ID = iPlanID;
|
|
if (iPlanID > 0 && !ManageUpdatePlan(iPlanID, false, false, lStorageList, out sResult))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
return false;
|
|
}
|
|
|
|
// 新增入出库记录 暂存出库
|
|
S_BaseService._S_ControlService.CreateRecord(smBase.CELL_CODE.Contains("-") ?
|
|
SystemCode.MANAGE_TYPE.OutPing : SystemCode.MANAGE_TYPE.OutStation, smBase, lStorageList, sOperator);
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = ex.Message;
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 暂存出库 更新库存 更新货位状态
|
|
private bool ManageOutStationUpdateStorage(STORAGE_MAIN smBase, IList<STORAGE_LIST> lStorageListBase,
|
|
IList<STORAGE_LIST> lStorageList, out string sResult)
|
|
{
|
|
sResult = string.Empty;
|
|
if (S_BaseService._P_MANAGE_MAIN.GetModelByStockBarcode(smBase.STOCK_BARCODE) != null)
|
|
//if (S_BaseService._P_MANAGE_MAIN.GetModelByStorageID(smBase.STORAGE_ID) != null)
|
|
{
|
|
sResult = $"托盘条码 {smBase.STOCK_BARCODE} 存在任务";
|
|
return false;
|
|
}
|
|
foreach (STORAGE_LIST sl in lStorageList)
|
|
{
|
|
bool bNotExists = true;
|
|
foreach (STORAGE_LIST slBase in lStorageListBase)
|
|
{
|
|
if (slBase.STORAGE_LIST_ID == sl.STORAGE_LIST_ID)
|
|
{
|
|
bNotExists = false;
|
|
sl.STORAGE_PROPERTY_01 = slBase.STORAGE_PROPERTY_01;
|
|
sl.STORAGE_PROPERTY_02 = slBase.STORAGE_PROPERTY_02;
|
|
sl.STORAGE_PROPERTY_03 = slBase.STORAGE_PROPERTY_03;
|
|
sl.STORAGE_PROPERTY_04 = slBase.STORAGE_PROPERTY_04;
|
|
sl.STORAGE_PROPERTY_05 = slBase.STORAGE_PROPERTY_05;
|
|
sl.STORAGE_PROPERTY_06 = slBase.STORAGE_PROPERTY_06;
|
|
sl.STORAGE_PROPERTY_07 = slBase.STORAGE_PROPERTY_07;
|
|
sl.STORAGE_PROPERTY_08 = slBase.STORAGE_PROPERTY_08;
|
|
sl.STORAGE_PROPERTY_09 = slBase.STORAGE_PROPERTY_09;
|
|
sl.STORAGE_PROPERTY_10 = slBase.STORAGE_PROPERTY_10;
|
|
sl.STORAGE_PROPERTY_11 = slBase.STORAGE_PROPERTY_11;
|
|
sl.STORAGE_PROPERTY_12 = slBase.STORAGE_PROPERTY_12;
|
|
sl.BOX_BARCODE = slBase.BOX_BARCODE;
|
|
sl.GOODS_BARCODE = slBase.GOODS_BARCODE;
|
|
sl.GOODS_ID = slBase.GOODS_ID;
|
|
if (slBase.STORAGE_LIST_QUANTITY < sl.STORAGE_LIST_QUANTITY)
|
|
{
|
|
GOODS_MAIN gm = S_BaseService._P_GOODS_MAIN.GetModel(sl.GOODS_ID);
|
|
sResult = gm == null ? $"未找到物料ID {sl.GOODS_ID}" :
|
|
$"物料编码 {gm.GOODS_CODE} 出库数量 {sl.STORAGE_LIST_QUANTITY} 多于库存数量 {slBase.STORAGE_LIST_QUANTITY}";
|
|
return false;
|
|
}
|
|
else if (slBase.STORAGE_LIST_QUANTITY == sl.STORAGE_LIST_QUANTITY)
|
|
{
|
|
//slBase.STORAGE_LIST_QUANTITY -= sl.STORAGE_LIST_QUANTITY;
|
|
S_BaseService._P_STORAGE_LIST.Delete(slBase.STORAGE_LIST_ID);
|
|
}
|
|
else
|
|
{
|
|
slBase.STORAGE_LIST_QUANTITY -= sl.STORAGE_LIST_QUANTITY;
|
|
S_BaseService._P_STORAGE_LIST.Update(slBase);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (bNotExists)
|
|
{
|
|
sResult = $"未找到库存列表ID {sl.STORAGE_LIST_ID}";
|
|
return false;
|
|
}
|
|
}
|
|
|
|
lStorageListBase = S_BaseService._P_STORAGE_LIST.GetListByStorageID(smBase.STORAGE_ID);
|
|
S_BaseService._S_StorageService.UpdateStorageProperty(smBase, lStorageListBase);
|
|
if (lStorageListBase == null || lStorageListBase.Count == 0)
|
|
{
|
|
S_BaseService._P_STORAGE_MAIN.Delete(smBase.STORAGE_ID);
|
|
}
|
|
else
|
|
{
|
|
smBase.UPDATE_TIME = StringUtils.GetCurrentTime();
|
|
S_BaseService._P_STORAGE_MAIN.Update(smBase);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 立库移库
|
|
public bool ManageMoveCell(string sStartCellCode, string sEndCellCode, string sOperator, out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
// 起始位置 目标位置
|
|
WH_CELL wcStartDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(sStartCellCode);
|
|
if (wcStartDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"未找到起始位置 {sStartCellCode}";
|
|
return false;
|
|
}
|
|
WH_CELL wcEndDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(sEndCellCode);
|
|
if (wcEndDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"未找到目标位置 {sEndCellCode}";
|
|
return false;
|
|
}
|
|
if (S_BaseService._P_IO_CONTROL_ROUTE.GetModelByDeviceCode(wcStartDevice.DEVICE_CODE, wcEndDevice.DEVICE_CODE) == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{wcStartDevice.DEVICE_CODE}-{wcEndDevice.DEVICE_CODE} 路径不可用";
|
|
return false;
|
|
}
|
|
if (!S_BaseService._S_CellService.CheckMoveCell(wcStartDevice, wcEndDevice))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {wcStartDevice.CELL_CODE} 目标位置 {wcEndDevice.CELL_CODE} 状态不可用";
|
|
return false;
|
|
}
|
|
//if (wcStartDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar &&
|
|
// wcStartDevice.CELL_CODE_P == wcEndDevice.CELL_CODE)
|
|
//{
|
|
// S_BaseService._P_Base_House.RollBackTransaction();
|
|
// sResult = "远货位不能移库到近货位";
|
|
// return false;
|
|
//}
|
|
if (Convert.ToInt32(wcStartDevice.CELL_MODEL) > Convert.ToInt32(wcEndDevice.CELL_MODEL))
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = "高物料不能入库低货位";
|
|
return false;
|
|
}
|
|
string sLockCellCode = wcEndDevice.CELL_CODE;
|
|
if (wcEndDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
sLockCellCode = wcEndDevice.CELL_CODE_P;
|
|
}
|
|
|
|
// 库存
|
|
STORAGE_MAIN sm = S_BaseService._P_STORAGE_MAIN.GetModelByCellCode(wcStartDevice.CELL_CODE);
|
|
if (sm == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {wcStartDevice.CELL_CODE} 未找到库存";
|
|
return false;
|
|
}
|
|
IList<STORAGE_LIST> lStorageList = S_BaseService._P_STORAGE_LIST.GetListByStorageID(sm.STORAGE_ID);
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"起始位置 {wcStartDevice.CELL_CODE} 未找到库存";
|
|
return false;
|
|
}
|
|
|
|
// 新增任务 立库移库
|
|
this.ManageCreate(wcStartDevice.CELL_CODE, wcEndDevice.CELL_CODE, sLockCellCode,
|
|
SystemCode.MANAGE_TYPE.MoveCell,
|
|
wcStartDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar ? SystemCode.MANAGE_STATUS.Send : SystemCode.MANAGE_STATUS.Waiting,
|
|
sm, lStorageList, 0, 0, sOperator);
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = ex.Message;
|
|
bResult = false;
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
// 更新计划
|
|
private bool ManageUpdatePlan(int iPlanID, bool isPlanIn, bool isCell, IList<STORAGE_LIST> lStorageList, out string sResult)
|
|
{
|
|
PLAN_MAIN pm = S_BaseService._P_PLAN_MAIN.GetModel(iPlanID);
|
|
IList<PLAN_LIST> lPlanList = S_BaseService._P_PLAN_LIST.GetListByPlanID(iPlanID);
|
|
if (pm == null || lPlanList == null || lPlanList.Count == 0)
|
|
{
|
|
sResult = $"未找到计划ID {iPlanID}";
|
|
return false;
|
|
}
|
|
if (pm.PLAN_STATUS != SystemCode.PLAN_STATUS.Executing &&
|
|
pm.PLAN_STATUS != SystemCode.PLAN_STATUS.Auto)
|
|
{
|
|
sResult = $"请确认拣货单号 {pm.PLAN_CODE} 正在执行";
|
|
return false;
|
|
}
|
|
if (isPlanIn && pm.PLAN_TYPE != SystemCode.PLAN_TYPE.PlanIn ||
|
|
!isPlanIn && pm.PLAN_TYPE != SystemCode.PLAN_TYPE.PlanOut)
|
|
{
|
|
sResult = $"拣货单号 {pm.PLAN_CODE} 计划类型错误";
|
|
return false;
|
|
}
|
|
sResult = string.Empty;
|
|
foreach (STORAGE_LIST sl in lStorageList)
|
|
{
|
|
bool bNotExists = true;
|
|
foreach (PLAN_LIST pl in lPlanList)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(pl.GOODS_BARCODE) && sl.GOODS_BARCODE != pl.GOODS_BARCODE)
|
|
{
|
|
continue;
|
|
}
|
|
if (pl.PLAN_LIST_FINISHED_QUANTITY + sl.STORAGE_LIST_QUANTITY > pl.PLAN_LIST_QUANTITY)
|
|
{
|
|
string sPlanType = isPlanIn ? "入库" : "出库";
|
|
sResult = $"物料条码 {sl.GOODS_BARCODE} 已{sPlanType}";
|
|
return false;
|
|
}
|
|
pl.PLAN_LIST_FINISHED_QUANTITY += sl.STORAGE_LIST_QUANTITY;
|
|
S_BaseService._P_PLAN_LIST.Update(pl);
|
|
bNotExists = false;
|
|
break;
|
|
}
|
|
if (bNotExists)
|
|
{
|
|
sResult = $"物料条码 {sl.GOODS_BARCODE} 不是计划物料";
|
|
return false;
|
|
}
|
|
}
|
|
bool bComplete = true;
|
|
foreach (PLAN_LIST pl in lPlanList)
|
|
{
|
|
if (pl.PLAN_LIST_FINISHED_QUANTITY < pl.PLAN_LIST_QUANTITY)
|
|
{
|
|
bComplete = false;
|
|
break;
|
|
}
|
|
}
|
|
if (bComplete && !isCell &&
|
|
S_BaseService._P_MANAGE_MAIN.GetListByPlanID(iPlanID).Count == 0)
|
|
{
|
|
pm.PLAN_END_TIME = StringUtils.GetCurrentTime();
|
|
pm.PLAN_STATUS = SystemCode.PLAN_STATUS.Complete;
|
|
S_BaseService._P_PLAN_MAIN.Update(pm);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// 新增任务
|
|
public void ManageCreate(string sStartCellCode, string sEndCellCode, string sLockCellCode,
|
|
string sManageType, string sManageStatus, STORAGE_MAIN sm, IList<STORAGE_LIST> lStorageList,
|
|
int iPlanID, int iApplyID, string sOperator)
|
|
{
|
|
string sCurrentTime = StringUtils.GetCurrentTime();
|
|
MANAGE_MAIN mm = new MANAGE_MAIN
|
|
{
|
|
MANAGE_TYPE = sManageType,
|
|
MANAGE_STATUS = sManageStatus,
|
|
STORAGE_ID = sm.STORAGE_ID,
|
|
STOCK_BARCODE = sm.STOCK_BARCODE,
|
|
MANAGE_CREATE_TIME = sCurrentTime,
|
|
MANAGE_OPERATOR = sOperator,
|
|
START_CELL_CODE = sStartCellCode,
|
|
END_CELL_CODE = sEndCellCode,
|
|
LOCK_CELL_CODE = sLockCellCode,
|
|
PLAN_ID = iPlanID,
|
|
APPLY_ID = iApplyID,
|
|
MANAGE_REMARK = string.Empty
|
|
};
|
|
S_BaseService._P_MANAGE_MAIN.Add(mm);
|
|
foreach (STORAGE_LIST sl in lStorageList)
|
|
{
|
|
S_BaseService._P_MANAGE_LIST.Add(new MANAGE_LIST
|
|
{
|
|
MANAGE_ID = mm.MANAGE_ID,
|
|
STORAGE_LIST_ID = sl.STORAGE_LIST_ID,
|
|
MANAGE_LIST_QUANTITY = sl.STORAGE_LIST_QUANTITY
|
|
});
|
|
}
|
|
if (sManageStatus == SystemCode.MANAGE_STATUS.Waiting)
|
|
{
|
|
S_BaseService._S_ControlService.CreateIOControl(mm, sm, lStorageList, sCurrentTime);
|
|
}
|
|
}
|
|
|
|
private void ManageUpdateErrorText(MANAGE_MAIN mm, string sErrorText)
|
|
{
|
|
if (mm.ERROR_TEXT != sErrorText)
|
|
{
|
|
mm.ERROR_TEXT = sErrorText;
|
|
S_BaseService._P_MANAGE_MAIN.Update(mm);
|
|
}
|
|
}
|
|
|
|
// 任务线程 等待下达
|
|
public bool ManageTask(out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
foreach (MANAGE_MAIN mm in S_BaseService._P_MANAGE_MAIN.GetListByStatus(SystemCode.MANAGE_STATUS.Send))
|
|
{
|
|
// 出库 移库
|
|
if (mm.START_CELL_CODE.Contains("-"))
|
|
{
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
WH_CELL wcStartDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(mm.START_CELL_CODE);
|
|
if (wcStartDevice == null ||
|
|
wcStartDevice.FORK_TYPE != SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
continue;
|
|
}
|
|
WH_CELL wcPairDevice = S_BaseService._P_WH_CELL.GetModelByCellCode(wcStartDevice.CELL_CODE_P);
|
|
if (wcPairDevice == null)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
continue;
|
|
}
|
|
if (mm.END_CELL_CODE == wcStartDevice.CELL_CODE_P ||
|
|
(wcPairDevice.STORAGE_ID == 0 && wcPairDevice.MANAGE_ID == 0) ||
|
|
(wcPairDevice.STORAGE_ID > 0 && wcPairDevice.MANAGE_ID > 0))
|
|
{
|
|
mm.ERROR_TEXT = string.Empty;
|
|
mm.MANAGE_STATUS = SystemCode.MANAGE_STATUS.Waiting;
|
|
if (mm.MANAGE_TYPE == SystemCode.MANAGE_TYPE.OutCell ||
|
|
mm.MANAGE_TYPE == SystemCode.MANAGE_TYPE.OutPick)
|
|
{
|
|
string sLockCellCode = wcStartDevice.CELL_CODE;
|
|
if (wcStartDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
sLockCellCode = wcStartDevice.CELL_CODE_P;
|
|
}
|
|
mm.LOCK_CELL_CODE = sLockCellCode;
|
|
}
|
|
S_BaseService._P_MANAGE_MAIN.Update(mm);
|
|
STORAGE_MAIN sm = S_BaseService._P_STORAGE_MAIN.GetModel(mm.STORAGE_ID);
|
|
IList<STORAGE_LIST> lStorageList = S_BaseService._P_STORAGE_LIST.GetListByStorageID(mm.STORAGE_ID);
|
|
if (sm == null || lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
ManageUpdateErrorText(mm, $"货位编码 {mm.START_CELL_CODE} 未找到库存");
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
continue;
|
|
}
|
|
S_BaseService._S_ControlService.CreateIOControl(mm, sm, lStorageList, StringUtils.GetCurrentTime());
|
|
}
|
|
else if (wcPairDevice.STORAGE_ID > 0 && wcPairDevice.MANAGE_ID == 0)
|
|
{
|
|
// 库存
|
|
STORAGE_MAIN sm = S_BaseService._P_STORAGE_MAIN.GetModelByCellCode(wcPairDevice.CELL_CODE);
|
|
if (sm == null)
|
|
{
|
|
ManageUpdateErrorText(mm, $"货位编码 {wcPairDevice.CELL_CODE} 未找到库存");
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
continue;
|
|
}
|
|
IList<STORAGE_LIST> lStorageList = S_BaseService._P_STORAGE_LIST.GetListByStorageID(sm.STORAGE_ID);
|
|
if (lStorageList == null || lStorageList.Count == 0)
|
|
{
|
|
ManageUpdateErrorText(mm, $"货位编码 {wcPairDevice.CELL_CODE} 未找到库存");
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
continue;
|
|
}
|
|
|
|
// 目标位置
|
|
sm.CELL_MODEL = wcPairDevice.CELL_MODEL;
|
|
string sSingleResult = string.Empty;
|
|
WH_CELL wcEndDevice = S_BaseService._S_CellService.GetEndCell(sm, wcPairDevice, wcPairDevice.CELL_X, wcPairDevice.CELL_Y, out sSingleResult);
|
|
if (wcEndDevice == null)
|
|
{
|
|
ManageUpdateErrorText(mm, "未找到可用移库货位");
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
continue;
|
|
}
|
|
string sLockCellCode = wcEndDevice.CELL_CODE;
|
|
if (wcEndDevice.FORK_TYPE == SystemCode.FORK_TYPE.CellFar)
|
|
{
|
|
sLockCellCode = wcEndDevice.CELL_CODE_P;
|
|
}
|
|
|
|
// 新增任务 立库移库
|
|
this.ManageCreate(wcPairDevice.CELL_CODE, wcEndDevice.CELL_CODE, sLockCellCode,
|
|
SystemCode.MANAGE_TYPE.MoveCell, SystemCode.MANAGE_STATUS.Waiting,
|
|
sm, lStorageList, 0, 0, "自动移库");
|
|
}
|
|
else
|
|
{
|
|
ManageUpdateErrorText(mm, $"近叉货位 {wcPairDevice.CELL_CODE} 状态不可用");
|
|
}
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult += $"{ex.Message}\n";
|
|
bResult = false;
|
|
}
|
|
}
|
|
}
|
|
sResult.Trim('\n');
|
|
return bResult;
|
|
}
|
|
|
|
public bool RecordInterface(List<int> lRecordID, string sOperator, out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
string sSingleResult = string.Empty;
|
|
lRecordID.Sort();
|
|
foreach (int iRecordID in lRecordID)
|
|
{
|
|
RECORD_MAIN rm = S_BaseService._P_RECORD_MAIN.GetModel(iRecordID);
|
|
if (rm == null)
|
|
{
|
|
bResult = false;
|
|
sResult += $"未找到任务历史ID {iRecordID}\n";
|
|
}
|
|
else if (S_BaseService._S_ERPService.ERPInterface(rm, out sSingleResult))
|
|
{
|
|
}
|
|
else
|
|
{
|
|
bResult = false;
|
|
sResult += $"托盘条码 {rm.STOCK_BARCODE} 调用接口失败 {sSingleResult}\n";
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sResult += $"{ex.Message}\n";
|
|
bResult = false;
|
|
}
|
|
sResult.Trim('\n');
|
|
return bResult;
|
|
}
|
|
|
|
public bool RecordComplete(List<int> lRecordID, string sOperator, out string sResult)
|
|
{
|
|
bool bResult = true;
|
|
sResult = string.Empty;
|
|
try
|
|
{
|
|
S_BaseService._P_Base_House.BeginTransaction();
|
|
foreach (int iRecordID in lRecordID)
|
|
{
|
|
RECORD_MAIN rm = S_BaseService._P_RECORD_MAIN.GetModel(iRecordID);
|
|
if (rm == null)
|
|
{
|
|
bResult = false;
|
|
sResult += $"未找到任务历史ID {iRecordID}\n";
|
|
}
|
|
else
|
|
{
|
|
rm.MANAGE_STATUS = SystemCode.MANAGE_STATUS.Complete;
|
|
rm.ERROR_TEXT = string.Empty;
|
|
S_BaseService._P_RECORD_MAIN.Update(rm);
|
|
}
|
|
}
|
|
S_BaseService._P_Base_House.CommitTransaction();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
S_BaseService._P_Base_House.RollBackTransaction();
|
|
sResult = $"{ex.Message}\n";
|
|
bResult = false;
|
|
}
|
|
sResult.Trim('\n');
|
|
return bResult;
|
|
}
|
|
}
|
|
}
|