ComplianceServer/code/Hg.Core.Domain/TraceUserDomain.cs

324 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using Hg.Core.Domain.Config;
using Hg.Core.Entity;
using StackExchange.Redis;
namespace Hg.Core.Domain
{
internal class TraceUserDomain : ITraceUserDomain
{
private readonly IConfiguration _configuration;
private readonly IHttpClient _httpClient;
private readonly IBaseRepository<CrmDbContext> _crmRepository;
private readonly IBaseRepository<ZxdDbContext> _zxdRepository;
private readonly ICacheDomain _cacheDomain;
private readonly SystemConfig _systemConfig;
public TraceUserDomain(IConfiguration configuration,
IHttpClient httpClient,
IBaseRepository<CrmDbContext> crmRepository,
IBaseRepository<ZxdDbContext> zxdRepository,
ICacheDomain cacheDomain)
{
_systemConfig = configuration.GetSection("SystemConfig").Get<SystemConfig>();
_configuration = configuration;
_httpClient = httpClient;
_crmRepository = crmRepository;
_zxdRepository = zxdRepository;
_cacheDomain = cacheDomain;
}
public async Task<PageResult<TraceUserDto>> GetTraceUsers(TraceUserSearchDto search)
{
var total = 0;
var usernames = new List<string>();
var softUsers = new List<SoftUser>();
var traceUsers = new List<TraceUserDto>();
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var accessKey = systemConfig.GetAccessKey("UPWEBSITE");
var resCustomer = _zxdRepository.GetRepository<RES_CUSTOMER>().Query();
//替换resid
if (!string.IsNullOrEmpty(search.UMID) && string.IsNullOrEmpty(search.Resid))
{
search.Resid = await QueryResidByUMID(search.UMID);
}
if (!string.IsNullOrEmpty(search.Resid) || !string.IsNullOrEmpty(search.Username))
{
softUsers = await _zxdRepository.GetRepository<SoftUser>().Query()
.If(!string.IsNullOrEmpty(search.Resid), x => x.Where(y => y.RESID == search.Resid))
.If(!string.IsNullOrEmpty(search.Username), x => x.Where(y => y.USERNAME == search.Username))
.ToListAsync();
if (softUsers != null && softUsers.Any())
{
usernames = softUsers.Select(x => x.USERNAME).Distinct().ToList();
var query = _crmRepository.GetRepository<TraceUser>().Query()
.Where(x => x.Status == 0)
.Where(x => usernames.Contains(x.Uid))
.Select(x => new TraceUserDto
{
Bindmob = x.Bindmob,
Idcardno = x.Idcardno,
Status = x.Status,
Uid = x.Uid,
Username = x.Username,
Idcardback = x.Idcardback,
Idcardfront = x.Idcardfront,
VerifyType = x.VerifyType
});
total = await query.CountAsync();
traceUsers = await query
.Skip((search.PageIndex - 1) * search.PageSize)
.Take(search.PageSize)
.ToListAsync();
var resids = softUsers.Select(m => m.RESID);
var ruc = resCustomer.Where(m => resids.Contains(m.RESID)).ToList();
if (traceUsers != null && traceUsers.Any())
{
traceUsers.ForEach(x =>
{
var content = SecurityHelper.EncyptData(x.Uid, accessKey);
var sign = SecurityHelper.SignData(content, accessKey);
var resid= softUsers.First(y => y.USERNAME == x.Uid).RESID;
x.Idcardback = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{x.Idcardback}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={search.EmployeeId}&employeeName={search.EmployeeName}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
x.Idcardfront = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{x.Idcardfront}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={search.EmployeeId}&employeeName={search.EmployeeName}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
x.ResId = resid;
x.UMID = ruc.FirstOrDefault(m => m.RESID == resid)?.UMID;
});
}
}
}
else
{
var query = _crmRepository.GetRepository<TraceUser>().Query()
.Where(x => x.Status == 0)
.Select(x => new TraceUserDto
{
Bindmob = x.Bindmob,
Idcardno = x.Idcardno,
Status = x.Status,
Uid = x.Uid,
Username = x.Username,
Idcardback = x.Idcardback,
Idcardfront = x.Idcardfront,
AuditRemark = x.AuditRemark,
VerifyType = x.VerifyType
});
total = await query.CountAsync();
traceUsers = await query
.Skip((search.PageIndex - 1) * search.PageSize)
.Take(search.PageSize)
.ToListAsync();
usernames = traceUsers.Select(x => x.Uid).Distinct().ToList();
softUsers = await _zxdRepository.GetRepository<SoftUser>().Query()
.Where(x => usernames.Contains(x.USERNAME))
.ToListAsync();
var resids = softUsers.Select(m => m.RESID);
var ruc = resCustomer.Where(m => resids.Contains(m.RESID)).ToList();
if (traceUsers != null && traceUsers.Any())
{
traceUsers.ForEach(x =>
{
var content = SecurityHelper.EncyptData(x.Uid, accessKey);
var sign = SecurityHelper.SignData(content, accessKey);
var resid = softUsers.First(y => y.USERNAME == x.Uid).RESID;
x.Idcardback = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{x.Idcardback}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={search.EmployeeId}&employeeName={search.EmployeeName}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
x.Idcardfront = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{x.Idcardfront}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={search.EmployeeId}&employeeName={search.EmployeeName}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
x.ResId = resid;
x.UMID = ruc.FirstOrDefault(m => m.RESID == resid)?.UMID;
});
}
}
return new PageResult<TraceUserDto>(search.PageIndex, search.PageSize, total, traceUsers);
}
/// <summary>
/// 审核
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<bool> Audit(TraceUserAuditDto dto)
{
try
{
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var accessKey = systemConfig.GetAccessKey("UPWEBSITE");
var traceUser = await _crmRepository.GetRepository<TraceUser>().FirstOrDefaultAsync(x => x.Uid == dto.Uid);
if (traceUser == null)
{
throw new ApiException("用户上传信息不存或已删除!");
}
traceUser.Status = dto.Status;
traceUser.AuditRemark = dto.Remark;
var data = new
{
username = dto.Uid,
auditStatus = dto.Status
};
var content = SecurityHelper.EncyptData(data.ToJson(), accessKey);
var sign = SecurityHelper.SignData(content, accessKey);
var url = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.AuditUrl}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE";
var result = await _httpClient.PostAsync<ApiResult>(url);
if (result.Code == 0)
{
await _crmRepository.GetRepository<TraceUser>().UpdateAsync(traceUser, x => new { x.Status, x.AuditRemark });
}
return true;
}
catch (Exception ex)
{
Log.Error(ex, $"{dto.Uid}审核报错!");
return false;
}
}
public async Task<TraceUserDto> GetTraceUser(string? resid, int? eid, string? ename)
{
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var accessKey = systemConfig.GetAccessKey("UPWEBSITE");
var usernames = await _zxdRepository.GetRepository<WX_SZZYORDER>().Query()
.Where(y => y.RESID == resid)
.Select(x => x.SOFTUSERNAME).Distinct()
.ToListAsync();
if (usernames == null || !usernames.Any())
{
throw new ApiException("用户未上传实名信息!");
}
var data = await _crmRepository.GetRepository<TraceUser>().Query()
.Where(x => usernames.Contains(x.Uid))
.OrderByDescending(x => x.Ctime)
.Select(x => new TraceUserDto
{
Bindmob = x.Bindmob,
Idcardno = x.Idcardno,
Status = x.Status,
Uid = x.Uid,
Username = x.Username,
Idcardback = x.Idcardback,
Idcardfront = x.Idcardfront,
AuditRemark = x.AuditRemark,
VerifyType = x.VerifyType
}).FirstOrDefaultAsync();
if (data != null)
{
var content = SecurityHelper.EncyptData(data.Uid, accessKey);
var sign = SecurityHelper.SignData(content, accessKey);
data.Idcardback = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{data.Idcardback}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={eid}&employeeName={HttpUtility.UrlEncode(ename)}&viewSource={HttpUtility.UrlEncode("")}&pageSource={HttpUtility.UrlEncode("Audit:.")}";
data.Idcardfront = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{data.Idcardfront}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={eid}&employeeName={HttpUtility.UrlEncode(ename)}&viewSource={HttpUtility.UrlEncode("")}&pageSource={HttpUtility.UrlEncode("Audit:.")}";
}
else
{
data = new TraceUserDto();
}
data.ResId = resid;
return data;
}
public async Task<TraceUserDto> GetTraceContractUser(int? orderid, int? eid, string? ename)
{
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var order = await _zxdRepository.GetRepository<WX_SZZYORDER>().Query()
.FirstOrDefaultAsync(x => x.ORDERID == orderid);
if (order == null)
{
throw new ApiException("订单不存在或已删除!");
}
var accessKey = systemConfig.GetAccessKey("UPWEBSITE");
//var usernames = await _zxdRepository.GetRepository<WX_SZZYORDER>().Query()
// .Where(y => y.RESID == order.RESID)
// .Select(x => x.SOFTUSERNAME).Distinct()
// .ToListAsync();
//if (usernames == null || !usernames.Any())
//{
// throw new ApiException("用户未上传实名信息!");
//}
var data = await _crmRepository.GetRepository<TraceUser>().Query()
.Where(x => order.SOFTUSERNAME == x.Uid)
.OrderByDescending(x => x.Ctime)
.Select(x => new TraceUserDto
{
Bindmob = x.Bindmob,
Idcardno = x.Idcardno,
Status = x.Status,
Uid = x.Uid,
Username = x.Username,
Idcardback = x.Idcardback,
Idcardfront = x.Idcardfront,
AuditRemark = x.AuditRemark,
VerifyType = x.VerifyType,
Type = x.VerifyType == 2 ? TraceUserType. :
string.IsNullOrEmpty(x.Bindmob) ? TraceUserType. : TraceUserType.
}).FirstOrDefaultAsync();
if (data != null)
{
var content = SecurityHelper.EncyptData(data.Uid, accessKey);
var sign = SecurityHelper.SignData(content, accessKey);
data.Idcardback = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{data.Idcardback}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={eid}&employeeName={ename}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
data.Idcardfront = $"{systemConfig.UserCenterRiaServiceUrl}{systemConfig.PreviewUrl}{data.Idcardfront}?content={HttpUtility.UrlEncode(content)}&sign={HttpUtility.UrlEncode(sign)}&clientId=UPWEBSITE&employeeId={eid}&employeeName={ename}&viewSource=千拓后台管理系统&pageSource=Audit:订单列表.风控";
}
else
{
data = new TraceUserDto();
data.Type = TraceUserType.;
}
//data.Username = string.IsNullOrEmpty(data.Username) ? order.CNAME : data.Username;
//data.Idcardno = string.IsNullOrEmpty(data.Idcardno) ? order.idcard : data.Idcardno;
if (string.IsNullOrEmpty(data.Idcardno))
{
var riskinfoUrl = systemConfig.GetRiskinfo();
var bf = "{\"uid\": \"" + order.SOFTUSERNAME + "\",\"htid\":\"DN" + order.SZZYORDERID.Value.ToString() + "\"}";
var hqr = BlowFish.Encode(bf);
var para = new { hqr };
var res = await _httpClient.PostAsync<RiskInfoDto>(riskinfoUrl, para);
if (res.Ret == 0 && res.Businesstype != "smallAmount")
{
data.Idcardno = res.IdCard;
data.Username = res.Name;
if (!string.IsNullOrEmpty(data.Idcardno) && !string.IsNullOrEmpty(data.Username))
{
data.Status = 1;
}
}
}
data.ResId = order.RESID;
data.ContractStatus = order.ContractStatus;
data.ContractRemark = order.ContractRemark;
data.RejectRemark = order.rejectremark;
data.RiskCtrlStatus = order.REQUESTSTATUS;
return data;
}
private async Task<string> QueryResidByUMID(string UMID)
{
var UMIDMain = await _zxdRepository.GetRepository<RES_CUSTOMER>().Query().FirstOrDefaultAsync(m => m.UMID == UMID);
if (UMIDMain != null)
{
return UMIDMain.RESID;
}
else
{
return "NULL_RESID";//这里输入一个不可能匹配的值,空值会被视为无传参返回所有数据
}
}
}
}