using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Yh.Platform.Abstractions;
using YhCore.Entity;
using YhCore.Model.Dto;
using YhCore.Repository;
using YhCore.Service.Interfaces;
namespace YhCore.Service.Impl
{
///
/// 文印分类 / 印制版面 / 公共类别服务实现
/// (移植旧 BestSchool.DocPrint.WY_list 分类部分 + WY_Classify)。
///
public class DocPrintClassifyService : IDocPrintClassifyService
{
private readonly IRepository _dic;
private readonly IRepository _ord;
private readonly IRepository _doc;
private readonly IRepository _groupuser;
private readonly IRepository _freegroup;
private readonly IRepository _zybit;
public DocPrintClassifyService(
IRepository dic,
IRepository ord,
IRepository doc,
IRepository groupuser,
IRepository freegroup,
IRepository zybit)
{
_dic = dic;
_ord = ord;
_doc = doc;
_groupuser = groupuser;
_freegroup = freegroup;
_zybit = zybit;
}
#region 文印分类 / 印制版面
public async Task AddDicAsync(Common_Dictionary model)
{
if (model == null) throw new DException("参数错误!");
var listed = await _dic.AnyAsync(b =>
b.typeID == model.typeID && b.Name == model.Name && b.Schserid == model.Schserid);
if (listed) throw new DException("该分类已经存在!");
var max = (await _dic.FindAsync(x => x.typeID == model.typeID))
.OrderByDescending(x => x.SerID).FirstOrDefault();
model.Sort = max != null ? (max.Sort ?? 0) + 1 : 1;
model.Enable = 1;
model.CodeID = model.typeID + model.Sort;
model.typeName = "印制分类";
await _dic.AddAsync(model);
await _dic.SaveChangesAsync();
}
public async Task AddYZBMAsync(Common_Dictionary model)
{
if (model == null) throw new DException("参数错误!");
var listed = await _dic.AnyAsync(b =>
b.typeID == model.typeID && b.Name == model.Name && b.Schserid == model.Schserid);
if (listed) throw new DException("该版面已经存在!");
var max = (await _dic.FindAsync(x => x.typeID == model.typeID))
.OrderByDescending(x => x.SerID).FirstOrDefault();
model.Sort = max != null ? (max.Sort ?? 0) + 1 : 1;
model.Enable = 1;
model.CodeID = model.typeID + model.Sort;
model.typeName = "印制版面";
await _dic.AddAsync(model);
await _dic.SaveChangesAsync();
}
public async Task> CategoryListAsync(string schSerId, string name)
=> await QueryClassifyListAsync("印制分类", schSerId, name);
public async Task> YZBMListAsync(string schSerId, string name)
=> await QueryClassifyListAsync("印制版面", schSerId, name);
private async Task> QueryClassifyListAsync(string typeName, string schSerId, string name)
{
var query = await _dic.FindAsync(m => m.typeName == typeName);
if (!string.IsNullOrEmpty(schSerId))
{
query = query.Where(m => m.Schserid == schSerId || m.Schserid == null || m.Schserid == "").ToList();
}
if (!string.IsNullOrEmpty(name))
{
query = query.Where(m => m.Name != null && m.Name.IndexOf(name) >= 0).ToList();
}
return query
.OrderBy(x => string.IsNullOrEmpty(x.Des) ? 999 : DictionaryTypeHelper.ParseSort(x.Des))
.Select(item => new CategoryItem
{
SerID = item.SerID,
CodeID = item.CodeID,
Name = item.Name,
Des = item.Des,
Enable = item.Enable,
Sort = item.Sort,
SchSerID = item.Schserid,
UserSchSerID = schSerId,
_disabled = string.IsNullOrEmpty(item.Schserid)
})
.ToList();
}
public async Task DeleteDicAsync(decimal[] ids)
{
if (ids == null || ids.Length == 0) throw new DException("ids is not null");
var items = await _dic.FindAsync(m => ids.Contains(m.SerID));
if (items.Count == 0) throw new DException("未找到要删除的分类!");
foreach (var item in items)
{
var used = await _doc.AnyAsync(m => m.DPType == item.CodeID);
if (used) throw new DException("该类别下有使用记录无法删除!");
}
foreach (var item in items)
{
await _dic.RemoveAsync(item);
}
await _dic.SaveChangesAsync();
}
#endregion
#region 公共类别
public async Task> DictionaryTypeListAsync(string schSerId, string name, bool showAll, string typeId)
{
var resultList = await _dic.FindAsync(m => m.typeID == typeId && m.Enable == 1);
if (!string.IsNullOrEmpty(schSerId))
{
resultList = resultList.Where(m => m.Schserid == schSerId || m.Schserid == null || m.Schserid == "").ToList();
}
if (!string.IsNullOrEmpty(name))
{
resultList = resultList.Where(m => m.Name != null && m.Name.IndexOf(name) >= 0).ToList();
}
var ordList = await _ord.FindAsync(a => a.SchSerID == schSerId);
var items = resultList.Select(item => new DictionaryTypeItem
{
Code = item.Code,
SerID = item.SerID,
CodeID = item.CodeID,
Name = item.Name,
Des = item.Des,
Enable = item.Enable,
Sort = item.Sort,
SchSerID = item.Schserid,
UserSchSerID = schSerId,
_disabled = string.IsNullOrEmpty(item.Schserid),
Status = false,
Open = ordList.FirstOrDefault(a => a.DicSerID == (int)item.SerID)?.Open ?? true,
Ord = ordList.FirstOrDefault(a => a.DicSerID == (int)item.SerID)?.Ord
?? (string.IsNullOrEmpty(item.Des) ? 999 : DictionaryTypeHelper.ParseSort(item.Des)),
Path = item.Path
})
.OrderBy(a => a.Ord)
.ToList();
if (!showAll)
{
items = items.Where(a => a.Open).ToList();
}
return items;
}
public async Task DeleteDictionaryTypeAsync(string[] ids)
{
if (ids == null || ids.Length == 0) throw new DException("ids is not null");
var items = await _dic.FindAsync(m => ids.Contains(m.SerID.ToString()));
foreach (var item in items)
{
item.Enable = 3;
}
await _dic.SaveChangesAsync();
}
public async Task SetDictionaryOrdAsync(string schSerId, int dicSerId, bool show)
{
var obj = await _ord.FirstOrDefaultAsync(m => m.DicSerID == dicSerId && m.SchSerID == schSerId);
if (obj == null)
{
await _ord.AddAsync(new Common_DictionaryOrd
{
DicSerID = dicSerId,
Open = show,
SchSerID = schSerId
});
}
else
{
obj.Open = show;
await _ord.UpdateAsync(obj);
}
await _ord.SaveChangesAsync();
}
public async Task OrderDicAsync(string ids, string schSerId)
{
if (string.IsNullOrEmpty(ids)) throw new DException("ids is not null");
var ssids = ids.Split(',').Select(a => int.Parse(a)).ToArray();
var list = await _ord.FindAsync(m => m.SchSerID == schSerId);
var i = 0;
foreach (var id in ssids)
{
var obj = list.FirstOrDefault(a => a.DicSerID == id && a.SchSerID == schSerId);
if (obj == null)
{
await _ord.AddAsync(new Common_DictionaryOrd
{
DicSerID = id,
Open = true,
SchSerID = schSerId,
Ord = i
});
}
else
{
obj.Ord = i;
await _ord.UpdateAsync(obj);
}
i++;
}
await _ord.SaveChangesAsync();
}
#endregion
#region 文印资源开关 / 结果链接 / 待审角标
///
/// 结果链接:旧实现调用资源平台 ziyuan 的 /SaveResource/Batch 生成分享链接,
/// 新项目未接入资源平台,按「未配置 ziyuan」的旧分支降级返回 false。
///
public Task