MachineReposity.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Edge.Core.Core.database;
  2. using Edge.Core.Domain.FccMachineInfo.Input;
  3. using Edge.Core.Domain.FccMachineInfo.Output;
  4. using Edge.Core.Domain.FccTankInfo.Output;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace FccLite.Web.Repositories.FccMachineInfo
  7. {
  8. public class MachineReposity : IMachineRepository
  9. {
  10. static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
  11. private MysqlDbContext _dbContext;
  12. public MachineReposity(MysqlDbContext dbContext)
  13. {
  14. _dbContext = dbContext;
  15. }
  16. public async Task<List<MachineInfoOutput>> GetMachine(long stationId)
  17. {
  18. var result = await _dbContext.FccMachineInfos
  19. .Where(machine => machine.StationId == stationId) // 过滤指定加油站的油机
  20. .GroupJoin(
  21. _dbContext.NozzleInfos, // 关联的加油枪表
  22. machine => machine.Id, // 油机 的主键
  23. nozzle => nozzle.MachineId,// NozzleInfos 的外键
  24. (machine, nozzles) => new MachineInfoOutput
  25. {
  26. Id = machine.Id,
  27. Name = machine.Name,
  28. Port = machine.Port,
  29. Nozzles = nozzles.Select(nozzle => new NozzleInfo
  30. {
  31. Id = nozzle.Id,
  32. NozzleNumer = nozzle.ExternalNum
  33. }).ToList()
  34. })
  35. .ToListAsync(); // 异步查询
  36. return result;
  37. }
  38. public async Task<int> UploadMachine(UploadMachineInfo uploadMachineInfo)
  39. {
  40. if(uploadMachineInfo.Id == null)
  41. {
  42. Edge.Core.Domain.FccMachineInfo.FccMachineInfo fccMachineInfo = uploadMachineInfo.ToComponent();
  43. _dbContext.FccMachineInfos.Add(fccMachineInfo);
  44. } else
  45. {
  46. Edge.Core.Domain.FccMachineInfo.FccMachineInfo? fccMachineInfo = await _dbContext.FccMachineInfos.FirstOrDefaultAsync(machine => machine.Id == uploadMachineInfo.Id);
  47. if(fccMachineInfo == null)
  48. {
  49. Logger.Error($"UploadMachine:find machine by id {uploadMachineInfo.Id} is null");
  50. return 0;
  51. }
  52. fccMachineInfo.Name = uploadMachineInfo.Name;
  53. fccMachineInfo.Port = uploadMachineInfo.Port;
  54. }
  55. return await _dbContext.SaveChangesAsync();
  56. }
  57. public async Task<Edge.Core.Domain.FccMachineInfo.FccMachineInfo?> DeleteMachine(long machineId)
  58. {
  59. Edge.Core.Domain.FccMachineInfo.FccMachineInfo? fccMachineInfo = await _dbContext.FccMachineInfos.FirstOrDefaultAsync(machine => machine.Id == machineId);
  60. if(fccMachineInfo == null)
  61. {
  62. Logger.Error($"DeleteMachine:find machine by id {machineId} is null");
  63. return null;
  64. }
  65. //删除关联油枪
  66. List<Edge.Core.Domain.FccNozzleInfo.FccNozzleInfo> fccNozzleInfos = await _dbContext.NozzleInfos.Where(nozzle => nozzle.MachineId == machineId).ToListAsync();
  67. _dbContext.RemoveRange(fccNozzleInfos);
  68. //删除油机
  69. _dbContext.FccMachineInfos.Remove(fccMachineInfo);
  70. await _dbContext.SaveChangesAsync();
  71. return fccMachineInfo;
  72. }
  73. }
  74. }