tuiwucarrer/Admin.NET/Admin.NET.Application/Service/SysWechatUserMapCarts/SysWechatUserMapCartsServic...

499 lines
21 KiB
C#

using Admin.NET.Application.Service;
using Admin.NET.Core.Service;
using Microsoft.AspNetCore.Http;
using MongoDB.Bson;
using MongoDB.Driver;
using System.IO;
using Newtonsoft.Json;
using MiniExcelLibs;
namespace Admin.NET.Application;
/// <summary>
///专家端服务
/// </summary>
[ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 100)]
public class SysWechatUserMapCartsService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<SysWechatUserMapCarts> _rep;
private readonly SqlSugarRepository<SysWechatUser> _userRep;
private readonly SqlSugarRepository<SysWeChatUserExtend> _userExtendRep;
private readonly SqlSugarRepository<SysVolunteerTb> _volunteerRep;
private readonly SqlSugarRepository<SysVolunteerTbSp> _vtbSpRep;
private readonly UserManager _userManager;
private readonly SqlSugarRepository<SysWeChatUserExtend> _wechatUserExtendrep;
private readonly IMongoDBRepository _mongoRepository;
public SysWechatUserMapCartsService(SqlSugarRepository<SysWechatUserMapCarts> rep, SqlSugarRepository<SysWechatUser> userRepository,
SqlSugarRepository<SysVolunteerTb> volunteerRepository, SqlSugarRepository<SysVolunteerTbSp> vSpRep, UserManager userManager, IMongoDBRepository mongoRepository, SqlSugarRepository<SysWeChatUserExtend> userExtendRep, SqlSugarRepository<SysWeChatUserExtend> wechatUserExtendrep)
{
_rep = rep;
_userRep = userRepository;
_volunteerRep = volunteerRepository;
_vtbSpRep = vSpRep;
_userManager = userManager;
_mongoRepository = mongoRepository;
_userExtendRep = userExtendRep;
_wechatUserExtendrep = wechatUserExtendrep;
}
/// <summary>
/// 分页查询用户订单关联表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Page")]
public async Task<SqlSugarPagedList<SysWechatUserMapCartsOutput>> Page(SysWechatUserMapCartsInput input)
{
var query = _rep.AsQueryable()
.WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
u.Phone.Contains(input.SearchKey.Trim())
|| u.OrderId.Contains(input.SearchKey.Trim())
|| u.cartId.Contains(input.SearchKey.Trim())
|| u.Amount.Contains(input.SearchKey.Trim())
|| u.OpenId.Contains(input.SearchKey.Trim())
|| u.ZjOpenId.Contains(input.SearchKey.Trim())
)
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), u => u.Phone.Contains(input.Phone.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.OrderId), u => u.OrderId.Contains(input.OrderId.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.cartId), u => u.cartId.Contains(input.cartId.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.Amount), u => u.Amount.Contains(input.Amount.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.OpenId), u => u.OpenId.Contains(input.OpenId.Trim()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ZjOpenId), u => u.ZjOpenId.Contains(input.ZjOpenId.Trim()))
//处理外键和TreeSelector相关字段的连接
.LeftJoin<BusSpecialistGroup>((u, cartid) => u.cartId == cartid.MajorType.ToString())
.LeftJoin<SysWechatUser>((u, cartid, openid) => u.OpenId == openid.OpenId)
.LeftJoin<SysWechatUser>((u, cartid, openid, zjopenid) => u.ZjOpenId == zjopenid.OpenId)
.OrderBy(u => u.CreateTime)
.Select((u, cartid, openid, zjopenid) => new SysWechatUserMapCartsOutput
{
Id = u.Id,
Phone = u.Phone,
OrderId = u.OrderId,
cartId = u.cartId,
cartName = cartid.Name,
Amount = u.Amount,
CreateTime = u.CreateTime,
UpdateTime = u.UpdateTime,
CreateUserId = u.CreateUserId,
CreateUserName = u.CreateUserName,
UpdateUserId = u.UpdateUserId,
UpdateUserName = u.UpdateUserName,
IsDelete = u.IsDelete,
OpenId = u.OpenId,
OpenIdNickName = openid.NickName,
ZjOpenId = u.ZjOpenId,
ZjOpenIdNickName = zjopenid.NickName,
});
return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
}
/// <summary>
/// 获取用户订单关联表列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "List")]
public async Task<List<SysWechatUserMapCartsOutput>> List([FromQuery] SysWechatUserMapCartsInput input)
{
return await _rep.AsQueryable().Select<SysWechatUserMapCartsOutput>().ToListAsync();
}
/// <summary>
/// 获取关联专家介绍页面唯一Id列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "BusSpecialistGroupcartIdDropdown"), HttpGet]
public async Task<dynamic> BusSpecialistGroupcartIdDropdown()
{
return await _rep.Context.Queryable<BusSpecialistGroup>()
.Select(u => new
{
Label = u.Name,
Value = u.Id
}
).ToListAsync();
}
/// <summary>
/// 获取OpenId列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SysWechatUserOpenIdDropdown"), HttpGet]
public async Task<dynamic> SysWechatUserOpenIdDropdown()
{
return await _rep.Context.Queryable<SysWechatUser>()
.Select(u => new
{
Label = u.NickName,
Value = u.Id
}
).ToListAsync();
}
/// <summary>
/// 获取ZjOpenId列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[ApiDescriptionSettings(Name = "SysWechatUserZjOpenIdDropdown"), HttpGet]
public async Task<dynamic> SysWechatUserZjOpenIdDropdown()
{
return await _rep.Context.Queryable<SysWechatUser>()
.Select(u => new
{
Label = u.NickName,
Value = u.Id
}
).ToListAsync();
}
/// <summary>
/// 专家订单列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "SpecialistGroupOrderList")]
public async Task<List<SysWechatUserMapCartsOutput>> SpecialistGroupOrderList([FromQuery] SpecialistGroupOrderListInput input)
{
return await _rep.AsQueryable()
.Where(e => e.cartId == input.catId)
.WhereIF(!string.IsNullOrWhiteSpace(input.OrderId), s => s.OrderId.Contains(input.OrderId))
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), s => s.OrderId.Contains(input.Phone))
.Select<SysWechatUserMapCartsOutput>().ToListAsync();
}
/// <summary>
/// 用户订单列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "UserOrderList")]
public async Task<List<SysWechatUserMapCartsOutput>> UserOrderList([FromQuery] SpecialistGroupOrderListInput input)
{
return await _rep.AsQueryable()
//.Where(e => e.cartId == input.catId)
.WhereIF(!string.IsNullOrWhiteSpace(input.OrderId), s => s.OrderId.Contains(input.OrderId))
.WhereIF(!string.IsNullOrWhiteSpace(input.Phone), s => s.Phone.Contains(input.Phone))
.Select<SysWechatUserMapCartsOutput>().ToListAsync();
}
/// <summary>
/// 获取专家的客户的志愿表列表
/// 详情和导出都可以直接用 VolunTb的原始接口
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "GetCustomerTbList")]
public async Task<List<VoTableDtoResponse>> GetCustomerTbList([FromQuery] SpecialistGroupOrderListInput input)
{
var customer = await _userRep.AsQueryable().Where(e => e.Mobile == input.Phone).FirstAsync();
if (customer == null)
{
Oops.Oh("未找到用户信息");
}
var provinceCode = (await _userExtendRep.AsQueryable().Where(e => e.WxId == customer.Id).FirstAsync()).ProvinceCode;
var tblist = await _volunteerRep.AsQueryable().Where(e => e.CId == customer.Id && e.IsPush == true).Select(c => new VoTableDtoResponse()
{
BatchName = c.BatchName,
CId = c.CId,
Score = c.Score,
SubjectClaim = c.SubjectClaim,
CustomerName = customer.NickName,
personlocationCode = provinceCode,
TableName = c.TableName,
Type = c.Type,
VId = c.Id,
CreateTime = c.CreateTime
}).OrderByDescending(c => c.VId).ToListAsync();
return tblist;
}
/// <summary>
/// 复制用户志愿表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<bool> CopyTbZy([FromBody] CopyTbZyInput input)
{
var vModel = await _volunteerRep.AsQueryable().FirstAsync(e => e.Id == input.tId);
if (vModel == null)
Oops.Oh("志愿数据不存在或已删除");
var entity = vModel.Adapt<SysVolunteerTbSp>();
entity.SCId = input.SpId;
entity.LocationCode = input.locationCode;
var wxextend = await _wechatUserExtendrep.GetFirstAsync(e => e.WxId == vModel.CId);
entity.Sp = wxextend.sp.Value;
if(await _vtbSpRep.IsAnyAsync(e => e.Id == vModel.Id))
{
await _vtbSpRep.DeleteAsync(e => e.Id == vModel.Id);
}
return await _vtbSpRep.InsertAsync(entity);
}
/// <summary>
/// 修改我的志愿
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Put")]
public async Task<long> Put([FromBody] VoTableDtoRequest request)
{
if (request.VId <= 0)
{
throw Oops.Oh("志愿id为必传");
}
var model = await _vtbSpRep.GetSingleAsync(c => c.Id == request.VId);
if (!string.IsNullOrWhiteSpace(request.TableName)) { model.TableName = request.TableName; }
model.Detail = request.vTbDetails.ToJson();
model.UpdateTime = DateTime.Now;
model.UpdateUserName = _userManager.RealName;
model.UpdateUserId = _userManager.UserId;
await _vtbSpRep.UpdateAsync(model);
return model.Id;
}
/// <summary>
/// 删除我的志愿表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[ApiDescriptionSettings(Name = "Delete")]
public async Task Delete(DeleteSysVolunteerTbInput input)
{
var entity = await _vtbSpRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
await _vtbSpRep.FakeDeleteAsync(entity); //假删除
}
/// <summary>
/// 已添加志愿列表详情
/// </summary>
/// <param name="Id"></param>
/// <param name="location"></param>
/// <returns></returns>
[HttpGet]
[ApiDescriptionSettings(Name = "Get")]
public async Task<VoTabDetailDto> Get([FromQuery] long Id, string location)
{
var asrespose = new VoTabDetailDto();
var entity = await _vtbSpRep.GetFirstAsync(u => u.Id == Id);
var rep = new VoTableDtoResponse();
rep.CId = entity.CId;
rep.Sp = entity.Sp;
rep.TableName = entity.TableName;
rep.BatchName = entity.BatchName;
rep.Type = entity.Type;
rep.SubjectClaim = entity.SubjectClaim;
rep.Score = entity.Score;
var userInfo = await _userRep.AsQueryable().FirstAsync(e => e.Id == entity.CId);
rep.CustomerName = userInfo?.NickName;
asrespose.VoTable = rep;
var jsons = JsonConvert.DeserializeObject<List<VTbDetailDto>>(entity.Detail);
var pids = jsons.SelectMany(c => c.vItems.Select(c => c._pId).ToList()).ToList();
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var bejson = dbclient.GetCollection<zsplanfusionmodel>(string.Format("zsplanfusionmodel_{0}", location));
var filterBuilders = new List<FilterDefinition<zsplanfusionmodel>>();
filterBuilders.Add(Builders<zsplanfusionmodel>.Filter.In(p => p.pid, pids));
FilterDefinition<zsplanfusionmodel> filter = filterBuilders.Count > 0
? Builders<zsplanfusionmodel>.Filter.And(filterBuilders)
: new BsonDocument(); // 如果没有条件,则使用空过滤器
var list = await bejson.Find(filter).ToListAsync();
var dtolist = new List<TbDetailASDto>();
jsons.ForEach(c =>
{
var vlist = new List<VItemDetail>();
string educationCategory = string.Empty;
var features = new List<string>();
string ownership = string.Empty;
string province = string.Empty;
string subjectType = string.Empty;
string city = string.Empty;
string uName = string.Empty;
c.vItems.ForEach(a =>
{
var plan = list.FirstOrDefault(f => f.pid == a._pId);
uName = plan.universityName;
educationCategory = plan.educationCategory;
features = plan.features;
ownership = plan.ownership;
province = plan.province;
subjectType = plan.subjectType;
city = plan.city;
vlist.Add(new VItemDetail
{
MajorCode = plan.majorCode,
percentAge = a.percentAge,
_pId = a._pId,
Sort = a.Sort,
type = a.type,
Major = plan.majorName,
academic = plan.academicYear,
//features = plan.features,
fee = plan.fee,
nature = plan.nature,
// ownership = plan.ownership,
planCount = plan.planCount,
planItems = plan.items,
remark = plan.remark,
subjectClam = plan._23subject,
// subjectType = plan.subjectType,
});
});
dtolist.Add(new TbDetailASDto()
{
Type = c.type,
Sort = c.Sort,
UnCode = c.UnCode,
UnName = uName,
educationCategory = educationCategory,
features = features,
ownership = ownership,
province = province,
subjectType = subjectType,
city = city,
Logo = "https://static-data.ycymedu.com/6.jpg",
UnId = c.UnId,
vItems = vlist
});
});
var university = dbclient.GetCollection<UniversityDto>("university");
var unfilterBuilders = new List<FilterDefinition<UniversityDto>>();
unfilterBuilders.Add(Builders<UniversityDto>.Filter.In(p => p._id, dtolist.Select(c => c.UnId)));
FilterDefinition<UniversityDto> unfilter = unfilterBuilders.Count > 0
? Builders<UniversityDto>.Filter.And(unfilterBuilders)
: new BsonDocument(); // 如果没有条件,则使用空过滤器
var unlist = await university.Find(unfilter).ToListAsync();
dtolist.ForEach(a =>
{
a.Logo = unlist.Where(e => e._id == a.UnId).Any() ? unlist.Where(e => e._id == a.UnId).FirstOrDefault().logo : "https://api-static-zhiy.oss-cn-shanghai.aliyuncs.com/images/nocontent/empty.png";
});
asrespose.tbDetails = dtolist;
return asrespose;
}
/// <summary>
/// 导出excel
/// </summary>
/// <param name="dto"></param>
/// <returns></returns>
[HttpGet("Export")]
[ProducesResponseType(0)]
[AllowAnonymous]
public async Task<IActionResult> Export([FromQuery] ExportExcelDto dto)
{
var tableDetailItemsViews = new List<VolunteerItemsViewMinExcelAttr>();
var viewentity = await _vtbSpRep.GetFirstAsync(u => u.Id == dto.Id);
var jsons = JsonConvert.DeserializeObject<List<VTbDetailDto>>(viewentity.Detail);
var pids = jsons.SelectMany(c => c.vItems.Select(c => c._pId).ToList()).ToList();
var dbclient = _mongoRepository.Context.GetDatabase("zhiyuan");
var bejson = dbclient.GetCollection<zsplanfusionmodel>(string.Format("zsplanfusionmodel_{0}", dto.location));
var filterBuilders = new List<FilterDefinition<zsplanfusionmodel>>();
filterBuilders.Add(Builders<zsplanfusionmodel>.Filter.In(p => p.pid, pids));
FilterDefinition<zsplanfusionmodel> filter = filterBuilders.Count > 0
? Builders<zsplanfusionmodel>.Filter.And(filterBuilders)
: new BsonDocument(); // 如果没有条件,则使用空过滤器
var list = await bejson.Find(filter).ToListAsync();
jsons.ForEach(c =>
{
var vlist = new List<VItemDetail>();
string educationCategory = string.Empty;
var features = new List<string>();
string ownership = string.Empty;
string province = string.Empty;
string subjectType = string.Empty;
string city = string.Empty;
string uName = string.Empty;
c.vItems.ForEach(a =>
{
var plan = list.FirstOrDefault(f => f.pid == a._pId);
if (plan.items != null)
{
var planitems = plan.items;
var _23items = planitems.Where(e => e.year == "2023");
var _22items = planitems.Where(e => e.year == "2022");
var _21items = planitems.Where(e => e.year == "2021");
tableDetailItemsViews.Add(new VolunteerItemsViewMinExcelAttr()
{
AcademicYear = plan.academicYear,
AreaName = province,
fee = plan.fee,
Major = plan.majorName,
MajorCode = plan.majorCode,
MajorGroup = string.IsNullOrWhiteSpace(plan.majorGroup) ? "" : "(" + plan.majorGroup.Split("(")[1],
MajorSubjectClam = plan._24subject,
Nature = plan.nature,
planCount = plan.planCount,
Sort = a.Sort,
UniversityCode = c.UnCode,
UniversityName = c.UnName,
_23Scoreline = _23items.Any() ? _23items.FirstOrDefault().score == 0 ? "--" : _23items.FirstOrDefault().score.ToString() : "--",
_22Scoreline = _22items.Any() ? _22items.FirstOrDefault().score == 0 ? "--" : _22items.FirstOrDefault().score.ToString() : "--",
_21Scoreline = _21items.Any() ? _21items.FirstOrDefault().score == 0 ? "--" : _21items.FirstOrDefault().score.ToString() : "--",
_23PlanCount = _23items.Any() ? _23items.FirstOrDefault().planCount == 0 ? "--" : _23items.FirstOrDefault().planCount.ToString() : "--",
_22PlanCount = _22items.Any() ? _22items.FirstOrDefault().planCount == 0 ? "--" : _22items.FirstOrDefault().planCount.ToString() : "--",
_21PlanCount = _21items.Any() ? _21items.FirstOrDefault().planCount == 0 ? "--" : _21items.FirstOrDefault().planCount.ToString() : "--",
_23RankLine = _23items.Any() ? _23items.FirstOrDefault().rankLine == 0 ? "--" : _23items.FirstOrDefault().rankLine.ToString() : "--",
_22RankLine = _22items.Any() ? _22items.FirstOrDefault().rankLine == 0 ? "--" : _22items.FirstOrDefault().rankLine.ToString() : "--",
_21RankLine = _21items.Any() ? _21items.FirstOrDefault().rankLine == 0 ? "--" : _21items.FirstOrDefault().rankLine.ToString() : "--",
});
}
});
});
var memoryStream = new MemoryStream();
//将数据写到内存当中
memoryStream.SaveAs(tableDetailItemsViews, true, string.Format("模拟志愿表:_{0}_选科:{1}|_分数:{2}|_类型_{3}", viewentity.TableName, viewentity.SubjectClaim, viewentity.Score, viewentity.Type));
//从0的位置开始写入
memoryStream.Seek(0, SeekOrigin.Begin);
//返回文件流 //格式是Excel格式
return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
FileDownloadName = string.Format("{0}.xlsx", DateTime.Now.ToString("yyyyMMddhhssfff_"))
};
}
}