/// <summary> /// ReceiveDetailInfo -> PlanPullOrderDetailInfo /// </summary> /// <param name="receiveDetailInfo"></param> /// <param name="planPullOrderDetailInfo"></param> public static void GetPlanPullOrderDetailInfo(ReceiveDetailInfo receiveDetailInfo, ref PlanPullOrderDetailInfo planPullOrderDetailInfo) { if (receiveDetailInfo == null) { return; } ///SUPPLIER_NUM,供应商代码 planPullOrderDetailInfo.SupplierNum = receiveDetailInfo.SupplierNum; ///PART_NO,物料号 planPullOrderDetailInfo.PartNo = receiveDetailInfo.PartNo; ///PART_CNAME,物料中文描述 planPullOrderDetailInfo.PartCname = receiveDetailInfo.PartCname; ///PART_ENAME,物料英文描述 planPullOrderDetailInfo.PartEname = receiveDetailInfo.PartEname; ///MEASURING_UNIT_NO,单位 planPullOrderDetailInfo.MeasuringUnitNo = receiveDetailInfo.MeasuringUnitNo; ///INBOUND_PACKAGE_QTY,入库单包装数量 planPullOrderDetailInfo.InboundPackageQty = receiveDetailInfo.Package; ///INBOUND_PACKAGE_MODEL,入库包装编号 planPullOrderDetailInfo.InboundPackageModel = receiveDetailInfo.PackageModel; ///REQUIRED_PART_QTY,需求物料数量 planPullOrderDetailInfo.RequiredPartQty = receiveDetailInfo.RequiredQty.GetValueOrDefault() - receiveDetailInfo.ActualQty.GetValueOrDefault(); ///REQUIRED_PACKAGE_QTY,需求包装数 if (receiveDetailInfo.Package.GetValueOrDefault() > 0) { planPullOrderDetailInfo.RequiredPackageQty = Convert.ToInt32(Math.Ceiling(planPullOrderDetailInfo.RequiredPartQty.GetValueOrDefault() / receiveDetailInfo.Package.GetValueOrDefault())); } }
/// <summary> /// /// </summary> /// <param name="textWhere"></param> /// <param name="textOrder"></param> /// <param name="pageIndex"></param> /// <param name="pageRow"></param> /// <returns></returns> public List <ReceiveDetailInfo> GetReceiveDetailPageInfosByPage(string textWhere, string textOrder, int pageIndex, int pageRow) { if (pageIndex <= 0) { pageIndex = 1; } if (pageRow <= 0) { pageRow = 10; } string whereText = string.Empty; if (!string.IsNullOrEmpty(textWhere)) { if (textWhere.Trim().StartsWith("and", StringComparison.OrdinalIgnoreCase)) { whereText += " where [LES].[TT_WMM_RECEIVE_DETAIL].[VALID_FLAG] = 1 " + textWhere; } else { whereText += " where " + textWhere + " and [LES].[TT_WMM_RECEIVE_DETAIL].[VALID_FLAG] = 1"; } } else { whereText += " where [LES].[TT_WMM_RECEIVE_DETAIL].[VALID_FLAG] = 1 "; } if (string.IsNullOrEmpty(textOrder)) { textOrder += "[LES].[TT_WMM_RECEIVE_DETAIL].[ID] desc"; } string sql = "select top " + pageRow + " * from " + "(select row_number() over(order by " + textOrder + ") as rownumber" + ",[LES].[TT_WMM_RECEIVE_DETAIL].*" + ",[LES].[TT_WMM_RECEIVE].[TRAN_TIME]" + ",[LES].[TT_WMM_RECEIVE].[RECEIVE_NO]" + ",[LES].[TT_WMM_RECEIVE].[COST_CENTER]" + ",[LES].[TT_WMM_RECEIVE].[BOOK_KEEPER] " + "from [LES].[TT_WMM_RECEIVE_DETAIL] with(nolock) " + "left join [LES].[TT_WMM_RECEIVE] with(nolock) on [LES].[TT_WMM_RECEIVE].[FID] = [LES].[TT_WMM_RECEIVE_DETAIL].[RECEIVE_FID] and [LES].[TT_WMM_RECEIVE].[VALID_FLAG] = 1 " + "" + whereText + ") T " + "where rownumber > " + (pageIndex - 1) * pageRow + " "; Database db = DatabaseFactory.CreateDatabase(); DbCommand cmd = db.GetSqlStringCommand(sql); List <ReceiveDetailInfo> list = new List <ReceiveDetailInfo>(); using (IDataReader dr = db.ExecuteReader(cmd)) { while (dr.Read()) { ReceiveDetailInfo info = CreateReceiveDetailInfo(dr); info.TranTime = DBConvert.GetDateTime(dr, dr.GetOrdinal("TRAN_TIME")); info.TranNo = DBConvert.GetString(dr, dr.GetOrdinal("RECEIVE_NO")); info.CostCenter = DBConvert.GetString(dr, dr.GetOrdinal("COST_CENTER")); info.BookKeeper = DBConvert.GetString(dr, dr.GetOrdinal("BOOK_KEEPER")); list.Add(info); } } return(list); }
/// <summary> /// ReceiveDetailInfo -> BarcodeInfo /// </summary> /// <param name="receiveDetailInfo"></param> /// <param name="barcodeInfo"></param> public static void GetBarcodeInfo(ReceiveDetailInfo receiveDetailInfo, ref BarcodeInfo barcodeInfo) { if (receiveDetailInfo == null) { return; } barcodeInfo.PartNo = receiveDetailInfo.PartNo; barcodeInfo.PartCname = receiveDetailInfo.PartCname; barcodeInfo.PackageModel = receiveDetailInfo.PackageModel; barcodeInfo.Package = receiveDetailInfo.Package; barcodeInfo.IdentifyPartNo = receiveDetailInfo.IdentifyPartNo; barcodeInfo.MeasuringUnitNo = receiveDetailInfo.MeasuringUnitNo; barcodeInfo.SupplierNum = receiveDetailInfo.SupplierNum; barcodeInfo.Plant = receiveDetailInfo.Plant; barcodeInfo.AssemblyLine = receiveDetailInfo.AssemblyLine; barcodeInfo.Dock = receiveDetailInfo.Dock; barcodeInfo.WmNo = receiveDetailInfo.TargetWm; barcodeInfo.ZoneNo = receiveDetailInfo.TargetZone; barcodeInfo.Dloc = receiveDetailInfo.TargetDloc; barcodeInfo.BoxParts = receiveDetailInfo.BoxParts; barcodeInfo.RunsheetNo = receiveDetailInfo.RunsheetNo; barcodeInfo.AsnRunsheetNo = receiveDetailInfo.TranNo; barcodeInfo.PickupSeqNo = receiveDetailInfo.PickupSeqNo; barcodeInfo.RdcDloc = receiveDetailInfo.RdcDloc; barcodeInfo.Comments = receiveDetailInfo.Comments; barcodeInfo.PackageLength = receiveDetailInfo.PackageLength; barcodeInfo.PackageWidth = receiveDetailInfo.PackageWidth; barcodeInfo.PackageHeight = receiveDetailInfo.PackageHeight; barcodeInfo.PerpackageGrossWeight = receiveDetailInfo.PerpackageGrossWeight; barcodeInfo.CreateSourceFid = receiveDetailInfo.Fid; barcodeInfo.PackageVolume = receiveDetailInfo.PackageVolume; }
/// <summary> /// VmiReceiveDetailInfo -> ReceiveDetailInfo /// </summary> /// <param name="vmiReceiveDetailInfos"></param> /// <returns></returns> public static List <ReceiveDetailInfo> GetReceiveDetailInfos(List <VmiReceiveDetailInfo> vmiReceiveDetailInfos) { List <ReceiveDetailInfo> receiveDetailInfos = new List <ReceiveDetailInfo>(); foreach (var vmiReceiveDetailInfo in vmiReceiveDetailInfos) { ReceiveDetailInfo receiveDetailInfo = CreateReceiveDetailInfo(string.Empty); GetReceiveDetailInfo(vmiReceiveDetailInfo, ref receiveDetailInfo); receiveDetailInfos.Add(receiveDetailInfo); } return(receiveDetailInfos); }
/// <summary> /// ReceiveDetailInfo -> QmisAsnPullSheetInfo /// </summary> /// <param name="qmisAsnPullSheetInfo"></param> public static void GetQmisAsnPullSheetInfo(ReceiveDetailInfo receiveDetailInfo, ref QmisAsnPullSheetInfo info) { if (receiveDetailInfo == null) { return; } ///PLANT,工厂 info.Plant = receiveDetailInfo.Plant; ///ASN_NO,ASN单号 info.AsnNo = receiveDetailInfo.TranNo; ///ORDER_NO,拉动单号 info.OrderNo = receiveDetailInfo.RunsheetNo; ///PART_NO,物料编号 info.PartNo = receiveDetailInfo.PartNo; ///SUPPLIER_NO,供应商编码 info.SupplierNo = receiveDetailInfo.SupplierNum; ///ARRIVAL_DATE,预计到达时间 info.ArrivalDate = DateTime.Now; }
/// <summary> /// Create ReceiveDetailInfo /// </summary> /// <param name="loginUser"></param> /// <returns>ReceiveDetailInfo</returns> public static ReceiveDetailInfo CreateReceiveDetailInfo(string loginUser) { ReceiveDetailInfo info = new ReceiveDetailInfo(); ///FID,FID info.Fid = Guid.NewGuid(); ///VALID_FLAG,逻辑删除标记 info.ValidFlag = true; ///CREATE_USER,COMMON_CREATE_USER info.CreateUser = loginUser; ///CREATE_DATE,COMMON_CREATE_DATE info.CreateDate = DateTime.Now; ///QUALIFIED_QTY,合格数量 info.QualifiedQty = null; ///INSPECTION_STATUS,检验状态 10未检验 20 合格 30不合格 info.InspectionStatus = null; ///FROZEN_STOCK_FLAG,已冻结库存标记 info.FrozenStockFlag = null; return(info); }
/// <summary> /// ReceiveDetailInfo->PackageTranDetailInfo /// </summary> /// <param name="receiveDetailInfo"></param> /// <param name="packageTranDetailInfo"></param> public static void GetPackageTranDetailInfo(ReceiveDetailInfo receiveDetailInfo, ref PackageTranDetailInfo packageTranDetailInfo) { packageTranDetailInfo.TranNo = receiveDetailInfo.TranNo; ///随货入库 packageTranDetailInfo.TranType = (int)PackageTranTypeConstants.FullInbound; packageTranDetailInfo.BarcodeData = string.Empty; packageTranDetailInfo.PartNo = receiveDetailInfo.PartNo; packageTranDetailInfo.Plant = receiveDetailInfo.Plant; packageTranDetailInfo.AssemblyLine = receiveDetailInfo.AssemblyLine; packageTranDetailInfo.SupplierNum = receiveDetailInfo.SupplierNum; packageTranDetailInfo.WmNo = receiveDetailInfo.WmNo; packageTranDetailInfo.ZoneNo = receiveDetailInfo.ZoneNo; packageTranDetailInfo.Dloc = receiveDetailInfo.Dloc; packageTranDetailInfo.TargetWm = receiveDetailInfo.TargetWm; packageTranDetailInfo.TargetZone = receiveDetailInfo.TargetZone; packageTranDetailInfo.TargetDloc = receiveDetailInfo.TargetDloc; packageTranDetailInfo.PackageNo = receiveDetailInfo.PackageModel; packageTranDetailInfo.Package = receiveDetailInfo.Package; packageTranDetailInfo.PackageQty = receiveDetailInfo.ActualBoxNum; packageTranDetailInfo.Comments = receiveDetailInfo.Comments; }
/// <summary> /// ReceiveDetailInfo-->EmergencyPullingCartInfo /// </summary> /// <param name="receiveDetailInfo"></param> /// <param name="info"></param> public static void GetEmergencyPullingCartByReceiveDetail(ReceiveDetailInfo receiveDetailInfo, ref EmergencyPullingCartInfo info) { if (receiveDetailInfo == null) { return; } ///PART_NO,物料图号 info.PartNo = receiveDetailInfo.PartNo; ///REQUIRED_PART_QTY,物料需求数量 info.RequiredPartQty = receiveDetailInfo.RequiredQty.GetValueOrDefault(); ///REQUIRED_BOX_QTY,包装需求数量 info.RequiredBoxQty = receiveDetailInfo.RequiredBoxNum.GetValueOrDefault(); ///PART_CNAME,物料中文描述 info.PartCname = receiveDetailInfo.PartCname; ///PULL_PACKAGE_QTY,拉动包装数 ///TODO: Package和InhousePackage 那个有效? info.PullPackageQty = receiveDetailInfo.Package.GetValueOrDefault(); ///PULL_PACKAGE_MODEL,拉动包装型号 ///TODO:PackageModel和InhousePackageModel 那个有效? info.PullPackageModel = receiveDetailInfo.PackageModel; ///SUPPLIER_NUM,供应商代码 info.SupplierNum = receiveDetailInfo.SupplierNum; ///S_WM_NO,来源仓库 info.SWmNo = receiveDetailInfo.WmNo; ///S_ZONE_NO,来源存储区 info.SZoneNo = receiveDetailInfo.ZoneNo; ///T_WM_NO,目标仓库 info.TWmNo = receiveDetailInfo.TargetWm; ///T_ZONE_NO,目标存储区 info.TZoneNo = receiveDetailInfo.TargetZone; ///PLANT,工厂代码 info.Plant = receiveDetailInfo.Plant; ///ASSEMBLY_LINE,产线代码 info.AssemblyLine = receiveDetailInfo.AssemblyLine; ///EMERGENCY_PULL_MODE,紧急拉动模式 info.EmergencyPullMode = (int)EmergencyPullModeConstants.ManualPull; ///STATUS,状态 info.Status = 10;///已提交 TODO:没有枚举项 }
/// <summary> /// InsertInfo /// </summary> /// <param name="info"></param> /// <returns></returns> public long InsertInfo(ReceiveDetailInfo info) { ReceiveInfo receiveInfo = new ReceiveDAL().GetInfo(info.ReceiveFid.GetValueOrDefault()); if (receiveInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } if (dal.GetList("[RECEIVE_FID] = N'" + info.ReceiveFid + "' and [PART_NO] = N'" + info.PartNo + "' and [SUPPLIER_NUM] = N'" + info.SupplierNum + "'", string.Empty).Count > 0) { throw new Exception("MC:0x00000464");///同物料号供应商不能一致 } //if (receiveInfo.Status.GetValueOrDefault() != (int)WmmOrderStatusConstants.Created) // throw new Exception("MC:0x00000152");///入库单处理已创建状态时才能添加材料 int cnt = 0; ///入库单是否按供应商类型校验 string receiveOrderValidSupplierTypeFlag = new ConfigDAL().GetValueByCode("RECEIVE_ORDER_VALID_SUPPLIER_TYPE_FLAG"); if (receiveOrderValidSupplierTypeFlag.ToLower() == "true") { ///需要校验入库单的供应商是否为储运供应商 cnt = new SupplierDAL().GetCounts("[SUPPLIER_TYPE] = " + (int)SupplierTypeConstants.LogisticsSupplier + " and [SUPPLIER_NUM] = N'" + receiveInfo.SupplierNum + "'"); ///储运供应商标记 bool logisticsSupplierFlag = cnt == 0 ? false : true; if (logisticsSupplierFlag) { cnt = dal.GetCounts("[PART_NO] = N'" + info.PartNo + "' and [SUPPLIER_NUM] = N'" + info.SupplierNum + "' and [RECEIVE_FID] = N'" + info.ReceiveFid.GetValueOrDefault() + "'"); if (cnt > 0) { throw new Exception("MC:0x00000175");///同一入库单下不能出现相同供应商的物料编码 } } else { ///入库单明细与入库单不是同一家供应商 cnt = new ReceiveDAL().GetCounts("[SUPPLIER_NUM] = N'" + info.SupplierNum + "' and [FID] = N'" + info.ReceiveFid.GetValueOrDefault() + "'"); if (cnt == 0) { throw new Exception("MC:0x00000176");///入库单的物料供应商与入库明细的供应商不一致 } cnt = dal.GetCounts("[PART_NO] = N'" + info.PartNo + "' and [RECEIVE_FID] = N'" + info.ReceiveFid.GetValueOrDefault() + "'"); if (cnt > 0) { throw new Exception("MC:0x00000177");///同一入库单下不能出现相同的物料编码 } } } ///明细中供应商缺失时,从单据上获取 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; ///创建入库单时实收数量等于需求数量 string createReceiveActualQtyEqualsRequired = new ConfigDAL().GetValueByCode("CREATE_RECEIVE_ACTUAL_QTY_EQUALS_REQUIRED"); if (createReceiveActualQtyEqualsRequired.ToLower() == "true") { info.ActualBoxNum = info.RequiredBoxNum; 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)); }
public static void GetReceiveDetailInfo(ref ReceiveDetailInfo receiveDetailInfo) { }
/// <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> /// UpdateInfo /// </summary> /// <param name="fields"></param> /// <param name="id"></param> /// <returns></returns> public bool UpdateInfo(string fields, long id) { string receiveFid = CommonBLL.GetFieldValue(fields, "RECEIVE_FID"); ReceiveInfo receiveInfo = new ReceiveDAL().GetInfo(Guid.Parse(receiveFid)); if (receiveInfo == null) { throw new Exception("MC:0x00000252");///入库单数据错误 } //if (receiveInfo.Status == (int)WmmOrderStatusConstants.Completed // || receiveInfo.Status == (int)WmmOrderStatusConstants.Closed) // throw new Exception("MC:0x00000253");///入库单状态为已关闭或已完成时不能修改其内容 //if (receiveInfo.Status == (int)WmmOrderStatusConstants.Created) //{ // ///入库单是否按供应商类型校验 // string receiveOrderValidSupplierTypeFlag = new ConfigDAL().GetValueByCode("RECEIVE_ORDER_VALID_SUPPLIER_TYPE_FLAG"); // if (receiveOrderValidSupplierTypeFlag.ToLower() == "true") // { // string supplierNum = CommonBLL.GetFieldValue(fields, "SUPPLIER_NUM"); // string partNo = CommonBLL.GetFieldValue(fields, "PART_NO"); // ///需要校验入库单的供应商是否为储运供应商 // int cnt = new SupplierDAL().GetCounts("[SUPPLIER_TYPE] = " + (int)SupplierTypeConstants.LogisticsSupplier + " and [SUPPLIER_NUM] in (select [SUPPLIER_NUM] from [LES].[TT_WMM_RECEIVE] with(nolock) where [FID] = N'" + receiveFid + "' and [VALID_FLAG] = 1)"); // ///储运供应商标记 // bool logisticsSupplierFlag = cnt == 0 ? false : true; // if (logisticsSupplierFlag) // { // cnt = dal.GetCounts("[ID] <> " + id + " and [PART_NO] = N'" + partNo + "' and [SUPPLIER_NUM] = N'" + supplierNum + "' and [RECEIVE_FID] = N'" + receiveFid + "'"); // if (cnt > 0) // throw new Exception("MC:0x00000175");///同一入库单下不能出现相同供应商的物料编码 // } // else // { // ///入库单明细与入库单不是同一家供应商 // cnt = new ReceiveDAL().GetCounts("[SUPPLIER_NUM] = N'" + supplierNum + "' and [FID] = N'" + receiveFid + "'"); // if (cnt == 0) // throw new Exception("MC:0x00000176");///入库单的物料供应商与入库明细的供应商不一致 // cnt = dal.GetCounts("[ID] <> " + id + " and [PART_NO] = N'" + partNo + "' and [RECEIVE_FID] = N'" + receiveFid + "'"); // if (cnt > 0) // throw new Exception("MC:0x00000177");///同一入库单下不能出现相同的物料编码 // } // } //} //else //{ ReceiveDetailInfo receiveDetailInfo = dal.GetInfo(id); ///实收数量 string actualQty = CommonBLL.GetFieldValue(fields, "ACTUAL_QTY"); if (string.IsNullOrEmpty(actualQty)) { actualQty = "NULL"; } if (Convert.ToInt32(actualQty) > receiveDetailInfo.RequiredQty) { throw new Exception("MC:0x00000424"); ///实收数不能大于需求数 } ///实收箱数 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 + "' "; // } 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="ids"></param> /// <param name="stockDimension"></param> /// <returns></returns> public List <ReceiveDetailInfo> 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_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 <ReceiveDetailInfo> list = new List <ReceiveDetailInfo>(); using (IDataReader dr = db.ExecuteReader(cmd)) { while (dr.Read()) { ReceiveDetailInfo info = new ReceiveDetailInfo(); 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); }
/// <summary> /// ReceiveDetailInfo=>TranDetailsInfo /// </summary> /// <param name="receiveDetailInfo"></param> /// <param name="tranDetailsInfo"></param> /// <returns></returns> public static void GetTranDetailsInfo(ReceiveDetailInfo receiveDetailInfo, ref TranDetailsInfo tranDetailsInfo) { ///单据号 tranDetailsInfo.TranNo = receiveDetailInfo.TranNo; ///零件号 tranDetailsInfo.PartNo = receiveDetailInfo.PartNo; ///零件中文名 tranDetailsInfo.PartCname = receiveDetailInfo.PartCname; ///零件类别 tranDetailsInfo.PartCls = receiveDetailInfo.PartCls; ///条码 tranDetailsInfo.BarcodeData = receiveDetailInfo.BarcodeData; ///供应商 tranDetailsInfo.SupplierNum = receiveDetailInfo.SupplierNum; ///工厂 tranDetailsInfo.Plant = receiveDetailInfo.Plant; ///源仓库编码 tranDetailsInfo.WmNo = receiveDetailInfo.WmNo; ///源存贮区编码 tranDetailsInfo.ZoneNo = receiveDetailInfo.ZoneNo; ///源库位 tranDetailsInfo.Dloc = receiveDetailInfo.Dloc; ///目的仓库 tranDetailsInfo.TargetWm = receiveDetailInfo.TargetWm; ///目的存贮区 tranDetailsInfo.TargetZone = receiveDetailInfo.TargetZone; ///目的库位 tranDetailsInfo.TargetDloc = receiveDetailInfo.TargetDloc; ///单位 tranDetailsInfo.MeasuringUnitNo = receiveDetailInfo.MeasuringUnitNo; ///包装类型 tranDetailsInfo.PackageModel = receiveDetailInfo.PackageModel; ///单包装数 tranDetailsInfo.Package = receiveDetailInfo.Package; ///需求包装数量 tranDetailsInfo.RequiredPackageQty = receiveDetailInfo.RequiredBoxNum; ///需求数量 tranDetailsInfo.RequiredQty = receiveDetailInfo.RequiredQty; ///实收包装数 tranDetailsInfo.ActualPackageQty = receiveDetailInfo.ActualBoxNum; ///实收数量 tranDetailsInfo.ActualQty = receiveDetailInfo.ActualQty; ///物料金额 tranDetailsInfo.PartPrice = receiveDetailInfo.PartPrice; ///零件类 tranDetailsInfo.BoxParts = receiveDetailInfo.BoxParts; ///捡料顺序号 tranDetailsInfo.PickupSeqNo = receiveDetailInfo.PickupSeqNo; ///供应商库位 tranDetailsInfo.RdcDloc = receiveDetailInfo.RdcDloc; ///DOCK tranDetailsInfo.Dock = receiveDetailInfo.Dock; ///上线包装型号 tranDetailsInfo.InhousePackageModel = receiveDetailInfo.InhousePackageModel; ///上线包装数 tranDetailsInfo.InhousePackage = receiveDetailInfo.InhousePackage; ///产地 tranDetailsInfo.OriginPlace = receiveDetailInfo.OriginPlace; ///拉动单号 tranDetailsInfo.RunsheetNo = receiveDetailInfo.RunsheetNo; ///备注 tranDetailsInfo.Comments = receiveDetailInfo.Comments; }
/// <summary> /// 同步 /// </summary> /// <param name="loginUser"></param> public static void Sync(string loginUser) { ///获取没有处理的送货单数据 List <SrmBarcodeInfo> srmBarcodeInfos = new SrmBarcodeBLL().GetList("[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Untreated + "", string.Empty); if (srmBarcodeInfos.Count == 0) { return; } ///获取对应的ASN单据,TODO:单据类型过滤?原始单据号是指? List <ReceiveInfo> receiveInfos = new ReceiveBLL().GetList("[ASN_NO] in ('" + string.Join("','", srmBarcodeInfos.Select(d => d.SourceOrderCode).ToArray()) + "')", string.Empty); if (receiveInfos.Count == 0) { return; } List <ReceiveDetailInfo> receiveDetailInfos = new ReceiveDetailBLL().GetList("[RECEIVE_FID] in ('" + string.Join("','", receiveInfos.Select(d => d.Fid.GetValueOrDefault()).ToArray()) + "')", string.Empty); if (receiveDetailInfos.Count == 0) { return; } ///供应商 List <SupplierInfo> supplierInfos = new SupplierBLL().GetList("[SUPPLIER_NUM] in ('" + string.Join("','", receiveInfos.Select(d => d.SupplierNum).ToArray()) + "')", string.Empty); if (supplierInfos.Count == 0) { return; } ///获取相关物料仓储信息 List <PartsStockInfo> partsStockInfos = new PartsStockBLL().GetList("" + "[PART_NO] in ('" + string.Join("','", srmBarcodeInfos.Select(d => d.PartNo).ToArray()) + "') and " + "[WM_NO] in ('" + string.Join("','", receiveInfos.Select(d => d.WmNo).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); } /// StringBuilder @string = new StringBuilder(); /// List <long> dealedIds = new List <long>(); /// foreach (SrmBarcodeInfo srmBarcodeInfo in srmBarcodeInfos) { ///获取入库单。TODO:需要两个编号才能定位到唯一明细数据 ReceiveInfo receiveInfo = receiveInfos.FirstOrDefault(d => d.AsnNo == srmBarcodeInfo.SourceOrderCode); ///标签数据与ASN单据数据到达LES可能存在先后顺序 if (receiveInfo == null) { continue; } ReceiveDetailInfo receiveDetailInfo = receiveDetailInfos.FirstOrDefault(d => d.PartNo == srmBarcodeInfo.PartNo && d.ReceiveFid.GetValueOrDefault() == receiveInfo.Fid.GetValueOrDefault() && d.RunsheetNo == srmBarcodeInfo.SourceOrderCode); if (receiveDetailInfo == null) { continue; } ///供应商 SupplierInfo supplierInfo = supplierInfos.FirstOrDefault(d => d.SupplierNum == receiveInfo.SupplierNum); if (supplierInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_BARCODE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000229' where " +///供应商信息不存在 "[ID] = " + srmBarcodeInfo.Id + ";"); continue; } ///物料仓储信息 PartsStockInfo partsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == srmBarcodeInfo.PartNo && d.SupplierNum == supplierInfo.SupplierNum && d.WmNo == receiveInfo.WmNo && d.ZoneNo == receiveInfo.ZoneNo); if (partsStockInfo == null) { partsStockInfo = partsStockInfos.FirstOrDefault(d => d.PartNo == srmBarcodeInfo.PartNo && d.WmNo == receiveInfo.WmNo && d.ZoneNo == receiveInfo.ZoneNo); } if (partsStockInfo == null) { @string.AppendLine("update [LES].[TI_IFM_SRM_BARCODE] set " + "[PROCESS_FLAG] = " + (int)ProcessFlagConstants.Suspend + "," + "[PROCESS_TIME] = GETDATE()," + "[COMMENTS] = N'0x00000370' where " +///没有相关的物料仓储信息 "[ID] = " + srmBarcodeInfo.Id + ";"); continue; } ///创建标签对象 BarcodeInfo barcodeInfo = BarcodeBLL.CreateBarcodeInfo(loginUser); ///SrmBarcodeInfo -> BarcodeInfo BarcodeBLL.GetBarcodeInfo(srmBarcodeInfo, ref barcodeInfo); ///SupplierInfo -> BarcodeInfo BarcodeBLL.GetBarcodeInfo(supplierInfo, ref barcodeInfo); ///PartsStockInfo -> BarcodeInfo BarcodeBLL.GetBarcodeInfo(partsStockInfo, ref barcodeInfo); ///PackageApplianceInfo -> BarcodeInfo PackageApplianceInfo packageApplianceInfo = packageApplianceInfos.FirstOrDefault(d => d.PackageNo == partsStockInfo.InboundPackageModel); BarcodeBLL.GetBarcodeInfo(packageApplianceInfo, ref barcodeInfo); /// barcodeInfo.CreateSourceFid = receiveDetailInfo.Fid; /// @string.AppendLine(BarcodeDAL.GetInsertSql(barcodeInfo)); dealedIds.Add(srmBarcodeInfo.Id); } if (dealedIds.Count > 0) { ///已处理的中间表数据更新为已处理状态 @string.AppendLine("update [LES].[TI_IFM_SRM_BARCODE] 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(); } }