Explorar o código

feat:增加油机表及油机的CRUD

Zhenghanjv hai 3 meses
pai
achega
799a14bcbc

+ 13 - 1
Edge.Core/Core/database/MysqlDbContext.cs

@@ -1,4 +1,5 @@
-using Edge.Core.Domain.FccNozzleInfo;
+using Edge.Core.Domain.FccMachineInfo;
+using Edge.Core.Domain.FccNozzleInfo;
 using Edge.Core.Domain.FccOilInfo;
 using Edge.Core.Domain.FccOrderInfo;
 using Edge.Core.Domain.FccStationInfo;
@@ -39,8 +40,12 @@ namespace Edge.Core.Core.database
 
         public DbSet<FccOrderInfo> FccOrderInfos { get; set; }
 
+        public DbSet<FccMachineInfo> FccMachineInfos { get; set; }
+
         protected override void OnModelCreating(ModelBuilder modelBuilder)
         {
+            
+
             modelBuilder.Entity<FccTankInfo>()
                 .HasOne(tankInfos => tankInfos.Oil)
                 .WithMany(oilInfo => oilInfo.FccTankInfo)
@@ -54,6 +59,13 @@ namespace Edge.Core.Core.database
                 .HasForeignKey(nozzleInfo => nozzleInfo.TankId)
                 .OnDelete(DeleteBehavior.Restrict);
 
+            modelBuilder.Entity<FccNozzleInfo>()
+                .HasOne(nozzleInfo => nozzleInfo.FccMachineInfo)
+                .WithMany(machine => machine.fccNozzleInfos)
+                .HasForeignKey(nozzle => nozzle.MachineId)
+                .OnDelete(DeleteBehavior.Restrict);
+
+
             base.OnModelCreating(modelBuilder);
         }
     }

+ 44 - 0
Edge.Core/Domain/FccMachineInfo/FccMachineInfo.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Edge.Core.Domain.FccMachineInfo
+{
+    /// <summary>
+    /// 油机表
+    /// </summary>
+    [Table("qr_machine")]
+    public class FccMachineInfo
+    {
+        /// <summary>
+        /// 油机id
+        /// </summary>
+        [Key]
+        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
+        public long Id {  get; set; }
+
+        /// <summary>
+        /// 油机名称
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 连接FCC端口
+        /// </summary>
+        public int Port { get; set; }
+
+        /// <summary>
+        /// 关联的站点id
+        /// </summary>
+        [ForeignKey("stationInfo")]
+        public long StationId { get; set; }
+
+        public FccStationInfo.FccStationInfo stationInfo { get; set; }
+
+        public ICollection<FccNozzleInfo.FccNozzleInfo> fccNozzleInfos { get; set; }
+    }
+}

+ 30 - 0
Edge.Core/Domain/FccMachineInfo/Input/UploadMachineInfo.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Edge.Core.Domain.FccMachineInfo.Input
+{
+    public class UploadMachineInfo
+    {
+        public long? Id { get; set; }
+
+        public string Name { get; set; }
+
+        public int Port { get; set; }
+
+        public long StationId { get; set; }
+
+        public FccMachineInfo ToComponent()
+        {
+            return new FccMachineInfo()
+            {
+                Name = this.Name,
+                Port = this.Port,
+                StationId = this.StationId
+            };
+
+        }
+    }
+}

+ 26 - 0
Edge.Core/Domain/FccMachineInfo/Output/MachineInfoOutput.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Edge.Core.Domain.FccMachineInfo.Output
+{
+    public class MachineInfoOutput
+    {
+        public long Id { get; set; }
+
+        public string Name { get; set; }
+
+        public int Port { get; set; }
+
+        public List<NozzleInfo> Nozzles { get; set; }
+    }
+
+    public class NozzleInfo
+    {
+        public long Id { get; set; }
+
+        public int NozzleNumer { get; set; }
+    }
+}

+ 22 - 0
Edge.Core/Domain/FccMachineInfo/Output/SetMachineInfoOutput.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Edge.Core.Domain.FccMachineInfo.Output
+{
+    public class SetMachineInfoOutput
+    {
+        /// <summary>
+        /// 结果
+        /// </summary>
+        public bool Result { get; set; }
+
+
+        /// <summary>
+        /// 信息
+        /// </summary>
+        public string Message { get; set; }
+    }
+}

+ 12 - 4
Edge.Core/Domain/FccNozzleInfo/FccNozzleInfo.cs

@@ -13,10 +13,10 @@ namespace Edge.Core.Domain.FccNozzleInfo
         [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
         public long Id { get; set; }
 
-        /// <summary>
-        /// 油机连接FCC端口
-        /// </summary>
-        public int Port { get; set; }
+        ///// <summary>
+        ///// 油机连接FCC端口
+        ///// </summary>
+        //public int Port { get; set; }
 
         /// <summary>
         /// 加油点
@@ -44,6 +44,14 @@ namespace Edge.Core.Domain.FccNozzleInfo
         /// </summary>
         public int TankNum { get; set; }
 
+        /// <summary>
+        /// 关联的油机id
+        /// </summary>
+        [ForeignKey("FccMachineInfo")]
+        public long MachineId { get; set; }
+
         public FccTankInfo.FccTankInfo Tank { get; set; }
+
+        public FccMachineInfo.FccMachineInfo FccMachineInfo { get; set; }
     }
 }

+ 0 - 1
Edge.Core/Domain/FccNozzleInfo/Input/UploadNozzleInfoInput.cs

@@ -41,7 +41,6 @@
         {
             return new FccNozzleInfo()
             {
-                Port = this.Port,
                 FuelPoint = this.FuelPoint,
                 InternalNum = this.InternalNum,
                 ExternalNum = this.NozzleNum,

+ 0 - 1
Edge.Core/Domain/FccNozzleInfo/Output/DetailsNozzleInfoOutput.cs

@@ -47,7 +47,6 @@
         public DetailsNozzleInfoOutput(FccNozzleInfo fccNozzleInfo)
         {
             this.Id = fccNozzleInfo.Id;
-            this.Port = fccNozzleInfo.Port;
             this.FuelPoint = fccNozzleInfo.FuelPoint;
             this.InternalNum = fccNozzleInfo.InternalNum;
             this.NozzleNum = fccNozzleInfo.ExternalNum;

+ 1 - 1
Edge.Core/Domain/FccOrderInfo/Input/OrderInfoPageInput.cs

@@ -44,7 +44,7 @@ namespace Edge.Core.Domain.FccOrderInfo.Input
         /// <summary>
         /// 支付类型
         /// </summary>
-        public string? paymentType { get; set; }
+        public long? paymentType { get; set; }
 
         /// <summary>
         /// 手机号或支付用户名

+ 15 - 1
Edge.Core/Domain/FccOrderInfo/Output/OrderInfoOutput.cs

@@ -23,8 +23,11 @@ namespace Edge.Core.Domain.FccOrderInfo.Output
     /// </summary>
     public class OrderInfo
     {
-        public OrderInfo(FccOrderInfo fccOrderInfo)
+        public OrderInfo(FccOrderInfo fccOrderInfo,string stationName,string machineName)
         {
+            this.StationName = stationName;
+            this.MachineName = machineName;
+
             this.Id = fccOrderInfo.Id;
             this.Ttc = fccOrderInfo.Ttc;
             this.AuthorizationTime = fccOrderInfo.AuthorizationTime;
@@ -44,6 +47,17 @@ namespace Edge.Core.Domain.FccOrderInfo.Output
             this.PhoneNumber = fccOrderInfo.PhoneNumber;
             this.PaymentName = fccOrderInfo.PaymentName;
         }
+
+        /// <summary>
+        /// 油站名
+        /// </summary>
+        public string StationName { get; set; }
+
+        /// <summary>
+        /// 油机号
+        /// </summary>
+        public string MachineName { get; set; }
+
         /// <summary>
         /// 订单id
         /// </summary>

+ 39 - 0
src/FccLife.Web/Controller/MachineController.cs

@@ -0,0 +1,39 @@
+using Edge.Core.Domain.FccMachineInfo.Input;
+using FccLite.Web.Services.FccMachineInfo;
+using Microsoft.AspNetCore.Mvc;
+
+namespace FccLite.Web.Controller
+{
+    [Route("qrFueling/machine")]
+    [ApiController]
+    public class MachineController : ControllerBase
+    {
+        private IMachineService _machineService;
+
+        public MachineController(IMachineService machineService)
+        {
+            _machineService = machineService;
+        }
+
+        [HttpGet("getMachineInfo")]
+        public async Task<IActionResult> GetMachineInfo(long stationId)
+        {
+            List<Edge.Core.Domain.FccMachineInfo.Output.MachineInfoOutput> machineInfoOutputs = await _machineService.GetMachineInfo(stationId);
+            return Ok(machineInfoOutputs);
+        }
+
+        [HttpPost("uploadMachineInfo")]
+        public async Task<IActionResult> UploadMachine(UploadMachineInfo uploadMachineInfo)
+        {
+            Edge.Core.Domain.FccMachineInfo.Output.SetMachineInfoOutput setMachineInfoOutput = await _machineService.UploadMachine(uploadMachineInfo);
+            return Ok(setMachineInfoOutput);
+        }
+
+        [HttpPost("deleteMaichineInfo")]
+        public async Task<IActionResult> DeleteMachine(long machineId)
+        {
+            Edge.Core.Domain.FccMachineInfo.Output.SetMachineInfoOutput setMachineInfoOutput = await _machineService.DeleteMachine(machineId);
+            return Ok(setMachineInfoOutput);
+        }
+    }
+}

+ 4 - 0
src/FccLife.Web/Program.cs

@@ -15,6 +15,8 @@ using Edge.Core.HttpClient;
 using HengshanPaymentTerminal.Http;
 using FccLite.Web.Services.FccOrderInfo;
 using FccLite.Web.Repositories.FccOrderInfo;
+using FccLite.Web.Services.FccMachineInfo;
+using FccLite.Web.Repositories.FccMachineInfo;
 
 var builder = WebApplication.CreateBuilder(args);
  DefaultDispatcher processorsDispatcher = null;
@@ -41,6 +43,8 @@ builder.Services.AddScoped<INozzleInfnService, NozzleInfoServiceImpl>();
 builder.Services.AddScoped<INozzleInfoReposity, NozzleInfoReposity>();
 builder.Services.AddScoped<IOrderInfoService, OrderInfoService>();
 builder.Services.AddScoped<IOrderInfoReposity, OrderInfoReposity>();
+builder.Services.AddScoped<IMachineService, MachineServiceImpl>();
+builder.Services.AddScoped<IMachineRepository, MachineReposity>();
 builder.Services.AddScoped<IHttpClient, HttpClientService>();
 builder.Services.AddScoped<IHttpClientUtil, HttpClientUtils>();
 

+ 14 - 0
src/FccLife.Web/Repositories/FccMachineInfo/IMachineRepository.cs

@@ -0,0 +1,14 @@
+using Edge.Core.Domain.FccMachineInfo.Input;
+using Edge.Core.Domain.FccMachineInfo.Output;
+
+namespace FccLite.Web.Repositories.FccMachineInfo
+{
+    public interface IMachineRepository
+    {
+        Task<List<MachineInfoOutput>> GetMachine(long stationId);
+
+        Task<int> UploadMachine(UploadMachineInfo uploadMachineInfo);
+
+        Task<Edge.Core.Domain.FccMachineInfo.FccMachineInfo?> DeleteMachine(long machineId);
+    }
+}

+ 88 - 0
src/FccLife.Web/Repositories/FccMachineInfo/MachineReposity.cs

@@ -0,0 +1,88 @@
+using Edge.Core.Core.database;
+using Edge.Core.Domain.FccMachineInfo.Input;
+using Edge.Core.Domain.FccMachineInfo.Output;
+using Edge.Core.Domain.FccTankInfo.Output;
+using Microsoft.EntityFrameworkCore;
+
+namespace FccLite.Web.Repositories.FccMachineInfo
+{
+    public class MachineReposity : IMachineRepository
+    {
+        static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+        private MysqlDbContext _dbContext;
+
+        public MachineReposity(MysqlDbContext dbContext) 
+        {
+            _dbContext = dbContext;
+        }
+
+        public async Task<List<MachineInfoOutput>> GetMachine(long stationId)
+        {
+            var result = await _dbContext.FccMachineInfos
+                    .Where(machine => machine.StationId == stationId) // 过滤指定加油站的油机
+                    .GroupJoin(
+                            _dbContext.NozzleInfos, // 关联的加油枪表
+                            machine => machine.Id,        // 油机 的主键
+                            nozzle => nozzle.MachineId,// NozzleInfos 的外键
+                            (machine, nozzles) => new MachineInfoOutput
+                            {
+                                Id = machine.Id,
+                                Name = machine.Name,
+                                Port = machine.Port,
+                                Nozzles = nozzles.Select(nozzle => new NozzleInfo
+                                {
+                                    Id = nozzle.Id,
+                                    NozzleNumer = nozzle.ExternalNum
+                                }).ToList()
+                            })
+                    .ToListAsync(); // 异步查询
+            return result;
+
+
+        }
+
+        public async Task<int> UploadMachine(UploadMachineInfo uploadMachineInfo)
+        {
+            if(uploadMachineInfo.Id == null)
+            {
+                Edge.Core.Domain.FccMachineInfo.FccMachineInfo fccMachineInfo = uploadMachineInfo.ToComponent();
+                _dbContext.FccMachineInfos.Add(fccMachineInfo);
+            } else
+            {
+                Edge.Core.Domain.FccMachineInfo.FccMachineInfo? fccMachineInfo = await _dbContext.FccMachineInfos.FirstOrDefaultAsync(machine => machine.Id == uploadMachineInfo.Id);
+                if(fccMachineInfo == null)
+                {
+                    Logger.Error($"UploadMachine:find machine by id {uploadMachineInfo.Id} is null");
+                    return 0;
+                }
+                fccMachineInfo.Name = uploadMachineInfo.Name;
+                fccMachineInfo.Port = uploadMachineInfo.Port;
+            }
+
+            return await _dbContext.SaveChangesAsync();
+        }
+
+        public async Task<Edge.Core.Domain.FccMachineInfo.FccMachineInfo?> DeleteMachine(long machineId)
+        {
+            Edge.Core.Domain.FccMachineInfo.FccMachineInfo? fccMachineInfo = await _dbContext.FccMachineInfos.FirstOrDefaultAsync(machine => machine.Id == machineId);
+            if(fccMachineInfo == null)
+            {
+                Logger.Error($"DeleteMachine:find machine by id {machineId} is null");
+                return null;
+            }
+
+            //删除关联油枪
+            List<Edge.Core.Domain.FccNozzleInfo.FccNozzleInfo> fccNozzleInfos = await _dbContext.NozzleInfos.Where(nozzle => nozzle.MachineId == machineId).ToListAsync();
+            _dbContext.RemoveRange(fccNozzleInfos);
+
+            //删除油机
+            _dbContext.FccMachineInfos.Remove(fccMachineInfo);
+
+            await _dbContext.SaveChangesAsync();
+
+            return fccMachineInfo;
+        }
+
+        
+    }
+}

+ 8 - 0
src/FccLife.Web/Repositories/FccNozzleInfo/INozzleInfoReposity.cs

@@ -24,5 +24,13 @@ namespace FccLite.Web.Repositories.FccNozzleInfo
         /// <param name="id"></param>
         /// <returns></returns>
         Task<Edge.Core.Domain.FccNozzleInfo.FccNozzleInfo?> DeleteNozzleInfoById(long id);
+
+
+        /// <summary>
+        /// 根据油机id 获取油枪
+        /// </summary>
+        /// <param name="machineId"></param>
+        /// <returns></returns>
+        Task<List<Edge.Core.Domain.FccNozzleInfo.FccNozzleInfo>> FindNozzlesByMachineId(long machineId);
     }
 }

+ 10 - 1
src/FccLife.Web/Repositories/FccNozzleInfo/NozzleInfoReposity.cs

@@ -40,7 +40,6 @@ namespace FccLite.Web.Repositories.FccNozzleInfo
                     Logger.Info($"find nozzle info with id : {uploadNozzleInfoInput.Id} for update, result is null");
                     return 0;
                 }
-                fccNozzleInfo.Port = uploadNozzleInfoInput.Port;
                 fccNozzleInfo.FuelPoint = uploadNozzleInfoInput.FuelPoint;
                 fccNozzleInfo.InternalNum = uploadNozzleInfoInput.InternalNum;
                 fccNozzleInfo.ExternalNum = uploadNozzleInfoInput.NozzleNum;
@@ -74,5 +73,15 @@ namespace FccLite.Web.Repositories.FccNozzleInfo
             await _dbContext.SaveChangesAsync();
             return fccNozzleInfo;
         }
+
+        /// <summary>
+        /// 根据油机id获取枪信息
+        /// </summary>
+        /// <param name="machineId"></param>
+        /// <returns></returns>
+        public async Task<List<Edge.Core.Domain.FccNozzleInfo.FccNozzleInfo>> FindNozzlesByMachineId(long machineId)
+        {
+            return await _dbContext.NozzleInfos.Where(nozzle => nozzle.MachineId == machineId).ToListAsync();
+        }
     }
 }

+ 2 - 1
src/FccLife.Web/Repositories/FccOrderInfo/OrderInfoReposity.cs

@@ -30,8 +30,9 @@ namespace FccLite.Web.Repositories.FccOrderInfo
             {
                 query = query.Where(order => order.EndTime != null && (order.EndTime >= orderInfoPageInput.startCheckTime && order.EndTime <= orderInfoPageInput.endCheckTime));
             }
-            query = query.WhereIf(orderInfoPageInput.paymentType != null, order => order.PaymentName.Equals(orderInfoPageInput.paymentType));
+            query = query.WhereIf(orderInfoPageInput.paymentType != null, order => order.PayType == orderInfoPageInput.paymentType);
             query = query.WhereIf(orderInfoPageInput.phoneNumberOruserName != null, order => order.UserName.Equals(orderInfoPageInput.phoneNumberOruserName) || order.PhoneNumber.Equals(orderInfoPageInput.phoneNumberOruserName));
+            query = query.OrderByDescending(order => order.EndTime);
             return await query.Skip((orderInfoPageInput.page - 1) * orderInfoPageInput.pageSize).Take(orderInfoPageInput.pageSize).ToListAsync();
         }
     }

+ 14 - 0
src/FccLife.Web/Services/FccMachineInfo/IMachineService.cs

@@ -0,0 +1,14 @@
+using Edge.Core.Domain.FccMachineInfo.Input;
+using Edge.Core.Domain.FccMachineInfo.Output;
+
+namespace FccLite.Web.Services.FccMachineInfo
+{
+    public interface IMachineService
+    {
+        Task<List<MachineInfoOutput>> GetMachineInfo(long stationId);
+
+        Task<SetMachineInfoOutput> UploadMachine(UploadMachineInfo uploadMachineInfo);
+
+        Task<SetMachineInfoOutput> DeleteMachine(long machineId);
+    }
+}

+ 59 - 0
src/FccLife.Web/Services/FccMachineInfo/MachineServiceImpl.cs

@@ -0,0 +1,59 @@
+using Edge.Core.Domain.FccMachineInfo.Input;
+using Edge.Core.Domain.FccMachineInfo.Output;
+using FccLite.Web.Repositories.FccMachineInfo;
+using FccLite.Web.Repositories.FccNozzleInfo;
+
+namespace FccLite.Web.Services.FccMachineInfo
+{
+    public class MachineServiceImpl : IMachineService
+    {
+        static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+        private IMachineRepository _machineRepository;
+        private INozzleInfoReposity _nozzleInfoReposity;
+        public MachineServiceImpl(IMachineRepository machineRepository,INozzleInfoReposity nozzleInfoReposity)
+        {
+            _machineRepository = machineRepository;
+            _nozzleInfoReposity = nozzleInfoReposity;
+        }
+
+        public async Task<List<MachineInfoOutput>> GetMachineInfo(long stationId)
+        {
+            return await _machineRepository.GetMachine(stationId);
+        }
+
+        public async Task<SetMachineInfoOutput> UploadMachine(UploadMachineInfo uploadMachineInfo)
+        {
+            int row = await _machineRepository.UploadMachine(uploadMachineInfo);
+            if (row > 0)
+            {
+                return new SetMachineInfoOutput()
+                {
+                    Result = true,
+                    Message = "更新成功"
+                };
+            }
+            return new SetMachineInfoOutput()
+            {
+                Result = true,
+                Message = "无更新"
+            };
+        }
+        public async Task<SetMachineInfoOutput> DeleteMachine(long machineId)
+        {
+            Edge.Core.Domain.FccMachineInfo.FccMachineInfo? fccMachineInfo = await _machineRepository.DeleteMachine(machineId);
+            if(fccMachineInfo != null)
+            {
+                return new SetMachineInfoOutput()
+                {
+                    Result = true,
+                    Message = "更新成功"
+                };
+            }
+            return new SetMachineInfoOutput()
+            {
+                Result = true,
+                Message = "无更新"
+            };
+        }
+    }
+}

+ 0 - 1
src/FccLife.Web/Services/FccNozzleInfo/NozzleInfoServiceImpl.cs

@@ -94,7 +94,6 @@ namespace FccLite.Web.Services.FccNozzleInfo
             {
                 Id = fccNozzleInfo.Id,
                 NozzleNum = fccNozzleInfo.ExternalNum,
-                Port = fccNozzleInfo.Port,
                 FuelPoint = fccNozzleInfo.FuelPoint,
                 InternalNum = fccNozzleInfo.InternalNum,
                 TankId = fccNozzleInfo.TankId,

+ 6 - 3
src/FccLife.Web/Services/FccOrderInfo/OrderInfoService.cs

@@ -1,23 +1,26 @@
 using Edge.Core.Domain.FccOrderInfo.Input;
 using Edge.Core.Domain.FccOrderInfo.Output;
 using FccLite.Web.Repositories.FccOrderInfo;
+using FccLite.Web.Repositories.FccStationInfo;
 
 namespace FccLite.Web.Services.FccOrderInfo
 {
     public class OrderInfoService : IOrderInfoService
     {
         private readonly IOrderInfoReposity _orderInfoReposity;
-        public OrderInfoService(IOrderInfoReposity orderInfoReposity) 
+        private readonly IStationRepository _stationRepository;
+        public OrderInfoService(IOrderInfoReposity orderInfoReposity,IStationRepository stationRepository) 
         {
             _orderInfoReposity = orderInfoReposity;
+            _stationRepository = stationRepository;
         }
 
 
         public async Task<OrderInfoOutput> GetPage(OrderInfoPageInput orderInfoPageInput)
         {
-            //throw new NotImplementedException();
+            Edge.Core.Domain.FccStationInfo.FccStationInfo? fccStationInfo = await _stationRepository.GetFirstStation();
             IEnumerable<Edge.Core.Domain.FccOrderInfo.FccOrderInfo> enumerable = await _orderInfoReposity.GetPage(orderInfoPageInput);
-            List<OrderInfo> orderInfos = enumerable.Select(order => new OrderInfo(order)).ToList();
+            List<OrderInfo> orderInfos = enumerable.Select(order => new OrderInfo(order,fccStationInfo?.Name ?? "","")).ToList();
             return new OrderInfoOutput()
             {
                 Total = orderInfos.Count,