Files
WCS/Plugins/Wcs/Plugin.Cowain.Wcs/Services/RgvService.cs
2026-03-02 10:56:30 +08:00

198 lines
6.7 KiB
C#

using Cowain.Base.DBContext;
using Cowain.Base.Models;
using Cowain.Base.Services;
using Microsoft.EntityFrameworkCore;
using Plugin.Cowain.Wcs.IServices;
using Plugin.Cowain.Wcs.Models.Dto;
using Plugin.Cowain.Wcs.ViewModels;
namespace Plugin.Cowain.Wcs.Services;
public class RgvService : BaseService, IRgvService
{
public RgvService(IDbContextFactory<SqlDbContext> dbContextFactory) : base(dbContextFactory)
{
}
public async Task<ResultModel> AddRgvAsync(RgvViewModel? rgv)
{
if (rgv == null)
{
return ResultModel.Error("Rgv不能为空");
}
if (string.IsNullOrWhiteSpace(rgv.StationName))
{
return ResultModel.Error("Rgv名称不能为空");
}
if (string.IsNullOrWhiteSpace(rgv.StationCode))
{
return ResultModel.Error("Rgv编码不能为空");
}
using var dbContext = _dbContextFactory.CreateDbContext();
var dbSet = dbContext.GetDbSet<RgvDto>();
// 检查Name是否重复
var nameExists = await dbSet.AnyAsync(x => x.StationName == rgv.StationName);
if (nameExists)
{
return ResultModel.Error("Rgv名称已存在");
}
// 检查Code是否重复
var codeExists = await dbSet.AnyAsync(x => x.StationCode == rgv.StationCode);
if (codeExists)
{
return ResultModel.Error("Rgv编码已存在");
}
var entity = new RgvDto
{
StationName = rgv.StationName,
StationCode = rgv.StationCode,
Json = rgv.Json,
LayOutX = rgv.LayOutX,
LayOutY = rgv.LayOutY,
FromStationId1 = rgv.FromStationId1,
ToStationId1 = rgv.ToStationId1,
FromStationId2 = rgv.FromStationId2,
ToStationId2 = rgv.ToStationId2,
QrCode1 = rgv.QrCode1,
QrCode2 = rgv.QrCode2,
ProcessName = rgv.ProcessName,
};
await dbSet.AddAsync(entity);
await dbContext.SaveChangesAsync();
return ResultModel.Success();
}
public async Task<ResultModel> DeleteAsync(int id)
{
if (id <= 0)
{
return ResultModel.Error("id不能小于0");
}
using var dbContext = _dbContextFactory.CreateDbContext();
var DbSet = dbContext.GetDbSet<RgvDto>();
var existingModel = await DbSet.FirstOrDefaultAsync(x => x.Id == id);
if (existingModel == null)
{
return ResultModel.Error("id不存在");
}
DbSet.Remove(existingModel);
int count = await dbContext.SaveChangesAsync();
return count > 0 ? ResultModel.Success("rgv删除成功") : ResultModel.Error("rgv删除失败");
}
public async Task<ResultModel> UpdateAsync(RgvViewModel? rgv)
{
if (rgv == null)
{
return ResultModel.Error("rgv不能为空");
}
if (rgv.Id <= 0)
{
return ResultModel.Error("ID不能小于0");
}
if (string.IsNullOrWhiteSpace(rgv.StationName))
{
return ResultModel.Error("名称不能为空");
}
if (string.IsNullOrWhiteSpace(rgv.StationCode))
{
return ResultModel.Error("编码不能为空");
}
using var dbContext = _dbContextFactory.CreateDbContext();
var DbSet = dbContext.GetDbSet<RgvDto>();
var existingModel = await DbSet.FirstOrDefaultAsync(x => x.Id == rgv.Id);
if (existingModel == null)
{
return ResultModel.Error("id不存在");
}
// 检查是否有同名工站(排除自己)
var nameExists = await DbSet.AnyAsync(x => x.StationName == rgv.StationName && x.Id != rgv.Id);
if (nameExists)
{
return ResultModel.Error("名称已存在");
}
// 检查是否有同编码工站(排除自己)
var codeExists = await DbSet.AnyAsync(x => x.StationCode == rgv.StationCode && x.Id != rgv.Id);
if (codeExists)
{
return ResultModel.Error("编码已存在");
}
// 更新字段
existingModel.StationName = rgv.StationName;
existingModel.StationCode = rgv.StationCode;
existingModel.Json = rgv.Json;
existingModel.LayOutX = rgv.LayOutX;
existingModel.LayOutY = rgv.LayOutY;
existingModel.FromStationId1 = rgv.FromStationId1;
existingModel.ToStationId1 = rgv.ToStationId1;
existingModel.FromStationId2 = rgv.FromStationId2;
existingModel.ToStationId2 = rgv.ToStationId2;
existingModel.QrCode1 = rgv.QrCode1;
existingModel.QrCode2 = rgv.QrCode2;
existingModel.ProcessName = rgv.ProcessName;
var count = await dbContext.SaveChangesAsync();
return count > 0 ? ResultModel.Success("rgv更新成功") : ResultModel.Error("rgv更新失败");
}
public async Task<List<RgvViewModel>> GetAllAsync()
{
using var dbContext = _dbContextFactory.CreateDbContext();
var DbSet = dbContext.GetDbSet<RgvDto>();
var data = await DbSet.ToListAsync();
return new List<RgvViewModel>(data.Select(x => new RgvViewModel
{
Id = x.Id,
StationCode = x.StationCode,
Json = x.Json,
StationName = x.StationName,
LayOutX = x.LayOutX,
LayOutY = x.LayOutY,
FromStationId1 = x.FromStationId1,
ToStationId1 = x.ToStationId1,
FromStationId2 = x.FromStationId2,
ToStationId2 = x.ToStationId2,
QrCode1 = x.QrCode1,
QrCode2 = x.QrCode2,
ProcessName = x.ProcessName,
}));
}
public async Task<(List<RgvViewModel>, int totals)> GetAllAsync(int pageIndex, int pageSize)
{
using var dbContext = _dbContextFactory.CreateDbContext();
var dbSet = dbContext.GetDbSet<RgvDto>();
var query = dbSet.AsQueryable();
int totals = await query.CountAsync();
var data = await query
.OrderBy(x => x.Id)
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.ToListAsync();
var list = data.Select(x => new RgvViewModel
{
Id = x.Id,
StationCode = x.StationCode,
Json = x.Json,
StationName = x.StationName,
LayOutX = x.LayOutX,
LayOutY = x.LayOutY,
FromStationId1 = x.FromStationId1,
ToStationId1 = x.ToStationId1,
FromStationId2 = x.FromStationId2,
ToStationId2 = x.ToStationId2,
QrCode1 = x.QrCode1,
QrCode2 = x.QrCode2,
ProcessName = x.ProcessName,
}).ToList();
return (list, totals);
}
}