/// <summary>
        /// 获取指定产品指定工位选配零件信息
        /// </summary>
        /// <param name="info">包含产品名称、工位号的输入参数</param>
        public Socket_FittingAccessoryInfo ReceiveReadChoseMatchInfo(string info)
        {
            string[] data        = info.Split(new char[] { ',' });
            string   productName = data[0];
            string   workBench   = data[1];

            Socket_FittingAccessoryInfo fittingAccessoryInfo = new Socket_FittingAccessoryInfo();

            IAssemblingBom server = ServerModuleFactory.GetServerModule <IAssemblingBom>();

            // 获取指定工位所有装配信息,包含多种产品
            IQueryable <View_P_AssemblingBom> queryResult     = server.GetInfoOfWorkBench(workBench);
            List <View_P_AssemblingBom>       choseMatchParts = (from r in queryResult
                                                                 where r.产品名称 == productName && r.是否选配零件
                                                                 select r).ToList();

            if (choseMatchParts == null || choseMatchParts.Count == 0)
            {
                fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.该工位无选配零件;
                return(fittingAccessoryInfo);
            }

            fittingAccessoryInfo.ParentCode   = choseMatchParts[0].父总成编码;
            fittingAccessoryInfo.GoodsCode    = choseMatchParts[0].零件编码;
            fittingAccessoryInfo.GoodsName    = choseMatchParts[0].零件名称;
            fittingAccessoryInfo.Spec         = choseMatchParts[0].规格;
            fittingAccessoryInfo.Counts       = choseMatchParts[0].装配数量;
            fittingAccessoryInfo.AssemblyFlag = Convert.ToInt32(choseMatchParts[0].是否总成);

            DataTable table;
            string    error;

            if (!m_choseConfectServer.GetAccessoryChoseConfectInfo(choseMatchParts[0].零件编码, "", out table, out error))
            {
                if (error.Contains(Socket_FittingAccessoryInfo.OperateStateEnum.获取选配信息失败.ToString()))
                {
                    fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.获取选配信息失败;
                }
                else
                {
                    fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.该零件非选配零件;
                }
            }
            else
            {
                fittingAccessoryInfo.ChoseMatchInfo = BuildChoseMatchInfoDic(table);
                fittingAccessoryInfo.OperateState   = Socket_FittingAccessoryInfo.OperateStateEnum.操作成功;
            }

            return(fittingAccessoryInfo);
        }
        /// <summary>
        /// 接收事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="re">事件参数</param>
        public Socket_FittingAccessoryInfo ReceiveReadChoseMatchInfo(Socket_FittingAccessoryInfo fittingAccessoryInfo)
        {
            DataTable table;
            string    error;

            if (!m_choseConfectServer.GetAccessoryChoseConfectInfo(fittingAccessoryInfo.GoodsCode, "", out table, out error))
            {
                if (error.Contains(Socket_FittingAccessoryInfo.OperateStateEnum.获取选配信息失败.ToString()))
                {
                    fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.获取选配信息失败;
                }
                else
                {
                    fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.该零件非选配零件;
                }
            }
            else
            {
                fittingAccessoryInfo.ChoseMatchInfo = BuildChoseMatchInfoDic(table);
                fittingAccessoryInfo.OperateState   = Socket_FittingAccessoryInfo.OperateStateEnum.操作成功;
            }

            return(fittingAccessoryInfo);
        }
        /// <summary>
        /// 接收事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="re">事件参数</param>
        public Socket_FittingAccessoryInfo ReceiveReadBarCodeInfo(Socket_FittingAccessoryInfo fittingAccessoryInfo)
        {
            DataTable table;
            string    error;

            if (!m_barCodeServer.GetData(fittingAccessoryInfo.BarCode, out table, out error))
            {
                if (error.Contains(Socket_FittingAccessoryInfo.OperateStateEnum.条形码有误.ToString()))
                {
                    fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.条形码有误;
                }
            }
            else
            {
                fittingAccessoryInfo.GoodsCode    = table.Rows[0][0].ToString();
                fittingAccessoryInfo.Spec         = table.Rows[0][1].ToString();
                fittingAccessoryInfo.GoodsName    = table.Rows[0][2].ToString();
                fittingAccessoryInfo.Provider     = table.Rows[0][3].ToString();
                fittingAccessoryInfo.BatchNo      = table.Rows[0][4].ToString();
                fittingAccessoryInfo.OperateState = Socket_FittingAccessoryInfo.OperateStateEnum.操作成功;
            }

            return(fittingAccessoryInfo);
        }
        void asynServer_OnReceive(object sender, CommEventArgs args)
        {
            CommEventArgs commArgs = args;
            string        address  = commArgs.SourceAddress;

            commArgs.SourceAddress = args.TargetAddress;
            commArgs.TargetAddress = address;

            if (args.Params != null)
            {
                for (int i = 0; i < args.Params.Count; i++)
                {
                    if (commArgs.Params[i].CMD == CommCMD.用户登陆)
                    {
                        Socket_UserInfo      userInfo      = commArgs.Params[i].DataValue as Socket_UserInfo;
                        RequestUserProcessor userProcessor = new RequestUserProcessor();
                        commArgs.Params[i].DataValue = userProcessor.ReceiveUserInfo(userInfo);
                    }
                    else if (commArgs.Params[i].CMD == CommCMD.初始化)
                    {
                        string workbench = commArgs.Params[i].DataValue as string;
                        RequestWorkBenchInfo wbProcessor = new RequestWorkBenchInfo();

                        if (commArgs.Params[i].Code == TagCode.工位产品列表)
                        {
                            commArgs.Params[i].DataValue = wbProcessor.GetProductInfo(workbench);
                        }
                        else if (commArgs.Params[i].Code == TagCode.工位指定产品零件信息)
                        {
                            commArgs.Params[i].DataValue = wbProcessor.GetWorkBenchInfo(workbench);
                        }
                    }
                    else if (commArgs.Params[i].CMD == CommCMD.请求)
                    {
                        if (commArgs.Params[i].Code == TagCode.获取装配条形码对应零件信息)
                        {
                            Socket_FittingAccessoryInfo fittingAccessoryInfo = commArgs.Params[i].DataValue as Socket_FittingAccessoryInfo;
                            RequestFittingInfo          fittingProcessor     = new RequestFittingInfo();
                            commArgs.Params[i].DataValue = fittingProcessor.ReceiveReadBarCodeInfo(fittingAccessoryInfo);
                        }
                        else if (commArgs.Params[i].Code == TagCode.获取选配值)
                        {
                            string             info             = (string)commArgs.Params[i].DataValue;
                            RequestFittingInfo fittingProcessor = new RequestFittingInfo();
                            commArgs.Params[i].DataValue = fittingProcessor.ReceiveReadChoseMatchInfo(info);

                            //Socket_FittingAccessoryInfo fittingAccessoryInfo = commArgs.Params[i].DataValue as Socket_FittingAccessoryInfo;
                            //RequestFittingInfo fittingProcessor = new RequestFittingInfo();
                            //fittingAccessoryInfo = fittingProcessor.ReceiveReadBarCodeInfo(fittingAccessoryInfo);
                            //commArgs.Params[i].DataValue = fittingProcessor.ReceiveReadChoseMatchInfo(fittingAccessoryInfo);
                        }
                    }
                    else if (commArgs.Params[i].CMD == CommCMD.存储工位信息)
                    {
                        if (commArgs.Params[i].Code == TagCode.装配信息)
                        {
                            Socket_FittingAccessoryInfoSum fittingAccessoryInfoSum = commArgs.Params[i].DataValue as Socket_FittingAccessoryInfoSum;
                            fittingAccessoryInfoSum.Edition = GetProductType(fittingAccessoryInfoSum.ProductTypeName);
                            RequestFittingInfo fittingProcessor = new RequestFittingInfo();

                            commArgs.Params[i].DataValue = fittingProcessor.ReceiveSaveTempFittingInfo(fittingAccessoryInfoSum);

                            if (fittingAccessoryInfoSum.ProductTypeName.Contains("力帆") && fittingAccessoryInfoSum.WorkBench == "DB")
                            {
                                commArgs.Params[i].DataValue = fittingProcessor.ReceiveSaveFittingInfo(fittingAccessoryInfoSum.ProductCode);
                            }
                            else if (fittingAccessoryInfoSum.ProductTypeName.Contains("众泰") && fittingAccessoryInfoSum.WorkBench == "DB")
                            {
                                commArgs.Params[i].DataValue = fittingProcessor.ReceiveSaveFittingInfo(fittingAccessoryInfoSum.ProductCode);
                            }
                        }
                    }
                }
            }

            for (int i = 0; i < commArgs.Params.Count; i++)
            {
                commArgs.Params[i].CMD = CommCMD.应答;
            }

            string error;

            m_server.Send(commArgs, out error);
        }