using Aliyun.OSS;
using DOAN.Model;
using DOAN.Model.Business;
using DOAN.Model.Dto;
using DOAN.Model.MES.dev;
using DOAN.Model.MES.dev.Dto;
using DOAN.Model.MES.process;
using DOAN.Repository;
using DOAN.Service.Business.IBusinessService;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using JinianNet.JNTemplate;
using NPOI.SS.Formula.Functions;
using NPOI.XSSF.Streaming.Values;
using SqlSugar;
using System;
using System.Linq;
using UAParser;
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.ProcessCode), p => p.ProcessCode.Contains(parm.ProcessCode))
.AndIF(!string.IsNullOrEmpty(parm.StepCode), p => p.StepCode.Contains(parm.StepCode))
.AndIF(!string.IsNullOrEmpty(parm.StepName), p => p.StepName.Contains(parm.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)
{
return Update(model, true);
}
///
/// 获取设备列表
///
///
///
public PagedInfo GetUniqueValueList(UniqueDto parm)
{
// 1. 构建查询条件
var predicate = Expressionable.Create()
.AndIF(!string.IsNullOrEmpty(parm.StepCode), p => p.StepCode == parm.StepCode)
.AndIF(!string.IsNullOrEmpty(parm.DeviceCode), p => p.UniqueValue.Contains(parm.DeviceCode))
.ToExpression();
// 2. 查询总记录数
int totalCount = Queryable()
.Where(predicate)
.Count();
// 3. 查询当前页数据列表
int skipCount = (parm.PageNum - 1) * parm.PageSize;
var dataList = Queryable()
.Where(predicate)
.Distinct()
.LeftJoin((w, a) => w.UniqueValue == a.DeviceCode)
.Select((w, a) => new UniqueValueQueryDto
{
Id = w.Id,
DeviceCode = w.UniqueValue,
DeviceName = a.DeviceName,
Workshop = a.Workshop,
Workline = a.Workline,
Status = a.Status,
DeviceSpecification = a.DeviceSpecification,
ResponsiblePerson = a.ResponsiblePerson
})
.Skip(skipCount)
.Take(parm.PageSize)
.ToList();
// 4. 封装分页结果
return new PagedInfo
{
PageIndex = parm.PageNum,
PageSize = parm.PageSize,
TotalNum = totalCount,
Result = dataList,
TotalPage = totalCount > 0 ? (totalCount + parm.PageSize - 1) / parm.PageSize : 0
};
}
public List GetAccountList()
{
// 1. SqlSugar 链式查询
var flatData = Context.Queryable()
.Where(d => !string.IsNullOrEmpty(d.Workshop) && !string.IsNullOrEmpty(d.Workline))
.Select(d => new
{
d.Workshop,
d.Workline,
d.DeviceCode,
d.DeviceName
})
.ToList();
// 2. 手动构建 DTO 结构
var result = new List();
// 先获取所有不重复的车间
var allWorkshops = flatData.Select(d => d.Workshop).Distinct().ToList();
foreach (var workshop in allWorkshops)
{
// 构建当前车间 DTO
var workshopDto = new WorkshopDto { Workshop = workshop };
// 获取当前车间下的所有数据
var workshopData = flatData.Where(d => d.Workshop == workshop).ToList();
// 获取当前车间下不重复的产线
var allWorklines = workshopData.Select(d => d.Workline).Distinct().ToList();
foreach (var workline in allWorklines)
{
// 构建当前产线 DTO
var worklineDto = new WorklineDto { Workline = workline };
// 获取当前产线下的所有设备
var devices = workshopData
.Where(d => d.Workline == workline)
.Select(d => new DeviceDto
{
DeviceCode = d.DeviceCode,
DeviceName = d.DeviceName
})
.ToList();
worklineDto.Devices = devices;
workshopDto.Worklines.Add(worklineDto);
}
result.Add(workshopDto);
}
return result;
}
///
/// 新增设备
///
///
///
///
///
public int AddUniqueValue(UniqueQueryDto parm)
{
// 查询工步基础信息
var workStep = Context.Queryable()
.Where(x => x.StepCode == parm.StepCode && x.ProcessCode == parm.ProcessCode)
.First();
if (workStep == null)
{
throw new Exception("未找到对应的工步信息");
}
// 插入新的工步记录
var newWorkStep = new ProcessmodelWorkStep
{
StepCode = workStep.StepCode,
StepName = workStep.StepName,
ProcessCode = workStep.ProcessCode,
Description = workStep.Description,
IsActive = workStep.IsActive,
UniqueValue = parm.DeviceCode,
CreateTime = DateTime.Now
};
return Context.Insertable(newWorkStep).ExecuteCommand();
}
///
/// 获取工序表
///
public List GetModelProcessList()
{
var response = Context.Queryable()
.Select(p => new ProcessListDto
{
ProcessCode = p.ProcessCode,
ProcessName = p.ProcessName,
})
.ToList();
return response;
}
}
}