Przeglądaj źródła

Merge branch 'develop' of http://132.232.92.186:3000/XinXiBu/OA2023 into develop

yuanrf 6 miesięcy temu
rodzic
commit
237ca0d8df

+ 2 - 1
OASystem/EntitySync/Program.cs

@@ -142,7 +142,8 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Sys_ExchangeRateRecord),//团组接待意见调查 
     //typeof(Res_TranslatorLibrary),//翻译人员库 
     //typeof(Grp_OfficialDutyLinkTranslator),//公务信息关联翻译人员 
-    typeof(Sys_DeviceToken)
+    //typeof(Sys_DeviceToken),
+    typeof(Res_MediaSuppliers)//策划部供应商资料
 
 });
 Console.WriteLine("数据库结构同步完成!");

+ 54 - 6
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -5,6 +5,7 @@ using Aspose.Words.Drawing;
 using Aspose.Words.Tables;
 using EyeSoft.Collections.Generic;
 using EyeSoft.IO;
+using Google.Protobuf.WellKnownTypes;
 using Microsoft.AspNetCore.SignalR;
 using MySqlX.XDevAPI.Relational;
 using NetUV.Core.Handles;
@@ -32,6 +33,7 @@ using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.ViewModels;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.Statistics;
+using OASystem.Infrastructure.Repositories.CRM;
 using OASystem.Infrastructure.Repositories.Financial;
 using OASystem.Infrastructure.Repositories.Groups;
 using OfficeOpenXml;
@@ -114,6 +116,7 @@ namespace OASystem.API.Controllers
         private readonly OpinionaireRepository _opinionaireRep;  //对外收款账单仓库
         private readonly List<CurrencyInfo> _currencyInit;
         private readonly List<int> _portTypeData;
+        private readonly TableOperationRecordRepository _tableorRep;
 
         public GroupsController(
             ILogger<GroupsController> logger,
@@ -150,7 +153,8 @@ namespace OASystem.API.Controllers
             FeeAuditRepository feeAuditRep,
             VisaCommissionRepository visaCommissionRep,
             ForeignReceivablesRepository ffrRep,
-            OpinionaireRepository opinionaireRep
+            OpinionaireRepository opinionaireRep,
+            TableOperationRecordRepository tableorRep
             )
         {
             _logger = logger;
@@ -204,6 +208,7 @@ namespace OASystem.API.Controllers
                     new CurrencyInfo (){ CurrencyCode="HKD",CurrencyName = "港币",Rate = 0.9500M },
                 };
             _portTypeData = new List<int>() { 2, 3 };
+            _tableorRep = tableorRep;
 
         }
 
@@ -11570,7 +11575,7 @@ ORDER by  gctggrc.id DESC
             #endregion
 
             #endregion
-
+            
             return Ok(await _hotelPriceRep._ItemsByDiId(_dto.PortType, _dto.DiId));
         }
 
@@ -11794,13 +11799,44 @@ ORDER by  gctggrc.id DESC
                 int ccpId = (int)_view.Data.GetType().GetProperty("ccpId").GetValue(_view.Data, null);
                 int sign = (int)_view.Data.GetType().GetProperty("sign").GetValue(_view.Data, null);
                 int hotelId = (int)_view.Data.GetType().GetProperty("hotelId").GetValue(_view.Data, null);
+
+                var diId = _dto.DiId;
+                var groupInfo = await _groupRepository.Query(x => x.Id == diId).FirstAsync();
+                var ccpInfo = await _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(x => x.Id == ccpId).FirstAsync();
+
+                #region 操作记录
+
+                var opInfo = new Crm_TableOperationRecord() { 
+                    TableName = "Grp_HotelReservations",
+                    PortType = _dto.PortType,
+                    DataId = hotelId,
+                    CreateUserId = _dto.UserId
+                };
+                var opStatus = OperationEnum.NoOperation;
+                if (_dto.Id<1) //添加操作
+                {
+                    opInfo.OperationItem = OperationEnum.Add;
+                }
+                else if (_dto.Id > 0)
+                {
+                    opInfo.OperationItem = OperationEnum.Edit;
+                }
+                string opRemark = string.Empty;
+                if (ccpInfo != null)
+                {
+                    // USD 1211.86、 CNY 8761.75、汇率:7.2300
+                    var currency = _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.Id == ccpInfo.PaymentCurrency).First()?.Name;
+                    var cnyPrice = ccpInfo.PayMoney * ccpInfo.DayRate;
+                    opRemark = $"{currency} {ccpInfo.PayMoney.ToString("#0.00")}、CNY {cnyPrice.ToString("#0.00")}、汇率:{ccpInfo.DayRate.ToString("#0.0000")}";
+                }
+                opInfo.Remark = opRemark;
+                await _tableorRep.AddAsync(opInfo);
+                #endregion
+
                 _logger.LogInformation($"【iOS推送通知Exception】Begin");
                 //2024-10-21 新增LZ UID
                 var userIds = new List<int>() { 21 };
                 string title = $"费用审核";
-                var diId = _dto.DiId;
-                var groupInfo = await _groupRepository.Query(x => x.Id == diId).FirstAsync();
-                var ccpInfo = await _sqlSugar.Queryable<Grp_CreditCardPayment>().Where(x => x.Id == ccpId).FirstAsync();
                 string content = "";
                 if (_dto.Id == 0) content = $"[新增-酒店费用录入({groupInfo?.TeamName ?? "-"})]一项费用:{(ccpInfo.PayMoney * ccpInfo.DayRate).ToString("#0.00")} CNY;";
                 else if (_dto.Id > 0) content = $"[更新-酒店费用录入({groupInfo?.TeamName ?? "-"})]一项费用:{(ccpInfo.PayMoney * ccpInfo.DayRate).ToString("#0.00")} CNY;";
@@ -11914,12 +11950,24 @@ ORDER by  gctggrc.id DESC
 
             if (pageFunAuthView.DeleteAuth == 0) return Ok(JsonView(false, "您没有删除权限!"));
 
+            #endregion
 
             #endregion
 
+            var data = await _hotelPriceRep._Del(_dto.Id, _dto.UserId);
+
+            #region 操作记录
+            await _tableorRep.AddAsync(new Crm_TableOperationRecord()
+            {
+                TableName = "Grp_HotelReservations",
+                PortType = _dto.PortType,
+                OperationItem = OperationEnum.Del,
+                DataId = _dto.Id,
+                CreateUserId = _dto.UserId
+            });
             #endregion
 
-            return Ok(await _hotelPriceRep._Del(_dto.Id, _dto.UserId));
+            return Ok(data);
         }
 
         /// <summary>

+ 94 - 2
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -45,6 +45,8 @@ namespace OASystem.API.Controllers
         private readonly TourClientListRepository _tourClientListRep;
         private readonly DelegationInfoRepository _delegationInfoRep;
         private readonly TranslatorLibraryRepository _translatorRep;
+        private readonly MediaSuppliersRepository _mediaSupplierRep;
+        private readonly List<int> _portIds;
 
         public ResourceController(
             IMapper mapper, 
@@ -65,7 +67,8 @@ namespace OASystem.API.Controllers
             TicketBlackCodeRepository ticketBlackCodeRep, 
             TourClientListRepository tourClientListRep, 
             DelegationInfoRepository delegationInfoRep,
-            TranslatorLibraryRepository translatorRep
+            TranslatorLibraryRepository translatorRep,
+            MediaSuppliersRepository mediaSupplierRep
             )
         {
             _mapper = mapper;
@@ -87,9 +90,10 @@ namespace OASystem.API.Controllers
             _tourClientListRep = tourClientListRep;
             _delegationInfoRep = delegationInfoRep;
             _translatorRep = translatorRep;
+            _mediaSupplierRep = mediaSupplierRep;
+            _portIds = new List<int> { 1, 2, 3 };
         }
 
-
         #region 车公司资料板块
 
         /// <summary>
@@ -4144,6 +4148,94 @@ WHERE
         }
 
         #endregion
+
+        #region 策划部供应商资料
+
+        /// <summary>
+        /// 策划部供应商资料
+        /// Init
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MediaSupplierInit()
+        {
+            return Ok(JsonView(await _mediaSupplierRep.Init()));
+        }
+
+        /// <summary>
+        /// 策划部供应商资料
+        /// Info
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MediaSupplierInfo(MediaSupplierInfoDto dto)
+        {
+            if (!_portIds.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
+
+            if (dto.Id < 1) return Ok(JsonView(false, MsgTips.Port));
+
+            return Ok(JsonView(await _mediaSupplierRep.Info(dto)));
+        }
+
+        /// <summary>
+        /// 策划部供应商资料
+        /// 分页查询
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MediaSupplierPageItem(MediaSupplierPageItemDto dto)
+        {
+            if (!_portIds.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
+
+            return Ok(JsonView(await _mediaSupplierRep.PageItem(dto)));
+        }
+
+        /// <summary>
+        /// 策划部供应商资料
+        /// 操作(添加 Or 编辑)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MediaSupplierOp(MediaSupplierAddOrEditDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+            var userId = dto.CurrUserId;
+            if (!_portIds.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
+
+            if (userId < 1) return Ok(JsonView(false, MsgTips.UserId));
+
+            return Ok(JsonView(await _mediaSupplierRep.AddOrEdit(dto)));
+        }
+
+        /// <summary>
+        /// 策划部供应商资料
+        /// 删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpPost]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> MediaSupplierSoftDel(MediaSupplierSoftDelDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+            int userId = dto.CurrUserId, id = dto.Id;
+            if (!_portIds.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
+
+            if (userId < 1) return Ok(JsonView(false, MsgTips.UserId));
+            if (id < 1) return Ok(JsonView(false, MsgTips.Id));
+
+            return Ok(JsonView(await _mediaSupplierRep.SoftDel(dto)));
+        }
+
+        #endregion
     }
 }
 

+ 4 - 0
OASystem/OASystem.Domain/AutoMappers/_baseMappingProfile.cs

@@ -251,6 +251,10 @@ namespace OASystem.Domain.AutoMappers
             #region 翻译人员库
             CreateMap<TranslatorLibraryOpDto, Res_TranslatorLibrary>();
             #endregion
+
+            #region 供应商资料库
+            CreateMap<MediaSupplierAddOrEditDto, Res_MediaSuppliers>();
+            #endregion
             #endregion
 
             #region Crm

+ 5 - 0
OASystem/OASystem.Domain/Dtos/Groups/HotelReservationsDto.cs

@@ -80,6 +80,11 @@ namespace OASystem.Domain.Dtos.Groups
         /// </summary>
         public string? DetermineNo { get; set; }
 
+        /// <summary>
+        /// 区域Id
+        /// </summary>
+        public int AreaId { get; set; }
+
         /// <summary>
         /// 城市
         /// </summary>

+ 114 - 0
OASystem/OASystem.Domain/Dtos/Resource/MediaSuppliersDto.cs

@@ -0,0 +1,114 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Dtos.Resource
+{
+    public class MediaSuppliersDto
+    {
+    }
+
+    public class MediaSupplierInfoDto : PortDtoBase
+    {
+        public int Id { get; set; }
+    }
+
+
+    public class MediaSupplierPageItemDto : DtoBase
+    {
+        /// <summary>
+        /// 搜索条件(联系人、单位、电话)
+        /// </summary>
+        public string Search { get; set; }
+    }
+
+    public class MediaSupplierAddOrEditDto : PortDtoBase
+    {
+        /// <summary>
+        /// 编号
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// 用户Id
+        /// </summary>
+        public int CurrUserId { get; set; }
+
+        /// <summary>
+        /// 供应商Type(设置数据外键编号)
+        /// </summary>
+        public int TypeId { get; set; }
+
+        /// <summary>
+        /// 省份
+        /// </summary>
+        public string Privince { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        public string City { get; set; }
+
+        /// <summary>
+        /// 单位名称
+        /// </summary>
+        public string UnitName { get; set; }
+
+        /// <summary>
+        /// 单位缩写
+        /// </summary>
+        public string UnitAbbreviation { get; set; }
+
+        /// <summary>
+        /// 单位地址
+        /// </summary>
+        public string UnitAddress { get; set; }
+
+        /// <summary>
+        /// 单位联系人
+        /// </summary>
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人性别
+        /// </summary>
+        public int Sex { get; set; }
+
+        /// <summary>
+        /// 联系人职位
+        /// </summary>
+        public string Post { get; set; }
+
+        /// <summary>
+        /// 联系人电话
+        /// </summary>
+        public string Tel { get; set; }
+
+        /// <summary>
+        /// 联系人邮箱
+        /// </summary>
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 联系人微信
+        /// </summary>
+        public string WeChat { get; set; }
+        /// <summary>
+        /// 传真
+        /// </summary>
+        public string Fax { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string Remark { get; set; }
+    }
+
+    public class MediaSupplierSoftDelDto : PortDtoBase {
+        public int CurrUserId { get; set; }
+        public int Id { get; set; }
+    }
+
+}

+ 7 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_HotelReservations.cs

@@ -42,6 +42,13 @@ namespace OASystem.Domain.Entities.Groups
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(225)")]
         public string DetermineNo { get; set; }
+
+        /// <summary>
+        /// 区域Id(Grp_NationalTravelFee Id)
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDataType = "int")]
+        public int AreaId { get; set; }
+
         /// <summary>
         /// 所在城市
         /// </summary>

+ 93 - 0
OASystem/OASystem.Domain/Entities/Resource/Res_MediaSuppliers.cs

@@ -0,0 +1,93 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Resource
+{
+    /// <summary>
+    /// 策划部供应商资料
+    /// </summary>
+    [SugarTable("Res_MediaSuppliers")]
+    public class Res_MediaSuppliers : EntityBase
+    {
+        /// <summary>
+        /// 供应商Type(设置数据外键编号)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "供应商关联团组", ColumnName = "TypeId", IsNullable = true, ColumnDataType = "int")]
+        public int TypeId { get; set; }
+
+        /// <summary>
+        /// 省份
+        /// </summary>
+        [SugarColumn(ColumnDescription = "省份", ColumnName = "Privince", IsNullable = true, ColumnDataType = "varchar(120)")]
+        public string Privince { get; set; }
+
+        /// <summary>
+        /// 城市
+        /// </summary>
+        [SugarColumn(ColumnDescription = "城市", ColumnName = "City", IsNullable = true, ColumnDataType = "varchar(120)")]
+        public string City { get; set; }
+
+        /// <summary>
+        /// 单位名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单位名称", ColumnName = "UnitName", IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string UnitName { get; set; }
+
+        /// <summary>
+        /// 单位缩写
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单位缩写", ColumnName = "UnitAbbreviation", IsNullable = true, ColumnDataType = "varchar(200)")]
+        public string UnitAbbreviation { get; set; }
+
+        /// <summary>
+        /// 单位地址
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单位地址", ColumnName = "UnitAddress", IsNullable = true, ColumnDataType = "varchar(120)")]
+        public string UnitAddress { get; set; }
+
+        /// <summary>
+        /// 单位联系人
+        /// </summary>
+        [SugarColumn(ColumnDescription = "单位联系人", ColumnName = "Contact", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Contact { get; set; }
+
+        /// <summary>
+        /// 联系人性别
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系人性别", ColumnName = "Sex", IsNullable = true, ColumnDataType = "int")]
+        public int Sex { get; set; }
+
+        /// <summary>
+        /// 联系人职位
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系人职位", ColumnName = "Post", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Post { get; set; }
+
+        /// <summary>
+        /// 联系人电话
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系人电话", ColumnName = "Tel", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Tel { get; set; }
+
+        /// <summary>
+        /// 联系人邮箱
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系人邮箱", ColumnName = "Email", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Email { get; set; }
+
+        /// <summary>
+        /// 联系人微信
+        /// </summary>
+        [SugarColumn(ColumnDescription = "联系人微信", ColumnName = "WeChat", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string WeChat { get; set; }
+        /// <summary>
+        /// 传真
+        /// </summary>
+        [SugarColumn(ColumnDescription = "传真", ColumnName = "Fax", IsNullable = true, ColumnDataType = "varchar(100)")]
+        public string Fax { get; set; }
+
+    }
+}

+ 5 - 0
OASystem/OASystem.Domain/ViewModels/Groups/HotelReservationsByDiIdView.cs

@@ -135,6 +135,11 @@ namespace OASystem.Domain.ViewModels.Groups
         /// </summary>
         public string? DetermineNo { get; set; }
 
+        /// <summary>
+        /// 区域Id
+        /// </summary>
+        public int AreaId { get; set; }
+
         /// <summary>
         /// 城市
         /// </summary>

+ 14 - 2
OASystem/OASystem.Infrastructure/Repositories/Groups/HotelPriceRepository.cs

@@ -125,6 +125,16 @@ namespace OASystem.Infrastructure.Repositories.Groups
                 //客户名单
                 var guestNames = await _tourClientListRep._GuestNameItemByDiId(portType, diId);
 
+                //三公国家费用标准
+                var countrys = await _sqlSugar.Queryable<Grp_NationalTravelFee>()
+                    .Where(x => x.IsDel == 0 )
+                    .Select(x => new {
+                        x.Id,
+                        x.Country,
+                        x.City
+                    })
+                    .ToListAsync();
+
                 var data = new
                 {
                     GuestType = _GuestType, //客人分类
@@ -134,7 +144,8 @@ namespace OASystem.Infrastructure.Repositories.Groups
                     BookingWebsite = _BookingWebsite,
                     CheckPerson = _CheckPerson,
                     CheckVolumeNo = _CheckVolumeNo,
-                    GuestName = guestNames
+                    GuestName = guestNames,
+                    Countrys = countrys
                 };
 
                 _view.Code = 200;
@@ -198,7 +209,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
             }
 
             string sql = string.Format(@"Select hr.Id,hr.DiId,hr.GTId,hr.CheckNumber,hr.ReservationsWebsite,hr.ReservationsNo,
-                                         hr.DetermineNo,hr.City,hr.HotelName,hr.HotelTel,hr.HotelAddress,hr.GuestName,hr.CheckInDate,hr.CheckOutDate,
+                                         hr.DetermineNo,hr.AreaId,hr.City,hr.HotelName,hr.HotelTel,hr.HotelAddress,hr.GuestName,hr.CheckInDate,hr.CheckOutDate,
                                          hr.CheckType,hr.RoomExplanation,hr.Remark As HotelRemark,hr.SingleRoomPrice,hr.SingleRoomCount,hr.DoubleRoomPrice,
                                          hr.DoubleRoomCount,hr.SuiteRoomPrice,hr.SuiteRoomCount,hr.OtherRoomPrice,hr.OtherRoomCount,hr.CardPrice,hr.CardPriceCurrency,
                                          hr.Isoppay,hr.BreakfastPrice,hr.BreakfastCurrency,hr.GovernmentRent,hr.GovernmentRentCurrency,hr.CityTax,
@@ -432,6 +443,7 @@ namespace OASystem.Infrastructure.Repositories.Groups
                                                          it.ReservationsWebsite,
                                                          it.ReservationsNo,
                                                          it.DetermineNo,
+                                                         it.AreaId,
                                                          it.City,
                                                          it.HotelName,
                                                          it.HotelTel,

+ 184 - 0
OASystem/OASystem.Infrastructure/Repositories/Resource/MediaSuppliersRepository.cs

@@ -0,0 +1,184 @@
+using OASystem.Domain.Entities.Resource;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using AutoMapper;
+using OASystem.Domain.Dtos.Resource;
+using EyeSoft.Extensions;
+using OASystem.Domain;
+
+namespace OASystem.Infrastructure.Repositories.Resource
+{
+    /// <summary>
+    /// 策划部供应商资料
+    /// 仓储
+    /// </summary>
+    public class MediaSuppliersRepository : BaseRepository<Res_MediaSuppliers, Res_MediaSuppliers>
+    {
+        private readonly IMapper _mapper;
+        private readonly List<int> _portIds;
+        public MediaSuppliersRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
+        {
+            _mapper = mapper;
+            _portIds = new List<int> { 1, 2, 3 };
+        }
+
+        /// <summary>
+        /// 初始化数据
+        /// </summary>
+        /// <returns></returns>
+        public async Task<JsonView> Init()
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+
+            var typeData = await _sqlSugar.Queryable<Sys_SetData>().Where(x => x.IsDel == 0 && x.STid == 21).Select(x => new { x.Id, Text = x.Name }).ToListAsync();
+            result.Code = 200;
+            result.Data = typeData;
+            return result;
+        }
+
+        /// <summary>
+        /// 详情
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> Info(MediaSupplierInfoDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+
+            if (!_portIds.Contains(dto.PortType)) { result.Msg = MsgTips.Port; return result; }
+
+            if (dto.Id < 1) { result.Msg = MsgTips.Id; return result; }
+
+            var info = await _sqlSugar.Queryable<Res_MediaSuppliers>()
+                .Where(x => x.IsDel == 0 && x.Id == dto.Id)
+                .Select(x => new
+                {
+                    x.Id,
+                    x.TypeId,
+                    x.Privince,
+                    x.City,
+                    x.UnitName,
+                    x.UnitAbbreviation,
+                    x.UnitAddress,
+                    x.Contact,
+                    x.Sex,
+                    x.Post,
+                    x.Fax,
+                    x.Tel,
+                    x.Email,
+                    x.WeChat,
+                    x.Remark
+                })
+                .FirstAsync();
+
+            result.Code = 200;
+            result.Data = info;
+            return result;
+        }
+
+        /// <summary>
+        /// 分页查询
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> PageItem(MediaSupplierPageItemDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+
+            if (!_portIds.Contains(dto.PortType)) { result.Msg = MsgTips.Port; return result; }
+
+            var search = dto.Search;
+            RefAsync<int> total = 0;
+            var infos = await _sqlSugar.Queryable<Res_MediaSuppliers>()
+                .LeftJoin<Sys_Users>((ms, u) => ms.CreateUserId == u.Id)
+                .Where((ms, u) => ms.IsDel == 0)
+                .WhereIF(!string.IsNullOrEmpty(search), (ms, u) => ms.UnitName.Contains(search) || ms.Contact.Contains(search) || ms.Tel.Contains(search))
+                .OrderByDescending((ms, u) => ms.CreateTime)
+                .Select((ms, u) => new
+                {
+                    ms.Id,
+                    ms.Privince,
+                    ms.City,
+                    ms.UnitName,
+                    ms.Contact,
+                    ms.Sex,
+                    ms.Post,
+                    ms.Tel,
+                    CreateUserName = u.CnName,
+                    ms.CreateTime
+                })
+                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
+
+            result.Code = 200;
+            result.Data = infos;
+            result.Count = total;
+            return result;
+        }
+
+        /// <summary>
+        /// 操作(添加 Or 编辑)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> AddOrEdit(MediaSupplierAddOrEditDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+
+            if (!_portIds.Contains(dto.PortType)) { result.Msg = MsgTips.Port; return result; }
+            var userId = dto.CurrUserId;
+            if (userId < 1) { result.Msg = MsgTips.UserId; return result; }
+
+            var info = _mapper.Map<Res_MediaSuppliers>(dto);
+            info.CreateUserId = userId;
+            if (info.Id < 1) //添加
+            {
+                var add = await _sqlSugar.Insertable(info).ExecuteCommandAsync();
+                if (add > 0)
+                {
+                    result.Code = 200;
+                    result.Msg = $"操作成功!";
+                }
+            }
+            else if (info.Id > 0) //编辑
+            {
+                var upd = await _sqlSugar.Updateable(info).IgnoreColumns(x => new { x.CreateUserId, x.CreateTime }).ExecuteCommandAsync();
+                if (upd > 0)
+                {
+                    result.Code = 200;
+                    result.Msg = $"操作成功!";
+                }
+            }
+
+            return result;
+        }
+
+        /// <summary>
+        /// 软删除
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        public async Task<JsonView> SoftDel(MediaSupplierSoftDelDto dto)
+        {
+            var result = new JsonView() { Code = 400, Msg = "操作失败" };
+            int userId = dto.CurrUserId, id = dto.Id;
+            if (!_portIds.Contains(dto.PortType)) { result.Msg = MsgTips.Port; return result; }
+            if (userId < 1) { result.Msg = MsgTips.UserId; return result; }
+            if (id < 1) { result.Msg = MsgTips.Id; return result; }
+
+            var status = await _sqlSugar.Updateable<Res_MediaSuppliers>()
+                .SetColumns(x => new Res_MediaSuppliers() { DeleteUserId = userId, DeleteTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") })
+                .Where(x => x.Id == id)
+                .ExecuteCommandAsync();
+            if (status > 0)
+            {
+                result.Code = 200;
+                result.Msg = $"操作成功!";
+            }
+
+            return result;
+        }
+    }
+}