using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using OASystem.API.OAMethodLib.ALiYun;
using OASystem.API.OAMethodLib.ExcelOutput;
using OASystem.Domain.Common;
using OASystem.Domain.Dtos.Business;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Entities.Business;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.ViewModels.Business;
using OASystem.Domain.ViewModels.Financial;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Infrastructure.Repositories.Business;
using OASystem.Infrastructure.Repositories.Groups;
using OASystem.Infrastructure.Repositories.System;
using Org.BouncyCastle.Asn1.Mozilla;
namespace OASystem.API.Controllers
{
///
/// 通用业务操作
///
[Route("api/[controller]/[action]")]
public class BusinessController : ControllerBase
{
private readonly IMapper _mapper;
private readonly CommonBusRepository _busRep;
private readonly SetDataRepository _setDataRep;
private readonly DelegationInfoRepository _groupRep;
private readonly TeamRateRepository _teamRateRep;
public BusinessController( IMapper mapper, CommonBusRepository busRep, SetDataRepository setDataRep, DelegationInfoRepository groupRep, TeamRateRepository teamRateRep)
{
_mapper = mapper;
_busRep = busRep;
_setDataRep = setDataRep;
_groupRep = groupRep;
_teamRateRep = teamRateRep;
}
#region 团组信息
///
/// 团组信息
/// 团组简略详情
///
/// 团组info请求dto
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostShareGroupInfo(ShareGroupInfoDto dto)
{
var groupData = await _groupRep.PostShareGroupInfo(dto);
if (groupData.Code != 0)
{
return Ok(JsonView(false, groupData.Msg));
}
return Ok(JsonView(groupData.Data));
}
///
/// 团组信息 团组名称 List
///
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task GetGroupNameList(GroupNameDto dto)
{
var groupData = await _groupRep.GetGroupNameList(dto);
if (groupData.Code != 0)
{
return Ok(JsonView(false, groupData.Msg));
}
return Ok(JsonView(groupData.Data, groupData.Data.Count));
}
///
/// 获取团组指向分类
///
/// 参数Json字符串
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostGroupDirectionalClassificationInit()
{
Result result = new Result();
result = await _setDataRep.GetSetDataBySTId(_setDataRep, 16); //团组指向分类
if (result.Code != 0)
{
return Ok(JsonView(false, "获取失败!"));
}
List _view1 = JsonConvert.DeserializeObject>(JsonConvert.SerializeObject(result.Data));
SetDataInfoView xc_view = new SetDataInfoView();//77 行程 //移除行程
xc_view = _view1.Where(it => it.Id == 77).FirstOrDefault();
if (xc_view != null) { _view1.Remove(xc_view); };
List _view = new List();
//_view.Insert(0, new SetDataInfoView { Id = -1, Name = "所有模块" });
SetDataInfoView qz_view = new SetDataInfoView();//80 签证
qz_view = _view1.Where(it => it.Id == 80).FirstOrDefault();
if (qz_view != null) { _view.Insert(0, qz_view); _view1.Remove(qz_view); };
SetDataInfoView jpyd_view = new SetDataInfoView();//85 机票预订
jpyd_view = _view1.Where(it => it.Id == 85).FirstOrDefault();
if (jpyd_view != null) { _view.Insert(1, jpyd_view); _view1.Remove(jpyd_view); };
SetDataInfoView jdyd_view = new SetDataInfoView();//76 酒店预订
jdyd_view = _view1.Where(it => it.Id == 76).FirstOrDefault();
if (jdyd_view != null) { _view.Insert(2, jdyd_view); _view1.Remove(jdyd_view); };
SetDataInfoView jdzc_view = new SetDataInfoView();//751 酒店早餐
jdzc_view = _view1.Where(it => it.Id == 751).FirstOrDefault();
if (jdzc_view != null) { _view.Insert(3, jdzc_view); _view1.Remove(jdzc_view); };
SetDataInfoView cdy_view = new SetDataInfoView();//79 车/导游地接
cdy_view = _view1.Where(it => it.Id == 79).FirstOrDefault();
if (cdy_view != null) { _view.Insert(4, cdy_view); _view1.Remove(cdy_view); };
SetDataInfoView yqgw_view = new SetDataInfoView();//81 邀请/公务活动
yqgw_view = _view1.Where(it => it.Id == 81).FirstOrDefault();
if (yqgw_view != null) { _view.Insert(5, yqgw_view); _view1.Remove(yqgw_view); };
SetDataInfoView bx_view = new SetDataInfoView();//82 团组客户保险
bx_view = _view1.Where(it => it.Id == 82).FirstOrDefault();
if (bx_view != null) { _view.Insert(6, bx_view); _view1.Remove(bx_view); };
SetDataInfoView qtkx_view = new SetDataInfoView();//98 其他款项
qtkx_view = _view1.Where(it => it.Id == 98).FirstOrDefault();
if (qtkx_view != null) { _view.Insert(7, qtkx_view); _view1.Remove(qtkx_view); };
SetDataInfoView skth_view = new SetDataInfoView();//285 收款退还与其他款项
skth_view = _view1.Where(it => it.Id == 285).FirstOrDefault();
if (skth_view != null) { _view.Insert(8, skth_view); _view1.Remove(skth_view); };
if (_view1.Count > 0)
{
_view.AddRange(_view1);
}
return Ok(JsonView(_view));
}
#endregion
#region 币种 List
///
/// 币种 List
///
///
[HttpGet,HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostCurrencyList()
{
try
{
Result setData = await _setDataRep.GetSetDataBySTId(_setDataRep, 66); //币种类型
if (setData.Code == 0)
{
return Ok(JsonView(true, "查询成功", setData.Data));
}
else
{
return Ok(JsonView(false, setData.Msg));
}
}
catch (Exception)
{
return Ok(JsonView(false, "程序错误!"));
throw;
}
}
///
/// 团组汇率 币种 Item (来源:团组汇率)
/// 根据 团组Id And 业务类型(CTable)Id
/// api处理CTable = 285,默认返回CNY
///
/// 请求参数Dto
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostGroupTeamRateByDiIdAndCTableId(GeneralTeamRateInfoDto dto)
{
try
{
if (dto == null)
{
return Ok(JsonView(false, "请输入参数!"));
}
if (dto.DiId == 0)
{
return Ok(JsonView(false, "请输入正确的团组Id!"));
}
if (dto.CTable == 0)
{
return Ok(JsonView(false, "请输入正确的业务类型(CTable)Id!"));
}
if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3 )
{
string teamRateInfoSql = string.Format(@"Select sd.Name,tr.* From Grp_TeamRate tr
Left Join Sys_SetData sd On sd.IsDel=0 And sd.STid=16 And tr.CTable = sd.Id
Where tr.IsDel = 0 And tr.DiId = {0} And tr.CTable = {1}", dto.DiId,dto.CTable);
var teamRateInfo = await _teamRateRep._sqlSugar.SqlQueryable(teamRateInfoSql).ToListAsync();
#region 团组汇率
TeamRateModelGeneralView teamRateModels = new TeamRateModelGeneralView();
#region 单独处理Ctable 币种汇率 默认 为CNY
if (dto.CTable == 285)
{
teamRateModels = new TeamRateModelGeneralView()
{
Id = 0,
CTableId = 285,
CTableName = "其他款项与收款退还",
TeamRates = new List() {
new TeamRateDescAddCurrencyIdView()
{
CurrencyId = 836,
CurrencyCode = "CNY",
CurrencyName = "人民币",
Rate = 1.0000M,
}
}
};
return Ok(JsonView(true, "操作成功!", teamRateModels));
}
#endregion
List currencyDatas = new List();
#region 获取所有币种
string sql = string.Format(@"select * from Sys_SetData where STid = {0} and isdel = 0", 66);
var DBdata = await _setDataRep.GetListBySqlWithNolockAsync(sql);
if (DBdata == null || DBdata.Count == 0)
{
return Ok(JsonView(false, "所有币种获取失败!"));
}
currencyDatas = DBdata.Select(x => new SetDataInfoView
{
Name = x.Name,
Id = x.Id,
Remark = x.Remark,
}).ToList();
#endregion
foreach (TeamRateInfoView item in teamRateInfo)
{
TeamRateModelGeneralView teamRateModelInfo = new TeamRateModelGeneralView();
teamRateModelInfo.Id = item.Id;
teamRateModelInfo.CTableId = item.CTable;
teamRateModelInfo.CTableName = item.Name;
List teamRateDescViews = new List();
#region 拆分remark里的汇率
if (item.Remark.Contains("|"))
{
string[] currencyArr = item.Remark.Split("|");
foreach (string currency in currencyArr)
{
string[] currency1 = currency.Split(":");
string[] currency2 = currency1[0].Split("(");
string currencyCode = currency2[1].Replace(")", "").TrimEnd();
SetDataInfoView dataInfoView = new SetDataInfoView();
dataInfoView = currencyDatas.Where(it => it.Name == currencyCode).FirstOrDefault();
int currencyId = currencyDatas.Where(it => it.Name == currencyCode).FirstOrDefault().Id;
TeamRateDescAddCurrencyIdView rateDescView = new TeamRateDescAddCurrencyIdView()
{
CurrencyId = dataInfoView.Id,
CurrencyCode = currencyCode,
CurrencyName = currency2[0],
Rate = decimal.Parse(currency1[1]),
};
teamRateDescViews.Add(rateDescView);
}
}
#endregion
if (teamRateDescViews.Count > 0)
{
teamRateDescViews = teamRateDescViews.OrderBy(it => it.CurrencyId).ToList();
}
teamRateModelInfo.TeamRates = teamRateDescViews;
teamRateModels = teamRateModelInfo;
}
#endregion
return Ok(JsonView(true, "操作成功!", teamRateModels));
}
else
{
return Ok(JsonView(false, "请输入正确的端口号! 1 Web 2 Android 3 Ios;"));
}
}
catch (Exception ex)
{
return Ok(JsonView(false, ex.Message));
}
}
///
/// 根据团组Id币种Id及类型Id查询团组汇率
///
///
///
[HttpGet, HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostCurrencyByDiid(int DiId,int CId,int CurrencyId)
{
try
{
Result setData = await _setDataRep.PostCurrencyByDiid( DiId, CId, CurrencyId); //币种类型
if (setData.Code == 0)
{
return Ok(JsonView(true, "查询成功", setData.Data));
}
else
{
return Ok(JsonView(false, setData.Msg));
}
}
catch (Exception)
{
return Ok(JsonView(false, "程序错误!"));
throw;
}
}
#endregion
#region 查询页面关联Ctable
///
/// 页面关联Ctable
/// 根据PageId 返回 CTable Id
///
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostPageLinkCTable(PageLinkCTableDto dto)
{
try
{
if (dto == null)
{
return Ok(JsonView(false, "请求参数不能为空!"));
}
if (dto.PageId == 0)
{
return Ok(JsonView(false, "页面Id不能为0!"));
}
List data = AppSettingsHelper.Get("CTableCorrelationPageDatas");
CTableCorrelationPageDatas correlationPageDatas = new CTableCorrelationPageDatas();
foreach (var item in data)
{
if (item.PageIdDatas != null)
{
var pageId = item.PageIdDatas.Where(it => it == dto.PageId).FirstOrDefault();
if (pageId != 0)
{
correlationPageDatas = item;
break;
}
}
}
if (correlationPageDatas.CTableId == 0)
{
return Ok(JsonView(false, "您查询的页面Id,未配置AppSettings,请前往配置!"));
}
return Ok(JsonView(true, "操作成功",new { CTable = correlationPageDatas.CTableId }));
}
catch (Exception ex)
{
return Ok(JsonView(false, ex.Message));
}
}
#endregion
#region 会务物料单
///
/// 获取会务活动列表
///
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostConferenceList()
{
List listSource = _busRep.Query(s => s.TeamDid == 691 && s.IsDel == 0).ToList();
List viewList = new List();
foreach (var group in listSource)
{
GroupNameView _view = new GroupNameView();
_view.Id = group.Id;
_view.GroupName = group.TeamName;
}
return Ok(JsonView(viewList));
}
///
/// 获取会务的采购物品计划清单
///
/// 会务活动Id
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostConfItemList(int ConfId)
{
Bus_ConfItemListView view = new Bus_ConfItemListView();
Bus_ConfItemListInfo _confListInfo = await _busRep.Query(s => s.Diid == ConfId).FirstAsync();
if (_confListInfo != null)
{
view.TotalCost = _confListInfo.TotalCost;
string sqlItem = string.Format(@" Select c.Id,c.ItemId,d.ItemName,c.[Count],c.CurrCost,c.OpRemark
From Bus_ConfItem as c With(Nolock)
Inner Join Res_ItemDetail as d with(Nolock) On c.ItemId=d.Id
Where c.ConfListId = {0}", ConfId);
List confItemList = await _busRep._sqlSugar.SqlQueryable(sqlItem).ToListAsync();
view.ItemList = new List(confItemList);
}
else
{
view.ItemList = new List();
view.TotalCost = 0;
}
return Ok(JsonView(view));
}
///
/// 获取会务可采购的物料集合
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostOptionalItemList()
{
List result = await _busRep.GetViewList_OptionalItem();
return Ok(JsonView(result));
}
///
/// 编辑物料采购清单
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task PostEditOptionalItemList(JsonDtoBase jsonDto)
{
if (string.IsNullOrEmpty(jsonDto.Paras))
{
return Ok(JsonView(false, "参数为空"));
}
Edit_OptionalItemListDto _dto = JsonConvert.DeserializeObject(jsonDto.Paras);
//Edit_OptionalItemListDto _dto = System.Text.Json.JsonSerializer.Deserialize(jsonDto.Paras);
if (_dto.DiId < 1)
{
return Ok(JsonView(false, "团组Id为空"));
}
if (_dto.ConfItemListId < 1)
{
//新增
int rstInsert = await _busRep.Insert_ConfItemList(_dto);
return Ok(JsonView(rstInsert == 0));
}
else
{
//修改
int rstUpdate = await _busRep.Edit_ConfItemList(_dto);
return Ok(JsonView(rstUpdate == 0));
}
return Ok(JsonView(false));
}
///
/// 获取会务采购物料清单Excel
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task Excel_ConfItemList(JsonDtoBase jsonDto)
{
if (string.IsNullOrEmpty(jsonDto.Paras))
{
return Ok(JsonView(false, "参数为空"));
}
dynamic confList = JsonConvert.DeserializeObject(jsonDto.Paras);
int confListId = confList.ConfListId;
Bus_ConfItemListInfo _entityConfList = await _busRep.Query(s => s.Id == confListId).FirstAsync();
if (_entityConfList != null)
{
string result = new Excel_BusConfItemList().Excel(_entityConfList);
}
else
{
return Ok(JsonView(false, "请先保存数据"));
}
return Ok(JsonView(false));
}
#endregion
#region 阿里云短信测试
///
/// 编辑物料采购清单
///
///
[HttpPost]
[ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
public async Task AliMessageTest(string mobile)
{
string add2dayZH = DateTime.Now.AddDays(2).ToString("yyyy年MM月dd日");
string templateParam = JsonConvert.SerializeObject(new { teams = "测试团组", date = add2dayZH });
AliMessagePost.PostMessage(mobile, "泛美国际团组", "SMS_461575447", templateParam);
return Ok(JsonView(true));
}
#endregion
}
}