using System; using System.Collections.Generic; using System.Text; using Model; using Model.ModelDto.SysDto; using Model.ModelVm; using SqlSugar; using WMS.DAL; using WMS.Entity.BllAsnEntity; using WMS.Entity.BllQualityEntity; using WMS.Entity.Context; using WMS.Entity.DataEntity; using WMS.IBLL.IBllQualityServer; namespace WMS.BLL.BllQualityServer { public class QualityInspectServer : DbHelper, IQualityInspectServer { private static readonly SqlSugarScope Db = DataContext.Db; public QualityInspectServer() : base(Db) { } #region 质检信息录入 /// /// 获取质检物料信息 /// /// 质检信息实体模型 /// public List GetBllQualityList(BllQualityInspect model) { string str = "select q.Id Id,q.InspectNo InspectNo,q.ASNNo ASNNo,q.LotNo LotNo,q.SupplierLot SupplierLot,q.SkuNo SkuNo,q.SkuName SkuName,q.Standard Standard,q.PassQty PassQty,q.FailQty FailQty,q.Origin Origin,q.InspectTime InspectTime,q.IsOut IsOut,q.IsQualified IsQualified,q.IsDel IsDel,q.CreateTime CreateTime,u.UserName CreateUserName,q.UpdateTime UpdateTime,q.UpdateUser UpdateUserName,a.Qty from BllQualityInspect q left join BllArrivalNoticeDetail a on a.ASNNo = q.ASNNo left join SysUserInfor u on q.CreateUser = u.id where q.IsDel = @isdel and a.Status != '0' "; ////判断入库单号是否为空 //if (!string.IsNullOrEmpty(model.ASNNo)) //{ // str += " and q.ASNNo = @asnno"; //} //判断物料号是否为空 if (!string.IsNullOrEmpty(model.SkuNo)) { str += " and q.SkuNo like @skuno"; } //判断物料名称是否为空 if (!string.IsNullOrEmpty(model.SkuName)) { str += " and q.SkuName = @skuname"; } //判断批次号是否为空 if (!string.IsNullOrEmpty(model.LotNo)) { str += " and q.LotNo = @lotno"; } //判断是否合格状态是否为空 if (!string.IsNullOrEmpty(model.IsQualified)) { str += " and q.IsQualified = @isqualified"; } //if (string.IsNullOrEmpty(model.SkuNo) && string.IsNullOrEmpty(model.SkuName) && string.IsNullOrEmpty(model.LotNo) && string.IsNullOrEmpty(model.IsQualified)) //{ // str += " and a.Status != '0'"; //} str += " order by q.CreateTime desc"; List qualityList = Db.Ado.SqlQuery(str, new { isdel = "0", //是否删除 asnno = model.ASNNo, //入库单号 skuno = model.SkuNo, //物料号 skuname = "%" + model.SkuName + "%", //物料名称 lotno = model.LotNo, //批次号 isqualified = model.IsQualified //是否合格 }); return qualityList; } /// /// 添加物料质检信息 /// /// 质检信息实体模型 /// public int InsertQuality(BllQualityInspect model) { //string str = "insert into BllQualityInspect values(@inspectno,@asnno,@lotno,@supplierlot,@skuno,@skuname,,@standard,@passqty,@failqty,@origin,@inspecttime,@isout,@isqualified,@isdel,@createtime,@createuser,@updatetime,@updateuser);"; //查找质检信息中是否存在同批次质检录入记录 //BllQualityInspect quality = Db.Queryable().First(m => m.LotNo == model.LotNo && m.IsDel == "0"); //if (quality != null) //{ // throw new Exception("当前批次已进行质检,请核查!"); //} //查找同批次 同单据 入库单信息、 BllArrivalNoticeDetail arrival = Db.Queryable().First(m => m.LotNo == model.LotNo && m.IsDel == "0"); model.Origin = "WMS"; //来源 model.CreateTime = Db.GetDate(); //创建日期 model.SkuNo = arrival.SkuNo; //物料号 model.SkuName = arrival.SkuName; //物料名称 //model.ASNNo = arrival.ASNNo; //入库单号 model.PassQty = 0; //合格数量 model.FailQty = 0; //不合格数量 model.Standard = arrival.Standard; //规格 model.SupplierLot = arrival.SupplierLot; //供货批次 //查找库存明细信息 List detail = Db.Queryable().Where(m => m.SkuNo == model.SkuNo && m.LotNo == model.LotNo && m.IsDel == "0").ToList(); foreach (var item in detail) { //判断合格状态是否合格 if (model.IsQualified == "1") { //合格 相同批次库存信息全部改为合格状态 且合格数量增加为同批次同单号该物料全部数量之和 //不合格数量为0 model.FailQty = 0; model.PassQty += item.Qty; //修改库存明细合格状态 item.InspectStatus = "1"; //1合格 } else //不合格 { //不合格 相同批次、入库单库存信息全部改为不合格物料 且不合格数量增加为同批次同单号该物料全部数量之和 //合格数量为0 model.PassQty = 0; model.FailQty += item.Qty; item.InspectStatus = "2"; //2不合格 } Db.Updateable(item).ExecuteCommand(); } var isquality = Db.Insertable(model).ExecuteCommand(); return isquality; } /// /// 修改物料质检状态 /// /// 质检信息实体模型 /// public int UpdateQuality(BllQualityInspect model) { //捕获异常 try { //获取质检信息 var quality = Db.Queryable().First(a => a.IsDel == "0" && a.Id == model.Id && a.InspectNo == model.InspectNo); //验证是否拥有该质检信息 if (quality == null) { throw new Exception("当前质检信息为空,请核实!"); } //根据入库单号查找入库单据 var asn = Db.Queryable().First(a => a.IsDel == "0" && a.ASNNo == model.ASNNo); //验证入库单据是否为空 if (asn == null) { throw new Exception("质检单号对应入库单据为空,请核实!"); } if (asn.Status == "0") { throw new Exception("等待入库单据执行后进行修改质检状态!"); } //查找库存明细信息 List detail = Db.Queryable().Where(m => m.SkuNo == model.SkuNo && m.LotNo == model.LotNo && m.ASNNo == model.ASNNo && m.IsDel == "0").ToList(); int a = 0; if (detail.Count > 0) { foreach (var item in detail) { if (item.InspectStatus != "0") { a += 1; } } } if (model.IsQualified == "2") { if (a != 0) { throw new Exception("当前批次库存信息已被更改,不可改为待检验!"); } } quality.IsQualified = model.IsQualified; //质检状态 quality.UpdateTime = Db.GetDate(); //修改时间 quality.UpdateUser = model.UpdateUser; //修改人 //开启事务 Db.Ado.BeginTran(); int i = Db.Updateable(quality).ExecuteCommand(); if (i > 0) { if (detail.Count > 0) { foreach (var item in detail) { //判断合格状态是否合格 if (model.IsQualified == "1") { //合格 相同批次库存信息全部改为合格状态 且合格数量增加为同批次同单号该物料全部数量之和 //不合格数量为0 model.FailQty = 0; model.PassQty += item.Qty; //修改库存明细合格状态 item.InspectStatus = "1"; //1合格 } else //不合格 { //不合格 相同批次、入库单库存信息全部改为不合格物料 且不合格数量增加为同批次同单号该物料全部数量之和 //合格数量为0 model.PassQty = 0; model.FailQty += item.Qty; item.InspectStatus = "2"; //2不合格 } Db.Updateable(model).ExecuteCommand(); Db.Updateable(item).ExecuteCommand(); } } //提交事务 Db.Ado.CommitTran(); } else { //回滚事务 Db.RollbackTran(); } return i; } catch (Exception ex) { //抛出异常 throw new Exception(ex.Message); } } /// /// 修改物料质检状态批量 /// /// 质检信息实体模型 /// public int UpdateQualitys(QualityIdVm model) { //捕获异常 try { //获取质检信息 //var quality = Db.Queryable().First(a => a.IsDel == "0" && a.Id == model.Id && a.InspectNo == model.InspectNo); var quality = GetAllWhereAsync(m => model.Ids.Contains(m.Id)).ToList(); ; //验证是否拥有该质检信息 if (quality.Count == 0) { throw new Exception("当前质检信息为空,请核实!"); } //根据入库单号查找入库单据 var asn = new BllArrivalNotice(); foreach (var item in quality) { asn = Db.Queryable().First(a => a.IsDel == "0" && a.ASNNo == item.ASNNo); //验证入库单据是否为空 if (asn == null) { throw new Exception("质检单号对应入库单据为空,请核实!"); } if (asn.Status == "0") { throw new Exception("等待入库单据执行后进行修改质检状态!"); } } int i = 0; //查找库存明细信息 List detail = new List(); //开启事务 Db.Ado.BeginTran(); foreach (var item in quality) { detail = Db.Queryable().Where(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.ASNNo == item.ASNNo && m.IsDel == "0").ToList(); int a = 0; if (detail.Count > 0) { foreach (var item1 in detail) { if (item1.InspectStatus != "0") { a += 1; } } } if (model.IsQualified == "2") { if (a != 0) { throw new Exception("当前批次库存信息已被更改,不可改为待检验!"); } } item.IsQualified = model.IsQualified; //质检状态 item.UpdateTime = Db.GetDate(); //修改时间 item.UpdateUser = model.UpdateUser; //修改人 if (detail.Count > 0) { foreach (var item2 in detail) { //判断合格状态是否合格 if (item.IsQualified == "1") { //合格 相同批次库存信息全部改为合格状态 且合格数量增加为同批次同单号该物料全部数量之和 //不合格数量为0 item.FailQty = 0; item.PassQty += item2.Qty; //修改库存明细合格状态 item2.InspectStatus = "1"; //1合格 } else //不合格 { //不合格 相同批次、入库单库存信息全部改为不合格物料 且不合格数量增加为同批次同单号该物料全部数量之和 //合格数量为0 item.PassQty = 0; item.FailQty += item2.Qty; item2.InspectStatus = "2"; //2不合格 } Db.Updateable(item).ExecuteCommand(); Db.Updateable(item2).ExecuteCommand(); } } } //提交事务 Db.Ado.CommitTran(); return i; } catch (Exception ex) { //回滚事务 Db.RollbackTran(); //抛出异常 throw new Exception(ex.Message); } } #endregion } }