|
@@ -3,9 +3,12 @@ using Aspose.Words;
|
|
using Aspose.Words.Drawing;
|
|
using Aspose.Words.Drawing;
|
|
using Aspose.Words.Tables;
|
|
using Aspose.Words.Tables;
|
|
using DiffMatchPatch;
|
|
using DiffMatchPatch;
|
|
|
|
+using EyeSoft.Runtime.InteropServices;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
|
+using Microsoft.IdentityModel.Tokens;
|
|
using Microsoft.VisualBasic;
|
|
using Microsoft.VisualBasic;
|
|
using MySqlX.XDevAPI.Relational;
|
|
using MySqlX.XDevAPI.Relational;
|
|
|
|
+using NetTaste;
|
|
using NPOI.HSSF.UserModel;
|
|
using NPOI.HSSF.UserModel;
|
|
using NPOI.SS.Formula.Functions;
|
|
using NPOI.SS.Formula.Functions;
|
|
using NPOI.SS.UserModel;
|
|
using NPOI.SS.UserModel;
|
|
@@ -31,10 +34,13 @@ using OASystem.Domain.Entities.Groups;
|
|
using OASystem.Domain.ViewModels.Financial;
|
|
using OASystem.Domain.ViewModels.Financial;
|
|
using OASystem.Domain.ViewModels.Groups;
|
|
using OASystem.Domain.ViewModels.Groups;
|
|
using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
using OASystem.Domain.ViewModels.QiYeWeChat;
|
|
|
|
+using OASystem.Domain.ViewModels.Statistics;
|
|
using OASystem.Infrastructure.Repositories.CRM;
|
|
using OASystem.Infrastructure.Repositories.CRM;
|
|
using OASystem.Infrastructure.Repositories.Financial;
|
|
using OASystem.Infrastructure.Repositories.Financial;
|
|
using OASystem.Infrastructure.Repositories.Groups;
|
|
using OASystem.Infrastructure.Repositories.Groups;
|
|
using OASystem.Infrastructure.Tools;
|
|
using OASystem.Infrastructure.Tools;
|
|
|
|
+using Org.BouncyCastle.Crypto;
|
|
|
|
+using Org.BouncyCastle.Utilities;
|
|
using Quartz.Util;
|
|
using Quartz.Util;
|
|
using SqlSugar.Extensions;
|
|
using SqlSugar.Extensions;
|
|
using System.Collections;
|
|
using System.Collections;
|
|
@@ -43,6 +49,8 @@ using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.Globalization;
|
|
using System.IO.Compression;
|
|
using System.IO.Compression;
|
|
using System.Text.Json;
|
|
using System.Text.Json;
|
|
|
|
+using System.Web;
|
|
|
|
+using System.Xml.Linq;
|
|
using TencentCloud.Ocr.V20181119.Models;
|
|
using TencentCloud.Ocr.V20181119.Models;
|
|
using static OASystem.API.OAMethodLib.JWTHelper;
|
|
using static OASystem.API.OAMethodLib.JWTHelper;
|
|
using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository;
|
|
using static OASystem.Infrastructure.Repositories.Groups.AirTicketResRepository;
|
|
@@ -108,6 +116,7 @@ namespace OASystem.API.Controllers
|
|
private readonly EnterExitCostDraftRepository _enterExitCostDraftRep;
|
|
private readonly EnterExitCostDraftRepository _enterExitCostDraftRep;
|
|
private readonly RestaurantRepository _restaurantRep;
|
|
private readonly RestaurantRepository _restaurantRep;
|
|
private readonly EnterExitCostQuoteRepository _enterExitCostQuoteRep;
|
|
private readonly EnterExitCostQuoteRepository _enterExitCostQuoteRep;
|
|
|
|
+ private readonly GroupOrderPreInfoRepository _grpOrderPreInfoRep;
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// 构造函数
|
|
@@ -191,7 +200,8 @@ namespace OASystem.API.Controllers
|
|
TableOperationRecordRepository tableorRep,
|
|
TableOperationRecordRepository tableorRep,
|
|
EnterExitCostDraftRepository enterExitCostDraftRep,
|
|
EnterExitCostDraftRepository enterExitCostDraftRep,
|
|
RestaurantRepository restaurantRep,
|
|
RestaurantRepository restaurantRep,
|
|
- EnterExitCostQuoteRepository enterExitCostQuoteRep
|
|
|
|
|
|
+ EnterExitCostQuoteRepository enterExitCostQuoteRep,
|
|
|
|
+ GroupOrderPreInfoRepository grpOrderPreInfoRep
|
|
)
|
|
)
|
|
{
|
|
{
|
|
_logger = logger;
|
|
_logger = logger;
|
|
@@ -249,6 +259,7 @@ namespace OASystem.API.Controllers
|
|
_enterExitCostDraftRep = enterExitCostDraftRep;
|
|
_enterExitCostDraftRep = enterExitCostDraftRep;
|
|
_restaurantRep = restaurantRep;
|
|
_restaurantRep = restaurantRep;
|
|
_enterExitCostQuoteRep = enterExitCostQuoteRep;
|
|
_enterExitCostQuoteRep = enterExitCostQuoteRep;
|
|
|
|
+ _grpOrderPreInfoRep = grpOrderPreInfoRep;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -381,6 +392,198 @@ namespace OASystem.API.Controllers
|
|
return Ok(JsonView(false, "添加失败!"));
|
|
return Ok(JsonView(false, "添加失败!"));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ #region 团组前期信息
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组前期信息 Init
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpGet]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> GroupOrderPreInfo()
|
|
|
|
+ {
|
|
|
|
+ return Ok(await _grpOrderPreInfoRep.DataInit());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 国家数据源
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpGet]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> CountryInit()
|
|
|
|
+ {
|
|
|
|
+ var countrys = await _sqlSugar.Queryable<Grp_NationalTravelFee>().Where(x => x.IsDel == 0).Select(x => x.Country).Distinct().ToListAsync();
|
|
|
|
+ return Ok(JsonView(countrys));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 城市数据源
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpGet("{countryLabel}")]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> CityByCountry(string countryLabel)
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ countryLabel=HttpUtility.UrlDecode(countryLabel);
|
|
|
|
+ var countryList = countryLabel.Split(',', StringSplitOptions.RemoveEmptyEntries).ToArray();
|
|
|
|
+ var citys = Array.Empty<string?>();
|
|
|
|
+ if (countryList.Any())
|
|
|
|
+ {
|
|
|
|
+ var cityDatas = await _sqlSugar
|
|
|
|
+ .Queryable<Grp_NationalTravelFee>()
|
|
|
|
+ .Where(x => x.IsDel == 0 && countryList.Contains(x.Country) && !string.IsNullOrEmpty(x.City))
|
|
|
|
+ .ToArrayAsync();
|
|
|
|
+
|
|
|
|
+ foreach (var item in cityDatas)
|
|
|
|
+ {
|
|
|
|
+ if (item.City.Contains("城市"))
|
|
|
|
+ {
|
|
|
|
+ item.City = item.Country + "-所有城市";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var cityDatas1 = cityDatas.OrderBy(x => x.Country);
|
|
|
|
+
|
|
|
|
+ citys = cityDatas1.Select(x => x.City).Distinct().ToArray();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(citys));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组前期信息 Info
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="id">Id</param>
|
|
|
|
+ /// <param name="tempId">Id</param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpGet("{id}/{tempId}")]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> GroupOrderPreInfo(int id,int tempId = 1404)
|
|
|
|
+ {
|
|
|
|
+ return Ok(await _grpOrderPreInfoRep.InfoAsync(id, tempId));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组前期信息 Save
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="dto">Id</param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> GroupOrderPreInfoSave(GroupOrderPreInfoOpDto dto)
|
|
|
|
+ {
|
|
|
|
+ return Ok(await _grpOrderPreInfoRep.OpAsync(dto));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组前期信息 文件下载
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <param name="id">Id</param>
|
|
|
|
+ /// <param name="tempId">Id</param>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpGet("{id}/{tempId}")]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> GroupOrderPreInfoFileDownload(int id, int tempId = 1404)
|
|
|
|
+ {
|
|
|
|
+ var view = await _grpOrderPreInfoRep.InfoAsync(id, tempId);
|
|
|
|
+
|
|
|
|
+ var data = view.Data as GrpOrderPreInfoView;
|
|
|
|
+
|
|
|
|
+ #region Excel
|
|
|
|
+ var tempPath = AppSettingsHelper.Get("ExcelTempPath");
|
|
|
|
+ var servicePath = AppSettingsHelper.Get("GrpFileBaseUrl");
|
|
|
|
+ var savePath = AppSettingsHelper.Get("ExcelBasePath") + "GroupOrderPreInfo/";
|
|
|
|
+ var ftpPath = AppSettingsHelper.Get("ExcelFtpPath") + "GroupOrderPreInfo/";
|
|
|
|
+ var fileNamePrefix = string.Empty;
|
|
|
|
+
|
|
|
|
+ if (tempId == 1405)
|
|
|
|
+ {
|
|
|
|
+ tempPath += $"前期需客户提供信息_无商邀版Temp.xlsx";
|
|
|
|
+ fileNamePrefix = $"{data.Name}_无商邀版";
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ else if (tempId == 1406)
|
|
|
|
+ {
|
|
|
|
+ tempPath += $"前期需客户提供信息_有商邀版Temp.xlsx";
|
|
|
|
+ fileNamePrefix = $"{data.Name}_有商邀版";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ //tempId == 1404 默认下载
|
|
|
|
+ tempPath += $"前期需客户提供信息_单接送机Temp.xlsx";
|
|
|
|
+ fileNamePrefix = $"{data.Name}_单接送机";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach (var item in data.Items)
|
|
|
|
+ {
|
|
|
|
+ var obj = item.NewValue;
|
|
|
|
+
|
|
|
|
+ if (obj == null) item.OriginVal = "";
|
|
|
|
+ else if (obj.Equals("有") || obj.Equals("无"))
|
|
|
|
+ {
|
|
|
|
+ item.OriginVal = obj.ToString();
|
|
|
|
+ }
|
|
|
|
+ else if (obj is object[] objArray)
|
|
|
|
+ {
|
|
|
|
+ string[] stringArray = Array.ConvertAll(objArray, item => item?.ToString() ?? string.Empty);
|
|
|
|
+ item.OriginVal = string.Join("、", stringArray);
|
|
|
|
+ }
|
|
|
|
+ else if (obj is string[] stringArray)
|
|
|
|
+ {
|
|
|
|
+ item.OriginVal = string.Join("、", stringArray);
|
|
|
|
+ } else if (obj.Equals("-"))
|
|
|
|
+ {
|
|
|
|
+ item.OriginVal = "";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ var fileName = $"{fileNamePrefix}{CommonFun.GUID}.xlsx";
|
|
|
|
+
|
|
|
|
+ fileName = CommonFun.ValidFileName(fileName);
|
|
|
|
+
|
|
|
|
+ //载入模板
|
|
|
|
+ WorkbookDesigner designer = new WorkbookDesigner();
|
|
|
|
+ designer.Workbook = new Workbook(tempPath);
|
|
|
|
+
|
|
|
|
+ if (tempId == 1406)
|
|
|
|
+ {
|
|
|
|
+ var view1 = data.Items.Where(x => x.Index < 11).ToArray();
|
|
|
|
+ var view2 = data.Items.Where(x => x.Index > 10).ToArray();
|
|
|
|
+
|
|
|
|
+ for (int i = 1; i <= view2.Length; i++)
|
|
|
|
+ {
|
|
|
|
+ view2[i - 1].Index = i;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ designer.SetDataSource("View1", view1);
|
|
|
|
+ designer.SetDataSource("View2", view2);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ designer.SetDataSource("View", data.Items);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ designer.Process();
|
|
|
|
+
|
|
|
|
+ if (!Directory.Exists(savePath))
|
|
|
|
+ {
|
|
|
|
+ Directory.CreateDirectory(savePath);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ string serverPath = $"{savePath}{fileName}";
|
|
|
|
+ designer.Workbook.Save(serverPath);
|
|
|
|
+ string rst = $"{servicePath}{ftpPath}{fileName}";
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(new { url = rst }));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
#region 团组基本信息
|
|
#region 团组基本信息
|
|
@@ -5607,7 +5810,6 @@ FROM
|
|
peiceItemCurrencyInfos = enterExitCostCurrencys.Where(x => peiceItemCurrencys.Contains(x.CurrencyCode)).ToList();
|
|
peiceItemCurrencyInfos = enterExitCostCurrencys.Where(x => peiceItemCurrencys.Contains(x.CurrencyCode)).ToList();
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
var _CurrDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();
|
|
var _CurrDatas = _sqlSugar.Queryable<Sys_SetData>().Where(it => it.IsDel == 0 && it.STid == 66).ToList();
|
|
var _DelegationInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == dto.DiId).First();
|
|
var _DelegationInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0 && it.Id == dto.DiId).First();
|
|
var DeleClientList = _sqlSugar.Queryable<Grp_TourClientList>()
|
|
var DeleClientList = _sqlSugar.Queryable<Grp_TourClientList>()
|
|
@@ -9061,7 +9263,8 @@ FROM
|
|
FROM
|
|
FROM
|
|
Grp_DelegationInfo di
|
|
Grp_DelegationInfo di
|
|
WHERE
|
|
WHERE
|
|
- di.Isdel = 0 ", dto.CurrUserId);
|
|
|
|
|
|
+ di.Isdel = 0
|
|
|
|
+ ORDER BY di.VisitStartDate DESC", dto.CurrUserId);
|
|
|
|
|
|
var data = await _sqlSugar.SqlQueryable<EnterExitCostMobileGroupView>(sql)
|
|
var data = await _sqlSugar.SqlQueryable<EnterExitCostMobileGroupView>(sql)
|
|
.Where(x => !string.IsNullOrEmpty(x.GroupName))
|
|
.Where(x => !string.IsNullOrEmpty(x.GroupName))
|
|
@@ -9070,6 +9273,16 @@ WHERE
|
|
.OrderByDescending(x => x.Id)
|
|
.OrderByDescending(x => x.Id)
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
|
|
|
|
|
|
+ var basicUserId = await _enterExitCostRep.PermissionViewUsersAsync();
|
|
|
|
+
|
|
|
|
+ if (basicUserId.Any(x => x.Id == dto.CurrUserId))
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in data)
|
|
|
|
+ {
|
|
|
|
+ item.IsView = true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
return Ok(JsonView(true, "查询成功!", data, total));
|
|
return Ok(JsonView(true, "查询成功!", data, total));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -9314,15 +9527,25 @@ WHERE
|
|
(bool isView, string msg) = await _enterExitCostRep.MobilePermissionsValidationAsync(dto.DiId, dto.CurrUserId);
|
|
(bool isView, string msg) = await _enterExitCostRep.MobilePermissionsValidationAsync(dto.DiId, dto.CurrUserId);
|
|
if (!isView) return Ok(JsonView(false, msg));
|
|
if (!isView) return Ok(JsonView(false, msg));
|
|
|
|
|
|
- var userIds = Array.Empty<int>();
|
|
|
|
-
|
|
|
|
- userIds = await _sqlSugar
|
|
|
|
|
|
+ var userIds = await _sqlSugar
|
|
.Queryable<Grp_EnterExitCostPermission>()
|
|
.Queryable<Grp_EnterExitCostPermission>()
|
|
.Where(x => x.IsDel == 0 && x.GroupId == dto.DiId)
|
|
.Where(x => x.IsDel == 0 && x.GroupId == dto.DiId)
|
|
.Select(x => x.UserId)
|
|
.Select(x => x.UserId)
|
|
.ToArrayAsync();
|
|
.ToArrayAsync();
|
|
|
|
|
|
- return Ok(userIds);
|
|
|
|
|
|
+ var perUsers = await _enterExitCostRep.PermissionViewUsersAsync();
|
|
|
|
+
|
|
|
|
+ var perUsersView = new List<dynamic>();
|
|
|
|
+
|
|
|
|
+ foreach (var item in perUsers)
|
|
|
|
+ {
|
|
|
|
+ bool isView1 = false;
|
|
|
|
+
|
|
|
|
+ if (userIds.Any(x => x == item.Id)) isView1 = true;
|
|
|
|
+ perUsersView.Add(new { Id = item.Id, Name = item.Name, IsView = isView1 });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(perUsersView));
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
@@ -9632,23 +9855,20 @@ WHERE
|
|
}
|
|
}
|
|
if (permissions.Any())
|
|
if (permissions.Any())
|
|
{
|
|
{
|
|
- _sqlSugar.BeginTran();
|
|
|
|
- try
|
|
|
|
|
|
+ if (!permissions.Any(x => x.UserId == dto.CurrUserId))
|
|
{
|
|
{
|
|
- await _sqlSugar.Deleteable<Grp_EnterExitCostPermission>().Where(it => it.GroupId == dto.DiId).ExecuteCommandAsync();
|
|
|
|
-
|
|
|
|
- var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
|
|
|
|
- if (result < 1)
|
|
|
|
- {
|
|
|
|
- _sqlSugar.RollbackTran();
|
|
|
|
- return Ok(JsonView(false));
|
|
|
|
- }
|
|
|
|
|
|
+ permissions.Add(new Grp_EnterExitCostPermission { Permission = 1, GroupId = dto.DiId, UserId = dto.CurrUserId, CreateUserId = dto.CurrUserId });
|
|
}
|
|
}
|
|
- catch (Exception ex)
|
|
|
|
- {
|
|
|
|
|
|
|
|
|
|
+ _sqlSugar.BeginTran();
|
|
|
|
+
|
|
|
|
+ await _sqlSugar.Deleteable<Grp_EnterExitCostPermission>().Where(it => it.GroupId == dto.DiId).ExecuteCommandAsync();
|
|
|
|
+
|
|
|
|
+ var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
|
|
|
|
+ if (result < 1)
|
|
|
|
+ {
|
|
_sqlSugar.RollbackTran();
|
|
_sqlSugar.RollbackTran();
|
|
- return Ok(JsonView(false, ex.Message));
|
|
|
|
|
|
+ return Ok(JsonView(false));
|
|
}
|
|
}
|
|
_sqlSugar.CommitTran();
|
|
_sqlSugar.CommitTran();
|
|
return Ok(JsonView(true));
|
|
return Ok(JsonView(true));
|
|
@@ -10412,12 +10632,12 @@ WHERE
|
|
.Where(x => x.IsDel == 0 && !string.IsNullOrEmpty(x.TeamName))
|
|
.Where(x => x.IsDel == 0 && !string.IsNullOrEmpty(x.TeamName))
|
|
.WhereIF(!string.IsNullOrEmpty(dto.GroupName) && diId > 0, x => x.Id == diId)
|
|
.WhereIF(!string.IsNullOrEmpty(dto.GroupName) && diId > 0, x => x.Id == diId)
|
|
.WhereIF(!string.IsNullOrEmpty(dto.GroupName) && !status, x => x.TeamName.Contains(dto.GroupName))
|
|
.WhereIF(!string.IsNullOrEmpty(dto.GroupName) && !status, x => x.TeamName.Contains(dto.GroupName))
|
|
|
|
+ .OrderByDescending(x => x.VisitStartDate)
|
|
.Select(x => new
|
|
.Select(x => new
|
|
{
|
|
{
|
|
Id = x.Id,
|
|
Id = x.Id,
|
|
GroupName = x.TeamName
|
|
GroupName = x.TeamName
|
|
})
|
|
})
|
|
- .OrderByDescending(x => x.Id)
|
|
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
.ToPageListAsync(dto.PageIndex, dto.PageSize, total);
|
|
|
|
|
|
return Ok(JsonView(true, "查询成功!", data, total));
|
|
return Ok(JsonView(true, "查询成功!", data, total));
|
|
@@ -10605,7 +10825,9 @@ WHERE
|
|
if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
|
|
if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
|
|
|
|
|
|
mobileInfo = _mapper.Map<EnterExitCostDraftMobileParentInfoView>(eecInfo);
|
|
mobileInfo = _mapper.Map<EnterExitCostDraftMobileParentInfoView>(eecInfo);
|
|
|
|
+
|
|
mobileInfo.IsAssignPerm = assignPerm;
|
|
mobileInfo.IsAssignPerm = assignPerm;
|
|
|
|
+
|
|
var dayAndCostData = _sqlSugar.Queryable<Grp_DayAndCostDraft>()
|
|
var dayAndCostData = _sqlSugar.Queryable<Grp_DayAndCostDraft>()
|
|
.LeftJoin<Grp_NationalTravelFee>((dac, ntf) => dac.NationalTravelFeeId == ntf.Id)
|
|
.LeftJoin<Grp_NationalTravelFee>((dac, ntf) => dac.NationalTravelFeeId == ntf.Id)
|
|
.LeftJoin<Sys_SetData>((dac, ntf, sd) => dac.Currency == sd.Id)
|
|
.LeftJoin<Sys_SetData>((dac, ntf, sd) => dac.Currency == sd.Id)
|
|
@@ -10938,6 +11160,56 @@ WHERE
|
|
return parentId;
|
|
return parentId;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /// <summary>
|
|
|
|
+ /// 团组模块 - 出入境费用-草稿-移动端 - 查看权限用户
|
|
|
|
+ /// </summary>
|
|
|
|
+ /// <returns></returns>
|
|
|
|
+ [HttpPost]
|
|
|
|
+ [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
|
|
+ public async Task<IActionResult> EnterExitCostDraftMobileViewPermissionUsers(EnterExitCostDraftMobileViewPermissionUsersDto dto)
|
|
|
|
+ {
|
|
|
|
+ if (dto.DraftId < 1) return Ok(JsonView(false, MsgTips.Id));
|
|
|
|
+ if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
|
|
+
|
|
|
|
+ //验证查看权限
|
|
|
|
+ (bool isView, bool isSet) = await _enterExitCostDraftRep.PermissionValidationAsync(dto.DraftId, dto.CurrUserId);
|
|
|
|
+ if (!isView) return Ok(JsonView(false, _viewPermStr));
|
|
|
|
+
|
|
|
|
+ var userIds = await _sqlSugar
|
|
|
|
+ .Queryable<Grp_EnterExitCostDraftPermission>()
|
|
|
|
+ .Where(x => x.IsDel == 0 && x.DraftId == dto.DraftId)
|
|
|
|
+ .Select(x => x.UserId)
|
|
|
|
+ .ToArrayAsync();
|
|
|
|
+
|
|
|
|
+ var perUsers = await _enterExitCostDraftRep.PermissionViewUsersAsync();
|
|
|
|
+
|
|
|
|
+ var perUsersView = new List<dynamic>();
|
|
|
|
+
|
|
|
|
+ var feeBasePerm = AppSettingsHelper.Get<FeeBasePermView>("FeeBasePerm");
|
|
|
|
+ var viewPermissionData = new List<PermissionViewUserview>();
|
|
|
|
+ if (feeBasePerm.Any())
|
|
|
|
+ {
|
|
|
|
+ foreach (var item in feeBasePerm)
|
|
|
|
+ {
|
|
|
|
+ if (item.Users.Any())
|
|
|
|
+ {
|
|
|
|
+ viewPermissionData.AddRange(item.Users);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach (var item in perUsers)
|
|
|
|
+ {
|
|
|
|
+ bool isView1 = false;
|
|
|
|
+ if (userIds.Any(x => x == item.Id)) isView1 = true;
|
|
|
|
+ else if (viewPermissionData.Any(x => x.Id ==dto.CurrUserId) && item.Id == dto.CurrUserId) isView1 = true;
|
|
|
|
+ perUsersView.Add(new { Id = item.Id, Name = item.Name, IsView = isView1 });
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return Ok(JsonView(perUsersView));
|
|
|
|
+ }
|
|
|
|
+
|
|
/// <summary>
|
|
/// <summary>
|
|
/// 团组模块 - 出入境费用-草稿-移动端 - 设置view权限
|
|
/// 团组模块 - 出入境费用-草稿-移动端 - 设置view权限
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -10954,31 +11226,28 @@ WHERE
|
|
(bool viewPerm, bool assignPerm) = await _enterExitCostDraftRep.PermissionValidationAsync(dto.DraftId, dto.CurrUserId);
|
|
(bool viewPerm, bool assignPerm) = await _enterExitCostDraftRep.PermissionValidationAsync(dto.DraftId, dto.CurrUserId);
|
|
if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
|
|
if (!viewPerm) return Ok(JsonView(false, _viewPermStr));
|
|
|
|
|
|
- var permissions = new List<Grp_EnterExitCostDraftPermission>();
|
|
|
|
|
|
+ var permissions = new List<Grp_EnterExitCostDraftPermission>() { };
|
|
foreach (var userId in dto.UserIds)
|
|
foreach (var userId in dto.UserIds)
|
|
{
|
|
{
|
|
permissions.Add(new Grp_EnterExitCostDraftPermission { Permission = 1, DraftId = dto.DraftId, UserId = userId, CreateUserId = dto.CurrUserId });
|
|
permissions.Add(new Grp_EnterExitCostDraftPermission { Permission = 1, DraftId = dto.DraftId, UserId = userId, CreateUserId = dto.CurrUserId });
|
|
}
|
|
}
|
|
if (permissions.Any())
|
|
if (permissions.Any())
|
|
{
|
|
{
|
|
- _sqlSugar.BeginTran();
|
|
|
|
- try
|
|
|
|
|
|
+ if (!permissions.Any(x => x.UserId == dto.CurrUserId))
|
|
{
|
|
{
|
|
- await _sqlSugar.Deleteable<Grp_EnterExitCostDraftPermission>().Where(it => it.DraftId == dto.DraftId).ExecuteCommandAsync();
|
|
|
|
-
|
|
|
|
- var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
|
|
|
|
- if (result < 1)
|
|
|
|
- {
|
|
|
|
- _sqlSugar.RollbackTran();
|
|
|
|
- return Ok(JsonView(false));
|
|
|
|
- }
|
|
|
|
|
|
+ permissions.Add(new Grp_EnterExitCostDraftPermission { Permission = 1, DraftId = dto.DraftId, UserId = dto.CurrUserId, CreateUserId = dto.CurrUserId });
|
|
}
|
|
}
|
|
- catch (Exception ex)
|
|
|
|
- {
|
|
|
|
|
|
|
|
|
|
+ _sqlSugar.BeginTran();
|
|
|
|
+ await _sqlSugar.Deleteable<Grp_EnterExitCostDraftPermission>().Where(it => it.DraftId == dto.DraftId).ExecuteCommandAsync();
|
|
|
|
+
|
|
|
|
+ var result = await _sqlSugar.Insertable(permissions).ExecuteCommandAsync();
|
|
|
|
+ if (result < 1)
|
|
|
|
+ {
|
|
_sqlSugar.RollbackTran();
|
|
_sqlSugar.RollbackTran();
|
|
- return Ok(JsonView(false, ex.Message));
|
|
|
|
|
|
+ return Ok(JsonView(false));
|
|
}
|
|
}
|
|
|
|
+
|
|
_sqlSugar.CommitTran();
|
|
_sqlSugar.CommitTran();
|
|
return Ok(JsonView(true));
|
|
return Ok(JsonView(true));
|
|
|
|
|
|
@@ -11275,7 +11544,7 @@ WHERE
|
|
if (id < 1) return Ok(JsonView(false, MsgTips.DiId));
|
|
if (id < 1) return Ok(JsonView(false, MsgTips.DiId));
|
|
if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
|
|
|
|
- var info = _mapper.Map<Grp_EnterExitCost>(dto);
|
|
|
|
|
|
+ var info = _mapper.Map<Grp_EnterExitCostDraft>(dto);
|
|
|
|
|
|
info.OutsideJJPay = dto.OutsideJJPay;
|
|
info.OutsideJJPay = dto.OutsideJJPay;
|
|
info.OutsideGWPay = dto.OutsideGWPay;
|
|
info.OutsideGWPay = dto.OutsideGWPay;
|
|
@@ -11531,14 +11800,14 @@ WHERE
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
|
|
public async Task<IActionResult> EnterExitCostDraftMobileOpSingleStep7(PostEnterExitCostDraftMobileOpSingleStep7Dto dto)
|
|
public async Task<IActionResult> EnterExitCostDraftMobileOpSingleStep7(PostEnterExitCostDraftMobileOpSingleStep7Dto dto)
|
|
{
|
|
{
|
|
- int subId = dto.SubId, id = dto.DarftId;
|
|
|
|
|
|
+ int subId = dto.SubId, id = dto.DraftId;
|
|
if (!_portTypeData.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
|
|
if (!_portTypeData.Contains(dto.PortType)) return Ok(JsonView(false, MsgTips.Port));
|
|
if (id < 1) return Ok(JsonView(false, MsgTips.Id));
|
|
if (id < 1) return Ok(JsonView(false, MsgTips.Id));
|
|
if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
if (dto.CurrUserId < 1) return Ok(JsonView(false, MsgTips.UserId));
|
|
|
|
|
|
var subInfo = _mapper.Map<Grp_DayOtherPriceDraft>(dto);
|
|
var subInfo = _mapper.Map<Grp_DayOtherPriceDraft>(dto);
|
|
subInfo.Id = subId;
|
|
subInfo.Id = subId;
|
|
- subInfo.ParentId = dto.DarftId;
|
|
|
|
|
|
+ subInfo.ParentId = id;
|
|
subInfo.CreateUserId = dto.CurrUserId;
|
|
subInfo.CreateUserId = dto.CurrUserId;
|
|
|
|
|
|
int parentId = await EnterExitCostDraftVerifyIsNull(id, dto.CurrUserId); //主表验证
|
|
int parentId = await EnterExitCostDraftVerifyIsNull(id, dto.CurrUserId); //主表验证
|