using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using AutoMapper; using Model.ModelDto.SysDto; using SqlSugar; using Utility; using WMS.DAL; using WMS.Entity.Context; using WMS.Entity.SysEntity; using WMS.IBLL.ISysServer; using WMS.IDAL.ISysInterface; namespace WMS.BLL.SysServer { public class MaterialsServer : DbHelper, IMaterialsServer { /// /// 依赖注入 /// public IMaterialsRepository _mate { get; set; } private readonly IMapper _mapper; private static readonly SqlSugarScope Db = DataContext.Db; private readonly UserManager _userManager; /// /// 构造函数 /// /// 物料编码 /// automapper public MaterialsServer(IMaterialsRepository mate, IMapper mapper, UserManager userManager) : base(Db) { _mate = mate; //物料编码 _mapper = mapper; //automapper _userManager = userManager; } #region wms /// /// 获取物料信息列表 /// /// 物料编码 /// 物料名称 /// 审核状态 /// 类型 /// 是否受控 /// 是否免检 /// 存储环境 /// 类别编码 /// public Task> GetMateList(string skuNo, string skuName, string auditStatusNo, string type, string isControlled, string isInspect, string environment, string categoryNo) { var DA = Db.Queryable() .LeftJoin((a, b) => a.CreateUser == b.Id) .LeftJoin((a, b,c) => a.PackagNo == c.PackagNo) //.LeftJoin ((a,b,c,d)=>a.UnitNo == d.UnitNo) .LeftJoin((a,b,c,d)=>a.CategoryNo == d.CategoryNo) .Where((a,b,c,d) => a.IsDel == "0" && d.IsDel == "0" ) .WhereIF(!string.IsNullOrEmpty(skuNo), a => a.SkuNo.Contains(skuNo)) .WhereIF(!string.IsNullOrEmpty(skuName), a => a.SkuName.Contains(skuName)) .WhereIF(!string.IsNullOrEmpty(auditStatusNo), a => a.AuditStatusNo == auditStatusNo) .WhereIF(!string.IsNullOrEmpty(type), a => a.Type == type) .WhereIF(!string.IsNullOrEmpty(isControlled), a => a.IsControlled == isControlled) .WhereIF(!string.IsNullOrEmpty(isInspect), a => a.IsInspect == isInspect) .WhereIF(!string.IsNullOrEmpty(environment), a => a.Environment == environment) .WhereIF(!string.IsNullOrEmpty(categoryNo), a => a.CategoryNo == categoryNo) .Select((a, b, c,d) => new MaterialsDto() { CreateUserName = b.RealName,PackagName = c.PackagName }, true) .ToListAsync(); return DA; } /// /// 根据id查询物料信息 /// /// 物料id /// public async Task GetMateById(int id) { return await Db.Queryable().FirstAsync(s => s.Id == id); } /// /// 根据编号查询物料信息 /// /// 物料编号 /// public async Task GetMateByNo(string SkuNo) { return await Db.Queryable().CountAsync(s => s.SkuNo == SkuNo && s.IsDel == "0"); } /// /// 根据编号查询物料信息 /// /// 包装编号 /// public async Task GetMateByPa(string PackagNo) { return await Db.Queryable().CountAsync(s => s.PackagNo == PackagNo && s.IsDel == "0"); } /// /// 新增物料信息 /// /// 物料dto /// /// 捕获异常 public async Task AddMate(MaterialsDto matedto) { if (string.IsNullOrWhiteSpace(matedto.PackagNo)) throw Oops.Bah("包装信息不能为空"); if (await GetMateByNo(matedto.SkuNo) > 0) throw Oops.Bah("系统中已存在该物料"); //映射模型 SysMaterials mate = _mapper.Map(matedto); mate.AuditStatusNo = "9"; //审核状态 mate.Type = mate.Type; //类型 mate.IsControlled = string.IsNullOrWhiteSpace(mate.IsControlled) ? "0" : mate.IsControlled; //是否受控 mate.IsInspect = string.IsNullOrWhiteSpace(mate.IsInspect) ? "0" : mate.IsInspect; //是否免检 mate.IsPasteCode = string.IsNullOrWhiteSpace(mate.IsPasteCode) ? "0" : mate.IsPasteCode; //是否免检 mate.Origin = "WMS"; //来源 mate.IsDel = "0"; mate.CreateTime = DateTime.Now; mate.CreateUser = _userManager.UserId; return await Db.Insertable(mate).ExecuteCommandAsync(); } /// /// 删除物料信息 /// /// 物料实体模型 /// /// 捕获异常 public async Task DelMate(SysMaterials mate) { return await Db.Updateable() .Where(s => s.Id == mate.Id) .SetColumns(s => s.IsDel == "1") .SetColumns(s => s.UpdateTime == DateTime.Now) .SetColumns(s => s.UpdateUser == _userManager.UserId) .ExecuteCommandAsync(); } /// /// 编辑物料信息 /// /// 物料dto /// /// 捕获异常 public async Task ExitMate(MaterialsDto matedto) { if (matedto.AdventTime > 365 && matedto.AdventTime < 30) { throw Oops.Bah("临期天数不可大于365及小于30"); } else if (string.IsNullOrWhiteSpace(matedto.PackagNo)) { throw Oops.Bah("包装不能为空"); } //映射模型 SysMaterials mate = _mapper.Map(matedto); //编辑 //根据id获取物料信息 var modMaterial = await Db.Queryable().FirstAsync(a => a.IsDel == "0" && a.Id == mate.Id); //mate.CategoryNo = list.CategoryNo; mate.Origin = modMaterial.Origin; mate.CreateUser = modMaterial.CreateUser; mate.UpdateTime = DateTime.Now; mate.UpdateUser = _userManager.UserId; mate.CreateTime = modMaterial.CreateTime; int i = Db.Updateable(mate).ExecuteCommand(); return i; } #region 包装 单位 /// /// 获取计量单位信息列表 /// /// public async Task> GetUnitList() { return await Db.Queryable().Where(s => s.IsDel == "0").ToListAsync(); } /// /// 获取包装信息列表 /// /// public async Task> GetPackagList() { return await Db.Queryable().Where(s => s.IsDel == "0").ToListAsync(); } #endregion #endregion #region erp /// /// 获取erp数据 /// /// public List GetERPList() { List list = _mate.GetERPList(); return list; } /// /// 根据id获取erp数据 /// /// id /// public SysERPTest GetERPListById(int id) { SysERPTest erp = _mate.GetERPListById(id); return erp; } /// /// 新增erp数据 /// /// erp测试dto /// /// 捕获异常 public async Task AddERP(ERPTestDto erpdto) { //捕获异常 try { //模型映射 SysERPTest erp = _mapper.Map(erpdto); //判断是否唯一 //新增 int i = await _mate.AddERP(erp); return i; } catch (Exception ex) { //抛出异常 throw new Exception("新增erp数据异常", ex); } } /// /// 删除erp信息 /// /// erp测试实体 /// /// 捕获异常 public async Task DelERP(SysERPTest erp) { //捕获异常 try { //删除 int i = await _mate.DelERP(erp); return i; } catch (Exception ex) { //抛出异常 throw new Exception("删除erp异常", ex); } } /// /// 编辑erp数据 /// /// erp测试dto /// /// 捕获异常 public async Task EditERP(ERPTestDto erpdto) { //捕获异常 try { //模型映射 SysERPTest erp = _mapper.Map(erpdto); //编辑 int i = await _mate.EditERP(erp); return i; } catch (Exception ex) { //抛出异常 throw new Exception("编辑erp数据异常", ex); } } #endregion } }