List <string> GetListProviderLV(B_AccessoryDutyInfo duty, CE_LV lv)
        {
            List <string> lstResult = new List <string>();

            switch (lv)
            {
            case CE_LV.A:

                if (duty.ProviderA != null && duty.ProviderA.Trim().Length > 0)
                {
                    lstResult = duty.ProviderA.Split(',').ToList();
                }
                break;

            case CE_LV.B:
                if (duty.ProviderB != null && duty.ProviderB.Trim().Length > 0)
                {
                    lstResult = duty.ProviderB.Split(',').ToList();
                }
                break;

            case CE_LV.C:
                if (duty.ProviderC != null && duty.ProviderC.Trim().Length > 0)
                {
                    lstResult = duty.ProviderC.Split(',').ToList();
                }
                break;

            default:
                break;
            }

            return(lstResult);
        }
        /// <summary>
        /// 结束业务
        /// </summary>
        /// <param name="billNo">业务编号</param>
        public void FinishBill(string billNo)
        {
            IFlowServer serviceFlow = FlowControlService.ServerModuleFactory.GetServerModule <IFlowServer>();

            string billStatus = serviceFlow.GetNextBillStatus(billNo);

            if (billStatus == null)
            {
                throw new Exception("单据状态为空,请重新确认");
            }

            if (billStatus != CE_CommonBillStatus.单据完成.ToString())
            {
                return;
            }

            DepotManagementDataContext ctx = CommentParameter.DepotDataContext;

            ctx.Connection.Open();
            ctx.Transaction = ctx.Connection.BeginTransaction();

            try
            {
                Business_PurchasingMG_PartsBelongPriovderChange billInfo = GetSingleBillInfo(billNo);

                if (billInfo == null || billInfo.BillNo.Length == 0)
                {
                    throw new Exception("此单据不存在");
                }

                List <View_Business_PurchasingMG_PartsBelongPriovderChangeDetail> listDetail = GetListViewDetailInfo(billInfo.BillNo);

                foreach (View_Business_PurchasingMG_PartsBelongPriovderChangeDetail item in listDetail)
                {
                    CE_LV providerLV            = GlobalObject.GeneralFunction.StringConvertToEnum <CE_LV>(item.供应商等级);
                    B_AccessoryDutyInfo lnqTemp = GetDutyInfo(ctx, item.物品ID);

                    List <string> LVA = new List <string>();
                    List <string> LVB = new List <string>();
                    List <string> LVC = new List <string>();

                    switch (billInfo.ChangeType)
                    {
                    case "准入":
                        if (lnqTemp == null)
                        {
                            lnqTemp = new B_AccessoryDutyInfo();

                            List <CommonProcessInfo> lstTemp = serviceFlow.GetFlowData(billInfo.BillNo);

                            lnqTemp.CreatePersonnel = (lstTemp == null || lstTemp.Count() == 0) ? BasicInfo.LoginID :
                                                      serviceFlow.GetFlowData(billInfo.BillNo).OrderBy(k => k.时间).First().人员;
                            lnqTemp.CreateDate = ServerTime.Time;
                            lnqTemp.Grade      = item.难度等级;
                            lnqTemp.Remark     = item.说明;
                            lnqTemp.Sort       = item.零件类型;
                            lnqTemp.GoodsID    = item.物品ID;

                            List <string> lstProvider = new List <string>();
                            lstProvider.Add(billInfo.Provider);
                            SetProviderLV(ref lnqTemp, providerLV, lstProvider);

                            ctx.B_AccessoryDutyInfo.InsertOnSubmit(lnqTemp);
                        }
                        else if (lnqTemp != null)
                        {
                            LVA = GetListProviderLV(lnqTemp, CE_LV.A);
                            LVB = GetListProviderLV(lnqTemp, CE_LV.B);
                            LVC = GetListProviderLV(lnqTemp, CE_LV.C);

                            LVA.Remove(billInfo.Provider);
                            LVB.Remove(billInfo.Provider);
                            LVC.Remove(billInfo.Provider);

                            switch (providerLV)
                            {
                            case CE_LV.A:
                                LVA.Add(billInfo.Provider);
                                break;

                            case CE_LV.B:
                                LVB.Add(billInfo.Provider);
                                break;

                            case CE_LV.C:
                                LVC.Add(billInfo.Provider);
                                break;

                            default:
                                break;
                            }

                            SetProviderLV(ref lnqTemp, CE_LV.A, LVA);
                            SetProviderLV(ref lnqTemp, CE_LV.B, LVB);
                            SetProviderLV(ref lnqTemp, CE_LV.C, LVC);
                        }
                        else
                        {
                            throw new Exception("信息重复,无法操作");
                        }

                        break;

                    case "等级变更":

                        if (lnqTemp == null)
                        {
                            throw new Exception("无此零件信息,无法操作【等级变更】");
                        }

                        LVA = GetListProviderLV(lnqTemp, CE_LV.A);
                        LVB = GetListProviderLV(lnqTemp, CE_LV.B);
                        LVC = GetListProviderLV(lnqTemp, CE_LV.C);

                        LVA.Remove(billInfo.Provider);
                        LVB.Remove(billInfo.Provider);
                        LVC.Remove(billInfo.Provider);

                        switch (providerLV)
                        {
                        case CE_LV.A:
                            LVA.Add(billInfo.Provider);
                            break;

                        case CE_LV.B:
                            LVB.Add(billInfo.Provider);
                            break;

                        case CE_LV.C:
                            LVC.Add(billInfo.Provider);
                            break;

                        default:
                            break;
                        }

                        SetProviderLV(ref lnqTemp, CE_LV.A, LVA);
                        SetProviderLV(ref lnqTemp, CE_LV.B, LVB);
                        SetProviderLV(ref lnqTemp, CE_LV.C, LVC);
                        break;

                    case "淘汰":
                        if (lnqTemp != null)
                        {
                            LVA = GetListProviderLV(lnqTemp, CE_LV.A);
                            LVB = GetListProviderLV(lnqTemp, CE_LV.B);
                            LVC = GetListProviderLV(lnqTemp, CE_LV.C);

                            LVA.Remove(billInfo.Provider);
                            LVB.Remove(billInfo.Provider);
                            LVC.Remove(billInfo.Provider);

                            SetProviderLV(ref lnqTemp, CE_LV.A, LVA);
                            SetProviderLV(ref lnqTemp, CE_LV.B, LVB);
                            SetProviderLV(ref lnqTemp, CE_LV.C, LVC);

                            if ((lnqTemp.ProviderA == null || lnqTemp.ProviderA.Length == 0) &&
                                (lnqTemp.ProviderB == null || lnqTemp.ProviderB.Length == 0) &&
                                (lnqTemp.ProviderC == null || lnqTemp.ProviderC.Length == 0))
                            {
                                ctx.B_AccessoryDutyInfo.DeleteOnSubmit(lnqTemp);
                            }
                        }

                        break;

                    default:
                        break;
                    }

                    ctx.SubmitChanges();
                }

                ctx.SubmitChanges();
                ctx.Transaction.Commit();
            }
            catch (Exception ex)
            {
                ctx.Transaction.Rollback();
                throw new Exception(ex.Message);
            }
        }
        void SetProviderLV(ref B_AccessoryDutyInfo duty, CE_LV lv, List <string> lstProvider)
        {
            if (duty == null)
            {
                throw new Exception("数据异常");
            }

            switch (lv)
            {
            case CE_LV.A:

                duty.ProviderA = "";

                if (lstProvider == null || lstProvider.Count == 0)
                {
                    return;
                }

                foreach (string A in lstProvider)
                {
                    duty.ProviderA += A + ",";
                }

                duty.ProviderA = duty.ProviderA.Substring(0, duty.ProviderA.Length - 1);

                break;

            case CE_LV.B:

                duty.ProviderB = "";

                if (lstProvider == null || lstProvider.Count == 0)
                {
                    return;
                }

                foreach (string B in lstProvider)
                {
                    duty.ProviderB += B + ",";
                }

                duty.ProviderB = duty.ProviderB.Substring(0, duty.ProviderB.Length - 1);
                break;

            case CE_LV.C:

                duty.ProviderC = "";

                if (lstProvider == null || lstProvider.Count == 0)
                {
                    return;
                }

                foreach (string C in lstProvider)
                {
                    duty.ProviderC += C + ",";
                }

                duty.ProviderC = duty.ProviderC.Substring(0, duty.ProviderC.Length - 1);
                break;

            default:
                break;
            }
        }