|
|
@ -19,118 +19,118 @@ namespace Win_in.Sfs.Wms.Store.Domain; |
|
|
|
public class EquipmentRecordManager : DomainService, IEquipmentRecordManager |
|
|
|
{ |
|
|
|
private readonly IEquipmentRecordRepository _repository; |
|
|
|
private readonly IEquipmentLocCapRepository _repositoryCap; |
|
|
|
// private readonly IEquipmentLocCapRepository _repositoryCap;
|
|
|
|
|
|
|
|
private readonly IEquipmentLocAppService _locService; |
|
|
|
private readonly IEquipmentPartCodeAppService _partService; |
|
|
|
|
|
|
|
public EquipmentRecordManager( |
|
|
|
IEquipmentRecordRepository repository, |
|
|
|
IEquipmentLocCapRepository repositoryCap, |
|
|
|
//IEquipmentLocCapRepository repositoryCap,
|
|
|
|
IEquipmentLocAppService locService, |
|
|
|
IEquipmentPartCodeAppService partService |
|
|
|
) |
|
|
|
{ |
|
|
|
_locService=locService; |
|
|
|
_repository = repository; |
|
|
|
_repositoryCap = repositoryCap; |
|
|
|
// _repositoryCap = repositoryCap;
|
|
|
|
_partService= partService; |
|
|
|
} |
|
|
|
|
|
|
|
public async Task<List<EquipmentRecordErrorDTO>> Bind(List<EquipmentRecord> p_ls) |
|
|
|
{ |
|
|
|
List<EquipmentRecordErrorDTO> errors=new List<EquipmentRecordErrorDTO>(); |
|
|
|
var list= p_ls.GroupBy(p => new { p.EqptCode, p.PartCode }).Select(p=>new { EqptCode= p.Key.EqptCode, PartCode= p.Key.PartCode,SumQty=p.Sum(p=>p.Qty)});//导入零件
|
|
|
|
var partialErrors1=list.GroupBy(p => p.EqptCode).Where(g =>g.Count()>1).Select(p => new EquipmentRecordErrorDTO() { EqptCode= p.Key,PartCode=string.Empty,Error=$"同器具代码有{p.Count().ToString()}种零件!" }); |
|
|
|
errors.AddRange(partialErrors1.ToList());//同容器放不同零件校验
|
|
|
|
var ls=p_ls.Select(p => p.EqptCode).Distinct().ToList();//录入的器具记录代码列表
|
|
|
|
var Locs=_locService.GetEquipmentLocAsync(ls).Result;//获取器具库位关系
|
|
|
|
var parts =_partService.GetEquipmentPartCodesAsync(ls).Result;//获取器具零件关系
|
|
|
|
//零件和器具关系校验
|
|
|
|
var partErrorQery = from itm in list |
|
|
|
join itm1 in parts on |
|
|
|
new { itm.EqptCode, PartCode = itm.PartCode } equals new { EqptCode = itm1.Code, PartCode = itm1.PartCode } |
|
|
|
into temp |
|
|
|
from tm in temp.DefaultIfEmpty() |
|
|
|
where tm == null |
|
|
|
select new EquipmentRecordErrorDTO() |
|
|
|
{ |
|
|
|
EqptCode = itm.EqptCode, |
|
|
|
PartCode = itm.PartCode, |
|
|
|
Error = $"器具零件关系不存在!" |
|
|
|
}; |
|
|
|
errors.AddRange(partErrorQery.ToList()); |
|
|
|
var query= await _repositoryCap.GetQueryableAsync().ConfigureAwait(false); |
|
|
|
var capExistList= query.Where(p => ls.Contains(p.EqptCode)).ToList();//器具容量
|
|
|
|
|
|
|
|
var partialErrors2 = from itm in capExistList |
|
|
|
join itm1 in list.ToList() on itm.EqptCode equals itm1.EqptCode |
|
|
|
where itm.PartCode != itm.PartCode |
|
|
|
select new EquipmentRecordErrorDTO() { |
|
|
|
EqptCode = itm.EqptCode,PartCode=itm.PartCode ,Error=$"录入器具代码{itm.EqptCode}零件代码{itm.PartCode}与器具容量{itm1.EqptCode}零件代码{itm1.PartCode}不符!" |
|
|
|
}; |
|
|
|
errors.AddRange(partialErrors2.ToList());//导入记录和容量记录零件不是同一零件
|
|
|
|
var existList = from itm in list |
|
|
|
join itm1 in capExistList |
|
|
|
on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode } |
|
|
|
select itm; |
|
|
|
foreach (var itm in existList) |
|
|
|
{ |
|
|
|
var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
cap.Qty += itm.SumQty;//当前数量
|
|
|
|
|
|
|
|
if (cap.Qty > cap.StdQty) |
|
|
|
{ |
|
|
|
errors.Add(new EquipmentRecordErrorDTO() { EqptCode=itm.EqptCode,PartCode=itm.PartCode,Error=$"超出容量限制!" }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (errors.Count > 0) |
|
|
|
{ |
|
|
|
return errors; |
|
|
|
} |
|
|
|
//新建器具容量
|
|
|
|
var newList =from itm in list |
|
|
|
join itm1 in capExistList |
|
|
|
on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode } |
|
|
|
into temp1 |
|
|
|
from tm1 in temp1.DefaultIfEmpty() |
|
|
|
where tm1 == null |
|
|
|
select itm; |
|
|
|
List<EquipmentLocCap> newlocList=new List<EquipmentLocCap>(); |
|
|
|
foreach (var itm in newList) |
|
|
|
{ |
|
|
|
var gpart = parts.FirstOrDefault(p => p.Code == itm.EqptCode && p.PartCode == itm.PartCode); |
|
|
|
var stdQty = gpart.StdQty;//标包
|
|
|
|
var qty = itm.SumQty; |
|
|
|
var cap = new EquipmentLocCap() |
|
|
|
|
|
|
|
{ |
|
|
|
EqptCode=itm.EqptCode, |
|
|
|
PartCode=itm.PartCode, |
|
|
|
Percent=qty/stdQty, |
|
|
|
Qty=qty, |
|
|
|
StdQty=stdQty, |
|
|
|
}; |
|
|
|
cap.SetId(GuidGenerator.Create()); |
|
|
|
newlocList.Add(cap); |
|
|
|
} |
|
|
|
//已存在器具容量变更
|
|
|
|
// var list= p_ls.GroupBy(p => new { p.EqptCode, p.PartCode }).Select(p=>new { EqptCode= p.Key.EqptCode, PartCode= p.Key.PartCode,SumQty=p.Sum(p=>p.Qty)});//导入零件
|
|
|
|
// var partialErrors1=list.GroupBy(p => p.EqptCode).Where(g =>g.Count()>1).Select(p => new EquipmentRecordErrorDTO() { EqptCode= p.Key,PartCode=string.Empty,Error=$"同器具代码有{p.Count().ToString()}种零件!" });
|
|
|
|
// errors.AddRange(partialErrors1.ToList());//同容器放不同零件校验
|
|
|
|
// var ls=p_ls.Select(p => p.EqptCode).Distinct().ToList();//录入的器具记录代码列表
|
|
|
|
// var Locs=_locService.GetEquipmentLocAsync(ls).Result;//获取器具库位关系
|
|
|
|
// var parts =_partService.GetEquipmentPartCodesAsync(ls).Result;//获取器具零件关系
|
|
|
|
// //零件和器具关系校验
|
|
|
|
// var partErrorQery = from itm in list
|
|
|
|
// join itm1 in parts on
|
|
|
|
// new { itm.EqptCode, PartCode = itm.PartCode } equals new { EqptCode = itm1.Code, PartCode = itm1.PartCode }
|
|
|
|
// into temp
|
|
|
|
// from tm in temp.DefaultIfEmpty()
|
|
|
|
// where tm == null
|
|
|
|
// select new EquipmentRecordErrorDTO()
|
|
|
|
// {
|
|
|
|
// EqptCode = itm.EqptCode,
|
|
|
|
// PartCode = itm.PartCode,
|
|
|
|
// Error = $"器具零件关系不存在!"
|
|
|
|
// };
|
|
|
|
// errors.AddRange(partErrorQery.ToList());
|
|
|
|
// var query= await _repositoryCap.GetQueryableAsync().ConfigureAwait(false);
|
|
|
|
// var capExistList= query.Where(p => ls.Contains(p.EqptCode)).ToList();//器具容量
|
|
|
|
|
|
|
|
// var partialErrors2 = from itm in capExistList
|
|
|
|
// join itm1 in list.ToList() on itm.EqptCode equals itm1.EqptCode
|
|
|
|
// where itm.PartCode != itm.PartCode
|
|
|
|
// select new EquipmentRecordErrorDTO() {
|
|
|
|
// EqptCode = itm.EqptCode,PartCode=itm.PartCode ,Error=$"录入器具代码{itm.EqptCode}零件代码{itm.PartCode}与器具容量{itm1.EqptCode}零件代码{itm1.PartCode}不符!"
|
|
|
|
// };
|
|
|
|
// errors.AddRange(partialErrors2.ToList());//导入记录和容量记录零件不是同一零件
|
|
|
|
// var existList = from itm in list
|
|
|
|
// join itm1 in capExistList
|
|
|
|
// on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode }
|
|
|
|
// select itm;
|
|
|
|
// foreach (var itm in existList)
|
|
|
|
// {
|
|
|
|
// var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
// cap.Qty += itm.SumQty;//当前数量
|
|
|
|
|
|
|
|
// if (cap.Qty > cap.StdQty)
|
|
|
|
// {
|
|
|
|
// errors.Add(new EquipmentRecordErrorDTO() { EqptCode=itm.EqptCode,PartCode=itm.PartCode,Error=$"超出容量限制!" });
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
// if (errors.Count > 0)
|
|
|
|
// {
|
|
|
|
// return errors;
|
|
|
|
// }
|
|
|
|
// //新建器具容量
|
|
|
|
//var newList =from itm in list
|
|
|
|
// join itm1 in capExistList
|
|
|
|
// on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode }
|
|
|
|
// into temp1
|
|
|
|
// from tm1 in temp1.DefaultIfEmpty()
|
|
|
|
// where tm1 == null
|
|
|
|
// select itm;
|
|
|
|
// List<EquipmentLocCap> newlocList=new List<EquipmentLocCap>();
|
|
|
|
// foreach (var itm in newList)
|
|
|
|
// {
|
|
|
|
// var gpart = parts.FirstOrDefault(p => p.Code == itm.EqptCode && p.PartCode == itm.PartCode);
|
|
|
|
// var stdQty = gpart.StdQty;//标包
|
|
|
|
// var qty = itm.SumQty;
|
|
|
|
// var cap = new EquipmentLocCap()
|
|
|
|
|
|
|
|
// {
|
|
|
|
// EqptCode=itm.EqptCode,
|
|
|
|
// PartCode=itm.PartCode,
|
|
|
|
// Percent=qty/stdQty,
|
|
|
|
// Qty=qty,
|
|
|
|
// StdQty=stdQty,
|
|
|
|
// };
|
|
|
|
// cap.SetId(GuidGenerator.Create());
|
|
|
|
// newlocList.Add(cap);
|
|
|
|
// }
|
|
|
|
// //已存在器具容量变更
|
|
|
|
|
|
|
|
foreach (var itm in existList) |
|
|
|
{ |
|
|
|
var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
cap.Qty = cap.Qty+itm.SumQty;//当前数量
|
|
|
|
cap.Percent = cap.Qty / cap.StdQty; |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var itm in p_ls) |
|
|
|
{ |
|
|
|
itm.Type = EnumEquipmentRecordType.Bind; |
|
|
|
itm.SetId(GuidGenerator.Create()); |
|
|
|
} |
|
|
|
await _repositoryCap.InsertManyAsync(newlocList).ConfigureAwait(false); |
|
|
|
await _repository.InsertManyAsync(p_ls).ConfigureAwait(false); |
|
|
|
// foreach (var itm in existList)
|
|
|
|
// {
|
|
|
|
// var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
// cap.Qty = cap.Qty+itm.SumQty;//当前数量
|
|
|
|
// cap.Percent = cap.Qty / cap.StdQty;
|
|
|
|
// }
|
|
|
|
|
|
|
|
// foreach (var itm in p_ls)
|
|
|
|
// {
|
|
|
|
// itm.Type = EnumEquipmentRecordType.Bind;
|
|
|
|
// itm.SetId(GuidGenerator.Create());
|
|
|
|
// }
|
|
|
|
// await _repositoryCap.InsertManyAsync(newlocList).ConfigureAwait(false);
|
|
|
|
// await _repository.InsertManyAsync(p_ls).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
|
|
return errors; |
|
|
@ -143,68 +143,68 @@ public class EquipmentRecordManager : DomainService, IEquipmentRecordManager |
|
|
|
public async Task<List<EquipmentRecordErrorDTO>> UnBind(List<EquipmentRecord> p_ls) |
|
|
|
{ |
|
|
|
List<EquipmentRecordErrorDTO> errors = new List<EquipmentRecordErrorDTO>(); |
|
|
|
var list = p_ls.GroupBy(p => new { p.EqptCode, p.PartCode }).Select(p => new { EqptCode = p.Key.EqptCode, PartCode = p.Key.PartCode, SumQty = p.Sum(p => p.Qty) });//导入零件
|
|
|
|
var partialErrors1 = list.GroupBy(p => p.EqptCode).Where(g => g.Count() > 1).Select(p => new EquipmentRecordErrorDTO() { EqptCode = p.Key, PartCode = string.Empty, Error = $"同器具代码有{p.Count().ToString()}种零件!" }); |
|
|
|
errors.AddRange(partialErrors1.ToList());//同容器放不同零件校验
|
|
|
|
var ls = p_ls.Select(p => p.EqptCode).Distinct().ToList();//录入的器具记录代码列表
|
|
|
|
var Locs = _locService.GetEquipmentLocAsync(ls).Result;//获取器具库位关系
|
|
|
|
var parts = _partService.GetEquipmentPartCodesAsync(ls).Result;//获取器具零件关系
|
|
|
|
//零件和器具关系校验
|
|
|
|
var partErrorQery = from itm in list |
|
|
|
join itm1 in parts on |
|
|
|
new { itm.EqptCode, PartCode = itm.PartCode } equals new { EqptCode = itm1.Code, PartCode = itm1.PartCode } |
|
|
|
into temp |
|
|
|
from tm in temp.DefaultIfEmpty() |
|
|
|
where tm == null |
|
|
|
select new EquipmentRecordErrorDTO() |
|
|
|
{ |
|
|
|
EqptCode = itm.EqptCode, |
|
|
|
PartCode = itm.PartCode, |
|
|
|
Error = $"器具零件关系不存在!" |
|
|
|
}; |
|
|
|
errors.AddRange(partErrorQery.ToList()); |
|
|
|
var query = await _repositoryCap.GetQueryableAsync().ConfigureAwait(false); |
|
|
|
var capExistList = query.Where(p => ls.Contains(p.EqptCode)).ToList();//器具容量
|
|
|
|
|
|
|
|
var partialErrors2 = from itm in capExistList |
|
|
|
join itm1 in list.ToList() on itm.EqptCode equals itm1.EqptCode |
|
|
|
where itm.PartCode != itm.PartCode |
|
|
|
select new EquipmentRecordErrorDTO() |
|
|
|
{ |
|
|
|
EqptCode = itm.EqptCode, |
|
|
|
PartCode = itm.PartCode, |
|
|
|
Error = $"录入器具代码{itm.EqptCode}零件代码{itm.PartCode}与器具容量{itm1.EqptCode}零件代码{itm1.PartCode}不符!" |
|
|
|
}; |
|
|
|
errors.AddRange(partialErrors2.ToList());//导入记录和器具容量记录零件不是同一零件
|
|
|
|
var existList = from itm in list |
|
|
|
join itm1 in capExistList |
|
|
|
on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode } |
|
|
|
select itm; |
|
|
|
foreach (var itm in existList) |
|
|
|
{ |
|
|
|
var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
cap.Qty =cap.Qty- itm.SumQty;//当前数量
|
|
|
|
|
|
|
|
if (cap.Qty <0) |
|
|
|
{ |
|
|
|
errors.Add(new EquipmentRecordErrorDTO() { EqptCode = itm.EqptCode, PartCode = itm.PartCode, Error = $"解绑数量小0!" }); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var itm in existList) |
|
|
|
{ |
|
|
|
var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
cap.Qty = cap.Qty - itm.SumQty;//当前数量
|
|
|
|
cap.Percent = cap.Qty / cap.StdQty; |
|
|
|
} |
|
|
|
|
|
|
|
foreach (var itm in p_ls) |
|
|
|
{ |
|
|
|
itm.Type = EnumEquipmentRecordType.UnBind; |
|
|
|
itm.SetId(GuidGenerator.Create()); |
|
|
|
} |
|
|
|
//var list = p_ls.GroupBy(p => new { p.EqptCode, p.PartCode }).Select(p => new { EqptCode = p.Key.EqptCode, PartCode = p.Key.PartCode, SumQty = p.Sum(p => p.Qty) });//导入零件
|
|
|
|
//var partialErrors1 = list.GroupBy(p => p.EqptCode).Where(g => g.Count() > 1).Select(p => new EquipmentRecordErrorDTO() { EqptCode = p.Key, PartCode = string.Empty, Error = $"同器具代码有{p.Count().ToString()}种零件!" });
|
|
|
|
//errors.AddRange(partialErrors1.ToList());//同容器放不同零件校验
|
|
|
|
//var ls = p_ls.Select(p => p.EqptCode).Distinct().ToList();//录入的器具记录代码列表
|
|
|
|
//var Locs = _locService.GetEquipmentLocAsync(ls).Result;//获取器具库位关系
|
|
|
|
//var parts = _partService.GetEquipmentPartCodesAsync(ls).Result;//获取器具零件关系
|
|
|
|
////零件和器具关系校验
|
|
|
|
//var partErrorQery = from itm in list
|
|
|
|
// join itm1 in parts on
|
|
|
|
// new { itm.EqptCode, PartCode = itm.PartCode } equals new { EqptCode = itm1.Code, PartCode = itm1.PartCode }
|
|
|
|
// into temp
|
|
|
|
// from tm in temp.DefaultIfEmpty()
|
|
|
|
// where tm == null
|
|
|
|
// select new EquipmentRecordErrorDTO()
|
|
|
|
// {
|
|
|
|
// EqptCode = itm.EqptCode,
|
|
|
|
// PartCode = itm.PartCode,
|
|
|
|
// Error = $"器具零件关系不存在!"
|
|
|
|
// };
|
|
|
|
//errors.AddRange(partErrorQery.ToList());
|
|
|
|
//var query = await _repositoryCap.GetQueryableAsync().ConfigureAwait(false);
|
|
|
|
//var capExistList = query.Where(p => ls.Contains(p.EqptCode)).ToList();//器具容量
|
|
|
|
|
|
|
|
//var partialErrors2 = from itm in capExistList
|
|
|
|
// join itm1 in list.ToList() on itm.EqptCode equals itm1.EqptCode
|
|
|
|
// where itm.PartCode != itm.PartCode
|
|
|
|
// select new EquipmentRecordErrorDTO()
|
|
|
|
// {
|
|
|
|
// EqptCode = itm.EqptCode,
|
|
|
|
// PartCode = itm.PartCode,
|
|
|
|
// Error = $"录入器具代码{itm.EqptCode}零件代码{itm.PartCode}与器具容量{itm1.EqptCode}零件代码{itm1.PartCode}不符!"
|
|
|
|
// };
|
|
|
|
//errors.AddRange(partialErrors2.ToList());//导入记录和器具容量记录零件不是同一零件
|
|
|
|
//var existList = from itm in list
|
|
|
|
// join itm1 in capExistList
|
|
|
|
// on new { itm.EqptCode, itm.PartCode } equals new { itm1.EqptCode, itm1.PartCode }
|
|
|
|
// select itm;
|
|
|
|
//foreach (var itm in existList)
|
|
|
|
//{
|
|
|
|
// var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
// cap.Qty =cap.Qty- itm.SumQty;//当前数量
|
|
|
|
|
|
|
|
// if (cap.Qty <0)
|
|
|
|
// {
|
|
|
|
// errors.Add(new EquipmentRecordErrorDTO() { EqptCode = itm.EqptCode, PartCode = itm.PartCode, Error = $"解绑数量小0!" });
|
|
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
//foreach (var itm in existList)
|
|
|
|
//{
|
|
|
|
// var cap = capExistList.FirstOrDefault(p => p.EqptCode == itm.EqptCode && p.PartCode == itm.PartCode);//读取当前器具容量
|
|
|
|
// cap.Qty = cap.Qty - itm.SumQty;//当前数量
|
|
|
|
// cap.Percent = cap.Qty / cap.StdQty;
|
|
|
|
//}
|
|
|
|
|
|
|
|
//foreach (var itm in p_ls)
|
|
|
|
//{
|
|
|
|
// itm.Type = EnumEquipmentRecordType.UnBind;
|
|
|
|
// itm.SetId(GuidGenerator.Create());
|
|
|
|
//}
|
|
|
|
|
|
|
|
await _repository.InsertManyAsync(p_ls).ConfigureAwait(false); |
|
|
|
//await _repository.InsertManyAsync(p_ls).ConfigureAwait(false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|