using Furion.DependencyInjection;
using Nirvana.Common;
using Nirvana.Common.ApiBase;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YBDevice.Application.AdInfo;
using YBDevice.Entity;
namespace YBDevice.Application
{
///
/// 广告管理
///
public class AdService : IAdService, ITransient
{
private readonly ISqlSugarRepository repository;
private readonly SqlSugarClient dbClient;
private readonly OperatorModel currentUser;
public AdService(ISqlSugarRepository sqlSugarRepository)
{
repository = sqlSugarRepository;
dbClient = repository.Context;
currentUser = BaseInfoService.GetUserInfo();
}
///
/// 详情
///
///
///
public async Task DetailAsync(int id)
{
var info = await dbClient.Queryable().Select(x => new BannerSubmitModel
{
Name = x.Name,
HeadImg = x.HeadImg,
Type = x.Type,
Id = x.Id,
AppId = x.AppId
}).Where(x => x.Id == id).FirstAsync();
var content = await dbClient.Queryable().Where(x => x.BannerId == id).FirstAsync();
info.content = content?.Content;
return info;
}
///
/// 获取轮播图、开屏广告列表
///
///
///
public async Task> GetListAsync(QueryParams param)
{
RefAsync totalnum = 0;
var temquery = dbClient.Queryable();
if (param.queryParam != null && param.queryParam.Count > 0)
{
List conModels = new List();
param.queryParam.ForEach(x =>
{
if (!string.IsNullOrEmpty(x.Value))
{
conModels.Add(new ConditionalModel()
{
FieldName = x.Name,
ConditionalType = (ConditionalType)x.Type,
FieldValue = x.Value.Trim()
});
}
});
if (conModels.Count > 0)
{
temquery = temquery.Where(conModels);
}
}
if (currentUser.AccountType != AccountType.platform)
{
temquery = temquery.Where(x => x.BusinessId == currentUser.BusinessId);
}
string sorts = string.Format("{0} {1}", param.sort, param.order);
var query = await temquery.OrderBy(sorts)
.Select(x => new BannerListModel
{
Id = x.Id,
BusinessId = x.BusinessId,
Createtime = x.Createtime,
ClickCount = x.ClickCount,
HeadImg = x.HeadImg,
Name = x.Name,
StartTime = x.StartTime,
Status = x.Status,
StatusRemark = x.StatusRemark,
EndTime = x.EndTime,
Type = x.Type,
AppId = x.AppId
})
.Mapper((it, cache) =>
{
var allapp = cache.Get(list =>
{
var ids = list.Select(x => x.AppId).ToList();
return dbClient.Queryable().Where(x => ids.Contains(x.authorizer_appid)).ToList();
});
it.AppId = allapp.FirstOrDefault(x => x.authorizer_appid == it.AppId)?.nick_name;
})
.ToPageListAsync(param.offset, param.limit, totalnum);
return new PageParms
{
page = param.offset,
Items = query,
totalnum = totalnum,
limit = param.limit
};
}
///
/// 获取轮播图设备列表
///
/// 轮播图ID
/// 页码
/// 每页显示的数量
/// 设备序列号
/// 设备类型
///
public async Task> GetOrderEquListAsync(int orderid, int page, int pagesize, string code, int type)
{
RefAsync totalnum = 0;
var tempquery = dbClient.Queryable();
if (currentUser.AccountType != AccountType.platform)
{
tempquery = tempquery.Where(x => x.BusinessId == currentUser.BusinessId || x.BindBusinessId == currentUser.BusinessId);
}
if (!string.IsNullOrEmpty(code))
{
tempquery = tempquery.Where(x => x.FacCode.Contains(code));
}
if (type > 0)
{
tempquery = tempquery.Where(x => x.Type == type);
}
List bindlist = new List();
if (orderid > 0)
{
bindlist = await dbClient.Queryable().Where(x => x.BannerId == orderid).ToListAsync();
}
var query = await tempquery.OrderBy(x => x.CreateTime, OrderByType.Desc)
.Select(x => new BannerEquDto
{
equid = x.Id,
facecode = x.FacCode,
name = x.Name
})
.Mapper((it, cache) =>
{
if (bindlist != null && bindlist.Count == 1 && bindlist.FirstOrDefault().EquId == 0)
{
it.isall = true;
}
if (bindlist == null || bindlist.Count == 0)
{
it.ischecked = false;
}
if (
(bindlist != null && bindlist.Count == 1 && bindlist.FirstOrDefault().EquId == 0)
|| (bindlist != null && bindlist.FirstOrDefault(x => x.EquId == it.equid) != null)
)
{
it.ischecked = true;
}
})
.ToPageListAsync(page, pagesize, totalnum);
return new PageParms
{
page = page,
Items = query,
totalnum = totalnum,
limit = pagesize
};
}
///
/// 状态修改
///
/// 记录ID
/// 状态
/// 状态描述
///
public async Task SetStatusAsync(int id, AdStatus status, string remark)
{
if (!await dbClient.Queryable().AnyAsync(x => x.Id == id))
{
return new ResultInfo(ResultState.FAIL, "记录未找到");
}
//更新状态
await dbClient.Updateable().SetColumns(x => new YB_Banner
{
Status = status
}).Where(x => x.Id == id).ExecuteCommandAsync();
return new ResultInfo(ResultState.SUCCESS, "状态更新成功");
}
///
/// 信息提交
///
///
///
public async Task SubmitAsync(BannerSubmitModel model)
{
if (model.Id > 0)
{
await dbClient.Updateable().SetColumns(x => new YB_Banner
{
HeadImg = model.HeadImg,
Name = model.Name,
Type = model.Type,
AppId = model.AppId
}).Where(x => x.Id == model.Id).ExecuteCommandAsync();
await dbClient.Updateable().SetColumns(x => new YB_BannerContent
{
Content = model.content
}).Where(x => x.BannerId == model.Id).ExecuteCommandAsync();
if (model.equids != null && model.equids.Count > 0)
{
List list = new List();
foreach (var item in model.equids)
{
list.Add(new YB_BannerEqu
{
EquId = item,
BannerId = model.Id
});
}
await dbClient.Insertable(list).ExecuteCommandAsync();
}
return new ResultInfo(ResultState.SUCCESS, "修改成功");
}
else
{
var info = new YB_Banner
{
Createtime = DateTime.Now,
Status = AdStatus.Wait,
BusinessId = currentUser.BusinessId,
ClickCount = 0,
HeadImg = model.HeadImg,
StatusRemark = "",
EndTime = DateTime.Now,
Name = model.Name,
StartTime = DateTime.Now,
Type = model.Type,
AppId = model.AppId,
PositionType = currentUser.AccountType == AccountType.platform ? BannerPositionType.Platform : BannerPositionType.Business
};
var id = await dbClient.Insertable(info).ExecuteReturnIdentityAsync();
var data = new YB_BannerContent
{
Content = model.content,
BannerId = id
};
await dbClient.Insertable(data).ExecuteCommandAsync();
if (model.equids != null && model.equids.Count > 0)
{
List list = new List();
foreach (var item in model.equids)
{
list.Add(new YB_BannerEqu
{
EquId = item,
BannerId = id
});
}
await dbClient.Insertable(list).ExecuteCommandAsync();
}
return new ResultInfo(ResultState.SUCCESS, "添加成功");
}
}
}
}