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 { /// /// 零星出库 /// public class ScatteredOutStockService : BaseService, IScatteredOutStockService { private readonly IScatteredOutStockRepository repository; public ScatteredOutStockService(IScatteredOutStockRepository _repository) : base(_repository) { repository = _repository; } public SetObjectDetail GetScatteredOutStockOrderList(string orderNo) { SetObjectDetail rfInfo = new SetObjectDetail();//返回消息 List wmsMoves = repository.GetScatteredOutStockOrderList(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 GetScatteredOutStockOrderListByOrderNo(string orderNo) { SetObjectDetail rfInfo = new SetObjectDetail(); List wmsMoves = repository.GetScatteredOutStockOrderListByOrderNo(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 CheckStockByCartonAlocate(string cartonNo, string orderNo, string loginId) { SetObjectDetail rfInfo = new SetObjectDetail(); SysStock sysStocksIf = repository.GetStockByCartonNoIf(cartonNo); if (sysStocksIf == null) { //提示 [M0090105]:该条码不可用,请检查! rfInfo.type = "FAIL"; rfInfo.message = "[" + cartonNo + "]:该条码不存在,请检查!"; return rfInfo; } List WmsOutstocks = repository.GetOutStockByOrderNo(orderNo); if (WmsOutstocks.Count == 0) { rfInfo.type = "FAIL"; rfInfo.message = "[" + orderNo + "]:该订单是未创建或已关闭状态,请检查!"; return rfInfo; } if (sysStocksIf.Enabled != "Y") { //提示 [M0090105]:箱条码已冻结,无法操作! rfInfo.type = "FAIL"; if (sysStocksIf.CartonType == 0) { rfInfo.message = "[" + cartonNo + "]:该箱条码已冻结,无法操作!"; } else { rfInfo.message = "[" + cartonNo + "]:该台车已冻结,无法操作!"; } return rfInfo; } if (sysStocksIf.Status != (int)WmsEnumUtil.StockStatus.INSTOCKED && sysStocksIf.Status != (int)WmsEnumUtil.StockStatus.ONLINED) { //提示 [M0090105]:该条码是**状态,无法操作! rfInfo.type = "FAIL"; if (sysStocksIf.CartonType == 0) { rfInfo.message = "[" + cartonNo + "]:该条码不是已上架/已上线状态,请检查!"; } else { rfInfo.message = "[" + cartonNo + "]:该台车不是已上架/已上线状态,请检查!"; } return rfInfo; } List sqlStrings = new List(); List parameterList = new List(); StringBuilder stringBuilder = new StringBuilder(1024); if (sysStocksIf.CartonType == 0) { SysStock sysStocks = repository.GetStockByCartonNo(cartonNo); //箱条码零星出库 List outstockDetailsErp = repository.GetOutstockByOrderNoSrcErp(orderNo, sysStocks.ErpWarehouse); if (outstockDetailsErp.Count == 0) { rfInfo.type = "FAIL"; rfInfo.message = "[" + cartonNo + "]:该条码对应库存地不在订单内!"; return rfInfo; } List WmsOutstockDetails = repository.GetOutstockByOrderNoPartNo(orderNo, sysStocks.PartNo); if (WmsOutstockDetails.Count == 0) { //提示 [M0090105]:该条码零件号不在单据内! rfInfo.type = "FAIL"; rfInfo.message = "[" + cartonNo + "]:该条码零件号不在订单内!"; return rfInfo; } for (int i = 0; i < WmsOutstockDetails.Count; i++) { int remainNum = Convert.ToInt32(WmsOutstockDetails[i].Qty - WmsOutstockDetails[i].OutQty);//余数 if (sysStocks.Qty == remainNum || sysStocks.Qty < remainNum) { if (WmsOutstocks[0].OrderStatus != (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING)// { //已完成 stringBuilder = new StringBuilder(1024); stringBuilder.Append("UPDATE wms_outstock 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_outstock_detail SET out_qty+=" + sysStocks.Qty + ",item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED + " ,update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE ruid='" + WmsOutstockDetails[i].Ruid + "';"); sqlStrings.Add(stringBuilder.ToString()); stringBuilder = new StringBuilder(1024); stringBuilder.Append("UPDATE sys_stock SET status=" + (int)WmsEnumUtil.StockStatus.OUTSTOCKED + ",locate_id=0,locate_name='',zone_id=0,zone_name='',warehouse_id=0,warehouse_name='',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE carton_no='" + cartonNo + "';"); sqlStrings.Add(stringBuilder.ToString()); stringBuilder = new StringBuilder(1024); stringBuilder.Append("INSERT INTO dbo.wms_outstock_sn "); stringBuilder.Append("( "); stringBuilder.Append(" order_no, "); stringBuilder.Append(" item_no, "); stringBuilder.Append(" part_id, "); stringBuilder.Append(" part_no, "); stringBuilder.Append(" part_spec, "); stringBuilder.Append(" carton_no, "); stringBuilder.Append(" qty, "); stringBuilder.Append(" unit, "); stringBuilder.Append(" status, "); stringBuilder.Append(" factory_id, "); stringBuilder.Append(" factory_code, "); stringBuilder.Append(" enabled, "); stringBuilder.Append(" create_userid, "); stringBuilder.Append(" create_time, "); stringBuilder.Append(" guid "); stringBuilder.Append(") "); stringBuilder.Append("VALUES "); stringBuilder.Append("( N'" + orderNo + "', "); stringBuilder.Append(" '" + WmsOutstockDetails[i].ItemNo + "',"); stringBuilder.Append(" " + WmsOutstockDetails[i].PartId + ", "); stringBuilder.Append(" N'" + WmsOutstockDetails[i].PartNo + "',"); stringBuilder.Append(" N'" + WmsOutstockDetails[i].PartSpec + "',"); stringBuilder.Append(" '" + cartonNo + "',"); stringBuilder.Append(" " + sysStocks.Qty + ", "); stringBuilder.Append(" '" + sysStocks.Unit + "',"); stringBuilder.Append(" " + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ",");//已生成 stringBuilder.Append(" " + sysStocks.FactoryId + ", "); stringBuilder.Append(" N'" + sysStocks.FactoryCode + "', "); stringBuilder.Append(" 'Y', "); stringBuilder.Append(" " + loginId + " , "); stringBuilder.Append(" CONVERT(VARCHAR(20),GETDATE(),21), "); stringBuilder.Append(" newid()"); stringBuilder.Append(" );"); sqlStrings.Add(stringBuilder.ToString()); break; } else if (sysStocks.Qty > remainNum) { if (WmsOutstockDetails.Count - 1 == i) { rfInfo.type = "UpdateNum" + Convert.ToInt32(sysStocks.Qty); rfInfo.message = "[" + cartonNo + "]:该条码库存大于订单需求数量!"; return rfInfo; } } } #region 事务 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_OUTSTOCK + "', ");//零星出库 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(" 0, ");//目标库位 stringBuilder.Append(" '', "); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" '" + sysStocks.Status + "', "); stringBuilder.Append(" '" + (int)WmsEnumUtil.StockStatus.OUTSTOCKED + "', "); stringBuilder.Append(" '" + sysStocks.Unit + "', "); stringBuilder.Append(" " + sysStocks.FactoryId + ", "); stringBuilder.Append(" '" + sysStocks.FactoryCode + "',"); stringBuilder.Append(" '" + sysStocks.ErpWarehouse + "',"); stringBuilder.Append(" '', ");//目标ERP库存地 stringBuilder.Append(" " + sysStocks.WarehouseId + ", "); stringBuilder.Append(" '" + sysStocks.WarehouseName + "', "); stringBuilder.Append(" 0, "); stringBuilder.Append(" '', ");//目标仓库 stringBuilder.Append(" " + sysStocks.ZoneId + ", "); stringBuilder.Append(" '" + sysStocks.ZoneName + "', "); stringBuilder.Append(" 0, ");//目标库区 stringBuilder.Append(" '', "); 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()); #endregion } else { //料架车 零星出库 List sysStock = repository.GetRKStockByCartonNo(cartonNo); if (sysStock.Count == 0) { //提示 [M0090105]:该条码零件号不在单据内! rfInfo.type = "FAIL"; rfInfo.message = "[" + cartonNo + "]:该台车内无零件号!"; return rfInfo; } for (int z = 0; z < sysStock.Count; z++) { SysStock sysStocks = repository.GetStockByCartonNo(sysStock[z].CartonNo); List WmsOutstockDetails = repository.GetOutstockByOrderNoPartNo(orderNo, sysStocks.PartNo); if (WmsOutstockDetails.Count == 0) { //提示 [M0090105]:该条码零件号不在单据内! rfInfo.type = "FAIL"; rfInfo.message = "[" + cartonNo + "]:该台车[" + sysStocks.PartNo + "]零件号不在订单内!"; return rfInfo; } for (int i = 0; i < WmsOutstockDetails.Count; i++) { int remainNum = Convert.ToInt32(WmsOutstockDetails[i].Qty - WmsOutstockDetails[i].OutQty);//余数 if (sysStocks.Qty == remainNum || sysStocks.Qty < remainNum) { if (WmsOutstocks[0].OrderStatus != (int)WmsEnumUtil.MoveOrderDetailStatus.BATCHING)// { //已完成 stringBuilder = new StringBuilder(1024); stringBuilder.Append("UPDATE wms_outstock 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_outstock_detail SET out_qty+=" + sysStocks.Qty + ",item_status=" + (int)WmsEnumUtil.MoveOrderDetailStatus.COMPLETED + " ,update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE ruid='" + WmsOutstockDetails[i].Ruid + "';"); sqlStrings.Add(stringBuilder.ToString()); stringBuilder = new StringBuilder(1024); stringBuilder.Append("UPDATE sys_stock SET status=" + (int)WmsEnumUtil.StockStatus.OUTSTOCKED + ",locate_id=0,locate_name='',zone_id=0,zone_name='',warehouse_id=0,warehouse_name='',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE carton_no='" + sysStocks.CartonNo + "';"); sqlStrings.Add(stringBuilder.ToString()); stringBuilder = new StringBuilder(1024); stringBuilder.Append("UPDATE wms_rack_package SET enabled='N',update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE carton_no='" + sysStocks.CartonNo + "';"); sqlStrings.Add(stringBuilder.ToString()); stringBuilder = new StringBuilder(1024); stringBuilder.Append("INSERT INTO dbo.wms_outstock_sn "); stringBuilder.Append("( "); stringBuilder.Append(" order_no, "); stringBuilder.Append(" item_no, "); stringBuilder.Append(" part_id, "); stringBuilder.Append(" part_no, "); stringBuilder.Append(" part_spec, "); stringBuilder.Append(" carton_no, "); stringBuilder.Append(" qty, "); stringBuilder.Append(" unit, "); stringBuilder.Append(" status, "); stringBuilder.Append(" factory_id, "); stringBuilder.Append(" factory_code, "); stringBuilder.Append(" enabled, "); stringBuilder.Append(" create_userid, "); stringBuilder.Append(" create_time, "); stringBuilder.Append(" guid "); stringBuilder.Append(") "); stringBuilder.Append("VALUES "); stringBuilder.Append("( N'" + orderNo + "', "); stringBuilder.Append(" '" + WmsOutstockDetails[i].ItemNo + "',"); stringBuilder.Append(" " + WmsOutstockDetails[i].PartId + ", "); stringBuilder.Append(" N'" + WmsOutstockDetails[i].PartNo + "',"); stringBuilder.Append(" N'" + WmsOutstockDetails[i].PartSpec + "',"); stringBuilder.Append(" '" + cartonNo + "',"); stringBuilder.Append(" " + sysStocks.Qty + ", "); stringBuilder.Append(" '" + sysStocks.Unit + "',"); stringBuilder.Append(" " + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ",");//已创建 stringBuilder.Append(" " + sysStocks.FactoryId + ", "); stringBuilder.Append(" N'" + sysStocks.FactoryCode + "', "); stringBuilder.Append(" 'Y', "); stringBuilder.Append(" " + loginId + " , "); stringBuilder.Append(" CONVERT(VARCHAR(20),GETDATE(),21), "); stringBuilder.Append(" newid()"); stringBuilder.Append(" );"); sqlStrings.Add(stringBuilder.ToString()); break; } else if (sysStocks.Qty > remainNum) { if (WmsOutstockDetails.Count - 1 == i) { rfInfo.type = "UpdateRackNum"; rfInfo.message = "[" + cartonNo + "]:该条码库存大于订单需求数量!"; return rfInfo; } } } #region 事务 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_OUTSTOCK + "', ");//零星出库 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(" 0, ");//目标库位 stringBuilder.Append(" '', "); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" " + sysStocks.Qty + ","); stringBuilder.Append(" '" + sysStocks.Status + "', "); stringBuilder.Append(" '" + (int)WmsEnumUtil.StockStatus.OUTSTOCKED + "', "); stringBuilder.Append(" '" + sysStocks.Unit + "', "); stringBuilder.Append(" " + sysStocks.FactoryId + ", "); stringBuilder.Append(" '" + sysStocks.FactoryCode + "',"); stringBuilder.Append(" '" + sysStocks.ErpWarehouse + "',"); stringBuilder.Append(" '', ");//目标ERP库存地 stringBuilder.Append(" " + sysStocks.WarehouseId + ", "); stringBuilder.Append(" '" + sysStocks.WarehouseName + "', "); stringBuilder.Append(" 0, "); stringBuilder.Append(" '', ");//目标仓库 stringBuilder.Append(" " + sysStocks.ZoneId + ", "); stringBuilder.Append(" '" + sysStocks.ZoneName + "', "); stringBuilder.Append(" 0, ");//目标库区 stringBuilder.Append(" '', "); 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()); #endregion } } int refNum = repository.SQLTransaction(sqlStrings, parameterList); if (refNum > 0) { List wmsMoves = repository.GetOutstockByOrderNo(orderNo); if (wmsMoves.Count > 0) { List wmsMoves1 = repository.GetOutstockDetailByOrderNo(orderNo); for (int i = 0; i < wmsMoves1.Count; i++) { if (wmsMoves1[i].Qty != wmsMoves1[i].OutQty) { rfInfo.type = "PASS"; rfInfo.message = "操作成功!请继续扫描箱条码"; rfInfo.wmsObjectDetail = wmsMoves1.ConvertAll(s => (object)s); return rfInfo; } } int updateStatus = 1; sqlStrings = new List(); parameterList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); List wmsOutstockDetails = repository.GetFinishOutStockDetailByOrderNo(orderNo); wmsOutstockDetails = wmsOutstockDetails.Where(a => a.OutQty > 0).ToList(); if (wmsOutstockDetails.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.M06.ToString(); if ((int)WmsEnumUtil.OutStockType.EXCEPTION_OUT_STOCK == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M06.ToString(); } if ((int)WmsEnumUtil.OutStockType.RESERVE_OUT == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M08.ToString(); } if ((int)WmsEnumUtil.OutStockType.REWORK_OUT == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M12.ToString(); } for (int i = 0; i < wmsOutstockDetails.Count; i++) { SysPart sysPart = repository.GetPartNOInfoByPartNo(wmsOutstockDetails[i].PartNo); sqlStrings.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@ZINSTNO", wmsOutstockDetails[i].OrderNo);//盘点凭证号 parameters.Add("@ZEILE", wmsOutstockDetails[i].ItemNo);//行号 parameters.Add("@WERKS", wmsOutstockDetails[i].FactoryCode);//工厂 parameters.Add("@LGORT", wmsOutstockDetails[i].SrcErpWarehouse);//发出库存地点 parameters.Add("@UMLGO", "");//接收库存地点 parameters.Add("@MATNR", wmsOutstockDetails[i].PartNo);//物料编码 parameters.Add("@ERFMG", wmsOutstockDetails[i].OutQty);//转储数量 if (sysPart == null) { parameters.Add("@ERFME", "");//计量单位 } else { parameters.Add("@ERFME", sysPart.Unit);//计量单位 } parameters.Add("@ACTION", sapOrderType); //M06:零星出库 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_outstock 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_outstock_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_outstock_sn SET status=" + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ",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_outstock_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 SetScatteredOutStockOrderNoSubmit(string orderNo, string loginId) { SetObjectDetail rfInfo = new SetObjectDetail();//返回消息 List sqlStrings = new List(); List parameterList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); int updateStatus = 1; List wmsOutstockDetails = repository.GetFinishOutStockDetailByOrderNo(orderNo); wmsOutstockDetails = wmsOutstockDetails.Where(a => a.OutQty > 0).ToList(); if (wmsOutstockDetails.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.M06.ToString(); if ((int)WmsEnumUtil.OutStockType.EXCEPTION_OUT_STOCK == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M06.ToString(); } if ((int)WmsEnumUtil.OutStockType.RESERVE_OUT == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M08.ToString(); } if ((int)WmsEnumUtil.OutStockType.REWORK_OUT == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M12.ToString(); } for (int i = 0; i < wmsOutstockDetails.Count; i++) { SysPart sysPart = repository.GetPartNOInfoByPartNo(wmsOutstockDetails[i].PartNo); sqlStrings.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@ZINSTNO", wmsOutstockDetails[i].OrderNo); parameters.Add("@ZEILE", wmsOutstockDetails[i].ItemNo);//行号 parameters.Add("@WERKS", wmsOutstockDetails[i].FactoryCode);//工厂 parameters.Add("@LGORT", wmsOutstockDetails[i].SrcErpWarehouse);//发出库存地点 parameters.Add("@UMLGO", "");//接收库存地点 parameters.Add("@MATNR", wmsOutstockDetails[i].PartNo);//物料编码 parameters.Add("@ERFMG", wmsOutstockDetails[i].OutQty);//转储数量 if (sysPart == null) { parameters.Add("@ERFME", "");//计量单位 } else { parameters.Add("@ERFME", sysPart.Unit);//计量单位 } parameters.Add("@ACTION", sapOrderType); //M06:零星出库 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_outstock 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_outstock_detail SET item_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); //List outStockSns = repository.GetFinishOutStockSnByOrderNo(orderNo); //for (int i = 0; i < outStockSns.Count; i++) //{ // SqlStringBuilder = new StringBuilder(1024); // SqlStringBuilder.Append("UPDATE wms_outstock_sn SET status=" + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ",update_userid=" + loginId + ",update_time=CONVERT(VARCHAR(20),GETDATE(),21) WHERE ruid=@ruid;"); // sqlStrings.Add(SqlStringBuilder.ToString()); // parameters = new DynamicParameters(); // parameters.Add("@ruid", outStockSns[i].Ruid); // parameterList.Add(parameters); //} SqlStringBuilder = new StringBuilder(1024); SqlStringBuilder.Append("UPDATE wms_outstock_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; } public SetObjectDetail getProdcuteCode(string prodcuteCode, string orderNo, string loginId, string rackCode) { SetObjectDetail rfInfo = new SetObjectDetail(); SysStock wmsMoves = repository.getProdcuteCode(prodcuteCode, orderNo, loginId, rackCode); if (wmsMoves != null) { if (wmsMoves.Enabled != "Y") { rfInfo.type = "FAIL"; rfInfo.message = "[" + prodcuteCode + "]:该条码被冻结,请检查!"; return rfInfo; } if (wmsMoves.Status != (int)WmsEnumUtil.StockStatus.INSTOCKED && wmsMoves.Status != (int)WmsEnumUtil.StockStatus.ONLINED) { rfInfo.type = "FAIL"; rfInfo.message = "[" + prodcuteCode + "]:该条码不是已上架/已上线状态,请检查!"; return rfInfo; } rfInfo.type = "PASS" + Convert.ToInt32(wmsMoves.Qty); rfInfo.message = "成功"; return rfInfo; } else { rfInfo.type = "FAIL"; rfInfo.message = "未查询到数据,请检查!"; return rfInfo; } } public SetObjectDetail getoutStock(string orderNo, string cartonNo, string rackCode, string prodcuteCode, string codeNum, string loginId) { SetObjectDetail rfInfo = new SetObjectDetail(); SysStock wmsMoves = new SysStock(); List returnStock = new List(); if (cartonNo != "") { wmsMoves = repository.getoutStock(orderNo, cartonNo, codeNum, loginId); List WmsOutstockDetails = repository.GetOutstockByOrderNoPartNo(orderNo, wmsMoves.PartNo); if (WmsOutstockDetails.Count > 0) { if (Convert.ToInt32(codeNum) > (WmsOutstockDetails[0].Qty - WmsOutstockDetails[0].OutQty)) { rfInfo.type = "FALL"; rfInfo.message = "数量超出订单需求,请检查!"; return rfInfo; } } List sysStocks = new List(); sysStocks.Add(wmsMoves); returnStock = repository.CheckMaterialSplit(sysStocks, Convert.ToInt32(codeNum), loginId, 1, orderNo, WmsOutstockDetails); } if (prodcuteCode != "") { wmsMoves = repository.getProdcuteCode(prodcuteCode, orderNo, loginId, rackCode); List WmsOutstockDetails = repository.GetOutstockByOrderNoPartNo(orderNo, wmsMoves.PartNo); if (WmsOutstockDetails.Count > 0) { if (Convert.ToInt32(codeNum) > (WmsOutstockDetails[0].Qty - WmsOutstockDetails[0].OutQty)) { rfInfo.type = "FALL"; rfInfo.message = "数量超出订单需求,请检查!"; return rfInfo; } } List sysStocks = new List(); sysStocks.Add(wmsMoves); returnStock = repository.CheckMaterialSplit(sysStocks, Convert.ToInt32(codeNum), loginId, 1, orderNo, WmsOutstockDetails); } if (returnStock.Count > 0) { List wmsMoves2 = repository.GetOutstockByOrderNo(orderNo); if (wmsMoves2.Count > 0) { List wmsMoves1 = repository.GetOutstockDetailByOrderNo(orderNo); for (int i = 0; i < wmsMoves1.Count; i++) { if (wmsMoves1[i].Qty != wmsMoves1[i].OutQty) { rfInfo.type = "PASS"; rfInfo.message = "操作成功!请继续扫描箱条码"; rfInfo.wmsObjectDetail = wmsMoves1.ConvertAll(s => (object)s); return rfInfo; } } int updateStatus = 1; List sqlStrings = new List(); List parameterList = new List(); StringBuilder SqlStringBuilder = new StringBuilder(1024); DynamicParameters parameters = new DynamicParameters(); List wmsOutstockDetails = repository.GetFinishOutStockDetailByOrderNo(orderNo); wmsOutstockDetails = wmsOutstockDetails.Where(a => a.OutQty > 0).ToList(); if (wmsOutstockDetails.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.M06.ToString(); if ((int)WmsEnumUtil.OutStockType.EXCEPTION_OUT_STOCK == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M06.ToString(); } if ((int)WmsEnumUtil.OutStockType.RESERVE_OUT == wmsOutstockDetails[0].OrderType) { sapOrderType = WmsEnumUtil.WmsMovrActionType.M08.ToString(); } //if ((int)WmsEnumUtil.OutStockType.REWORK_OUT == wmsOutstockDetails[0].OrderType) //{ // sapOrderType = WmsEnumUtil.WmsMovrActionType.M12.ToString(); //} for (int i = 0; i < wmsOutstockDetails.Count; i++) { SysPart sysPart = repository.GetPartNOInfoByPartNo(wmsOutstockDetails[i].PartNo); sqlStrings.Add(SqlStringBuilder.ToString()); parameters = new DynamicParameters(); parameters.Add("@ZINSTNO", wmsOutstockDetails[i].OrderNo);//零星出库订单号 parameters.Add("@ZEILE", wmsOutstockDetails[i].ItemNo);//行号 parameters.Add("@WERKS", wmsOutstockDetails[i].FactoryCode);//工厂 parameters.Add("@LGORT", wmsOutstockDetails[i].SrcErpWarehouse);//发出库存地点 parameters.Add("@UMLGO", "");//接收库存地点 parameters.Add("@MATNR", wmsOutstockDetails[i].PartNo);//物料编码 parameters.Add("@ERFMG", wmsOutstockDetails[i].OutQty);//转储数量 if (sysPart == null) { parameters.Add("@ERFME", "");//计量单位 } else { parameters.Add("@ERFME", sysPart.Unit);//计量单位 } parameters.Add("@ACTION", sapOrderType); //M06:零星出库 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_outstock 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_outstock_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_outstock_sn SET status=" + (int)WmsEnumUtil.MoveOrderSnStatus.PROCESSED + ",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_outstock_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; } } }