using System;
using System.Collections.Generic;
using System.Linq;
using BLL;
using System.Data.SqlClient;
using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace FineUIPro.Web.WeldingManage
{
    public partial class PreWeldReportAudit :PageBase
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                InitTreeMenu();
                txtWeldingDate.Text = DateTime.Now.Date.ToString();
            }
        }
        #region 加载树装置-单位-工作区
        /// 
        /// 加载树
        /// 
        private void InitTreeMenu()
        {
            this.tvControlItem.Nodes.Clear();
            var totalInstallation = from x in Funs.DB.Project_Installation select x;
            var totalWorkArea = from x in Funs.DB.Project_WorkArea select x;
            var totalUnit = from x in Funs.DB.Project_Unit select x;
            ////装置
            var pInstallation = (from x in totalInstallation where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList();
            ////区域
            var pWorkArea = (from x in totalWorkArea where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList();
            ////单位
            var pUnits = (from x in totalUnit where x.ProjectId == this.CurrUser.LoginProjectId select x).ToList();
            this.BindNodes(null, pInstallation, pWorkArea, pUnits);
        }
        #endregion
        #region 绑定树节点
        /// 
        ///  绑定树节点
        /// 
        /// 
        private void BindNodes(TreeNode node, List pInstallation, List pWorkArea, List pUnits)
        {
            if (node == null)
            {
                List installations = pInstallation;
                var pUnit = pUnits.FirstOrDefault(x => x.UnitId == this.CurrUser.UnitId);
                if (pUnit != null && !pUnit.UnitType.Contains(Const.UnitType_2) && !pUnit.UnitType.Contains(Const.UnitType_1))
                {
                    installations = (from x in pInstallation
                                     join y in pWorkArea on x.InstallationId equals y.InstallationId
                                     where y.UnitId == this.CurrUser.UnitId
                                     orderby x.InstallationId
                                     select x).Distinct().ToList();
                }
                foreach (var q in installations)
                {
                    TreeNode newNode = new TreeNode();
                    newNode.NodeID = q.InstallationId;
                    newNode.Text = q.InstallationName;
                    newNode.ToolTip = Resources.Lan.InstallationName;
                    newNode.Expanded = true;
                    this.tvControlItem.Nodes.Add(newNode);
                    this.BindNodes(newNode, pInstallation, pWorkArea, pUnits);
                }
            }
            else if (node.ToolTip == Resources.Lan.InstallationName)
            {
                List units = null;
                var pUnitDepth = pUnits.FirstOrDefault(x => x.UnitId == this.CurrUser.UnitId);
                if (pUnitDepth == null || pUnitDepth.UnitType.Contains(Const.UnitType_2) || pUnitDepth.UnitType.Contains(Const.UnitType_1))
                {
                    units = (from x in pUnits
                             join y in pWorkArea on x.UnitId equals y.UnitId
                             where y.InstallationId == node.NodeID && x.UnitType.Contains(Const.UnitType_5)
                             select x).ToList();
                }
                else
                {
                    units = (from x in pUnits
                             join y in pWorkArea on x.UnitId equals y.UnitId
                             where y.InstallationId == node.NodeID && x.UnitType.Contains(Const.UnitType_5) && x.UnitId == this.CurrUser.UnitId
                             select x).ToList();
                }
                units = units.OrderBy(x => x.InTime).Distinct().ToList();
                foreach (var q in units)
                {
                    var unit = BLL.Base_UnitService.GetUnit(q.UnitId);
                    if (unit != null)
                    {
                        TreeNode newNode = new TreeNode();
                        newNode.Text = unit.UnitName;
                        newNode.NodeID = q.UnitId + "|" + node.NodeID;
                        newNode.ToolTip = Resources.Lan.CompanyName;
                        newNode.EnableClickEvent = true;
                        node.Nodes.Add(newNode);
                        this.BindNodes(newNode, pInstallation, pWorkArea, pUnits);
                    }
                }
            }
        }
        #endregion
        #region 点击TreeView
        /// 
        /// 点击TreeView
        /// 
        /// 
        /// 
        protected void tvControlItem_NodeCommand(object sender, TreeCommandEventArgs e)
        {
            this.BindGrid();
        }
        #endregion
        #region 数据绑定
        /// 
        /// 数据绑定
        /// 
        private void BindGrid()
        {
            string strSql = @"SELECT preWeld.PreWeldingDailyId, 
                                     preWeld.ProjectId, 
                                     preWeld.WeldJointId, 
                                     preWeld.WeldingDate, 
									 jot.WeldJointCode,
									 line.PipelineCode,
                                     jot.JointArea,
                                     preWeld.JointAttribute, 
                                     jot.Size, 
                                     jot.Dia, 
                                     jot.Thickness,                            
                                     preWeld.AttachUrl, 
                                     cellWelder.WelderCode AS CellWelderCode,
                                     backingWelder.WelderCode AS BackingWelderCode,
                                     method.WeldingMethodCode AS WeldMethod,
                                     preWeld.AuditDate,
                                     users.UserName AS AuditManName 
                                  FROM dbo.Pipeline_PreWeldingDaily AS preWeld
                                  LEFT JOIN dbo.Pipeline_WeldJoint AS jot ON jot.WeldJointId = preWeld.WeldJointId
								  LEFT JOIN dbo.Pipeline_Pipeline line ON line.PipelineId = jot.PipelineId
                                  LEFT JOIN dbo.Welder_Welder AS cellWelder ON cellWelder.WelderId=preWeld.CoverWelderId
                                  LEFT JOIN dbo.Welder_Welder AS backingWelder ON backingWelder.WelderId=preWeld.BackingWelderId
                                  LEFT JOIN dbo.Base_WeldingMethod method ON method.WeldingMethodId=jot.WeldingMethodId
                                  LEFT JOIN dbo.Sys_User AS users ON users.UserId = preWeld.AuditMan
                                  WHERE preWeld.ProjectId=@ProjectId";
            List listStr = new List();
            listStr.Add(new SqlParameter("@ProjectId", this.CurrUser.LoginProjectId));
            if (!string.IsNullOrEmpty(tvControlItem.SelectedNodeID))
            {
                strSql += " AND preWeld.UnitId =@UnitId";
                listStr.Add(new SqlParameter("@UnitId", tvControlItem.SelectedNode.NodeID.Split('|')[0]));
            }
            if (!string.IsNullOrEmpty(txtWeldingDate.Text.Trim()))
            {
                strSql += " AND CONVERT(VARCHAR(100), preWeld.WeldingDate,23) =@WeldingDate";
                listStr.Add(new SqlParameter("@WeldingDate", Convert.ToDateTime(txtWeldingDate.Text.Trim())));
            }
            if (IsAudit.SelectedValue == "0")
            {
                strSql += " AND preWeld.AuditDate IS NULL ";
            }
            else
            {
                strSql += " AND preWeld.AuditDate IS NOT NULL ";
            }
            SqlParameter[] parameter = listStr.ToArray();
            DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter);
            // 2.获取当前分页数据
            Grid1.RecordCount = tb.Rows.Count;
            //tb = GetFilteredTable(Grid1.FilteredData, tb);
            var table = this.GetPagedDataTable(Grid1, tb);
            Grid1.DataSource = table;
            Grid1.DataBind();
            for (int i = 0; i < this.Grid1.Rows.Count; i++)
            {
                string id = Grid1.DataKeys[i][0].ToString();
                Model.Pipeline_PreWeldingDaily item = BLL.PreWeldReportService.GetPreWeldingDaily(id);
                if (item != null)
                {
                    if (item.AuditDate.HasValue)    //未审核
                    {
                        this.Grid1.Rows[i].RowSelectable = false;
                    }
                }
            }
        }
        #endregion
        protected void IsAudit_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
        protected void WeldingDate_OnTextChanged(object sender, EventArgs e)
        {
            BindGrid();
        }
        #region 分页排序
        #region 页索引改变事件
        /// 
        /// 页索引改变事件
        /// 
        /// 
        /// 
        protected void Grid1_PageIndexChange(object sender, GridPageEventArgs e)
        {
            Grid1.PageIndex = e.NewPageIndex;
            BindGrid();
        }
        #endregion
        #region 排序
        /// 
        /// 排序
        /// 
        /// 
        /// 
        protected void Grid1_Sort(object sender, GridSortEventArgs e)
        {
            Grid1.SortDirection = e.SortDirection;
            Grid1.SortField = e.SortField;
            BindGrid();
        }
        #endregion
        #region 分页选择下拉改变事件
        /// 
        /// 分页选择下拉改变事件
        /// 
        /// 
        /// 
        protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grid1.PageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
            BindGrid();
        }
        #endregion
        #endregion
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.HJGL_PreWeldReportMenuId, Const.BtnDelete))
            {
                if (Grid1.SelectedRowIndexArray.Length == 0)
                {
                    Alert.ShowInTop(Resources.Lan.SelectLeastOneRecord, MessageBoxIcon.Warning);
                    return;
                }
                foreach (int rowIndex in Grid1.SelectedRowIndexArray)
                {
                    string daily = Grid1.DataKeys[rowIndex][0].ToString();
                   
                    BLL.PreWeldReportService.DeletePreWeldingDaily(daily);
                    BLL.Sys_LogService.AddLog(BLL.Const.System_3, this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.HJGL_PreWeldReportMenuId, Const.BtnDelete, daily);
                    ShowNotify(Resources.Lan.DeletedSuccessfully, MessageBoxIcon.Success);
                }
                this.BindGrid();
            }
            else
            {
                ShowNotify(Resources.Lan.NoPrivilegePrompt, MessageBoxIcon.Warning);
            }
        }
        /// 
        /// 预提交日报审核并提交
        /// 
        /// 
        /// 
        protected void btnAudit_Click(object sender, EventArgs e)
        {
            if (CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, Const.HJGL_PreWeldReportMenuId, Const.BtnDelete))
            {
                if (!string.IsNullOrEmpty(txtWeldingDate.Text))
                {
                    if (Grid1.SelectedRowIndexArray.Length == 0)
                    {
                        ShowNotify("请勾选要审核的记录!", MessageBoxIcon.Warning);
                        return;
                    }
                    string perfix = string.Format("{0:yyyyMMdd}", Convert.ToDateTime(txtWeldingDate.Text)) + "-";
                    string weldingDailyCode = BLL.SQLHelper.RunProcNewId("SpGetThreeNumber", "dbo.Pipeline_WeldingDaily", "WeldingDailyCode", this.CurrUser.LoginProjectId, perfix);
                    Model.Pipeline_WeldingDaily newWeldingDaily = new Model.Pipeline_WeldingDaily();
                    newWeldingDaily.WeldingDailyCode = weldingDailyCode;
                    newWeldingDaily.ProjectId = CurrUser.LoginProjectId;
                    if (tvControlItem.SelectedNodeID != BLL.Const._Null)
                    {
                        newWeldingDaily.InstallationId = tvControlItem.SelectedNode.ParentNode.NodeID;
                        newWeldingDaily.UnitId = tvControlItem.SelectedNodeID.Split('|')[0];
                    }
                    DateTime? weldDate = Funs.GetNewDateTime(this.txtWeldingDate.Text);
                    if (weldDate.HasValue)
                    {
                        newWeldingDaily.WeldingDate = weldDate.Value;
                    }
                    else
                    {
                        newWeldingDaily.WeldingDate = Convert.ToDateTime(txtWeldingDate.Text);
                    }
                    newWeldingDaily.Tabler = this.CurrUser.UserId;
                    newWeldingDaily.TableDate = Funs.GetNewDateTime(this.txtWeldingDate.Text);
                    newWeldingDaily.Remark = "移动端提交";
                    string errlog = string.Empty;
                    string eventArg = string.Empty;
                    List weldJointList = new List();
                    int[] selections = Grid1.SelectedRowIndexArray;
                    foreach (int rowIndex in selections)
                    {
                        string weldJointId = Grid1.DataKeys[rowIndex][1].ToString();
                        string preWeldingDailyId = Grid1.DataKeys[rowIndex][0].ToString();
                        bool canSave = false;
                        var jot = BLL.Pipeline_WeldJointService.GetWeldJointByWeldJointId(weldJointId);
                        var joty = BLL.Base_WeldTypeService.GetWeldTypeByWeldTypeId(jot.WeldTypeId);
                        weldJointList.Add(jot);
                        var preWeldingDaily = Funs.DB.Pipeline_PreWeldingDaily.FirstOrDefault(x => x.PreWeldingDailyId == preWeldingDailyId);
                        string weldTypeGroup = joty.Flag;
                        string weldTypeCode = joty.WeldTypeCode;
                        string floorWelder = preWeldingDaily.BackingWelderId;
                        string cellWelder = preWeldingDaily.CoverWelderId;
                        decimal? dia = jot.Dia;
                        decimal? sch = jot.Thickness;
                        string wmeCode = string.Empty;
                        var wm = BLL.Base_WeldingMethodService.GetWeldingMethodByWeldingMethodId(jot.WeldingMethodId);
                        if (wm != null)
                        {
                            wmeCode = wm.WeldingMethodCode;
                        }
                        string[] wmeCodes = wmeCode.Split('+');
                        string location = "";
                        if (!string.IsNullOrEmpty(jot.WeldingLocationId))
                        {
                            var loc = Base_WeldingLocationServie.GetWeldingLocationById(jot.WeldingLocationId);
                            location = loc.WeldingLocationCode;
                        }
                        string ste = jot.Material1Id;
                        var projectWelder = BLL.Welder_ProjectWelderService.GetProjectWelderByProjectIdAndWelderId(this.CurrUser.LoginProjectId, floorWelder);
                        var projectUnit = BLL.Project_UnitService.GetProject_UnitByProjectIdUnitId(this.CurrUser.LoginProjectId, projectWelder.UnitId);
                        if (projectUnit != null && projectUnit.WelderQueIsUse == true)
                        {
                            List floorWelderQualifys = (from x in Funs.DB.Welder_WelderQualify
                                                                                    where x.WelderId == floorWelder && x.WeldingMethodId != null
                                                                                                   && x.WeldingLocationId != null && x.MaterialType != null
                                                                                                   && x.WeldType != null
                                                                                                   && x.ThicknessMax != null && x.SizesMin != null
                                                                                    select x).ToList();
                            List cellWelderQualifys = (from x in Funs.DB.Welder_WelderQualify
                                                                                   where x.WelderId == cellWelder && x.WeldingMethodId != null
                                                                                                && x.WeldingLocationId != null && x.MaterialType != null
                                                                                                && x.WeldType != null
                                                                                                && x.ThicknessMax != null && x.SizesMin != null
                                                                                   select x).ToList();
                            // 打底和盖面同一焊工
                            if (floorWelder == cellWelder)
                            {
                                if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0)
                                {
                                    if (wmeCodes.Count() <= 1) // 一种焊接方法
                                    {
                                        canSave = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch);
                                    }
                                    else  // 大于一种焊接方法,如氩电联焊
                                    {
                                        canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch);
                                    }
                                }
                            }
                            // 打底和盖面焊工不同
                            else
                            {
                                bool isok1 = false;
                                bool isok2 = false;
                                if (wmeCodes.Count() <= 1) // 一种焊接方法
                                {
                                    if (floorWelderQualifys != null && floorWelderQualifys.Count() > 0)
                                    {
                                        isok1 = IsOK(floorWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch);
                                    }
                                    if (cellWelderQualifys != null && cellWelderQualifys.Count() > 0)
                                    {
                                        isok2 = IsOK(cellWelderQualifys, wmeCodes[0], location, weldTypeGroup, ste, dia, sch);
                                    }
                                    if (isok1 && isok2)
                                    {
                                        canSave = true;
                                    }
                                }
                                else
                                {
                                    canSave = TwoWmeIsOK(floorWelderQualifys, cellWelderQualifys, wmeCodes[0], wmeCodes[1], location, weldTypeGroup, ste, dia, sch);
                                }
                            }
                        }
                        else
                        {
                            canSave = true;
                        }
                        if (canSave == false)
                        {
                            eventArg = eventArg + jot.WeldJointCode + ",";
                        }
                    }
                    // 生成管线的随机数
                    var romPipe = (from x in weldJointList select x.PipelineId).Distinct();
                    if (romPipe.Count() > 0)
                    {
                        foreach (string pipeId in romPipe)
                        {
                            var pipe = Funs.DB.View_Pipeline_Random.FirstOrDefault(x => x.PipelineId == pipeId);
                            int rate = Convert.ToInt32(pipe.DetectionRateValue);
                            // RT 随机数
                            int rtTotalJotNum = Convert.ToInt32(pipe.RTTotalJointCount);
                            int rtWeldingJotNum = Convert.ToInt32(pipe.RTWeldingCount);
                            int rtPointNum = Convert.ToInt32(pipe.RtPointCount);
                            int rtMinValue = rtWeldingJotNum + 1;
                            int rtMaxValue = rtTotalJotNum;
                            int rtPointTotalNum = Convert.ToInt32(Math.Ceiling((double)(rtTotalJotNum * rate) / (double)100));
                            int rtnum = rtPointTotalNum - rtPointNum;
                            if (rtnum > 0)
                            {
                                int[] r = Funs.GetRandomNum(rtnum, rtMinValue, rtMaxValue);
                                var q = from x in r orderby x select x;
                                string random = string.Empty;
                                foreach (int i in q)
                                {
                                    if (i <= rtMaxValue)
                                    {
                                        random = random + i.ToString() + ",";
                                    }
                                }
                                if (random.Length > 0)
                                {
                                    string randomNum = random.Substring(0, random.Length - 1);
                                    Pipeline_PipelineService.UpdatePipelineRTRandom(pipeId, randomNum);
                                }
                            }
                            // PT 随机数
                            int ptTotalJotNum = Convert.ToInt32(pipe.PTTotalJointCount);
                            int ptWeldingJotNum = Convert.ToInt32(pipe.PTWeldingCount);
                            int ptPointNum = Convert.ToInt32(pipe.PtPointCount);
                            int ptMinValue = ptWeldingJotNum + 1;
                            int ptMaxValue = ptTotalJotNum;
                            int ptPointTotalNum = Convert.ToInt32(Math.Ceiling((double)(ptTotalJotNum * rate) / (double)100));
                            int ptnum = ptPointTotalNum - ptPointNum;
                            if (ptnum > 0)
                            {
                                int[] r = Funs.GetRandomNum(ptnum, ptMinValue, ptMaxValue);
                                var q = from x in r orderby x select x;
                                string random = string.Empty;
                                foreach (int i in q)
                                {
                                    if (i <= ptMaxValue)
                                    {
                                        random = random + i.ToString() + ",";
                                    }
                                }
                                if (random.Length > 0)
                                {
                                    string randomNum = random.Substring(0, random.Length - 1);
                                    Pipeline_PipelineService.UpdatePipelinePTRandom(pipeId, randomNum);
                                }
                            }
                            // 固定口(先按40%计算) 随机数
                            int gdTotalJotNum = Convert.ToInt32(pipe.GDTotalJointCount);
                            int gdWeldingJotNum = Convert.ToInt32(pipe.GDWeldingCount);
                            int gdPointNum = Convert.ToInt32(pipe.GDPointCount);
                            int gdMinValue = gdWeldingJotNum + 1;
                            int gdMaxValue = gdTotalJotNum;
                            int gdPointTotalNum = Convert.ToInt32(Math.Ceiling((double)(gdTotalJotNum * 40) / (double)100));
                            int gdnum = gdPointTotalNum - gdPointNum;
                            if (gdnum > 0)
                            {
                                int[] r = Funs.GetRandomNum(gdnum, gdMinValue, gdMaxValue);
                                var q = from x in r orderby x select x;
                                string random = string.Empty;
                                foreach (int i in q)
                                {
                                    if (i <= gdMaxValue)
                                    {
                                        random = random + i.ToString() + ",";
                                    }
                                }
                                if (random.Length > 0)
                                {
                                    string randomNum = random.Substring(0, random.Length - 1);
                                    Pipeline_PipelineService.UpdatePipelineGDRandom(pipeId, randomNum);
                                }
                            }
                        }
                    }
                    if (eventArg == string.Empty)  //焊工焊接的所有焊口资质都符合要求)
                    {
                        // 增加日报主表
                        string weldingDailyId = SQLHelper.GetNewID(typeof(Model.Pipeline_WeldingDaily));
                        newWeldingDaily.WeldingDailyId = weldingDailyId;
                        BLL.Pipeline_WeldingDailyService.AddPipeline_WeldingDaily(newWeldingDaily);
                        foreach (int rowIndex in selections)
                        {
                            string weldJointId = Grid1.DataKeys[rowIndex][1].ToString();
                            string preWeldingDailyId = Grid1.DataKeys[rowIndex][0].ToString();
                            var updateJoint = BLL.Pipeline_WeldJointService.GetWeldJointByWeldJointId(weldJointId);
                            var joty = BLL.Base_WeldTypeService.GetWeldTypeByWeldTypeId(updateJoint.WeldTypeId);
                            var pipeline = BLL.Pipeline_PipelineService.GetPipelineByPipelineId(updateJoint.PipelineId);
                            var preWeldingDaily = Funs.DB.Pipeline_PreWeldingDaily.FirstOrDefault(x => x.PreWeldingDailyId == preWeldingDailyId);
                            string weldTypeCode = joty.WeldTypeCode;
                            updateJoint.WeldingDailyId = weldingDailyId;
                            updateJoint.WeldingDailyCode = weldingDailyCode;
                            updateJoint.CoverWelderId = preWeldingDaily.CoverWelderId;
                            updateJoint.BackingWelderId = preWeldingDaily.BackingWelderId;
                            updateJoint.DoneDin = updateJoint.Size;
                            updateJoint.WeldingDate = preWeldingDaily.WeldingDate;
                            // 更新焊口信息
                            BLL.Pipeline_WeldJointService.UpdateWeldJoint(updateJoint);
                            // 更新预提交信息
                            preWeldingDaily.AuditDate = DateTime.Now;
                            preWeldingDaily.AuditMan = CurrUser.UserId;
                            Funs.DB.SubmitChanges();
                            //更新焊口号 修改固定焊口号后 +G
                            //BLL.Pipeline_WeldJointService.UpdateWeldJointAddG(newWeldJoint.WeldJointId, newWeldJoint.JointAttribute, Const.BtnAdd);
                            //BLL.Batch_PointBatchItemService.InsertPointBatch(this.CurrUser.LoginProjectId, tvControlItem.SelectedNodeID.Split('|')[0], tvControlItem.SelectedNode.ParentNode.NodeID.Split('|')[0], preWeldingDaily.CoverWelderId, preWeldingDaily.WeldJointId, preWeldingDaily.WeldingDate);
                        }
                        ShowNotify("保存成功!", MessageBoxIcon.Success);
                        PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
                    }
                    else
                    {
                        Alert.ShowInTop("焊工无资质焊接的焊口:" + eventArg, "提交结果", MessageBoxIcon.Warning);
                    }
                }
                else
                {
                    ShowNotify("请选择焊接日期!", MessageBoxIcon.Warning);
                }
            }
            else
            {
                ShowNotify(Resources.Lan.NoPrivilegePrompt, MessageBoxIcon.Warning);
            }
        }
        #region 资质分析
        private bool IsOK(List welderQualifys, string wmeCode, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch)
        {
            bool isok = false;
            foreach (var welderQualify in welderQualifys)
            {
                int okNum = 0;
                if (!string.IsNullOrEmpty(wmeCode))   //焊接方法
                {
                    if (wmeCode.Contains(welderQualify.WeldingMethodId))
                    {
                        okNum++;
                    }
                }
                else
                {
                    okNum++;
                }
                if (welderQualify.WeldingLocationId == "ALL")   //焊接位置
                {
                    okNum++;
                }
                else
                {
                    if (!string.IsNullOrEmpty(location))
                    {
                        if (welderQualify.WeldingLocationId.Contains(location))
                        {
                            okNum++;
                        }
                    }
                    else
                    {
                        okNum++;
                    }
                }
                if (!string.IsNullOrEmpty(weldTypeGroup))
                {
                    if (welderQualify.WeldType.Contains(weldTypeGroup))
                    {
                        okNum++;
                    }
                }
                else
                {
                    okNum++;
                }
                var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste);
                if (steel != null)   //钢材类型
                {
                    if (welderQualify.MaterialType.Contains(steel.MaterialType ?? ""))
                    {
                        okNum++;
                    }
                }
                else
                {
                    okNum++;
                }
                if (weldTypeGroup != "2") // 承插焊
                {
                    if (welderQualify.SizesMin == 0) // 0表示不限
                    {
                        okNum++;
                    }
                    else  //最小寸径
                    {
                        if (dia != null)
                        {
                            if (dia >= welderQualify.SizesMin)
                            {
                                okNum++;
                            }
                        }
                        else
                        {
                            okNum++;
                        }
                    }
                    if (welderQualify.ThicknessMax == 0)  // 0表示不限
                    {
                        okNum++;
                    }
                    else
                    {
                        if (sch != null)   //最大壁厚
                        {
                            if (sch <= welderQualify.ThicknessMax)
                            {
                                okNum++;
                            }
                        }
                        else
                        {
                            okNum++;
                        }
                    }
                }
                else  // 当为角焊缝时,管径和壁厚不限制
                {
                    okNum++;
                    okNum++;
                }
                if (okNum == 6)   //全部条件符合
                {
                    isok = true;
                    break;
                }
            }
            return isok;
        }
        /// 
        /// 两种焊接方法的资质判断
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        private bool TwoWmeIsOK(List floorWelderQualifys, List cellWelderQualifys, string wmeCode1, string wmeCode2, string location, string weldTypeGroup, string ste, decimal? dia, decimal? sch)
        {
            bool isok = false;
            decimal? fThicknessMax = 0;
            decimal? cThicknessMax = 0;
            var steel = BLL.Base_MaterialService.GetMaterialByMaterialId(ste);
            var floorQ = from x in floorWelderQualifys
                         where wmeCode1.Contains(x.WeldingMethodId)
                         && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location)))
                         && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? ""))
                         && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup))
                         // && (dia == null || x.SizesMin<=dia)
                         select x;
            var cellQ = from x in cellWelderQualifys
                        where wmeCode2.Contains(x.WeldingMethodId)
                         && (x.WeldingLocationId == "ALL" || (location == null || location == "" || x.WeldingLocationId.Contains(location)))
                         && (steel == null || x.MaterialType.Contains(steel.MaterialType ?? ""))
                         && (weldTypeGroup == null || x.WeldType.Contains(weldTypeGroup))
                        // && (dia == null || x.SizesMin <= dia)
                        select x;
            if (floorQ.Count() > 0 && cellQ.Count() > 0)
            {
                if (weldTypeGroup != "2") // 当为角焊缝时,管径和壁厚不限制
                {
                    var floorDiaQ = floorQ.Where(x => x.SizesMin <= dia);
                    var cellDiaQ = cellQ.Where(x => x.SizesMin <= dia);
                    if (floorDiaQ.Count() > 0 && cellDiaQ.Count() > 0)
                    {
                        var fThick = floorDiaQ.Where(x => x.ThicknessMax == 0);
                        var cThick = cellDiaQ.Where(x => x.ThicknessMax == 0);
                        // 只要有一个不限(为0)就通过
                        if (fThick.Count() > 0 || cThick.Count() > 0)
                        {
                            isok = true;
                        }
                        else
                        {
                            fThicknessMax = floorQ.Max(x => x.ThicknessMax);
                            cThicknessMax = cellQ.Max(x => x.ThicknessMax);
                            if ((fThicknessMax + cThicknessMax) >= sch)
                            {
                                isok = true;
                            }
                        }
                    }
                }
                else
                {
                    isok = true;
                }
            }
            return isok;
        }
        #endregion
    }
}