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.

604 lines
32 KiB
C#

using Dapper;
using Estsh.Core.Base;
using Estsh.Core.Model.EnumUtil;
using Estsh.Core.Models;
using Estsh.Core.Services;
using Estsh.Core.Wms.IRepositories;
using Estsh.Core.Wms.IServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Estsh.Core.Wms.Services
{
/// <summary>
/// 零星入库
/// </summary>
public class ScatteredInStockService : BaseService<BaseEntity>, IScatteredInStockService
{
private readonly IScatteredInStockRepository repository;
public ScatteredInStockService(IScatteredInStockRepository _repository) : base(_repository)
{
repository = _repository;
}
public SetObjectDetail GetScatteredInStockOrderList(string orderNo)
{
SetObjectDetail rfInfo = new SetObjectDetail();//返回消息
List<WmsInstock> wmsMoves = repository.GetScatteredInStockOrderList(orderNo);
if (wmsMoves.Count > 0)
{
rfInfo.type = "PASS";
rfInfo.message = "成功";
rfInfo.wmsObjectDetail = wmsMoves.ConvertAll(s => (object)s);
}
else
{
rfInfo.type = "FAIL";
rfInfo.message = "未查询到数据,请检查!";
}
return rfInfo;
}
public SetObjectDetail GetScatteredInStockOrderListByOrderNo(string orderNo)
{
SetObjectDetail rfInfo = new SetObjectDetail();
List<WmsInstock> wmsMoves = repository.GetScatteredInStockOrderListByOrderNo(orderNo);
if (wmsMoves.Count > 0)
{
rfInfo.type = "PASS";
rfInfo.message = "成功";
rfInfo.wmsObjectDetail = wmsMoves.ConvertAll(s => (object)s);
}
else
{
rfInfo.type = "FAIL";
rfInfo.message = "未查询到数据,请检查!";
}
return rfInfo;
}
public SetObjectDetail GetLocateByName(string locateName, string orderNo)
{
SetObjectDetail rfInfo = new SetObjectDetail();
SysLocate sysLocates = repository.GetLocateByLocateName(locateName);
SysStock sysStocksLocateCount = repository.GetStackQtySumByLocateName(locateName);//库位在库数
if (sysLocates == null)
{
//提示 [A1-2-2]:该库位不存在,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + locateName + "]:该库位不存在,请检查!";
return rfInfo;
}
else if (sysLocates.Enabled != "Y")
{
//提示 [A1-2-2]:该库位不可用,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + locateName + "]:该库位不可用,请检查!";
return rfInfo;
}
else if (sysStocksLocateCount.Qty >= sysLocates.LocateCapacity)
{
//提示 [A1-2-2]:该库位容量已满,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + locateName + "]:该库位容量已满,请检查!";
return rfInfo;
}
List<WmsInstockDetail> instockDetailsErp = repository.GetInstockByOrderNoDestErp(orderNo, sysLocates.ErpWarehouse);
if (instockDetailsErp.Count == 0)
{
rfInfo.type = "FAIL";
rfInfo.message = "[" + locateName + "]:库位ERP库存与订单指定库存地不一致!";
return rfInfo;
}
////单据ERP库存地与扫描的库位ERP库存地比较
//if (WmsInstockDetails[0].DestErpWarehouse != sysLocates.ErpWarehouse)
//{
// //提示 [M0090105]:该条码是零星入库状态,无法操作!
// rfInfo.type = "FAIL";
// rfInfo.message = "[" + locateName + "]:库位ERP库存与订单指定库存地不一致!";
// return rfInfo;
//}
rfInfo.type = "PASS";
rfInfo.message = "[" + locateName + "]:扫描成功,请扫描箱条码";
return rfInfo;
}
public SetObjectDetail CheckStockByCartonAlocate(string cartonNo, string locateName, string orderNo, string loginId)
{
SetObjectDetail rfInfo = new SetObjectDetail();
SysStock sysStocks = repository.GetStockByCartonNo(cartonNo);
List<WmsInstockSn> moveSnCreates = repository.GetInStockSnByOrderNo(orderNo);
if (moveSnCreates.Count > 0)
{
List<WmsInstockSn> WmsInstockSns = repository.GetInStockSnByOrderNoCartonNo(orderNo, cartonNo);
if (WmsInstockSns.Count == 0)
{
rfInfo.type = "FAIL";
rfInfo.message = "订单中不包含此包装条码,不允许此操作!";
return rfInfo;
}
}
if (sysStocks == null)
{
//提示 [M0090105]:该条码不可用,请检查!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码不存在,请检查!";
return rfInfo;
}
else if (sysStocks.Enabled != "Y")
{
//提示 [M0090105]:箱条码已冻结,无法操作!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:箱条码已冻结,无法操作!";
return rfInfo;
}
else if (sysStocks.Status != (int)WmsEnumUtil.StockStatus.WAITINSTOCKED)//待零星入库
{
//提示 [M0090105]:该条码是**状态,无法操作!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码是[" + sysStocks.StockStatus + "]状态,请检查!";
return rfInfo;
}
SysLocate sysLocates = repository.GetLocateInfoByLocateName(locateName);
string locatePartNo1 = sysLocates.PartNo;
string stockPartNo1 = sysStocks.PartNo;
int InLocateCartonNoStatus = 0;
if (sysLocates.LocateType == (int)WmsEnumUtil.LocateType.BASICS_LOCATE)
{
if (locatePartNo1 != stockPartNo1)
{
//提示 此箱码所对应零件与库位零件不匹配!
rfInfo.type = "FAIL";
rfInfo.message = "此箱码所对应零件与库位零件不匹配!";
return rfInfo;
}
InLocateCartonNoStatus = (int)WmsEnumUtil.StockStatus.INSTOCKED;
}
else if (sysLocates.LocateType == (int)WmsEnumUtil.LocateType.MANEUVER_LOCATE)//机动库位
{
List<SysStock> sysStocks3 = repository.GetInStockByLocateName(sysLocates.LocateName);
for (int i = 0; i < sysStocks3.Count; i++)
{
if (sysStocks3[i].PartNo != "" && stockPartNo1 != sysStocks3[i].PartNo)
{
//提示 此箱码所对应零件与库位零件不匹配!
rfInfo.type = "FAIL";
rfInfo.message = "[" + stockPartNo1 + "]该零件号无法入到机动库位,请检查!";
return rfInfo;
}
}
InLocateCartonNoStatus = (int)WmsEnumUtil.StockStatus.INSTOCKED;
}
if (sysLocates.LocateType == (int)WmsEnumUtil.LocateType.NC_LOCATE)
{
InLocateCartonNoStatus = (int)WmsEnumUtil.StockStatus.NC_INSTOCK;
}
if (sysLocates.LocateType == (int)WmsEnumUtil.LocateType.COMBINATION_LOCATE)
{
InLocateCartonNoStatus = (int)WmsEnumUtil.StockStatus.INSTOCKED;
}
List<WmsInstock> WmsInstocks = repository.GetInStockByOrderNo(orderNo);
if (WmsInstocks.Count == 0)
{
rfInfo.type = "FAIL";
rfInfo.message = "[" + orderNo + "]:该订单是未创建或已关闭状态,请检查!";
return rfInfo;
}
List<WmsInstockDetail> WmsInstockDetails = repository.GetInStockDetailByOrderNoPartNo(orderNo, sysStocks.PartNo);
if (WmsInstockDetails.Count == 0)
{
//提示 [M0090105]:该条码是零星入库状态,无法操作!
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码零件号不在订单内!";
return rfInfo;
}
StringBuilder stringBuilder = new StringBuilder(1024);
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
for (int i = 0; i < WmsInstockDetails.Count; i++)
{
int remainNum = Convert.ToInt32(WmsInstockDetails[i].Qty - WmsInstockDetails[i].RecQty);//余数
if (sysStocks.Qty == remainNum)
{
if (WmsInstocks[0].OrderStatus != (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING)//
{
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE wms_instock SET order_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no='" + orderNo + "';");
sqlStrings.Add(stringBuilder.ToString());
}
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE wms_instock_detail SET rec_qty+=" + sysStocks.Qty + ",item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED + " ,update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE ruid='" + WmsInstockDetails[i].Ruid + "';");
sqlStrings.Add(stringBuilder.ToString());
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE sys_stock SET status=" + InLocateCartonNoStatus + ",locate_id=" + sysLocates.LocateId + ",locate_name='" + locateName + "',zone_id=" + sysLocates.ZoneId + ",zone_name='" + sysLocates.ZoneName + "',warehouse_id=" + sysLocates.WarehouseId + ",warehouse_name='" + sysLocates.WarehouseName + "',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE carton_no='" + cartonNo + "';");
sqlStrings.Add(stringBuilder.ToString());
stringBuilder = new StringBuilder(1024);
//更新单据条码表
stringBuilder.Append("UPDATE dbo.wms_instock_sn ");
stringBuilder.Append("SET status = " + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ", ");
stringBuilder.Append(" update_userid = " + loginId + ", ");
stringBuilder.Append(" update_time = CONVERT(VARCHAR(20),GETDATE(),21) ");
stringBuilder.Append("WHERE order_no = '" + orderNo + "' ");
stringBuilder.Append(" AND carton_no = '" + cartonNo + "'; ");
sqlStrings.Add(stringBuilder.ToString());
break;
}
else if (sysStocks.Qty > remainNum)
{
rfInfo.type = "FAIL";
rfInfo.message = "[" + cartonNo + "]:该条码库存大于订单需求数量!";
return rfInfo;
}
else if (sysStocks.Qty < remainNum)
{
if (WmsInstocks[0].OrderStatus != (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING)//
{
//处理中
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE wms_instock SET order_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no='" + orderNo + "';");
sqlStrings.Add(stringBuilder.ToString());
}
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE wms_instock_detail SET rec_qty+=" + sysStocks.Qty + ",item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE ruid='" + WmsInstockDetails[i].Ruid + "';");
sqlStrings.Add(stringBuilder.ToString());
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("UPDATE sys_stock SET status=" + InLocateCartonNoStatus + ",locate_id=" + sysLocates.LocateId + ",locate_name='" + locateName + "',zone_id=" + sysLocates.ZoneId + ",zone_name='" + sysLocates.ZoneName + "',warehouse_id=" + sysLocates.WarehouseId + ",warehouse_name='" + sysLocates.WarehouseName + "',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE carton_no='" + cartonNo + "';");
sqlStrings.Add(stringBuilder.ToString());
stringBuilder = new StringBuilder(1024);
//更新单据条码表
stringBuilder.Append("UPDATE dbo.wms_instock_sn ");
stringBuilder.Append("SET status = " + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ", ");
stringBuilder.Append(" update_userid = " + loginId + ", ");
stringBuilder.Append(" update_time = CONVERT(VARCHAR(20),GETDATE(),21) ");
stringBuilder.Append("WHERE order_no = '" + orderNo + "' ");
stringBuilder.Append(" AND carton_no = '" + cartonNo + "'; ");
sqlStrings.Add(stringBuilder.ToString());
break;
}
}
stringBuilder = new StringBuilder(1024);
stringBuilder.Append("INSERT INTO dbo.sys_stock_trans ");
stringBuilder.Append("( ");
stringBuilder.Append(" trans_code, ");
stringBuilder.Append(" carton_no, ");
stringBuilder.Append(" part_id, ");
stringBuilder.Append(" part_no, ");
stringBuilder.Append(" part_spec, ");
stringBuilder.Append(" src_locate_id, ");
stringBuilder.Append(" src_locate_name, ");
stringBuilder.Append(" dest_locate_id, ");
stringBuilder.Append(" dest_locate_name, ");
stringBuilder.Append(" old_qty, ");
stringBuilder.Append(" new_qty, ");
stringBuilder.Append(" trans_qty, ");
stringBuilder.Append(" old_status, ");
stringBuilder.Append(" new_status, ");
stringBuilder.Append(" unit, ");
stringBuilder.Append(" factory_id, ");
stringBuilder.Append(" factory_code, ");
stringBuilder.Append(" src_erp_warehouse, ");
stringBuilder.Append(" dest_erp_warehouse, ");
stringBuilder.Append(" src_warehouse_id, ");
stringBuilder.Append(" src_warehouse_name, ");
stringBuilder.Append(" dest_warehouse_id, ");
stringBuilder.Append(" dest_warehouse_name, ");
stringBuilder.Append(" src_zone_id, ");
stringBuilder.Append(" src_zone_name, ");
stringBuilder.Append(" dest_zone_id, ");
stringBuilder.Append(" dest_zone_name, ");
stringBuilder.Append(" enabled, ");
stringBuilder.Append(" create_userid, ");
stringBuilder.Append(" create_time, ");
stringBuilder.Append(" update_userid, ");
stringBuilder.Append(" update_time, ");
stringBuilder.Append(" guid ,ref_order_no");
stringBuilder.Append(") ");
stringBuilder.Append("VALUES ");
stringBuilder.Append(" ('" + (int)WmsEnumUtil.TransType.SCATTERED_INSTOCK + "', ");//零星入库
stringBuilder.Append(" '" + sysStocks.CartonNo + "', ");
stringBuilder.Append(" " + sysStocks.PartId + ", ");
stringBuilder.Append(" '" + sysStocks.PartNo + "', ");
stringBuilder.Append(" N'" + sysStocks.PartSpec + "', ");
stringBuilder.Append(" " + sysStocks.LocateId + ", ");//源库位
stringBuilder.Append(" '" + sysStocks.LocateName + "', ");
stringBuilder.Append(" " + sysLocates.LocateId + ", ");//目标库位
stringBuilder.Append(" '" + sysLocates.LocateName + "', ");
stringBuilder.Append(" " + sysStocks.Qty + ",");
stringBuilder.Append(" " + sysStocks.Qty + ",");
stringBuilder.Append(" " + sysStocks.Qty + ",");
stringBuilder.Append(" '" + sysStocks.Status + "', ");
stringBuilder.Append(" '" + (int)WmsEnumUtil.StockStatus.INSTOCKED + "', ");
stringBuilder.Append(" '" + sysStocks.Unit + "', ");
stringBuilder.Append(" " + sysStocks.FactoryId + ", ");
stringBuilder.Append(" '" + sysStocks.FactoryCode + "',");
stringBuilder.Append(" '" + sysStocks.ErpWarehouse + "',");
stringBuilder.Append(" '" + sysStocks.ErpWarehouse + "', ");
stringBuilder.Append(" " + sysStocks.WarehouseId + ", ");
stringBuilder.Append(" '" + sysStocks.WarehouseName + "', ");
stringBuilder.Append(" " + sysStocks.WarehouseId + ", ");
stringBuilder.Append(" '" + sysStocks.WarehouseName + "', ");
stringBuilder.Append(" " + sysStocks.ZoneId + ", ");
stringBuilder.Append(" '" + sysStocks.ZoneName + "', ");
stringBuilder.Append(" " + sysStocks.ZoneId + ", ");
stringBuilder.Append(" '" + sysStocks.ZoneName + "', ");
stringBuilder.Append(" 'Y', ");
stringBuilder.Append(" " + loginId + ", ");
stringBuilder.Append(" CONVERT(VARCHAR(20),GETDATE(),21), ");
stringBuilder.Append(" " + loginId + ", ");
stringBuilder.Append(" CONVERT(VARCHAR(20),GETDATE(),21), ");
stringBuilder.Append(" NEWID() ,");
stringBuilder.Append(" '" + orderNo + "' ");
stringBuilder.Append(" ) ; ");
sqlStrings.Add(stringBuilder.ToString());
int refNum = repository.SQLTransaction(sqlStrings, parameterList);
if (refNum > 0)
{
List<WmsInstock> wmsMoves = repository.GetInStockInfoByOrderNo(orderNo);
if (wmsMoves.Count > 0)
{
List<WmsInstockDetail> wmsMoves1 = repository.GetInStockDetailQtySumByOrderNo(orderNo);
for (int i = 0; i < wmsMoves1.Count; i++)
{
if (wmsMoves1[i].Qty != wmsMoves1[i].RecQty)
{
rfInfo.type = "PASS";
rfInfo.message = "操作成功!请继续扫描箱条码";
rfInfo.wmsObjectDetail = wmsMoves1.ConvertAll(s => (object)s);
return rfInfo;
}
}
int updateStatus = 1;
sqlStrings = new List<string>();
parameterList = new List<DynamicParameters>();
StringBuilder SqlStringBuilder = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
List<WmsInstockDetail> wmsInstockDetails = repository.GetFinishInStockDetailByOrderNo(orderNo);
wmsInstockDetails = wmsInstockDetails.Where(a => a.RecQty > 0).ToList();
if (wmsInstockDetails.Count > 0)
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.WMS_MOVR(ZINSTNO,ZEILE,WERKS,LGORT,UMLGO,MATNR,ERFMG ");
SqlStringBuilder.Append(" ,ERFME,ACTION,ZPOST,ZTIME,SID,RECTIM,SYNFLG ");
SqlStringBuilder.Append(" ,GUID) ");
SqlStringBuilder.Append(" VALUES(@ZINSTNO,@ZEILE,@WERKS,@LGORT,@UMLGO,@MATNR,@ERFMG,@ERFME ");
SqlStringBuilder.Append(" ,@ACTION,@ZPOST,@ZTIME,@SID,@RECTIM,@SYNFLG ");
SqlStringBuilder.Append(" ,@GUID) ");
string sid = Guid.NewGuid().ToString().Replace("-", "");
string sapOrderType = WmsEnumUtil.WmsMovrActionType.M07.ToString();
if ((int)WmsEnumUtil.InStockType.EXCEPTION_IN_STOCK == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M07.ToString();
}
if ((int)WmsEnumUtil.InStockType.RESERVE_IN == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M09.ToString();
}
if ((int)WmsEnumUtil.InStockType.REWORK_IN == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M10.ToString();
}
for (int i = 0; i < wmsInstockDetails.Count; i++)
{
SysPart sysPart = repository.GetPartNOInfoByPartNo(wmsInstockDetails[i].PartNo);
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@ZINSTNO", wmsInstockDetails[i].OrderNo);//盘点凭证号
parameters.Add("@ZEILE", wmsInstockDetails[i].ItemNo);//行号
parameters.Add("@WERKS", wmsInstockDetails[i].FactoryCode);//工厂
parameters.Add("@LGORT", "");//发出库存地点
parameters.Add("@UMLGO", wmsInstockDetails[i].DestErpWarehouse);//接收库存地点
parameters.Add("@MATNR", wmsInstockDetails[i].PartNo);//物料编码
parameters.Add("@ERFMG", wmsInstockDetails[i].RecQty);//转储数量
if (sysPart == null)
{
parameters.Add("@ERFME", "");//计量单位
}
else
{
parameters.Add("@ERFME", sysPart.Unit);//计量单位
}
parameters.Add("@ACTION", sapOrderType); //M07:零星入库
parameters.Add("@ZPOST", DateTime.Now.ToString("yyyyMMdd"));//交易日期
parameters.Add("@ZTIME", DateTime.Now.ToString("HHmmss"));//交易时间
parameters.Add("@SID", sid);
parameters.Add("@RECTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@SYNFLG", "N");
parameters.Add("@GUID", Guid.NewGuid().ToString());
parameterList.Add(parameters);
}
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE wms_instock SET order_status='40',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no=@orderNo;");
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);
parameterList.Add(parameters);
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE wms_instock_detail SET item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no=@orderNo;");
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);
parameterList.Add(parameters);
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE wms_instock_sn SET status = @status,update_userid=@updateUserid,update_time=CONVERT(VARCHAR(30),GETDATE(),21) ");
SqlStringBuilder.Append("WHERE order_no=@orderNo and status = @snStatus");
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);
parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.SUBMITED);
parameters.Add("@snStatus", (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED);
parameters.Add("@updateUserid", loginId);
parameterList.Add(parameters);
updateStatus = repository.SQLTransaction(sqlStrings, parameterList);
}
if (updateStatus > 0)
{
rfInfo.type = "PASS";
rfInfo.message = "订单操作完成!";
}
else
{
rfInfo.type = "FAIL";
rfInfo.message = "订单操作操作失败!请检查";
}
}
else
{
rfInfo.type = "FAIL";
rfInfo.message = "未查询到数据,请检查!";
}
}
else
{
//提示 操作失败!
rfInfo.type = "FAIL";
rfInfo.message = "未查询到数据,请检查!";
}
return rfInfo;
}
public SetObjectDetail SetScatteredInStockOrderNoSubmit(string orderNo, string loginId)
{
List<string> sqlStrings = new List<string>();
List<DynamicParameters> parameterList = new List<DynamicParameters>();
SetObjectDetail rfInfo = new SetObjectDetail();//返回消息
StringBuilder SqlStringBuilder = new StringBuilder(1024);
DynamicParameters parameters = new DynamicParameters();
int updateStatus = 1;
List<WmsInstockDetail> wmsInstockDetails = repository.GetFinishInStockDetailByOrderNo(orderNo);
wmsInstockDetails = wmsInstockDetails.Where(a => a.RecQty > 0).ToList();
if (wmsInstockDetails.Count > 0)
{
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("INSERT INTO dbo.WMS_MOVR(ZINSTNO,ZEILE,WERKS,LGORT,UMLGO,MATNR,ERFMG ");
SqlStringBuilder.Append(" ,ERFME,ACTION,ZPOST,ZTIME,SID,RECTIM,SYNFLG ");
SqlStringBuilder.Append(" ,GUID) ");
SqlStringBuilder.Append(" VALUES(@ZINSTNO,@ZEILE,@WERKS,@LGORT,@UMLGO,@MATNR,@ERFMG,@ERFME ");
SqlStringBuilder.Append(" ,@ACTION,@ZPOST,@ZTIME,@SID,@RECTIM,@SYNFLG ");
SqlStringBuilder.Append(" ,@GUID) ");
string sid = Guid.NewGuid().ToString().Replace("-", "");
string sapOrderType = WmsEnumUtil.WmsMovrActionType.M07.ToString();
if ((int)WmsEnumUtil.InStockType.EXCEPTION_IN_STOCK == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M07.ToString();
}
if ((int)WmsEnumUtil.InStockType.RESERVE_IN == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M09.ToString();
}
if ((int)WmsEnumUtil.InStockType.REWORK_IN == wmsInstockDetails[0].OrderType)
{
sapOrderType = WmsEnumUtil.WmsMovrActionType.M10.ToString();
}
for (int i = 0; i < wmsInstockDetails.Count; i++)
{
SysPart sysPart = repository.GetPartNOInfoByPartNo(wmsInstockDetails[i].PartNo);
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@ZINSTNO", wmsInstockDetails[i].OrderNo);//盘点凭证号
parameters.Add("@ZEILE", wmsInstockDetails[i].ItemNo);//行号
parameters.Add("@WERKS", wmsInstockDetails[i].FactoryCode);//工厂
parameters.Add("@LGORT", "");//发出库存地点
parameters.Add("@UMLGO", wmsInstockDetails[i].DestErpWarehouse);//接收库存地点
parameters.Add("@MATNR", wmsInstockDetails[i].PartNo);//物料编码
parameters.Add("@ERFMG", wmsInstockDetails[i].RecQty);//转储数量
if (sysPart == null)
{
parameters.Add("@ERFME", "");//计量单位
}
else
{
parameters.Add("@ERFME", sysPart.Unit);//计量单位
}
parameters.Add("@ACTION", sapOrderType); //M07:零星入库
parameters.Add("@ZPOST", DateTime.Now.ToString("yyyyMMdd"));//交易日期
parameters.Add("@ZTIME", DateTime.Now.ToString("HHmmss"));//交易时间
parameters.Add("@SID", sid);
parameters.Add("@RECTIM", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
parameters.Add("@SYNFLG", "N");
parameters.Add("@GUID", Guid.NewGuid().ToString());
parameterList.Add(parameters);
}
//SqlStringBuilder = new StringBuilder(1024);
//SqlStringBuilder.Append("UPDATE wms_instock SET order_status=" + (int)WmsEnumUtil.MoveOrderStatus.COMPLETED + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no=@orderNo;");
//sqlStrings.Add(SqlStringBuilder.ToString());
//parameters = new DynamicParameters();
//parameters.Add("@orderNo", orderNo);
//parameterList.Add(parameters);
//SqlStringBuilder = new StringBuilder(1024);
//SqlStringBuilder.Append("UPDATE wms_instock_detail SET item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE order_no=@orderNo;");
//sqlStrings.Add(SqlStringBuilder.ToString());
//parameters = new DynamicParameters();
//parameters.Add("@orderNo", orderNo);
//parameterList.Add(parameters);
SqlStringBuilder = new StringBuilder(1024);
SqlStringBuilder.Append("UPDATE wms_instock_sn SET status = @status,update_userid=@updateUserid,update_time=CONVERT(VARCHAR(30),GETDATE(),21) ");
SqlStringBuilder.Append("WHERE order_no=@orderNo and status = @snStatus");
sqlStrings.Add(SqlStringBuilder.ToString());
parameters = new DynamicParameters();
parameters.Add("@orderNo", orderNo);
parameters.Add("@status", (int)WmsEnumUtil.MoveOrderSnStatus.SUBMITED);
parameters.Add("@snStatus", (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED);
parameters.Add("@updateUserid", loginId);
parameterList.Add(parameters);
updateStatus = repository.SQLTransaction(sqlStrings, parameterList);
}
else
{
updateStatus = 0;
}
if (updateStatus > 0)
{
rfInfo.type = "PASS";
rfInfo.message = "[" + orderNo + "]订单已提交,请重新选择单据";
}
else
{
rfInfo.type = "FAIL";
rfInfo.message = "未查询到需要提交的数据,请检查!";
}
return rfInfo;
}
}
}