/// <summary> /// LogicDeleteInfo /// </summary> /// <param name="id"></param> /// <param name="loginUser"></param> /// <returns></returns> public bool LogicDeleteInfo(long id, string loginUser) { int cnt = new VmiOutputDAL().GetCounts("" + "[STATUS] = " + (int)WmmOrderStatusConstants.Created + " and " + "[FID] in (select [OUTPUT_FID] from [LES].[TT_WMM_VMI_OUTPUT_DETAIL] with(nolock) where [VALID_FLAG] = 1 and [ID] = " + id + ")"); if (cnt == 0) { throw new Exception("MC:0x00000145");///出库单状态为已创建时才能删除物料 } return(dal.LogicDelete(id, loginUser) > 0 ? true : false); }
/// <summary> /// InsertInfo /// </summary> /// <param name="info"></param> /// <returns></returns> public long InsertInfo(VmiOutputDetailInfo info) { VmiOutputInfo outputInfo = new VmiOutputDAL().GetInfo(info.OutputFid.GetValueOrDefault()); if (outputInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } if (outputInfo.Status.GetValueOrDefault() != (int)WmmOrderStatusConstants.Created) { throw new Exception("MC:0x00000506");///出库单为已创建状态才能添加物料 } /// if (dal.GetList("[OUTPUT_FID] = N'" + info.OutputFid + "' and [PART_NO] = N'" + info.PartNo + "' and [SUPPLIER_NUM] = N'" + info.SupplierNum + "'", string.Empty).Count > 0) { throw new Exception("MC:0x00000464");///同物料号供应商不能一致 } /// if (info.RequiredQty.GetValueOrDefault() <= 0) { throw new Exception("MC:0x00000507");///物料需求数量不能小于等于零 } ///有单包装数量时需要计算 if (info.Package.GetValueOrDefault() > 0) { info.RequiredBoxNum = Convert.ToInt32(Math.Ceiling(info.RequiredQty.GetValueOrDefault() / info.Package.GetValueOrDefault())); } ///单据号 if (string.IsNullOrEmpty(info.TranNo)) { info.TranNo = outputInfo.OutputNo; } ///仓库 if (string.IsNullOrEmpty(info.WmNo)) { info.WmNo = outputInfo.WmNo; } if (string.IsNullOrEmpty(info.TargetWm)) { info.TargetWm = outputInfo.TWmNo; } ///存储区 if (string.IsNullOrEmpty(info.ZoneNo)) { info.ZoneNo = outputInfo.ZoneNo; } if (string.IsNullOrEmpty(info.TargetZone)) { info.TargetZone = outputInfo.TZoneNo; } ///创建VMI出库单时实发数量等于需求数量 string create_vmi_output_actual_qty_equals_required = new ConfigDAL().GetValueByCode("CREATE_VMI_OUTPUT_ACTUAL_QTY_EQUALS_REQUIRED"); if (!string.IsNullOrEmpty(create_vmi_output_actual_qty_equals_required) && create_vmi_output_actual_qty_equals_required.ToLower() == "true") { if (info.ActualQty == null) { info.ActualQty = info.RequiredQty; } if (info.ActualBoxNum == null) { info.ActualBoxNum = info.RequiredBoxNum; } } /// return(dal.Add(info)); }
/// <summary> /// UpdateInfo /// </summary> /// <param name="fields"></param> /// <param name="id"></param> /// <returns></returns> public bool UpdateInfo(string fields, long id) { VmiOutputDetailInfo vmiOutputDetailInfo = dal.GetInfo(id); if (vmiOutputDetailInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } VmiOutputInfo vmiOutputInfo = new VmiOutputDAL().GetInfo(vmiOutputDetailInfo.OutputFid.GetValueOrDefault()); if (vmiOutputInfo == null) { throw new Exception("MC:0x00000084");///出库单数据错误 } if (vmiOutputInfo.Status == (int)WmmOrderStatusConstants.Completed || vmiOutputInfo.Status == (int)WmmOrderStatusConstants.Closed) { throw new Exception("MC:0x00000412");///出库单状态为已关闭或已完成时不能修改其内容 } ///修改用户 string loginUser = CommonBLL.GetFieldValue(fields, "MODIFY_USER"); if (vmiOutputInfo.Status == (int)WmmOrderStatusConstants.Published) { ///实收数量 string actualQty = CommonBLL.GetFieldValue(fields, "ACTUAL_QTY"); if (string.IsNullOrEmpty(actualQty)) { actualQty = "NULL"; } if (Convert.ToDecimal(actualQty) > vmiOutputDetailInfo.RequiredQty.GetValueOrDefault()) { throw new Exception("MC:0x00000424");///实收数不能大于需求数 } ///实收箱数 string actualBoxNum = CommonBLL.GetFieldValue(fields, "ACTUAL_BOX_NUM"); if (string.IsNullOrEmpty(actualBoxNum)) { actualBoxNum = "NULL"; } fields = "[ACTUAL_QTY] = " + actualQty + ",[ACTUAL_BOX_NUM] = " + actualBoxNum + ",[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' "; /// return(dal.UpdateInfo(fields, id) > 0 ? true : false); } /// string partNo = CommonBLL.GetFieldValue(fields, "PART_NO"); string supplierNum = CommonBLL.GetFieldValue(fields, "SUPPLIER_NUM"); /// if (dal.GetList("[OUTPUT_FID] = N'" + vmiOutputInfo.Fid.GetValueOrDefault() + "' and " + "[PART_NO] = N'" + partNo + "' and " + "[SUPPLIER_NUM] = N'" + supplierNum + "' and " + "[ID] <> " + id + "", string.Empty).Count > 0) { throw new Exception("MC:0x00000464");///同物料号供应商不能一致 } ///实收数量 string requiredQty = CommonBLL.GetFieldValue(fields, "REQUIRED_QTY"); if (string.IsNullOrEmpty(requiredQty)) { requiredQty = "0"; } if (Convert.ToDecimal(requiredQty) <= 0) { throw new Exception("MC:0x00000507");///物料需求数量不能小于等于零 } ///创建VMI出库单时实发数量等于需求数量 string create_vmi_output_actual_qty_equals_required = new ConfigDAL().GetValueByCode("CREATE_VMI_OUTPUT_ACTUAL_QTY_EQUALS_REQUIRED"); ///实收数量 string package = CommonBLL.GetFieldValue(fields, "PACKAGE"); if (string.IsNullOrEmpty(package)) { package = "0"; } ///有单包装数量时需要计算 if (Convert.ToDecimal(package) > 0) { int requiredBoxNum = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(requiredQty) / Convert.ToDecimal(package))); fields = CommonBLL.SetFieldValue(fields, "REQUIRED_BOX_NUM", requiredBoxNum.ToString(), false); if (!string.IsNullOrEmpty(create_vmi_output_actual_qty_equals_required) && create_vmi_output_actual_qty_equals_required.ToLower() == "true") { fields = CommonBLL.SetFieldValue(fields, "ACTUAL_BOX_NUM", requiredBoxNum.ToString(), false); } } if (!string.IsNullOrEmpty(create_vmi_output_actual_qty_equals_required) && create_vmi_output_actual_qty_equals_required.ToLower() == "true") { fields = CommonBLL.SetFieldValue(fields, "ACTUAL_QTY", requiredQty.ToString(), false); } return(dal.UpdateInfo(fields, id) > 0 ? true : false); }
/// <summary> /// 发货(提交) /// </summary> /// <param name="rowsKeyValues"></param> /// <param name="loginUser"></param> /// <returns></returns> public bool ReleaseInfos(List <string> rowsKeyValues, string loginUser) { if (rowsKeyValues.Count == 0) { throw new Exception("MC:0x00000084");///数据错误 } List <VmiShippingPartInfo> vmiShippingPartInfos = new List <VmiShippingPartInfo>(); foreach (var rowsKeyValue in rowsKeyValues) { string[] keyValues = rowsKeyValue.Split(new char[] { '^' }, StringSplitOptions.RemoveEmptyEntries); if (keyValues.Length == 0) { throw new Exception("MC:0x00000084");///数据错误 } if (keyValues.Length == 1) { throw new Exception("MC:0x00000496");///预发货数量不能为空 } VmiShippingPartInfo vmiShippingPartInfo = new VmiShippingPartInfo(); vmiShippingPartInfo.Id = Convert.ToInt64(keyValues[0]); vmiShippingPartInfo.AsnConfirmQty = Convert.ToDecimal(keyValues[1]); vmiShippingPartInfos.Add(vmiShippingPartInfo); } List <VmiShippingPartInfo> vmiShippingParts = dal.GetList("[ID] in (" + string.Join(",", vmiShippingPartInfos.Select(d => d.Id).ToArray()) + ")", string.Empty); if (vmiShippingParts.Count == 0) { throw new Exception("MC:0x00000084");///数据错误 } List <VmiPullOrderInfo> vmiPullOrderInfos = new VmiPullOrderDAL().GetList("" + "[FID] in ('" + string.Join("','", vmiShippingParts.Select(d => d.OrderFid.GetValueOrDefault().ToString()).ToArray()) + "') and " + "[ORDER_STATUS] <> " + (int)PullOrderStatusConstants.Released + "", string.Empty); if (vmiPullOrderInfos.Count > 0) { throw new Exception("MC:0x00000378");///状态为已发布时才能进行发货操作 } ///TODO:此时对应购物车中的相关数据是否需要清理 ///预执行SQL脚本 StringBuilder @string = new StringBuilder(); ///根据零件类、拉动模式等条件分组 var vmiShippingPartBoxs = vmiShippingParts. GroupBy(d => new { d.PartBoxCode, d.PullMode, d.RouteCode, d.Plant, d.SWmNo, d.SZoneNo, d.TWmNo, d.TZoneNo, d.TDock }). Select(d => new { d.Key }).ToList(); ///获取零件仓储信息集合 List <PartsStockInfo> partsStockInfos = new PartsStockDAL().GetList("[PART_NO] in ('" + string.Join("','", vmiShippingParts.Select(d => d.PartNo).ToArray()) + "')", string.Empty); ///发布VMI出库单时实发数量等于需求数量 string release_vmi_output_actual_qty_equals_required = new ConfigDAL().GetValueByCode("RELEASE_VMI_OUTPUT_ACTUAL_QTY_EQUALS_REQUIRED"); ///遍历零件类 foreach (var vmiShippingPartBox in vmiShippingPartBoxs) { /// List <VmiShippingPartInfo> partInfos = vmiShippingParts.Where(d => d.PartBoxCode == vmiShippingPartBox.Key.PartBoxCode && d.PullMode == vmiShippingPartBox.Key.PullMode && d.RouteCode == vmiShippingPartBox.Key.RouteCode && d.Plant == vmiShippingPartBox.Key.Plant && d.SWmNo == vmiShippingPartBox.Key.SWmNo && d.SZoneNo == vmiShippingPartBox.Key.SZoneNo && d.TWmNo == vmiShippingPartBox.Key.TWmNo && d.TZoneNo == vmiShippingPartBox.Key.TZoneNo && d.TDock == vmiShippingPartBox.Key.TDock).ToList(); if (partInfos.Count == 0) { throw new Exception("MC:0x00000084");///数据错误 } /// VmiOutputInfo vmiOutputInfo = VmiOutputBLL.CreateVmiOutputInfo(loginUser); ///OUTPUT_NO,出库单号 vmiOutputInfo.OutputNo = new SeqDefineDAL().GetCurrentCode("VMI_OUTPUT_NO"); ///ASN_NO,ASN编号,TODO:目前以是否写入了ASN_NO作为区别是否编辑ASN的分类,后续考虑增加字段ASN_FLAG? vmiOutputInfo.AsnNo = vmiOutputInfo.OutputNo; ///WM_NO,仓库编码 vmiOutputInfo.WmNo = vmiShippingPartBox.Key.SWmNo; ///ZONE_NO,存贮区编码 vmiOutputInfo.ZoneNo = vmiShippingPartBox.Key.SZoneNo; ///T_WM_NO,目标仓库代码 vmiOutputInfo.TWmNo = vmiShippingPartBox.Key.TWmNo; ///T_ZONE_NO,目标存储区代码 vmiOutputInfo.TZoneNo = vmiShippingPartBox.Key.TZoneNo; ///T_DOCK,目标道口代码 vmiOutputInfo.TDock = vmiShippingPartBox.Key.TDock; ///PART_BOX_CODE,零件类代码 vmiOutputInfo.PartBoxCode = vmiShippingPartBox.Key.PartBoxCode; ///ROUTE,送货路径 vmiOutputInfo.Route = vmiShippingPartBox.Key.RouteCode; ///PULL_MODE,拉动方式 vmiOutputInfo.PullMode = vmiShippingPartBox.Key.PullMode; ///OUTPUT_TYPE,出库类型 vmiOutputInfo.OutputType = (int)VmiOutputTypeConstants.PullingOutbound; ///SEND_TIME,发送时间 vmiOutputInfo.SendTime = DateTime.Now; ///STATUS,出库单状态 vmiOutputInfo.Status = (int)WmmOrderStatusConstants.Published; /// @string.AppendLine(VmiOutputDAL.GetInsertSql(vmiOutputInfo)); ///行号 int rowNo = 0; foreach (var partInfo in partInfos) { VmiShippingPartInfo shippingPartInfo = vmiShippingPartInfos.FirstOrDefault(d => d.Id == partInfo.Id); if (shippingPartInfo == null) { throw new Exception("MC:0x00000084");///数据错误 } if (partInfo.AsnDraftQty.GetValueOrDefault() < shippingPartInfo.AsnConfirmQty.GetValueOrDefault()) { throw new Exception("MC:0x00000501");///发货数量不能超过预发货数量 } ///获取对应零件仓储信息 PartsStockInfo partsStockInfo = partsStockInfos.FirstOrDefault(d => d.WmNo == partInfo.TWmNo && d.ZoneNo == partInfo.TZoneNo && d.PartNo == partInfo.PartNo && d.SupplierNum == partInfo.SupplierNum); if (partsStockInfo == null) { throw new Exception("MC:0x00000451");///物料仓储信息错误 } ///页面提交来的发货数量 partInfo.RequiredPartQty = shippingPartInfo.AsnConfirmQty; /// VmiOutputDetailInfo vmiOutputDetailInfo = VmiOutputDetailBLL.CreateVmiOutputDetailInfo(loginUser); ///ROW_NO,行号 vmiOutputDetailInfo.RowNo = ++rowNo; VmiOutputDetailBLL.GetVmiOutputDetailInfo(partInfo, ref vmiOutputDetailInfo); VmiOutputDetailBLL.GetVmiOutputDetailInfo(vmiOutputInfo, ref vmiOutputDetailInfo); VmiOutputDetailBLL.GetVmiOutputDetailInfo(partsStockInfo, ref vmiOutputDetailInfo); VmiOutputDetailBLL.GetVmiOutputDetailInfo(ref vmiOutputDetailInfo); if (!string.IsNullOrEmpty(release_vmi_output_actual_qty_equals_required) && release_vmi_output_actual_qty_equals_required.ToLower() == "true") { ///ACTUAL_BOX_NUM,实际包装数 vmiOutputDetailInfo.ActualBoxNum = vmiOutputDetailInfo.RequiredBoxNum; ///ACTUAL_QTY,实际数量 vmiOutputDetailInfo.ActualQty = vmiOutputDetailInfo.RequiredQty; } @string.AppendLine(VmiOutputDetailDAL.GetInsertSql(vmiOutputDetailInfo)); /// string validFlagSql = string.Empty; if (partInfo.AsnDraftQty.GetValueOrDefault() == shippingPartInfo.AsnConfirmQty.GetValueOrDefault()) { validFlagSql = ",[VALID_FLAG] = 0"; } /// @string.AppendLine("update [LES].[TE_MPM_VMI_SHIPPING_PART] " + "set [ASN_DRAFT_QTY] = isnull([ASN_DRAFT_QTY],0) - " + shippingPartInfo.AsnConfirmQty.GetValueOrDefault() + "" + validFlagSql + ",[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' " + "where [ID] = " + shippingPartInfo.Id + ";"); /// @string.AppendLine("update [LES].[TT_MPM_VMI_PULL_ORDER_DETAIL] " + "set [ASN_DRAFT_QTY] = isnull([ASN_DRAFT_QTY],0) - " + shippingPartInfo.AsnConfirmQty.GetValueOrDefault() + "," + "[ASN_CONFIRM_QTY] = isnull([ASN_CONFIRM_QTY],0) + " + shippingPartInfo.AsnConfirmQty.GetValueOrDefault() + "," + "[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' " + "where [FID] = N'" + partInfo.Fid.GetValueOrDefault() + "';"); } } /// using (var trans = new TransactionScope()) { if (!CommonDAL.ExecuteNonQueryBySql(@string.ToString())) { throw new Exception("MC:0x00000173");///操作失败 } trans.Complete(); } return(true); }