|
@@ -3,6 +3,7 @@ using Aspose.Words;
|
|
|
using Aspose.Words.Drawing;
|
|
|
using Aspose.Words.Tables;
|
|
|
using DiffMatchPatch;
|
|
|
+using Dm.util;
|
|
|
using Microsoft.AspNetCore.SignalR;
|
|
|
using NPOI.SS.Formula.Functions;
|
|
|
using NPOI.SS.UserModel;
|
|
@@ -17548,42 +17549,45 @@ end as 'country'
|
|
|
try
|
|
|
{
|
|
|
var visa = _sqlSugar.Queryable<Res_VisaFeeStandard>()
|
|
|
- .Where(x => x.IsDel == 0 && x.Country == item)
|
|
|
- .ToList();
|
|
|
- var visainfo = _sqlSugar.Queryable<Res_VisaFeeStandardDetails>()
|
|
|
- .Where(x => x.IsDel == 0 && visa.Select(x => x.Id).Contains(x.ParentId))
|
|
|
- .ToList();
|
|
|
- var visaMain = visainfo.FirstOrDefault(x => x.ProvinceId == diparent.Id);
|
|
|
- var visayinsiValue = visainfo.FirstOrDefault(x => x.ParentId == visa.FirstOrDefault(x => x.FeeType == 1)?.Id);
|
|
|
- visaCountryInfoArr.Add(new
|
|
|
+ .Where(x => x.IsDel == 0 && x.Country == item)
|
|
|
+ .ToList();
|
|
|
+ if (visa.Any())
|
|
|
{
|
|
|
- country = item,
|
|
|
- yinsi = new
|
|
|
- {
|
|
|
- Id = visayinsiValue.Id,
|
|
|
- value = visayinsiValue.SmallVisaPrice
|
|
|
- },
|
|
|
- visaMain = new
|
|
|
+ var visainfo = _sqlSugar.Queryable<Res_VisaFeeStandardDetails>()
|
|
|
+ .Where(x => x.IsDel == 0 && visa.Select(x => x.Id).Contains(x.ParentId))
|
|
|
+ .ToList();
|
|
|
+ var visaMain = visainfo.FirstOrDefault(x => x.ProvinceId == diparent.Id);
|
|
|
+ var visayinsiValue = visainfo.FirstOrDefault(x => x.ParentId == visa.FirstOrDefault(x => x.FeeType == 1)?.Id);
|
|
|
+ visaCountryInfoArr.Add(new
|
|
|
{
|
|
|
- Id = visaMain.Id,
|
|
|
- IsVisaOnArrival = visaMain.IsVisaOnArrival ? "是" : "否",
|
|
|
- IsElectronicSign = visaMain.IsElectronicSign ? "是" : "否",
|
|
|
- VisaTime = visaMain.VisaTime,
|
|
|
- IsVisaExemptionLarge = visaMain.IsVisaExemptionLarge ? "是" : "否",
|
|
|
- LargeVisaPrice = visaMain.LargeVisaPrice,
|
|
|
- LargeAgencyFee = visaMain.LargeAgencyFee,
|
|
|
- IsVisaExemptionSmall = visaMain.IsVisaExemptionSmall ? "是" : "否",
|
|
|
- SmallVisaPrice = visaMain.SmallVisaPrice,
|
|
|
- SmallAgencyFee = visaMain.SmallAgencyFee,
|
|
|
- NormExtFee = visaMain.NormExtFee,
|
|
|
- UrgExtFee = visaMain.UrgExtFee,
|
|
|
- IsUrgent = visaMain.IsUrgent ? "是" : "否",
|
|
|
- UrgentTime = visaMain.UrgentTime,
|
|
|
- UrgentPrice = visaMain.UrgentPrice,
|
|
|
- UrgentPriceDesc = visaMain.UrgentPriceDesc,
|
|
|
- Remark = visaMain.Remark,
|
|
|
- }
|
|
|
- });
|
|
|
+ country = item,
|
|
|
+ yinsi = new
|
|
|
+ {
|
|
|
+ Id = visayinsiValue.Id,
|
|
|
+ value = visayinsiValue.SmallVisaPrice
|
|
|
+ },
|
|
|
+ visaMain = new
|
|
|
+ {
|
|
|
+ Id = visaMain.Id,
|
|
|
+ IsVisaOnArrival = visaMain.IsVisaOnArrival ? "是" : "否",
|
|
|
+ IsElectronicSign = visaMain.IsElectronicSign ? "是" : "否",
|
|
|
+ VisaTime = visaMain.VisaTime,
|
|
|
+ IsVisaExemptionLarge = visaMain.IsVisaExemptionLarge ? "是" : "否",
|
|
|
+ LargeVisaPrice = visaMain.LargeVisaPrice,
|
|
|
+ LargeAgencyFee = visaMain.LargeAgencyFee,
|
|
|
+ IsVisaExemptionSmall = visaMain.IsVisaExemptionSmall ? "是" : "否",
|
|
|
+ SmallVisaPrice = visaMain.SmallVisaPrice,
|
|
|
+ SmallAgencyFee = visaMain.SmallAgencyFee,
|
|
|
+ NormExtFee = visaMain.NormExtFee,
|
|
|
+ UrgExtFee = visaMain.UrgExtFee,
|
|
|
+ IsUrgent = visaMain.IsUrgent ? "是" : "否",
|
|
|
+ UrgentTime = visaMain.UrgentTime,
|
|
|
+ UrgentPrice = visaMain.UrgentPrice,
|
|
|
+ UrgentPriceDesc = visaMain.UrgentPriceDesc,
|
|
|
+ Remark = visaMain.Remark,
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -27995,6 +27999,244 @@ ORDER BY
|
|
|
}
|
|
|
|
|
|
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region 会务流程
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 会务流程 - 数据初始化
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns>团组基本信息、团组列表和会务基本信息列表</returns>
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<IActionResult> ConferenceProceduresInit(ConferenceProceduresInitDto dto)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Grp_DelegationInfo targetGroup = null;
|
|
|
+
|
|
|
+ targetGroup = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .Where(x => x.Id == dto.GroupId && x.IsDel == 0)
|
|
|
+ .FirstAsync();
|
|
|
+
|
|
|
+ if (targetGroup == null)
|
|
|
+ {
|
|
|
+ targetGroup = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .Where(x => x.IsDel == 0)
|
|
|
+ .OrderByDescending(x => x.CreateTime)
|
|
|
+ .FirstAsync();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (targetGroup == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "未找到任何团组信息"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var groupList = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .Where(x => x.IsDel == 0)
|
|
|
+ .OrderByDescending(x => x.CreateTime)
|
|
|
+ .Select(x => new { x.Id, x.TeamName })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ var conferenceProceduresList = await _sqlSugar.Queryable<Grp_ConferenceProcedures>()
|
|
|
+ .Where(x => x.DiId == targetGroup.Id && x.IsDel == 0)
|
|
|
+ .Select(x => new { x.Id, x.Title, x.DataDetails, x.Details, x.Remark })
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (!conferenceProceduresList.Any())
|
|
|
+ {
|
|
|
+ conferenceProceduresList = await _sqlSugar.Queryable<Grp_ConferenceProcedures>()
|
|
|
+ .Where(x => x.DiId == -1 && x.IsDel == 0)
|
|
|
+ .Select(x => new { x.Id, x.Title, x.DataDetails, x.Details, x.Remark })
|
|
|
+ .ToListAsync();
|
|
|
+ }
|
|
|
+
|
|
|
+ var conferenceProceduresGroupByTitle = conferenceProceduresList
|
|
|
+ .GroupBy(x => x.Title)
|
|
|
+ .Select(x => new
|
|
|
+ {
|
|
|
+ title = x.Key,
|
|
|
+ itmes = x.Select(y => new
|
|
|
+ {
|
|
|
+ y.Id,
|
|
|
+ y.DataDetails,
|
|
|
+ y.Details,
|
|
|
+ y.Remark
|
|
|
+ }).ToList()
|
|
|
+ })
|
|
|
+ .ToList();
|
|
|
+
|
|
|
+ var response = new
|
|
|
+ {
|
|
|
+ GroupInfo = new
|
|
|
+ {
|
|
|
+ targetGroup.Id,
|
|
|
+ targetGroup.TeamName,
|
|
|
+ targetGroup.VisitDate,
|
|
|
+ targetGroup.VisitDays,
|
|
|
+ targetGroup.VisitPNumber,
|
|
|
+ targetGroup.VisitCountry,
|
|
|
+ targetGroup.VisitStartDate,
|
|
|
+ targetGroup.VisitEndDate,
|
|
|
+ targetGroup.ClientName,
|
|
|
+ targetGroup.ClientUnit
|
|
|
+ },
|
|
|
+ GroupList = groupList,
|
|
|
+ ConferenceProceduresList = conferenceProceduresList,
|
|
|
+ conferenceProceduresGroupByTitle = conferenceProceduresGroupByTitle
|
|
|
+ };
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "SUCCESS", response));
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _logger.LogError(ex, "数据初始化失败");
|
|
|
+ return Ok(JsonView(false, $"ERROR:{ex.Message}"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 会务流程 - 保存
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="dto"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<IActionResult> ConferenceProceduresSave(ConferenceProceduresSaveDto dto)
|
|
|
+ {
|
|
|
+ _sqlSugar.BeginTran();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ //删除旧数据
|
|
|
+ _sqlSugar.Updateable<Grp_ConferenceProcedures>()
|
|
|
+ .Where(x => x.DiId == dto.GroupId && x.IsDel == 0)
|
|
|
+ .SetColumns(x => new Grp_ConferenceProcedures
|
|
|
+ {
|
|
|
+ IsDel = 1,
|
|
|
+ DeleteTime = DateTime.Now.ToString("yyyy-MM-dd"),
|
|
|
+ DeleteUserId = dto.UserId
|
|
|
+ })
|
|
|
+ .ExecuteCommand();
|
|
|
+
|
|
|
+ //添加新数据
|
|
|
+ var newData = new List<Grp_ConferenceProcedures>();
|
|
|
+ foreach (var item in dto.ConferenceProceduresSaveItem)
|
|
|
+ {
|
|
|
+ foreach (var item2 in item.itmes)
|
|
|
+ {
|
|
|
+ newData.Add(new Grp_ConferenceProcedures
|
|
|
+ {
|
|
|
+ DiId = dto.GroupId,
|
|
|
+ Title = item.title,
|
|
|
+ DataDetails = item2.DataDetails,
|
|
|
+ Details = item2.details,
|
|
|
+ Remark = item2.Remark,
|
|
|
+ CreateTime = DateTime.Now,
|
|
|
+ CreateUserId = dto.UserId
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ _sqlSugar.Insertable(newData).ExecuteCommand();
|
|
|
+ _sqlSugar.CommitTran();
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ _sqlSugar.RollbackTran();
|
|
|
+ return Ok(JsonView(false, $"ERROR:{ex.Message}"));
|
|
|
+ }
|
|
|
+
|
|
|
+ return Ok(JsonView(true, "SUCCESS"));
|
|
|
+ }
|
|
|
+
|
|
|
+ [HttpPost]
|
|
|
+ public async Task<IActionResult> ConferenceProceduresFileDown(ConferenceProceduresFileDownDto dto)
|
|
|
+ {
|
|
|
+
|
|
|
+ var groupInfo = await _sqlSugar.Queryable<Grp_DelegationInfo>()
|
|
|
+ .Where(x => x.Id == dto.GroupId && x.IsDel == 0)
|
|
|
+ .FirstAsync();
|
|
|
+ if (groupInfo == null)
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "团组信息不存在"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var conferenceProceduresList = await _sqlSugar.Queryable<Grp_ConferenceProcedures>()
|
|
|
+ .Where(x => x.DiId == dto.GroupId && x.IsDel == 0)
|
|
|
+ .ToListAsync();
|
|
|
+
|
|
|
+ if (!conferenceProceduresList.Any())
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "会务流程信息不存在"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var filePath = $"{AppSettingsHelper.Get("ExcelBasePath")}Template/会务流程.xlsx";
|
|
|
+ if (!System.IO.File.Exists(filePath))
|
|
|
+ {
|
|
|
+ return Ok(JsonView(false, "模板文件不存在"));
|
|
|
+ }
|
|
|
+
|
|
|
+ var designer = new WorkbookDesigner();
|
|
|
+ designer.Workbook = new Workbook(filePath);
|
|
|
+ designer.SetDataSource("TB", conferenceProceduresList);
|
|
|
+ designer.Process();
|
|
|
+
|
|
|
+ var sheet = designer.Workbook.Worksheets[0];
|
|
|
+ var cells = sheet.Cells;
|
|
|
+
|
|
|
+ int col = 0; // 第一列
|
|
|
+ int startRow = 2; // 若第0行为表头,则从第1行开始;无表头请改为0
|
|
|
+ int endRow = cells.MaxDataRow;
|
|
|
+
|
|
|
+ if (endRow >= startRow)
|
|
|
+ {
|
|
|
+ int mergeStart = startRow;
|
|
|
+ string prev = cells[mergeStart, col].StringValue?.Trim() ?? string.Empty;
|
|
|
+
|
|
|
+ for (int r = startRow + 1; r <= endRow; r++)
|
|
|
+ {
|
|
|
+ string cur = cells[r, col].StringValue?.Trim() ?? string.Empty;
|
|
|
+ if (!string.Equals(cur, prev, StringComparison.Ordinal))
|
|
|
+ {
|
|
|
+ int count = r - mergeStart;
|
|
|
+ if (count > 1)
|
|
|
+ cells.Merge(mergeStart, col, count, 1);
|
|
|
+
|
|
|
+ mergeStart = r;
|
|
|
+ prev = cur;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int tailCount = endRow - mergeStart + 1;
|
|
|
+ if (tailCount > 1)
|
|
|
+ cells.Merge(mergeStart, col, tailCount, 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ // byte[] bytes = null;
|
|
|
+
|
|
|
+ // using (MemoryStream stream = new MemoryStream())
|
|
|
+ // {
|
|
|
+ // designer.Workbook.Save(stream, Aspose.Cells.SaveFormat.Xlsx);
|
|
|
+ // bytes = stream.ToArray();
|
|
|
+ // }
|
|
|
+
|
|
|
+ // return File(bytes, "application/excel", $"{groupInfo.TeamName}_会务流程.xlsx");
|
|
|
+
|
|
|
+
|
|
|
+ string savePath = $"{AppSettingsHelper.Get("ExcelBasePath")}ConferenceProcedures";
|
|
|
+
|
|
|
+ if (!System.IO.Directory.Exists(savePath))
|
|
|
+ {
|
|
|
+ System.IO.Directory.CreateDirectory(savePath);
|
|
|
+ }
|
|
|
+
|
|
|
+ designer.Workbook.Save($"{savePath}/{groupInfo.TeamName}_会务流程.xlsx");
|
|
|
+ string rst = savePath.replace(AppSettingsHelper.Get("ExcelBasePath"),
|
|
|
+ AppSettingsHelper.Get("ExcelBaseUrl") + AppSettingsHelper.Get("ExcelFtpPath"));
|
|
|
+ return Ok(JsonView(true, "SUCCESS", $"{rst}/{groupInfo.TeamName}_会务流程.xlsx"));
|
|
|
+ }
|
|
|
+
|
|
|
#endregion
|
|
|
|
|
|
#region 团组签证流程
|