/// <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);
        }
Esempio n. 3
0
        /// <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);
        }