diff --git a/.vs/CNCEC_SUBQHSE_WUHUAN/v17/.wsuo b/.vs/CNCEC_SUBQHSE_WUHUAN/v17/.wsuo
index 64fed920..65891f11 100644
Binary files a/.vs/CNCEC_SUBQHSE_WUHUAN/v17/.wsuo and b/.vs/CNCEC_SUBQHSE_WUHUAN/v17/.wsuo differ
diff --git a/.vs/CNCEC_SUBQHSE_WUHUAN/v17/DocumentLayout.backup.json b/.vs/CNCEC_SUBQHSE_WUHUAN/v17/DocumentLayout.backup.json
index 0ee74a3a..ee21c543 100644
--- a/.vs/CNCEC_SUBQHSE_WUHUAN/v17/DocumentLayout.backup.json
+++ b/.vs/CNCEC_SUBQHSE_WUHUAN/v17/DocumentLayout.backup.json
@@ -59,10 +59,6 @@
               "$type": "Bookmark",
               "Name": "ST:131:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
             },
-            {
-              "$type": "Bookmark",
-              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
-            },
             {
               "$type": "Bookmark",
               "Name": "ST:0:0:{1a46fd64-28d5-434c-8eb3-17a02d419b53}"
@@ -70,6 +66,14 @@
             {
               "$type": "Bookmark",
               "Name": "ST:0:0:{5726b0e3-1012-5233-81f9-d1fad48e7a56}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{e1b7d1f8-9b3c-49b1-8f4f-bfc63a88835d}"
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{aa2115a1-9712-457b-9047-dbb71ca2cdd2}"
             }
           ]
         }
diff --git a/SGGL/FineUIPro.Web/common/mainProject2.aspx b/SGGL/FineUIPro.Web/common/mainProject2.aspx
index 1e81975b..1e02b8e6 100644
--- a/SGGL/FineUIPro.Web/common/mainProject2.aspx
+++ b/SGGL/FineUIPro.Web/common/mainProject2.aspx
@@ -172,19 +172,19 @@
                     
                         
                             
-                            
<%=getWrokCount0() %>/<%=getALLWrokCount0() %>
+                            
<%=WrokCount0 %>/<%=AllWrokCount0 %>
                          
                         
                             
-                            
<%=getWrokCount1() %>/<%=getALLWrokCount1() %>
+                            
<%=WrokCount1 %>/<%=AllWrokCount1 %>
                          
                         
                             
-                            
<%=getWrokCount2() %>/<%=getALLWrokCount2() %>
+                            
<%=WrokCount2 %>/<%=AllWrokCount2 %>
                          
                         
                             
-                            
<%=getWrokCount3() %>/<%=getALLWrokCount3() %>
+                            
<%=WrokCount3 %>/<%=AllWrokCount3 %>
                          
                      
                     
diff --git a/SGGL/FineUIPro.Web/common/mainProject2.aspx.cs b/SGGL/FineUIPro.Web/common/mainProject2.aspx.cs
index 00b5d7d4..a22ff052 100644
--- a/SGGL/FineUIPro.Web/common/mainProject2.aspx.cs
+++ b/SGGL/FineUIPro.Web/common/mainProject2.aspx.cs
@@ -6,6 +6,7 @@ using Model;
 using Newtonsoft.Json;
 using NPOI.Util;
 using System;
+using System.Collections;
 using System.Collections.Generic;
 using System.Data;
 using System.Data.SqlClient;
@@ -116,7 +117,7 @@ namespace FineUIPro.Web.common
 
                     //风险预警
                     getHazard(),
-
+                    getWork(),
                     //工程概况
                     getProjectInfo(),
 
@@ -655,67 +656,131 @@ namespace FineUIPro.Web.common
         #endregion 风险预警
 
         #region 作业许可
-
-        protected int getAllCount()
+        protected int AllWrokCount0;
+        protected int AllWrokCount1;
+        protected int AllWrokCount2;
+        protected int AllWrokCount3;
+        protected int WrokCount0;
+        protected int WrokCount1;
+        protected int WrokCount2;
+        protected int WrokCount3;   
+        protected async Task getWork()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId).ToList().Count;
+
+            var AllWrokCount0 = getALLWrokCount0();
+            var AllWrokCount1 = getALLWrokCount1();
+            var AllWrokCount2 = getALLWrokCount2();
+            var AllWrokCount3 = getALLWrokCount3();
+            var WrokCount0 = getWrokCount0();
+            var WrokCount1 = getWrokCount1();
+            var WrokCount2 = getWrokCount2();
+            var WrokCount3 = getWrokCount3();
+            await Task.WhenAll( AllWrokCount0, AllWrokCount1, AllWrokCount2, AllWrokCount3, WrokCount0, WrokCount1, WrokCount2, WrokCount3);
+            this.AllWrokCount0 = await AllWrokCount0;
+            this.AllWrokCount1 = await AllWrokCount1;
+            this.AllWrokCount2 = await AllWrokCount2;
+            this.AllWrokCount3 = await AllWrokCount3;
+            this.WrokCount0 = await WrokCount0;
+            this.WrokCount1 = await WrokCount1;
+            this.WrokCount2 = await WrokCount2;
+            this.WrokCount3 = await WrokCount3;
+
+        }
+        protected IQueryable
 GetLicenseQuery()
+        {
+            var query = from lm in Funs.DB.License_LicenseManager
+
+                join lt in Funs.DB.Base_LicenseType on lm.LicenseTypeId equals lt.LicenseTypeId into ltJoin
+                from licenseType in ltJoin.DefaultIfEmpty()
+             
+                select new LicenseDto
+                {
+                    ProjectId=  lm.ProjectId, 
+                    LicenseTypeName = licenseType.LicenseTypeName ?? "", 
+                    WorkStatesStr = lm.WorkStates == "1" ? "待开工" :
+                        lm.WorkStates == "2" ? "作业中" :
+                        lm.WorkStates == "3" ? "已关闭" :
+                        lm.WorkStates == "-1" ? "已取消" : ""
+                };
+            return query;
+        }
+        protected async Task getAllCount()
+        {
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId).ToList().Count;
             return result;
         }
+ 
 
-        protected int getALLWrokCount0()
-        {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "动火作业许可证").ToList().Count;
+        protected async Task getALLWrokCount0()
+        { 
+           return  await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "动火作业许可证").ToList().Count;
             return result;
+           });
         }
 
-        protected int getALLWrokCount1()
+        protected async Task getALLWrokCount1()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "高处作业许可证").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "高处作业许可证").ToList().Count;
             return result;
+            });
         }
 
-        protected int getALLWrokCount2()
+        protected async Task getALLWrokCount2()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "吊装作业许可证").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "吊装作业许可证").ToList().Count;
             return result;
+            });
         }
 
-        protected int getALLWrokCount3()
+        protected async Task getALLWrokCount3()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId
-                                                                        && x.LicenseTypeName != "动火作业许可证" && x.LicenseTypeName != "高处作业许可证" && x.LicenseTypeName != "吊装作业许可证").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId
+                                                      && x.LicenseTypeName != "动火作业许可证" && x.LicenseTypeName != "高处作业许可证" && x.LicenseTypeName != "吊装作业许可证").ToList().Count;
             return result;
+            });
         }
 
-        protected int getTodayCount()
+        protected async Task getTodayCount()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.WorkStatesStr == "作业中").ToList().Count;
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.WorkStatesStr == "作业中").ToList().Count;
             return result;
         }
         /// 
         /// 动火作业许可证
         /// 
         /// 
-        protected int getWrokCount0()
+        protected async Task getWrokCount0()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "动火作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "动火作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
             return result;
+            });
         }
-        protected int getWrokCount1()
+        protected async Task getWrokCount1()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "高处作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "高处作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
             return result;
+            });
         }
-        protected int getWrokCount2()
+        protected async Task getWrokCount2()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "吊装作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId && x.LicenseTypeName == "吊装作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
             return result;
+            });
         }
-        protected int getWrokCount3()
+        protected async Task getWrokCount3()
         {
-            var result = Funs.DB.View_License_LicenseManager.Where(x => x.ProjectId == ProjectId
-            && x.LicenseTypeName != "动火作业许可证" && x.LicenseTypeName != "高处作业许可证" && x.LicenseTypeName != "吊装作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
+            return await Task.Run(() => { 
+            var result = GetLicenseQuery().Where(x => x.ProjectId == ProjectId
+                                                      && x.LicenseTypeName != "动火作业许可证" && x.LicenseTypeName != "高处作业许可证" && x.LicenseTypeName != "吊装作业许可证" && x.WorkStatesStr == "作业中").ToList().Count;
             return result;
+            });
         }
         #endregion 作业许可
 
@@ -1211,21 +1276,32 @@ namespace FineUIPro.Web.common
                  returnHtml += "" + item.LicenseManagerCode + "-" + shortUnitname + "-" + item.WorkAreaName + "-" + gfx + "-" + item.LicenseTypeName
                      + "
";
              }*/
-
-            var result = from x in Funs.DB.View_License_LicenseManager
-                         join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId into g
-                         from z in g.DefaultIfEmpty()
-                         where x.ProjectId == ProjectId
-                         select new
-                         {
-                             x.LicenseManagerCode,
-                             x.WorkAreaName,
-                             x.LicenseTypeName,
-                             GfxType = x.IsHighRisk == true ? "风险作业" : "非高风险",
-                             ShortUnitName = z != null ? z.ShortUnitName : "", // 空值防护
-                         };
+            var result = (from x in Funs.DB.License_LicenseManager
+                    join y in Funs.DB.Base_Unit on x.UnitId equals y.UnitId into units
+                    from unit in units.DefaultIfEmpty() 
+                    join z in Funs.DB.WBS_UnitWork on x.WorkAreaId equals z.UnitWorkId into areas
+                    from area in areas.DefaultIfEmpty()
+                    join w in Funs.DB.Base_LicenseType on x.LicenseTypeId equals w.LicenseTypeId 
+                    where x.ProjectId == ProjectId
+                    select new
+                    {
+                        x.LicenseManagerCode,
+                        WorkAreaName=area.UnitWorkName,
+                        w.LicenseTypeName,
+                        x.IsHighRisk,
+                        unit.ShortUnitName
+                    })
+                .AsEnumerable()  // 后续操作在内存中进行
+                .Select(x => new
+                {
+                    x.LicenseManagerCode,
+                    x.WorkAreaName,
+                    x.LicenseTypeName,
+                    GfxType = x.IsHighRisk == true ? "风险作业" : "非高风险",
+                    ShortUnitName = x.ShortUnitName ?? ""
+                }).ToList(); 
             var sb = new StringBuilder();
-            foreach (var item in result.ToList())
+            foreach (var item in result)
             {
                 sb.AppendFormat("{0}-{1}-{2}-{3}-{4}
",
                     item.LicenseManagerCode,
diff --git a/SGGL/FineUIPro.Web/common/main_new.aspx.cs b/SGGL/FineUIPro.Web/common/main_new.aspx.cs
index 548dfe4c..9291f8f8 100644
--- a/SGGL/FineUIPro.Web/common/main_new.aspx.cs
+++ b/SGGL/FineUIPro.Web/common/main_new.aspx.cs
@@ -426,15 +426,21 @@ namespace FineUIPro.Web.common
                                     join y in db.Sys_Const on x.AccidentTypeId equals y.ConstValue
                                     where y.ConstText.Contains("未遂")
                                     select x;
-                foreach (var province in provinces)
+                var allProvinceProjectList = (from x in allProjects
+                    join y in provinceDic on x.Province equals y.ProvinceCode
+                    where provinces.Contains(y.CnShortName )
+                    select new { x,y.CnShortName}).ToList();
+                var allProvinces= allProvinceProjectList.Select(x =>x.CnShortName ).Distinct().ToList();
+                foreach (var province in allProvinces)
                 {
                     int accidentNum = 0;
                     DateTime date = DateTime.Now;
                     decimal money1 = 0, money2 = 0;
-                    var projects = from x in allProjects
-                                   join y in provinceDic on x.Province equals y.ProvinceCode
-                                   where y.CnShortName == province
-                                   select x;
+                   /* var projects = from x in allProjects
+                        join y in provinceDic on x.Province equals y.ProvinceCode
+                        where y.CnShortName == province
+                        select x;*/
+                    var projects = allProvinceProjectList.Where(x => x.CnShortName == province);
                     listdata.Add(projects.Count());
                     decimal progress = 0;
                     if (projects.Any())
@@ -443,22 +449,22 @@ namespace FineUIPro.Web.common
                         foreach (var item in projects)
                         {
                             //未遂事故
-                            var accidentListProject1 = accidentList1.Where(x => x.ProjectId == item.ProjectId);
-                            var accidentListProject2 = accidentList2.Where(x => x.ProjectId == item.ProjectId);
+                            var accidentListProject1 = accidentList1.Where(x => x.ProjectId == item.x.ProjectId);
+                            var accidentListProject2 = accidentList2.Where(x => x.ProjectId == item.x.ProjectId);
                             accidentNum = accidentListProject1.Count() + accidentListProject2.Count();
                             //时间
-                            if (item.StartDate != null && item.StartDate < date)
+                            if (item.x.StartDate != null && item.x.StartDate < date)
                             {
-                                date = Convert.ToDateTime(item.StartDate);
+                                date = Convert.ToDateTime(item.x.StartDate);
                             }
                             //合同额
-                            if (item.ConstructionMoney != null)
+                            if (item.x.ConstructionMoney != null)
                             {
-                                money1 += item.ConstructionMoney.Value;
+                                money1 += item.x.ConstructionMoney.Value;
                             }
-                            if (item.Progress != null)
+                            if (item.x.Progress != null)
                             {
-                                progress = item.Progress.Value;
+                                progress = item.x.Progress.Value;
                             }
                         }
                         jd.Add("进度:" + progress.ToString("0.##") + "%");
diff --git a/SGGL/Model/APIItem/HSSE/LicenseItem.cs b/SGGL/Model/APIItem/HSSE/LicenseItem.cs
index e520c709..3a45d871 100644
--- a/SGGL/Model/APIItem/HSSE/LicenseItem.cs
+++ b/SGGL/Model/APIItem/HSSE/LicenseItem.cs
@@ -68,4 +68,12 @@ namespace Model
             set;
         }
     }
+
+    public class LicenseDto
+    {
+        public string ProjectId { get; set; }
+        public string WorkStates { get; set; }
+        public string LicenseTypeName { get; set; }
+        public string WorkStatesStr { get; set; }
+    }
 }