using Aliyun.OSS;
using DOAN.Model;
using DOAN.Model.Business;
using DOAN.Model.Dto;
using DOAN.Model.MES.process;
using DOAN.Repository;
using DOAN.Service.Business.IBusinessService;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using NPOI.SS.Formula.Functions;
using NPOI.XSSF.Streaming.Values;
using SqlSugar;
using System;
using System.Linq;
namespace DOAN.Service.Business
{
///
/// Service业务层处理
///
[AppService(ServiceType = typeof(IProcessmodelWorkStepService), ServiceLifetime = LifeTime.Transient)]
public class ProcessmodelWorkStepService : BaseService, IProcessmodelWorkStepService
{
///
/// 查询列表
///
///
///
public PagedInfo GetList(ProcessmodelWorkStepQueryDto parm)
{
var predicate = Expressionable.Create()
.AndIF(!string.IsNullOrEmpty(parm.StepCode), p => parm.StepCode.Contains(p.StepCode))
.AndIF(!string.IsNullOrEmpty(parm.StepName), p => parm.StepName.Contains(p.StepName));
var response = Queryable()
.Where(predicate.ToExpression())
.GroupBy(p => p.StepCode)
.ToPage(parm);
return response;
}
///
/// 获取详情
///
///
///
public ProcessmodelWorkStep GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
///
/// 添加
///
///
///
public ProcessmodelWorkStep AddProcessmodelWorkStep(ProcessmodelWorkStep model)
{
return Context.Insertable(model).ExecuteReturnEntity();
}
///
/// 修改
///
///
///
public int UpdateProcessmodelWorkStep(ProcessmodelWorkStep model)
{
//var response = Update(w => w.Id == model.Id, it => new ProcessmodelOperationStep()
//{
// OperationStepCode = model.OperationStepCode,
// OperationStepName = model.OperationStepName,
// OperationCode = model.OperationCode,
// Description = model.Description,
// IsActive = model.IsActive,
// UpdateTime = model.UpdateTime,
// UpdateBy = model.UpdateBy,
// Remark = model.Remark,
//});
//return response;
return Update(model, true);
}
public List GetUniqueValueList(string stepCode)
{
bool stepCodeExists = Context.Queryable()
.Any(p => p.StepCode == stepCode);
if (!stepCodeExists)
{
return new List();
}
List uniqueValues = Context.Queryable()
.Where(p => p.StepCode == stepCode)
.Select(p => p.UniqueValue)
.Distinct()
.Where(uv => !string.IsNullOrEmpty(uv))
.ToList();
var result = Context.Queryable()
.Where(d => uniqueValues.Contains(d.UniqueValue)) // 批量匹配,性能优于循环查询
.Select(d => new UniqueValueQueryDto
{
Value = d.UniqueValue,
Name = d.Description
})
.ToList();
return result;
}
///
/// 新增设备
///
///
///
///
///
public int AddUniqueValue(UniqueQueryDto parm)
{
// 1. 校验入参
if (string.IsNullOrEmpty(parm.ProcessCode) || string.IsNullOrEmpty(parm.StepCode) || string.IsNullOrEmpty(parm.Description))
{
throw new ArgumentException("ProcessCode、StepCode、Description 不能为空");
}
// 2. 查询字典表中是否存在匹配的 Description
var dictionary = Context.Queryable()
.Where(d => d.Description == parm.Description)
.First();
string uniqueValue;
if (dictionary != null)
{
// 字典表中存在匹配的 Description,使用其 UniqueValue
uniqueValue = dictionary.UniqueValue;
}
else
{
// 字典表中不存在,生成新的唯一 UniqueValue
uniqueValue = GenerateUniqueValue();
}
// 3. 查询工步基础信息
var workStep = Context.Queryable()
.Where(x => x.StepCode == parm.StepCode && x.ProcessCode == parm.ProcessCode)
.First();
if (workStep == null)
{
throw new Exception("未找到对应的工步信息");
}
// 4. 插入新的工步记录
var newWorkStep = new ProcessmodelWorkStep
{
StepCode = workStep.StepCode,
StepName = workStep.StepName,
ProcessCode = workStep.ProcessCode,
Description = workStep.Description,
IsActive = workStep.IsActive,
UniqueValue = uniqueValue,
CreateTime = DateTime.Now
};
return Context.Insertable(newWorkStep).ExecuteCommand();
}
///
/// 生成唯一的 UniqueValue
///
/// 唯一的 UniqueValue
private string GenerateUniqueValue()
{
// 生成格式为 "UV" + 时间戳 + 随机数 的唯一值
var timestamp = DateTime.Now.ToString("yyyyMMddHHmmssfff");
var random = new Random().Next(1000, 9999);
return $"UV{timestamp}{random}";
// 也可以根据业务规则生成,例如结合 ProcessCode 和 StepCode
// return $"{parm.ProcessCode}-{parm.StepCode}-{Guid.NewGuid().ToString("N").Substring(0, 8)}";
}
/////
///// 删除设备
/////
/////
/////
/////
//public int DeleteUniqueValue(long id)
//{
//}
}
}