LEIYI 6 ay önce
ebeveyn
işleme
24ad96c639

+ 7 - 3
OASystem/EntitySync/Program.cs

@@ -1,4 +1,6 @@
-using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.Entities.PersonnelModule;
+using OASystem.Domain.Entities.System;
 using SqlSugar;
 
 var db = new SqlSugarClient(new ConnectionConfig()
@@ -132,9 +134,11 @@ db.CodeFirst.SetStringDefaultLength(50).BackupTable().InitTables(new Type[]
     //typeof(Sys_Cities),  //城市
     //typeof(Grp_GroupModelFile),//团组文件 
     //typeof(Grp_VisaCommission),//签证费用录入 
-    typeof(Pm_GoodsReceive),//物品领用表 
-    typeof(Pm_GoodsStorage),//物品入库表 
+    //typeof(Pm_GoodsReceive),//物品领用表 
+    //typeof(Pm_GoodsStorage),//物品入库表 
     //typeof(Pm_GoodsInfo),//物品详细表 
+    //typeof(Grp_Opinionaire),//团组接待意见调查 
+    //typeof(Sys_ExchangeRateRecord),//团组接待意见调查 
 
 });
 Console.WriteLine("数据库结构同步完成!");

+ 81 - 2
OASystem/OASystem.Api/Controllers/GroupsController.cs

@@ -23,6 +23,7 @@ using OASystem.Domain.Dtos.Groups;
 using OASystem.Domain.Entities.Customer;
 using OASystem.Domain.Entities.Financial;
 using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.Statistics;
 using OASystem.Infrastructure.Repositories.Financial;
@@ -98,6 +99,7 @@ namespace OASystem.API.Controllers
 
         private readonly VisaCommissionRepository _visaCommissionRep;
         private readonly ForeignReceivablesRepository _ffrRep;  //对外收款账单仓库
+        private readonly OpinionaireRepository _opinionaireRep;  //对外收款账单仓库
 
         public GroupsController(ILogger<GroupsController> logger, IMapper mapper, SqlSugarClient sqlSugar, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository,
             TaskAssignmentRepository taskAssignmentRep, AirTicketResRepository airTicketResRep, DecreasePaymentsRepository decreasePaymentsRep,
@@ -107,7 +109,8 @@ namespace OASystem.API.Controllers
             GroupCostParameterRepository GroupCostParameterRepository, HotelPriceRepository hotelPriceRep, CustomersRepository customersRep, SetDataRepository setDataRep,
             TourClientListRepository tourClientListRep, TeamRateRepository teamRateRep, IHubContext<ChatHub, IChatClient> hubContext, UsersRepository usersRep, IJuHeApiService juHeApi,
             InvertedListRepository invertedListRep, VisaFeeInfoRepository visaFeeInfoRep, TicketBlackCodeRepository ticketBlackCodeRep, HotelInquiryRepository hotelInquiryRep,
-            ThreeCodeRepository threeCodeRepository, FeeAuditRepository feeAuditRep, VisaCommissionRepository visaCommissionRep, ForeignReceivablesRepository ffrRep)
+            ThreeCodeRepository threeCodeRepository, FeeAuditRepository feeAuditRep, VisaCommissionRepository visaCommissionRep, ForeignReceivablesRepository ffrRep,
+            OpinionaireRepository opinionaireRep)
         {
             _logger = logger;
             _mapper = mapper;
@@ -150,6 +153,7 @@ namespace OASystem.API.Controllers
             _feeAuditRep = feeAuditRep;
             _visaCommissionRep = visaCommissionRep;
             _ffrRep = ffrRep;
+            _opinionaireRep = opinionaireRep;
         }
 
         #region 流程管控
@@ -4880,7 +4884,8 @@ FROM
                 string md5Sign = GeneralMethod.Encrypt($"{sign}&fileName={fileUrl}");
                 string url = string.Format("http://oa.pan-american-intl.com:4399/#/Sankunginfo?sign={0}&fileName={1}", sign, fileUrl);
                 await AppNoticeLibrary.SendUserMsg_GroupShare_ToGM(dto.DiId, new List<string>() { "208", "233", "21" }, dto.UserId, url);
-
+                //保存 汇率信息记录
+                await RateRecordSave(dto.UserId,sign,"出入境费用");
 
                 return Ok(JsonView(true, data.Msg, data.Data));
             }
@@ -4890,6 +4895,54 @@ FROM
             }
         }
 
+        /// <summary>
+        /// 保存操作前汇率
+        /// </summary>
+        /// <param name="currUserId"></param>
+        /// <returns></returns>
+        public async Task<bool> RateRecordSave(int currUserId,int diId,string linkModule)
+        {
+            //var selectData = await _enterExitCostRep._sqlSugar.Queryable<Sys_ExchangeRateRecord>()
+            //    .Where(x => Convert.ToDateTime(x.RateDateTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd")))
+            //    .FirstAsync();
+            //if (selectData != null) return false;
+
+            var _currencyRate = await _juHeApi.PostItemRateAsync(new string[]{});
+            
+            string rateInfoStr = string.Empty;
+
+            var oaCurrencyData = await _enterExitCostRep._sqlSugar.Queryable<Sys_SetData>()
+                .Where(x => x.IsDel == 0 && x.STid == 66)
+                .ToListAsync();
+
+            foreach (var rate in _currencyRate)
+            {
+                var oaCurrncy = oaCurrencyData.Find(x => x.Remark.Equals(rate.Name));
+                if (oaCurrncy == null) continue;
+
+                //美元(USD):7.5|
+                rateInfoStr += $"{rate.Name}({oaCurrncy.Name}):{rate.FSellPri}|";
+            }
+
+            if (string.IsNullOrEmpty(rateInfoStr)) return false;
+
+            var add = await _enterExitCostRep.
+                _sqlSugar.Insertable<Sys_ExchangeRateRecord>(new Sys_ExchangeRateRecord()
+                {
+                    DiId = diId,
+                    LinkModule = linkModule,
+                    RateDateTime = DateTime.Now,
+                    RateInfo = rateInfoStr,
+                    CreateUserId = currUserId,
+                    IsDel = 0
+                })
+                .ExecuteCommandAsync();
+
+
+            return add > 0 ? true : false;
+        }
+
+
         /// <summary>
         /// 团组模块 - 出入境费用 - Confirm 费用
         /// </summary>
@@ -15217,6 +15270,32 @@ And (UnitName != '' Or UnitName != null) {sqlWhere}");
 
         #endregion
 
+
+        #region 团组接待意见调查 Grp_ReceptionOpinionSurvey
+        /// <summary>
+        /// 团组接待意见调查
+        /// 基础数据(团组)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <returns></returns>
+        [HttpGet]
+        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
+        public async Task<IActionResult> OpinionaireInit()
+        {
+            var groupData = await _groupRepository.Query(x => x.IsDel == 0)
+                .Select(x => new
+                {
+                    x.Id,
+                    GroupName = $"[{x.VisitDate.ToString("yyyy-MM-dd")}]{x.TeamName}"
+                })
+                .OrderByDescending(x => x.Id)
+                .ToListAsync();
+
+            return Ok(JsonView(groupData, groupData.Count));
+        }
+
+        #endregion
+
         //        /// <summary>
         //        /// 
         //        /// </summary>

+ 5 - 5
OASystem/OASystem.Api/OAMethodLib/JuHeAPI/JuHeApiService.cs

@@ -163,14 +163,14 @@ namespace OASystem.API.OAMethodLib.JuHeAPI
         {
 
             List<ExchangeRateModel> result = new List<ExchangeRateModel>();
-            if (currencyCodes.Length <= 0)
-            {
-                return result;
-            }
+            //if (currencyCodes.Length <= 0)
+            //{
+            //    return result;
+            //}
 
             var resultData = await GetExchangeRateAsync();
             var rateCurrencyData = AppSettingsHelper.Get<RateCurrencyModel>("RateCurrency");
-            var currencyModel = rateCurrencyData.Where(a => currencyCodes.Any(b => a.CurrencyCode == b)).ToList();
+            var currencyModel = rateCurrencyData.WhereIF(currencyCodes.Length >0,a => currencyCodes.Any(b => a.CurrencyCode == b)).ToList();
             if (currencyModel.Count > 0)
             {
                 if (resultData.Resultcode == "200")

+ 1 - 1
OASystem/OASystem.Api/appsettings.json

@@ -125,7 +125,7 @@
   "ExcelTempPath": "D:/FTP/File/OA2023/Office/Excel/Template/",
   "GrpListFileBasePath": "D:/FTP/File/OA2023/Office/GrpFile/GroupList/",
   "GrpListFileFtpPath": "Office/GrpFile/GroupList/",
-
+  //D:\FTP\File\OA2023\Office\GrpFile
   "VisaProgressImageBaseUrl": "http://132.232.92.186:24/",
   "VisaProgressImageBasePath": "D:/FTP/File/OA2023/Image/Visa/",
   "VisaProgressImageFtpPath": "Image/Visa/",

+ 130 - 0
OASystem/OASystem.Domain/Entities/Groups/Grp_Opinionaire.cs

@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.Groups
+{
+    /// <summary>
+    /// 团组接待意见调查
+    /// </summary>
+    [SugarTable("Grp_Opinionaire")]
+    public class Grp_Opinionaire : EntityBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        [SugarColumn(ColumnDescription = "团组Id", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "int")]
+        public int DiId { get; set; }
+
+        /// <summary>
+        /// 城市名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "城市名称", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(200)")]
+        public string? CityName { get; set; }
+
+        /// <summary>
+        /// 导游名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "导游名称", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "nvarchar(200)")]
+        public string? TourGuideName { get; set; }
+
+        /// <summary>
+        /// 餐饮评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "餐饮评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? Catering { get; set; }
+
+        /// <summary>
+        /// 餐饮评分-原因(餐饮==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "餐饮评分-原因(餐饮评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? CateringReason { get; set; }
+
+        /// <summary>
+        /// 住宿评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "住宿评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? Stay { get; set; }
+
+        /// <summary>
+        /// 住宿评分-原因(住宿==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "住宿评分-原因(住宿评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? StayReason { get; set; }
+
+        /// <summary>
+        /// 行程评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行程评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? Route { get; set; }
+
+        /// <summary>
+        /// 行程评分-原因(行程==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "行程评分-原因(行程评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? RouteReason { get; set; }
+
+        /// <summary>
+        /// 公务活动评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "公务活动评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? OfficialActivity { get; set; }
+
+        /// <summary>
+        /// 公务活动评分-原因(行程==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "公务活动评分-原因(公务活动评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? OfficialActivityReason { get; set; }
+
+        /// <summary>
+        /// 导游评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "导游评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? TourGuide { get; set; }
+
+        /// <summary>
+        /// 导游评分-原因(行程==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "导游评分-原因(导游评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? TourGuideReason { get; set; }
+
+        /// <summary>
+        /// 翻译评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "翻译评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? Translate { get; set; }
+
+        /// <summary>
+        /// 翻译评分-原因(行程==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "翻译评分-原因(翻译评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? TranslateReason { get; set; }
+
+        /// <summary>
+        /// 出行评分(A、B、C、D)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "出行评分(A、B、C、D)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(10)")]
+        public string? Trip { get; set; }
+
+        /// <summary>
+        /// 出行评分-原因(行程==C||D 有值)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "出行评分-原因(出行评分==C||D 有值)", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(500)")]
+        public string? TripReason { get; set; }
+
+        /// <summary>
+        /// 电子签名文件名称
+        /// </summary>
+        [SugarColumn(ColumnDescription = "电子签名文件名称", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(100)")]
+        public string? ESFileName { get; set; }
+
+        /// <summary>
+        /// 签名日期(2024-10-08 15:00:00)
+        /// </summary>
+        [SugarColumn(ColumnDescription = "签名日期", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(30)")]
+        public string? SignatureDate { get; set; }
+
+    }
+}

+ 47 - 0
OASystem/OASystem.Domain/Entities/System/Sys_ExchangeRateRecord.cs

@@ -0,0 +1,47 @@
+using OASystem.Domain.Enums;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Entities.System
+{
+    /// <summary>
+    /// 汇率记录
+    /// </summary>
+    [SugarTable("Sys_ExchangeRateRecord")]
+    public class Sys_ExchangeRateRecord : EntityBase
+    {
+        /// <summary>
+        /// 团组Id
+        /// </summary>
+        [SugarColumn(ColumnDescription = "团组Id", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "int")]
+        public int? DiId { get; set; } = 0;
+
+        /// <summary>
+        /// 关联模块
+        /// </summary>
+        [SugarColumn(ColumnDescription = "关联模块", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "varchar(50)")]
+        public string? LinkModule { get; set; }
+
+        /// <summary>
+        /// 汇率日期
+        /// </summary>
+        [SugarColumn(ColumnDescription = "汇率日期", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "datetime")]
+        public DateTime? RateDateTime { get; set; } 
+
+        /// <summary>
+        /// 数据来源
+        /// </summary>
+        [SugarColumn(ColumnDescription = "数据来源", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "int")]
+        public RateDataSourcesEnum RateDataSource { get; set; } = RateDataSourcesEnum.JuHeAPI;
+
+        /// <summary>
+        /// 汇率信息 
+        /// 美元(USD):7.5|欧元(EUR):8.5|英镑(GBP):9.59|日元(JPY):0.06|港币(HKD):0.97
+        /// </summary>
+        [SugarColumn(ColumnDescription = "汇率信息", IsNullable = true, DefaultValue = "NULL", ColumnDataType = "nvarchar(500)")]
+        public string RateInfo { get; set; }
+    }
+}

+ 21 - 0
OASystem/OASystem.Domain/Enums/RateDataSourcesEnum.cs

@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OASystem.Domain.Enums
+{
+    /// <summary>
+    /// 汇率数据源来源平台
+    /// </summary>
+    public enum RateDataSourcesEnum:int
+    {
+        /// <summary>
+        /// 聚合API
+        /// </summary>
+        [Description("聚合API")]
+        JuHeAPI,
+    }
+}

+ 16 - 0
OASystem/OASystem.Domain/ViewModels/Groups/OpinionaireView.cs

@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using OASystem.Domain.Entities.Groups;
+
+namespace OASystem.Domain.ViewModels.Groups
+{
+    /// <summary>
+    /// 团组接待意见调查View
+    /// </summary>
+    public class OpinionaireView:Grp_Opinionaire
+    {
+    }
+}

+ 56 - 0
OASystem/OASystem.Infrastructure/Repositories/Groups/OpinionaireRepository.cs

@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Policy;
+using System.Text;
+using System.Threading.Tasks;
+using AutoMapper;
+using OASystem.Domain.Entities.Groups;
+using OASystem.Domain.ViewModels.Groups;
+using OASystem.Infrastructure.Tools;
+
+namespace OASystem.Infrastructure.Repositories.Groups
+{
+    /// <summary>
+    /// 团组接待意见调查
+    /// 仓储
+    /// </summary>
+    public class OpinionaireRepository : BaseRepository<Grp_Opinionaire, OpinionaireView>
+    {
+        private readonly IMapper _mapper;
+        private string _url;
+        private string _filePath;
+        private JsonView _jsonView;
+        public OpinionaireRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
+        {
+            _mapper = mapper;
+            _url = $"{AppSettingsHelper.Get("GrpFileFtpPath")}OpinionaireElectronicSignature";
+            _filePath = $"{AppSettingsHelper.Get("GrpFileBasePath")}OpinionaireElectronicSignature";
+            if (!Directory.Exists(_filePath))
+            {
+                Directory.CreateDirectory(_filePath);
+            }
+            _jsonView= new JsonView(){Code = 400 ,Msg = "操作失败"};
+        }
+
+        /// <summary>
+        /// 列表
+        /// </summary>
+        /// <param name="portType"></param>
+        /// <param name="diId"></param>
+        /// <param name="type"></param>
+        /// <returns></returns>
+        public async Task<JsonView> Item(int portType, int diId, int type = 1)
+        {
+            if (portType < 1 || portType > 3) return new JsonView() { Code = 400, Msg = "请传入有效的portType" };
+            if (diId < 1) return new JsonView() { Code = 400, Msg = "请传入有效的diId!" };
+
+            var data = await Query(x => x.IsDel == 0 && x.DiId == diId).ToListAsync();
+            return _jsonView;
+        }
+
+
+
+    }
+}

+ 1 - 6
OASystem/OASystem.Infrastructure/Repositories/Resource/HotelDataRepository.cs

@@ -51,11 +51,6 @@ WHERE
                 if (info != null) return new Result() { Code = 0, Msg = "操作成功!",Data = info };
                 return new Result() { Code = -1, Msg = "暂无数据!" };
             }
-           
-
-            
-
-
             return new Result() { Code = -1, Msg = "请传入Status参数,1添加 2修改!" };
         }
 
@@ -67,7 +62,7 @@ WHERE
             {
                 string selectSql = string.Format(@"select * from Res_HotelData where Name='{0}' and IsDel='{1}'"
                                                    , dto.Name, 0);
-                var HotelData = await _sqlSugar.SqlQueryable<Res_HotelData>(selectSql).FirstAsync();//查询是否存在
+                var HotelData = await _sqlSugar.Queryable<Res_HotelData>().Where(x => x.IsDel == 0 && x.Name.Contains(dto.Name)).FirstAsync();//查询是否存在
                 if (HotelData != null)
                 {
                     return result = new Result() { Code = -1, Msg = "该信息已存在,请勿重复添加!" };