CNCEC_SUBQHSE_WUHUAN/SGGL/BLL/ZHGL/DataSync/HJGLData_HJGLService.cs

483 lines
19 KiB
C#
Raw Normal View History

2022-12-26 14:34:56 +08:00
using FineUIPro;
using Model;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
2025-06-04 23:40:57 +08:00
using System.Threading.Tasks;
2022-12-26 14:34:56 +08:00
namespace BLL
{
public static class HJGLData_HJGLService
{
2023-08-10 11:40:02 +08:00
public static SGGLDB db = Funs.DB;
2025-06-04 23:40:57 +08:00
public static List<string> BeUnderConstructionList = ProjectService.GetProjectWorkList().Where(x => (x.ProjectAttribute == "GONGCHENG" || x.ProjectAttribute == null)).Select(x => x.ProjectId).ToList();
2022-12-26 14:34:56 +08:00
#region
/// <summary>
/// 记录数
/// </summary>
2023-08-10 11:40:02 +08:00
public static int count { get; set; }
2022-12-26 14:34:56 +08:00
2023-08-10 11:40:02 +08:00
public static List<HJGLData_HJGL> GetHJGLData_HJGLByModle(HJGLData_HJGL table)
2022-12-26 14:34:56 +08:00
{
2023-08-10 11:40:02 +08:00
var db = Funs.DB;
2022-12-26 14:34:56 +08:00
var q = from x in db.HJGLData_HJGL
where
2023-08-10 11:40:02 +08:00
(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))
2023-05-09 19:56:06 +08:00
orderby x.ReportDate descending
2022-12-26 14:34:56 +08:00
select x
2023-08-10 11:40:02 +08:00
;
2022-12-26 14:34:56 +08:00
return q.ToList();
}
/// 获取分页列表
/// </summary>
/// <param name="PageIndex">页码</param>
/// <param name="PageSize">每页数量</param>
/// <returns></returns>
2023-08-10 11:40:02 +08:00
public static IEnumerable getListData(HJGLData_HJGL table, Grid Grid1)
2022-12-26 14:34:56 +08:00
{
var q = GetHJGLData_HJGLByModle(table);
count = q.Count();
2023-08-10 11:40:02 +08:00
if (count == 0) return null;
2022-12-26 14:34:56 +08:00
// q = SortConditionHelper.SortingAndPaging(q, Grid1.SortField, Grid1.SortDirection, Grid1.PageIndex, Grid1.PageSize);
return from x in q
2025-06-04 23:40:57 +08:00
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
};
2022-12-26 14:34:56 +08:00
}
#endregion
2023-08-10 11:40:02 +08:00
public static void AddHJGLData_HJGL(HJGLData_HJGL newtable)
2022-12-26 14:34:56 +08:00
{
2024-12-24 19:04:32 +08:00
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
2022-12-26 14:34:56 +08:00
{
2024-12-24 19:04:32 +08:00
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();
2025-06-04 23:40:57 +08:00
}
2022-12-26 14:34:56 +08:00
}
public static void DeleteHJGLData_HJGLById(string Id)
{
2024-12-24 19:04:32 +08:00
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
2022-12-26 14:34:56 +08:00
{
2024-12-24 19:04:32 +08:00
var table = db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
if (table != null)
{
db.HJGLData_HJGL.DeleteOnSubmit(table);
db.SubmitChanges();
}
2022-12-26 14:34:56 +08:00
}
2025-06-04 23:40:57 +08:00
2022-12-26 14:34:56 +08:00
}
2023-08-10 11:40:02 +08:00
public static HJGLData_HJGL GetHJGLData_HJGLById(string Id)
2022-12-26 14:34:56 +08:00
{
2023-08-10 11:40:02 +08:00
var db = Funs.DB;
2022-12-26 14:34:56 +08:00
return db.HJGLData_HJGL.FirstOrDefault(x => x.Id == Id);
}
2023-08-10 11:40:02 +08:00
public static HJGLData GetItemById(string Id)
2022-12-26 14:34:56 +08:00
{
2023-08-10 11:40:02 +08:00
var item = new HJGLDataItem();
var data = new HJGLData();
2022-12-26 14:34:56 +08:00
var data_HJGL = GetHJGLData_HJGLById(Id);
if (data_HJGL != null)
{
2023-08-10 11:40:02 +08:00
var data_HJGL_detail = HJGLData_DefectService.GetHJGLData_DefectByDate(data_HJGL.ReportDate);
2022-12-26 14:34:56 +08:00
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)
{
2023-08-10 11:40:02 +08:00
var hjglDataDefectItem = new HJGLDataDefectItems();
2022-12-26 14:34:56 +08:00
hjglDataDefectItem.DefectNum = detail.DefectNum;
hjglDataDefectItem.DefectName = detail.DefectName;
hjglDataDefectItem.Id = detail.Id;
list.Add(hjglDataDefectItem);
}
2023-08-10 11:40:02 +08:00
2022-12-26 14:34:56 +08:00
item.HJGLDataDefectItems = list;
}
}
2023-08-10 11:40:02 +08:00
var hJGLDataItems = new List<HJGLDataItem>();
2022-12-26 14:34:56 +08:00
hJGLDataItems.Add(item);
data.HJGLDataItems = hJGLDataItems;
return data;
}
2024-12-24 19:04:32 +08:00
2025-06-04 23:40:57 +08:00
public static async Task<HJGLData> GetTodayHJGLData_HJGLAsync()
2023-08-10 11:40:02 +08:00
{
var data = new HJGLData();
2025-06-04 23:40:57 +08:00
/* var q = GetTodayData();
if (q != null && q.State == Const.CNCEC_State_S)
data = StatisticalData();
else
data = StatisticalData();*/
2023-08-10 11:40:02 +08:00
2025-06-04 23:40:57 +08:00
var modelTask = StatisticalDataAsync();
var model = await modelTask;
data = model;
2024-12-24 19:04:32 +08:00
return data;
}
2025-06-04 23:40:57 +08:00
2023-08-10 11:40:02 +08:00
public static HJGLData_HJGL GetTodayData()
2022-12-26 14:34:56 +08:00
{
var q = (from x in Funs.DB.HJGLData_HJGL
2025-06-04 23:40:57 +08:00
where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
select x).FirstOrDefault();
2022-12-26 14:34:56 +08:00
return q;
}
2024-12-24 19:04:32 +08:00
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)
2025-06-04 23:40:57 +08:00
select x).ToList();
2024-12-24 19:04:32 +08:00
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
};
2025-06-04 23:40:57 +08:00
return result;
2024-12-24 19:04:32 +08:00
}
2022-12-26 14:34:56 +08:00
public static void UpdateTodyData_State()
{
var q = GetTodayData();
2023-08-10 11:40:02 +08:00
if (q != null)
2022-12-26 14:34:56 +08:00
{
q.State = Const.CNCEC_State_1;
UpdateHJGLData_HJGL(q);
}
}
2023-08-10 11:40:02 +08:00
2022-12-26 14:34:56 +08:00
public static bool IsReportByDate(DateTime dateTime)
{
var result = false;
var q = (from x in Funs.DB.HJGLData_HJGL
2025-06-04 23:40:57 +08:00
where x.ReportDate >= dateTime.Date && x.ReportDate < dateTime.Date.AddDays(1).Date
select x).ToList();
2023-08-10 11:40:02 +08:00
if (q != null && q.Count > 0) result = true;
2022-12-26 14:34:56 +08:00
return result;
}
/// <summary>
/// 判断当天是否已上报
/// </summary>
/// <returns></returns>
public static bool IsReportByToday()
{
var result = false;
var q = (from x in Funs.DB.HJGLData_HJGL
2025-06-04 23:40:57 +08:00
where x.ReportDate < DateTime.Now.AddDays(1).Date && x.ReportDate >= DateTime.Now.Date
select x).ToList();
2023-08-10 11:40:02 +08:00
if (q.Count > 0) result = true;
2022-12-26 14:34:56 +08:00
return result;
}
2023-08-10 11:40:02 +08:00
public static ReturnData PushCncec(string Id)
2022-12-26 14:34:56 +08:00
{
2023-08-10 11:40:02 +08:00
var baseurl = "/api/HJGLData/SaveHJGLData";
2022-12-26 14:34:56 +08:00
var item = GetItemById(Id);
2023-08-10 11:40:02 +08:00
var str = JsonConvert.SerializeObject(item);
var responeData = ServerService.PushCNCEC(str, baseurl);
2022-12-26 14:34:56 +08:00
return responeData;
}
2025-06-04 23:40:57 +08:00
public static async Task<HJGLData> StatisticalDataAsync()
2022-12-26 14:34:56 +08:00
{
2023-08-10 11:40:02 +08:00
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();
2025-06-04 23:40:57 +08:00
// 并行执行异步方法
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;
2022-12-26 14:34:56 +08:00
2023-08-10 11:40:02 +08:00
var table = new HJGLData_HJGL
2022-12-26 14:34:56 +08:00
{
UnitId = thisUnitId,
2023-08-10 11:40:02 +08:00
CollCropCode = baseUnit.CollCropCode,
UnitName = baseUnit.UnitName,
2022-12-26 14:34:56 +08:00
ReportDate = DateTime.Now.Date,
2025-06-04 23:40:57 +08:00
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)),
2022-12-26 14:34:56 +08:00
CreateMan = Const.sysglyId,
2023-08-10 11:40:02 +08:00
CreateDate = DateTime.Now
2022-12-26 14:34:56 +08:00
};
2025-06-04 23:40:57 +08:00
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 = (decimal?)0, CompleteDineNum = (decimal?)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);
}
2022-12-26 14:34:56 +08:00
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);
}
2023-08-10 11:40:02 +08:00
var item = new HJGLDataItem();
2022-12-26 14:34:56 +08:00
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();
2023-08-10 11:40:02 +08:00
var hJGLDataItems = new List<HJGLDataItem>();
2022-12-26 14:34:56 +08:00
hJGLDataItems.Add(item);
data.HJGLDataItems = hJGLDataItems;
return data;
}
2023-08-10 11:40:02 +08:00
public static void UpdateHJGLData_HJGL(HJGLData_HJGL newtable)
2025-06-04 23:40:57 +08:00
{
2024-12-24 19:04:32 +08:00
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
2022-12-26 14:34:56 +08:00
{
2024-12-24 19:04:32 +08:00
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();
}
2025-06-04 23:40:57 +08:00
}
}
/// <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,
WEDName = x.WED_Name
//UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds),
}).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 IEnumerable<WeldDineOutput> GetDineInfo()
{
var result = (from x in Funs.DB.HJGL_FL_TotalQuantity
where BeUnderConstructionList.Contains(x.ProjectId)
group x by x.ProjectId into g
select new Model.WeldDineOutput()
{
ProjectId = g.Key,
Size = g.Sum(x => Convert.ToDecimal(!string.IsNullOrEmpty(x.TotalWeldQuantity) ? Convert.ToDecimal(x.TotalWeldQuantity) : 0)),
DoneDin = g.Sum(x => Convert.ToDecimal(!string.IsNullOrEmpty(x.TotalCompleted) ? Convert.ToDecimal(x.TotalCompleted) : 0))
});
return result;
}
public static async Task<IEnumerable<WeldDineOutput>> GetDineInfoAsync()
{
return await Task.Run(GetDineInfo);
}
/// <summary>
/// 获取焊接检查信息
/// </summary>
/// <returns></returns>
public static List<CHCheckItemOutput> GetCHCheckItem()
{
var result = (from x in Funs.DB.CH_CheckItem
join y in Funs.DB.CH_Check on x.CHT_CheckID equals y.CHT_CheckID
where BeUnderConstructionList.Contains(y.ProjectId)
select new Model.CHCheckItemOutput()
{
Id = x.CHT_CheckItemID,
ProjectId = y.ProjectId,
UnitId = y.UnitId,
CHT_TotalFilm = x.CHT_TotalFilm,
CHT_PassFilm = x.CHT_PassFilm
//UnitName = UnitService.getUnitNamesUnitIds(x.UnitIds),
}).ToList();
return result;
}
/// <summary>
/// 获取焊接检查信息(异步)
/// </summary>
/// <returns></returns>
public static async Task<List<CHCheckItemOutput>> GetCHCheckItemAsync()
{
return await Task.Run(GetCHCheckItem);
2022-12-26 14:34:56 +08:00
}
}
}