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<BllQualityInspect>, IQualityInspectServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
public QualityInspectServer() : base(Db)
|
{
|
}
|
|
|
#region 质检信息录入
|
|
/// <summary>
|
/// 获取质检物料信息
|
/// </summary>
|
/// <param name="model">质检信息实体模型</param>
|
/// <returns></returns>
|
public List<BllQualityInspectVM> 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<BllQualityInspectVM> qualityList = Db.Ado.SqlQuery<BllQualityInspectVM>(str, new
|
{
|
isdel = "0", //是否删除
|
asnno = model.ASNNo, //入库单号
|
skuno = model.SkuNo, //物料号
|
skuname = "%" + model.SkuName + "%", //物料名称
|
lotno = model.LotNo, //批次号
|
isqualified = model.IsQualified //是否合格
|
});
|
return qualityList;
|
}
|
|
|
/// <summary>
|
/// 添加物料质检信息
|
/// </summary>
|
/// <param name="model">质检信息实体模型</param>
|
/// <returns></returns>
|
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<BllQualityInspect>().First(m => m.LotNo == model.LotNo && m.IsDel == "0");
|
//if (quality != null)
|
//{
|
// throw new Exception("当前批次已进行质检,请核查!");
|
//}
|
|
//查找同批次 同单据 入库单信息、
|
BllArrivalNoticeDetail arrival = Db.Queryable<BllArrivalNoticeDetail>().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<DataStockDetail> detail = Db.Queryable<DataStockDetail>().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;
|
}
|
|
/// <summary>
|
/// 修改物料质检状态
|
/// </summary>
|
/// <param name="model">质检信息实体模型</param>
|
/// <returns></returns>
|
public int UpdateQuality(BllQualityInspect model)
|
{
|
//捕获异常
|
try
|
{
|
//获取质检信息
|
var quality = Db.Queryable<BllQualityInspect>().First(a => a.IsDel == "0" && a.Id == model.Id && a.InspectNo == model.InspectNo);
|
//验证是否拥有该质检信息
|
if (quality == null)
|
{
|
throw new Exception("当前质检信息为空,请核实!");
|
}
|
|
//根据入库单号查找入库单据
|
var asn = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.ASNNo);
|
//验证入库单据是否为空
|
if (asn == null)
|
{
|
throw new Exception("质检单号对应入库单据为空,请核实!");
|
}
|
if (asn.Status == "0")
|
{
|
throw new Exception("等待入库单据执行后进行修改质检状态!");
|
}
|
|
//查找库存明细信息
|
List<DataStockDetail> detail = Db.Queryable<DataStockDetail>().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);
|
}
|
}
|
|
/// <summary>
|
/// 修改物料质检状态批量
|
/// </summary>
|
/// <param name="model">质检信息实体模型</param>
|
/// <returns></returns>
|
public int UpdateQualitys(QualityIdVm model)
|
{
|
//捕获异常
|
try
|
{
|
//获取质检信息
|
//var quality = Db.Queryable<BllQualityInspect>().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<BllArrivalNotice>().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<DataStockDetail> detail = new List<DataStockDetail>();
|
//开启事务
|
Db.Ado.BeginTran();
|
foreach (var item in quality)
|
{
|
detail = Db.Queryable<DataStockDetail>().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
|
}
|
}
|