784 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			784 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C#
		
	
	
	
using Aspose.Words.Lists;
 | 
						|
using EmitMapper;
 | 
						|
using FineUIPro;
 | 
						|
using Model;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using NPOI.SS.Formula.Functions;
 | 
						|
using System;
 | 
						|
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace BLL
 | 
						|
{
 | 
						|
    public static class HJGLData_HJGLService
 | 
						|
    {
 | 
						|
        //public static SGGLDB db = Funs.DB;
 | 
						|
        public static List<string> BeUnderConstructionList = ProjectService.GetProjectWorkList().Where(x => (x.ProjectAttribute == "GONGCHENG" || x.ProjectAttribute == null)).Select(x => x.ProjectId).ToList();
 | 
						|
 | 
						|
        #region 获取列表
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 记录数
 | 
						|
        /// </summary>
 | 
						|
        public static int count { get; set; }
 | 
						|
 | 
						|
        public static List<HJGLData_HJGL> GetHJGLData_HJGLByModle(HJGLData_HJGL table)
 | 
						|
        {
 | 
						|
            var db = Funs.DB;
 | 
						|
            var q = from x in db.HJGLData_HJGL
 | 
						|
                    where
 | 
						|
                        (string.IsNullOrEmpty(table.Id) || x.Id.Contains(table.Id)) &&
 | 
						|
                        (string.IsNullOrEmpty(table.UnitId) || x.UnitId.Contains(table.UnitId)) &&
 | 
						|
                        (string.IsNullOrEmpty(table.CollCropCode) || x.CollCropCode.Contains(table.CollCropCode)) &&
 | 
						|
                        (string.IsNullOrEmpty(table.UnitName) || x.UnitName.Contains(table.UnitName))
 | 
						|
                    orderby x.ReportDate descending
 | 
						|
                    select x
 | 
						|
                ;
 | 
						|
 | 
						|
            return q.ToList();
 | 
						|
        }
 | 
						|
 | 
						|
        /// 获取分页列表
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="PageIndex">页码</param>
 | 
						|
        /// <param name="PageSize">每页数量</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static IEnumerable getListData(HJGLData_HJGL table, Grid Grid1)
 | 
						|
        {
 | 
						|
            var q = GetHJGLData_HJGLByModle(table);
 | 
						|
            count = q.Count();
 | 
						|
            if (count == 0) return null;
 | 
						|
            // q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
 | 
						|
            return from x in q
 | 
						|
                   select new
 | 
						|
                   {
 | 
						|
                       x.Id,
 | 
						|
                       x.UnitId,
 | 
						|
                       x.CollCropCode,
 | 
						|
                       x.UnitName,
 | 
						|
                       x.ReportDate,
 | 
						|
                       x.WelderNum,
 | 
						|
                       x.TotalDineNum,
 | 
						|
                       x.CompleteDineNum,
 | 
						|
                       x.TotalFilmNum,
 | 
						|
                       x.OKFilmNum,
 | 
						|
                       x.State,
 | 
						|
                       x.CreateDate,
 | 
						|
                       x.CreateMan
 | 
						|
                   };
 | 
						|
        }
 | 
						|
 | 
						|
        #endregion 获取列表
 | 
						|
 | 
						|
        public static void AddHJGLData_HJGL(HJGLData_HJGL newtable)
 | 
						|
        {
 | 
						|
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
            {
 | 
						|
                var table = new HJGLData_HJGL
 | 
						|
                {
 | 
						|
                    Id = newtable.Id,
 | 
						|
                    UnitId = newtable.UnitId,
 | 
						|
                    CollCropCode = newtable.CollCropCode,
 | 
						|
                    UnitName = newtable.UnitName,
 | 
						|
                    ReportDate = newtable.ReportDate,
 | 
						|
                    WelderNum = newtable.WelderNum,
 | 
						|
                    TotalDineNum = newtable.TotalDineNum,
 | 
						|
                    CompleteDineNum = newtable.CompleteDineNum,
 | 
						|
                    TotalFilmNum = newtable.TotalFilmNum,
 | 
						|
                    OKFilmNum = newtable.OKFilmNum,
 | 
						|
                    State = newtable.State,
 | 
						|
                    CreateDate = newtable.CreateDate,
 | 
						|
                    CreateMan = newtable.CreateMan
 | 
						|
                };
 | 
						|
                db.HJGLData_HJGL.InsertOnSubmit(table);
 | 
						|
                db.SubmitChanges();
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public static void DeleteHJGLData_HJGLById(string Id)
 | 
						|
        {
 | 
						|
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
            {
 | 
						|
                var table = db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
 | 
						|
                if (table != null)
 | 
						|
                {
 | 
						|
                    db.HJGLData_HJGL.DeleteOnSubmit(table);
 | 
						|
                    db.SubmitChanges();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        public static HJGLData_HJGL GetHJGLData_HJGLById(string Id)
 | 
						|
        {
 | 
						|
            var db = Funs.DB;
 | 
						|
            return db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
 | 
						|
        }
 | 
						|
 | 
						|
        public static HJGLData GetItemById(string Id)
 | 
						|
        {
 | 
						|
            var item = new HJGLDataItem();
 | 
						|
            var data = new HJGLData();
 | 
						|
            var data_HJGL = GetHJGLData_HJGLById(Id);
 | 
						|
            if (data_HJGL != null)
 | 
						|
            {
 | 
						|
                var data_HJGL_detail = HJGLData_DefectService.GetHJGLData_DefectByDate(data_HJGL.ReportDate);
 | 
						|
 | 
						|
                item.CollCropCode = data_HJGL.CollCropCode;
 | 
						|
                item.CompleteDineNum = data_HJGL.CompleteDineNum;
 | 
						|
                item.Id = data_HJGL.Id;
 | 
						|
                item.OKFilmNum = data_HJGL.OKFilmNum;
 | 
						|
                item.ReportDate = data_HJGL.ReportDate.Value.ToShortDateString();
 | 
						|
                item.TotalDineNum = data_HJGL.TotalDineNum;
 | 
						|
                item.TotalFilmNum = data_HJGL.TotalFilmNum;
 | 
						|
                item.UnitId = data_HJGL.UnitId;
 | 
						|
                item.WelderNum = data_HJGL.WelderNum;
 | 
						|
                var list = new List<HJGLDataDefectItems>();
 | 
						|
                if (data_HJGL_detail != null)
 | 
						|
                {
 | 
						|
                    foreach (var detail in data_HJGL_detail)
 | 
						|
                    {
 | 
						|
                        var hjglDataDefectItem = new HJGLDataDefectItems();
 | 
						|
                        hjglDataDefectItem.DefectNum = detail.DefectNum;
 | 
						|
                        hjglDataDefectItem.DefectName = detail.DefectName;
 | 
						|
                        hjglDataDefectItem.Id = detail.Id;
 | 
						|
                        list.Add(hjglDataDefectItem);
 | 
						|
                    }
 | 
						|
 | 
						|
                    item.HJGLDataDefectItems = list;
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            var hJGLDataItems = new List<HJGLDataItem>();
 | 
						|
            hJGLDataItems.Add(item);
 | 
						|
            data.HJGLDataItems = hJGLDataItems;
 | 
						|
            return data;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public static async Task<HJGLData> GetTodayHJGLData_HJGLAsync()
 | 
						|
        {
 | 
						|
            var data = new HJGLData();
 | 
						|
            /*  var q = GetTodayData();
 | 
						|
              if (q != null && q.State == Const.CNCEC_State_S)
 | 
						|
                  data = StatisticalData();
 | 
						|
              else
 | 
						|
                  data = StatisticalData();*/
 | 
						|
 | 
						|
            var modelTask = StatisticalDataAsync();
 | 
						|
            var model = await modelTask;
 | 
						|
            data = model;
 | 
						|
            return data;
 | 
						|
        }
 | 
						|
 | 
						|
        public static HJGLData_HJGL GetTodayData()
 | 
						|
        {
 | 
						|
            var q = (from x in Funs.DB.HJGLData_HJGL
 | 
						|
                     where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
 | 
						|
                     select x).FirstOrDefault();
 | 
						|
            return q;
 | 
						|
        }
 | 
						|
        public static HJGLData_HJGL GetSubUnitHjglDataByDate(string Unitid, DateTime? reportdate)
 | 
						|
        {
 | 
						|
            var result = new Model.HJGLData_HJGL();
 | 
						|
            if (reportdate == null)
 | 
						|
            {
 | 
						|
                return result;
 | 
						|
            }
 | 
						|
            var projectlist = BLL.ProjectService.GetProjectWorkList(Unitid);
 | 
						|
            var baseUnit = UnitService.GetUnitByUnitId(Unitid);
 | 
						|
            var ProjectData = (from x in Funs.DB.Project_HJGLData_HJGL
 | 
						|
                               where x.ReportDate == reportdate && projectlist.Select(e => e.ProjectId).Contains(x.ProjectId)
 | 
						|
                               select x).ToList();
 | 
						|
            result = new HJGLData_HJGL
 | 
						|
            {
 | 
						|
                UnitId = Unitid,
 | 
						|
                CollCropCode = baseUnit.CollCropCode,
 | 
						|
                UnitName = baseUnit.UnitName,
 | 
						|
                ReportDate = DateTime.Now.Date,
 | 
						|
                WelderNum = ProjectData.Sum(x => x.WelderNum),
 | 
						|
                TotalDineNum = ProjectData.Sum(x => x.TotalDineNum),
 | 
						|
                CompleteDineNum = ProjectData.Sum(x => x.CompleteDineNum),
 | 
						|
                TotalFilmNum = ProjectData.Sum(x => x.TotalFilmNum),
 | 
						|
                OKFilmNum = ProjectData.Sum(x => x.OKFilmNum),
 | 
						|
                CreateMan = Const.sysglyId,
 | 
						|
                CreateDate = DateTime.Now
 | 
						|
            };
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
        public static void UpdateTodyData_State()
 | 
						|
        {
 | 
						|
            var q = GetTodayData();
 | 
						|
            if (q != null)
 | 
						|
            {
 | 
						|
                q.State = Const.CNCEC_State_1;
 | 
						|
                UpdateHJGLData_HJGL(q);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        public static bool IsReportByDate(DateTime dateTime)
 | 
						|
        {
 | 
						|
            var result = false;
 | 
						|
            var q = (from x in Funs.DB.HJGLData_HJGL
 | 
						|
                     where x.ReportDate >= dateTime.Date && x.ReportDate < dateTime.Date.AddDays(1).Date
 | 
						|
                     select x).ToList();
 | 
						|
            if (q != null && q.Count > 0) result = true;
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 判断当天是否已上报
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static bool IsReportByToday()
 | 
						|
        {
 | 
						|
            var result = false;
 | 
						|
            var q = (from x in Funs.DB.HJGLData_HJGL
 | 
						|
                     where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
 | 
						|
                     select x).ToList();
 | 
						|
            if (q.Count > 0) result = true;
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        public static ReturnData PushCncec(string Id)
 | 
						|
        {
 | 
						|
            var baseurl = "/api/HJGLData/SaveHJGLData";
 | 
						|
            var item = GetItemById(Id);
 | 
						|
            var str = JsonConvert.SerializeObject(item);
 | 
						|
            var responeData = ServerService.PushCNCEC(str, baseurl);
 | 
						|
            return responeData;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public static HJGLData StatisticalData()
 | 
						|
        {
 | 
						|
            var data = new HJGLData();
 | 
						|
            var thisUnitId = string.Empty;
 | 
						|
            var thisUnit = CommonService.GetIsThisUnit();
 | 
						|
            if (thisUnit != null) thisUnitId = thisUnit.UnitId;
 | 
						|
            var baseUnit = UnitService.GetUnitByUnitId(thisUnitId);
 | 
						|
            var ProjectData = (from x in Funs.DB.Project_HJGLData_HJGL
 | 
						|
                               where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
 | 
						|
                               select x).ToList();
 | 
						|
            Project_HJGLData_HJGLService.StatisticalAllProjectData();
 | 
						|
            Project_HJGLData_DefectService.StatisticalAllProjectData();
 | 
						|
 | 
						|
            var table = new HJGLData_HJGL
 | 
						|
            {
 | 
						|
                UnitId = thisUnitId,
 | 
						|
                CollCropCode = baseUnit.CollCropCode,
 | 
						|
                UnitName = baseUnit.UnitName,
 | 
						|
                ReportDate = DateTime.Now.Date,
 | 
						|
                WelderNum = ProjectData.Sum(x => x.WelderNum),
 | 
						|
                TotalDineNum = ProjectData.Sum(x => x.TotalDineNum),
 | 
						|
                CompleteDineNum = ProjectData.Sum(x => x.CompleteDineNum),
 | 
						|
                TotalFilmNum = ProjectData.Sum(x => x.TotalFilmNum),
 | 
						|
                OKFilmNum = ProjectData.Sum(x => x.OKFilmNum),
 | 
						|
                CreateMan = Const.sysglyId,
 | 
						|
                CreateDate = DateTime.Now
 | 
						|
            };
 | 
						|
            if (IsReportByToday())
 | 
						|
            {
 | 
						|
                table.Id = GetTodayData().Id;
 | 
						|
                table.State = Const.CNCEC_State_1;
 | 
						|
                UpdateHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                table.Id = SQLHelper.GetNewID();
 | 
						|
                table.State = Const.CNCEC_State_0;
 | 
						|
 | 
						|
                AddHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
 | 
						|
            var item = new HJGLDataItem();
 | 
						|
            item.CollCropCode = table.CollCropCode;
 | 
						|
            item.CompleteDineNum = table.CompleteDineNum;
 | 
						|
            item.Id = table.Id;
 | 
						|
            item.OKFilmNum = table.OKFilmNum;
 | 
						|
            item.ReportDate = table.ReportDate.Value.ToShortDateString();
 | 
						|
            item.TotalDineNum = table.TotalDineNum;
 | 
						|
            item.TotalFilmNum = table.TotalFilmNum;
 | 
						|
            item.UnitId = table.UnitId;
 | 
						|
            item.WelderNum = table.WelderNum;
 | 
						|
            item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
 | 
						|
            var hJGLDataItems = new List<HJGLDataItem>();
 | 
						|
            hJGLDataItems.Add(item);
 | 
						|
 | 
						|
            data.HJGLDataItems = hJGLDataItems;
 | 
						|
            return data;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        public static async Task<HJGLData> StatisticalDataAsync()
 | 
						|
        {
 | 
						|
            var data = new HJGLData();
 | 
						|
            var thisUnitId = string.Empty;
 | 
						|
            var thisUnit = CommonService.GetIsThisUnit();
 | 
						|
            if (thisUnit != null) thisUnitId = thisUnit.UnitId;
 | 
						|
            var baseUnit = UnitService.GetUnitByUnitId(thisUnitId);
 | 
						|
 | 
						|
            Project_HJGLData_DefectService.StatisticalAllProjectData();
 | 
						|
 | 
						|
            //// 并行执行异步方法
 | 
						|
            var welderNumTask = HJGLData_HJGLService.GetWelderNumAsync(); //获取焊工总数
 | 
						|
            var dineInfoListTask = HJGLData_HJGLService.GetDineInfoAsync(); //获达因数信息
 | 
						|
            var chCheckItemListTask = HJGLData_HJGLService.GetCHCheckItemAsync(); //获取焊接检查信息
 | 
						|
 | 
						|
            // 等待所有异步方法执行完成
 | 
						|
            await Task.WhenAll(
 | 
						|
                welderNumTask,
 | 
						|
                dineInfoListTask,
 | 
						|
                chCheckItemListTask
 | 
						|
            );
 | 
						|
 | 
						|
            // 统一获取异步方法的返回值
 | 
						|
            var welderNum = await welderNumTask;
 | 
						|
            var dineInfoList = await dineInfoListTask;
 | 
						|
            var chCheckItemList = await chCheckItemListTask;
 | 
						|
 | 
						|
 | 
						|
            var table = new HJGLData_HJGL
 | 
						|
            {
 | 
						|
                UnitId = thisUnitId,
 | 
						|
                CollCropCode = baseUnit.CollCropCode,
 | 
						|
                UnitName = baseUnit.UnitName,
 | 
						|
                ReportDate = DateTime.Now.Date,
 | 
						|
                WelderNum = welderNum.Count(),
 | 
						|
                TotalDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.Size)),
 | 
						|
                CompleteDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.DoneDin)),
 | 
						|
                TotalFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_TotalFilm)),
 | 
						|
                OKFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_PassFilm)),
 | 
						|
                CreateMan = Const.sysglyId,
 | 
						|
                CreateDate = DateTime.Now
 | 
						|
            };
 | 
						|
            Project_HJGLData_HJGLService.DeleteProject_HJGLData_HJGLByDate(DateTime.Now.Date);
 | 
						|
            // 预先对 dineInfoList 和 chCheckItemList 按 ProjectId 进行分组
 | 
						|
            var dineInfoDict = dineInfoList
 | 
						|
                .Where(x => BeUnderConstructionList.Contains(x.ProjectId))
 | 
						|
                .GroupBy(x => x.ProjectId)
 | 
						|
                .ToDictionary(g => g.Key, g => new
 | 
						|
                {
 | 
						|
                    TotalDineNum = g.Sum(x => x.Size),
 | 
						|
                    CompleteDineNum = g.Sum(x => x.DoneDin)
 | 
						|
                });
 | 
						|
 | 
						|
            var chCheckItemDict = chCheckItemList
 | 
						|
                .Where(x => BeUnderConstructionList.Contains(x.ProjectId))
 | 
						|
                .GroupBy(x => x.ProjectId)
 | 
						|
                .ToDictionary(g => g.Key, g => new
 | 
						|
                {
 | 
						|
                    TotalFilmNum = g.Sum(x => x.CHT_TotalFilm),
 | 
						|
                    OKFilmNum = g.Sum(x => x.CHT_PassFilm)
 | 
						|
                });
 | 
						|
 | 
						|
            foreach (var projectid in BeUnderConstructionList)
 | 
						|
            {
 | 
						|
                // 获取焊工数量
 | 
						|
                int welderCount = welderNum.Count(x => x.ProjectId == projectid);
 | 
						|
 | 
						|
                // 获取达因信息
 | 
						|
                var dineInfo = dineInfoDict.TryGetValue(projectid, out var dineData)
 | 
						|
                    ? dineData
 | 
						|
                    : new { TotalDineNum = (double?)0, CompleteDineNum = (double?)0 };
 | 
						|
 | 
						|
                // 获取拍片信息
 | 
						|
                var chCheckItem = chCheckItemDict.TryGetValue(projectid, out var checkData)
 | 
						|
                    ? checkData
 | 
						|
                    : new { TotalFilmNum = (int?)0, OKFilmNum = (int?)0 };
 | 
						|
 | 
						|
                var projectCqmsData = new Project_HJGLData_HJGL()
 | 
						|
                {
 | 
						|
                    Id = SQLHelper.GetNewID(),
 | 
						|
                    ProjectId = projectid,
 | 
						|
                    UnitId = thisUnitId,
 | 
						|
                    CollCropCode = baseUnit.CollCropCode,
 | 
						|
                    UnitName = baseUnit.UnitName,
 | 
						|
                    ReportDate = DateTime.Now.Date,
 | 
						|
                    WelderNum = welderCount,
 | 
						|
                    TotalDineNum = Convert.ToInt32(dineInfo.TotalDineNum),
 | 
						|
                    CompleteDineNum = Convert.ToInt32(dineInfo.CompleteDineNum),
 | 
						|
                    TotalFilmNum = chCheckItem.TotalFilmNum,
 | 
						|
                    OKFilmNum = chCheckItem.OKFilmNum,
 | 
						|
                };
 | 
						|
 | 
						|
                Project_HJGLData_HJGLService.AddProject_HJGLData_HJGL(projectCqmsData);
 | 
						|
            }
 | 
						|
 | 
						|
 | 
						|
            if (IsReportByToday())
 | 
						|
            {
 | 
						|
                table.Id = GetTodayData().Id;
 | 
						|
                table.State = Const.CNCEC_State_1;
 | 
						|
                UpdateHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                table.Id = SQLHelper.GetNewID();
 | 
						|
                table.State = Const.CNCEC_State_0;
 | 
						|
 | 
						|
                AddHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
            var mapper = ObjectMapperManager.DefaultInstance.GetMapper<HJGLData_HJGL, HJGLDataItem>();
 | 
						|
            var item = mapper.Map(table);
 | 
						|
            // 手动处理特殊字段
 | 
						|
            item.ReportDate = table.ReportDate.Value.ToShortDateString();
 | 
						|
            item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
 | 
						|
            var hJGLDataItems = new List<HJGLDataItem>();
 | 
						|
            hJGLDataItems.Add(item);
 | 
						|
 | 
						|
            data.HJGLDataItems = hJGLDataItems;
 | 
						|
            return data;
 | 
						|
 | 
						|
            //var item = new HJGLDataItem();
 | 
						|
            //item.CollCropCode = table.CollCropCode;
 | 
						|
            //item.CompleteDineNum = table.CompleteDineNum;
 | 
						|
            //item.Id = table.Id;
 | 
						|
            //item.OKFilmNum = table.OKFilmNum;
 | 
						|
            //item.ReportDate = table.ReportDate.Value.ToShortDateString();
 | 
						|
            //item.TotalDineNum = table.TotalDineNum;
 | 
						|
            //item.TotalFilmNum = table.TotalFilmNum;
 | 
						|
            //item.UnitId = table.UnitId;
 | 
						|
            //item.WelderNum = table.WelderNum;
 | 
						|
            //item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
 | 
						|
            //var hJGLDataItems = new List<HJGLDataItem>();
 | 
						|
            //hJGLDataItems.Add(item);
 | 
						|
 | 
						|
            //data.HJGLDataItems = hJGLDataItems;
 | 
						|
            //return data;
 | 
						|
        }
 | 
						|
 | 
						|
        public static async Task<HJGLData> StatisticalDataAsyncold()
 | 
						|
        {
 | 
						|
            var data = new HJGLData();
 | 
						|
            var thisUnitId = string.Empty;
 | 
						|
            var thisUnit = CommonService.GetIsThisUnit();
 | 
						|
            if (thisUnit != null) thisUnitId = thisUnit.UnitId;
 | 
						|
            var baseUnit = UnitService.GetUnitByUnitId(thisUnitId);
 | 
						|
 | 
						|
            Project_HJGLData_HJGLService.StatisticalAllProjectData();
 | 
						|
            Project_HJGLData_DefectService.StatisticalAllProjectData();
 | 
						|
            // 并行执行异步方法
 | 
						|
            var projectHJGLDataListTask = HJGLData_HJGLService.GetProjectHJGLDataAsync(); //获取焊接检查信息
 | 
						|
 | 
						|
            //// 并行执行异步方法
 | 
						|
            //var welderNumTask = HJGLData_HJGLService.GetWelderNumAsync(); //获取焊工总数
 | 
						|
            //var dineInfoListTask = HJGLData_HJGLService.GetDineInfoAsync(); //获达因数信息
 | 
						|
            var chCheckItemListTask = HJGLData_HJGLService.GetCHCheckItemAsync(); //获取焊接检查信息
 | 
						|
 | 
						|
            // 等待所有异步方法执行完成
 | 
						|
            await Task.WhenAll(
 | 
						|
                projectHJGLDataListTask,
 | 
						|
                //welderNumTask,
 | 
						|
                //dineInfoListTask,
 | 
						|
                chCheckItemListTask
 | 
						|
            );
 | 
						|
 | 
						|
            // 统一获取异步方法的返回值
 | 
						|
            var projectHJGLDataList = await projectHJGLDataListTask;
 | 
						|
            //var welderNum = await welderNumTask;
 | 
						|
            //var dineInfoList = await dineInfoListTask;
 | 
						|
            var chCheckItemList = await chCheckItemListTask;
 | 
						|
 | 
						|
 | 
						|
            var table = new HJGLData_HJGL
 | 
						|
            {
 | 
						|
                UnitId = thisUnitId,
 | 
						|
                CollCropCode = baseUnit.CollCropCode,
 | 
						|
                UnitName = baseUnit.UnitName,
 | 
						|
                ReportDate = DateTime.Now.Date,
 | 
						|
                WelderNum = projectHJGLDataList.Sum(x => x.WelderNum),
 | 
						|
                TotalDineNum = projectHJGLDataList.Sum(x => x.TotalDineNum),
 | 
						|
                CompleteDineNum = projectHJGLDataList.Sum(x => x.CompleteDineNum),
 | 
						|
                //TotalFilmNum = projectHJGLDataList.Sum(x => x.TotalFilmNum),
 | 
						|
                //OKFilmNum = projectHJGLDataList.Sum(x => x.OKFilmNum),
 | 
						|
                //WelderNum = welderNum.Count(),
 | 
						|
                //TotalDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.Size)),
 | 
						|
                //CompleteDineNum = Convert.ToInt32(dineInfoList.Sum(x => x.DoneDin)),
 | 
						|
                TotalFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_TotalFilm)),
 | 
						|
                OKFilmNum = Convert.ToInt32(chCheckItemList.Sum(x => x.CHT_PassFilm)),
 | 
						|
                CreateMan = Const.sysglyId,
 | 
						|
                CreateDate = DateTime.Now
 | 
						|
            };
 | 
						|
            //Project_HJGLData_HJGLService.DeleteProject_HJGLData_HJGLByDate(DateTime.Now.Date);
 | 
						|
            //// 预先对 dineInfoList 和 chCheckItemList 按 ProjectId 进行分组
 | 
						|
            //var dineInfoDict = dineInfoList
 | 
						|
            //    .Where(x => BeUnderConstructionList.Contains(x.ProjectId))
 | 
						|
            //    .GroupBy(x => x.ProjectId)
 | 
						|
            //    .ToDictionary(g => g.Key, g => new
 | 
						|
            //    {
 | 
						|
            //        TotalDineNum = g.Sum(x => x.Size),
 | 
						|
            //        CompleteDineNum = g.Sum(x => x.DoneDin)
 | 
						|
            //    });
 | 
						|
 | 
						|
            //var chCheckItemDict = chCheckItemList
 | 
						|
            //    .Where(x => BeUnderConstructionList.Contains(x.ProjectId))
 | 
						|
            //    .GroupBy(x => x.ProjectId)
 | 
						|
            //    .ToDictionary(g => g.Key, g => new
 | 
						|
            //    {
 | 
						|
            //        TotalFilmNum = g.Sum(x => x.CHT_TotalFilm),
 | 
						|
            //        OKFilmNum = g.Sum(x => x.CHT_PassFilm)
 | 
						|
            //    });
 | 
						|
 | 
						|
            //foreach (var projectid in BeUnderConstructionList)
 | 
						|
            //{
 | 
						|
            //    // 获取焊工数量
 | 
						|
            //    int welderCount = welderNum.Count(x => x.ProjectId == projectid);
 | 
						|
 | 
						|
            //    // 获取达因信息
 | 
						|
            //    var dineInfo = dineInfoDict.TryGetValue(projectid, out var dineData)
 | 
						|
            //        ? dineData
 | 
						|
            //        : new { TotalDineNum = (double?)0, CompleteDineNum = (double?)0 };
 | 
						|
 | 
						|
            //    // 获取拍片信息
 | 
						|
            //    var chCheckItem = chCheckItemDict.TryGetValue(projectid, out var checkData)
 | 
						|
            //        ? checkData
 | 
						|
            //        : new { TotalFilmNum = (int?)0, OKFilmNum = (int?)0 };
 | 
						|
 | 
						|
            //    var projectCqmsData = new Project_HJGLData_HJGL()
 | 
						|
            //    {
 | 
						|
            //        Id = SQLHelper.GetNewID(),
 | 
						|
            //        ProjectId = projectid,
 | 
						|
            //        UnitId = thisUnitId,
 | 
						|
            //        CollCropCode = baseUnit.CollCropCode,
 | 
						|
            //        UnitName = baseUnit.UnitName,
 | 
						|
            //        ReportDate = DateTime.Now.Date,
 | 
						|
            //        WelderNum = welderCount,
 | 
						|
            //        TotalDineNum = Convert.ToInt32(dineInfo.TotalDineNum),
 | 
						|
            //        CompleteDineNum = Convert.ToInt32(dineInfo.CompleteDineNum),
 | 
						|
            //        TotalFilmNum = chCheckItem.TotalFilmNum,
 | 
						|
            //        OKFilmNum = chCheckItem.OKFilmNum,
 | 
						|
            //    };
 | 
						|
 | 
						|
            //    Project_HJGLData_HJGLService.AddProject_HJGLData_HJGL(projectCqmsData);
 | 
						|
            //}
 | 
						|
 | 
						|
 | 
						|
            if (IsReportByToday())
 | 
						|
            {
 | 
						|
                table.Id = GetTodayData().Id;
 | 
						|
                table.State = Const.CNCEC_State_1;
 | 
						|
                UpdateHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                table.Id = SQLHelper.GetNewID();
 | 
						|
                table.State = Const.CNCEC_State_0;
 | 
						|
 | 
						|
                AddHJGLData_HJGL(table);
 | 
						|
            }
 | 
						|
 | 
						|
            var item = new HJGLDataItem();
 | 
						|
            item.CollCropCode = table.CollCropCode;
 | 
						|
            item.CompleteDineNum = table.CompleteDineNum;
 | 
						|
            item.Id = table.Id;
 | 
						|
            item.OKFilmNum = table.OKFilmNum;
 | 
						|
            item.ReportDate = table.ReportDate.Value.ToShortDateString();
 | 
						|
            item.TotalDineNum = table.TotalDineNum;
 | 
						|
            item.TotalFilmNum = table.TotalFilmNum;
 | 
						|
            item.UnitId = table.UnitId;
 | 
						|
            item.WelderNum = table.WelderNum;
 | 
						|
            item.HJGLDataDefectItems = Project_HJGLData_DefectService.getTodayProject_HJGLData_Defect();
 | 
						|
            var hJGLDataItems = new List<HJGLDataItem>();
 | 
						|
            hJGLDataItems.Add(item);
 | 
						|
 | 
						|
            data.HJGLDataItems = hJGLDataItems;
 | 
						|
            return data;
 | 
						|
        }
 | 
						|
 | 
						|
        public static void UpdateHJGLData_HJGL(HJGLData_HJGL newtable)
 | 
						|
        {
 | 
						|
            using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
 | 
						|
            {
 | 
						|
                var table = db.HJGLData_HJGL.FirstOrDefault(x => x.Id == newtable.Id);
 | 
						|
                if (table != null)
 | 
						|
                {
 | 
						|
                    table.Id = newtable.Id;
 | 
						|
                    table.UnitId = newtable.UnitId;
 | 
						|
                    table.CollCropCode = newtable.CollCropCode;
 | 
						|
                    table.UnitName = newtable.UnitName;
 | 
						|
                    table.ReportDate = newtable.ReportDate;
 | 
						|
                    table.WelderNum = newtable.WelderNum;
 | 
						|
                    table.TotalDineNum = newtable.TotalDineNum;
 | 
						|
                    table.CompleteDineNum = newtable.CompleteDineNum;
 | 
						|
                    table.TotalFilmNum = newtable.TotalFilmNum;
 | 
						|
                    table.OKFilmNum = newtable.OKFilmNum;
 | 
						|
                    table.State = newtable.State;
 | 
						|
                    table.CreateMan = newtable.CreateMan;
 | 
						|
                    table.CreateDate = newtable.CreateDate;
 | 
						|
                    db.SubmitChanges();
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取焊工总数
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static List<WelderOutput> GetWelderNum()
 | 
						|
        {
 | 
						|
            var result = (from x in Funs.DB.BS_Welder
 | 
						|
                          where BeUnderConstructionList.Contains(x.ProjectId) && x.WED_IfOnGuard == true
 | 
						|
                          select new Model.WelderOutput()
 | 
						|
                          {
 | 
						|
                              ProjectId = x.ProjectId,
 | 
						|
                              UnitId = x.WED_Unit,
 | 
						|
                              WEDCode = x.WED_Code,
 | 
						|
                              WEDWorkCode = x.WED_WorkCode,
 | 
						|
                              WEDName = x.WED_Name
 | 
						|
                              //UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds),
 | 
						|
                          })
 | 
						|
                          .GroupBy(p => p.WEDWorkCode)
 | 
						|
                         .Select(g => g.First())
 | 
						|
                         .ToList();
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 获取焊工总数(异步)
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static async Task<List<WelderOutput>> GetWelderNumAsync()
 | 
						|
        {
 | 
						|
            return await Task.Run(GetWelderNum);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取总达因数和完成达因数
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static List<WeldDineOutput> GetDineInfo()
 | 
						|
        {
 | 
						|
            var result = new List<WeldDineOutput>();
 | 
						|
            var getD1 = from x in Funs.DB.HJGL_FL_TotalQuantity
 | 
						|
                        where BeUnderConstructionList.Contains(x.ProjectId)
 | 
						|
                        select x;
 | 
						|
            var projectIds = getD1.Select(x => x.ProjectId).Distinct();
 | 
						|
            foreach (var pro in projectIds)
 | 
						|
            {
 | 
						|
                double pTotalWeldQuantity = 0;
 | 
						|
                double pTotalCompleted = 0;
 | 
						|
                var proD1 = getD1.Where(x => x.ProjectId == pro);
 | 
						|
                foreach (var item in getD1)
 | 
						|
                {
 | 
						|
                    var dAll = !string.IsNullOrWhiteSpace(item.TotalWeldQuantity) ? Convert.ToDouble(item.TotalWeldQuantity) : 0;
 | 
						|
                    var dCompleted = !string.IsNullOrWhiteSpace(item.TotalCompleted) ? Convert.ToDouble(item.TotalCompleted) : 0;
 | 
						|
                    pTotalWeldQuantity += dAll;
 | 
						|
                    pTotalCompleted += dCompleted;
 | 
						|
                }
 | 
						|
                result.Add(new WeldDineOutput
 | 
						|
                {
 | 
						|
                    ProjectId = pro,
 | 
						|
                    Size = pTotalWeldQuantity,
 | 
						|
                    DoneDin = pTotalCompleted
 | 
						|
                });
 | 
						|
            }
 | 
						|
 | 
						|
            var differenceProjectIds = BeUnderConstructionList.Except(projectIds).ToList();
 | 
						|
            foreach (var pro in differenceProjectIds)
 | 
						|
            {
 | 
						|
                double pTotalWeldQuantity = 0;
 | 
						|
                double pTotalCompleted = 0;
 | 
						|
 | 
						|
                var getD2 = (from x in Funs.DB.HJGL_FL_Data
 | 
						|
                             where x.ProjectId == pro
 | 
						|
                             orderby x.CompileDate descending
 | 
						|
                             select x).FirstOrDefault();
 | 
						|
                if (getD2 != null)
 | 
						|
                {
 | 
						|
                    pTotalWeldQuantity = !string.IsNullOrWhiteSpace(getD2.TotalWeldQuantity) ? Convert.ToDouble(getD2.TotalWeldQuantity) : 0;
 | 
						|
                    pTotalCompleted = !string.IsNullOrWhiteSpace(getD2.TotalCompleted) ? Convert.ToDouble(getD2.TotalCompleted) : 0;
 | 
						|
                }
 | 
						|
 | 
						|
                result.Add(new WeldDineOutput
 | 
						|
                {
 | 
						|
                    ProjectId = pro,
 | 
						|
                    Size = pTotalWeldQuantity,
 | 
						|
                    DoneDin = pTotalCompleted
 | 
						|
                });
 | 
						|
            }
 | 
						|
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取总达因数和完成达因数
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static async Task<List<WeldDineOutput>> GetDineInfoAsync()
 | 
						|
        {
 | 
						|
            return await Task.Run(GetDineInfo);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取焊接检查信息
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static List<CHCheckItemOutput> GetCHCheckItem()
 | 
						|
        {
 | 
						|
            List<CHCheckItemOutput> list = new List<CHCheckItemOutput>();
 | 
						|
            var ndtLists = (from x in Funs.DB.ProcessControl_NondestructiveTest_New where BeUnderConstructionList.Contains(x.ProjectId) select x).ToList();
 | 
						|
 | 
						|
            if (ndtLists.Count() > 0)
 | 
						|
            {
 | 
						|
                //取每个项目、单位、专业最新的一条数据
 | 
						|
                var datalist = ndtLists.GroupBy(r => new { r.ProjectId, r.UnitId, r.ProfessionalName }).Select(g => g.OrderByDescending(r => r.CreateDate).First()).ToList();
 | 
						|
                foreach (var project in BeUnderConstructionList)
 | 
						|
                {
 | 
						|
                    decimal a = 0, b = 0;
 | 
						|
                    var projectDataList = datalist.Where(x => x.ProjectId == project);
 | 
						|
                    foreach (var item in projectDataList)
 | 
						|
                    {
 | 
						|
                        if (item.TotalQuantity.HasValue)
 | 
						|
                        {
 | 
						|
                            a += Math.Floor(item.TotalQuantity.Value * Funs.GetNewDecimalOrZero(item.TotalRate) / 100);
 | 
						|
                            b += item.TotalQuantity.Value;
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    list.Add(new CHCheckItemOutput
 | 
						|
                    {
 | 
						|
                        Id = project,
 | 
						|
                        ProjectId = project,
 | 
						|
                        //UnitId = y.UnitId,
 | 
						|
                        CHT_TotalFilm = (int)Math.Round(b),
 | 
						|
                        CHT_PassFilm = (int)Math.Round(a)
 | 
						|
                    });
 | 
						|
                }
 | 
						|
            }
 | 
						|
 | 
						|
            return list;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 获取焊接检查信息(异步)
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static async Task<List<CHCheckItemOutput>> GetCHCheckItemAsync()
 | 
						|
        {
 | 
						|
            return await Task.Run(GetCHCheckItem);
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 获取项目焊接信息
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static List<Project_HJGLData_HJGL> GetProjectHJGLData()
 | 
						|
        {
 | 
						|
            var result = (from x in Funs.DB.Project_HJGLData_HJGL
 | 
						|
                          where BeUnderConstructionList.Contains(x.ProjectId) && x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
 | 
						|
                          select x).ToList();
 | 
						|
            return result;
 | 
						|
        }
 | 
						|
        /// <summary>
 | 
						|
        /// 获取项目焊接信息(异步)
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
        public static async Task<List<Project_HJGLData_HJGL>> GetProjectHJGLDataAsync()
 | 
						|
        {
 | 
						|
            return await Task.Run(GetProjectHJGLData);
 | 
						|
        }
 | 
						|
    }
 | 
						|
} |