/// <summary> /// /// </summary> /// <param name="info"></param> /// <returns></returns> public long InsertInfo(WarehouseInfo info) { ///仓库代码①、仓库名称②不允许重复,且必填,单字段进行全表校验 int cnt = dal.GetCounts("[WAREHOUSE] = N'" + info.Warehouse + "'"); if (cnt > 0) { throw new Exception("MC:0x00000260");///仓库代码重复 } cnt = dal.GetCounts("[WAREHOUSE_NAME] = N'" + info.WarehouseName + "'"); if (cnt > 0) { throw new Exception("MC:0x00000160");///仓库名称重复 } ///如选定仓库类型为外部仓库VMI时,新增或更新供应商信息中的储运供应商 new SupplierBLL().SyncSupplierByWarehouse(info, info.CreateUser); if (info.WarehouseType == (int)WarehouseTypeConstants.VMI) { var zoneInfo = new ZonesInfo() { ZoneNo = info.Warehouse, ZoneName = info.WarehouseName, Plant = info.Plant, WmNo = info.Warehouse, CreateUser = info.CreateUser, CreateDate = DateTime.Now, Fid = Guid.NewGuid(), ValidFlag = true, }; new ZonesBLL().InsertInfo(zoneInfo); } return(dal.Add(info)); }
/// <summary> /// /// </summary> /// <param name="fields"></param> /// <param name="id"></param> /// <returns></returns> public bool UpdateInfo(string fields, long id) { ZonesInfo info = dal.GetInfo(id); if (info == null) { throw new Exception("MC:0x00000084");///数据错误 } ///存储区名称 info.ZoneName = CommonBLL.GetFieldValue(fields, "ZONE_NAME"); ///仓库代码 info.WmNo = CommonBLL.GetFieldValue(fields, "WM_NO"); WarehouseInfo warehouseInfo = new WarehouseDAL().GetWarehouseInfo(info.WmNo); if (warehouseInfo == null) { throw new Exception("MC:0x00000230");///仓库信息不存在 } ///是否结算 string settlement_flag = CommonBLL.GetFieldValue(fields, "SETTLEMENT_FLAG"); if (bool.TryParse(settlement_flag, out bool bool_settlement_flag)) { info.Settlementflag = bool_settlement_flag; } ///SAP库存地点 info.StockPlaceNo = CommonBLL.GetFieldValue(fields, "STOCK_PLACE_NO"); ///允许存储区代码在不同的仓库中重复使用 string allow_zoneno_repeat_at_different_warehouse = new ConfigDAL().GetValueByCode("ALLOW_ZONENO_REPEAT_AT_DIFFERENT_WAREHOUSE"); ///数据校验 ValidInfo(info, allow_zoneno_repeat_at_different_warehouse); return(dal.UpdateInfo(fields, id) > 0 ? true : false); }
/// <summary> /// /// </summary> /// <param name="info"></param> /// <returns></returns> public long InsertInfo(ZonesInfo info) { WarehouseInfo warehouseInfo = new WarehouseDAL().GetWarehouseInfo(info.WmNo); if (warehouseInfo == null) { throw new Exception("MC:0x00000230");///仓库信息不存在 } ///允许存储区代码在不同的仓库中重复使用 string allow_zoneno_repeat_at_different_warehouse = new ConfigDAL().GetValueByCode("ALLOW_ZONENO_REPEAT_AT_DIFFERENT_WAREHOUSE"); ///数据校验 ValidInfo(info, allow_zoneno_repeat_at_different_warehouse); return(dal.Add(info)); }
/// <summary> /// 数据校验 /// </summary> /// <param name="info"></param> /// <param name="allow_zoneno_repeat_at_different_warehouse"></param> private void ValidInfo(ZonesInfo info, string allow_zoneno_repeat_at_different_warehouse) { if (string.IsNullOrEmpty(info.ZoneNo)) { throw new Exception("MC:0x00000527");///存储区代码不能为空 } if (string.IsNullOrEmpty(info.WmNo)) { throw new Exception("MC:0x00000528");///仓库代码不能为空 } string wmNoCondition = string.Empty; if (!string.IsNullOrEmpty(allow_zoneno_repeat_at_different_warehouse) && allow_zoneno_repeat_at_different_warehouse.ToLower() == "true") { wmNoCondition = "and [WM_NO] = N'" + info.WmNo + "' "; } ///存储区代码①不允许重复,单字段进行全表校 int cnt = dal.GetCounts("[ZONE_NO] = N'" + info.ZoneNo + "' " + wmNoCondition); if (cnt > 0) { throw new Exception("MC:0x00000162");///存储区代码重复 } if (string.IsNullOrEmpty(info.ZoneName)) { throw new Exception("MC:0x00000739");///存储区名称不能为空 } ///存储区名称②在同一仓库范围下不允许重复 cnt = dal.GetCounts("[ZONE_NAME] = N'" + info.ZoneName + "' " + wmNoCondition); if (cnt > 0) { throw new Exception("MC:0x00000161");///存储区名称重复 } if (info.Settlementflag.GetValueOrDefault() && string.IsNullOrEmpty(info.StockPlaceNo)) { throw new Exception("MC:0x00000218");///结算存储区的库存地点不能为空 } }
/// <summary> /// 同步 /// </summary> /// <param name="loginUser"></param> public static void Sync(string loginUser) { ///获取没有处理的送货单数据 List <SrmDeliveryNoteInfo> srmDeliveryNoteInfos = new SrmDeliveryNoteBLL().GetList("[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Untreated + "", string.Empty); if (srmDeliveryNoteInfos.Count == 0) { return; } ///获取没有处理的送货单详情数据- 没有数据主表报错 List <SrmDeliveryNoteDetailInfo> srmDeliveryNoteDetailInfos = new SrmDeliveryNoteDetailBLL().GetList("[ORDER_FID] in ('" + string.Join("','", srmDeliveryNoteInfos.Select(d => d.Fid.GetValueOrDefault()).ToArray()) + "')", string.Empty); if (srmDeliveryNoteDetailInfos.Count == 0) { return; } ///获取相关物料供应商信息 List <SupplierInfo> supplierInfos = new SupplierBLL().GetList("" + "[SUPPLIER_NUM] in ('" + string.Join("','", srmDeliveryNoteInfos.Select(d => d.Suppliercode).ToArray()) + "') and " + "[SUPPLIER_TYPE] = " + (int)SupplierTypeConstants.MaterialSupplier + "", string.Empty); /// StringBuilder @string = new StringBuilder(); if (supplierInfos.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000475' where " +///送货单中供应商信息无效 "[ID] in (" + string.Join(",", srmDeliveryNoteInfos.Select(d => d.Id).ToArray()) + ");"); BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); return; } ///获取相关存储区信息 List <string> zoneNos = srmDeliveryNoteInfos.Where(d => !string.IsNullOrEmpty(d.Targetzoneno)).Select(d => d.Targetzoneno).ToList(); zoneNos.AddRange(srmDeliveryNoteInfos.Where(d => !string.IsNullOrEmpty(d.Sourcezoneno)).Select(d => d.Sourcezoneno).ToList()); List <ZonesInfo> zonesInfos = new ZonesBLL().GetList("" + "[ZONE_NO] in ('" + string.Join("','", zoneNos.ToArray()) + "') and " + "[PLANT] in ('" + string.Join("','", srmDeliveryNoteInfos.Select(d => d.Plant).ToArray()) + "')", string.Empty); if (zonesInfos.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000485' where " +///送货单中存储区信息不存在 "[ID] in (" + string.Join(",", srmDeliveryNoteInfos.Select(d => d.Id).ToArray()) + ");"); BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); return; } /// List <long> dealedIds = new List <long>(); ///循环写入数据 foreach (SrmDeliveryNoteInfo srmDeliveryNoteInfo in srmDeliveryNoteInfos) { ///获取送货单明细 List <SrmDeliveryNoteDetailInfo> srmDeliveryNoteDetails = srmDeliveryNoteDetailInfos.Where(d => d.OrderFid.GetValueOrDefault() == srmDeliveryNoteInfo.Fid.GetValueOrDefault()).ToList(); if (srmDeliveryNoteDetails.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000473' where " +///送货单无物料明细 "[ID] = " + srmDeliveryNoteInfo.Id + ";"); continue; } ///供应商信息 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == srmDeliveryNoteInfo.Suppliercode); if (supplierInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000484' where " +///该送货单中供应商信息不存在 "[ID] = " + srmDeliveryNoteInfo.Id + ";"); continue; } ///校验供应商是否启用了ASN功能 if (!supplierInfo.AsnFlag.GetValueOrDefault()) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000486' where " +///该供应商未启用ASN功能 "[ID] = " + srmDeliveryNoteInfo.Id + ";"); continue; } ///目标存储区 ZonesInfo zonesInfo = zonesInfos.FirstOrDefault(d => d.ZoneNo == srmDeliveryNoteInfo.Targetzoneno && d.Plant == srmDeliveryNoteInfo.Plant); if (zonesInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000246' where " +///存储区数据错误 "[ID] = " + srmDeliveryNoteInfo.Id + ";"); continue; } ///单据衔接对象创建 MaterialPullingOrderInfo materialPullingOrderInfo = MaterialPullingCommonBLL.CreateMaterialPullingOrderInfo(); ///SrmDeliveryNoteInfo -> MaterialPullingOrderInfo MaterialPullingCommonBLL.GetMaterialPullingOrderInfo(srmDeliveryNoteInfo, ref materialPullingOrderInfo); ///SupplierInfo -> MaterialPullingOrderInfo MaterialPullingCommonBLL.GetMaterialPullingOrderInfo(supplierInfo, ref materialPullingOrderInfo); /// materialPullingOrderInfo.TargetWmNo = zonesInfo.WmNo; ///PART_BOX_CODE,TODO:考虑由SRM增加字段? materialPullingOrderInfo.PartBoxCode = string.Empty; ///PART_BOX_NAME,11 materialPullingOrderInfo.PartBoxName = string.Empty; /// materialPullingOrderInfo.Route = null; /// foreach (SrmDeliveryNoteDetailInfo srmDeliveryNoteDetail in srmDeliveryNoteDetails) { ///单据衔接明细对象创建 MaterialPullingOrderDetailInfo materialPullingOrderDetailInfo = MaterialPullingCommonBLL.CreateMaterialPullingOrderDetailInfo(); ///SrmDeliveryNoteDetailInfo -> MaterialPullingOrderDetailInfo MaterialPullingCommonBLL.GetMaterialPullingOrderDetailInfo(srmDeliveryNoteDetail, ref materialPullingOrderDetailInfo); ///SRM拉动单明细中的供应商必须为单据的供应商 materialPullingOrderDetailInfo.SupplierNum = srmDeliveryNoteInfo.Suppliercode; /// materialPullingOrderInfo.MaterialPullingOrderDetailInfos.Add(materialPullingOrderDetailInfo); } ///生成创建入库单的语句 @string.Append(MaterialPullingCommonBLL.CreateReceiveSql(materialPullingOrderInfo, new List <PartsStockInfo>(), loginUser)); ///执行成功的ID dealedIds.Add(srmDeliveryNoteInfo.Id); } if (dealedIds.Count > 0) { ///已处理的中间表数据更新为已处理状态 @string.AppendLine("update [LES].[TI_IFM_SRM_DELIVERY_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Processed + "," + "[PROCESS_TIME] = GETDATE() where " + "[ID] in (" + string.Join(",", dealedIds.ToArray()) + ");"); } ///执行 using (TransactionScope trans = new TransactionScope()) { if (@string.Length > 0) { BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); } trans.Complete(); } }
/// <summary> /// 执行导入EXCEL数据 /// </summary> /// <param name="dataTable"></param> /// <param name="fieldNames"></param> /// <returns></returns> public bool ImportDataByExcel(DataTable dataTable, Dictionary <string, string> fieldNames, string loginUser) { List <ZonesInfo> zonesExcelInfos = CommonDAL.DatatableConvertToList <ZonesInfo>(dataTable).ToList(); if (zonesExcelInfos.Count == 0) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } ///获取业务表中要变更的数据集合,准备对比 List <ZonesInfo> zonesInfos = new ZonesDAL().GetList("" + "[ZONE_NO] in ('" + string.Join("','", zonesExcelInfos.Select(d => d.ZoneNo).ToArray()) + "')", string.Empty); ///仓库 List <WarehouseInfo> warehouseInfos = new WarehouseDAL().GetList("" + "[WAREHOUSE] in ('" + string.Join("','", zonesExcelInfos.Select(d => d.WmNo).ToArray()) + "')", string.Empty); ///允许存储区代码在不同的仓库中重复使用 string allow_zoneno_repeat_at_different_warehouse = new ConfigDAL().GetValueByCode("ALLOW_ZONENO_REPEAT_AT_DIFFERENT_WAREHOUSE"); ///执行的SQL语句 StringBuilder @string = new StringBuilder(); List <string> fields = new List <string>(fieldNames.Keys); ///逐条处理中间表数据 foreach (var zonesExcelInfo in zonesExcelInfos) { WarehouseInfo warehouseInfo = warehouseInfos.FirstOrDefault(d => d.Warehouse == zonesExcelInfo.WmNo); if (warehouseInfo == null) { throw new Exception("MC:0x00000230");///仓库信息不存在 } ///数据校验 ValidInfo(zonesExcelInfo, allow_zoneno_repeat_at_different_warehouse); ///当前业务数据表中此工厂的该物流路线时需要新增 ZonesInfo zonesInfo = zonesInfos.FirstOrDefault(d => d.ZoneNo == zonesExcelInfo.ZoneNo && d.WmNo == zonesExcelInfo.WmNo); if (zonesInfo == null) { ///字段 string insertFieldString = string.Empty; ///值 string insertValueString = string.Empty; for (int i = 0; i < fields.Count; i++) { string valueStr = CommonDAL.GetFieldValueForSql <ZonesInfo>(zonesExcelInfo, fields[i]); if (string.IsNullOrEmpty(valueStr)) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } insertFieldString += "[" + fieldNames[fields[i]] + "],"; insertValueString += valueStr + ","; } /// zonesExcelInfo.Fid = Guid.NewGuid(); ///判断业务主键是否重复,以防止EXCEL中有重复数据,适用于基础数据导入 @string.AppendLine("if not exists (select * from [LES].[TM_WMM_ZONES] with(nolock) where [ZONE_NO] = N'" + zonesExcelInfo.ZoneNo + "' and [VALID_FLAG] = 1) " + "insert into [LES].[TM_WMM_ZONES] " + "([FID]," + insertFieldString + "[CREATE_USER]," + "[CREATE_DATE]," + "[VALID_FLAG]) values " + "(N'" + zonesExcelInfo.Fid.GetValueOrDefault() + "'," + insertValueString + "N'" + loginUser + "'," + "GETDATE()," + "1);"); zonesInfos.Add(zonesExcelInfo); continue; } if (string.IsNullOrEmpty(zonesExcelInfo.ZoneName)) { throw new Exception("MC:0x00000739");///存储区名称不能为空 } if (string.IsNullOrEmpty(zonesExcelInfo.WmNo)) { throw new Exception("MC:0x00000528");///仓库代码不能为空 } if (zonesExcelInfo.Settlementflag == null) { throw new Exception("MC:0x00000529");///结算标记不能为空 } ///值 string valueString = string.Empty; for (int i = 0; i < fields.Count; i++) { string valueStr = CommonDAL.GetFieldValueForSql <ZonesInfo>(zonesExcelInfo, fields[i]); if (string.IsNullOrEmpty(valueStr)) { throw new Exception("MC:1x00000043");///数据格式不符合导入规范 } valueString += "[" + fieldNames[fields[i]] + "] = " + valueStr + ","; } @string.AppendLine("update [LES].[TM_WMM_ZONES] " + "set " + valueString + "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [FID] = N'" + zonesInfo.Fid.GetValueOrDefault() + "';"); } ///执行 using (var trans = new TransactionScope()) { if (@string.Length > 0) { CommonDAL.ExecuteNonQueryBySql(@string.ToString()); } trans.Complete(); } return(true); }
/// <summary> /// 根据仓库信息同步供应商信息 /// </summary> /// <param name="warehouseInfo"></param> public void SyncSupplierByWarehouse(WarehouseInfo warehouseInfo, string loginUser) { ///类型为内部仓库时不同步供应商信息 if (warehouseInfo.WarehouseType.GetValueOrDefault() != (int)WarehouseTypeConstants.VMI) { return; } StringBuilder @string = new StringBuilder(); ///是否存在供应商信息 SupplierInfo supplierInfo = dal.GetSupplierInfo(warehouseInfo.Warehouse); if (supplierInfo == null) { supplierInfo = new SupplierInfo(); supplierInfo.Fid = Guid.NewGuid(); supplierInfo.SupplierNum = warehouseInfo.Warehouse; supplierInfo.SupplierName = warehouseInfo.WarehouseName; supplierInfo.SupplierType = (int)SupplierTypeConstants.LogisticsSupplier; supplierInfo.ValidFlag = true; supplierInfo.CreateUser = loginUser; supplierInfo.CreateDate = DateTime.Now; @string.AppendLine(SupplierDAL.GetInsertSql(supplierInfo)); } else { ///当供应商类型为储运供应商时才更新其信息 if (supplierInfo.SupplierType.GetValueOrDefault() == (int)SupplierTypeConstants.LogisticsSupplier) { @string.AppendLine("update [LES].[TM_BAS_SUPPLIER] " + "set [SUPPLIER_NAME] = N'" + warehouseInfo.WarehouseName + "'," + "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = " + supplierInfo.Id + ";"); } } ///同步创建或更新存储区信息 ///获取相同代码的存储区 ZonesInfo zonesInfo = new ZonesDAL().GetZonesInfo(warehouseInfo.Warehouse, warehouseInfo.Warehouse); if (zonesInfo == null) { zonesInfo = new ZonesInfo(); zonesInfo.ZoneNo = warehouseInfo.Warehouse; zonesInfo.ZoneName = warehouseInfo.WarehouseName; zonesInfo.WmNo = warehouseInfo.Warehouse; zonesInfo.Plant = warehouseInfo.Plant; zonesInfo.Settlementflag = false; zonesInfo.CreateUser = loginUser; zonesInfo.CreateDate = DateTime.Now; @string.AppendLine(ZonesDAL.GetInsertSql(zonesInfo)); } else { @string.AppendLine("update [LES].[TM_WMM_ZONES] " + "set [ZONE_NAME] = N'" + warehouseInfo.WarehouseName + "'," + "[WM_NO] = N'" + warehouseInfo.Warehouse + "'," + "[PLANT] = N'" + warehouseInfo.Plant + "'," + "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = " + zonesInfo.Id + ";"); } CommonDAL.ExecuteNonQueryBySql(@string.ToString()); }
/// <summary> /// SyncMaterialReservation /// </summary> /// <param name="loginUser"></param> public static void Sync(string loginUser) { List <SapMaterialReservationInfo> sapMaterialReservationInfos = new SapMaterialReservationBLL().GetListByPage("" + "DATEDIFF(MINUTE,[CREATE_DATE],GETDATE()) > " + sapMaterialReservationSyncDelayMinute + " and " + "[PROCESS_FLAG] in (" + (int)ProcessFlagConstants.Untreated + "," + (int)ProcessFlagConstants.Resend + ")", "[ID]", 1, int.MaxValue, out int dataCnt); if (dataCnt == 0) { return; } ///带有库存地点信息的存储区数据 ///TODO:存储区基础数据维护时限制SAP库存地点编号不能重复 List <ZonesInfo> zonesInfos = new ZonesBLL().GetList("len([STOCK_PLACE_NO]) > 0", string.Empty); ///供应商信息 List <SupplierInfo> supplierInfos = new SupplierBLL().GetListForInterfaceDataSync(sapMaterialReservationInfos.Select(d => d.Lifnr).ToList()); ///物料基础信息 List <MaintainPartsInfo> maintainPartsInfos = new MaintainPartsBLL().GetListForInterfaceDataSync(sapMaterialReservationInfos.Select(d => d.Matnr).ToList()); ///物料仓储信息 List <PartsStockInfo> partsStockInfos = new PartsStockBLL().GetList("[PART_NO] in ('" + string.Join("','", sapMaterialReservationInfos.Select(d => d.Matnr).ToArray()) + "')", string.Empty); ///已处理完成的ID List <long> dealedIds = new List <long>(); StringBuilder stringBuilder = new StringBuilder(); ///Bwart-移动类型 ///Kostl-成本中心 ///Lgort-中转库存地点 ///Umlgo-接收库存地点 ///Wempf-收货方 ///Lifnr-供应商 ///Rsnum-预留单号 ///Ebeln-采购订单号 ///Bdter-需求日期 var gSapMaterialReservationInfos = from p in sapMaterialReservationInfos group p by new { p.Bwart, p.Kostl, p.Lgort, p.Umlgo, p.Wempf, p.Lifnr, p.Rsnum, p.Ebeln, p.Bdter } into g select new { g.Key }; foreach (var gSapMaterialReservationInfo in gSapMaterialReservationInfos) { ///校验接收库存地点 ZonesInfo tZone = zonesInfos.FirstOrDefault(d => d.StockPlaceNo == gSapMaterialReservationInfo.Key.Umlgo); if (!string.IsNullOrEmpty(gSapMaterialReservationInfo.Key.Umlgo) && tZone == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000418'," +///库存地点不存在 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [EBELN] = '" + gSapMaterialReservationInfo.Key.Ebeln + "';"); continue; } ///校验中转库存地点 ZonesInfo sZone = zonesInfos.FirstOrDefault(d => d.StockPlaceNo == gSapMaterialReservationInfo.Key.Lgort); if (!string.IsNullOrEmpty(gSapMaterialReservationInfo.Key.Lgort) && sZone == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000418'," +///库存地点不存在 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [EBELN] = '" + gSapMaterialReservationInfo.Key.Ebeln + "';"); continue; } ///校验供应商 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == gSapMaterialReservationInfo.Key.Lifnr); if (!string.IsNullOrEmpty(gSapMaterialReservationInfo.Key.Lifnr) && supplierInfo == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000239'," +///供应商数据错误 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [EBELN] = '" + gSapMaterialReservationInfo.Key.Ebeln + "';"); continue; } ///是否存在单据明细数据 List <SapMaterialReservationInfo> sapMaterialReservations = sapMaterialReservationInfos.Where(d => d.Ebeln == gSapMaterialReservationInfo.Key.Ebeln).ToList(); if (sapMaterialReservations.Count == 0) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000084'," +///数据错误 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [EBELN] = '" + gSapMaterialReservationInfo.Key.Ebeln + "';"); continue; } #region TT_MPM_SAP_PURCHASE_ORDER ///采购订单号默认为SAP采购订单号 string orderCode = gSapMaterialReservationInfo.Key.Ebeln; ///如果采购订单号为空,则以预留单号作为采购订单号 ///TODO:后期考虑这种形式直接写入供应商退货单表 if (string.IsNullOrEmpty(orderCode)) { orderCode = gSapMaterialReservationInfo.Key.Rsnum; } SapPurchaseOrderInfo sapPurchaseOrderInfo = new SapPurchaseOrderInfo(); sapPurchaseOrderInfo.Fid = Guid.NewGuid(); sapPurchaseOrderInfo.OrderCode = orderCode; sapPurchaseOrderInfo.SWmNo = sZone == null ? string.Empty : sZone.WmNo; sapPurchaseOrderInfo.SZoneNo = sZone == null ? string.Empty : sZone.ZoneNo; sapPurchaseOrderInfo.TWmNo = tZone == null ? string.Empty : tZone.WmNo; sapPurchaseOrderInfo.TZoneNo = tZone == null ? string.Empty : tZone.ZoneNo; sapPurchaseOrderInfo.RequireDate = gSapMaterialReservationInfo.Key.Bdter; sapPurchaseOrderInfo.SupplierNum = supplierInfo == null ? string.Empty : supplierInfo.SupplierNum; sapPurchaseOrderInfo.SupplierSname = supplierInfo == null ? string.Empty : supplierInfo.SupplierSname; sapPurchaseOrderInfo.SupplierName = supplierInfo == null ? string.Empty : supplierInfo.SupplierName; sapPurchaseOrderInfo.CustCode = gSapMaterialReservationInfo.Key.Wempf; sapPurchaseOrderInfo.SapBwart = gSapMaterialReservationInfo.Key.Bwart; sapPurchaseOrderInfo.SapKostl = gSapMaterialReservationInfo.Key.Kostl; sapPurchaseOrderInfo.SapLgort = gSapMaterialReservationInfo.Key.Lgort; sapPurchaseOrderInfo.SapUmlgo = gSapMaterialReservationInfo.Key.Umlgo; sapPurchaseOrderInfo.SapWempf = gSapMaterialReservationInfo.Key.Wempf; sapPurchaseOrderInfo.SapLifnr = gSapMaterialReservationInfo.Key.Lifnr; sapPurchaseOrderInfo.SapRsnum = gSapMaterialReservationInfo.Key.Rsnum; sapPurchaseOrderInfo.SapEbeln = gSapMaterialReservationInfo.Key.Ebeln; sapPurchaseOrderInfo.Status = (int)PullOrderStatusConstants.Released; sapPurchaseOrderInfo.CreateUser = loginUser; stringBuilder.AppendLine(SapPurchaseOrderDAL.GetInsertSql(sapPurchaseOrderInfo)); #endregion List <SapPurchaseOrderDetailInfo> sapPurchaseOrderDetailInfos = new List <SapPurchaseOrderDetailInfo>(); foreach (var sapMaterialReservation in sapMaterialReservations) { ///校验物料基础信息 MaintainPartsInfo maintainPartsInfo = maintainPartsInfos.FirstOrDefault(d => d.PartNo == sapMaterialReservation.Matnr); if (maintainPartsInfo == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000417', " +///物料信息数据错误 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = '" + sapMaterialReservation.Id + "';"); continue; } ///中转库存地点的物料仓储信息 PartsStockInfo partsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == maintainPartsInfo.PartNo && d.SupplierNum == supplierInfo.SupplierNum && d.ZoneNo == sZone.ZoneNo && d.WmNo == sZone.WmNo); if (!string.IsNullOrEmpty(gSapMaterialReservationInfo.Key.Lgort) && partsStockInfo == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000241'," + ///物料仓储信息数据错误 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = " + sapMaterialReservation.Id + ";"); continue; } ///接收库存地点的物料仓储信息 if (tZone != null) { PartsStockInfo tPartsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == maintainPartsInfo.PartNo && d.SupplierNum == supplierInfo.SupplierNum && d.ZoneNo == tZone.ZoneNo && d.WmNo == tZone.WmNo); if (tPartsStockInfo == null) { stringBuilder.AppendLine("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000241'," +///物料仓储信息数据错误 "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] = " + sapMaterialReservation.Id + ";"); continue; } } #region TT_MPM_SAP_PURCHASE_ORDER_DETAIL SapPurchaseOrderDetailInfo sapPurchaseOrderDetailInfo = new SapPurchaseOrderDetailInfo(); sapPurchaseOrderDetailInfo.OrderFid = sapPurchaseOrderInfo.Fid; sapPurchaseOrderDetailInfo.PartNo = maintainPartsInfo.PartNo; sapPurchaseOrderDetailInfo.PartCname = maintainPartsInfo.PartCname; sapPurchaseOrderDetailInfo.PartEname = maintainPartsInfo.PartEname; sapPurchaseOrderDetailInfo.PartQty = sapMaterialReservation.Menge; sapPurchaseOrderDetailInfo.PartPurchaseUom = maintainPartsInfo.PartUnits; sapPurchaseOrderDetailInfo.PartUom = maintainPartsInfo.PartUnits; sapPurchaseOrderDetailInfo.Package = partsStockInfo.InboundPackage; sapPurchaseOrderDetailInfo.PackageModel = partsStockInfo.InboundPackageModel; if (partsStockInfo.InboundPackage.GetValueOrDefault() > 0) { sapPurchaseOrderDetailInfo.RequirePackageQty = Convert.ToInt32(Math.Ceiling(decimal.Parse(sapMaterialReservation.Menge.GetValueOrDefault().ToString()) / partsStockInfo.InboundPackage.GetValueOrDefault())); } sapPurchaseOrderDetailInfo.SapMenge = sapMaterialReservation.Menge; sapPurchaseOrderDetailInfo.SapRsnum = sapMaterialReservation.Rsnum; if (!int.TryParse(sapMaterialReservation.Rspos, out int converintRspos)) { throw new Exception("MC:0x00000397");///预留行号错误 } sapPurchaseOrderDetailInfo.SapRspos = converintRspos; sapPurchaseOrderDetailInfo.SapEbeln = sapMaterialReservation.Ebeln; sapPurchaseOrderDetailInfo.SapEbelp = sapMaterialReservation.Ebelp; sapPurchaseOrderDetailInfo.SapBwart = sapMaterialReservation.Bwart; sapPurchaseOrderDetailInfo.SapKostl = sapMaterialReservation.Kostl; sapPurchaseOrderDetailInfo.SapLgort = sapMaterialReservation.Lgort; sapPurchaseOrderDetailInfo.SapUmlgo = sapMaterialReservation.Umlgo; sapPurchaseOrderDetailInfo.SapWempf = sapMaterialReservation.Wempf; sapPurchaseOrderDetailInfo.SapLifnr = sapMaterialReservation.Lifnr; sapPurchaseOrderDetailInfo.Status = (int)PullOrderStatusConstants.Released; sapPurchaseOrderDetailInfo.CreateUser = loginUser; stringBuilder.AppendLine(SapPurchaseOrderDetailDAL.GetInsertSql(sapPurchaseOrderDetailInfo)); #endregion sapPurchaseOrderDetailInfos.Add(sapPurchaseOrderDetailInfo); dealedIds.Add(sapMaterialReservation.Id); } #region 单据衔接 if (sapPurchaseOrderDetailInfos.Count > 0) { int orderType = (int)SapPurchaseOrderTypeConstants.PurchaseOrder; ///若SAP预留单号不为空时,系统认为是预留订单 //todo 0是否为空 if (!string.IsNullOrEmpty(sapPurchaseOrderInfo.SapRsnum) && sapPurchaseOrderInfo.SapRsnum.ToString() != "0") { orderType = (int)SapPurchaseOrderTypeConstants.ReservationOrder; } ///若SAP采购订单号为空时,系统认为是物料退货 if (string.IsNullOrEmpty(sapPurchaseOrderInfo.SapEbeln)) { orderType = (int)SapPurchaseOrderTypeConstants.ReturnOrder; } MaterialPullingOrderInfo mpOrder = new MaterialPullingOrderInfo(); mpOrder.OrderNo = sapPurchaseOrderInfo.OrderCode; mpOrder.PartBoxCode = string.Empty; ///零件类2 mpOrder.PartBoxName = string.Empty; ///零件类名称3 mpOrder.Plant = (sZone == null ? string.Empty : sZone.Plant); ///工厂4,TODO:是否增加工厂字段 mpOrder.Workshop = string.Empty; ///车间5 mpOrder.AssemblyLine = string.Empty; ///流水线6 mpOrder.SupplierNum = sapPurchaseOrderInfo.SupplierNum; ///供应商代码7 mpOrder.SupplierName = sapPurchaseOrderInfo.SupplierName; ///供应商名称 mpOrder.SourceZoneNo = sapPurchaseOrderInfo.TZoneNo; ///接收存储区 mpOrder.SourceWmNo = sapPurchaseOrderInfo.TWmNo; ///接收仓库 mpOrder.TargetZoneNo = sapPurchaseOrderInfo.SZoneNo; ///中转存储区 mpOrder.TargetWmNo = sapPurchaseOrderInfo.SWmNo; ///中转仓库 mpOrder.TargetDock = string.Empty; ///道口12,TODO:是否增加道口字段 mpOrder.PlanShippingTime = sapPurchaseOrderInfo.RequireDate; ///建议交货时间 mpOrder.PlanDeliveryTime = sapPurchaseOrderInfo.RequireDate; ///预计到厂时间 mpOrder.PublishTime = DateTime.Now; mpOrder.OrderType = orderType; ///SAP订单类型 mpOrder.PullMode = (int)PullModeConstants.PurchaseOrder; mpOrder.MaterialPullingOrderDetailInfos = (from m in sapPurchaseOrderDetailInfos select new MaterialPullingOrderDetailInfo { OrderNo = sapPurchaseOrderInfo.OrderCode, ///拉动单号1 SupplierNum = sapPurchaseOrderInfo.SupplierNum, ///供应商2 PartNo = m.PartNo, ///物料号3 PartCname = m.PartCname, ///物料号中文名称4 PartEname = m.PartEname, ///物料号英文名称5 Uom = m.PartUom, ///计量单位6 PackageQty = m.Package.GetValueOrDefault(), ///入库单包装数量7 PackageModel = m.PackageModel, ///入库包装编号8 RequirePackageQty = m.RequirePackageQty.GetValueOrDefault(), ///需求包装数量9 RequirePartQty = m.PartQty.GetValueOrDefault(), ///需求物料数量10 SourceWmNo = sapPurchaseOrderInfo.TWmNo, ///接收仓库 SourceZoneNo = sapPurchaseOrderInfo.TZoneNo, ///接收存储区 TargetWmNo = sapPurchaseOrderInfo.SWmNo, ///中转仓库 TargetZoneNo = sapPurchaseOrderInfo.SZoneNo ///中转存储区 }).ToList(); ///执行单据衔接 stringBuilder.AppendLine(MaterialPullingCommonBLL.Handler(mpOrder, loginUser)); } #endregion } if (dealedIds.Count > 0) { ///已处理的中间表数据更新为已处理状态 stringBuilder.Append("update [LES].[TI_IFM_SAP_MATERIAL_RESERVATION] " + "set [PROCESS_FLAG] = " + (int)ProcessFlagConstants.Processed + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = NULL," + "[MODIFY_USER] = N'" + loginUser + "'," + "[MODIFY_DATE] = GETDATE() " + "where [ID] in (" + string.Join(",", dealedIds.ToArray()) + ");"); } ///执行 using (var trans = new TransactionScope()) { if (stringBuilder.Length > 0) { BLL.SYS.CommonBLL.ExecuteNonQueryBySql(stringBuilder.ToString()); } trans.Complete(); } }
/// <summary> /// Handler /// </summary> public void Handler() { InitConfigFlag(); ///获取未同步的交易记录 List <TranDetailsInfo> tranDetailsInfos = new TranDetailsBLL().GetList("[TRAN_STATE] = " + (int)WmmTranStateConstants.Created + "", "[ID]"); if (tranDetailsInfos.Count == 0) { return; } ///仓库 List <string> wmNos = tranDetailsInfos.Where(d => !string.IsNullOrEmpty(d.WmNo)).Select(d => d.WmNo).ToList(); wmNos.AddRange(tranDetailsInfos.Where(d => !string.IsNullOrEmpty(d.TargetWm)).Select(d => d.TargetWm).ToList()); List <WarehouseInfo> warehouseInfos = new WarehouseBLL().GetList("[WAREHOUSE] in ('" + string.Join("','", wmNos.ToArray()) + "')", string.Empty); ///存储区 List <string> zoneNos = tranDetailsInfos.Where(d => !string.IsNullOrEmpty(d.ZoneNo)).Select(d => d.ZoneNo).ToList(); zoneNos.AddRange(tranDetailsInfos.Where(d => !string.IsNullOrEmpty(d.TargetZone)).Select(d => d.TargetZone).ToList()); List <ZonesInfo> zonesInfos = new ZonesBLL().GetList("[ZONE_NO] in ('" + string.Join("','", zoneNos.ToArray()) + "')", string.Empty); ///工厂 List <PlantInfo> plantInfos = new PlantBLL().GetListForInterfaceDataSync(); ///供应商 List <SupplierInfo> supplierInfos = new SupplierBLL().GetListForInterfaceDataSync(tranDetailsInfos.Select(d => d.SupplierNum).ToList()); ///物料 List <MaintainPartsInfo> maintainPartsInfos = new MaintainPartsBLL().GetListForInterfaceDataSync(tranDetailsInfos.Select(d => d.PartNo).ToList()); ///逐条处理 foreach (var tranDetailsInfo in tranDetailsInfos) { StringBuilder stringBuilder = new StringBuilder(); ///工厂 PlantInfo plantInfo = plantInfos.FirstOrDefault(d => d.Plant == tranDetailsInfo.Plant); ///供应商 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == tranDetailsInfo.SupplierNum); ///目标仓库 WarehouseInfo targetWarehouseInfo = warehouseInfos.FirstOrDefault(d => d.Warehouse == tranDetailsInfo.TargetWm); ///目标存储区 ZonesInfo targetZonesInfo = zonesInfos.FirstOrDefault(d => d.ZoneNo == tranDetailsInfo.TargetZone); ///目标工厂 PlantInfo targetPlantInfo = targetZonesInfo == null ? null : plantInfos.FirstOrDefault(d => d.Plant == targetZonesInfo.Plant); ///来源 ZonesInfo sourceZonesInfo = zonesInfos.FirstOrDefault(d => d.ZoneNo == tranDetailsInfo.ZoneNo); ///来源工厂 PlantInfo sourcePlantInfo = sourceZonesInfo == null ? null : plantInfos.FirstOrDefault(d => d.Plant == sourceZonesInfo.Plant); ///物料信息 MaintainPartsInfo maintainPartsInfo = maintainPartsInfos.FirstOrDefault(d => d.PartNo == tranDetailsInfo.PartNo && d.Plant == tranDetailsInfo.Plant); ///创建库存对象 StocksInfo stocksInfo = null; /// switch (tranDetailsInfo.TranType.GetValueOrDefault()) { ///物料入库 case (int)WmmTranTypeConstants.Inbound: ///目标可用库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.StocksRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///撤销入库 case (int)WmmTranTypeConstants.UndoInbound: stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); UndoStock(ref stocksInfo); stringBuilder.AppendFormat(stocksBLL.StocksRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///物料出库 case (int)WmmTranTypeConstants.Outbound: ///来源可用库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.StocksReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///撤销出库 case (int)WmmTranTypeConstants.UndoOutbound: stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); UndoStock(ref stocksInfo); stringBuilder.AppendFormat(stocksBLL.StocksReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///冻结入库 case (int)WmmTranTypeConstants.FrozenInbound: ///目标冻结库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.FrozenRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///冻结出库 case (int)WmmTranTypeConstants.FrozenOutbound: ///来源冻结库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.FrozenReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///物料冻结 case (int)WmmTranTypeConstants.MaterialFreezing: ///来源可用库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.StocksReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///目标冻结库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.FrozenRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///状态冻结 case (int)WmmTranTypeConstants.StateFreezing: ///来源可用库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.StocksReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///来源冻结库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.FrozenRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///物料解冻 case (int)WmmTranTypeConstants.MaterialThawing: ///来源冻结库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.FrozenReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///目标可用库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.StocksRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///状态解冻 case (int)WmmTranTypeConstants.StateThawing: ///来源可用库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.StocksRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///来源冻结库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.FrozenReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///冻结移动 case (int)WmmTranTypeConstants.FrozenMovement: ///来源冻结库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.FrozenReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///目标冻结库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.FrozenRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; ///物料移动 case (int)WmmTranTypeConstants.Movement: ///来源可用库存减少 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, sourceZonesInfo, true); stringBuilder.AppendFormat(stocksBLL.StocksReduceSql(stocksInfo, tranDetailsInfo.Id, loginUser)); ///目标可用库存增加 stocksInfo = HandlingStocksData(tranDetailsInfo, maintainPartsInfo, targetZonesInfo, false); stringBuilder.AppendFormat(stocksBLL.StocksRaiseSql(stocksInfo, tranDetailsInfo.Id, loginUser)); break; default: continue; } ///SAP移动数据 stringBuilder.AppendFormat(CreateSapTranData(tranDetailsInfo, sourceZonesInfo, targetZonesInfo, sourcePlantInfo, targetPlantInfo)); ///SRM入库数据 stringBuilder.AppendFormat(CreateSrmTranData(tranDetailsInfo, supplierInfo, targetWarehouseInfo)); ///WMS入库数据 stringBuilder.AppendFormat(CreateVmiTranData(tranDetailsInfo, supplierInfo, targetWarehouseInfo)); #region 执行 using (TransactionScope trans = new TransactionScope()) { if (stringBuilder.Length > 0) { BLL.LES.CommonBLL.ExecuteNonQueryBySql(stringBuilder.ToString()); } trans.Complete(); } #endregion Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + ":" + stocksInfo.PartNo + "|" + tranDetailsInfo.TranType.GetValueOrDefault() + "|" + stocksInfo.WmNo + "|" + stocksInfo.ZoneNo + "|" + stocksInfo.Dloc + "|"); } }
/// <summary> /// 根据交易记录以及基础数据配置数据,产生交易接口数据 Create By Xue /// </summary> private string CreateSapTranData(TranDetailsInfo tranDetailsInfo, ZonesInfo sourceZonesInfo, ZonesInfo targetZonesInfo, PlantInfo sourcePlantInfo, PlantInfo targetPlantInfo) { /// if (tranDetailsInfo == null) { return(string.Empty); } ///是否启用SAP交易记录同步接口 if (string.IsNullOrEmpty(sapTranDataEnableFlag) || sapTranDataEnableFlag.ToLower() != "true") { return(string.Empty); } /// StringBuilder stringBuilder = new StringBuilder(); #region SapTranOutInfo SapTranOutInfo sapTranOutInfo = new SapTranOutInfo(); sapTranOutInfo.Matnr = tranDetailsInfo.PartNo; sapTranOutInfo.Menge = tranDetailsInfo.ActualQty; sapTranOutInfo.Budat = tranDetailsInfo.TranDate; sapTranOutInfo.Lifnr = tranDetailsInfo.SupplierNum; sapTranOutInfo.ProcessFlag = (int)ProcessFlagConstants.Untreated; sapTranOutInfo.CreateUser = loginUser; #endregion ///如果没有目标库区则有可能是出成本中心的业务数据 if (targetZonesInfo == null) { ///若单据类型为物料预留、物料退货 if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)OutboundTypeConstants.ReserveOutbound + 2000) || tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)OutboundTypeConstants.MaterialReturns + 2000)) { SapPurchaseOrderDetailInfo sapPurchaseOrderDetailInfo = new SapPurchaseOrderDetailBLL().GetInfo(tranDetailsInfo.TranNo, tranDetailsInfo.PartNo); if (sapPurchaseOrderDetailInfo == null) { return(string.Empty); ///TODO:物料预留未能找到原始单据 } ///如果没有成本中心则不具备产生SAP事务数据的条件 if (string.IsNullOrEmpty(sapPurchaseOrderDetailInfo.SapKostl)) { return(string.Empty); } ///采购订单中有SAP采购订单号的需要生成101入库交易 if (!string.IsNullOrEmpty(sapPurchaseOrderDetailInfo.SapEbeln)) { #region 转入库存地点收货数据 SapTranOutInfo sapTranOut = sapTranOutInfo.Clone(); ///目标库存地点 sapTranOut.Lgort = sapPurchaseOrderDetailInfo.SapLgort; sapTranOut.Werks = sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode; ///采购订单 sapTranOut.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln; sapTranOut.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp; ///101 sapTranOut.Bwart = ((int)SapTranTypeConstants.Inbound).ToString(); #endregion stringBuilder.AppendLine(SapTranOutDAL.GetInsertSql(sapTranOut)); } ///来源库存地点 sapTranOutInfo.Lgort = sapPurchaseOrderDetailInfo.SapLgort; sapTranOutInfo.Werks = sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode; ///目标库存地点 sapTranOutInfo.Umlgo = sapPurchaseOrderDetailInfo.SapUmlgo; sapTranOutInfo.Unwrk = targetPlantInfo == null ? string.Empty : targetPlantInfo.SapPlantCode; ///成本中心 sapTranOutInfo.Kostl = sapPurchaseOrderDetailInfo.SapKostl; ///预留单号 sapTranOutInfo.Rsnum = sapPurchaseOrderDetailInfo.SapRsnum; ///采购订单 sapTranOutInfo.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln; sapTranOutInfo.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp; ///移动类型 sapTranOutInfo.Bwart = sapPurchaseOrderDetailInfo.SapBwart; stringBuilder.AppendLine(SapTranOutDAL.GetInsertSql(sapTranOutInfo)); return(stringBuilder.ToString()); } } ///据交易记录中的目标存储区是否结算标记 //todo if (targetZonesInfo != null /*&& targetZonesInfo.SettlementFlag.GetValueOrDefault()*/) { ///接收工厂 sapTranOutInfo.Unwrk = targetPlantInfo == null ? string.Empty : targetPlantInfo.SapPlantCode; ///接收库存地点 sapTranOutInfo.Umlgo = targetZonesInfo.StockPlaceNo; ///发出工厂 string werks = (sourcePlantInfo == null ? string.Empty : sourcePlantInfo.SapPlantCode); ///发出库存地点 string lgort = (sourceZonesInfo == null ? string.Empty : sourceZonesInfo.StockPlaceNo); ///如果没有来源库存地点,并且物料未结算 if (string.IsNullOrEmpty(lgort) && !tranDetailsInfo.SettledFlag.GetValueOrDefault()) { ///正常入库 if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.NormalInbound + 1000)) { sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Inbound).ToString(); } ///返利入库单 -> 免费收货 if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.RebateInbound + 1000)) { sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.RebateInbound).ToString(); } ///采购订单 -> 正常入库 if (tranDetailsInfo.TranOrderType.GetValueOrDefault() == ((int)InboundTypeConstants.PurchaseOrder + 1000)) { SapPurchaseOrderDetailInfo sapPurchaseOrderDetailInfo = new SapPurchaseOrderDetailBLL().GetInfo(tranDetailsInfo.RunsheetNo, tranDetailsInfo.PartNo); if (sapPurchaseOrderDetailInfo == null) { return(string.Empty); ///TODO:物料预留未能找到原始单据 } sapTranOutInfo.Umlgo = sapPurchaseOrderDetailInfo.SapUmlgo; sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Inbound).ToString(); sapTranOutInfo.Ebeln = sapPurchaseOrderDetailInfo.SapEbeln; sapTranOutInfo.Ebelp = sapPurchaseOrderDetailInfo.SapEbelp; } return(SapTranOutDAL.GetInsertSql(sapTranOutInfo)); } ///如果有发出库存地点,并且物料已结算 if (!string.IsNullOrEmpty(lgort) && tranDetailsInfo.SettledFlag.GetValueOrDefault()) { ///如果来源与目标的SAP库存地点相同则不产生移动数据 if (lgort == sapTranOutInfo.Umlgo) { return(string.Empty); } sapTranOutInfo.Lgort = lgort; sapTranOutInfo.Werks = werks; sapTranOutInfo.Bwart = ((int)SapTranTypeConstants.Movement).ToString(); return(SapTranOutDAL.GetInsertSql(sapTranOutInfo)); } } return(string.Empty); }
/// <summary> /// 将交易记录加工为库存投放数据 /// </summary> /// <param name="tranDetailsInfo"></param> /// <param name="zonesInfo"></param> /// <param name="sourceFlag"></param> /// <returns></returns> private StocksInfo HandlingStocksData(TranDetailsInfo tranDetailsInfo, MaintainPartsInfo maintainPartsInfo, ZonesInfo zonesInfo, bool sourceFlag) { ///新建库存对象 StocksInfo stocksInfo = stocksBLL.CreateStocksInfo(loginUser); ///更新物料基础信息 stocksBLL.UpdateMaintainPartsInfo(maintainPartsInfo, ref stocksInfo); ///来源库存对象信息填充 if (sourceFlag) { stocksBLL.GetSourceStocksInfo(tranDetailsInfo, ref stocksInfo); } ///目标库存对象信息填充 else { stocksBLL.GetTargetStocksInfo(tranDetailsInfo, zonesInfo, ref stocksInfo); } ///根据库存管理维度获取更新条件 string stockUpdateConditions = GetStockUpdateConditions(ref stocksInfo); ///若交易数据指定了库存数据外键,则根据外键获取主键 if (sourceFlag && tranDetailsInfo.StocksFid != null) { stocksInfo.Id = stocksBLL.GetStocksId(tranDetailsInfo.StocksFid.GetValueOrDefault()); } ///获取库存数据主键 if (stocksInfo.Id == 0) { stocksInfo.Id = stocksBLL.GetStocksId(stocksInfo, stockUpdateConditions); } return(stocksInfo); }