Kaynağa Gözat

feat(web):油枪配置接口

Zhenghanjv 7 ay önce
ebeveyn
işleme
c55ff5a537

+ 28 - 2
src/FccLife.Web/Controller/TankController.cs

@@ -1,4 +1,6 @@
-using FccLite.Web.Domain.FccTankInfo.Input;
+using FccLite.Web.Domain.FccNozzleInfo.Input;
+using FccLite.Web.Domain.FccTankInfo.Input;
+using FccLite.Web.Services.FccNozzleInfo;
 using FccLite.Web.Services.FccTankInfo;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
@@ -10,9 +12,11 @@ namespace FccLite.Web.Controller
     public class TankController : ControllerBase
     {
         private readonly ITankInfoService _tankInfoService;
-        public TankController(ITankInfoService tankInfoService) 
+        private readonly INozzleInfnService _nozzleInfnService;
+        public TankController(ITankInfoService tankInfoService,INozzleInfnService nozzleInfnService) 
         {
             _tankInfoService = tankInfoService;
+            _nozzleInfnService = nozzleInfnService;
         }
 
 
@@ -51,5 +55,27 @@ namespace FccLite.Web.Controller
             Domain.FccTankInfo.Output.SetTankInfoOutput result = await _tankInfoService.DeleteTankById(id);
             return Ok(result);
         }
+
+        [HttpGet("getDetailsNozzleInfo")]
+        public async Task<IActionResult> GetDetailsNozzleInfo(long id)
+        {
+            Domain.FccNozzleInfo.Output.DetailsNozzleInfoOutput? result = await _nozzleInfnService.GetDetailsNozzleInfoById(id);
+            if (result == null) return Ok("查找不到该油枪信息");
+            return Ok(result);
+        }
+
+        [HttpPost("uploadDetailsNozzleInfo")]
+        public async Task<IActionResult> UploadDetailsNozzleInfo(UploadNozzleInfoInput uploadNozzleInfoInput)
+        {
+            Domain.FccNozzleInfo.Output.SetNozzleInfoOutput result = await _nozzleInfnService.UploadDetailsNozzleInfo(uploadNozzleInfoInput);
+            return Ok(result);
+        }
+
+        [HttpPost("deleteNozzle")]
+        public async Task<IActionResult> DeleteNozzle(long id)
+        {
+            Domain.FccNozzleInfo.Output.SetNozzleInfoOutput result = await _nozzleInfnService.DeleteNozzleInfoByID(id);
+            return Ok(result);
+        }
     }
 }

+ 6 - 0
src/FccLife.Web/Core/database/MysqlDbContext.cs

@@ -26,6 +26,12 @@ namespace FccLite.Web.utils.database
                 .HasForeignKey(tankInfo => tankInfo.OilId)
                 .OnDelete(DeleteBehavior.Restrict);
                 
+            modelBuilder.Entity<FccNozzleInfo>()
+                .HasOne(nozzleInfo => nozzleInfo.Tank)
+                .WithMany(tankInfo => tankInfo.FccNozzleInfos)
+                .HasForeignKey(nozzleInfo => nozzleInfo.TankId)
+                .OnDelete(DeleteBehavior.Restrict);
+
             base.OnModelCreating(modelBuilder);
         }
     }

+ 6 - 1
src/FccLife.Web/Domain/FccNozzleInfo/FccNozzleInfo.cs

@@ -34,11 +34,16 @@ namespace FccLite.Web.Domain.FccNozzleInfo
         public int ExternalNum { get; set; }
 
         /// <summary>
-        /// 油罐id
+        /// 关联油罐id
         /// </summary>
         [ForeignKey("Tank")]
         public long TankId { get; set; }
 
+        /// <summary>
+        /// 关联油罐号
+        /// </summary>
+        public int TankNum { get; set; }
+
         public FccTankInfo.FccTankInfo Tank { get; set; }
     }
 }

+ 12 - 6
src/FccLife.Web/Domain/FccNozzleInfo/Input/UploadNozzleInfoInput.cs

@@ -11,7 +11,7 @@ namespace FccLite.Web.Domain.FccNozzleInfo.Input
         /// <summary>
         /// 油机ip
         /// </summary>
-        public string MachineIp { get; set; }
+        public string Ip { get; set; }
 
         /// <summary>
         /// 加油点
@@ -26,22 +26,28 @@ namespace FccLite.Web.Domain.FccNozzleInfo.Input
         /// <summary>
         /// 外部枪号
         /// </summary>
-        public int ExternalNum { get; set; }
+        public int NozzleNum { get; set; }
 
         /// <summary>
-        /// 油罐id
+        /// 关联油罐id
         /// </summary>
         public long TankId { get; set; }
 
+        /// <summary>
+        /// 关联油罐号
+        /// </summary>
+        public int TankNum { get; set; }
+
         public FccNozzleInfo ToComponent()
         {
             return new FccNozzleInfo()
             {
-                MachineIp = this.MachineIp,
+                MachineIp = this.Ip,
                 FuelPoint = this.FuelPoint,
                 InternalNum = this.InternalNum,
-                ExternalNum = this.ExternalNum,
-                TankId = this.TankId
+                ExternalNum = this.NozzleNum,
+                TankId = this.TankId,
+                TankNum = this.TankNum
             };
         }
     }

+ 58 - 0
src/FccLife.Web/Domain/FccNozzleInfo/Output/DetailsNozzleInfoOutput.cs

@@ -0,0 +1,58 @@
+namespace FccLite.Web.Domain.FccNozzleInfo.Output
+{
+    public class DetailsNozzleInfoOutput
+    {
+        /// <summary>
+        /// 油枪id
+        /// </summary>
+        public long? Id { get; set; }
+
+        /// <summary>
+        /// 油机ip
+        /// </summary>
+        public string Ip { get; set; }
+
+        /// <summary>
+        /// 加油点
+        /// </summary>
+        public int FuelPoint { get; set; }
+
+        /// <summary>
+        /// 内部枪号
+        /// </summary>
+        public int InternalNum { get; set; }
+
+        /// <summary>
+        /// 外部枪号
+        /// </summary>
+        public int NozzleNum { get; set; }
+
+        /// <summary>
+        /// 关联油罐id
+        /// </summary>
+        public long TankId { get; set; }
+
+        /// <summary>
+        /// 关联油罐号
+        /// </summary>
+        public int TankNum { get; set; }
+
+        /// <summary>
+        /// 可关联的油罐
+        /// </summary>
+        public List<RelatableTank> RelatableTanks { get; set; }
+
+        public class RelatableTank
+        {
+            /// <summary>
+            /// 油罐id
+            /// </summary>
+            public long TankId { get; set; }
+
+            /// <summary>
+            /// 油罐号
+            /// </summary>
+            public int TankNum { get; set; }
+        }
+    }
+}

+ 19 - 0
src/FccLife.Web/Domain/FccNozzleInfo/Output/SetNozzleInfoOutput.cs

@@ -0,0 +1,19 @@
+namespace FccLite.Web.Domain.FccNozzleInfo.Output
+{
+    /// <summary>
+    /// 新增、修改、删除油枪结果
+    /// </summary>
+    public class SetNozzleInfoOutput
+    {
+        /// <summary>
+        /// 结果
+        /// </summary>
+        public Boolean Result { get; set; }
+
+
+        /// <summary>
+        /// 信息
+        /// </summary>
+        public String Message { get; set; }
+    }
+}

+ 4 - 1
src/FccLife.Web/Domain/FccTankInfo/FccTankInfo.cs

@@ -1,4 +1,5 @@
-using FccLite.Web.Domain.FccOilInfo;
+using FccLite.Web.Domain.FccNozzleInfo;
+using FccLite.Web.Domain.FccOilInfo;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
 
@@ -45,5 +46,7 @@ namespace FccLite.Web.Domain.FccTankInfo
         public FccOilInfo.FccOilInfo? Oil { get; set; }
 
         public FccStationInfo.FccStationInfo? Station { get; set; }
+
+        public ICollection<FccNozzleInfo.FccNozzleInfo> FccNozzleInfos { get; set; }
     }
 }

+ 0 - 4
src/FccLife.Web/FccLite.Web.csproj

@@ -19,8 +19,4 @@
     </Content>
   </ItemGroup>
 
-  <ItemGroup>
-    <Folder Include="Domain\FccNozzleInfo\Output\" />
-  </ItemGroup>
-
 </Project>

+ 5 - 1
src/FccLife.Web/Program.cs

@@ -1,6 +1,8 @@
-using FccLite.Web.Repositories.FccOilInfo;
+using FccLite.Web.Repositories.FccNozzleInfo;
+using FccLite.Web.Repositories.FccOilInfo;
 using FccLite.Web.Repositories.FccStationInfo;
 using FccLite.Web.Repositories.FccTankInfo;
+using FccLite.Web.Services.FccNozzleInfo;
 using FccLite.Web.Services.FccOilInfo;
 using FccLite.Web.Services.FccStaionInfo;
 using FccLite.Web.Services.FccTankInfo;
@@ -24,6 +26,8 @@ builder.Services.AddScoped<IOilInfoService, OilInfoServiceImpl>();
 builder.Services.AddScoped<IOilInfoReposity, OilInfoReposity>();
 builder.Services.AddScoped<ITankInfoService, TankInfoServiceImpl>();
 builder.Services.AddScoped<ITankReposity, TankReposity>();
+builder.Services.AddScoped<INozzleInfnService, NozzleInfoServiceImpl>();
+builder.Services.AddScoped<INozzleInfoReposity, NozzleInfoReposity>();
 
 //swagger
 builder.Services.AddSwaggerGen(c =>

+ 3 - 2
src/FccLife.Web/Repositories/FccNozzleInfo/NozzleInfoReposity.cs

@@ -40,11 +40,12 @@ namespace FccLite.Web.Repositories.FccNozzleInfo
                     Logger.Info($"find nozzle info with id : {uploadNozzleInfoInput.Id} for update, result is null");
                     return 0;
                 }
-                fccNozzleInfo.MachineIp = uploadNozzleInfoInput.MachineIp;
+                fccNozzleInfo.MachineIp = uploadNozzleInfoInput.Ip;
                 fccNozzleInfo.FuelPoint = uploadNozzleInfoInput.FuelPoint;
                 fccNozzleInfo.InternalNum = uploadNozzleInfoInput.InternalNum;
-                fccNozzleInfo.ExternalNum = uploadNozzleInfoInput.ExternalNum;
+                fccNozzleInfo.ExternalNum = uploadNozzleInfoInput.NozzleNum;
                 fccNozzleInfo.TankId = uploadNozzleInfoInput.TankId;
+                fccNozzleInfo.TankNum = uploadNozzleInfoInput.TankNum;
                 
                 return await _dbContext.SaveChangesAsync();
             }

+ 12 - 3
src/FccLife.Web/Repositories/FccOilInfo/OilInfoReposity.cs

@@ -21,13 +21,22 @@ namespace FccLite.Web.Repositories.FccOilInfo
         /// <returns></returns>
         public async Task<bool> DeleteByID(long id)
         {
-            Domain.FccOilInfo.FccOilInfo? info = await _dbContext.OilInfos.FindAsync(id);
-            if (info == null)
+            Domain.FccOilInfo.FccOilInfo? oilInfo = await _dbContext.OilInfos.FirstOrDefaultAsync(info => info.Id == id);
+            if (oilInfo == null)
             {
                 Logger.Info($"find oil info with id:{id} for delete,result is null");
                 return false;
             }
-            _dbContext.OilInfos.Remove(info);
+            //批量将油罐关联的油品置为null
+            List<Domain.FccTankInfo.FccTankInfo> fccTankInfos = await _dbContext.TankInfos.Where(info => info.OilId == oilInfo.Id).ToListAsync();
+            foreach(var tank in fccTankInfos)
+            {
+                _dbContext.Entry(tank).State = EntityState.Modified;
+                tank.OilId = null;
+                tank.OilName = null;
+            }
+
+            _dbContext.OilInfos.Remove(oilInfo);
             await _dbContext.SaveChangesAsync();
             return true;
         }

+ 8 - 1
src/FccLife.Web/Repositories/FccTankInfo/ITankReposity.cs

@@ -1,4 +1,5 @@
-using FccLite.Web.Domain.FccTankInfo;
+using FccLite.Web.Domain.FccNozzleInfo.Output;
+using FccLite.Web.Domain.FccTankInfo;
 using FccLite.Web.Domain.FccTankInfo.Input;
 using FccLite.Web.Domain.FccTankInfo.Output;
 
@@ -40,5 +41,11 @@ namespace FccLite.Web.Repositories.FccTankInfo
         /// <param name="id">油罐id</param>
         /// <returns></returns>
         Task<int> DeleteTankById(long id);
+
+        /// <summary>
+        /// 获取油罐id,油罐号
+        /// </summary>
+        /// <returns></returns>
+        Task<List<DetailsNozzleInfoOutput.RelatableTank>> GetTankInfo();
     }
 }

+ 22 - 4
src/FccLife.Web/Repositories/FccTankInfo/TankReposity.cs

@@ -1,4 +1,5 @@
-using FccLite.Web.Domain.FccTankInfo.Input;
+using FccLite.Web.Domain.FccNozzleInfo.Output;
+using FccLite.Web.Domain.FccTankInfo.Input;
 using FccLite.Web.Domain.FccTankInfo.Output;
 using FccLite.Web.utils.database;
 using Microsoft.EntityFrameworkCore;
@@ -34,13 +35,17 @@ namespace FccLite.Web.Repositories.FccTankInfo
         /// <returns></returns>
         public async Task<int> DeleteTankById(long id)
         {
-            Domain.FccTankInfo.FccTankInfo? info = await _dbContext.TankInfos.FirstOrDefaultAsync(info => info.Id == id);
-            if (info == null)
+            Domain.FccTankInfo.FccTankInfo? tankInfo = await _dbContext.TankInfos.FirstOrDefaultAsync(info => info.Id == id);
+            if (tankInfo == null)
             {
                 Logger.Info($"find tank info with id :{id} for delete,result is null");
                 return 0;
             }
-            _dbContext.TankInfos.Remove(info);
+            //先批量删除所关联的油枪
+            List<Domain.FccNozzleInfo.FccNozzleInfo> fccNozzleInfos = await _dbContext.NozzleInfos.Where(info => info.TankId == tankInfo.Id).ToListAsync();
+            _dbContext.NozzleInfos.RemoveRange(fccNozzleInfos);
+            //再删除油罐
+            _dbContext.TankInfos.Remove(tankInfo);
             return await _dbContext.SaveChangesAsync();
         }
 
@@ -102,5 +107,18 @@ namespace FccLite.Web.Repositories.FccTankInfo
 
             return await _dbContext.SaveChangesAsync();
         }
+
+        /// <summary>
+        /// 获取油罐id,油罐号
+        /// </summary>
+        /// <returns></returns>
+        public async Task<List<DetailsNozzleInfoOutput.RelatableTank>> GetTankInfo()
+        {
+            return await _dbContext.TankInfos.Select(info => new DetailsNozzleInfoOutput.RelatableTank
+            {
+                TankId = info.Id,
+                TankNum = info.Number
+            }).ToListAsync();
+        }
     }
 }

+ 29 - 0
src/FccLife.Web/Services/FccNozzleInfo/INozzleInfnService.cs

@@ -0,0 +1,29 @@
+using FccLite.Web.Domain.FccNozzleInfo.Input;
+using FccLite.Web.Domain.FccNozzleInfo.Output;
+
+namespace FccLite.Web.Services.FccNozzleInfo
+{
+    public interface INozzleInfnService
+    {
+        /// <summary>
+        /// 新增、修改油枪信息
+        /// </summary>
+        /// <param name="nozzleInfoInput">油枪信息</param>
+        /// <returns></returns>
+        Task<SetNozzleInfoOutput> UploadDetailsNozzleInfo(UploadNozzleInfoInput nozzleInfoInput);
+
+        /// <summary>
+        /// 根据id获取油枪信息
+        /// </summary>
+        /// <param name="id">油枪id</param>
+        /// <returns></returns>
+        Task<DetailsNozzleInfoOutput?> GetDetailsNozzleInfoById(long id);
+
+        /// <summary>
+        /// 根据油枪id删除油枪信息
+        /// </summary>
+        /// <param name="id">油枪id</param>
+        /// <returns></returns>
+        Task<SetNozzleInfoOutput> DeleteNozzleInfoByID(long id);
+    }
+}

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

@@ -0,0 +1,101 @@
+using FccLite.Web.Domain.FccNozzleInfo.Input;
+using FccLite.Web.Domain.FccNozzleInfo.Output;
+using FccLite.Web.Repositories.FccNozzleInfo;
+using FccLite.Web.Repositories.FccTankInfo;
+
+namespace FccLite.Web.Services.FccNozzleInfo
+{
+    public class NozzleInfoServiceImpl : INozzleInfnService
+    {
+        static NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
+
+        private readonly INozzleInfoReposity _nozzleInfoReposity;
+        private readonly ITankReposity _tankReposity;
+        public NozzleInfoServiceImpl(INozzleInfoReposity nozzleInfoReposity,ITankReposity tankReposity)
+        {
+            _nozzleInfoReposity = nozzleInfoReposity;
+            _tankReposity = tankReposity;
+        }
+        /// <summary>
+        /// 新增、修改油枪信息
+        /// </summary>
+        /// <param name="nozzleInfoInput">油枪信息</param>
+        /// <returns></returns>
+        public async Task<SetNozzleInfoOutput> UploadDetailsNozzleInfo(UploadNozzleInfoInput nozzleInfoInput)
+        {
+            int row = await _nozzleInfoReposity.UploadNozzleInfo(nozzleInfoInput);
+            Logger.Info($"upload nozzle info ,chage row {row}");
+            if(row > 0)
+            {
+                return new SetNozzleInfoOutput()
+                {
+                    Result = true,
+                    Message = "保存成功"
+                };
+            }
+
+            return new SetNozzleInfoOutput()
+            {
+                Result = false,
+                Message = "保存失败"
+            };
+        }
+
+        /// <summary>
+        /// 根据id获取油枪信息
+        /// </summary>
+        /// <param name="id">油枪id</param>
+        /// <returns></returns>
+        public async Task<DetailsNozzleInfoOutput?> GetDetailsNozzleInfoById(long id)
+        {
+            Domain.FccNozzleInfo.FccNozzleInfo? fccNozzleInfo = await _nozzleInfoReposity.GetNozzleInfoById(id);
+            if (fccNozzleInfo == null)
+            {
+                Logger.Info($"find nozzle Info with id {id} for details ,result is null");
+                return null;
+            }
+            List<DetailsNozzleInfoOutput.RelatableTank> tanks = await _tankReposity.GetTankInfo();
+            Logger.Info($"find all tanks info for nozzle info details,count is {tanks.Count}");
+
+            return new DetailsNozzleInfoOutput()
+            {
+                Id = fccNozzleInfo.Id,
+                NozzleNum = fccNozzleInfo.ExternalNum,
+                Ip = fccNozzleInfo.MachineIp,
+                FuelPoint = fccNozzleInfo.FuelPoint,
+                InternalNum = fccNozzleInfo.InternalNum,
+                TankId = fccNozzleInfo.TankId,
+                TankNum = fccNozzleInfo.TankNum,
+                RelatableTanks = tanks,
+            };
+            
+        }
+
+
+
+        /// <summary>
+        /// 根据油枪id删除油枪信息
+        /// </summary>
+        /// <param name="id">油枪id</param>
+        /// <returns></returns>
+        public async Task<SetNozzleInfoOutput> DeleteNozzleInfoByID(long id)
+        {
+            int row = await _nozzleInfoReposity.DeleteNozzleInfoById(id);
+            Logger.Info($"delete nozzle info ,chage row {row}");
+            if (row > 0)
+            {
+                return new SetNozzleInfoOutput()
+                {
+                    Result = true,
+                    Message = "删除成功"
+                };
+            }
+
+            return new SetNozzleInfoOutput()
+            {
+                Result = false,
+                Message = "删除失败"
+            };
+        }
+    }
+}

+ 1 - 1
src/FccLife.Web/Services/FccTankInfo/TankInfoServiceImpl.cs

@@ -19,7 +19,7 @@ namespace FccLite.Web.Services.FccTankInfo
         }
 
         /// <summary>
-        /// 统计站点 id 获取油罐基本信息
+        /// 通过站点 id 获取油罐基本信息
         /// </summary>
         /// <param name="stationId">站点id</param>
         /// <returns></returns>