/// <summary> /// 撤销条码状态 /// </summary> /// <param name="barcode"></param> /// <param name="loginUser"></param> /// <returns></returns> public bool UndoBarcodeStatus(string barcode, string loginUser) { List <BarcodeStatusInfo> barcodeStatusInfos = new BarcodeStatusDAL().GetListByPage("[BARCODE_DATA] = N'" + barcode + "'", "[ID] desc", 1, 2); if (barcodeStatusInfos.Count == 0) { throw new Exception("MC:0x00000276");///标签信息错误 } if (barcodeStatusInfos.Count == 1) { throw new Exception("MC:0x00000276");///标签信息错误 } ///获取上一个条码状态 BarcodeStatusInfo barcodeStatusInfo = barcodeStatusInfos[1]; string sql = BarcodeDAL.GetBarcodeUpdateSql(barcodeStatusInfo.BarcodeStatus.GetValueOrDefault() , barcodeStatusInfo.WmNo , barcodeStatusInfo.ZoneNo , barcodeStatusInfo.Dloc , barcodeStatusInfo.AsnRunsheetNo , barcodeStatusInfo.BarcodeFid.GetValueOrDefault() , loginUser); if (!CommonDAL.ExecuteNonQueryBySql(sql)) { throw new Exception("MC:0x00000276");///标签信息错误 } return(true); }
/// <summary> /// WMM-006 标签拣配 /// </summary> /// <param name="PickupInfos"></param> /// <returns></returns> public bool PickupInfos(List <string> rowsKeyValues, string loginUser) { List <BarcodeInfo> barcodeInfos = dal.GetList("[ID] in (" + string.Join(",", rowsKeyValues.ToArray()) + ") ", string.Empty); if (barcodeInfos.Count == 0) { throw new Exception("MC:0x00000276");///标签信息错误 } string sql = string.Empty; foreach (var barcodeInfo in barcodeInfos) { if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Invalid) { throw new Exception("MC:0x00000277");///标签已作废 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Frozen) { throw new Exception("MC:0x00000361");///标签已冻结 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Outbound) { throw new Exception("MC:0x00000364");///标签已出库 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Shiped) { throw new Exception("MC:0x00000365");///标签已发货 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Scaned) { throw new Exception("MC:0x00000366");///标签已扫描 } sql += BarcodeDAL.GetBarcodeUpdateSql((int)BarcodeStatusConstants.PickedUp , barcodeInfo.WmNo , barcodeInfo.ZoneNo , barcodeInfo.Dloc , barcodeInfo.AsnRunsheetNo , barcodeInfo.Fid.GetValueOrDefault() , loginUser); } ///是否在客户端扫描标签条码后更新状态为已扫描 string client_scaned_barcode_update_barcode_status_flag = new ConfigDAL().GetValueByCode("CLIENT_SCANED_BARCODE_UPDATE_BARCODE_STATUS_FLAG"); ///执行 using (TransactionScope trans = new TransactionScope()) { if (!string.IsNullOrEmpty(sql) && client_scaned_barcode_update_barcode_status_flag.ToLower() == "true") { CommonDAL.ExecuteNonQueryBySql(sql); } trans.Complete(); } return(true); }
/// <summary> /// GetReceiveCompleteDealSql /// </summary> /// <param name="vmiReceiveInfo"></param> /// <param name="vmiReceiveDetailInfos"></param> /// <param name="barcodeInfos"></param> /// <param name="loginUser"></param> /// <param name="emergencyFlag"></param> /// <returns></returns> public string GetReceiveCompleteDealSql(VmiReceiveInfo vmiReceiveInfo, List <VmiReceiveDetailInfo> vmiReceiveDetailInfos, List <BarcodeInfo> barcodeInfos, string loginUser) { ///获取系统配置 Dictionary <string, string> configs = new ConfigDAL().GetValuesByCodes(new string[] { "VALID_VMI_RECEIVE_ACTUAL_QTY_EQUAL_SCANED_QTY_FLAG", "LES_TRAN_DATA_ENABLE_FLAG", "VMI_RECEIVE_MATERIAL_RECHECK_INSPECT_MODE", "INBOUND_SYNC_OUTBOUND_ENABLE_FLAG", "ENABLE_VMI_PACKAGE_MANAGEMENT_FLAG" }); ///入库单客户端提交时处理语句 ///WEB端为完成操作 ///TODO:考虑增加是否支持单据多次收货的开关 StringBuilder @string = new StringBuilder(); ///更新入库单状态 @string.AppendLine(GetReceiveStatusUpdateSql(vmiReceiveInfo.Id, WmmOrderStatusConstants.Completed, loginUser)); /// foreach (VmiReceiveDetailInfo vmiReceiveDetailInfo in vmiReceiveDetailInfos) { List <BarcodeInfo> barcodes = barcodeInfos.Where(d => d.CreateSourceFid.GetValueOrDefault() == vmiReceiveDetailInfo.Fid.GetValueOrDefault()).ToList(); if (barcodes.Count == 0) { barcodes = barcodeInfos.Where(w => w.AsnRunsheetNo == vmiReceiveDetailInfo.TranNo && w.PartNo == vmiReceiveDetailInfo.PartNo && w.SupplierNum == vmiReceiveDetailInfo.SupplierNum && w.RunsheetNo == vmiReceiveDetailInfo.RunsheetNo).ToList(); } ///是否校验VMI实收数量等于扫描数量 configs.TryGetValue("VALID_VMI_RECEIVE_ACTUAL_QTY_EQUAL_SCANED_QTY_FLAG", out string valid_vmi_receive_actual_qty_equal_scaned_qty_flag); if (!string.IsNullOrEmpty(valid_vmi_receive_actual_qty_equal_scaned_qty_flag) && valid_vmi_receive_actual_qty_equal_scaned_qty_flag.ToLower() == "true") { if (barcodes.Sum(d => d.CurrentQty.GetValueOrDefault()) != vmiReceiveDetailInfo.ActualQty.GetValueOrDefault()) { throw new Exception("MC:0x00000258");///标签扫描数量与单据不一致 } if (barcodes.Count != vmiReceiveDetailInfo.ActualBoxNum.GetValueOrDefault()) { throw new Exception("MC:0x00000258");///标签扫描数量与单据不一致 } } ///入库单号、零件号、供应商、单号 foreach (BarcodeInfo barcodeInfo in barcodes) { ///来源不为空时获取来源 if (!string.IsNullOrEmpty(vmiReceiveDetailInfo.WmNo) && !string.IsNullOrEmpty(vmiReceiveDetailInfo.ZoneNo)) { @string.AppendLine(BarcodeDAL.GetBarcodeUpdateSql( (int)BarcodeStatusConstants.Inbound, vmiReceiveDetailInfo.WmNo, vmiReceiveDetailInfo.ZoneNo, vmiReceiveDetailInfo.Dloc, vmiReceiveDetailInfo.TranNo, barcodeInfo.Fid.GetValueOrDefault(), loginUser)); } else { @string.AppendLine(BarcodeDAL.GetBarcodeUpdateSql( (int)BarcodeStatusConstants.Inbound, vmiReceiveDetailInfo.TargetWm, vmiReceiveDetailInfo.TargetZone, vmiReceiveDetailInfo.TargetDloc, vmiReceiveDetailInfo.TranNo, barcodeInfo.Fid.GetValueOrDefault(), loginUser)); } } ///更新入库单明细信息 @string.AppendLine(GetReceiveDetailActualQtyUpdateSql( vmiReceiveDetailInfo.Id, vmiReceiveDetailInfo.ActualBoxNum.GetValueOrDefault(), vmiReceiveDetailInfo.ActualQty.GetValueOrDefault(), loginUser)); } ///转换为普通入库单进行处理 List <ReceiveDetailInfo> receiveDetailInfos = ReceiveDetailBLL.GetReceiveDetailInfos(vmiReceiveDetailInfos); ReceiveInfo receiveInfo = ReceiveBLL.CreateReceiveInfo(loginUser); ReceiveBLL.GetReceiveInfo(vmiReceiveInfo, ref receiveInfo); ///是否启用LES交易记录创建 configs.TryGetValue("LES_TRAN_DATA_ENABLE_FLAG", out string les_tran_data_enable_flag); if (!string.IsNullOrEmpty(les_tran_data_enable_flag) && les_tran_data_enable_flag.ToLower() == "true") { @string.AppendLine(ReceiveBLL.GetTranDetailsInsertSql(receiveInfo, receiveDetailInfos, (int)WmmTranTypeConstants.Inbound, loginUser)); } ///系统配置中RECEIVE_MATERIAL_RECHECK_INSPECT_MODE入库免检物料重新校验检验模式标记,默认为true ///若该标记为true时将入库明细中的㊺免检物料比对检验模式基础数据中物料的当前检验模式 ///若检验模式有变化则需要将变化的物料提交至QMIS检验任务中间表,并生成同步数据任务,否则忽略此逻辑(此项逻辑可以考虑异步实现) ///VMI入库免检物料重新校验检验模式标记 configs.TryGetValue("VMI_RECEIVE_MATERIAL_RECHECK_INSPECT_MODE", out string vmi_receive_material_recheck_inspect_mode); if (!string.IsNullOrEmpty(vmi_receive_material_recheck_inspect_mode) && vmi_receive_material_recheck_inspect_mode.ToLower() == "true") { @string.AppendLine(PartInspectionModeBLL.ReloadInspectionMode(receiveInfo, ref receiveDetailInfos, loginUser)); } ///将入库明细中是否产生出库单标记㊵为true的数据过滤出来,系统配置中SAME_ZONE_SAME_FINAL_ZONE_VALID_FLAG相同存储区相同中转存储区验证标记, ///默认为true,控制了同一张入库单的明细中不会出现不同的出库目标存储区㊷, ///所以此时只需直接根据入库单及明细复制出相应的出库单及明细,并以出库目标存储区㊷作为出库单的目标存储区入库实际数量⑱作为出库需求数量, ///若系统配置标记为false,则将过滤出来的入库明细数据根据其出库目标存储区进行分组,并按分组情况生成多个出库单,出库单状态为已发布WMM - 011 ///入库后同步生成出库指令启用标记 configs.TryGetValue("INBOUND_SYNC_OUTBOUND_ENABLE_FLAG", out string inboundSyncOutboundEnableFlag); if (!string.IsNullOrEmpty(inboundSyncOutboundEnableFlag) && inboundSyncOutboundEnableFlag.ToLower() == "true") { @string.AppendLine(OutputBLL.CreateOutputByReceiveSql(receiveInfo, receiveDetailInfos, barcodeInfos, loginUser)); } ///系统配置ENABLE_PACKAGE_MANAGEMENT_FLAG是否启用器具管理标记,默认为true ///若该标记为ture时需要根据实收包装数量⑰以及包装型号⑲等数据产生器具包装随货入库交易数据PCM-002 ///是否启用VMI器具管理标记 configs.TryGetValue("ENABLE_VMI_PACKAGE_MANAGEMENT_FLAG", out string enablePackageManagementFlag); if (!string.IsNullOrEmpty(enablePackageManagementFlag) && enablePackageManagementFlag.ToLower() == "true") { @string.AppendLine(PackageTranDetailBLL.CreatePackageTranDetailsSql(receiveDetailInfos, loginUser)); } return(@string.ToString()); }
/// <summary> /// WMM-006 获取标签信息 /// </summary> /// <param name="barcodeData">箱条码</param> /// <returns>返回条码表实体</returns> public BarcodeInfo GetBarcode(string barcodeData, string asnRunsheetNo, BarcodeStatusConstants scanType, string loginUser, int scanMode = 1) { List <BarcodeInfo> barcodeInfos = dal.GetList("[BARCODE_DATA] = N'" + barcodeData + "' ", string.Empty); if (barcodeInfos.Count == 0) { throw new Exception("MC:0x00000276");///标签信息错误 } BarcodeInfo barcodeInfo = barcodeInfos.FirstOrDefault(); if (barcodeInfo == null) { throw new Exception("MC:0x00000276");///标签信息错误 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Invalid) { throw new Exception("MC:0x00000277");///标签已作废 } ///单号需要改变时则会有内容传输进行 if (!string.IsNullOrEmpty(asnRunsheetNo)) { barcodeInfo.AsnRunsheetNo = asnRunsheetNo; } ///校验标签创建单据是否与当前扫描单据相同 string validBarcodeCreateOrderSameAsAsnrunsheeno = new ConfigDAL().GetValueByCode("VALID_BARCODE_CREATE_ORDER_SAME_AS_ASNRUNSHEETNO"); if (validBarcodeCreateOrderSameAsAsnrunsheeno.ToLower() == "true") { if (scanType == BarcodeStatusConstants.Scaned && scanMode == 1) { int cnt = new ReceiveDetailDAL().GetCounts("[FID] = N'" + barcodeInfo.CreateSourceFid.GetValueOrDefault() + "' and [TRAN_NO] = N'" + asnRunsheetNo + "'"); if (cnt == 0) { throw new Exception("MC:0x00000278");///条码不属于本单据 } } } ///物料交接,使用出库单进行目标库区的收货操作 if (scanMode == 2) { OutputDetailInfo outputDetailInfo = new OutputDetailDAL().GetInfo(barcodeInfo.CreateSourceFid.GetValueOrDefault()); if (outputDetailInfo != null) { barcodeInfo.WmNo = outputDetailInfo.TargetWm; barcodeInfo.ZoneNo = outputDetailInfo.TargetZone; barcodeInfo.Dloc = outputDetailInfo.TargetDloc; } } ///是否在客户端扫描标签条码后更新状态为已扫描 string clientScanedBarcodeUpdateBarcodeStatusFlag = new ConfigDAL().GetValueByCode("CLIENT_SCANED_BARCODE_UPDATE_BARCODE_STATUS_FLAG"); if (clientScanedBarcodeUpdateBarcodeStatusFlag.ToLower() == "true") { string sql = BarcodeDAL.GetBarcodeUpdateSql((int)scanType , barcodeInfo.WmNo , barcodeInfo.ZoneNo , barcodeInfo.Dloc , barcodeInfo.AsnRunsheetNo , barcodeInfo.Fid.GetValueOrDefault() , loginUser); if (!CommonDAL.ExecuteNonQueryBySql(sql)) { throw new Exception("MC:0x00000276");///标签信息错误 } } return(barcodeInfo); }
/// <summary> /// /// </summary> /// <param name="barcodeInfos"></param> /// <param name="loginUser"></param> /// <returns></returns> public bool CancelBarcodes(List <BarcodeInfo> barcodeInfos, string loginUser) { List <BarcodeStatusInfo> barcodeStatusInfos = new BarcodeStatusDAL().GetList("[BARCODE_DATA] in ('" + string.Join(",", barcodeInfos.Select(d => d.BarcodeData).ToArray()) + "')", string.Empty); string sql = string.Empty; foreach (var barcodeInfo in barcodeInfos) { if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Created) { continue; } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Invalid) { throw new Exception("MC:0x00000277");///标签已作废 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Frozen) { throw new Exception("MC:0x00000361");///标签已冻结 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Inbound) { throw new Exception("MC:0x00000362");///标签已入库 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Outbound) { throw new Exception("MC:0x00000364");///标签已出库 } if (barcodeInfo.BarcodeStatus.GetValueOrDefault() == (int)BarcodeStatusConstants.Shiped) { throw new Exception("MC:0x00000365");///标签已发货 } List <BarcodeStatusInfo> barcodeStatuses = barcodeStatusInfos.Where(d => d.BarcodeFid.GetValueOrDefault() == barcodeInfo.Fid.GetValueOrDefault()).OrderByDescending(d => d.Id).ToList(); if (barcodeStatuses.Count == 0) { throw new Exception("MC:0x00000276");///标签信息错误 } if (barcodeStatuses.Count == 1) { throw new Exception("MC:0x00000276");///标签信息错误 } ///获取上一个条码状态 BarcodeStatusInfo barcodeStatusInfo = barcodeStatuses.FirstOrDefault(); sql += BarcodeDAL.GetBarcodeUpdateSql(barcodeStatusInfo.BarcodeStatus.GetValueOrDefault() , barcodeStatusInfo.WmNo , barcodeStatusInfo.ZoneNo , barcodeStatusInfo.Dloc , barcodeStatusInfo.AsnRunsheetNo , barcodeStatusInfo.BarcodeFid.GetValueOrDefault() , loginUser); } ///执行 using (TransactionScope trans = new TransactionScope()) { if (!string.IsNullOrEmpty(sql)) { CommonDAL.ExecuteNonQueryBySql(sql); } trans.Complete(); } return(true); }