From e76d63b2d68f3e85706eba6577e642196557ba96 Mon Sep 17 00:00:00 2001 From: lwh <2679599887@qq.com> Date: Sun, 18 Jun 2023 15:56:12 +0800 Subject: [PATCH] =?UTF-8?q?feat=20=E6=B7=BB=E5=8A=A0=E7=89=A9=E6=B5=81?= =?UTF-8?q?=E5=85=AC=E5=8F=B8=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LogisticsCompanys/LogisticsCompanyDto.cs | 56 ++++++ .../LogisticsCompanys/LogisticsCompany.cs | 70 +++++++ .../LogisticsCompanys/LogisticsCompanyVo.cs | 62 ++++++ .../LogisticsCompanyRepository.cs | 20 ++ .../LogisticsCompanyService.cs | 176 +++++++++++++++++ .../ILogisticsCompanyService.cs | 59 ++++++ .../LogisticsCompanyController.cs | 180 ++++++++++++++++++ 7 files changed, 623 insertions(+) create mode 100644 ARW.Model/Dto/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyDto.cs create mode 100644 ARW.Model/Models/Business/LogisticsManage/LogisticsCompanys/LogisticsCompany.cs create mode 100644 ARW.Model/Vo/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyVo.cs create mode 100644 ARW.Repository/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyRepository.cs create mode 100644 ARW.Service/Business/BusinessService/LogisticsManage/LogisticsCompanys/LogisticsCompanyService.cs create mode 100644 ARW.Service/Business/IBusinessService/LogisticsManage/LogisticsCompanys/ILogisticsCompanyService.cs create mode 100644 ARW.WebApi/Controllers/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyController.cs diff --git a/ARW.Model/Dto/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyDto.cs b/ARW.Model/Dto/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyDto.cs new file mode 100644 index 0000000..89014f9 --- /dev/null +++ b/ARW.Model/Dto/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyDto.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; + +namespace ARW.Model.Dto.Business.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司输入对象 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + public class LogisticsCompanyDto + { + + public int LogisticsCompanyId { get; set; } + + public long LogisticsCompanyGuid { get; set; } + + [Required(ErrorMessage = "物流公司名称不能为空")] + public string LogisticsCompanyName { get; set; } + + [Required(ErrorMessage = "物流公司编码不能为空")] + public string LogisticsCompanyCode { get; set; } + + [Required(ErrorMessage = "排序不能为空")] + public int LogisticsCompanySort { get; set; } + + + + + + } + + + /// + /// 物流公司查询对象 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + public class LogisticsCompanyQueryDto : PagerInfo + { + + public string LogisticsCompanyName { get; set; } + + public string LogisticsCompanyCode { get; set; } + + public string ids { get; set; } + } + + + + +} diff --git a/ARW.Model/Models/Business/LogisticsManage/LogisticsCompanys/LogisticsCompany.cs b/ARW.Model/Models/Business/LogisticsManage/LogisticsCompanys/LogisticsCompany.cs new file mode 100644 index 0000000..8de1ac1 --- /dev/null +++ b/ARW.Model/Models/Business/LogisticsManage/LogisticsCompanys/LogisticsCompany.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using SqlSugar; +using OfficeOpenXml.Attributes; +using Newtonsoft.Json; + +namespace ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司,数据实体对象 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + [SugarTable("tb_logistics_company")] + public class LogisticsCompany : BusinessBase + { + + /// + /// 描述 : + /// 空值 : false + /// + [EpplusTableColumn(Header = "LogisticsCompanyId")] + [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnName = "logistics_company_id")] + public int LogisticsCompanyId { get; set; } + + + /// + /// 描述 : + /// 空值 : false + /// + [EpplusTableColumn(Header = "LogisticsCompanyGuid")] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true, IsIdentity = false, ColumnName = "logistics_company_guid")] + public long LogisticsCompanyGuid { get; set; } + + + /// + /// 描述 :物流公司名称 + /// 空值 : false + /// + [EpplusTableColumn(Header = "物流公司名称")] + [SugarColumn(ColumnName = "logistics_company_name")] + public string LogisticsCompanyName { get; set; } + + + /// + /// 描述 :物流公司编码 + /// 空值 : false + /// + [EpplusTableColumn(Header = "物流公司编码")] + [SugarColumn(ColumnName = "logistics_company_code")] + public string LogisticsCompanyCode { get; set; } + + + /// + /// 描述 :排序 + /// 空值 : false + /// + [EpplusTableColumn(Header = "排序")] + [SugarColumn(ColumnName = "logistics_company_sort")] + public int LogisticsCompanySort { get; set; } + + + + + + + } +} \ No newline at end of file diff --git a/ARW.Model/Vo/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyVo.cs b/ARW.Model/Vo/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyVo.cs new file mode 100644 index 0000000..8f92dff --- /dev/null +++ b/ARW.Model/Vo/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyVo.cs @@ -0,0 +1,62 @@ +using Newtonsoft.Json; +using OfficeOpenXml.Attributes; +using SqlSugar; +using System; + +namespace ARW.Model.Vo.Business.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司展示对象 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + public class LogisticsCompanyVo + { + + + /// + /// 描述 : + /// + [EpplusIgnore] + public int LogisticsCompanyId { get; set; } + + + /// + /// 描述 : + /// + [JsonConverter(typeof(ValueToStringConverter))] + [EpplusIgnore] + public long LogisticsCompanyGuid { get; set; } + + + /// + /// 描述 :物流公司名称 + /// + [EpplusTableColumn(Header = "物流公司名称")] + public string LogisticsCompanyName { get; set; } + + + /// + /// 描述 :物流公司编码 + /// + [EpplusTableColumn(Header = "物流公司编码")] + public string LogisticsCompanyCode { get; set; } + + + /// + /// 描述 :排序 + /// + [EpplusTableColumn(Header = "排序")] + public int LogisticsCompanySort { get; set; } + + + /// + /// 描述 :添加时间 + /// + [EpplusTableColumn(Header = "添加时间")] + [EpplusIgnore] + public string CreateTime { get; set; } + + } +} diff --git a/ARW.Repository/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyRepository.cs b/ARW.Repository/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyRepository.cs new file mode 100644 index 0000000..aa27c20 --- /dev/null +++ b/ARW.Repository/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyRepository.cs @@ -0,0 +1,20 @@ +using System; +using Infrastructure.Attribute; +using ARW.Repository.System; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; + +namespace ARW.Repository.Business.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司仓储 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + [AppService(ServiceLifetime = LifeTime.Transient)] + public class LogisticsCompanyRepository : BaseRepository + { + #region 业务逻辑代码 + #endregion + } +} \ No newline at end of file diff --git a/ARW.Service/Business/BusinessService/LogisticsManage/LogisticsCompanys/LogisticsCompanyService.cs b/ARW.Service/Business/BusinessService/LogisticsManage/LogisticsCompanys/LogisticsCompanyService.cs new file mode 100644 index 0000000..aacd30c --- /dev/null +++ b/ARW.Service/Business/BusinessService/LogisticsManage/LogisticsCompanys/LogisticsCompanyService.cs @@ -0,0 +1,176 @@ +using Infrastructure.Attribute; +using Microsoft.AspNetCore.Http; +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Infrastructure; +using ARW.Model; +using ARW.Repository; +using ARW.Repository.Business.LogisticsManage.LogisticsCompanys; +using ARW.Service.Business.IBusinessService.LogisticsManage.LogisticsCompanys; +using ARW.Model.Dto.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Vo.Business.LogisticsManage.LogisticsCompanys; + +namespace ARW.Service.Business.BusinessService.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司接口实现类 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + [AppService(ServiceType = typeof(ILogisticsCompanyService), ServiceLifetime = LifeTime.Transient)] + public class LogisticsCompanyServiceImpl : BaseService, ILogisticsCompanyService + { + private readonly LogisticsCompanyRepository _LogisticsCompanyRepository; + + public LogisticsCompanyServiceImpl(LogisticsCompanyRepository LogisticsCompanyRepository) + { + this._LogisticsCompanyRepository = LogisticsCompanyRepository; + } + + #region 业务逻辑代码 + + + /// + /// 查询物流公司分页列表 + /// + public async Task> GetLogisticsCompanyList(LogisticsCompanyQueryDto parm) + { + //开始拼装查询条件d + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LogisticsCompanyName), s => s.LogisticsCompanyName.Contains(parm.LogisticsCompanyName)); + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.LogisticsCompanyCode), s => s.LogisticsCompanyCode.Contains(parm.LogisticsCompanyCode)); + var query = _LogisticsCompanyRepository + .Queryable() + .Where(predicate.ToExpression()) + .OrderBy(s => s.LogisticsCompanySort, OrderByType.Asc) + .Select(s => new LogisticsCompanyVo + { + LogisticsCompanyId = s.LogisticsCompanyId, + LogisticsCompanyGuid = s.LogisticsCompanyGuid, + LogisticsCompanyName = s.LogisticsCompanyName, + LogisticsCompanyCode = s.LogisticsCompanyCode, + LogisticsCompanySort = s.LogisticsCompanySort, + CreateTime = s.Create_time.ToString("yyyy-MM-dd HH:mm") + }); + + + return await query.ToPageAsync(parm); + } + + /// + /// 添加或修改物流公司 + /// + public async Task AddOrUpdateLogisticsCompany(LogisticsCompany model) + { + if (model.LogisticsCompanyId != 0) + { + var response = await _LogisticsCompanyRepository.UpdateAsync(model); + return "修改成功!"; + } + else + { + + var response = await _LogisticsCompanyRepository.InsertReturnSnowflakeIdAsync(model); + return "添加成功!"; + } + } + + #region Excel处理 + /// + /// 数据导入处理 + /// + public async Task HandleImportData(LogisticsCompanyVo LogisticsCompany) + { + return LogisticsCompany; + } + + + /// + /// Excel导入 + /// + public async Task ImportExcel(LogisticsCompany LogisticsCompany, int index, bool isUpdateSupport, string user) + { + try + { + // 空值判断 + // if (LogisticsCompany.LogisticsCompanyId == null) throw new CustomException("物流公司不能为空"); + var company = await GetFirstAsync(s => s.LogisticsCompanyName == LogisticsCompany.LogisticsCompanyName); + if (company != null) throw new CustomException("已存在!"); + + if (isUpdateSupport) + { + // 判断唯一值 + var model = await GetFirstAsync(s => s.LogisticsCompanyId == LogisticsCompany.LogisticsCompanyId); + + // 如果为空就新增数据 + if (model == null) + { + // 开启事务 + var res = await UseTranAsync(async () => + { + var addRes = await AddOrUpdateLogisticsCompany(LogisticsCompany); + }); + var addStr = $"第 {index} 行 => 物流公司:【{LogisticsCompany.LogisticsCompanyName}】新增成功!
"; + return addStr; + } + else + { + // 如果有数据就进行修改 + // 开启事务 + await UseTranAsync(async () => + { + LogisticsCompany.LogisticsCompanyId = model.LogisticsCompanyId; + LogisticsCompany.LogisticsCompanyGuid = model.LogisticsCompanyGuid; + LogisticsCompany.Update_by = user; + LogisticsCompany.Update_time = DateTime.Now; + var editRes = await AddOrUpdateLogisticsCompany(LogisticsCompany); + }); + var editStr = $"第 {index} 行 => 物流公司:【{LogisticsCompany.LogisticsCompanyName}】更新成功!
"; + return editStr; + } + } + else + { + // 开启事务 + var res = await UseTranAsync(async () => + { + var addRes = await AddOrUpdateLogisticsCompany(LogisticsCompany); + }); + //Console.WriteLine(res.IsSuccess); + var addStr = $"第 {index} 行 => 物流公司:【{LogisticsCompany.LogisticsCompanyName}】新增成功!
"; + return addStr; + } + } + catch (Exception ex) + { + var errorRes = $"第 {index} 行 => 物流公司:【{LogisticsCompany.LogisticsCompanyName}】导入失败!{ex.Message}
"; + return errorRes; + throw; + } + } + + + + /// + /// Excel数据导出处理 + /// + public async Task> HandleExportData(List data) + { + return data; + } + + #endregion + + + + #endregion + + } +} diff --git a/ARW.Service/Business/IBusinessService/LogisticsManage/LogisticsCompanys/ILogisticsCompanyService.cs b/ARW.Service/Business/IBusinessService/LogisticsManage/LogisticsCompanys/ILogisticsCompanyService.cs new file mode 100644 index 0000000..c892b92 --- /dev/null +++ b/ARW.Service/Business/IBusinessService/LogisticsManage/LogisticsCompanys/ILogisticsCompanyService.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ARW.Model; +using ARW.Model.Dto.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Vo.Business.LogisticsManage.LogisticsCompanys; + +namespace ARW.Service.Business.IBusinessService.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司接口类 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + public interface ILogisticsCompanyService : IBaseService + { + /// + /// 获取物流公司分页列表 + /// + /// + /// + Task> GetLogisticsCompanyList(LogisticsCompanyQueryDto parm); + + + /// + /// 添加或修改物流公司 + /// + /// + /// + Task AddOrUpdateLogisticsCompany(LogisticsCompany parm); + + + /// + /// 数据导入处理 + /// + /// + /// + Task HandleImportData(LogisticsCompanyVo LogisticsCompanyVo); + + + /// + /// Excel导入 + /// + /// + /// + Task ImportExcel(LogisticsCompany LogisticsCompany,int index,bool isUpdateSupport,string user); + + /// + /// Excel导出 + /// + Task> HandleExportData(List data); + + + } +} diff --git a/ARW.WebApi/Controllers/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyController.cs b/ARW.WebApi/Controllers/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyController.cs new file mode 100644 index 0000000..f124d14 --- /dev/null +++ b/ARW.WebApi/Controllers/Business/LogisticsManage/LogisticsCompanys/LogisticsCompanyController.cs @@ -0,0 +1,180 @@ +using Infrastructure; +using Infrastructure.Attribute; +using Infrastructure.Enums; +using Infrastructure.Model; +using Mapster; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ARW.Admin.WebApi.Extensions; +using ARW.Admin.WebApi.Filters; +using ARW.Common; +using ARW.Model.Dto.Business.LogisticsManage.LogisticsCompanys; +using ARW.Service.Business.IBusinessService.LogisticsManage.LogisticsCompanys; +using ARW.Admin.WebApi.Controllers; +using ARW.Model.Models.Business.LogisticsManage.LogisticsCompanys; +using ARW.Model.Vo.Business.LogisticsManage.LogisticsCompanys; +using Microsoft.AspNetCore.Authorization; +using ARW.Admin.WebApi.Framework; + + +namespace ARW.WebApi.Controllers.Business.LogisticsManage.LogisticsCompanys +{ + /// + /// 物流公司控制器 + /// + /// @author 黎文豪 + /// @date 2023-06-18 + /// + [Verify] + [Route("business/[controller]")] + public class LogisticsCompanyController : BaseController + { + private readonly ILogisticsCompanyService _LogisticsCompanyService; + + /// + /// 依赖注入 + /// + /// 物流公司服务 + public LogisticsCompanyController(ILogisticsCompanyService LogisticsCompanyService) + { + _LogisticsCompanyService = LogisticsCompanyService; + } + + + /// + /// 获取物流公司列表 + /// + /// 查询参数 + /// + [HttpGet("getLogisticsCompanyList")] + [ActionPermissionFilter(Permission = "business:logisticscompany:list")] + public async Task GetLogisticsCompanyList([FromQuery] LogisticsCompanyQueryDto parm) + { + var res = await _LogisticsCompanyService.GetLogisticsCompanyList(parm); + return SUCCESS(res); + } + + /// + /// 添加或修改物流公司 + /// + /// + /// + [HttpPost("addOrUpdateLogisticsCompany")] + [ActionPermissionFilter(Permission = "business:logisticscompany:addOrUpdate")] + [Log(Title = "添加或修改物流公司", BusinessType = BusinessType.ADDORUPDATE)] + public async Task AddOrUpdateLogisticsCompany([FromBody] LogisticsCompanyDto parm) + { + if (parm == null) { throw new CustomException("请求参数错误"); } + + var modal = new LogisticsCompany(); + if (parm.LogisticsCompanyId != 0) modal = parm.Adapt().ToUpdate(HttpContext); + else modal = parm.Adapt().ToCreate(HttpContext); + + var res = await _LogisticsCompanyService.AddOrUpdateLogisticsCompany(modal); + return SUCCESS(res); + } + + /// + /// 删除物流公司 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "business:logisticscompany:delete")] + [Log(Title = "物流公司删除", BusinessType = BusinessType.DELETE)] + public IActionResult Delete(string ids) + { + long[] idsArr = Tools.SpitLongArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + var response = _LogisticsCompanyService.Delete(idsArr); + return SUCCESS("删除成功!"); + } + + /// + /// 导入物流公司 + /// + /// 使用IFromFile必须使用name属性否则获取不到文件 + /// 是否需要更新 + /// + [HttpPost("importData")] + [Log(Title = "物流公司导入", BusinessType = BusinessType.IMPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [ActionPermissionFilter(Permission = "business:logisticscompany:import")] + public async Task ImportExcel([FromForm(Name = "file")] IFormFile formFile, bool updateSupport) + { + var isUpdateSupport = updateSupport; + IEnumerable parm = ExcelHelper.ImportData(formFile.OpenReadStream()); + + var i = 0; + var msgList = new List(); + foreach (LogisticsCompanyVo item in parm) + { + i++; + var LogisticsCompany = await _LogisticsCompanyService.HandleImportData(item); + var modal = LogisticsCompany.Adapt().ToCreate(HttpContext); + var user = JwtUtil.GetLoginUser(App.HttpContext).UserName; + var msg = await _LogisticsCompanyService.ImportExcel(modal, i, isUpdateSupport, user); + msgList.Add(msg); + } + + return SUCCESS(msgList.ToArray()); + } + + + /// + /// 物流公司导入模板下载 + /// + /// + [HttpGet("importTemplate")] + [Log(Title = "物流公司模板", BusinessType = BusinessType.EXPORT, IsSaveRequestData = false, IsSaveResponseData = false)] + [AllowAnonymous] + public IActionResult ImportTemplateExcel() + { + List LogisticsCompany = new List(); + MemoryStream stream = new MemoryStream(); + + // 示例数据 + var values = new List() { "顺丰速运", "shunfeng", "100" }; + string sFileName = DownloadImportTemplate(LogisticsCompany, stream, "物流公司导入模板", values); + + return File(stream.ToArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", $"{sFileName}"); + } + + /// + /// 导出物流公司 + /// + /// + [Log(Title = "物流公司导出", BusinessType = BusinessType.EXPORT, IsSaveResponseData = false)] + [HttpGet("exportLogisticsCompany")] + [ActionPermissionFilter(Permission = "business:logisticscompany:export")] + public async Task ExportExcel([FromQuery] LogisticsCompanyQueryDto parm) + { + parm.PageSize = 10000; + var list = await _LogisticsCompanyService.GetLogisticsCompanyList(parm); + var data = list.Result; + + // 选中数据 + if (!string.IsNullOrEmpty(parm.ids)) + { + int[] idsArr = Tools.SpitIntArrary(parm.ids); + var selectDataList = new List(); + foreach (var item in idsArr) + { + var select_data = data.Where(s => s.LogisticsCompanyId == item).First(); + selectDataList.Add(select_data); + } + data = selectDataList; + } + + + + // 导出数据处理 + var handleData = await _LogisticsCompanyService.HandleExportData(data); + + string sFileName = ExportExcel(handleData, "LogisticsCompany", "物流公司列表"); + return SUCCESS(new { path = "/export/" + sFileName, fileName = sFileName }); + } + + + + + } +}