You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1017 lines
61 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Estsh.Core.Base;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Wms.IServices;
using Estsh.Core.Model.Result;
using Estsh.Core.Services;
using Estsh.Core.Repositories;
using Estsh.Core.Models;
using Newtonsoft.Json.Linq;
using Estsh.Core.Model.EnumUtil;
using Dapper;
namespace Estsh.Core.Wms.Services
{
public class InpdlineService : BaseService<BaseEntity>, IInpdlineService
{
private readonly IInpdlineRepository repository;
public InpdlineService(IInpdlineRepository _repository) : base(_repository)
{
repository = _repository;
}
public List<WmsMoveHeader> CheckMoveHeader(string onLine, string cartonno)
{
return repository.CheckMoveHeader(onLine, cartonno);
}
public List<WmsMoveHeader> CheckOnlineMoveHeader(string onLine, string cartonno)
{
return repository.CheckOnlineMoveHeader(onLine, cartonno);
}
//大件
public List<WmsMoveHeader> CheckBulkyMoveHeader(string onLine)
{
return repository.CheckBulkyMoveHeader(onLine);
}
//大件 领料上线
public List<WmsMoveHeader> CheckBulkyOnlineMoveHeader(string onLine, string cartonno)
{
return repository.CheckBulkyOnlineMoveHeader(onLine, cartonno);
}
public List<WmsMoveDetail> CheckMoveDetail(string orderNo)
{
return repository.CheckMoveDetail(orderNo, (int)WmsEnumUtil.StockStatus.INSTOCKED);
}
public string UpdatePick(string loginId, string orderNo, string cartonNo, string isSplit)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
StringBuilder stringBuilder = new StringBuilder(1024);
DynamicParameters stringparameters = new DynamicParameters();
WmsRack wmsRack = repository.GetWmsRackInfo(cartonNo);
if (wmsRack != null)
{
List<WmsRackPackage> wmsRackPackages = repository.GetCarrierByName(cartonNo);
if (wmsRackPackages.Count > 0)
{
foreach (WmsRackPackage item in wmsRackPackages)
{
string rackCartonNo = item.CartonNo;
//配料列表
List<WmsMoveDetail> details = repository.CheckMoveDetail(orderNo, (int)WmsEnumUtil.StockStatus.INSTOCKED);
//扫描到的箱条码
SysStock Stock = repository.GetCartonInfo(rackCartonNo);
if (Stock == null)
{
return "[" + rackCartonNo + "]:台车条码不存在,请检查!";
}
if (Stock.Enabled.Equals("N"))
{
return "[" + rackCartonNo + "]:台车条码已被冻结,请检查!";
}
else if (Stock.Status != (int)WmsEnumUtil.StockStatus.INSTOCKED)
{
return "[" + rackCartonNo + "]:是" + Stock.StockStatus + "状态,请检查!";
}
List<WmsMoveDetail> ifScan = details.Where(a => a.PartId == Stock.PartId).ToList();
if (ifScan.Count == 0)
{
return "[" + rackCartonNo + "]:不在领料单中,请检查!";
}
if (ifScan[0].PickQty >= ifScan[0].Qty)
{
return "[" + ifScan[0].PartNo + "]:已完成配料!";
}
//修改移库主表 30 处理中
StringBuilder updateString = new StringBuilder(1024);
updateString.Append(" update wms_move_header set order_status=@order_status,update_userid=@update_userid,update_time=@update_time where order_no=@order_no ");
DynamicParameters updateStringparameters = new DynamicParameters();
updateStringparameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderStatus.PROCESSING);
updateStringparameters.Add("@order_no", ifScan[0].OrderNo);
updateStringparameters.Add("@update_userid", loginId);
updateStringparameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString.ToString());
parameterList.Add(updateStringparameters);
//修改移库明细表 30 处理中
StringBuilder updateString2 = new StringBuilder(1024);
updateString2.Append(@"update wms_move_detail set pick_qty = pick_qty + @pick_qty, item_status=@item_status,update_userid=@update_userid,update_time=@update_time where ruid=@ruid ");
DynamicParameters updateStringparameters2 = new DynamicParameters();
updateStringparameters2.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING);
updateStringparameters2.Add("@ruid", ifScan[0].Ruid);
updateStringparameters2.Add("@pick_qty", Stock.Qty);
updateStringparameters2.Add("@update_userid", loginId);
updateStringparameters2.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString2.ToString());
parameterList.Add(updateStringparameters2);
//修改条码表 60 配料中
StringBuilder updateString5 = new StringBuilder(1024);
updateString5.Append("update sys_stock set status=@status,update_userid=@update_userid,update_time=@update_time where carton_no= @carton_no ");
DynamicParameters updateStringparameters5 = new DynamicParameters();
updateStringparameters5.Add("@carton_no", Stock.CartonNo);
updateStringparameters5.Add("@status", (int)WmsEnumUtil.StockStatus.BATCHED);
updateStringparameters5.Add("@update_userid", loginId);
updateStringparameters5.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString5.ToString());
parameterList.Add(updateStringparameters5);
//插入 wms_move_sn 条码表
StringBuilder updateString3 = new StringBuilder(1024);
updateString3.Append(@"INSERT INTO [dbo].[wms_move_sn]
([order_no]
,[item_no]
,[part_id]
,[part_no]
,[part_spec]
,[carton_no]
,[qty]
,[unit]
,[status]
,[factory_id]
,[factory_code]
,[enabled]
,[create_userid]
,[create_time]
,[update_userid]
,[update_time]
,[guid])
VALUES (@order_no,@item_no,@part_id,@part_no,@part_spec,@carton_no,@qty,@unit,@status,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@update_userid,@update_time,@guid)");
DynamicParameters updateStringparameters3 = new DynamicParameters();
updateStringparameters3.Add("@order_no", ifScan[0].OrderNo);
updateStringparameters3.Add("@item_no", ifScan[0].ItemNo);
updateStringparameters3.Add("@part_id", ifScan[0].PartId);
updateStringparameters3.Add("@part_no", ifScan[0].PartNo);
updateStringparameters3.Add("@part_spec", ifScan[0].PartSpec);
updateStringparameters3.Add("@carton_no", Stock.CartonNo);
updateStringparameters3.Add("@qty", Stock.Qty);
updateStringparameters3.Add("@unit", Stock.Unit);
updateStringparameters3.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.BATCHED);
updateStringparameters3.Add("@factory_id", ifScan[0].FactoryId);
updateStringparameters3.Add("@factory_code", ifScan[0].FactoryCode);
updateStringparameters3.Add("@enabled", "Y");
updateStringparameters3.Add("@update_userid", loginId);
updateStringparameters3.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters3.Add("@create_userid", loginId);
updateStringparameters3.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters3.Add("@guid", Guid.NewGuid());
sqlStrings.Add(updateString3.ToString());
parameterList.Add(updateStringparameters3);
//新增 sys_stock_trans 事务表
StringBuilder updateString4 = new StringBuilder(1024);
updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans]
([trans_code]
,[carton_no]
,[part_id]
,[part_no]
,[part_spec]
,[src_locate_id]
,[src_locate_name]
,[dest_locate_id]
,[dest_locate_name]
,[old_qty]
,[new_qty]
,[trans_qty]
,[old_status]
,[new_status]
,[old_qms_status]
,[new_qms_status]
,[unit]
,[factory_id]
,[factory_code]
,[src_erp_warehouse]
,[dest_erp_warehouse]
,[src_warehouse_id]
,[src_warehouse_name]
,[dest_warehouse_id]
,[dest_warehouse_name]
,[src_zone_id]
,[src_zone_name]
,[dest_zone_id]
,[dest_zone_name]
,[enabled]
,[update_userid]
,[update_time]
,[create_userid]
,[create_time]
,[guid],ref_order_no)
VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty
,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid,@ref_order_no )");
DynamicParameters updateStringparameters4 = new DynamicParameters();
updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.PRODUCTION_PICK);
updateStringparameters4.Add("@carton_no", Stock.CartonNo);
updateStringparameters4.Add("@part_id", Stock.PartId);
updateStringparameters4.Add("@part_no", Stock.PartNo);
updateStringparameters4.Add("@part_spec", Stock.PartSpec);
updateStringparameters4.Add("@src_locate_id", Stock.LocateId);
updateStringparameters4.Add("@src_locate_name", Stock.LocateName);
updateStringparameters4.Add("@dest_locate_id", Stock.LocateId);
updateStringparameters4.Add("@dest_locate_name", Stock.LocateName);
updateStringparameters4.Add("@old_qty", Stock.Qty);
updateStringparameters4.Add("@new_qty", Stock.Qty);
updateStringparameters4.Add("@trans_qty", Stock.Qty);
updateStringparameters4.Add("@old_status", Stock.Status);
updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.BATCHED);
updateStringparameters4.Add("@old_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@new_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@unit", Stock.Unit);
updateStringparameters4.Add("@factory_id", Stock.FactoryId);
updateStringparameters4.Add("@factory_code", Stock.FactoryCode);
updateStringparameters4.Add("@src_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@dest_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@src_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@src_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@dest_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@dest_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@src_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@src_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@dest_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@dest_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@enabled", Stock.Enabled);
updateStringparameters4.Add("@update_userid", loginId);
updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@create_userid", loginId);
updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@guid", Guid.NewGuid());
updateStringparameters4.Add("@ref_order_no", orderNo);
sqlStrings.Add(updateString4.ToString());
parameterList.Add(updateStringparameters4);
}
stringBuilder = new StringBuilder();//台车更新60 已配料
stringBuilder.Append("update sys_stock set status=60 where carton_no= @TrayNo and enabled='Y'");
stringparameters = new DynamicParameters();
stringparameters.Add("@TrayNo", cartonNo);//台车
sqlStrings.Add(stringBuilder.ToString());
parameterList.Add(stringparameters);
int retTranNum = repository.SQLTransaction(sqlStrings, parameterList);
if (retTranNum > 0)
{
return "OK";
}
else
{
return "操作失败,请检查!";
}
}
else
{
return "[" + cartonNo + "]:该台车未绑定条码,请检查!";
}
}
else
{
//配料列表
List<WmsMoveDetail> details = repository.CheckMoveDetail(orderNo, (int)WmsEnumUtil.StockStatus.INSTOCKED);
//扫描到的箱条码
SysStock Stock = repository.GetCartonInfo(cartonNo);
if (Stock == null)
{
return "[" + cartonNo + "]:箱条码不存在,请检查!";
}
if (Stock.Enabled.Equals("N"))
{
return "[" + cartonNo + "]:箱条码已被冻结,请检查!";
}
else if (Stock.Status != (int)WmsEnumUtil.StockStatus.INSTOCKED)
{
return "[" + cartonNo + "]:是" + Stock.StockStatus + "状态,请检查!";
}
List<WmsMoveDetail> ifScan = details.Where(a => a.PartId == Stock.PartId).ToList();
if (ifScan.Count == 0)
{
return "[" + cartonNo + "]:不在领料单中,请检查!";
}
if (ifScan[0].PickQty >= ifScan[0].Qty)
{
return "[" + ifScan[0].PartNo + "]:已完成配料!";
}
//修改移库主表 30 处理中
StringBuilder updateString = new StringBuilder(1024);
updateString.Append(" update wms_move_header set order_status=@order_status,update_userid=@update_userid,update_time=@update_time where order_no=@order_no ");
DynamicParameters updateStringparameters = new DynamicParameters();
updateStringparameters.Add("@order_status", (int)WmsEnumUtil.MoveOrderStatus.PROCESSING);
updateStringparameters.Add("@order_no", ifScan[0].OrderNo);
updateStringparameters.Add("@update_userid", loginId);
updateStringparameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString.ToString());
parameterList.Add(updateStringparameters);
//修改移库明细表 30 处理中
StringBuilder updateString2 = new StringBuilder(1024);
updateString2.Append(@"update wms_move_detail set pick_qty = pick_qty + @pick_qty, item_status=@item_status,update_userid=@update_userid,update_time=@update_time where ruid=@ruid ");
DynamicParameters updateStringparameters2 = new DynamicParameters();
updateStringparameters2.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING);
updateStringparameters2.Add("@ruid", ifScan[0].Ruid);
updateStringparameters2.Add("@pick_qty", Stock.Qty);
updateStringparameters2.Add("@update_userid", loginId);
updateStringparameters2.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString2.ToString());
parameterList.Add(updateStringparameters2);
//修改条码表 60 配料中
StringBuilder updateString5 = new StringBuilder(1024);
updateString5.Append("update sys_stock set status=@status,update_userid=@update_userid,update_time=@update_time where carton_no= @carton_no ");
DynamicParameters updateStringparameters5 = new DynamicParameters();
updateStringparameters5.Add("@carton_no", Stock.CartonNo);
updateStringparameters5.Add("@status", (int)WmsEnumUtil.StockStatus.BATCHED);
updateStringparameters5.Add("@update_userid", loginId);
updateStringparameters5.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString5.ToString());
parameterList.Add(updateStringparameters5);
//插入 wms_move_sn 条码表
StringBuilder updateString3 = new StringBuilder(1024);
updateString3.Append(@"INSERT INTO [dbo].[wms_move_sn]
([order_no]
,[item_no]
,[part_id]
,[part_no]
,[part_spec]
,[carton_no]
,[qty]
,[unit]
,[status]
,[factory_id]
,[factory_code]
,[enabled]
,[create_userid]
,[create_time]
,[update_userid]
,[update_time]
,[guid])
VALUES (@order_no,@item_no,@part_id,@part_no,@part_spec,@carton_no,@qty,@unit,@status,@factory_id,@factory_code,@enabled,@create_userid,@create_time,@update_userid,@update_time,@guid)");
DynamicParameters updateStringparameters3 = new DynamicParameters();
updateStringparameters3.Add("@order_no", ifScan[0].OrderNo);
updateStringparameters3.Add("@item_no", ifScan[0].ItemNo);
updateStringparameters3.Add("@part_id", ifScan[0].PartId);
updateStringparameters3.Add("@part_no", ifScan[0].PartNo);
updateStringparameters3.Add("@part_spec", ifScan[0].PartSpec);
updateStringparameters3.Add("@carton_no", Stock.CartonNo);
updateStringparameters3.Add("@qty", Stock.Qty);
updateStringparameters3.Add("@unit", Stock.Unit);
updateStringparameters3.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.BATCHED);
updateStringparameters3.Add("@factory_id", ifScan[0].FactoryId);
updateStringparameters3.Add("@factory_code", ifScan[0].FactoryCode);
updateStringparameters3.Add("@enabled", "Y");
updateStringparameters3.Add("@update_userid", loginId);
updateStringparameters3.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters3.Add("@create_userid", loginId);
updateStringparameters3.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters3.Add("@guid", Guid.NewGuid());
sqlStrings.Add(updateString3.ToString());
parameterList.Add(updateStringparameters3);
//新增 sys_stock_trans 事务表
StringBuilder updateString4 = new StringBuilder(1024);
updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans]
([trans_code]
,[carton_no]
,[part_id]
,[part_no]
,[part_spec]
,[src_locate_id]
,[src_locate_name]
,[dest_locate_id]
,[dest_locate_name]
,[old_qty]
,[new_qty]
,[trans_qty]
,[old_status]
,[new_status]
,[old_qms_status]
,[new_qms_status]
,[unit]
,[factory_id]
,[factory_code]
,[src_erp_warehouse]
,[dest_erp_warehouse]
,[src_warehouse_id]
,[src_warehouse_name]
,[dest_warehouse_id]
,[dest_warehouse_name]
,[src_zone_id]
,[src_zone_name]
,[dest_zone_id]
,[dest_zone_name]
,[enabled]
,[update_userid]
,[update_time]
,[create_userid]
,[create_time]
,[guid],ref_order_no)
VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty
,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid ,@ref_order_no)");
DynamicParameters updateStringparameters4 = new DynamicParameters();
updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.PRODUCTION_PICK);
updateStringparameters4.Add("@carton_no", Stock.CartonNo);
updateStringparameters4.Add("@part_id", Stock.PartId);
updateStringparameters4.Add("@part_no", Stock.PartNo);
updateStringparameters4.Add("@part_spec", Stock.PartSpec);
updateStringparameters4.Add("@src_locate_id", Stock.LocateId);
updateStringparameters4.Add("@src_locate_name", Stock.LocateName);
updateStringparameters4.Add("@dest_locate_id", Stock.LocateId);
updateStringparameters4.Add("@dest_locate_name", Stock.LocateName);
updateStringparameters4.Add("@old_qty", Stock.Qty);
updateStringparameters4.Add("@new_qty", Stock.Qty);
updateStringparameters4.Add("@trans_qty", Stock.Qty);
updateStringparameters4.Add("@old_status", Stock.Status);
updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.BATCHED);
updateStringparameters4.Add("@old_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@new_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@unit", Stock.Unit);
updateStringparameters4.Add("@factory_id", Stock.FactoryId);
updateStringparameters4.Add("@factory_code", Stock.FactoryCode);
updateStringparameters4.Add("@src_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@dest_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@src_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@src_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@dest_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@dest_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@src_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@src_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@dest_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@dest_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@enabled", Stock.Enabled);
updateStringparameters4.Add("@update_userid", loginId);
updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@create_userid", loginId);
updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@guid", Guid.NewGuid());
updateStringparameters4.Add("@ref_order_no", orderNo);
sqlStrings.Add(updateString4.ToString());
parameterList.Add(updateStringparameters4);
}
int retNum = repository.SQLTransaction(sqlStrings, parameterList);
if (retNum > 0)
{
return "OK";
}
else
{
return "操作失败,请检查!";
}
}
public string BatchingCompleted(string loginId, string orderNo)
{
return repository.BatchingCompleted(loginId, orderNo);
}
public SetObjectDetail CheckMaterialSplit(string cartonNo, int splitNum, string loginId, int splitCount)
{
SetObjectDetail det = new SetObjectDetail();
//需要拆分的箱条码信息
List<SysStock> MaterialInfo = repository.GetMaterialInfo(cartonNo);
if (MaterialInfo.Count == 0)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码不存在,请检查!";
return det;
}
if (MaterialInfo[0].Enabled.Equals("N"))
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码已被冻结,请检查!";
return det;
}
if (MaterialInfo[0].Qty < 1)
{
det.type = "NO";
det.message = "[" + cartonNo + "]:箱条码数量不足,无法拆分!";
return det;
}
List<SysStock> NewStock = repository.CheckMaterialSplit(MaterialInfo, splitNum, loginId, splitCount);
if (NewStock == null || NewStock.Count == 0)
{
det.type = "NO";
det.message = "执行失败!请重试!";
}
else
{
det.type = "OK";
det.wmsObjectDetail = NewStock.ConvertAll(s => (object)s);
}
return det;
}
public List<WmsMoveDetail> CheckMoveDetail2(string orderNo, string carton_no)
{
return repository.CheckMoveDetail2(orderNo, (int)WmsEnumUtil.StockStatus.BATCHED, carton_no);
}
public string CheckLocateStatus(string locate, string orderNo)
{
List<SysLocate> locateInfo = repository.GetLocateInfo(locate);
if (locateInfo == null || locateInfo.Count == 0)
{
return "[" + locate + "]:库位不存在,请检查!";
}
if (locateInfo[0].LocateType != (int)WmsEnumUtil.LocateType.LINE_LOCATE)
{
return "[" + locate + "]:库位不是线边库,请检查!";
}
//已使用库容
List<SysStock> s = repository.GetLocateCapacity(locateInfo[0].LocateId.ToString());
if (locateInfo[0].LocateCapacity <= s[0].Qty)
{
return "[" + locate + "]:线边库已满,请检查!";
}
//List<WmsMoveDetail> details = repository.CheckMoveDetail(orderNo, (int)WmsEnumUtil.StockStatus.INSTOCKED);
//if (locateInfo[0].ZoneId == details[0].DestZoneId && locateInfo[0].WarehouseId == details[0].DestWarehouseId && locateInfo[0].ErpWarehouse == details[0].DestErpWarehouse)
//{
// return "OK";
//}
//else
//{
// return "[" + locate + "]:库位与订单目标库位不匹配,请检查!";
//}
return "OK";
}
public string UpdatePickOnline(string loginId, string orderNo, string cartonNo, string locate)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
StringBuilder stringBuilder = new StringBuilder();
DynamicParameters stringparameters = new DynamicParameters();
WmsRack wmsRack = repository.GetWmsRackInfo(cartonNo);
if (wmsRack != null)
{
List<WmsRackPackage> wmsRackPackages = repository.GetCarrierByName(cartonNo);
if (wmsRackPackages.Count > 0)
{
foreach (WmsRackPackage item in wmsRackPackages)
{
string rackCartonNo = item.CartonNo;
//上料列表
List<WmsMoveSn> details = repository.GetMoveSN(orderNo);
//扫描到的箱条码
SysStock Stock = repository.GetCartonInfo(rackCartonNo);
//库位
List<SysLocate> locateInfo = repository.GetLocateInfo(locate);
if (Stock == null)
{
return "[" + rackCartonNo + "]:台车条码不存在,请检查!";
}
if (Stock.Enabled.Equals("N"))
{
return "[" + rackCartonNo + "]:台车条码已被冻结,请检查!";
}
if (Stock.Status == (int)WmsEnumUtil.StockStatus.ONLINED)
{
return "[" + rackCartonNo + "]:台车条码已完成上线!";
}
if (Stock.Status != (int)WmsEnumUtil.StockStatus.BATCHED)
{
return "[" + rackCartonNo + "]:台车条码不处于配料状态!";
}
List<WmsMoveSn> ifOnline = details.Where(a => a.CartonNo == rackCartonNo).ToList();
if (ifOnline.Count == 0)
{
return "[" + rackCartonNo + "]:不在领料单中,请检查!";
}
//修改移库明细表 已收数,
StringBuilder updateString2 = new StringBuilder(1024);
updateString2.Append(@"update wms_move_detail set out_qty = out_qty + @out_qty,update_userid=@update_userid,update_time=@update_time,item_status = case when qty <= out_qty + @out_qty then @item_status else item_status end where order_no=@order_no and part_id=@part_id ");
DynamicParameters updateStringparameters2 = new DynamicParameters();
updateStringparameters2.Add("@order_no", orderNo);
updateStringparameters2.Add("@part_id", Stock.PartId);
updateStringparameters2.Add("@out_qty", Stock.Qty);
updateStringparameters2.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED);
updateStringparameters2.Add("@update_userid", loginId);
updateStringparameters2.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString2.ToString());
parameterList.Add(updateStringparameters2);
//修改移库条码表 40 已上线
StringBuilder updateString = new StringBuilder(1024);
updateString.Append(" update wms_move_sn set status=@status,update_userid=@update_userid,update_time=@update_time where carton_no=@carton_no ");
DynamicParameters updateStringparameters = new DynamicParameters();
updateStringparameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.ONLINED);
updateStringparameters.Add("@carton_no", Stock.CartonNo);
updateStringparameters.Add("@update_userid", loginId);
updateStringparameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString.ToString());
parameterList.Add(updateStringparameters);
//修改条码表 70 已上线
StringBuilder updateString5 = new StringBuilder(1024);
updateString5.Append("update sys_stock set status=@status,zone_id=@zone_id,zone_name=@zone_name,erp_warehouse=@erp_warehouse,update_userid=@update_userid,update_time=@update_time,locate_id=@locate_id,locate_name=@locate_name where carton_no= @carton_no ");
DynamicParameters updateStringparameters5 = new DynamicParameters();
updateStringparameters5.Add("@carton_no", Stock.CartonNo);
updateStringparameters5.Add("@status", (int)WmsEnumUtil.StockStatus.ONLINED);
updateStringparameters5.Add("@locate_id", locateInfo[0].LocateId);
updateStringparameters5.Add("@locate_name", locateInfo[0].LocateName);
updateStringparameters5.Add("@zone_id", locateInfo[0].ZoneId);
updateStringparameters5.Add("@zone_name", locateInfo[0].ZoneName);
updateStringparameters5.Add("@erp_warehouse", locateInfo[0].ErpWarehouse);
updateStringparameters5.Add("@update_userid", loginId);
updateStringparameters5.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString5.ToString());
parameterList.Add(updateStringparameters5);
//新增 sys_stock_trans 事务表
StringBuilder updateString4 = new StringBuilder(1024);
updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans]
([trans_code]
,[carton_no]
,[part_id]
,[part_no]
,[part_spec]
,[src_locate_id]
,[src_locate_name]
,[dest_locate_id]
,[dest_locate_name]
,[old_qty]
,[new_qty]
,[trans_qty]
,[old_status]
,[new_status]
,[old_qms_status]
,[new_qms_status]
,[unit]
,[factory_id]
,[factory_code]
,[src_erp_warehouse]
,[dest_erp_warehouse]
,[src_warehouse_id]
,[src_warehouse_name]
,[dest_warehouse_id]
,[dest_warehouse_name]
,[src_zone_id]
,[src_zone_name]
,[dest_zone_id]
,[dest_zone_name]
,[enabled]
,[update_userid]
,[update_time]
,[create_userid]
,[create_time]
,[guid],ref_order_no)
VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty
,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid ,@ref_order_no)");
DynamicParameters updateStringparameters4 = new DynamicParameters();
updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.PICK_ONLINE);
updateStringparameters4.Add("@carton_no", Stock.CartonNo);
updateStringparameters4.Add("@part_id", Stock.PartId);
updateStringparameters4.Add("@part_no", Stock.PartNo);
updateStringparameters4.Add("@part_spec", Stock.PartSpec);
updateStringparameters4.Add("@src_locate_id", Stock.LocateId);
updateStringparameters4.Add("@src_locate_name", Stock.LocateName);
updateStringparameters4.Add("@dest_locate_id", locateInfo[0].LocateId);
updateStringparameters4.Add("@dest_locate_name", locateInfo[0].LocateName);
updateStringparameters4.Add("@old_qty", Stock.Qty);
updateStringparameters4.Add("@new_qty", Stock.Qty);
updateStringparameters4.Add("@trans_qty", Stock.Qty);
updateStringparameters4.Add("@old_status", Stock.Status);
updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.ONLINED);
updateStringparameters4.Add("@old_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@new_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@unit", Stock.Unit);
updateStringparameters4.Add("@factory_id", Stock.FactoryId);
updateStringparameters4.Add("@factory_code", Stock.FactoryCode);
updateStringparameters4.Add("@src_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@dest_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@src_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@src_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@dest_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@dest_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@src_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@src_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@dest_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@dest_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@enabled", Stock.Enabled);
updateStringparameters4.Add("@update_userid", loginId);
updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@create_userid", loginId);
updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@guid", Guid.NewGuid());
updateStringparameters4.Add("@ref_order_no", orderNo);
sqlStrings.Add(updateString4.ToString());
parameterList.Add(updateStringparameters4);
stringBuilder = new StringBuilder();//解绑台车
stringBuilder.Append("update wms_rack_package set enabled='N' where carton_no= @cartonNo and enabled='Y'");
stringparameters = new DynamicParameters();
stringparameters.Add("@cartonNo", Stock.CartonNo);
sqlStrings.Add(stringBuilder.ToString());
parameterList.Add(stringparameters);
}
stringBuilder = new StringBuilder();//台车更新70 已上线
stringBuilder.Append("update sys_stock set status=70 where carton_no= @TrayNo and enabled='Y'");
stringparameters = new DynamicParameters();
stringparameters.Add("@TrayNo", cartonNo);//台车
sqlStrings.Add(stringBuilder.ToString());
parameterList.Add(stringparameters);
int rettranNum = repository.SQLTransaction(sqlStrings, parameterList);
if (rettranNum > 0)
{
List<WmsMoveDetail> WmsMoveDetail = repository.GetWmsMoveDetailByOrderNo(orderNo);
if (WmsMoveDetail.Sum(a => a.ItemStatus) == (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED * WmsMoveDetail.Count)
{
repository.UpdateMoveDetailByOrderNo(orderNo, loginId);//修改移库条码表 40 已上线
}
return "OK";
}
else
{
return "操作失败,请检查!";
}
}
else
{
return "[" + cartonNo + "]:该台车未绑定条码,请检查!";
}
}
else
{
//上料列表
List<WmsMoveSn> details = repository.GetMoveSN(orderNo);
//扫描到的箱条码
SysStock Stock = repository.GetCartonInfo(cartonNo);
//库位
List<SysLocate> locateInfo = repository.GetLocateInfo(locate);
//库位与零件关系
List<SysLocatePart> locatePart = repository.GetLocatePart(locate);
if (Stock == null)
{
return "[" + cartonNo + "]:条码不存在,请检查!";
}
if (Stock.Enabled.Equals("N"))
{
return "[" + cartonNo + "]:条码已被冻结,请检查!";
}
if (Stock.Status == (int)WmsEnumUtil.StockStatus.ONLINED)
{
return "[" + cartonNo + "]:条码已完成上线!";
}
if (Stock.Status != (int)WmsEnumUtil.StockStatus.BATCHED)
{
return "[" + cartonNo + "]:条码不处于配料状态!";
}
List<WmsMoveSn> ifOnline = details.Where(a => a.CartonNo == cartonNo).ToList();
if (ifOnline.Count == 0)
{
return "[" + cartonNo + "]:不在领料单中,请检查!";
}
if (locatePart.Count > 0)
{
List<SysLocatePart> getLocatePart = locatePart.Where(a => a.PartId == Stock.PartId).ToList();
if (getLocatePart.Count == 0)
{
return "[" + cartonNo + "]:库位绑定零件与条码零件不一致,请检查!";
}
}
List<WmsMoveDetail> GetDetail = repository.GetWmsMoveDetailByOrderNo(orderNo);
//对订单行操作时,此行操作完毕就修改 is_safety_pull 为0
List<WmsMoveDetail> GetDetailByOrderNo = GetDetail.Where(a => a.PartId == Stock.PartId).ToList();
if (GetDetailByOrderNo[0].OutQty + Stock.Qty == GetDetailByOrderNo[0].PickQty)
{
StringBuilder updateGetDetail = new StringBuilder(1024);
updateGetDetail.Append(@"update sys_locate_part set is_safety_pull= 0 where safety_pull_order=@order_no and part_id=@part_id ");
DynamicParameters updateGetDetailParameters = new DynamicParameters();
updateGetDetailParameters.Add("@order_no", orderNo);
updateGetDetailParameters.Add("@part_id", Stock.PartId);
sqlStrings.Add(updateGetDetail.ToString());
parameterList.Add(updateGetDetailParameters);
}
//修改移库明细表 已收数,
StringBuilder updateString2 = new StringBuilder(1024);
updateString2.Append(@"update wms_move_detail set out_qty = out_qty + @out_qty,update_userid=@update_userid,update_time=@update_time,item_status = case when qty <= out_qty + @out_qty then @item_status else item_status end where order_no=@order_no and part_id=@part_id ");
DynamicParameters updateStringparameters2 = new DynamicParameters();
updateStringparameters2.Add("@order_no", orderNo);
updateStringparameters2.Add("@part_id", Stock.PartId);
updateStringparameters2.Add("@out_qty", Stock.Qty);
updateStringparameters2.Add("@item_status", (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED);
updateStringparameters2.Add("@update_userid", loginId);
updateStringparameters2.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString2.ToString());
parameterList.Add(updateStringparameters2);
//修改移库条码表 40 已上线
StringBuilder updateString = new StringBuilder(1024);
updateString.Append(" update wms_move_sn set status=@status,update_userid=@update_userid,update_time=@update_time where carton_no=@carton_no ");
DynamicParameters updateStringparameters = new DynamicParameters();
updateStringparameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.ONLINED);
updateStringparameters.Add("@carton_no", Stock.CartonNo);
updateStringparameters.Add("@update_userid", loginId);
updateStringparameters.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString.ToString());
parameterList.Add(updateStringparameters);
//修改条码表 70 已上线
StringBuilder updateString5 = new StringBuilder(1024);
updateString5.Append("update sys_stock set status=@status,zone_id=@zone_id,zone_name=@zone_name,erp_warehouse=@erp_warehouse,update_userid=@update_userid,update_time=@update_time,locate_id=@locate_id,locate_name=@locate_name where carton_no= @carton_no ");
DynamicParameters updateStringparameters5 = new DynamicParameters();
updateStringparameters5.Add("@carton_no", Stock.CartonNo);
updateStringparameters5.Add("@status", (int)WmsEnumUtil.StockStatus.ONLINED);
updateStringparameters5.Add("@locate_id", locateInfo[0].LocateId);
updateStringparameters5.Add("@locate_name", locateInfo[0].LocateName);
updateStringparameters5.Add("@zone_id", locateInfo[0].ZoneId);
updateStringparameters5.Add("@zone_name", locateInfo[0].ZoneName);
updateStringparameters5.Add("@erp_warehouse", locateInfo[0].ErpWarehouse);
updateStringparameters5.Add("@update_userid", loginId);
updateStringparameters5.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
sqlStrings.Add(updateString5.ToString());
parameterList.Add(updateStringparameters5);
//新增 sys_stock_trans 事务表
StringBuilder updateString4 = new StringBuilder(1024);
updateString4.Append(@" INSERT INTO[dbo].[sys_stock_trans]
([trans_code]
,[carton_no]
,[part_id]
,[part_no]
,[part_spec]
,[src_locate_id]
,[src_locate_name]
,[dest_locate_id]
,[dest_locate_name]
,[old_qty]
,[new_qty]
,[trans_qty]
,[old_status]
,[new_status]
,[old_qms_status]
,[new_qms_status]
,[unit]
,[factory_id]
,[factory_code]
,[src_erp_warehouse]
,[dest_erp_warehouse]
,[src_warehouse_id]
,[src_warehouse_name]
,[dest_warehouse_id]
,[dest_warehouse_name]
,[src_zone_id]
,[src_zone_name]
,[dest_zone_id]
,[dest_zone_name]
,[enabled]
,[update_userid]
,[update_time]
,[create_userid]
,[create_time]
,[guid],ref_order_no)
VALUES (@trans_code,@carton_no,@part_id,@part_no,@part_spec,@src_locate_id ,@src_locate_name ,@dest_locate_id ,@dest_locate_name ,@old_qty
,@new_qty ,@trans_qty ,@old_status ,@new_status ,@old_qms_status ,@new_qms_status ,@unit ,@factory_id ,@factory_code ,@src_erp_warehouse ,@dest_erp_warehouse ,@src_warehouse_id ,@src_warehouse_name ,@dest_warehouse_id ,@dest_warehouse_name ,@src_zone_id ,@src_zone_name ,@dest_zone_id ,@dest_zone_name ,@enabled ,@update_userid ,@update_time ,@create_userid ,@create_time ,@guid ,@ref_order_no)");
DynamicParameters updateStringparameters4 = new DynamicParameters();
updateStringparameters4.Add("@trans_code", (int)WmsEnumUtil.TransType.PICK_ONLINE);
updateStringparameters4.Add("@carton_no", Stock.CartonNo);
updateStringparameters4.Add("@part_id", Stock.PartId);
updateStringparameters4.Add("@part_no", Stock.PartNo);
updateStringparameters4.Add("@part_spec", Stock.PartSpec);
updateStringparameters4.Add("@src_locate_id", Stock.LocateId);
updateStringparameters4.Add("@src_locate_name", Stock.LocateName);
updateStringparameters4.Add("@dest_locate_id", locateInfo[0].LocateId);
updateStringparameters4.Add("@dest_locate_name", locateInfo[0].LocateName);
updateStringparameters4.Add("@old_qty", Stock.Qty);
updateStringparameters4.Add("@new_qty", Stock.Qty);
updateStringparameters4.Add("@trans_qty", Stock.Qty);
updateStringparameters4.Add("@old_status", Stock.Status);
updateStringparameters4.Add("@new_status", (int)WmsEnumUtil.StockStatus.ONLINED);
updateStringparameters4.Add("@old_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@new_qms_status", Stock.QmsStatus);
updateStringparameters4.Add("@unit", Stock.Unit);
updateStringparameters4.Add("@factory_id", Stock.FactoryId);
updateStringparameters4.Add("@factory_code", Stock.FactoryCode);
updateStringparameters4.Add("@src_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@dest_erp_warehouse", Stock.ErpWarehouse);
updateStringparameters4.Add("@src_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@src_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@dest_warehouse_id", Stock.WarehouseId);
updateStringparameters4.Add("@dest_warehouse_name", Stock.WarehouseName);
updateStringparameters4.Add("@src_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@src_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@dest_zone_id", Stock.ZoneId);
updateStringparameters4.Add("@dest_zone_name", Stock.ZoneName);
updateStringparameters4.Add("@enabled", Stock.Enabled);
updateStringparameters4.Add("@update_userid", loginId);
updateStringparameters4.Add("@update_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@create_userid", loginId);
updateStringparameters4.Add("@create_time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
updateStringparameters4.Add("@guid", Guid.NewGuid());
updateStringparameters4.Add("@ref_order_no", orderNo);
sqlStrings.Add(updateString4.ToString());
parameterList.Add(updateStringparameters4);
}
int retNum = repository.SQLTransaction(sqlStrings, parameterList);
if (retNum > 0)
{
//List<WmsMoveDetail> WmsMoveDetail = repository.GetWmsMoveDetailByOrderNo(orderNo);
//if (WmsMoveDetail.Sum(a => a.ItemStatus) == (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED * WmsMoveDetail.Count)
//{
// repository.UpdateMoveDetailByOrderNo(orderNo, loginId);//修改移库条码表 40 已上线
//}
return "OK";
}
else
{
return "操作失败,请检查!";
}
}
public string UpdatePickOnlineCloseOrder(string orderNo, string loginId)
{
int result = 0;
List<WmsMoveDetail> WmsMoveDetail = repository.GetWmsMoveDetailByOrderNo(orderNo);
if (WmsMoveDetail.Sum(a => a.ItemStatus) == (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED * WmsMoveDetail.Count)
{
result = repository.UpdateMoveDetailByOrderNo(orderNo, loginId);//修改移库条码表 40 已上线
}
if (result > 0)
{
return "OK";
}
else
{
return "操作失败,请检查!";
}
}
public string SetMoveOrderClose(string order)
{
return repository.SetMoveOrderClose(order);
}
}
}