Files
shgx_tz_mes_backend_sync/ZR.Service/mes/qc/gp12/QcGp12ServiceStatisticsService.cs

237 lines
9.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Linq;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using Newtonsoft.Json;
using SqlSugar;
using ZR.Model;
using ZR.Model.Business;
using ZR.Model.Dto;
using ZR.Repository;
using ZR.Service.Business.IBusinessService;
namespace ZR.Service.Business
{
/// <summary>
/// 质量GP12统计报表业务模块Service业务层处理
/// </summary>
[AppService(
ServiceType = typeof(IQcGp12ServiceStatisticsService),
ServiceLifetime = LifeTime.Transient
)]
public class QcGp12ServiceStatisticsService
: BaseService<QcGp12ServiceStatistics>,
IQcGp12ServiceStatisticsService
{
/// <summary>
/// 查询质量GP12统计报表业务模块列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<QcGp12ServiceStatisticsDto> GetList(QcGp12ServiceStatisticsQueryDto parm)
{
var predicate = Expressionable.Create<QcGp12ServiceStatistics>();
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<QcGp12ServiceStatistics, QcGp12ServiceStatisticsDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public QcGp12ServiceStatistics GetInfo(string Id)
{
var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
/// <summary>
/// 添加质量GP12统计报表业务模块
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public QcGp12ServiceStatistics AddQcGp12ServiceStatistics(QcGp12ServiceStatistics model)
{
return Context.Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改质量GP12统计报表业务模块
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateQcGp12ServiceStatistics(QcGp12ServiceStatistics model)
{
//var response = Update(w => w.Id == model.Id, it => new QcGp12ServiceStatistics()
//{
// WorkOrder = model.WorkOrder,
// PartNumber = model.PartNumber,
// Description = model.Description,
// Specification = model.Specification,
// Color = model.Color,
// Team = model.Team,
// SiteNo = model.SiteNo,
// ComNo = model.ComNo,
// IsOnetime = model.IsOnetime,
// IsBack = model.IsBack,
// IsPolish = model.IsPolish,
// IsOut = model.IsOut,
// StartTime = model.StartTime,
// EndTime = model.EndTime,
// Label = model.Label,
// RequireNumber = model.RequireNumber,
// QualifiedNumber = model.QualifiedNumber,
// QualifiedRate = model.QualifiedRate,
// DamoNumber = model.DamoNumber,
// BaofeiNumber = model.BaofeiNumber,
// GroupCode = model.GroupCode,
// GroupSort = model.GroupSort,
// GroupDefectJson = model.GroupDefectJson,
// Type = model.Type,
// Status = model.Status,
// Remark = model.Remark,
// CreatedBy = model.CreatedBy,
// CreatedTime = model.CreatedTime,
// UpdatedBy = model.UpdatedBy,
// UpdatedTime = model.UpdatedTime,
//});
//return response;
return Update(model, true);
}
public List<QcGp12ServiceStatisticsDto> GetReviseList(QcGp12ServiceStatisticsQueryDto parm)
{
const string ActiveStatus = "1";
var predicate = Expressionable
.Create<QcGp12ServiceStatistics>()
.AndIF(
!string.IsNullOrEmpty(parm.WorkOrder),
x => SqlFunc.Like(x.WorkOrder, parm.WorkOrder + "%")
)
.AndIF(
!string.IsNullOrEmpty(parm.PartNumber),
x => SqlFunc.Like(x.PartNumber, parm.PartNumber + "%")
)
.AndIF(
!string.IsNullOrEmpty(parm.Description),
x => SqlFunc.Like(x.Description, parm.Description + "%")
)
.AndIF(!string.IsNullOrEmpty(parm.Team), x => x.Team == parm.Team)
.AndIF(!string.IsNullOrEmpty(parm.SiteNo), x => x.SiteNo == parm.SiteNo)
.AndIF(!string.IsNullOrEmpty(parm.ComNo), x => x.ComNo == parm.ComNo)
.AndIF(parm.IsOnetime.HasValue, x => x.IsOnetime == parm.IsOnetime.Value)
.AndIF(parm.IsBack.HasValue, x => x.IsBack == parm.IsBack.Value)
.AndIF(parm.IsPolish.HasValue, x => x.IsPolish == parm.IsPolish.Value)
.AndIF(parm.IsOut.HasValue, x => x.IsOut == parm.IsOut.Value)
.AndIF(
parm.StartTime.HasValue && parm.EndTime.HasValue,
x => x.StartTime >= parm.StartTime.Value && x.StartTime <= parm.EndTime.Value
)
.And(x => x.Status == ActiveStatus)
.ToExpression();
// 预处理排序条件
var query = Context.Queryable<QcGp12ServiceStatistics>().Where(predicate);
switch (parm.StatisticsOrderType)
{
case 1:
query = query.OrderBy(it => it.WorkOrder);
break;
case 2:
query = query.OrderBy(it => it.PartNumber);
break;
case 3:
query = query.OrderBy(it => it.QualifiedRate, OrderByType.Desc);
break;
case 4:
query = query.OrderBy(it => it.StartTime);
break;
}
query = query.OrderBy(it => it.GroupCode).OrderBy(it => it.GroupSort);
var result = query.ToList();
// 将 defectList 转换为字典以优化查找
var defectList = Context.Queryable<QcGp12BaseDefect>().ToList();
var defectDict = defectList.ToDictionary(d => d.Code, d => d);
var resultList = new List<QcGp12ServiceStatisticsDto>();
foreach (var item in result)
{
var dto = new QcGp12ServiceStatisticsDto
{
Id = item.Id,
WorkOrder = item.WorkOrder,
PartNumber = item.PartNumber,
Description = item.Description,
Specification = item.Specification,
Color = item.Color,
Team = item.Team,
SiteNo = item.SiteNo,
ComNo = item.ComNo,
IsOnetime = item.IsOnetime,
IsBack = item.IsBack,
IsPolish = item.IsPolish,
IsOut = item.IsOut,
StartTime = item.StartTime,
EndTime = item.EndTime,
Label = item.Label,
RequireNumber = item.RequireNumber,
QualifiedNumber = item.QualifiedNumber,
QualifiedRate = item.QualifiedRate,
PolishNumber = item.PolishNumber,
DamoNumber = item.DamoNumber,
BaofeiNumber = item.BaofeiNumber,
GroupCode = item.GroupCode,
GroupSort = item.GroupSort,
GroupDefectJson = item.GroupDefectJson,
Type = item.Type,
Status = item.Status,
Remark = item.Remark,
CreatedBy = item.CreatedBy,
CreatedTime = item.CreatedTime,
UpdatedBy = item.UpdatedBy,
UpdatedTime = item.UpdatedTime
};
if (!string.IsNullOrEmpty(item.GroupDefectJson))
{
try
{
var defects = JsonConvert.DeserializeObject<
List<QcGp12RecordWorkorderDefect>
>(item.GroupDefectJson);
foreach (var defect in defects)
{
if (defectDict.TryGetValue(defect.DefectCode, out var baseDefect))
{
string code = defect.DefectCode;
if (code.Length >= 2)
{
string propertyName = $"{code[0]}{code[^1]}";
dto.AddDynamicProperty(propertyName, defect.DefectNum);
}
}
}
}
catch (Exception ex)
{
// 实际应用中应使用日志框架(如 ILogger
}
}
resultList.Add(dto);
}
return resultList;
}
}
}