/// <summary> /// VmiReceiveInfo -> VmiReceiveDetailInfo /// </summary> /// <param name="vmiReceiveInfo"></param> /// <param name="vmiReceiveDetailInfo"></param> public static void GetVmiReceiveDetailInfo(VmiReceiveInfo vmiReceiveInfo, ref VmiReceiveDetailInfo vmiReceiveDetailInfo) { if (vmiReceiveInfo == null) { return; } ///RECEIVE_FID vmiReceiveDetailInfo.ReceiveFid = vmiReceiveInfo.Fid; ///PLANT vmiReceiveDetailInfo.Plant = vmiReceiveInfo.Plant; ///SUPPLIER_NUM vmiReceiveDetailInfo.SupplierNum = vmiReceiveInfo.SupplierNum; ///WM_NO vmiReceiveDetailInfo.WmNo = vmiReceiveInfo.SourceWmNo; ///ZONE_NO vmiReceiveDetailInfo.ZoneNo = vmiReceiveInfo.SourceZoneNo; ///TARGET_WM vmiReceiveDetailInfo.TargetWm = vmiReceiveInfo.WmNo; ///TARGET_ZONE vmiReceiveDetailInfo.TargetZone = vmiReceiveInfo.ZoneNo; ///TRAN_NO vmiReceiveDetailInfo.TranNo = vmiReceiveInfo.ReceiveNo; ///DOCK vmiReceiveDetailInfo.Dock = vmiReceiveInfo.Dock; ///RUNSHEET_NO vmiReceiveDetailInfo.RunsheetNo = vmiReceiveInfo.RunsheetNo; }
/// <summary> /// Create VmiReceiveDetailInfo /// </summary> /// <param name="loginUser"></param> /// <returns></returns> public static VmiReceiveDetailInfo CreateVmiReceiveDetailInfo(string loginUser) { VmiReceiveDetailInfo vmiReceiveDetailInfo = new VmiReceiveDetailInfo { ///FID Fid = Guid.NewGuid(), ///VALID_FLAG ValidFlag = true, ///CREATE_DATE CreateDate = DateTime.Now, ///CREATE_USER CreateUser = loginUser, ///IDENTIFY_PART_NO IdentifyPartNo = string.Empty, ///PART_TYPE PartType = null, ///BARCODE_DATA BarcodeData = string.Empty, ///BOX_PARTS BoxParts = string.Empty, ///SEQUENCE_NO SequenceNo = null, ///PICKUP_SEQ_NO PickupSeqNo = null, ///RDC_DLOC RdcDloc = string.Empty, ///SUPPLIER_NUM_SHEET SupplierNumSheet = string.Empty, ///RETURN_REPORT_FLAG ReturnReportFlag = null, ///ORDER_NO OrderNo = string.Empty, ///ITEM_NO ItemNo = string.Empty, ///CURRENT_BOX_NUM CurrentBoxNum = null, ///CURRENT_QTY CurrentQty = null, ///FINAL_DLOC FinalDloc = string.Empty, ///IS_SCAN_BOX IsScanBox = null, ///ROW_NO RowNo = null, ///SUM_WEIGHT SumWeight = null, ///SUM_VOLUME SumVolume = null, ///DLOC Dloc = string.Empty }; /// return(vmiReceiveDetailInfo); }
/// <summary> /// PartsStockInfo -> VmiReceiveDetailInfo /// </summary> /// <param name="partsStockInfo"></param> /// <param name="vmiReceiveDetailInfo"></param> public static void GetVmiReceiveDetailInfo(PartsStockInfo partsStockInfo, ref VmiReceiveDetailInfo vmiReceiveDetailInfo) { if (partsStockInfo == null) { return; } ///PACKAGE_MODEL vmiReceiveDetailInfo.PackageModel = partsStockInfo.InboundPackageModel; ///PACKAGE vmiReceiveDetailInfo.Package = partsStockInfo.InboundPackage; ///ASSEMBLY_LINE vmiReceiveDetailInfo.AssemblyLine = partsStockInfo.AssemblyLine; ///INHOUSE_PACKAGE_MODEL vmiReceiveDetailInfo.PackageModel = partsStockInfo.InhousePackageModel; ///INHOUSE_PACKAGE vmiReceiveDetailInfo.Package = partsStockInfo.InhousePackage; /////FINAL_WM //vmiReceiveDetailInfo.FinalWm = partsStockInfo.SynchronousWmNo; /////FINAL_ZONE //vmiReceiveDetailInfo.FinalZone = partsStockInfo.SynchronousZoneNo; ///TARGET_DLOC vmiReceiveDetailInfo.TargetDloc = partsStockInfo.Dloc; }
/// <summary> /// VmiReceiveDetailInfo -> ReceiveDetailInfo /// </summary> /// <param name="vmiReceiveDetailInfo"></param> /// <param name="info"></param> public static void GetReceiveDetailInfo(VmiReceiveDetailInfo vmiReceiveDetailInfo, ref ReceiveDetailInfo info) { ///ID,明细流水号 info.Id = vmiReceiveDetailInfo.Id; ///FID,FID info.Fid = vmiReceiveDetailInfo.Fid; ///RECEIVE_FID, info.ReceiveFid = vmiReceiveDetailInfo.ReceiveFid; ///PLANT,工厂模型_工厂 info.Plant = vmiReceiveDetailInfo.Plant; ///SUPPLIER_NUM,基础数据_供应商 info.SupplierNum = vmiReceiveDetailInfo.SupplierNum; ///WM_NO,仓库编码 info.WmNo = vmiReceiveDetailInfo.WmNo; ///ZONE_NO,存贮区编码 info.ZoneNo = vmiReceiveDetailInfo.ZoneNo; ///DLOC,库位 info.Dloc = vmiReceiveDetailInfo.Dloc; ///TARGET_WM,目的仓库 info.TargetWm = vmiReceiveDetailInfo.TargetWm; ///TARGET_ZONE,目的存储区 info.TargetZone = vmiReceiveDetailInfo.TargetZone; ///TARGET_DLOC,目的库位 info.TargetDloc = vmiReceiveDetailInfo.TargetDloc; ///PART_NO,车辆模型_零件号 info.PartNo = vmiReceiveDetailInfo.PartNo; ///PART_CNAME,车辆模型_零件中文名 info.PartCname = vmiReceiveDetailInfo.PartCname; ///PART_ENAME,车辆模型_零件德文名 info.PartEname = vmiReceiveDetailInfo.PartEname; ///MEASURING_UNIT_NO,单位 info.MeasuringUnitNo = vmiReceiveDetailInfo.MeasuringUnitNo; ///IDENTIFY_PART_NO,车辆模型_标识零件号 info.IdentifyPartNo = vmiReceiveDetailInfo.IdentifyPartNo; ///PACKAGE_MODEL,包装型号 info.PackageModel = vmiReceiveDetailInfo.PackageModel; ///PACKAGE,单包装数 info.Package = vmiReceiveDetailInfo.Package; ///PART_TYPE,零件类型 info.PartType = vmiReceiveDetailInfo.PartType; ///REQUIRED_BOX_NUM,需求包装数 info.RequiredBoxNum = vmiReceiveDetailInfo.RequiredBoxNum; ///REQUIRED_QTY,需求数量 info.RequiredQty = vmiReceiveDetailInfo.RequiredQty; ///ACTUAL_BOX_NUM,实际包装数 info.ActualBoxNum = vmiReceiveDetailInfo.ActualBoxNum; ///ACTUAL_QTY,实际数量 info.ActualQty = vmiReceiveDetailInfo.ActualQty; ///BARCODE_DATA,条码 info.BarcodeData = vmiReceiveDetailInfo.BarcodeData; ///TRAN_NO,交易编码 info.TranNo = vmiReceiveDetailInfo.TranNo; ///DOCK,工厂模型_DOCK info.Dock = vmiReceiveDetailInfo.Dock; ///ASSEMBLY_LINE,工厂模型_流水线 info.AssemblyLine = vmiReceiveDetailInfo.AssemblyLine; ///BOX_PARTS,基础数据_零件类 info.BoxParts = vmiReceiveDetailInfo.BoxParts; ///SEQUENCE_NO,排序号 info.SequenceNo = vmiReceiveDetailInfo.SequenceNo; ///PICKUP_SEQ_NO,捡料顺序号 info.PickupSeqNo = vmiReceiveDetailInfo.PickupSeqNo; ///RDC_DLOC,供应商库位 info.RdcDloc = vmiReceiveDetailInfo.RdcDloc; ///INHOUSE_PACKAGE,上线包装数量 info.InhousePackage = vmiReceiveDetailInfo.InhousePackage; ///INHOUSE_PACKAGE_MODEL,上线包装型号 info.InhousePackageModel = vmiReceiveDetailInfo.InhousePackageModel; ///RUNSHEET_NO,拉动单号 info.RunsheetNo = vmiReceiveDetailInfo.RunsheetNo; ///SUPPLIER_NUM_SHEET,基础数据组单_供应商 info.SupplierNumSheet = vmiReceiveDetailInfo.SupplierNumSheet; ///BOX_PARTS_SHEET,基础数据_零件类组单 info.BoxPartsSheet = vmiReceiveDetailInfo.BoxPartsSheet; ///RETURN_REPORT_FLAG,return_report_flag info.ReturnReportFlag = vmiReceiveDetailInfo.ReturnReportFlag; ///ORDER_NO,订单号 info.OrderNo = vmiReceiveDetailInfo.OrderNo; ///ITEM_NO,ITEM号 info.ItemNo = vmiReceiveDetailInfo.ItemNo; ///CURRENT_BOX_NUM, info.CurrentBoxNum = vmiReceiveDetailInfo.CurrentBoxNum; ///CURRENT_QTY, info.CurrentQty = vmiReceiveDetailInfo.CurrentQty; ///FINAL_WM,最终仓库 info.FinalWm = vmiReceiveDetailInfo.FinalWm; ///FINAL_ZONE,最终存储区 info.FinalZone = vmiReceiveDetailInfo.FinalZone; ///FINAL_DLOC,最终库位 info.FinalDloc = vmiReceiveDetailInfo.FinalDloc; ///IS_SCAN_BOX,是否扫箱 info.IsScanBox = vmiReceiveDetailInfo.IsScanBox; ///ROW_NO,行号 info.RowNo = vmiReceiveDetailInfo.RowNo; ///ORIGIN_PLACE,产地 info.OriginPlace = vmiReceiveDetailInfo.OriginPlace; ///PURCHASE_UNIT_PRICE,采购单价 info.PurchaseUnitPrice = vmiReceiveDetailInfo.PurchaseUnitPrice; ///PART_PRICE,金额 info.PartPrice = vmiReceiveDetailInfo.PartPrice; ///PART_CLS,零件类别 info.PartCls = vmiReceiveDetailInfo.PartCls; ///COMMENTS,COMMON_备注 info.Comments = vmiReceiveDetailInfo.Comments; ///VALID_FLAG,逻辑删除标记 info.ValidFlag = vmiReceiveDetailInfo.ValidFlag; ///CREATE_USER,COMMON_CREATE_USER info.CreateUser = vmiReceiveDetailInfo.CreateUser; ///CREATE_DATE,COMMON_CREATE_DATE info.CreateDate = vmiReceiveDetailInfo.CreateDate; ///MODIFY_USER,COMMON_MODIFY_USER info.ModifyUser = vmiReceiveDetailInfo.ModifyUser; ///MODIFY_DATE,COMMON_MODIFY_DATE info.ModifyDate = vmiReceiveDetailInfo.ModifyDate; ///PACKAGE_LENGTH,包装长 info.PackageLength = vmiReceiveDetailInfo.PackageLength; ///PACKAGE_WIDTH,包装宽 info.PackageWidth = vmiReceiveDetailInfo.PackageWidth; ///PACKAGE_HEIGHT,包装高 info.PackageHeight = vmiReceiveDetailInfo.PackageHeight; ///PERPACKAGE_GROSS_WEIGHT,单箱随货毛重 info.PerpackageGrossWeight = vmiReceiveDetailInfo.PerpackageGrossWeight; ///INSPECTION_MODE,检验模式 info.InspectionMode = vmiReceiveDetailInfo.InspectionMode; ///PACKAGE_VOLUME,单包装体积 info.PackageVolume = vmiReceiveDetailInfo.PackageVolume; ///SUM_WEIGHT,合计毛重 info.SumWeight = vmiReceiveDetailInfo.SumWeight; ///SUM_VOLUME,合计体积 info.SumVolume = vmiReceiveDetailInfo.SumVolume; }
/// <summary> /// InsertInfo /// </summary> /// <param name="info"></param> /// <returns></returns> public long InsertInfo(VmiReceiveDetailInfo info) { VmiReceiveInfo receiveInfo = new VmiReceiveDAL().GetInfo(info.ReceiveFid.GetValueOrDefault()); if (receiveInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } if (receiveInfo.Status.GetValueOrDefault() != (int)WmmOrderStatusConstants.Created) { throw new Exception("MC:0x00000152");///入库单处理已创建状态时才能添加材料 } ///明细中供应商缺失时,从单据上获取 if (string.IsNullOrEmpty(info.SupplierNum)) { info.SupplierNum = receiveInfo.SupplierNum; } ///单据号 if (string.IsNullOrEmpty(info.TranNo)) { info.TranNo = receiveInfo.ReceiveNo; } ///拉动单号 if (string.IsNullOrEmpty(info.RunsheetNo)) { info.RunsheetNo = receiveInfo.RunsheetNo; } ///工厂 if (string.IsNullOrEmpty(info.Plant)) { info.Plant = receiveInfo.Plant; } ///仓库 if (string.IsNullOrEmpty(info.TargetWm)) { info.TargetWm = receiveInfo.WmNo; } ///存储区 if (string.IsNullOrEmpty(info.TargetZone)) { info.TargetZone = receiveInfo.ZoneNo; } ///仓库 if (string.IsNullOrEmpty(info.WmNo)) { info.WmNo = receiveInfo.SourceWmNo; } ///存储区 if (string.IsNullOrEmpty(info.ZoneNo)) { info.ZoneNo = receiveInfo.SourceZoneNo; } ///创建VMI入库单时实收数量等于需求数量 string create_vmi_receive_actual_qty_equals_required = new ConfigDAL().GetValueByCode("CREATE_VMI_RECEIVE_ACTUAL_QTY_EQUALS_REQUIRED"); if (!string.IsNullOrEmpty(create_vmi_receive_actual_qty_equals_required) && create_vmi_receive_actual_qty_equals_required.ToLower() == "true") { if (info.ActualBoxNum == null) { info.ActualBoxNum = info.RequiredBoxNum; } if (info.ActualQty == null) { info.ActualQty = info.RequiredQty; } } ///如果需求箱数大于零 if (info.RequiredBoxNum.GetValueOrDefault() > 0) { ///如果未填写单包装毛重,但是填写了总毛重,需要计算 if (info.PerpackageGrossWeight.GetValueOrDefault() == 0 && info.SumWeight.GetValueOrDefault() > 0) { info.PerpackageGrossWeight = info.SumWeight.GetValueOrDefault() / info.RequiredBoxNum.GetValueOrDefault(); } ///体积也是如此处理 if (info.PackageVolume.GetValueOrDefault() == 0 && info.SumVolume.GetValueOrDefault() > 0) { info.PackageVolume = info.SumVolume.GetValueOrDefault() / info.RequiredBoxNum.GetValueOrDefault(); } ///件数也是如此处理 if (info.Package.GetValueOrDefault() == 0 && info.RequiredQty.GetValueOrDefault() > 0) { info.Package = Math.Ceiling(info.RequiredQty.GetValueOrDefault() / info.RequiredBoxNum.GetValueOrDefault()); } } /// return(dal.Add(info)); }
/// <summary> /// SrmVmiShippingNoteDetailInfo -> VmiReceiveDetailInfo /// </summary> /// <param name="vmiShippingNoteDetailInfo"></param> /// <param name="vmiReceiveDetailInfo"></param> public static void GetVmiReceiveDetailInfo(SrmVmiShippingNoteDetailInfo vmiShippingNoteDetailInfo, ref VmiReceiveDetailInfo vmiReceiveDetailInfo) { if (vmiShippingNoteDetailInfo == null) { return; } ///PART_NO vmiReceiveDetailInfo.PartNo = vmiShippingNoteDetailInfo.Partno; ///REQUIRED_QTY vmiReceiveDetailInfo.RequiredQty = vmiShippingNoteDetailInfo.Partqty; ///REQUIRED_BOX_NUM if (vmiReceiveDetailInfo.Package.GetValueOrDefault() > 0) { vmiReceiveDetailInfo.RequiredBoxNum = Convert.ToInt32(Math.Ceiling(vmiShippingNoteDetailInfo.Partqty.GetValueOrDefault() / vmiReceiveDetailInfo.Package.GetValueOrDefault())); } ///COMMENTS vmiReceiveDetailInfo.Comments = vmiShippingNoteDetailInfo.Remark; }
/// <summary> /// PackageApplianceInfo -> VmiReceiveDetailInfo /// </summary> /// <param name="packageApplianceInfo"></param> /// <param name="vmiReceiveDetailInfo"></param> public static void GetVmiReceiveDetailInfo(PackageApplianceInfo packageApplianceInfo, ref VmiReceiveDetailInfo vmiReceiveDetailInfo) { if (packageApplianceInfo == null) { return; } ///PACKAGE_LENGTH vmiReceiveDetailInfo.PackageLength = packageApplianceInfo.PackageLength; ///PACKAGE_WIDTH vmiReceiveDetailInfo.PackageWidth = packageApplianceInfo.PackageWidth; ///PACKAGE_HEIGHT vmiReceiveDetailInfo.PackageHeight = packageApplianceInfo.PackageHeight; ///PERPACKAGE_GROSS_WEIGHT vmiReceiveDetailInfo.PerpackageGrossWeight = packageApplianceInfo.MaxWeight; ///PACKAGE_VOLUME vmiReceiveDetailInfo.PackageVolume = vmiReceiveDetailInfo.PackageLength * vmiReceiveDetailInfo.PackageWidth * vmiReceiveDetailInfo.PackageHeight; }
/// <summary> /// MaintainPartsInfo -> VmiReceiveDetailInfo /// </summary> /// <param name="maintainPartsInfo"></param> /// <param name="vmiReceiveDetailInfo"></param> public static void GetVmiReceiveDetailInfo(MaintainPartsInfo maintainPartsInfo, ref VmiReceiveDetailInfo vmiReceiveDetailInfo) { if (maintainPartsInfo == null) { return; } ///PART_NO vmiReceiveDetailInfo.PartNo = maintainPartsInfo.PartNo; ///PART_CNAME vmiReceiveDetailInfo.PartCname = maintainPartsInfo.PartCname; ///PART_ENAME vmiReceiveDetailInfo.PartEname = maintainPartsInfo.PartEname; ///MEASURING_UNIT_NO vmiReceiveDetailInfo.MeasuringUnitNo = maintainPartsInfo.PartUnits; ///ORIGIN_PLACE //vmiReceiveDetailInfo.OriginPlace = maintainPartsInfo.OriginPlace; /////PURCHASE_UNIT_PRICE //vmiReceiveDetailInfo.PurchaseUnitPrice = maintainPartsInfo.PurchaseUnitPrice; ///PART_CLS vmiReceiveDetailInfo.PartCls = maintainPartsInfo.PartCls; }
/// <summary> /// UpdateInfo /// </summary> /// <param name="fields"></param> /// <param name="id"></param> /// <returns></returns> public bool UpdateInfo(string fields, long id) { VmiReceiveDetailInfo vmiReceiveDetailInfo = dal.GetInfo(id); if (vmiReceiveDetailInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } VmiReceiveInfo receiveInfo = new VmiReceiveDAL().GetInfo(vmiReceiveDetailInfo.ReceiveFid.GetValueOrDefault()); if (receiveInfo == null) { throw new Exception("MC:0x00000252");///入库单数据错误 } if (receiveInfo.Status.GetValueOrDefault() == (int)WmmOrderStatusConstants.Completed || receiveInfo.Status.GetValueOrDefault() == (int)WmmOrderStatusConstants.Closed) { throw new Exception("MC:0x00000253");///入库单状态为已关闭或已完成时不能修改其内容 } ///实收数量 string actualQty = CommonBLL.GetFieldValue(fields, "ACTUAL_QTY"); ///VMI入库单明细校验实收数量小于等于需求数量 string vmi_receive_detail_valid_actual_qty_less_required = new ConfigDAL().GetValueByCode("VMI_RECEIVE_DETAIL_VALID_ACTUAL_QTY_LESS_EQUAL_REQUIRED"); if (!string.IsNullOrEmpty(vmi_receive_detail_valid_actual_qty_less_required) && vmi_receive_detail_valid_actual_qty_less_required.ToLower() == "true") { decimal.TryParse(actualQty, out decimal dActualQty); if (dActualQty > vmiReceiveDetailInfo.RequiredQty.GetValueOrDefault()) { throw new Exception("MC:0x00000490");///物料实收数量不允许大于需求数量 } } ///如果入库状态为已发布,则只能更新实收数量和实收箱数 if (receiveInfo.Status.GetValueOrDefault() == (int)WmmOrderStatusConstants.Published) { if (string.IsNullOrEmpty(actualQty)) { actualQty = "NULL"; } ///实收箱数 string actualBoxNum = CommonBLL.GetFieldValue(fields, "ACTUAL_BOX_NUM"); if (string.IsNullOrEmpty(actualBoxNum)) { actualBoxNum = "NULL"; } ///修改用户 string loginUser = CommonBLL.GetFieldValue(fields, "MODIFY_USER"); fields = "[ACTUAL_QTY] = " + actualQty + ",[ACTUAL_BOX_NUM] = " + actualBoxNum + ",[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' "; return(dal.UpdateInfo(fields, id) > 0 ? true : false); } string requiredBoxNum = CommonBLL.GetFieldValue(fields, "REQUIRED_BOX_NUM"); int.TryParse(requiredBoxNum, out int intRequiredBoxNum); ///如果需求箱数大于零 if (intRequiredBoxNum > 0) { string perpackageGrossWeight = CommonBLL.GetFieldValue(fields, "PERPACKAGE_GROSS_WEIGHT"); decimal.TryParse(perpackageGrossWeight, out decimal decimalPerpackageGrossWeight); string sumWeight = CommonBLL.GetFieldValue(fields, "SUM_WEIGHT"); decimal.TryParse(sumWeight, out decimal decimalSumWeight); ///如果未填写单包装毛重,但是填写了总毛重,需要计算 if (decimalPerpackageGrossWeight == 0 && decimalSumWeight > 0) { decimalPerpackageGrossWeight = decimalSumWeight / intRequiredBoxNum; fields = CommonBLL.SetFieldValue(fields, "PERPACKAGE_GROSS_WEIGHT", decimalPerpackageGrossWeight.ToString(), false); } string packageVolume = CommonBLL.GetFieldValue(fields, "PACKAGE_VOLUME"); decimal.TryParse(packageVolume, out decimal decimalPackageVolume); string sumVolume = CommonBLL.GetFieldValue(fields, "SUM_VOLUME"); decimal.TryParse(sumVolume, out decimal decimalSumVolume); ///体积也是如此处理 if (decimalPackageVolume == 0 && decimalSumVolume > 0) { decimalPackageVolume = decimalSumVolume / intRequiredBoxNum; fields = CommonBLL.SetFieldValue(fields, "PACKAGE_VOLUME", decimalPackageVolume.ToString(), false); } string package = CommonBLL.GetFieldValue(fields, "PACKAGE"); decimal.TryParse(package, out decimal decimalPackage); string requiredQty = CommonBLL.GetFieldValue(fields, "REQUIRED_QTY"); decimal.TryParse(requiredQty, out decimal decimalRequiredQty); ///件数也是如此处理 if (decimalPackage == 0 && decimalRequiredQty > 0) { decimalPackage = Math.Ceiling(decimalRequiredQty / intRequiredBoxNum); fields = CommonBLL.SetFieldValue(fields, "PACKAGE", decimalPackage.ToString(), false); } } return(dal.UpdateInfo(fields, id) > 0 ? true : false); }
/// <summary> /// 供应商发货单同步 /// </summary> /// <param name="loginUser"></param> /// <returns></returns> public static void Sync(string loginUser) { ///获取没有处理的物料发货单表 List <SrmVmiShippingNoteInfo> srmVmiShippingNoteInfos = new SrmVmiShippingNoteBLL().GetList("[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Untreated + "", "[ID]"); if (srmVmiShippingNoteInfos.Count == 0) { return; } ///获取没有处理的物料发货单详情表 List <SrmVmiShippingNoteDetailInfo> srmVmiShippingNoteDetailInfos = new SrmVmiShippingNoteDetailBLL().GetList("[NOTE_FID] in ('" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.LogFid).ToArray()) + "')", "[ID]"); if (srmVmiShippingNoteDetailInfos.Count == 0) { return; } StringBuilder @string = new StringBuilder(); ///获取相关仓库信息 List <WarehouseInfo> warehouseInfos = new WarehouseBLL().GetList("[WAREHOUSE] in ('" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.VmiWmNo).ToArray()) + "')", string.Empty); if (warehouseInfos.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000230' where " +///仓库信息不存在 "[ID] in (" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.Id).ToArray()) + ");"); BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); return; } ///获取相关供应商基础信息 List <SupplierInfo> supplierInfos = new SupplierBLL().GetList("[SUPPLIER_NUM] in ('" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.SupplierCode).ToArray()) + "')", string.Empty); if (supplierInfos.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000229' where " +///供应商信息不存在 "[ID] in (" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.Id).ToArray()) + ");"); BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); return; } ///获取VMI供应商关系 List <VmiSupplierInfo> vmiSupplierInfos = new VmiSupplierBLL().GetList("" + "[SUPPLIER_NUM] in ('" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.SupplierCode).ToArray()) + "') and " + "[WM_NO] in ('" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.VmiWmNo).ToArray()) + "')", string.Empty); if (vmiSupplierInfos.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000429' where " +///VMI供应商信息未维护 "[ID] in (" + string.Join("','", srmVmiShippingNoteInfos.Select(d => d.Id).ToArray()) + ");"); BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); return; } ///获取相关物料基础信息 List <MaintainPartsInfo> maintainPartsInfos = new MaintainPartsBLL().GetList("" + "[PART_NO] in ('" + string.Join("','", srmVmiShippingNoteDetailInfos.Select(d => d.Partno).ToArray()) + "')", string.Empty); ///获取相关物料仓储信息 List <PartsStockInfo> partsStockInfos = new PartsStockBLL().GetList("" + "[PART_NO] in ('" + string.Join("','", srmVmiShippingNoteDetailInfos.Select(d => d.Partno).ToArray()) + "') and " + "[WM_NO] in ('" + string.Join("','", warehouseInfos.Select(d => d.Warehouse).ToArray()) + "')", string.Empty); ///获取相关包装器具基础信息 List <PackageApplianceInfo> packageApplianceInfos = new List <PackageApplianceInfo>(); if (partsStockInfos.Count > 0) { ///标准包装 List <string> packageModels = partsStockInfos. Where(d => !string.IsNullOrEmpty(d.PackageModel)). Select(d => d.PackageModel).ToList(); ///入库包装 packageModels.AddRange(partsStockInfos. Where(d => !string.IsNullOrEmpty(d.InboundPackageModel) && !packageModels.Contains(d.InboundPackageModel)). Select(d => d.InboundPackageModel).ToList()); ///上线包装 packageModels.AddRange(partsStockInfos. Where(d => !string.IsNullOrEmpty(d.InhousePackageModel) && !packageModels.Contains(d.InhousePackageModel)). Select(d => d.InhousePackageModel).ToList()); /// packageApplianceInfos = new PackageApplianceBLL().GetList("[PAKCAGE_NO] in ('" + string.Join("','", packageModels.ToArray()) + "')", string.Empty); } ///获取系统配置 Dictionary <string, string> configs = new ConfigBLL().GetValuesByCodes(new string[] { "RELEASE_VMI_RECEIVE_ACTUAL_QTY_EQUALS_REQUIRED", "ENABLE_VMI_FLAG" }); /// List <long> dealedIds = new List <long>(); ///如果数据不为空,按照规则分发 foreach (SrmVmiShippingNoteInfo srmVmiShippingNoteInfo in srmVmiShippingNoteInfos) { ///本单据的对应仓库 WarehouseInfo warehouseInfo = warehouseInfos.FirstOrDefault(d => d.Warehouse == srmVmiShippingNoteInfo.VmiWmNo); ///如果未处理的物料发货单中仓库码不存在, 修改中间表数据为挂起状态 if (warehouseInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000230' where " +///仓库信息不存在 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } ///仓库类型不是VMI if (warehouseInfo.WarehouseType.GetValueOrDefault() != (int)WarehouseTypeConstants.VMI) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000219' where " +///仓库类型错误 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } ///本发货单的物料明细 List <SrmVmiShippingNoteDetailInfo> srmVmiShippingNoteDetails = srmVmiShippingNoteDetailInfos.Where(d => d.NoteFid.GetValueOrDefault() == srmVmiShippingNoteInfo.Fid).ToList(); if (srmVmiShippingNoteDetails.Count == 0) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000465' where " +///发货单物料数据错误 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } ///供应商 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == srmVmiShippingNoteInfo.SupplierCode); if (supplierInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000229' where " +///供应商信息不存在 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } ///VMI供应商关系 VmiSupplierInfo vmiSupplierInfo = vmiSupplierInfos.FirstOrDefault(d => d.SupplierNum == supplierInfo.SupplierNum && d.WmNo == warehouseInfo.Warehouse); if (vmiSupplierInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000429' where " +///VMI供应商信息未维护 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } ///如果该仓库启用的是VMI模块则需要将单据写入VMI入库单 if (warehouseInfo.VmiEnable.GetValueOrDefault()) { ///发布VMI入库单时实收数量默认等于需求数量 configs.TryGetValue("RELEASE_VMI_RECEIVE_ACTUAL_QTY_EQUALS_REQUIRED", out string release_vmi_receive_actual_qty_equals_required); ///创建VMI入库单,TODO:默认类型与状态 VmiReceiveInfo vmiReceiveInfo = VmiReceiveBLL.CreateVmiReceiveInfo( loginUser, (int)VmiReceiveTypeConstants.ProductionWarehousing, (int)WmmOrderStatusConstants.Published); ///SrmVmiShippingNoteInfo -> VmiReceiveInfo VmiReceiveBLL.GetVmiReceiveInfo(srmVmiShippingNoteInfo, ref vmiReceiveInfo); ///SupplierInfo -> VmiReceiveInfo VmiReceiveBLL.GetVmiReceiveInfo(supplierInfo, ref vmiReceiveInfo); ///VmiSupplierInfo -> VmiReceiveInfo VmiReceiveBLL.GetVmiReceiveInfo(vmiSupplierInfo, ref vmiReceiveInfo); ///生成入库单语句 @string.AppendLine(VmiReceiveDAL.GetInsertSql(vmiReceiveInfo)); /// foreach (SrmVmiShippingNoteDetailInfo srmVmiShippingNoteDetail in srmVmiShippingNoteDetails) { ///创建VMI入库单明细 VmiReceiveDetailInfo vmiReceiveDetailInfo = VmiReceiveDetailBLL.CreateVmiReceiveDetailInfo(loginUser); ///VmiReceiveInfo -> VmiReceiveDetailInfo VmiReceiveDetailBLL.GetVmiReceiveDetailInfo(vmiReceiveInfo, ref vmiReceiveDetailInfo); ///MaintainPartsInfo -> VmiReceiveDetailInfo MaintainPartsInfo maintainPartsInfo = maintainPartsInfos.FirstOrDefault(d => d.PartNo == srmVmiShippingNoteDetail.Partno); VmiReceiveDetailBLL.GetVmiReceiveDetailInfo(maintainPartsInfo, ref vmiReceiveDetailInfo); ///PartsStockInfo -> VmiReceiveDetailInfo PartsStockInfo partsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == srmVmiShippingNoteDetail.Partno && d.WmNo == warehouseInfo.Warehouse); VmiReceiveDetailBLL.GetVmiReceiveDetailInfo(partsStockInfo, ref vmiReceiveDetailInfo); ///PackageApplianceInfo -> VmiReceiveDetailInfo PackageApplianceInfo packageApplianceInfo = partsStockInfo == null ? null : packageApplianceInfos.FirstOrDefault(d => d.PackageNo == partsStockInfo.InboundPackageModel); VmiReceiveDetailBLL.GetVmiReceiveDetailInfo(packageApplianceInfo, ref vmiReceiveDetailInfo); ///SrmVmiShippingNoteDetailInfo -> VmiReceiveDetailInfo VmiReceiveDetailBLL.GetVmiReceiveDetailInfo(srmVmiShippingNoteDetail, ref vmiReceiveDetailInfo); ///发布VMI入库单时实收数量默认等于需求数量 if (!string.IsNullOrEmpty(release_vmi_receive_actual_qty_equals_required) && release_vmi_receive_actual_qty_equals_required.ToLower() == "true") { ///ACTUAL_BOX_NUM vmiReceiveDetailInfo.ActualBoxNum = vmiReceiveDetailInfo.RequiredBoxNum; ///ACTUAL_QTY vmiReceiveDetailInfo.ActualQty = vmiReceiveDetailInfo.RequiredQty; } ///生成入库单明细语句 @string.AppendLine(VmiReceiveDetailDAL.GetInsertSql(vmiReceiveDetailInfo)); } dealedIds.Add(srmVmiShippingNoteInfo.Id); } ///如果未启用VMI模块,则根据WMS系统开关决定是否写入中间表 else { ///是否启用WMS系统标记 configs.TryGetValue("ENABLE_VMI_FLAG", out string enable_vmi_flag); if (!string.IsNullOrEmpty(enable_vmi_flag) && enable_vmi_flag.ToLower() == "true" && vmiSupplierInfo.VmiFlag.GetValueOrDefault()) { ///创建WMS入库单 WmsVmiInboundOrderInfo wmsVmiInboundOrderInfo = WmsVmiInboundOrderBLL.CreateWmsVmiInboundOrderInfo((int)ProcessFlagConstants.Untreated, loginUser); ///SrmVmiShippingNoteInfo -> WmsVmiInboundOrderInfo WmsVmiInboundOrderBLL.GetWmsVmiInboundOrderInfo(srmVmiShippingNoteInfo, ref wmsVmiInboundOrderInfo); ///生成入库单语句 @string.AppendLine(WmsVmiInboundOrderDAL.GetInsertSql(wmsVmiInboundOrderInfo)); /// foreach (SrmVmiShippingNoteDetailInfo srmVmiShippingNoteDetail in srmVmiShippingNoteDetails) { ///创建WMS入库单明细 WmsVmiInboundOrderDetailInfo wmsVmiInboundOrderDetailInfo = WmsVmiInboundOrderDetailBLL.CreateWmsVmiInboundOrderDetailInfo(loginUser); ///WmsVmiInboundOrderInfo -> WmsVmiInboundOrderDetailInfo WmsVmiInboundOrderDetailBLL.GetWmsVmiInboundOrderDetailInfo(wmsVmiInboundOrderInfo, ref wmsVmiInboundOrderDetailInfo); /// PartsStockInfo partsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == srmVmiShippingNoteDetail.Partno && d.WmNo == warehouseInfo.Warehouse); WmsVmiInboundOrderDetailBLL.GetWmsVmiInboundOrderDetailInfo(partsStockInfo, ref wmsVmiInboundOrderDetailInfo); ///SrmVmiShippingNoteDetailInfo -> WmsVmiInboundOrderDetailInfo WmsVmiInboundOrderDetailBLL.GetWmsVmiInboundOrderDetailInfo(srmVmiShippingNoteDetail, ref wmsVmiInboundOrderDetailInfo); ///生成WMS入库单明细语句 @string.AppendLine(WmsVmiInboundOrderDetailDAL.GetInsertSql(wmsVmiInboundOrderDetailInfo)); } /// string targetSystem = "VMI"; string methodCode = "LES-WMS-001"; @string.AppendLine(BLL.LES.CommonBLL.GetCreateOutboundLogSql( targetSystem, wmsVmiInboundOrderInfo.LogFid.GetValueOrDefault(), methodCode, srmVmiShippingNoteInfo.ShippingCode, loginUser)); dealedIds.Add(srmVmiShippingNoteInfo.Id); continue; } @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000466' where " +///该供应商未启用WMS功能 "[ID] = " + srmVmiShippingNoteInfo.Id + ";"); continue; } } if (dealedIds.Count > 0) { ///已处理的中间表数据更新为已处理状态 @string.AppendLine("update [LES].[TI_IFM_SRM_VMI_SHIPPING_NOTE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Processed + "," + "[PROCESS_TIME] = GETDATE() where " + "[ID] in (" + string.Join(",", dealedIds.ToArray()) + ");"); } ///执行 using (var trans = new TransactionScope()) { if (@string.Length > 0) { BLL.SYS.CommonBLL.ExecuteNonQueryBySql(@string.ToString()); } trans.Complete(); } }
/// <summary> /// 根据库存维度将入库单明细合并 /// </summary> /// <param name="ids"></param> /// <param name="stockDimension"></param> /// <returns></returns> public List <VmiReceiveDetailInfo> GetStockDimensionList(List <long> ids, List <string> stockDimension) { string sql = "select " + (stockDimension.Count > 0 ? string.Join(",", stockDimension.ToArray()) + "," : string.Empty) + "PART_NO, " + "TARGET_WM, " + "TARGET_ZONE, " + "TARGET_DLOC, " + "PART_CNAME, " + "PART_ENAME, " + "MEASURING_UNIT_NO, " + "IDENTIFY_PART_NO, " + "PART_TYPE, " + "REQUIRED_BOX_NUM = sum(REQUIRED_BOX_NUM), " + "REQUIRED_QTY = sum(REQUIRED_QTY), " + "ACTUAL_BOX_NUM = sum(ACTUAL_BOX_NUM), " + "ACTUAL_QTY = sum(ACTUAL_QTY), " + "TRAN_NO, " + "ORIGIN_PLACE, " + "PART_CLS, " + "PACKAGE_LENGTH, " + "PACKAGE_WIDTH, " + "PACKAGE_HEIGHT, " + "PERPACKAGE_GROSS_WEIGHT, " + "PACKAGE_VOLUME, " + "SUM_WEIGHT = sum(SUM_WEIGHT), " + "SUM_VOLUME = sum(SUM_VOLUME) " + "from [LES].[TT_WMM_VMI_RECEIVE_DETAIL] with(nolock) " + "where [VALID_FLAG] = 1 and [ID] in (" + string.Join(",", ids.ToArray()) + ") " + "group by [PART_NO],[PART_CNAME],[PART_ENAME],[MEASURING_UNIT_NO],[IDENTIFY_PART_NO],[PART_TYPE],[TRAN_NO],[ORIGIN_PLACE],[PART_CLS]," + "[PACKAGE_LENGTH],[PACKAGE_WIDTH],[PACKAGE_HEIGHT],[PERPACKAGE_GROSS_WEIGHT],[PACKAGE_VOLUME],[TARGET_DLOC],[TARGET_WM],[TARGET_ZONE]" + (stockDimension.Count > 0 ? "," + string.Join(",", stockDimension.ToArray()) : string.Empty) + ";"; Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetSqlStringCommand(sql); List <VmiReceiveDetailInfo> list = new List <VmiReceiveDetailInfo>(); using (IDataReader dr = db.ExecuteReader(cmd)) { while (dr.Read()) { VmiReceiveDetailInfo info = new VmiReceiveDetailInfo(); foreach (var dimension in stockDimension) { if (dimension.ToUpper() == "PLANT") { info.Plant = DBConvert.GetString(dr, dr.GetOrdinal("PLANT")); } if (dimension.ToUpper() == "SUPPLIER_NUM") { info.SupplierNum = DBConvert.GetString(dr, dr.GetOrdinal("SUPPLIER_NUM")); } if (dimension.ToUpper() == "PACKAGE_MODEL") { info.PackageModel = DBConvert.GetString(dr, dr.GetOrdinal("PACKAGE_MODEL")); } if (dimension.ToUpper() == "PACKAGE") { info.Package = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PACKAGE")); } if (dimension.ToUpper() == "ORIGIN_PLACE") { info.Package = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("ORIGIN_PLACE")); } if (dimension.ToUpper() == "PART_CLS") { info.PartCls = DBConvert.GetString(dr, dr.GetOrdinal("PART_CLS")); } } info.PartNo = DBConvert.GetString(dr, dr.GetOrdinal("PART_NO")); info.TargetWm = DBConvert.GetString(dr, dr.GetOrdinal("TARGET_WM")); info.TargetZone = DBConvert.GetString(dr, dr.GetOrdinal("TARGET_ZONE")); info.TargetDloc = DBConvert.GetString(dr, dr.GetOrdinal("TARGET_DLOC")); info.PartCname = DBConvert.GetString(dr, dr.GetOrdinal("PART_CNAME")); info.PartEname = DBConvert.GetString(dr, dr.GetOrdinal("PART_ENAME")); info.MeasuringUnitNo = DBConvert.GetString(dr, dr.GetOrdinal("MEASURING_UNIT_NO")); info.IdentifyPartNo = DBConvert.GetString(dr, dr.GetOrdinal("IDENTIFY_PART_NO")); info.PartType = DBConvert.GetInt32Nullable(dr, dr.GetOrdinal("PART_TYPE")); info.RequiredBoxNum = DBConvert.GetInt32Nullable(dr, dr.GetOrdinal("REQUIRED_BOX_NUM")); info.RequiredQty = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("REQUIRED_QTY")); info.ActualBoxNum = DBConvert.GetInt32Nullable(dr, dr.GetOrdinal("ACTUAL_BOX_NUM")); info.ActualQty = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("ACTUAL_QTY")); info.TranNo = DBConvert.GetString(dr, dr.GetOrdinal("TRAN_NO")); info.PackageLength = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PACKAGE_LENGTH")); info.PackageWidth = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PACKAGE_WIDTH")); info.PackageHeight = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PACKAGE_HEIGHT")); info.PerpackageGrossWeight = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PERPACKAGE_GROSS_WEIGHT")); info.PackageVolume = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("PACKAGE_VOLUME")); info.SumWeight = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("SUM_WEIGHT")); info.SumVolume = DBConvert.GetDecimalNullable(dr, dr.GetOrdinal("SUM_VOLUME")); list.Add(info); } } return(list); }