using Myshipping.Core;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using SqlSugar;
using System.Linq;
using System.Threading.Tasks;
using Myshipping.Application.Entity;
using Microsoft.AspNetCore.Authorization;
using Furion;
using Microsoft.AspNetCore.Http;
using Furion.DataEncryption;
using System.Collections.Generic;
using System.Security.Claims;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Identity;
using Furion.FriendlyException;
using Furion.Logging;
using System;
using Microsoft.Extensions.Logging;
using System.Reflection;
using System.ComponentModel;
using Myshipping.Application.ConfigOption;
using System.IO;
using Yitter.IdGenerator;
using Myshipping.Core.Entity;
using Furion.RemoteRequest.Extensions;
using System.Net.Http;
using Myshipping.Core.Service;
using System.Reflection.Emit;
using Myshipping.Application.Service.DataSync.Dto;
namespace Myshipping.Application
{
///
/// 数据同步服务
///
[ApiDescriptionSettings("Application", Name = "DataSync", Order = 1), AllowAnonymous]
public class DataSyncService : IDynamicApiController, ITransient
{
private readonly ILogger _logger;
private readonly ISysCacheService _cache;
private readonly SqlSugarRepository _rep;
private readonly SqlSugarRepository _repCtn;
private readonly SqlSugarRepository _repUser;
private readonly SqlSugarRepository _repTenant;
private readonly SqlSugarRepository _djycustomer;
private readonly SqlSugarRepository _djycustomercontact;
private readonly SqlSugarRepository _vesselinfo;
public DataSyncService(ILogger logger, ISysCacheService cache, SqlSugarRepository rep, SqlSugarRepository repCtn,
SqlSugarRepository repUser, SqlSugarRepository repTenant, SqlSugarRepository djycustomer,
SqlSugarRepository djycustomercontact, SqlSugarRepository vesselinfo)
{
this._logger = logger;
this._rep = rep;
this._repCtn = repCtn;
this._cache = cache;
this._repUser = repUser;
this._repTenant = repTenant;
this._djycustomer = djycustomer;
this._djycustomercontact = djycustomercontact;
this._vesselinfo = vesselinfo;
}
#region 上传数据
///
/// 同步客户
///
///
///
[HttpPost("/DataSync/SyncCustomer"),ApiUser(ApiCode= "SyncCustomer")]
public async Task SyncCustomer(DjyCustomerSyncDto model)
{
if (string.IsNullOrWhiteSpace(model.BSNO)) {
throw Oops.Bah("BSNO未录入");
}
var m = await _djycustomer.Where(x => x.BSNO == model.BSNO).FirstAsync();
var entity = model.Adapt();
if (m == null)
{
await _djycustomer.InsertAsync(entity);
foreach (var item in model.ContactList)
{
var contact = item.Adapt();
contact.CustomerId = entity.Id;
await _djycustomercontact.InsertAsync(contact);
}
}
else {
entity.Id=m.Id;
await _djycustomer.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
await _djycustomercontact.DeleteAsync(x => x.CustomerId == entity.Id);
foreach (var item in model.ContactList)
{
var contact = item.Adapt();
contact.CustomerId = entity.Id;
await _djycustomercontact.InsertAsync(contact);
}
}
return entity.Id;
}
///
/// 同步船期
///
///
///
[HttpPost("/DataSync/SyncVesselDate"), ApiUser(ApiCode = "SyncVesselDate")]
public async Task SyncVesselDate(DjyVesselInfoDto model)
{
if (string.IsNullOrWhiteSpace(model.BSNO))
{
throw Oops.Bah("BSNO未录入");
}
var m = await _vesselinfo.Where(x => x.BSNO==model.BSNO).FirstAsync();
var entity = model.Adapt();
entity.Vessel = model.Vessel.ToUpper().Trim();
if (m == null)
{
await _vesselinfo.InsertAsync(entity);
}
else
{
entity.Id = m.Id;
await _vesselinfo.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
}
return entity.Id;
}
///
/// 同步订舱
///
///
///
[HttpPost("/DataSync/SyncBooking"), ApiUser(ApiCode = "SyncBooking")]
public async Task SyncBooking(SyncBookingOrderDto model)
{
if (string.IsNullOrWhiteSpace(model.BSNO)) {
throw Oops.Bah("主单BSNO未录入");
}
if (string.IsNullOrWhiteSpace(model.CreatedUserName)) {
throw Oops.Bah("未录入创建人");
}
var user= _repUser.AsQueryable().Where(x => x.CreatedUserName.Trim() == model.CreatedUserName.Trim()).FirstAsync();
return 0;
}
#endregion
#region 下载数据
#endregion
#region 其他
///
/// 测试用
///
///
[HttpGet("/DataSync/Test"), ApiUser(ApiCode = "Test")]
public async Task Test()
{
return $"当前用户:{UserManager.UserId} {UserManager.Name} ,当前租户:{UserManager.TENANT_ID} {UserManager.TENANT_NAME},管理员类型:{(UserManager.IsSuperAdmin ? "超级管理员" : (UserManager.IsTenantAdmin ? "租户管理员" : "普通用户"))}";
}
#endregion
}
}