Zxd.Core/code/Zxd.Core.Domain/ProductDomain.cs

2012 lines
96 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Newtonsoft.Json;
using Zxd.Core.Domain.Dto.Contract;
using Zxd.Core.Domain.Dto.Crm;
using Zxd.Entity.Crm;
using Zxd.Entity.Dncms;
using Zxd.Entity.Zxd;
using Zxd.Entity.Zxd.Order;
namespace Zxd.Domain
{
public class ProductDomain : IProdcutDomain
{
private readonly IBaseRepository<CrmDbContext> _crmRepository;
private readonly IBaseRepository<ZxdDbContext> _zxdRepository;
private readonly IBaseRepository<DncmsbaseDbContext> _repository;
private readonly IRedisManager _redisManager;
private readonly IDeptmentDomain _deptmentDomain;
private readonly IMapper _mapper;
private readonly IHttpClient _httpClient;
private readonly SystemConfig _systemConfig;
private readonly IConfiguration _configuration;
public ProductDomain(IBaseRepository<CrmDbContext> crmRepository,
IBaseRepository<ZxdDbContext> zxdRepository,
IBaseRepository<DncmsbaseDbContext> repository,
IRedisManager redisManager,
IDeptmentDomain deptmentDomain,
IConfiguration configuration,
IHttpClient httpClient,
IMapper mapper)
{
_crmRepository = crmRepository;
_zxdRepository = zxdRepository;
_redisManager = redisManager;
_deptmentDomain = deptmentDomain;
_httpClient = httpClient;
_repository = repository;
_configuration = configuration;
_mapper = mapper;
_systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
}
#region
public async Task<List<SelectItem>> GetProductGroupSelect()
{
var data = new List<SelectItem>();
/* var key = CacheKeys.ProductGroupList;
if (!await _redisManager.ExistsAsync(key))
{
var list = await _crmRepository.GetRepository<ProductGroup>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id, item.Name ?? ""));
}
await _redisManager.SetAsync(key, data, TimeSpan.FromHours(1));
}
else
{
data = await _redisManager.GetListAsync<SelectItem>(key);
}*/
var list = await _crmRepository.GetRepository<ProductGroup>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id, item.Name ?? ""));
}
return data;
}
public async Task<List<SelectItem>> GetModuleSelect()
{
var data = new List<SelectItem>();
var list = await _crmRepository.GetRepository<Module>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id ?? "", $"{item.Name}/{item.Id}"));
}
return data;
/* var key = CacheKeys.ProductModuleList;
if (!await _redisManager.ExistsAsync(key))
{
var list = await _crmRepository.GetRepository<Module>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id ?? "", $"{item.Name}/{item.Id}"));
}
await _redisManager.SetAsync(key, data, TimeSpan.FromHours(1));
}
else
{
data = await _redisManager.GetListAsync<SelectItem>(key);
}
return data;*/
}
public async Task<List<SelectItem>> GetProductTeacherSelect()
{
var data = new List<SelectItem>();
/*var key = CacheKeys.ProductTeacherList;
if (!await _redisManager.ExistsAsync(key))
{
var list = await _crmRepository.GetRepository<Teacher>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Code ?? "", $"{item.Name}({item.Code})"));
}
await _redisManager.SetAsync(key, data, TimeSpan.FromHours(1));
}
else
{
data = await _redisManager.GetListAsync<SelectItem>(key);
}*/
var list = await _crmRepository.GetRepository<Teacher>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Code ?? "", $"{item.Name}({item.Code})"));
}
return data;
}
public async Task<List<SelectItem>> GetProductSelect()
{
var data = new List<SelectItem>();
/* var key = CacheKeys.ProductList;
if (!await _redisManager.ExistsAsync(key))
{
var list = await _crmRepository.GetRepository<Product>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id ?? "", $"{item.Name}/{item.Moduleid}/{item.Day}/{item.Price}"));
}
await _redisManager.SetAsync(key, data, TimeSpan.FromHours(1));
}
else
{
data = await _redisManager.GetListAsync<SelectItem>(key);
}*/
var list = await _crmRepository.GetRepository<Product>().QueryListAsync();
foreach (var item in list)
{
data.Add(new SelectItem(item.Id ?? "", $"{item.Name}/{item.Moduleid}/{item.Day}/{item.Price}"));
}
return data;
}
public async Task<List<SelectItem>> GetStandardTypeSelect()
{
var key = CacheKeys.StandardType;
var data = new List<SelectItem>();
if (!await _redisManager.ExistsAsync(key))
{
foreach (StandardType item in Enum.GetValues(typeof(StandardType)))
{
data.Add(new SelectItem(item, item.GetDescription()));
}
await _redisManager.SetAsync(key, data, TimeSpan.FromDays(1));
}
else
{
data = await _redisManager.GetListAsync<SelectItem>(key);
}
return data;
}
#endregion
#region
public async Task<PageResult<ProductDto>> ProductPage(SearchProductDto dto)
{
var query = _crmRepository.GetRepository<Product>().Query()
.If(!string.IsNullOrEmpty(dto.ProductCode), x => x.Where(y => y.Id == dto.ProductCode))
.If(!string.IsNullOrEmpty(dto.ProductName), x => x.Where(y => y.Name.Contains(dto.ProductName)))
.If(!string.IsNullOrEmpty(dto.ProductModule), x => x.Where(y => y.Moduleid == dto.ProductModule))
.If(dto.Active.HasValue, x => x.Where(y => y.Active == dto.Active))
.Include(x => x.ProductGroup)
.Include(x => x.Module);
var total = await query.CountAsync();
var data = await query
.OrderByDescending(x => x.Id)
.Select(x => new ProductDto
{
Id = x.Pk,
ProdcutCode = x.Id,
Price = $"{x.Price:0.00}元",
ProdcutName = x.Name,
ProdcutType = x.ProductGroup.Name,
ProductModule = $"{x.Module.Name}【{x.Moduleid}】【{x.Day}】",
Day = $"{x.Day}天",
Status = x.Active == 1 ? "已上线" : x.Active == 2 ? "已下架" : "未上线",
Ctime = x.Ctime.ToString("yyyy-MM-dd HH:mm:ss"),
EffectiveImmediately = x.EffectiveImmediately.Value ? "是" : "否"
})
.Skip((dto.PageIndex - 1) * dto.PageSize)
.Take(dto.PageSize)
.ToListAsync();
return new PageResult<ProductDto>(dto.PageIndex, dto.PageSize, total, data);
}
/// <summary>
/// 基础产品编辑
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <exception cref="ApiException"></exception>
public async Task<ProductEdit> ProductEdit(ChangeProductStatusDto dto)
{
ProductEdit res = new ProductEdit();
//枚举值
//产品下拉框 处理
res.Group = await GetProductGroupSelect();
res.Module = await GetModuleSelect();
res.Teacher = await GetProductTeacherSelect();
res.Dept = await _deptmentDomain.GetDeptments();
if (string.IsNullOrWhiteSpace(dto.ProductCode))
{
return res;
}
var product = await _crmRepository.GetRepository<Product>().Query()
.FirstOrDefaultAsync(x => x.Id == dto.ProductCode);
if (product == null)
{
throw new ApiException("产品不存在或已删除!");
}
res.ProductModule = product.Moduleid;
res.ProductCode = product.Id;
res.ProductName = product.Name;
res.Free = product.Id.IndexOf("_MFTY") > 0 ? true : false;
res.Price = product.Price;
res.EffectiveImmediately = product.EffectiveImmediately;
res.ProductType = product.Groupid;
res.Day = product.Day;
res.Status = product.Active;
var teacherList = await _crmRepository.GetRepository<ProductTeacher>().Query()
.Include(x => x.Teacher)
.Where(n => n.ProductId == product.Id).ToListAsync();
var deptGroup = teacherList.Select(n => n.Deptid).Distinct().ToList();
var deptments = await _repository.GetRepository<Deptment>().Query().Where(n => deptGroup.Contains(n.Id)).ToListAsync();
List<ProTeacherInfo> proTeacherInfos = new List<ProTeacherInfo>();
foreach (var deptid in deptGroup)
{
var teachers = teacherList.Where(n => n.Deptid == deptid).ToList();
ProTeacherInfo teaInfo = new ProTeacherInfo
{
dept_val = deptid,
dept_txt = deptments.FirstOrDefault(n => n.Id == deptid)?.Title
};
List<teacherInfo> tealist = new List<teacherInfo>();
foreach (var tea in teachers)
{
tealist.Add(new teacherInfo
{
code = tea.Teacher.Code,
name = tea.Teacher.Name
});
}
teaInfo.teacherInfos = tealist;
proTeacherInfos.Add(teaInfo);
}
res.ProTeacherInfo = proTeacherInfos;
return res;
}
public async Task InactiveProduct(string code)
{
var product = await _crmRepository.GetRepository<Product>().Query()
.FirstOrDefaultAsync(x => x.Id == code);
if (product != null)
{
product.Active = 0;
await _crmRepository.GetRepository<Product>().UpdateAsync(product);
return;
}
throw new ApiException("产品不存在或已删除!");
}
public async Task ActiveProduct(string code)
{
var product = await _crmRepository.GetRepository<Product>().Query()
.Include(x => x.Module)
.FirstOrDefaultAsync(x => x.Id == code);
if (product == null)
{
throw new ApiException("产品不存在或已删除!");
}
var url = $"{_systemConfig.GetActiveProduct()}?flag=mod&online=up&active=1&productpk={product.Pk}&productid={product.Id}&productname={product.Name}&modulename={product.Module?.Name}&moduleid={product.Moduleid}&price={product.Price}&day={product.Day}";
var result = await _httpClient.GetAsync<retMsg>(url);
if (result != null && result.result)
{
return;
}
throw new Exception("请求优品接口出错");
}
public async Task DownProduct(string code)
{
var product = await _crmRepository.GetRepository<Product>().Query()
.FirstOrDefaultAsync(x => x.Id == code);
if (product != null)
{
product.Active = 2;
await _crmRepository.GetRepository<Product>().UpdateAsync(product);
return;
}
throw new ApiException("产品不存在或已删除!");
}
public async Task<string> CreateProduct(CreateProductDto dto)
{
var time = DateTime.Now.ToString("yyyyMMddhhmm");
var count = 0;
string key = "UPCFJC_" + time;
if (!await _redisManager.ExistsAsync(key))//不存在
{
count++;
await _redisManager.SetAsync(key, count, TimeSpan.FromMinutes(5));
}
else
{
count = await _redisManager.GetAsync<int>(key);
count++;
await _redisManager.SetAsync(key, count, TimeSpan.FromMinutes(5));
}
var code = $"UPCFJC_{time}{(count < 10 ? ("0" + count) : count.ToString())}" + (dto.Free ? "_MFTY" : "");
//if (!string.IsNullOrWhiteSpace(dto.ProductCode))
//{
// List<string> orderStatus = new List<string>
// {
// "220","205","80","90"
// };
// var existModel = await _zxdRepository.GetRepository<WX_SZZYORDER>().Query().FirstOrDefaultAsync(n => n.PRODUCTCODE == dto.ProductCode && orderStatus.Contains(n.ORDERSTATUS));
// if (existModel != null)
// {
// throw new ApiException("已开通订单的产品不让编辑!");
// }
//}
var oldCode = dto.ProductCode;
var productCode = string.Empty;
if (!string.IsNullOrWhiteSpace(dto.ProductCode) && (!dto.Free && dto.ProductCode.Contains("_MFTY") || dto.Free && !dto.ProductCode.Contains("_MFTY")))
{
dto.ProductCode = "";
}
if (string.IsNullOrWhiteSpace(dto.ProductCode))
{
productCode = code;
var product = new Product
{
Id = code,
Name = dto.ProductName,
Moduleid = dto.ProductModule.ToString(),
Price = dto.Price,
Groupid = dto.ProductType,
Ctime = DateTime.Now,
UpdateTime = DateTime.Now,
EffectiveImmediately = dto.AutoOpen,
BusinessType = 1,
Day = dto.Day,
Active = 2,
Old = false,
Compliance = true
};
var baseProduct = new BaseProduct
{
Code = code,
Name = dto.ProductName,
Moduleid = dto.ProductModule.ToString(),
Price = dto.Price,
Groupid = dto.ProductType,
Ctime = DateTime.Now,
UpdateTime = DateTime.Now,
EffectiveImmediately = dto.AutoOpen,
Day = dto.Day,
Active = 2,
};
// 新增优品信息
using var transaction = await _crmRepository.BeginTransactionAsync();
try
{
//删除产品后再新加
if (!string.IsNullOrEmpty(oldCode))
{
var oldproduct = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(n => n.Id == oldCode);
await _crmRepository.GetRepository<Product>().DeleteAsync(oldproduct);
var oldTeacher = await _crmRepository.GetRepository<ProductTeacher>().Query().Where(n => n.ProductId == oldproduct.Id).ToListAsync();
await _crmRepository.GetRepository<ProductTeacher>().BatchDeleteAsync(oldTeacher);
var oldbaseProduct = await _zxdRepository.GetRepository<BaseProduct>().Query().FirstOrDefaultAsync(n => n.Code == oldproduct.Id);
// 删除千托信息
await _zxdRepository.GetRepository<BaseProduct>().DeleteAsync(oldbaseProduct);
}
if (dto.Teachers != null && dto.Teachers.Any())
{
foreach (var productTeacher in dto.Teachers)
{
if (productTeacher.TeacherCodes == null) continue;
foreach (var teacher in productTeacher.TeacherCodes)
{
await _crmRepository.GetRepository<ProductTeacher>().InsertAsync(new ProductTeacher
{
Deptid = productTeacher.Deptid,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
IsPacks = false,
ProductId = code,
TeacherCode = teacher
});
}
}
}
await _crmRepository.GetRepository<Product>().InsertAsync(product);
await transaction.CommitAsync();
}
catch (Exception ex)
{
await transaction.RollbackAsync();
await transaction.DisposeAsync();
Log.Error(ex, "添加基础产品错误!");
throw;
}
// 新增千托信息
await _zxdRepository.GetRepository<BaseProduct>().InsertAsync(baseProduct);
}
else
{
productCode = dto.ProductCode;
//更新优品信息
using var transaction = await _crmRepository.BeginTransactionAsync();
var product = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(n => n.Id == dto.ProductCode);
if (product == null)
{
throw new ApiException("产品不存在或已删除!");
}
product.Name = dto.ProductName;
product.Moduleid = dto.ProductModule.ToString();
product.Price = dto.Price;
product.Groupid = dto.ProductType;
product.Ctime = DateTime.Now;
product.UpdateTime = DateTime.Now;
product.EffectiveImmediately = dto.AutoOpen;
product.Day = dto.Day;
code = product.Id;
product.Active = 2;
try
{
//老师处理
var oldTeacher = await _crmRepository.GetRepository<ProductTeacher>().Query().Where(n => n.ProductId == product.Id).ToListAsync();
if (dto.Teachers != null && dto.Teachers.Any())
{
foreach (var productTeacher in dto.Teachers)
{
if (productTeacher.TeacherCodes == null) continue;
foreach (var teacher in productTeacher.TeacherCodes)
{
await _crmRepository.GetRepository<ProductTeacher>().InsertAsync(new ProductTeacher
{
Deptid = productTeacher.Deptid,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
IsPacks = false,
ProductId = code,
TeacherCode = teacher
});
}
}
}
await _crmRepository.GetRepository<ProductTeacher>().BatchDeleteAsync(oldTeacher);
await _crmRepository.GetRepository<Product>().UpdateAsync(product);
await transaction.CommitAsync();
}
catch (Exception ex)
{
await transaction.RollbackAsync();
await transaction.DisposeAsync();
Log.Error(ex, "修改基础产品错误!");
throw;
}
//更新千托信息
var baseProduct = await _zxdRepository.GetRepository<BaseProduct>().Query().FirstOrDefaultAsync(n => n.Code == dto.ProductCode);
if (baseProduct != null)
{
baseProduct.Code = code;
baseProduct.Name = dto.ProductName;
baseProduct.Moduleid = dto.ProductModule.ToString();
baseProduct.Price = dto.Price;
baseProduct.Groupid = dto.ProductType;
baseProduct.UpdateTime = DateTime.Now;
baseProduct.EffectiveImmediately = dto.AutoOpen;
baseProduct.Day = dto.Day;
baseProduct.Active = 2;
// 新增千托信息
await _zxdRepository.GetRepository<BaseProduct>().UpdateAsync(baseProduct);
}
}
return productCode;
}
/// <summary>
/// 批量导入产品
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<List<ImportBasicsProductViewModel>> ImportPreview(List<ImportBasicsProductDto> dto)
{
List<ImportBasicsProductViewModel> res = new List<ImportBasicsProductViewModel>();
//权限
var moduleList = await _crmRepository.GetRepository<Module>().Query().Where(n => dto.Select(x => x.ProductModule).Contains(n.Id)).ToListAsync();
//类型
var productGroupList = await _crmRepository.GetRepository<ProductGroup>().Query().Where(n => dto.Select(x => x.ProductType).Contains(n.Name)).ToListAsync();
var deptList = await _deptmentDomain.GetDeptments();
var teacherList = await _crmRepository.GetRepository<Teacher>().QueryListAsync();
foreach (var item in dto)
{
ImportBasicsProductViewModel newModel = new ImportBasicsProductViewModel
{
ProductName = item.ProductName,
Free = item.Free == "否" ? false : true,
};
res.Add(newModel);
if (string.IsNullOrWhiteSpace(item.ProductName))
{
newModel.Msg = "产品名称不能为空";
continue;
}
if (string.IsNullOrWhiteSpace(item.Price))
{
newModel.Msg = "价格不能为空";
continue;
}
if (string.IsNullOrWhiteSpace(item.Day))
{
newModel.Msg = "时长不能为空";
continue;
}
try
{
//校验
var productType = productGroupList.FirstOrDefault(n => n.Name == item.ProductType);
if (productType == null)
{
newModel.Msg = "找不到对应的产品类型";
continue;
}
newModel.ProductType = productType.Id;
newModel.ProductTypeName = productType.Name;
var module = moduleList.FirstOrDefault(n => n.Id == item.ProductModule);
if (module == null)
{
newModel.Msg = "找不到对应的权限Id";
continue;
}
newModel.ProductModule = module.Id;
newModel.ProductModuleName = module.Name;
newModel.Price = Convert.ToDouble(item.Price);
newModel.Day = Convert.ToInt32(item.Day);
newModel.AutoOpen = false;
if (!string.IsNullOrWhiteSpace(item.Teachers))
{
List<ImportProductTeacherDto> teaList = new List<ImportProductTeacherDto>();
var deptSpilt = item.Teachers.Split(";");
foreach (var deptstr in deptSpilt)
{
ImportProductTeacherDto teacherDto = new ImportProductTeacherDto();
Regex reg1 = new Regex(".*?(?=\\()");
var deptId = reg1.Match(deptstr);
if (deptId != null)
{
var deptItem = deptList.FirstOrDefault(n => n.Title == deptId.Value);
if (deptItem == null)
{
newModel.Msg = $"找不到对应的事业部";
continue;
}
else
{
teacherDto.Deptid = deptItem.Id;
teacherDto.DeptName = deptItem?.Title;
}
}
Regex reg2 = new Regex("(?<=\\()(\\S+)(?=\\))");
var teacherStr = reg2.Match(deptstr);
if (teacherStr != null)
{
var teacherItem = teacherStr.Value.Split(",").ToList();
foreach (var tea in teacherItem)
{
var teacher = teacherList.FirstOrDefault(n => n.Code == tea || tea == n.Name);
if (teacher != null)
{
TeacherInfo teacherInfo = new TeacherInfo()
{
Code = teacher.Code,
Name = teacher.Name
};
teacherDto.TeacherCodes.Add(teacherInfo);
}
else
{
newModel.Msg = $"找不到对应的老师{tea}";
}
}
teaList.Add(teacherDto);
}
}
newModel.Teachers = teaList;
}
}
catch (Exception ex)
{
newModel.Msg = $"数据不合法{ex.Message}";
}
}
return res;
}
/// <summary>
/// 导入
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task ImportProduct(List<CreateProductDto> dto)
{
foreach (var item in dto)
{
await CreateProduct(item);
Thread.Sleep(1000);
}
}
public async Task<List<ImportCombinationViewModel>> ImportCombinationProductPreview(List<ImportComProductDto> dto)
{
List<ImportCombinationViewModel> res = new List<ImportCombinationViewModel>();
//类型
var productGroupList = await _crmRepository.GetRepository<ProductGroup>().Query().Where(n => dto.Select(x => x.ProductType).Contains(n.Name)).ToListAsync();
var deptList = await _deptmentDomain.GetDeptments();
var teacherList = await _crmRepository.GetRepository<Teacher>().QueryListAsync();
List<string> productCodeList = new List<string>();
foreach (var item in dto)
{
productCodeList.AddRange(item.ProductCodes.Split(",").Where(n => !string.IsNullOrWhiteSpace(n)).ToList());
}
var productList = await _crmRepository.GetRepository<Product>().Query().Where(n => productCodeList.Contains(n.Id)).ToListAsync();
foreach (var item in dto)
{
ImportCombinationViewModel newModel = new ImportCombinationViewModel
{
ProductName = item.ProductName,
Free = item.Free == "否" ? false : true,
};
res.Add(newModel);
if (string.IsNullOrWhiteSpace(item.ProductName))
{
newModel.Msg = "产品名称不能为空";
continue;
}
if (string.IsNullOrWhiteSpace(item.Price))
{
newModel.Msg = "价格不能为空";
continue;
}
if (string.IsNullOrWhiteSpace(item.ProductCodes))
{
newModel.Msg = "子产品不能为空";
continue;
}
try
{
//校验
var productType = productGroupList.FirstOrDefault(n => n.Name == item.ProductType);
if (productType == null)
{
newModel.Msg = "找不到对应的产品类型";
continue;
}
newModel.ProductType = productType.Id;
newModel.ProductTypeName = productType.Name;
var proCodes = item.ProductCodes.Split(",").ToList();
List<ProductInfo> productInfos = new List<ProductInfo>();
foreach (var code in proCodes)
{
var pro = productList.FirstOrDefault(n => n.Id == code);
if (pro == null)
{
newModel.Msg = $"找不到对应的子产品【{code}】";
}
else
{
if (item.Free.ToLower() == "是" && pro.Price > 0)
{
newModel.Msg = "组合产品生产免费产品时,子产品必须都是免费产品!";
}
productInfos.Add(new ProductInfo
{
Code = code,
Name = pro.Name,
Price = pro.Price
});
}
}
newModel.ProductCodes = productInfos;
newModel.Price = Convert.ToDouble(item.Price);
newModel.AutoOpen = false;
if (!string.IsNullOrWhiteSpace(item.Teachers))
{
List<ImportProductTeacherDto> teaList = new List<ImportProductTeacherDto>();
var deptSpilt = item.Teachers.Split(";");
foreach (var deptstr in deptSpilt)
{
ImportProductTeacherDto teacherDto = new ImportProductTeacherDto();
Regex reg1 = new Regex(".*?(?=\\()");
var deptId = reg1.Match(deptstr);
if (deptId != null)
{
var deptItem = deptList.FirstOrDefault(n => n.Title == deptId.Value);
if (deptItem == null)
{
newModel.Msg = $"找不到对应的事业部";
continue;
}
else
{
teacherDto.Deptid = deptItem.Id;
teacherDto.DeptName = deptItem?.Title;
}
}
Regex reg2 = new Regex("(?<=\\()(\\S+)(?=\\))");
var teacherStr = reg2.Match(deptstr);
if (teacherStr != null)
{
var teacherItem = teacherStr.Value.Split(",").ToList();
foreach (var tea in teacherItem)
{
var teacher = teacherList.FirstOrDefault(n => n.Code == tea || tea == n.Name);
if (teacher != null)
{
TeacherInfo teacherInfo = new TeacherInfo()
{
Code = teacher.Code,
Name = teacher.Name
};
teacherDto.TeacherCodes.Add(teacherInfo);
}
else
{
newModel.Msg = $"找不到对应的老师{tea}";
}
}
teaList.Add(teacherDto);
}
}
newModel.Teachers = teaList;
}
}
catch (Exception ex)
{
newModel.Msg = $"数据不合法{ex.Message}";
}
}
return res;
}
public async Task SyncProduct()
{
var productList = await _crmRepository.GetRepository<Product>().QueryListAsync();
var baseProductList = await _zxdRepository.GetRepository<BaseProduct>().QueryListAsync();
foreach (var product in productList)
{
var baseProduct = baseProductList.FirstOrDefault(x => x.Code == product.Id);
if (baseProduct == null)
{
baseProduct = new BaseProduct
{
Code = product.Id,
Name = product.Name,
Price = product.Price,
Groupid = product.Groupid,
Ctime = product.Ctime,
EffectiveImmediately = product.EffectiveImmediately,
Moduleid = product.Moduleid,
AppImgUrl = product.AppImgUrl,
Day = product.Day,
Appextinfo = product.Appextinfo,
Appext = product.Appext,
Active = product.Active,
Compliance = product.Compliance,
Ext = product.Ext,
Extinfo = product.Extinfo,
Old = product.Old,
Remark = product.Remark,
UpdateTime = product.UpdateTime,
WebImgUrl = product.WebImgUrl
};
await _zxdRepository.GetRepository<BaseProduct>().InsertAsync(baseProduct);
continue;
}
if (baseProduct.Name != product.Name
|| baseProduct.Price != product.Price
|| baseProduct.Groupid != product.Groupid
|| baseProduct.Ctime != product.Ctime
|| baseProduct.EffectiveImmediately != product.EffectiveImmediately
|| baseProduct.Active != product.Active
|| baseProduct.Remark != product.Remark
|| baseProduct.Appext != product.Appext
|| baseProduct.Appextinfo != product.Appextinfo
|| baseProduct.AppImgUrl != product.AppImgUrl
|| baseProduct.Extinfo != product.Extinfo
|| baseProduct.Old != product.Old
|| baseProduct.WebImgUrl != product.WebImgUrl
|| baseProduct.UpdateTime != product.UpdateTime)
{
baseProduct.Name = product.Name;
baseProduct.Price = product.Price;
baseProduct.Groupid = product.Groupid;
baseProduct.Ctime = product.Ctime;
baseProduct.EffectiveImmediately = product.EffectiveImmediately;
baseProduct.Active = product.Active;
baseProduct.Remark = product.Remark;
baseProduct.Appext = product.Appext;
baseProduct.Appextinfo = product.Appextinfo;
baseProduct.AppImgUrl = product.AppImgUrl;
baseProduct.Extinfo = product.Extinfo;
baseProduct.Old = product.Old;
baseProduct.WebImgUrl = product.WebImgUrl;
baseProduct.UpdateTime = product.UpdateTime;
await _zxdRepository.GetRepository<BaseProduct>().UpdateAsync(baseProduct);
}
}
}
#endregion
#region
public async Task<PageResult<ProductPackageDto>> ProductPackagePage(SearchProductDto dto)
{
var productCodes = new List<string>();
if (!string.IsNullOrEmpty(dto.ProductModule))
{
productCodes = await _zxdRepository.GetRepository<BaseProductPackageRelation>().Query()
.Where(x => x.Moduleid == dto.ProductModule)
.Select(x => x.PackageCode ?? "")
.Distinct()
.ToListAsync();
}
var query = _crmRepository.GetRepository<ProductPackage>().Query()
.If(!string.IsNullOrEmpty(dto.ProductCode), x => x.Where(x => x.Id == dto.ProductCode))
.If(!string.IsNullOrEmpty(dto.ProductName), x => x.Where(x => x.Name.Contains(dto.ProductName)))
.If(dto.Active.HasValue, x => x.Where(y => y.Active == dto.Active))
.If(productCodes != null && productCodes.Any(), x => x.Where(x => productCodes.Contains(x.Id)))
.Include(x => x.ProductGroup);
var total = await query.CountAsync();
var data = await query
.OrderByDescending(x => x.Id)
.Select(x => new ProductPackageDto
{
Id = x.Pk,
ProdcutCode = x.Id,
Price = $"{x.Price:0.00}元",
ProdcutName = x.Name,
ProdcutType = x.ProductGroup.Name,
Status = x.Active == 1 ? "已上线" : x.Active == 2 ? "已下架" : "未上线",
Ctime = x.Ctime.ToString("yyyy-MM-dd HH:mm:ss"),
EffectiveImmediately = x.EffectiveImmediately.Value ? "是" : "否",
SubProductsInfo = x.SubProductsInfo
})
.Skip((dto.PageIndex - 1) * dto.PageSize)
.Take(dto.PageSize)
.ToListAsync();
var codes = new List<string>();
data.ForEach(x => codes.AddRange(x.ProductCodes));
codes = codes.Distinct().ToList();
var products = await _crmRepository.GetRepository<Product>().Query()
.Include(x => x.Module)
.Include(x => x.ProductGroup)
.Where(x => codes.Contains(x.Id))
.Select(x => new ProductDto
{
Id = x.Pk,
ProdcutCode = x.Id,
ProdcutName = x.Name,
ProdcutType = x.ProductGroup.Name,
ProductModule = $"{x.Module.Name}【{x.Moduleid}】【{x.Day}】"
})
.ToListAsync();
data.ForEach(x =>
{
List<string> modules = new List<string>();
foreach (var code in x.ProductCodes)
{
var pro = products.Where(y => code == y.ProdcutCode).FirstOrDefault();
if (pro != null)
{
modules.Add(pro.ProductModule);
}
}
x.ProductModule = modules;
});
return new PageResult<ProductPackageDto>(dto.PageIndex, dto.PageSize, total, data);
}
public async Task InactiveProductPackage(string code)
{
var product = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == code);
if (product != null)
{
product.Active = 0;
await _crmRepository.GetRepository<ProductPackage>().UpdateAsync(product);
return;
}
throw new ApiException("产品不存在或已删除!");
}
public async Task DownProductPackage(string code)
{
var product = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == code);
if (product != null)
{
product.Active = 2;
await _crmRepository.GetRepository<ProductPackage>().UpdateAsync(product);
return;
}
throw new ApiException("产品不存在或已删除!");
}
public async Task ActiveProductPackage(string code)
{
var product = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == code);
if (product == null)
{
throw new ApiException("产品不存在或已删除!");
}
var basProCodes = product.SubProducts.Split("|").ToList();
var basproducts = await _crmRepository.GetRepository<Product>().Query().Where(n => basProCodes.Contains(n.Id)).ToListAsync();
List<string> moduleids = new List<string>();
foreach (var bascode in basProCodes)
{
var pro = basproducts.FirstOrDefault(n => n.Id == bascode);
if (pro != null)
{
moduleids.Add($"{pro.Moduleid}【{pro.Day}】");
}
}
var url = $"{_systemConfig.GetActivePackage()}?flag=mod&online=up&active=1&productpk={product.Pk}&productid={product.Id}&productname={product.Name}&moduleids={string.Join(",", moduleids)}&price={product.Price}";
var result = await _httpClient.GetAsync<retMsg>(url);
if (result != null && result.result)
{
return;
}
if (product != null)
{
product.Active = 1;
await _crmRepository.GetRepository<ProductPackage>().UpdateAsync(product);
return;
}
}
/// <summary>
/// 查找存在重复的产品
/// </summary>
/// <param name="days"></param>
/// <param name="modules"></param>
/// <param name="price"></param>
/// <returns></returns>
private string IsHasDayPackge(int days, string[] modules, int price)
{
var relations = _zxdRepository.GetRepository<BaseProductPackageRelation>().Query().Where(m => modules.Contains(m.Moduleid) && m.Day == days).ToList().GroupBy(m => m.PackageCode);
foreach (var item in relations)
{
var packProduct = _zxdRepository.GetRepository<BaseProductPackageRelation>().Query().Where(m => m.PackageCode == item.Key).ToList();
if (modules.Where(m => !packProduct.Select(m => m.Moduleid).Contains(m)).Any())//如果不是完全匹配,那么表示产品不存在,可以创建
continue;
if (packProduct.Where(m => !modules.Contains(m.Moduleid)).Any())//如果不是完全匹配,那么表示产品不存在,可以创建
continue;
var pack = _zxdRepository.GetRepository<BaseProductPackage>().Query().FirstOrDefault(m => m.Code == item.Key);
if (pack != null && pack.Price == price)
{
return pack.Code;
}
}
return "";
}
/// <summary>
/// 一键创建组合产品
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
/// <exception cref="ApiException"></exception>
public async Task CreateSuperProductPackage(CreateSuperProductPackageDto dto)
{
//进行产品重复校验
for (int i = 0; i < dto.prices.Length; i++)
{
string moduleId = dto.productModule[i];
int day = Convert.ToInt32(dto.days[i]);
decimal price = Convert.ToDecimal(dto.prices[i]);
if (price == 0 && day > 1)
{
throw new Exception("金额为零的产品必须只能是1天");
}
var hasCode = IsHasDayPackge(Convert.ToInt32(dto.days[i]), dto.productModule, Convert.ToInt32(dto.prices[i]));
if (!string.IsNullOrEmpty(hasCode))
{
throw new Exception("已有重复天数:" + dto.days[i] + "、金额:" + dto.prices[i] + "产品ID" + hasCode);
}
}
List<CreateProductPackageDto> packList = new List<CreateProductPackageDto>();//需要创建的组合产品
//循环创建基础产品
for (int i = 0; i < dto.prices.Length; i++)
{
int day = Convert.ToInt32(dto.days[i]);
decimal price = Convert.ToDecimal(dto.prices[i]);
var pageckDto = new CreateProductPackageDto()
{
AutoOpen = dto.AutoOpen,
Day = day,
Free = dto.Free,
Price = price,
ProductCode = String.Empty,
ProductCodes = new List<CreateProductCodeDto>(),
ProductName = dto.ProductName,
ProductType = dto.ProductType,
Teachers = dto.Teachers
};
foreach (var moduleId in dto.productModule)//循环创建子产品
{
string productCode = string.Empty;// 产品编码
BaseProduct baseProduct = null;
if (price > 0)
{
baseProduct = await _zxdRepository.GetRepository<BaseProduct>().Query().OrderByDescending(m => m.Active % 2).ThenByDescending(m => m.Id).FirstOrDefaultAsync(n => n.Moduleid == moduleId && n.Day == day && n.Price > 0);
}
else
{
baseProduct = await _zxdRepository.GetRepository<BaseProduct>().Query().OrderByDescending(m => m.Active % 2).ThenByDescending(m => m.Id).FirstOrDefaultAsync(n => n.Moduleid == moduleId && n.Day == day && n.Price == 0);
}
if (baseProduct == null)//找不到相关产品,那么就进行创建基础产品
{
var module = await _crmRepository.GetRepository<Module>().Query().FirstOrDefaultAsync(m => m.Id == moduleId);
if (module == null)
throw new Exception(moduleId + "权限ID不存在");
productCode = await CreateProduct(new CreateProductDto
{
AutoOpen = dto.AutoOpen,
Day = day,
Free = dto.Free,
Price = price,
ProductModule = Convert.ToInt32(moduleId),
ProductModules = new List<string>() { moduleId },
ProductName = module.Name + day + "天",
ProductCode = String.Empty,
ProductType = dto.ProductType,
Teachers = dto.Teachers
});
}
else
productCode = baseProduct.Code;
pageckDto.ProductCodes.Add(new CreateProductCodeDto
{
Price = baseProduct != null ? baseProduct.Price : price,
ProductCode = productCode,
});
await ActiveProduct(productCode);//上线产品
}
packList.Add(pageckDto);
}
//循环创建组合产品
foreach (var item in packList)
{
string packcode = await CreateProductPackage(item);
await ActiveProductPackage(packcode);//上线产品
}
}
public async Task<string> CreateProductPackage(CreateProductPackageDto dto)
{
var productPackCode = string.Empty;
var time = DateTime.Now.ToString("yyyyMMddhhmm");
var count = 0;
string key = "UPCFZH_" + time;
if (!await _redisManager.ExistsAsync(key))//不存在
{
count++;
await _redisManager.SetAsync(key, count, TimeSpan.FromMinutes(5));
}
else
{
count = await _redisManager.GetAsync<int>(key);
count++;
await _redisManager.SetAsync(key, count, TimeSpan.FromMinutes(5));
}
var code = $"UPCFZH_{time}{(count < 10 ? ("0" + count) : count.ToString())}" + (dto.Free ? "_MFTY" : "");
//if (!string.IsNullOrWhiteSpace(dto.ProductCode))
//{
// List<string> orderStatus = new List<string>
// {
// "220","205","80","90"
// };
// var existModel = await _zxdRepository.GetRepository<WX_SZZYORDER>().Query().FirstOrDefaultAsync(n => n.PRODUCTCODE == dto.ProductCode && orderStatus.Contains(n.ORDERSTATUS));
// if (existModel != null)
// {
// throw new ApiException("已开通订单的产品不让编辑!");
// }
//}
if (dto.ProductCodes == null || !dto.ProductCodes.Any())
{
throw new ApiException("请选择产品权限!");
}
var subProductsInfo = dto.ProductCodes.Select(x =>
new SubProductJson
{
SubPrice = $"{x.Price:0.00}",
SubProductId = x.ProductCode
}).ToList().ToJson();
if (dto.Free)
{
var productCodes = dto.ProductCodes.Select(x => x.ProductCode).ToList();
if (await _zxdRepository.GetRepository<BaseProduct>().Query().Where(x => productCodes.Contains(x.Code)).AnyAsync(x => x.Price > 0))
{
throw new ApiException("组合产品生产免费产品时,子产品必须都是免费产品!");
}
}
var oldCode = dto.ProductCode;
if (!string.IsNullOrWhiteSpace(dto.ProductCode) && !dto.Free && dto.ProductCode.Contains("_MFTY") || dto.Free && !dto.ProductCode.Contains("_MFTY"))
{
dto.ProductCode = "";
}
if (string.IsNullOrWhiteSpace(dto.ProductCode))
{
productPackCode = code;
var productPackage = new ProductPackage
{
Id = code,
Name = dto.ProductName,
Price = dto.Price,
Groupid = dto.ProductType,
Ctime = DateTime.Now,
UpdateTime = DateTime.Now,
EffectiveImmediately = dto.AutoOpen,
Old = false,
BusinessType = 1,
Active = 2,
SubProducts = string.Join("|", dto.ProductCodes.Select(x => x.ProductCode).ToList()),
SubProductsInfo = subProductsInfo
};
var baseProductPackage = new BaseProductPackage
{
Code = code,
Name = dto.ProductName,
Price = dto.Price,
Groupid = dto.ProductType,
Ctime = DateTime.Now,
UpdateTime = DateTime.Now,
EffectiveImmediately = dto.AutoOpen,
Active = 2,
};
using var transactionCrm = await _crmRepository.BeginTransactionAsync();
using var transactionZxd = await _zxdRepository.BeginTransactionAsync();
try
{
if (!string.IsNullOrWhiteSpace(oldCode))
{
var oldproductPackage = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == oldCode);
await _crmRepository.GetRepository<ProductPackage>().DeleteAsync(oldproductPackage);
var oldTeacher = await _crmRepository.GetRepository<ProductTeacher>().Query().Where(n => n.ProductId == oldCode).ToListAsync();
await _crmRepository.GetRepository<ProductTeacher>().BatchDeleteAsync(oldTeacher);
var oldbaseProductPackage = await _zxdRepository.GetRepository<BaseProductPackage>().Query().FirstOrDefaultAsync(n => n.Code == oldCode);
await _zxdRepository.GetRepository<BaseProductPackage>().DeleteAsync(oldbaseProductPackage);
var oldRelationList = await _zxdRepository.GetRepository<BaseProductPackageRelation>().Query().Where(n => n.PackageCode == oldCode).ToListAsync();
await _zxdRepository.GetRepository<BaseProductPackageRelation>().BatchDeleteAsync(oldRelationList);
}
// 新增优品信息
if (dto.Teachers != null && dto.Teachers.Any())
{
foreach (var productTeacher in dto.Teachers)
{
if (productTeacher.TeacherCodes == null || !productTeacher.TeacherCodes.Any()) continue;
foreach (var teacher in productTeacher.TeacherCodes)
{
await _crmRepository.GetRepository<ProductTeacher>().InsertAsync(new ProductTeacher
{
Deptid = productTeacher.Deptid,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
IsPacks = false,
ProductId = code,
TeacherCode = teacher
});
}
}
}
await _crmRepository.GetRepository<ProductPackage>().InsertAsync(productPackage);
await transactionCrm.CommitAsync();
// 新增千托信息
if (dto.ProductCodes != null && dto.ProductCodes.Any())
{
foreach (var productCode in dto.ProductCodes)
{
var baseproduct = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(m => m.Id == productCode.ProductCode);
await _zxdRepository.GetRepository<BaseProductPackageRelation>().InsertAsync(new BaseProductPackageRelation
{
PackageCode = code,
ProductCode = productCode.ProductCode,
Price = productCode.Price,
Day = baseproduct.Day,
Moduleid = baseproduct.Moduleid,
ProductName = baseproduct.Name
});
}
}
await _zxdRepository.GetRepository<BaseProductPackage>().InsertAsync(baseProductPackage);
await transactionZxd.CommitAsync();
}
catch (Exception ex)
{
await transactionCrm.RollbackAsync();
await transactionCrm.DisposeAsync();
await transactionZxd.RollbackAsync();
await transactionZxd.DisposeAsync();
Log.Error(ex, "添加组合产品错误!");
throw;
}
}
else
{
productPackCode = dto.ProductCode;
var productPackage = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == dto.ProductCode);
code = productPackage.Id;
productPackage.Name = dto.ProductName;
productPackage.Price = dto.Price;
productPackage.Groupid = dto.ProductType;
productPackage.UpdateTime = DateTime.Now;
productPackage.EffectiveImmediately = dto.AutoOpen;
productPackage.Active = 2;
productPackage.SubProducts = string.Join("|", dto.ProductCodes.Select(x => x.ProductCode).ToList());
productPackage.SubProductsInfo = subProductsInfo;
using var transactionCrm = await _crmRepository.BeginTransactionAsync();
using var transactionZxd = await _zxdRepository.BeginTransactionAsync();
try
{
var oldTeacher = await _crmRepository.GetRepository<ProductTeacher>().Query().Where(n => n.ProductId == code).ToListAsync();
// 新增优品信息
if (dto.Teachers != null && dto.Teachers.Any())
{
foreach (var productTeacher in dto.Teachers)
{
if (productTeacher.TeacherCodes == null || !productTeacher.TeacherCodes.Any()) continue;
foreach (var teacher in productTeacher.TeacherCodes)
{
await _crmRepository.GetRepository<ProductTeacher>().InsertAsync(new ProductTeacher
{
Deptid = productTeacher.Deptid,
CreateTime = DateTime.Now,
UpdateTime = DateTime.Now,
IsPacks = false,
ProductId = code,
TeacherCode = teacher
});
}
}
}
await _crmRepository.GetRepository<ProductTeacher>().BatchDeleteAsync(oldTeacher);
await _crmRepository.GetRepository<ProductPackage>().UpdateAsync(productPackage);
await transactionCrm.CommitAsync();
// 新增千托信息
var baseProductPackage = await _zxdRepository.GetRepository<BaseProductPackage>().Query().FirstOrDefaultAsync(n => n.Code == dto.ProductCode);
if (baseProductPackage != null)
{
baseProductPackage.Code = code;
baseProductPackage.Name = dto.ProductName;
baseProductPackage.Price = dto.Price;
baseProductPackage.Groupid = dto.ProductType;
baseProductPackage.UpdateTime = DateTime.Now;
baseProductPackage.EffectiveImmediately = dto.AutoOpen;
baseProductPackage.Active = 2;
await _zxdRepository.GetRepository<BaseProductPackage>().UpdateAsync(baseProductPackage);
}
else
{
baseProductPackage = new BaseProductPackage
{
Code = code,
Name = dto.ProductName,
Price = dto.Price,
Groupid = dto.ProductType,
Ctime = DateTime.Now,
UpdateTime = DateTime.Now,
EffectiveImmediately = dto.AutoOpen,
Active = 2,
};
await _zxdRepository.GetRepository<BaseProductPackage>().InsertAsync(baseProductPackage);
}
var oldRelationList = await _zxdRepository.GetRepository<BaseProductPackageRelation>().Query().Where(n => n.PackageCode == dto.ProductCode).ToListAsync();
if (dto.ProductCodes != null && dto.ProductCodes.Any())
{
foreach (var productCode in dto.ProductCodes)
{
var baseproduct = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(m => m.Id == productCode.ProductCode);
await _zxdRepository.GetRepository<BaseProductPackageRelation>().InsertAsync(new BaseProductPackageRelation
{
PackageCode = code,
ProductCode = productCode.ProductCode,
Price = productCode.Price,
Day = baseproduct.Day,
Moduleid = baseproduct.Moduleid,
ProductName = baseproduct.Name
});
}
}
await _zxdRepository.GetRepository<BaseProductPackageRelation>().BatchDeleteAsync(oldRelationList);
await transactionZxd.CommitAsync();
}
catch (Exception ex)
{
await transactionCrm.RollbackAsync();
await transactionCrm.DisposeAsync();
await transactionZxd.RollbackAsync();
await transactionZxd.DisposeAsync();
Log.Error(ex, "更新组合产品错误!");
throw;
}
}
return productPackCode;
}
/// <summary>
/// 组合产品编辑
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
public async Task<EditProductPackageDto> EditProductPackage(ChangeProductStatusDto dto)
{
EditProductPackageDto res = new EditProductPackageDto();
//产品下拉框 处理
res.Group = await GetProductGroupSelect();
res.Module = await GetModuleSelect();
res.Teacher = await GetProductTeacherSelect();
res.Dept = await _deptmentDomain.GetDeptments();
res.ProductList = await _crmRepository.GetRepository<Product>().Query().OrderByDescending(x => x.Id)
.Select(x => new ProductDto
{
Id = x.Pk,
ProdcutCode = x.Id,
Price = $"{x.Price:0.00}元",
ProdcutName = x.Name,
ProdcutType = x.ProductGroup.Name,
ProductModule = $"{x.Module.Name}【{x.Moduleid}】【{x.Day}】",
Day = $"{x.Day}天",
Status = x.Active == 1 ? "已上线" : "未上线",
Ctime = x.Ctime.ToString("yyyy-MM-dd HH:mm:ss"),
EffectiveImmediately = x.EffectiveImmediately.Value ? "是" : "否"
}).ToListAsync();
if (string.IsNullOrWhiteSpace(dto.ProductCode))
{
return res;
}
var product = await _crmRepository.GetRepository<ProductPackage>().Query()
.FirstOrDefaultAsync(x => x.Id == dto.ProductCode);
if (product == null)
{
throw new ApiException("产品不存在或已删除!");
}
var subCodes = product.SubProductCodes;
var subProductList = await _crmRepository.GetRepository<Product>().Query().Where(n => subCodes.Contains(n.Id)).ToListAsync();
List<CreateProductCodeDto> subProCodes = new List<CreateProductCodeDto>();
foreach (var subpro in subProductList)
{
subProCodes.Add(new CreateProductCodeDto
{
Price = (decimal)subpro.Price,
ProductCode = subpro.Id
});
}
res.ProductCode = product.Id;
res.ProductCodes = subProCodes;
res.ProductName = product.Name;
res.Free = product.Id.IndexOf("_MFTY") > 0 ? true : false;
res.Price = product.Price;
res.EffectiveImmediately = product.EffectiveImmediately;
res.ProductType = product.Groupid;
res.Status = product.Active;
var teacherList = await _crmRepository.GetRepository<ProductTeacher>().Query()
.Include(x => x.Teacher)
.Where(n => n.ProductId == product.Id).ToListAsync();
var deptGroup = teacherList.Select(n => n.Deptid).Distinct().ToList();
var deptments = await _repository.GetRepository<Deptment>().Query().Where(n => deptGroup.Contains(n.Id)).ToListAsync();
List<ProTeacherInfo> proTeacherInfos = new List<ProTeacherInfo>();
foreach (var deptid in deptGroup)
{
var teachers = teacherList.Where(n => n.Deptid == deptid).ToList();
ProTeacherInfo teaInfo = new ProTeacherInfo
{
dept_val = deptid,
dept_txt = deptments.FirstOrDefault(n => n.Id == deptid)?.Title
};
List<teacherInfo> tealist = new List<teacherInfo>();
foreach (var tea in teachers)
{
tealist.Add(new teacherInfo
{
code = tea.Teacher.Code,
name = tea.Teacher.Name
});
}
teaInfo.teacherInfos = tealist;
proTeacherInfos.Add(teaInfo);
}
res.ProTeacherInfo = proTeacherInfos;
return res;
}
public async Task SyncProductPackage()
{
var productPackageList = await _crmRepository.GetRepository<ProductPackage>().QueryListAsync();
var baseProductPackageList = await _zxdRepository.GetRepository<BaseProductPackage>().QueryListAsync();
foreach (var productPackage in productPackageList)
{
var baseProductPackage = baseProductPackageList.FirstOrDefault(x => x.Code == productPackage.Id);
if (baseProductPackage == null)
{
baseProductPackage = new BaseProductPackage
{
Code = productPackage.Id,
Name = productPackage.Name,
Price = productPackage.Price,
Groupid = productPackage.Groupid,
Ctime = productPackage.Ctime,
EffectiveImmediately = productPackage.EffectiveImmediately,
Remark = productPackage.Remark,
Appext = productPackage.Appext,
Appextinfo = productPackage.Appextinfo,
AppImgUrl = productPackage.AppImgUrl,
Extinfo = productPackage.Extinfo,
Old = productPackage.Old,
WebImgUrl = productPackage.WebImgUrl,
UpdateTime = productPackage.UpdateTime,
Active = productPackage.Active,
};
if (productPackage.SubProducts != null && productPackage.SubProductsInfos != null)
{
var productCodes = productPackage.SubProducts.Split('|');
foreach (var subProduct in productPackage.SubProductsInfos)
{
var product = await _crmRepository.GetRepository<Product>().Query()
.Where(x => x.Id == subProduct.SubProductId)
.FirstOrDefaultAsync();
await _zxdRepository.GetRepository<BaseProductPackageRelation>().InsertAsync(new BaseProductPackageRelation
{
PackageCode = productPackage.Id,
Price = !string.IsNullOrEmpty(subProduct.SubPrice) && decimal.TryParse(subProduct.SubPrice, out decimal price) ? price : 0,
ProductCode = subProduct.SubProductId,
Moduleid = product?.Moduleid,
Day = product?.Day,
ProductName = product?.Name
});
}
}
await _zxdRepository.GetRepository<BaseProductPackage>().InsertAsync(baseProductPackage);
continue;
}
if (baseProductPackage.Name != productPackage.Name
|| baseProductPackage.Price != productPackage.Price
|| baseProductPackage.Groupid != productPackage.Groupid
|| baseProductPackage.Ctime != productPackage.Ctime
|| baseProductPackage.EffectiveImmediately != productPackage.EffectiveImmediately
|| baseProductPackage.Active != productPackage.Active
|| baseProductPackage.Remark != productPackage.Remark
|| baseProductPackage.Appext != productPackage.Appext
|| baseProductPackage.Appextinfo != productPackage.Appextinfo
|| baseProductPackage.AppImgUrl != productPackage.AppImgUrl
|| baseProductPackage.Extinfo != productPackage.Extinfo
|| baseProductPackage.Old != productPackage.Old
|| baseProductPackage.WebImgUrl != productPackage.WebImgUrl
|| baseProductPackage.UpdateTime != productPackage.UpdateTime)
{
baseProductPackage.Name = productPackage.Name;
baseProductPackage.Price = productPackage.Price;
baseProductPackage.Groupid = productPackage.Groupid;
baseProductPackage.Ctime = productPackage.Ctime;
baseProductPackage.EffectiveImmediately = productPackage.EffectiveImmediately;
baseProductPackage.Active = productPackage.Active;
baseProductPackage.Remark = productPackage.Remark;
baseProductPackage.Appext = productPackage.Appext;
baseProductPackage.Appextinfo = productPackage.Appextinfo;
baseProductPackage.AppImgUrl = productPackage.AppImgUrl;
baseProductPackage.Extinfo = productPackage.Extinfo;
baseProductPackage.Old = productPackage.Old;
baseProductPackage.WebImgUrl = productPackage.WebImgUrl;
baseProductPackage.UpdateTime = productPackage.UpdateTime;
await _zxdRepository.GetRepository<BaseProductPackage>().UpdateAsync(baseProductPackage);
}
}
}
#endregion
#region
public async Task<BaseProductInfoDto> GetBaseProduct(string code)
{
if (string.IsNullOrEmpty(code))
{
throw new ApiException("产品编码不能为空!");
}
var product = await _crmRepository.GetRepository<Product>().Query()
.Include(x => x.ProductGroup)
.Include(x => x.Module)
.FirstOrDefaultAsync(x => x.Id == code);
var productPackage = await _crmRepository.GetRepository<ProductPackage>().Query()
.Include(x => x.ProductGroup)
.FirstOrDefaultAsync(x => x.Id == code);
if (product == null && productPackage == null)
{
throw new ApiException("产品不存在或已删除!");
}
if (product != null)
{
return new BaseProductInfoDto
{
Code = product.Id,
Day = product.Day ?? 0,
Price = (decimal)product.Price,
ProductName = product.Name ?? "",
ProductProperty = "基础产品",
ProductType = product.ProductGroup?.Name ?? "",
Status = product.Active == 1 ? "已上线" : "未上线",
ProductModules = new List<string>() { product.Moduleid ?? "" }
};
}
if (productPackage != null)
{
var productCodes = string.IsNullOrEmpty(productPackage.SubProducts) ? new List<string>()
: productPackage.SubProducts.Split('|').ToList();
var data = new BaseProductInfoDto
{
Code = productPackage.Id,
Price = (decimal)productPackage.Price,
ProductName = productPackage.Name ?? "",
ProductProperty = "组合产品",
ProductType = productPackage.ProductGroup?.Name ?? "",
Status = productPackage.Active == 1 ? "已上线" : "未上线"
};
if (productCodes.Any())
{
var productList = await _crmRepository.GetRepository<Product>().Query()
.Where(x => productCodes.Contains(x.Id))
.ToListAsync();
data.Day = productList.Sum(x => x.Day ?? 0);
data.ProductModules = productList.Select(x => x.Moduleid ?? "").ToList();
}
return data;
}
return new BaseProductInfoDto();
}
public async Task CreateStandardProduct(CreateStandardProductDto dto)
{
if (string.IsNullOrEmpty(dto.ProductCode))
{
throw new ApiException("产品编码不能为空!");
}
var code = dto.ProductCode;
var product = await _crmRepository.GetRepository<Product>().Query()
.Include(x => x.ProductGroup)
.Include(x => x.Module)
.FirstOrDefaultAsync(x => x.Id == code);
var productPackage = await _crmRepository.GetRepository<ProductPackage>().Query()
.Include(x => x.ProductGroup)
.FirstOrDefaultAsync(x => x.Id == code);
if (product == null && productPackage == null)
{
throw new ApiException("产品不存在或已删除!");
}
var standardProduct = new StandardProduct
{
ProductCode = product != null ? dto.ProductCode : null,
ProductPackageCode = productPackage != null ? dto.ProductCode : null,
StandardType = (StandardType)dto.StandardType,
Way = dto.StandardWay,
CreateTime = DateTime.Now
};
await _zxdRepository.GetRepository<StandardProduct>().InsertAsync(standardProduct);
}
public async Task<PageResult<StandardProductDto>> StandardProductPage(SearchStandardProductDto dto)
{
var productCodes = new List<string>();
var productPackageCodes = new List<string>();
if (!string.IsNullOrEmpty(dto.ProductName))
{
productCodes = await _crmRepository.GetRepository<Product>().Query()
.Where(x => x.Name.Contains(dto.ProductName))
.Select(x => x.Id)
.ToListAsync();
productPackageCodes = await _crmRepository.GetRepository<ProductPackage>().Query()
.Where(x => x.Name.Contains(dto.ProductName))
.Select(x => x.Id)
.ToListAsync();
}
var query = _zxdRepository.GetRepository<StandardProduct>().Query()
.If(dto.Id != null, x => x.Where(x => x.Id == dto.Id))
.If(dto.StandardType != null, x => x.Where(x => x.StandardType == (StandardType)dto.StandardType))
.If(productCodes.Any(), x => x.Where(x => productCodes.Contains(x.ProductCode)))
.If(productPackageCodes.Any(), x => x.Where(x => productPackageCodes.Contains(x.ProductPackageCode)))
.Include(x => x.FinishedProducts);
var total = await query.CountAsync();
var data = await query
.Select(x => new StandardProductDto
{
Id = x.Id,
CreateTime = x.CreateTime,
StandardProductType = ((StandardType)x.StandardType).GetDescription(),
ProductCode = string.IsNullOrEmpty(x.ProductCode) ? x.ProductPackageCode : x.ProductCode,
ProductProperty = string.IsNullOrEmpty(x.ProductCode) ? "组合产品" : "基础产品",
FinishedProductCount = x.FinishedProducts == null ? 0 : x.FinishedProducts.Count
})
.Skip((dto.PageIndex - 1) * dto.PageSize)
.Take(dto.PageSize)
.ToListAsync();
var productList = new List<Product>();
var productPackageList = new List<ProductPackage>();
var productPackageProductList = new List<Product>();
if (data.Any())
{
productList = await _crmRepository.GetRepository<Product>().Query()
.Where(x => data.Select(y => y.ProductCode).Contains(x.Id))
.Include(x => x.Module)
.Include(x => x.ProductGroup)
.ToListAsync();
productPackageList = await _crmRepository.GetRepository<ProductPackage>().Query()
.Where(x => data.Select(y => y.ProductCode).Contains(x.Id))
.Include(x => x.ProductGroup)
.ToListAsync();
if (productPackageList.Any())
{
var productPackageProductCodes = new List<string>();
productPackageList.ForEach(x =>
{
if (x.SubProductCodes != null && x.SubProductCodes.Any())
{
productPackageCodes.AddRange(x.SubProductCodes);
}
});
productPackageProductList = await _crmRepository.GetRepository<Product>().Query()
.Where(x => productPackageProductCodes.Contains(x.Id))
.Include(x => x.Module)
.Include(x => x.ProductGroup)
.ToListAsync();
}
}
data.ForEach(x =>
{
var product = productList.FirstOrDefault(y => y.Id == x.ProductCode);
var productPackage = productPackageList.FirstOrDefault(y => y.Id == x.ProductCode);
if (product != null)
{
x.Day = product.Day.ToString();
x.Price = $"{product.Price:0:00}元";
x.StandardProductName = product.Name;
x.Status = product.Active == 1 ? "已上线" : "未上线";
x.StandardProductModule = new List<string> { $"{product.Module.Name}【{product.Moduleid}】【{product.Day}】" };
}
if (productPackage != null)
{
var productPackageProducts = productPackageProductList
.Where(y => productPackage.SubProductCodes.Contains(y.Id)).ToList();
x.Day = string.Join("/", productPackageProducts.Select(x => x.Day).ToList());
x.Price = $"{productPackage.Price:0:00}元";
x.StandardProductName = productPackage.Name;
x.Status = productPackage.Active == 1 ? "已上线" : "未上线";
x.StandardProductModule = productPackageProducts.Select(y => $"{y.Module.Name}【{y.Moduleid}】【{y.Day}】").ToList();
}
});
return new PageResult<StandardProductDto>(dto.PageIndex, dto.PageSize, total, data);
}
public async Task ImportCombinationProduct(List<CreateProductPackageDto> dto)
{
foreach (var product in dto)
{
await CreateProductPackage(product);
Thread.Sleep(1000);
}
}
#endregion
#region
/// <summary>
/// 获取合同地址 免费活动订单需传自定义的产品名
/// </summary>
/// <param name="ordeid"></param>
/// <param name="productName"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<string> GetContractByFreeOrderId(decimal ordeid)
{
var orderInfo = await GetContractOrderInfo(ordeid);
var product = await GetProductInfo(orderInfo.productcode);// _zxdRepository.GetRepository<WxSzzySubproduct>().FirstOrDefaultAsync(n => n.productcode == freeOrder.subproductcode);//合同地址
if (product == null)
{
throw new Exception("找不到对应的产品");
}
var urlKey = await _zxdRepository.GetRepository<BAS_PARAMETER>().FirstOrDefaultAsync(n => n.PARAKEY == "UserCenter_RiaService_ContractSignThree");//合同地址
var threeUrl = urlKey?.PARAVALUE;
var clientidKey = await _zxdRepository.GetRepository<BAS_PARAMETER>().FirstOrDefaultAsync(n => n.PARAKEY == "Sys_OrderClientIdKey");
var clientid = clientidKey?.PARAVALUE;
if (string.IsNullOrWhiteSpace(clientid))
{
clientid = "UPWEBSITE";
}
var json = new
{
productName = orderInfo.productname,
period = string.Format("{0}天", orderInfo.day),
price = string.Format("{0}元", 0.ToString("#0.00")),
userId = orderInfo.username,
productLevel = product.productlevel,
productInvestTime = product.productinvesttime,
productInvestType = product.productinvesttype,
issupplement = 1,
orderId = orderInfo.szzyorderid.ToString(),
htid = string.Format("DN{0}", orderInfo.szzyorderid.ToString())
};
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var key = systemConfig.GetAccessKey(clientid);
var content = SecurityHelper.EncyptData(json.ToJson(), key);
string sign = SecurityHelper.SignData(content, key);
var threehtUrl = threeUrl + string.Format("?content={0}&sign={1}&clientId={2}&protocolType=", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid);
return threehtUrl;
}
/// <summary>
/// 获取订单所需要的合同信息 免费产品需传坐席的名称
/// </summary>
/// <param name="ordeid"></param>
/// <param name="productname"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public async Task<ContractOrderInfo> GetContractOrderInfo(decimal orderid)
{
var result = new ContractOrderInfo();
var order = await _zxdRepository.GetRepository<WX_SZZYORDER>().FirstOrDefaultAsync(n => n.ORDERID == orderid);
if (order != null)
{
result.productcode = order.PRODUCTCODE;
result.szzyorderid = order.SZZYORDERID.ToString();
result.productname = order.SUBPRODUCTNAME;
result.day = order.OPENDAYS;
result.username = order.SOFTUSERNAME;
result.ContractCode = order.CONTRACTCODE;
result.ContractStatus = order.contractstatus;
return result;
}
var freeOrder = await _zxdRepository.GetRepository<Wx_SzzyOrder_HandGift>().FirstOrDefaultAsync(n => n.orderid == orderid);
if (freeOrder != null)
{
result.productcode = freeOrder.productcode;
result.szzyorderid = freeOrder.szzyorderid.ToString();
result.productname = freeOrder.subproductname;
result.day = freeOrder.giftdays;
result.username = freeOrder.softusername;
result.ContractCode = freeOrder.CONTRACTCODE;
result.ContractStatus = freeOrder.contractstatus;
}
else
{
var orderstr = orderid.ToString();
var l2Order = await _zxdRepository.GetRepository<L2_SOFT_ORDER>().FirstOrDefaultAsync(n => n.WEBORDERID == orderstr);
if (l2Order != null)
{
result.productcode = l2Order.PRODUCTCODE;
result.szzyorderid = l2Order.WEBORDERID;
result.productname = l2Order.productname;
result.day = l2Order.DAYS;
result.username = l2Order.USERNAME;
result.ContractCode = l2Order.CONTRACTCODE;
result.ContractStatus = l2Order.contractstatus;
}
}
if (result == null || result.szzyorderid == null)
{
throw new Exception("找不到对应的订单");
}
return result;
}
public async Task<ProductModuleInfo> GetProductInfo(string code)
{
var basProduct = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(n => n.Id == code);
if (basProduct == null)
{
var productPackage = await _crmRepository.GetRepository<ProductPackage>().Query().FirstOrDefaultAsync(n => n.Id == code);
if (productPackage != null)
{
var idArr = new List<string>(productPackage.SubProducts.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries));
basProduct = await _crmRepository.GetRepository<Product>().Query().FirstOrDefaultAsync(n => n.Id == idArr[0]);
}
}
if (basProduct == null)
{
throw new Exception("找不到对应的产品");
}
var module = await _crmRepository.GetRepository<Module>().Query().FirstOrDefaultAsync(n => n.Id == basProduct.Moduleid);
return new ProductModuleInfo
{
productinvesttime = module?.InvestTime,
productinvesttype = module?.InvestType,
productlevel = module?.RiskLevel
};
}
/// <summary>
/// 查看投顾协议 风险协议 风测 等数据
/// </summary>
/// <param name="orderid"></param>
/// <returns></returns>
public async Task<ContractResultView> GetContractView(ContractQueryDto dto)
{
var orderInfo = await GetContractOrderInfo(dto.orderid);
if (orderInfo == null)
{
throw new Exception("找不到对应的订单");
}
var res = new ContractResultView()
{
CONTRACTCODE = orderInfo.ContractCode,
CONTRACTSTATUS = orderInfo.ContractStatus
};
var productInfo = await GetProductInfo(orderInfo.productcode);
if (productInfo == null)
{
throw new Exception("找不到对应的产品");
}
var threeUrl = await GetBasParameterValue("UserCenter_RiaService_ContractSignThree");
var clientidKey = await _zxdRepository.GetRepository<BAS_PARAMETER>().FirstOrDefaultAsync(n => n.PARAKEY == "Sys_OrderClientIdKey");
var clientid = clientidKey?.PARAVALUE;
if (string.IsNullOrWhiteSpace(clientid))
{
clientid = "UPWEBSITE";
}
var json = new
{
productName = orderInfo.productname,
period = string.Format("{0}天", orderInfo.day),
price = string.Format("{0}元", 0.ToString("#0.00")),
userId = orderInfo.username,
productLevel = productInfo.productlevel,
productInvestTime = productInfo.productinvesttime,
productInvestType = productInfo.productinvesttype,
issupplement = 1,
orderId = orderInfo.szzyorderid.ToString(),
htid = string.Format("DN{0}", orderInfo.szzyorderid.ToString())
};
var systemConfig = _configuration.GetSection("SystemConfig").Get<SystemConfig>();
var key = systemConfig.GetAccessKey(clientid);
var content = SecurityHelper.EncyptData(json.ToJson(), key);
string sign = SecurityHelper.SignData(content, key);
var threehtUrl = threeUrl + string.Format("?content={0}&sign={1}&clientId={2}&protocolType=", HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid);
res.htUrl = threehtUrl;
//===================合同Url测试===============
//合同生成URL测试
var url = await GetBasParameterValue(Parameter.UserCenter_RiaService_SignPdf.ToString());
//风险揭示书
content = SecurityHelper.EncyptData("R_DN" + orderInfo.szzyorderid.ToString(), key);
sign = SecurityHelper.SignData(content, key);
string fxjssUrl = string.Format("{0}/{4}-风险揭示书.pdf?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}"
, url, HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, orderInfo.productname,
dto.Eid,
dto.UserName,
dto.ViewSource,
dto.PageSource);
res.fxjssUrl = fxjssUrl;
//投顾服务协议
content = SecurityHelper.EncyptData("A_DN" + orderInfo.szzyorderid.ToString(), key);
sign = SecurityHelper.SignData(content, key);
string tgfwxyUrl = string.Format("{0}/{4}-投顾服务协议.pdf?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}",
url, HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, orderInfo.productname,
dto.Eid,
dto.UserName,
dto.ViewSource,
dto.PageSource);
res.tgfwxyUrl = tgfwxyUrl;
if (!string.IsNullOrEmpty(orderInfo.ContractCode))
{
var riskinfoUrl = await GetBasParameterValue("riskinfo");
var htflagUrl = await GetBasParameterValue("htflag");
if (string.IsNullOrEmpty(riskinfoUrl))
{
riskinfoUrl = "https://r2.soft.dn8188.com/contract_sign_crm/get_riskinfo";
}
if (string.IsNullOrEmpty(htflagUrl))
{
htflagUrl = "https://r2.soft.dn8188.com/contract_sign_crm/get_htflag";
}
var bf = "{\"uid\": \"" + orderInfo.username + "\",\"htid\":\"DN" + orderInfo.szzyorderid.ToString() + "\"}";
var hqr = BlowFish.Encode(bf);
var para = new { hqr };
var ret1 = await _httpClient.PostAsync<RiskInfoDto>(riskinfoUrl, para);
//var ret1 = JsonConvert.DeserializeObject<RiskInfoDto>(riskData);
//LogHelper.Info(ret1.ToJson());
if (ret1.ret == 0)
{
//风险评测页面
var riskcontent = SecurityHelper.EncyptData(ret1.ToJson(), key);
string risksign = SecurityHelper.SignData(riskcontent, key);
var hgUrl = await GetBasParameterValue("HgSoftWebUrl");
var a = HttpUtility.UrlEncode(riskcontent);
var b = HttpUtility.UrlEncode(risksign);
string fxpcUrl = string.Format("{0}/Compliance/NewRisk?content={1}&sign={2}&clientId={3}&decode=false",
hgUrl, a, b, clientid);
res.fxpcUrl = fxpcUrl;
res.businesstype = ret1.businesstype;
if (ret1.businesstype != "smallAmount")
{
var ret = await _httpClient.GetAsync($"{htflagUrl}?htid={orderInfo.ContractCode}");
var retObj = JsonConvert.DeserializeAnonymousType(ret, new { ret = -1, msg = string.Empty });
if (retObj.ret != -1)
{
if (retObj.ret == 0)
{
//产品或服务不适当警示确认书
content = SecurityHelper.EncyptData("I_DN" + orderInfo.szzyorderid.ToString(), key);
sign = SecurityHelper.SignData(content, key);
string cphfwUrl = string.Format("{0}/{4}-产品或服务不适当警示及投资者确认书.pdf ?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}",
url, HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, orderInfo.productname,
dto.Eid,
dto.UserName,
dto.ViewSource,
dto.PageSource);
res.cphfwUrl = cphfwUrl;
}
else if (retObj.ret == 1)
{
//适当性评估结果确认书
content = SecurityHelper.EncyptData("S_DN" + orderInfo.szzyorderid.ToString(), key); //sHelper.encyptData(clientid, "S_DN" + order.SZZYORDERID.ToString());
sign = SecurityHelper.SignData(content, key);
string sdxpgUrl = string.Format("{0}/{4}-适当性评估结果确认书.pdf ?content={1}&sign={2}&clientId={3}&employeeId={5}&employeeName={6}&viewSource={7}&pageSource={8}",
url, HttpUtility.UrlEncode(content), HttpUtility.UrlEncode(sign), clientid, orderInfo.productname,
dto.Eid,
dto.UserName,
dto.ViewSource,
dto.PageSource);
res.sdxpgUrl = sdxpgUrl;
}
}
}
}
}
return res;
}
private async Task<string> GetBasParameterValue(string key)
{
var urlKey = await _zxdRepository.GetRepository<BAS_PARAMETER>().FirstOrDefaultAsync(n => n.PARAKEY == key);//合同地址
return urlKey?.PARAVALUE;
}
#endregion
}
}