using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Model.ModelDto.SysDto;
using SqlSugar;
using WMS.Entity.SysEntity;
using WMS.IBLL.ILogServer;
using WMS.IBLL.ISysServer;
using WMS.IDAL.ISysInterface;
namespace WMS.BLL.SysServer
{
public class UnitServer : IUnitServer
{
public IUnitRepository UnitRst { get; set; }
private readonly IOperationSysServer _operation;
public UnitServer(IUnitRepository unitRst, IOperationSysServer operation)
{
UnitRst = unitRst;
_operation = operation;
}
///
/// 查询计量单位信息
///
/// 单位编号
/// 单位名称
///
///
///
///
public List GetUnitList(string unitNo, string unitName, int page, int limit, out int count)
{
try
{
Expression> item = Expressionable.Create() //创建表达式
.AndIF(!string.IsNullOrWhiteSpace(unitNo), it => it.UnitNo.Contains(unitNo.Trim()))
.AndIF(!string.IsNullOrWhiteSpace(unitName), it => it.UnitName.Contains(unitName.Trim()))
.ToExpression();//注意 这一句 不能少
var data = UnitRst.GetAllByOrderPageAsync(item, limit, page, out int counts)
.Includes(x => x.CreateUserInfo)
.Includes(x => x.UpdateUserInfo).ToList();
count = counts;
return data.Select(m => new UnitDto()
{
Id = m.Id,
UnitNo = m.UnitNo,
UnitName = m.UnitName,
Abbrev = m.Abbrev,
CreateTime = m.CreateTime,
CreateUserName = m.CreateUserInfo == null ? "" : m.CreateUserInfo.RealName,
UpdateTime = m.UpdateTime,
UpdateUserName = m.UpdateUserInfo == null ? "" : m.UpdateUserInfo.RealName
}).ToList();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 获取单条单位信息
///
///
///
public SysUnit GetUnit(int id)
{
try
{
var data = UnitRst.GetOneById(id);
return data;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 添加单位信息
///
/// 名称
/// 缩写
/// 操作人
///
public bool AddUnit(string unitName, string abbrev, int userId)
{
try
{
if (string.IsNullOrEmpty(abbrev))
{
var date = UnitRst.GetAllWhereAsync(m => m.UnitName == unitName).Count();
if (date > 0)
{
throw new Exception("单位名称重复");
}
}
else
{
var date = UnitRst.GetAllWhereAsync(m => m.UnitName == unitName || m.Abbrev == abbrev).Count();
if (date > 0)
{
throw new Exception("单位名称或英文缩写重复");
}
}
//自动UnitCode处理
var unitList = UnitRst.GetAllAsync().OrderByDescending(m => m.UnitNo);
var code = "01";
if (unitList != null)
{
var unitCode = unitList.First().UnitNo;
var str = unitCode.Substring(0, 1);
var str2 = unitCode.Substring(1, 1);
code = str == "0" ? (str2 == "9" ? (int.Parse(str2) + 1).ToString() : "0" + (int.Parse(str2) + 1)) : (int.Parse(unitCode) + 1).ToString();
}
var num = UnitRst.Add(new SysUnit()
{
UnitNo = code,
UnitName = unitName,
Abbrev = abbrev,
CreateUser = userId
});
if (num > 0)
{
_operation.InsertOperation("基础信息", "计量单位", code, "添加", "添加计量单位 单位号:" + code, Convert.ToInt32(userId));
}
return num > 0;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
///
/// 编辑单位信息
///
///
/// 名称
/// 缩写
/// 操作人
///
public bool EditUnit(int id, string unitName, string abbrev, int userId)
{
try
{
if (string.IsNullOrEmpty(abbrev))
{
var date = UnitRst.GetAllWhereAsync(m => m.Id != id && m.UnitName == unitName).Count();
if (date > 0)
{
throw new Exception("单位名称重复");
}
}
else
{
var date = UnitRst.GetAllWhereAsync(m => m.Id != id && (m.UnitName == unitName || m.Abbrev == abbrev)).Count();
if (date > 0)
{
throw new Exception("单位名称或英文缩写重复");
}
}
//自动UnitCode处理
var unit = UnitRst.GetOneById(id);
if (unit == null)
{
throw new Exception("未查询到单位信息");
}
unit.UnitName = unitName;
unit.Abbrev = abbrev;
unit.UpdateUser = userId;
unit.UpdateTime = DateTime.Now;
var num = UnitRst.Edit(unit);
return num > 0;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
public bool DelUnit(int id, int userId)
{
try
{
var unit = UnitRst.GetOneById(id);
if (unit == null)
{
throw new Exception("未查询到单位信息");
}
else
{
_operation.InsertOperation("基础信息", "计量单位", unit.UnitNo, "删除", "删除计量单位 单位号:" + unit.UnitNo, Convert.ToInt32(userId));
}
int num = UnitRst.Remove(id, userId);
return num > 0;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
public bool DelsUnit(List ids, int userId)
{
try
{
var list = UnitRst.GetAllWhereAsync(m => ids.Contains(m.Id)).ToList();
if (list.Count > 0)
{
for (int i = 0; i < list.Count; i++)
{
_operation.InsertOperation("基础信息", "计量单位", list[i].UnitNo, "删除", "删除计量单位 单位号:" + list[i].UnitNo, Convert.ToInt32(userId));
}
}
var num = UnitRst.RemoveAll(list, userId);
return num > 0;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
}
}