From 2302d80940bcede06ce8210c3184dfaecbd27f9a Mon Sep 17 00:00:00 2001 From: fly-l <1420031550@qq.com> Date: Sat, 8 Oct 2022 23:50:15 +0800 Subject: [PATCH] =?UTF-8?q?20221008=20=E7=84=8A=E6=8E=A5=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BLL/API/HJGL/APIPackagingManageService.cs | 12 + SGGL/BLL/BLL.csproj | 1 + SGGL/FineUIPro.Web/ErrLog.txt | 87 +++ SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx | 221 +++--- .../common/mainMenu_HJGL.aspx.cs | 638 +++++++++++++----- .../common/mainMenu_HJGL.aspx.designer.cs | 27 + SGGL/Model/HJGL/PackagingManageItem.cs | 33 + SGGL/Model/HJGL/PrePipelineItem.cs | 12 + SGGL/Model/HJGL/sp_index_HJGLItem.cs | 31 + SGGL/Model/Model.csproj | 2 + .../HJGL/PackagingManageController.cs | 32 + SGGL/WebAPI/WebAPI.csproj | 1 + 12 files changed, 825 insertions(+), 272 deletions(-) create mode 100644 SGGL/BLL/API/HJGL/APIPackagingManageService.cs create mode 100644 SGGL/Model/HJGL/PackagingManageItem.cs create mode 100644 SGGL/Model/HJGL/PrePipelineItem.cs create mode 100644 SGGL/WebAPI/Controllers/HJGL/PackagingManageController.cs diff --git a/SGGL/BLL/API/HJGL/APIPackagingManageService.cs b/SGGL/BLL/API/HJGL/APIPackagingManageService.cs new file mode 100644 index 00000000..3de1fbf2 --- /dev/null +++ b/SGGL/BLL/API/HJGL/APIPackagingManageService.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BLL +{ + internal class APIPackagingManageService + { + } +} diff --git a/SGGL/BLL/BLL.csproj b/SGGL/BLL/BLL.csproj index 889cf938..085a5278 100644 --- a/SGGL/BLL/BLL.csproj +++ b/SGGL/BLL/BLL.csproj @@ -147,6 +147,7 @@ + diff --git a/SGGL/FineUIPro.Web/ErrLog.txt b/SGGL/FineUIPro.Web/ErrLog.txt index 6298b4d7..c877aa07 100644 --- a/SGGL/FineUIPro.Web/ErrLog.txt +++ b/SGGL/FineUIPro.Web/ErrLog.txt @@ -379,3 +379,90 @@ IP地址:::1 出错时间:10/08/2022 15:12:38 + +错误信息开始=====> +错误类型:HttpCompileException +错误信息:d:\诺必达\赛鼎\SGGL_SeDin_new\SGGL\FineUIPro.Web\common\mainMenu_HJGL.aspx(142): error CS0103: 当前上下文中不存在名称“E05_Values01_1” +错误堆栈: + 在 System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath) + 在 System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + 在 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) + 在 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) + 在 System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) + 在 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) + 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +出错时间:10/08/2022 22:20:32 +出错文件:http://localhost:8008/common/mainMenu_HJGL.aspx +IP地址:::1 + +出错时间:10/08/2022 22:20:32 + + +错误信息开始=====> +错误类型:NullReferenceException +错误信息:未将对象引用设置到对象的实例。 +错误堆栈: + 在 FineUIPro.Web.mainMenu_HJGL.Page_Load(Object sender, EventArgs e) + 在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) + 在 System.EventHandler.Invoke(Object sender, EventArgs e) + 在 System.Web.UI.Control.OnLoad(EventArgs e) + 在 System.Web.UI.Control.LoadRecursive() + 在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +出错时间:10/08/2022 23:33:05 +出错文件:http://localhost:8008/common/mainMenu_HJGL.aspx +IP地址:::1 +操作人员:JT + +出错时间:10/08/2022 23:33:05 + + +错误信息开始=====> +错误类型:HttpCompileException +错误信息:c:\Users\1420031550\AppData\Local\Temp\Temporary ASP.NET Files\vs\294a0955\1ae38a57\App_Web_mainmenu_hjgl.aspx.38131f0b.m2-fqnhl.0.cs(556): error CS1061: “ASP.common_mainmenu_hjgl_aspx”不包含“echarts02Value”的定义,并且找不到可接受类型为“ASP.common_mainmenu_hjgl_aspx”的第一个参数的扩展方法“echarts02Value”(是否缺少 using 指令或程序集引用?) +错误堆栈: + 在 System.Web.Compilation.AssemblyBuilder.Compile() + 在 System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + 在 System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + 在 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) + 在 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) + 在 System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) + 在 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) + 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +出错时间:10/08/2022 23:33:11 +出错文件:http://localhost:8008/common/mainMenu_HJGL.aspx +IP地址:::1 + +出错时间:10/08/2022 23:33:11 + + +错误信息开始=====> +错误类型:HttpCompileException +错误信息:c:\Users\1420031550\AppData\Local\Temp\Temporary ASP.NET Files\vs\294a0955\1ae38a57\App_Web_mainmenu_hjgl.aspx.38131f0b.m2-fqnhl.0.cs(556): error CS1061: “ASP.common_mainmenu_hjgl_aspx”不包含“echarts02Value”的定义,并且找不到可接受类型为“ASP.common_mainmenu_hjgl_aspx”的第一个参数的扩展方法“echarts02Value”(是否缺少 using 指令或程序集引用?) +错误堆栈: + 在 System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath) + 在 System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + 在 System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + 在 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) + 在 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) + 在 System.Web.UI.PageHandlerFactory.GetHandler(HttpContext context, String requestType, String virtualPath, String path) + 在 System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) + 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +出错时间:10/08/2022 23:33:18 +出错文件:http://localhost:8008/common/mainMenu_HJGL.aspx +IP地址:::1 + +出错时间:10/08/2022 23:33:18 + diff --git a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx index 43fc25b7..8f02b9bd 100644 --- a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx +++ b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx @@ -6,6 +6,37 @@ 首页 +
@@ -44,29 +75,17 @@
--%>
- 管道实时预制率 + 管道预制率分析
-
-
-
- <%--
-
- 项目焊接工程量统计 -
-
- 按达因量 -
-
    -
  • 按达因量
  • -
  • 按焊口数
  • -
+ <%--
--%> +
+
+
%
-
-
-
-
--%> +
+
焊工功效分析 @@ -85,6 +104,8 @@ <%--
--%>
+
DIN/天 +
@@ -97,6 +118,9 @@
  • 分包商
  • 单位工程
  • 材质类别
  • +
  • 焊缝规格
  • +
  • 焊缝类型
  • +
  • 焊缝属性
  • @@ -105,11 +129,12 @@
    - 焊接进度分析 + 焊接缺陷分析
      -
    • 分包商
    • -
    • 单位工程
    • -
    • 材质类别
    • +
    • 材质类别
    • +
    • 焊缝规格
    • +
    • 焊缝类型
    • +
    • 焊缝属性
    @@ -121,8 +146,8 @@ 焊工业绩分析
    • 分包商
    • -
    • 单位工程
    • -
    • 材质类别
    • + <%--
    • 单位工程
    • +
    • 材质类别
    • --%>
    @@ -136,28 +161,51 @@ diff --git a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.cs b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.cs index f31dc10a..ac7d95fb 100644 --- a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.cs +++ b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.cs @@ -205,7 +205,7 @@ namespace FineUIPro.Web ////焊接检测单明细 getCH_CheckItemList = (from x in Funs.DB.HJGL_Batch_NDEItem join y in Funs.DB.HJGL_Batch_BatchTrustItem on x.TrustBatchItemId equals y.TrustBatchItemId - join z in Funs.DB.HJGL_WeldJoint on y.WeldJointId equals z.WeldJointId + join z in Funs.DB.View_HJGL_WeldJoint on y.WeldJointId equals z.WeldJointId join line in Funs.DB.HJGL_Pipeline on z.PipelineId equals line.PipelineId where z.ProjectId == this.ProjectId select new Model.sp_index_HJGLItem @@ -213,10 +213,16 @@ namespace FineUIPro.Web ProjectId = line.ProjectId, ID = x.NDEItemID, UnitId = line.UnitId, ///重定义单位 + UnitName=z.UnitName, WorkAreaId = line.UnitId, /// 重定义区域 MaterialId = line.UnitWorkId, ///重定义材质 CHT_TotalFilm = x.TotalFilm, - CHT_PassFilm = x.PassFilm + CHT_PassFilm = x.PassFilm, + Specification = z.Specification, + WeldTypeCode=z.WeldTypeCode, + JointAttribute=z.JointAttribute, + UnitWorkName=z.UnitWorkName, + MaterialCode=z.MaterialCode }).ToList(); ////总焊工 getAllWelderList = from x in Funs.DB.SitePerson_Person @@ -230,6 +236,8 @@ namespace FineUIPro.Web getecharts05(); getecharts06(); this.divWelderEfficacyNum.InnerText = BLL.HJGL_WeldingReportService.GetWelderEfficacy(this.CurrUser .LoginProjectId).ToString() ; + this.echarts02Value.InnerText = Math.Floor(Math.Round(decimal.Parse((PipeRate1 / (PipeRate1+ PipeRate2)).ToString("0.000")), 2) * 100).ToString(); + } @@ -364,43 +372,150 @@ namespace FineUIPro.Web #endregion #region 焊接一次合格率 - protected string E08_Type01; - protected string E08_Values01; - - protected string E08_Type02; - protected string E08_Values02; - - protected string E08_Type03; - protected string E08_Values03; + protected string E04_Type01; + protected string E04_Values01; + protected string E04_Type02; + protected string E04_Values02; + protected string E04_Type03; + protected string E04_Values03; + protected string E04_Type04; + protected string E04_Values04; + protected string E04_Type05; + protected string E04_Values05; + protected string E04_Type06; + protected string E04_Values06; /// /// 焊接一次合格率 /// + //protected void getecharts04() + //{ + // E08_Type01 = "[]"; + // E08_Values01 = "[]"; + + // E08_Type02 = "[]"; + // E08_Values02 = "[]"; + + // E08_Type03 = "[]"; + // E08_Values03 = "[]"; + // double PassRate = 0; + // int current_pass_film = 0; + // int cht_totalfilm = 0; + // //// 按单位 + // List type01List = new List(); + // List count011List = new List(); + // foreach (var itemUnit in getProjectUnitList) + // { + // string unitName = UnitService.GetUnitNameByUnitId(itemUnit.UnitId); + // type01List.Add(unitName); + // var getUJots = from x in getCH_CheckItemList + // where x.UnitId == itemUnit.UnitId + // select x; + // PassRate = 0; + // current_pass_film = getUJots.Sum(x => x.CHT_PassFilm) ?? 0; + // cht_totalfilm = getUJots.Sum(x => x.CHT_TotalFilm) ?? 0; + // if (cht_totalfilm > 0) + // { + // PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + // } + // count011List.Add(PassRate); + // } + // if (type01List.Count() > 0) + // { + // E08_Type01 = JsonConvert.SerializeObject(type01List); + // E08_Values01 = JsonConvert.SerializeObject(count011List); + // } + // ///按单位工程 + // List type02List = new List(); + // List count021List = new List(); + // var getWorkAreas = from x in Funs.DB.WBS_UnitWork + // where x.ProjectId == this.ProjectId + // select x; + // foreach (var itemWorkArea in getWorkAreas) + // { + // type02List.Add(itemWorkArea.UnitWorkName); + // var getWJots = from x in getCH_CheckItemList + // where x.WorkAreaId == itemWorkArea.UnitWorkId + // select x; + + // PassRate = 0; + // current_pass_film = getWJots.Sum(x => x.CHT_PassFilm) ?? 0; + // cht_totalfilm = getWJots.Sum(x => x.CHT_TotalFilm) ?? 0; + // if (cht_totalfilm > 0) + // { + // PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + // } + // count021List.Add(PassRate); + // } + // if (type02List.Count() > 0) + // { + // E08_Type02 = JsonConvert.SerializeObject(type02List); + // E08_Values02 = JsonConvert.SerializeObject(count021List); + // } + + // ///按材质类别 + // List type03List = new List(); + // List count031List = new List(); + // var getMaterials = from x in Funs.DB.Base_Material + // join y in Funs.DB.HJGL_Pipeline on x.MaterialId equals y.MaterialId + // where y.ProjectId == this.ProjectId + // select x; + // foreach (var itemMaterial in getMaterials) + // { + // string code = itemMaterial.MaterialCode; + // type03List.Add(code); + // var getMJots = from x in getCH_CheckItemList + // where x.MaterialId == itemMaterial.MaterialId + // select x; + + // PassRate = 0; + // current_pass_film = getMJots.Sum(x => x.CHT_PassFilm) ?? 0; + // cht_totalfilm = getMJots.Sum(x => x.CHT_TotalFilm) ?? 0; + // if (cht_totalfilm > 0) + // { + // PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + // } + // count031List.Add(PassRate); + // } + // if (type03List.Count() > 0) + // { + // E08_Type03 = JsonConvert.SerializeObject(type03List); + // E08_Values03 = JsonConvert.SerializeObject(count031List); + // } + //} protected void getecharts04() { - E08_Type01 = "[]"; - E08_Values01 = "[]"; + E04_Type01 = "[]"; + E04_Values01 = "[]"; + E04_Type02 = "[]"; + E04_Values02 = "[]"; + E04_Type03 = "[]"; + E04_Values03 = "[]"; + E04_Type04 = "[]"; + E04_Values04 = "[]"; - E08_Type02 = "[]"; - E08_Values02 = "[]"; + E04_Type05 = "[]"; + E04_Values05 = "[]"; + + E04_Type06 = "[]"; + E04_Values06 = "[]"; - E08_Type03 = "[]"; - E08_Values03 = "[]"; double PassRate = 0; int current_pass_film = 0; int cht_totalfilm = 0; //// 按单位 List type01List = new List(); List count011List = new List(); - foreach (var itemUnit in getProjectUnitList) + var tb_type01 = getCH_CheckItemList.GroupBy(x => x.UnitName).Select(x => new { + UnitName=x.Key, + Current_pass_film=x.Sum(m => m.CHT_PassFilm) ??0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type01) { - string unitName = UnitService.GetUnitNameByUnitId(itemUnit.UnitId); - type01List.Add(unitName); - var getUJots = from x in getCH_CheckItemList - where x.UnitId == itemUnit.UnitId - select x; + type01List.Add(item.UnitName); PassRate = 0; - current_pass_film = getUJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getUJots.Sum(x => x.CHT_TotalFilm) ?? 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; if (cht_totalfilm > 0) { PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); @@ -409,25 +524,24 @@ namespace FineUIPro.Web } if (type01List.Count() > 0) { - E08_Type01 = JsonConvert.SerializeObject(type01List); - E08_Values01 = JsonConvert.SerializeObject(count011List); + E04_Type01 = JsonConvert.SerializeObject(type01List); + E04_Values01 = JsonConvert.SerializeObject(count011List); } + ///按单位工程 List type02List = new List(); List count021List = new List(); - var getWorkAreas = from x in Funs.DB.WBS_UnitWork - where x.ProjectId == this.ProjectId - select x; - foreach (var itemWorkArea in getWorkAreas) + var tb_type02 = getCH_CheckItemList.GroupBy(x => x.UnitWorkName).Select(x => new { + UnitWorkName = x.Key, + Current_pass_film = x.Sum(m => m.CHT_PassFilm) ?? 0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type02) { - type02List.Add(itemWorkArea.UnitWorkName); - var getWJots = from x in getCH_CheckItemList - where x.WorkAreaId == itemWorkArea.UnitWorkId - select x; - + type02List.Add(item.UnitWorkName); PassRate = 0; - current_pass_film = getWJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getWJots.Sum(x => x.CHT_TotalFilm) ?? 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; if (cht_totalfilm > 0) { PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); @@ -436,28 +550,25 @@ namespace FineUIPro.Web } if (type02List.Count() > 0) { - E08_Type02 = JsonConvert.SerializeObject(type02List); - E08_Values02 = JsonConvert.SerializeObject(count021List); + E04_Type02 = JsonConvert.SerializeObject(type02List); + E04_Values02 = JsonConvert.SerializeObject(count021List); } + ///按材质类别 List type03List = new List(); List count031List = new List(); - var getMaterials = from x in Funs.DB.Base_Material - join y in Funs.DB.HJGL_Pipeline on x.MaterialId equals y.MaterialId - where y.ProjectId == this.ProjectId - select x; - foreach (var itemMaterial in getMaterials) + var tb_type03 = getCH_CheckItemList.GroupBy(x => x.MaterialCode).Select(x => new { + MaterialCode = x.Key, + Current_pass_film = x.Sum(m => m.CHT_PassFilm) ?? 0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type03) { - string code = itemMaterial.MaterialCode; - type03List.Add(code); - var getMJots = from x in getCH_CheckItemList - where x.MaterialId == itemMaterial.MaterialId - select x; - + type03List.Add(item.MaterialCode); PassRate = 0; - current_pass_film = getMJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getMJots.Sum(x => x.CHT_TotalFilm) ?? 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; if (cht_totalfilm > 0) { PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); @@ -466,122 +577,296 @@ namespace FineUIPro.Web } if (type03List.Count() > 0) { - E08_Type03 = JsonConvert.SerializeObject(type03List); - E08_Values03 = JsonConvert.SerializeObject(count031List); + E04_Type03 = JsonConvert.SerializeObject(type03List); + E04_Values03 = JsonConvert.SerializeObject(count031List); + } + //焊缝规格 + List type04List = new List(); + List count041List = new List(); + var tb_type04 = getCH_CheckItemList.GroupBy(x => x.Specification).Select(x => new { + Specification = x.Key, + Current_pass_film = x.Sum(m => m.CHT_PassFilm) ?? 0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type04) + { + type04List.Add(item.Specification); + PassRate = 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; + if (cht_totalfilm > 0) + { + PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + } + count041List.Add(PassRate); + } + if (type04List.Count() > 0) + { + E04_Type04 = JsonConvert.SerializeObject(type04List); + E04_Values04 = JsonConvert.SerializeObject(count041List); + } + //焊缝类型 + List type05List = new List(); + List count051List = new List(); + var tb_type05 = getCH_CheckItemList.GroupBy(x => x.WeldTypeCode).Select(x => new { + WeldTypeCode = x.Key, + Current_pass_film = x.Sum(m => m.CHT_PassFilm) ?? 0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type05) + { + type05List.Add(item.WeldTypeCode); + PassRate = 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; + if (cht_totalfilm > 0) + { + PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + } + count051List.Add(PassRate); + } + if (type05List.Count() > 0) + { + E04_Type05 = JsonConvert.SerializeObject(type05List); + E04_Values05 = JsonConvert.SerializeObject(count051List); + } + //焊缝属性 + List type06List = new List(); + List count061List = new List(); + var tb_type06 = getCH_CheckItemList.GroupBy(x => x.JointAttribute).Select(x => new { + JointAttribute = x.Key, + Current_pass_film = x.Sum(m => m.CHT_PassFilm) ?? 0, + Cht_totalfilm = x.Sum(m => m.CHT_TotalFilm) ?? 0 + }); + foreach (var item in tb_type06) + { + type06List.Add(item.JointAttribute); + PassRate = 0; + current_pass_film = item.Current_pass_film; + cht_totalfilm = item.Cht_totalfilm; + if (cht_totalfilm > 0) + { + PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); + } + count061List.Add(PassRate); + } + if (type06List.Count() > 0) + { + E04_Type06 = JsonConvert.SerializeObject(type06List); + E04_Values06 = JsonConvert.SerializeObject(count061List); } } #endregion - #region 焊接进度分析 + #region 焊接缺陷分析 protected string E05_Type01; - protected string E05_Values01_1; - protected string E05_Values01_2; - + protected string E05_Values01; protected string E05_Type02; - protected string E05_Values02_1; - protected string E05_Values02_2; - + protected string E05_Values02; protected string E05_Type03; - protected string E05_Values03_1; - protected string E05_Values03_2; + protected string E05_Values03; + protected string E05_Type04; + protected string E05_Values04; + + /// /// 焊接进度分析 /// + //protected void getecharts05() + //{ + // E05_Type01 = "[]"; + // E05_Values01_1 = "[]"; + // E05_Values01_2 = "[]"; + // E05_Type02 = "[]"; + // E05_Values02_1 = "[]"; + // E05_Values02_2 = "[]"; + + // E05_Type03 = "[]"; + // E05_Values03_1 = "[]"; + // E05_Values03_2 = "[]"; + + // //// 按单位 + // List type01List = new List(); + // List count011List = new List(); + // List count012List = new List(); + // foreach (var itemUnit in getProjectUnitList) + // { + // string unitName = UnitService.GetUnitNameByUnitId(itemUnit.UnitId); + // type01List.Add(unitName); + // var getUJots = from x in getAllJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.UnitId == itemUnit.UnitId + // select x; + // count011List.Add(getUJots.Count()); + // var getUCJots = from x in getFinishedJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.UnitId == itemUnit.UnitId + // select x; + // count012List.Add(getUCJots.Count()); + // } + // if (type01List.Count() > 0) + // { + // E05_Type01 = JsonConvert.SerializeObject(type01List); + // E05_Values01_1 = JsonConvert.SerializeObject(count011List); + // E05_Values01_2 = JsonConvert.SerializeObject(count012List); + // } + // ///按单位工程 + // List type02List = new List(); + // List count021List = new List(); + // List count022List = new List(); + // var getWorkAreas = from x in Funs.DB.WBS_UnitWork + // where x.ProjectId == this.ProjectId + // select x; + // foreach (var itemWorkArea in getWorkAreas) + // { + // type02List.Add(itemWorkArea.UnitWorkName); + // var getWJots = from x in getAllJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.UnitWorkId == itemWorkArea.UnitWorkId + // select x; + // count021List.Add(getWJots.Count()); + // var getWCJots = from x in getFinishedJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.UnitWorkId == itemWorkArea.UnitWorkId + // select x; + // count022List.Add(getWCJots.Count()); + // } + // if (type02List.Count() > 0) + // { + // E05_Type02 = JsonConvert.SerializeObject(type02List); + // E05_Values02_1 = JsonConvert.SerializeObject(count021List); + // E05_Values02_2 = JsonConvert.SerializeObject(count022List); + // } + + // ///按材质类别 + // List type03List = new List(); + // List count031List = new List(); + // List count032List = new List(); + // var getMaterials = (from x in Funs.DB.Base_Material + // join y in Funs.DB.HJGL_Pipeline on x.MaterialId equals y.MaterialId + // where y.ProjectId == this.ProjectId + // select x).ToList().Distinct(); + // foreach (var itemMaterial in getMaterials) + // { + // string code = itemMaterial.MaterialCode; + // type03List.Add(code); + // var getWJots = from x in getAllJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.MaterialId == itemMaterial.MaterialId + // select x; + // count031List.Add(getWJots.Count()); + // var getWCJots = from x in getFinishedJotList + // join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId + // where y.MaterialId == itemMaterial.MaterialId + // select x; + // count032List.Add(getWCJots.Count()); + // } + // if (type03List.Count() > 0) + // { + // E05_Type03 = JsonConvert.SerializeObject(type03List); + // E05_Values03_1 = JsonConvert.SerializeObject(count031List); + // E05_Values03_2 = JsonConvert.SerializeObject(count032List); + // } + //} + + protected void getecharts05() { - E05_Type01 = "[]"; - E05_Values01_1 = "[]"; - E05_Values01_2 = "[]"; - E05_Type02 = "[]"; - E05_Values02_1 = "[]"; - E05_Values02_2 = "[]"; + E05_Type01="[]"; + E05_Values01="[]"; + E05_Type02 = "[]"; + E05_Values02 = "[]"; + E05_Type03 = "[]"; + E05_Values03 = "[]"; + E05_Type04 = "[]"; + E05_Values04 = "[]"; - E05_Type03 = "[]"; - E05_Values03_1 = "[]"; - E05_Values03_2 = "[]"; - - //// 按单位 + var alllist = from x in Funs.DB.HJGL_Batch_NDEItem + join y in Funs.DB.HJGL_Batch_NDE on x.NDEID equals y.NDEID + join z in Funs.DB.View_Batch_NDEItem on x.NDEID equals z.NDEID + join m in Funs.DB.View_HJGL_Pipeline on z.PipelineCode equals m.PipelineCode + join n in Funs.DB.View_HJGL_WeldJoint on z.WeldJointId equals n.WeldJointId + where x.CheckDefects != null && x.CheckDefects != "" && y.ProjectId == this.CurrUser.LoginProjectId + select new + { + x.CheckDefects, + m.MaterialCode, + n.Specification, + n.WeldTypeCode, + n.JointAttribute, + }; + ///按材质类别 List type01List = new List(); - List count011List = new List(); - List count012List = new List(); - foreach (var itemUnit in getProjectUnitList) + List count011List = new List(); + var tb_type01 = alllist.GroupBy(x => x.MaterialCode).Select(x => new { - string unitName = UnitService.GetUnitNameByUnitId(itemUnit.UnitId); - type01List.Add(unitName); - var getUJots = from x in getAllJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.UnitId == itemUnit.UnitId - select x; - count011List.Add(getUJots.Count()); - var getUCJots = from x in getFinishedJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.UnitId == itemUnit.UnitId - select x; - count012List.Add(getUCJots.Count()); + MaterialCode = x.Key, + Defect = x.Count() + }); + foreach (var item in tb_type01) + { + type01List.Add(item.MaterialCode); + count011List.Add(item.Defect); } if (type01List.Count() > 0) { E05_Type01 = JsonConvert.SerializeObject(type01List); - E05_Values01_1 = JsonConvert.SerializeObject(count011List); - E05_Values01_2 = JsonConvert.SerializeObject(count012List); + E05_Values01 = JsonConvert.SerializeObject(count011List); } - ///按单位工程 + //焊缝规格 List type02List = new List(); - List count021List = new List(); - List count022List = new List(); - var getWorkAreas = from x in Funs.DB.WBS_UnitWork - where x.ProjectId == this.ProjectId - select x; - foreach (var itemWorkArea in getWorkAreas) + List count021List = new List(); + var tb_type02 = alllist.GroupBy(x => x.Specification).Select(x => new { - type02List.Add(itemWorkArea.UnitWorkName); - var getWJots = from x in getAllJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.UnitWorkId == itemWorkArea.UnitWorkId - select x; - count021List.Add(getWJots.Count()); - var getWCJots = from x in getFinishedJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.UnitWorkId == itemWorkArea.UnitWorkId - select x; - count022List.Add(getWCJots.Count()); + Specification = x.Key, + Defect = x.Count() + }); + foreach (var item in tb_type02) + { + type02List.Add(item.Specification); + count021List.Add(item.Defect); } if (type02List.Count() > 0) { E05_Type02 = JsonConvert.SerializeObject(type02List); - E05_Values02_1 = JsonConvert.SerializeObject(count021List); - E05_Values02_2 = JsonConvert.SerializeObject(count022List); + E05_Values02 = JsonConvert.SerializeObject(count021List); } - - ///按材质类别 + //焊缝类型 List type03List = new List(); - List count031List = new List(); - List count032List = new List(); - var getMaterials = (from x in Funs.DB.Base_Material - join y in Funs.DB.HJGL_Pipeline on x.MaterialId equals y.MaterialId - where y.ProjectId == this.ProjectId - select x).ToList().Distinct(); - foreach (var itemMaterial in getMaterials) + List count031List = new List(); + var tb_type03 = alllist.GroupBy(x => x.WeldTypeCode).Select(x => new { - string code = itemMaterial.MaterialCode; - type03List.Add(code); - var getWJots = from x in getAllJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.MaterialId == itemMaterial.MaterialId - select x; - count031List.Add(getWJots.Count()); - var getWCJots = from x in getFinishedJotList - join y in getAllJIsoInfoList on x.PipelineId equals y.PipelineId - where y.MaterialId == itemMaterial.MaterialId - select x; - count032List.Add(getWCJots.Count()); + WeldTypeCode = x.Key, + Defect = x.Count() + }); + foreach (var item in tb_type03) + { + type03List.Add(item.WeldTypeCode); + count031List.Add(item.Defect); } if (type03List.Count() > 0) { E05_Type03 = JsonConvert.SerializeObject(type03List); - E05_Values03_1 = JsonConvert.SerializeObject(count031List); - E05_Values03_2 = JsonConvert.SerializeObject(count032List); + E05_Values03 = JsonConvert.SerializeObject(count031List); + } + //焊缝属性 + List type04List = new List(); + List count041List = new List(); + var tb_type04 = alllist.GroupBy(x => x.JointAttribute).Select(x => new + { + JointAttribute = x.Key, + Defect = x.Count() + }); + foreach (var item in tb_type04) + { + type04List.Add(item.JointAttribute); + count041List.Add(item.Defect); + } + if (type04List.Count() > 0) + { + E05_Type04 = JsonConvert.SerializeObject(type04List); + E05_Values04 = JsonConvert.SerializeObject(count041List); } } #endregion @@ -604,10 +889,8 @@ namespace FineUIPro.Web E06_Values02 = "[]"; E06_Type03 = "[]"; E06_Values03 = "[]"; - double PassRate = 0; - int current_pass_film = 0; - int cht_totalfilm = 0; - var allwelder = from x in Funs.DB.SitePerson_Person + decimal TotalDin=0; + var allwelderEfficacy= from x in Funs.DB.SitePerson_Person join y in Funs.DB.HJGL_WeldJoint on x.PersonId equals y.CoverWelderId join z in Funs.DB.HJGL_WeldingDaily on y.WeldingDailyId equals z.WeldingDailyId join m in Funs.DB.HJGL_Pipeline on y.PipelineId equals m.PipelineId @@ -623,84 +906,77 @@ namespace FineUIPro.Web //// 按单位 List type01List = new List(); - List count011List = new List(); + List count011List = new List(); foreach (var itemUnit in getProjectUnitList) { string unitName = UnitService.GetUnitNameByUnitId(itemUnit.UnitId); type01List.Add(unitName); - var getUJots = from x in getCH_CheckItemList + var getUJots = from x in allwelderEfficacy where x.UnitId == itemUnit.UnitId select x; - PassRate = 0; - current_pass_film = getUJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getUJots.Sum(x => x.CHT_TotalFilm) ?? 0; - if (cht_totalfilm > 0) - { - PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); - } - count011List.Add(PassRate); + TotalDin = getUJots.Sum(x => x.Size) ?? 0; + + count011List.Add(TotalDin); } if (type01List.Count() > 0) { - E08_Type01 = JsonConvert.SerializeObject(type01List); - E08_Values01 = JsonConvert.SerializeObject(count011List); + E06_Type01 = JsonConvert.SerializeObject(type01List); + E06_Values01 = JsonConvert.SerializeObject(count011List); } ///按单位工程 List type02List = new List(); - List count021List = new List(); + List count021List = new List(); var getWorkAreas = from x in Funs.DB.WBS_UnitWork where x.ProjectId == this.ProjectId select x; foreach (var itemWorkArea in getWorkAreas) { type02List.Add(itemWorkArea.UnitWorkName); - var getWJots = from x in getCH_CheckItemList - where x.WorkAreaId == itemWorkArea.UnitWorkId + var getUJots = from x in allwelderEfficacy + where x.UnitWorkId == itemWorkArea.UnitWorkId select x; + TotalDin = getUJots.Sum(x => x.Size) ?? 0; - PassRate = 0; - current_pass_film = getWJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getWJots.Sum(x => x.CHT_TotalFilm) ?? 0; - if (cht_totalfilm > 0) - { - PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); - } - count021List.Add(PassRate); + count021List.Add(TotalDin); } if (type02List.Count() > 0) { - E08_Type02 = JsonConvert.SerializeObject(type02List); - E08_Values02 = JsonConvert.SerializeObject(count021List); + E06_Type02 = JsonConvert.SerializeObject(type02List); + E06_Values02 = JsonConvert.SerializeObject(count021List); } ///按材质类别 List type03List = new List(); - List count031List = new List(); - var getMaterials = from x in Funs.DB.Base_Material + List count031List = new List(); + var getMaterials =( from x in Funs.DB.Base_Material join y in Funs.DB.HJGL_Pipeline on x.MaterialId equals y.MaterialId where y.ProjectId == this.ProjectId - select x; - foreach (var itemMaterial in getMaterials) + select x).ToList().Distinct(); + var q = (from x in getMaterials + join y in allwelderEfficacy on x.MaterialId equals y.MaterialId + group new { x, y } by new { x.MaterialCode, y.Size } into g + select new + { + MaterialCode = g.Key.MaterialCode, + TotalDin = g.Sum(x => x.y.Size) + + }).GroupBy(x => x.MaterialCode).Select(x => + new + { + MaterialCode = x.Key, + TotalDin=x.Sum(m=>m.TotalDin) + }) ; + foreach (var itemMaterial in q) { string code = itemMaterial.MaterialCode; - type03List.Add(code); - var getMJots = from x in getCH_CheckItemList - where x.MaterialId == itemMaterial.MaterialId - select x; - PassRate = 0; - current_pass_film = getMJots.Sum(x => x.CHT_PassFilm) ?? 0; - cht_totalfilm = getMJots.Sum(x => x.CHT_TotalFilm) ?? 0; - if (cht_totalfilm > 0) - { - PassRate = Math.Round((100 * current_pass_film * 1.0) / cht_totalfilm, 1); - } - count031List.Add(PassRate); + type03List.Add(code); + count031List.Add((decimal)itemMaterial.TotalDin); } if (type03List.Count() > 0) { - E08_Type03 = JsonConvert.SerializeObject(type03List); - E08_Values03 = JsonConvert.SerializeObject(count031List); + E06_Type03 = JsonConvert.SerializeObject(type03List); + E06_Values03 = JsonConvert.SerializeObject(count031List); } } diff --git a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.designer.cs b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.designer.cs index 3bbc9ffb..61c95577 100644 --- a/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.designer.cs +++ b/SGGL/FineUIPro.Web/common/mainMenu_HJGL.aspx.designer.cs @@ -41,6 +41,24 @@ namespace FineUIPro.Web /// protected global::System.Web.UI.HtmlControls.HtmlGenericControl divWelderNum; + /// + /// echarts02Value 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl echarts02Value; + + /// + /// div2 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl div2; + /// /// divWelderEfficacyNum 控件。 /// @@ -49,5 +67,14 @@ namespace FineUIPro.Web /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 /// protected global::System.Web.UI.HtmlControls.HtmlGenericControl divWelderEfficacyNum; + + /// + /// div1 控件。 + /// + /// + /// 自动生成的字段。 + /// 若要进行修改,请将字段声明从设计器文件移到代码隐藏文件。 + /// + protected global::System.Web.UI.HtmlControls.HtmlGenericControl div1; } } diff --git a/SGGL/Model/HJGL/PackagingManageItem.cs b/SGGL/Model/HJGL/PackagingManageItem.cs new file mode 100644 index 00000000..62196bb3 --- /dev/null +++ b/SGGL/Model/HJGL/PackagingManageItem.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class PackagingManageDetailItem + { + public string PackagingManageId { get; set; } + public string PackagingCode { get; set; } + public string ProjectName { get; set; } + public string ContactName { get; set; } + public string ContactPhone { get; set; } + public string StackingPosition { get; set; } + public string PlanStartDate { get; set; } + public string UnitWorkName { get; set; } + } + public class PackagingPrepipeItem + { + public string PipelineComponentCode { get; set; } + public string PreUnit { get; set; } + public string UnitWorkName { get; set; } + + } + public class PackagingManageItem + { + public PackagingManageDetailItem packagingManageDetailItem { get; set; } + public List packagingPrepipeItems { get; set; } + } + +} diff --git a/SGGL/Model/HJGL/PrePipelineItem.cs b/SGGL/Model/HJGL/PrePipelineItem.cs new file mode 100644 index 00000000..bda96b14 --- /dev/null +++ b/SGGL/Model/HJGL/PrePipelineItem.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Model +{ + public class PrePipelineItem + { + } +} diff --git a/SGGL/Model/HJGL/sp_index_HJGLItem.cs b/SGGL/Model/HJGL/sp_index_HJGLItem.cs index fedebdbc..5febd6ce 100644 --- a/SGGL/Model/HJGL/sp_index_HJGLItem.cs +++ b/SGGL/Model/HJGL/sp_index_HJGLItem.cs @@ -49,6 +49,16 @@ namespace Model get; set; } + public string UnitName + { + get; + set; + } + public string UnitWorkName + { + get; + set; + } /// /// /// @@ -65,6 +75,26 @@ namespace Model get; set; } + public string MaterialCode + { + get; + set; + } + public string Specification + { + get; + set; + } + public string WeldTypeCode + { + get; + set; + } + public string JointAttribute + { + get; + set; + } /// /// /// @@ -81,5 +111,6 @@ namespace Model get; set; } + } } diff --git a/SGGL/Model/Model.csproj b/SGGL/Model/Model.csproj index 0a981a1b..b9e9474d 100644 --- a/SGGL/Model/Model.csproj +++ b/SGGL/Model/Model.csproj @@ -162,9 +162,11 @@ + + diff --git a/SGGL/WebAPI/Controllers/HJGL/PackagingManageController.cs b/SGGL/WebAPI/Controllers/HJGL/PackagingManageController.cs new file mode 100644 index 00000000..9e273dff --- /dev/null +++ b/SGGL/WebAPI/Controllers/HJGL/PackagingManageController.cs @@ -0,0 +1,32 @@ +using BLL; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Http; + +namespace WebAPI.Controllers.HJGL +{ + /// + /// + /// + public class PackagingManageController : ApiController + { + public Model.ResponeData getPackagingManagebyId(string PackagingManageId) + { + var responeData = new Model.ResponeData(); + try + { + responeData.data = from x in Funs.DB; + } + catch (Exception ex) + { + responeData.code = 0; + responeData.message = ex.Message; + } + + return responeData; + } + } +} \ No newline at end of file diff --git a/SGGL/WebAPI/WebAPI.csproj b/SGGL/WebAPI/WebAPI.csproj index 4b15f887..9324051f 100644 --- a/SGGL/WebAPI/WebAPI.csproj +++ b/SGGL/WebAPI/WebAPI.csproj @@ -169,6 +169,7 @@ +