|
@@ -2666,31 +2666,28 @@ namespace Business.ResourceExamineManagement
|
|
|
foreach (var mo in mo_Mes_Morders)
|
|
foreach (var mo in mo_Mes_Morders)
|
|
|
{
|
|
{
|
|
|
//查出已产生领料单、过滤掉,取出未领料的工单
|
|
//查出已产生领料单、过滤掉,取出未领料的工单
|
|
|
- var nbr = nbrList.Find(s => s.WorkOrd == mo.morder_no);
|
|
|
|
|
- if (nbr != null)
|
|
|
|
|
|
|
+ var nbrs = nbrList.Where(s => s.WorkOrd == mo.morder_no).ToList();
|
|
|
|
|
+ if (nbrs.Any())
|
|
|
{
|
|
{
|
|
|
- //完成时间到了
|
|
|
|
|
- if (nbr.EffDate.GetValueOrDefault().Date == DateTime.Now.Date)
|
|
|
|
|
|
|
+ //查出没有备料完成的数据
|
|
|
|
|
+ var noCompletedList = nbrs.Where(x => (x.TransType == "PrevProcess" && x.Ufld1 != "completed") || x.Status.ToUpper() != "C").ToList();
|
|
|
|
|
+ if (noCompletedList.Any())
|
|
|
{
|
|
{
|
|
|
- //如果应完成日期,没有完成,则更新工单状态
|
|
|
|
|
- if (nbr.Ufld1 == "completed")
|
|
|
|
|
|
|
+ //代表还有没有备料完成
|
|
|
|
|
+ if (noCompletedList.Where(x => x.EffDate.GetValueOrDefault().Date <= DateTime.Now.Date).Any())
|
|
|
{
|
|
{
|
|
|
- //工单状态为 “生产齐套”
|
|
|
|
|
- mo.MaterialSituation = MorderEnum.ProduceComplete;
|
|
|
|
|
|
|
+ //如果有结束日期小于等于当天,因为考虑备料会晚上才备完
|
|
|
|
|
+ mo.MaterialSituation = MorderEnum.Lag;//工单状态为 “备料滞后”
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
- //工单状态为 “备料滞后”
|
|
|
|
|
- mo.MaterialSituation = MorderEnum.Lag;
|
|
|
|
|
|
|
+ //工单状态为 “备料中”
|
|
|
|
|
+ mo.MaterialSituation = MorderEnum.Preparation;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- //完成时间未到
|
|
|
|
|
- else if (nbr.EffDate.GetValueOrDefault().Date > DateTime.Now.Date)
|
|
|
|
|
- {
|
|
|
|
|
- //工单状态为 “备料中”
|
|
|
|
|
- mo.MaterialSituation = MorderEnum.Preparation;
|
|
|
|
|
|
|
+ else {
|
|
|
|
|
+ mo.MaterialSituation = MorderEnum.ProduceComplete;//工单状态为 “生产齐套”
|
|
|
}
|
|
}
|
|
|
- //完成时间已经过去,则不做处理
|
|
|
|
|
}
|
|
}
|
|
|
else {
|
|
else {
|
|
|
checkMo.Add(mo);
|
|
checkMo.Add(mo);
|
|
@@ -2869,7 +2866,7 @@ namespace Business.ResourceExamineManagement
|
|
|
var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && string.IsNullOrEmpty(s.Status) == true && stime <= s.PlanDate && s.PlanDate <= etime).ToList();
|
|
var periodSd = _periodSequenceDet.Select(s => s.Domain == domain && string.IsNullOrEmpty(s.Status) == true && stime <= s.PlanDate && s.PlanDate <= etime).ToList();
|
|
|
if (periodSd.Any())
|
|
if (periodSd.Any())
|
|
|
{
|
|
{
|
|
|
- List<string> tsWork = new List<string> { "试制工单", "TCN工单", "返工工单" };
|
|
|
|
|
|
|
+ List<string> tsWork = new List<string> { "test", "tcn", "rw" };
|
|
|
var ordlist = _workOrdMaster.Select(x => x.Domain == domain && periodSd.Select(s => s.WorkOrds).Contains(x.WorkOrd) && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && (x.Status.ToLower() == "p" || x.Status.ToLower() == "r")).ToList();
|
|
var ordlist = _workOrdMaster.Select(x => x.Domain == domain && periodSd.Select(s => s.WorkOrds).Contains(x.WorkOrd) && (string.IsNullOrEmpty(x.Typed) == true || tsWork.Contains(x.Typed)) && (x.Status.ToLower() == "p" || x.Status.ToLower() == "r")).ToList();
|
|
|
|
|
|
|
|
List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && ordlist.Select(s => s.WorkOrd).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
|
|
List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && ordlist.Select(s => s.WorkOrd).Contains(x.morder_no) && (x.morder_state == MorderEnum.Initial_state || x.morder_state == MorderEnum.Xd_state) && !x.IsDeleted).Result;
|
|
@@ -2896,10 +2893,10 @@ namespace Business.ResourceExamineManagement
|
|
|
if (mo.MaterialSituation == MorderEnum.CarehouseComplete && mo.morder_state == MorderEnum.Initial_state && mo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
|
|
if (mo.MaterialSituation == MorderEnum.CarehouseComplete && mo.morder_state == MorderEnum.Initial_state && mo.moentry_sys_stime.GetValueOrDefault().Date <= lookTime)
|
|
|
{
|
|
{
|
|
|
workords += "," + mo.morder_no;
|
|
workords += "," + mo.morder_no;
|
|
|
- mo.morder_state = MorderEnum.Xd_state;
|
|
|
|
|
|
|
+ //mo.morder_state = MorderEnum.Xd_state;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+ await _mysql_mes_morder.UpdateManyAsync(morders);
|
|
|
if (workords.Length > 0)
|
|
if (workords.Length > 0)
|
|
|
{
|
|
{
|
|
|
workords = workords.Substring(1, workords.Length - 1);
|
|
workords = workords.Substring(1, workords.Length - 1);
|
|
@@ -2910,7 +2907,6 @@ namespace Business.ResourceExamineManagement
|
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("CreatePickBill", "生成领料单相关数据更新失败:" + pickRst, _currentTenant.Id.ToString());
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("CreatePickBill", "生成领料单相关数据更新失败:" + pickRst, _currentTenant.Id.ToString());
|
|
|
return pickRst;
|
|
return pickRst;
|
|
|
}
|
|
}
|
|
|
- await _mysql_mes_morder.UpdateManyAsync(morders);
|
|
|
|
|
var insertList = GetCopyOP(workords, domain);
|
|
var insertList = GetCopyOP(workords, domain);
|
|
|
if (insertList.Any())
|
|
if (insertList.Any())
|
|
|
{
|
|
{
|
|
@@ -4054,6 +4050,13 @@ namespace Business.ResourceExamineManagement
|
|
|
await AutoCreatePickBill(workOrdMasters, dbPeriodSequences, nbrMasterList, nbrDetailList, userAccount, workDetails);
|
|
await AutoCreatePickBill(workOrdMasters, dbPeriodSequences, nbrMasterList, nbrDetailList, userAccount, workDetails);
|
|
|
if (nbrMasterList.Any())
|
|
if (nbrMasterList.Any())
|
|
|
{
|
|
{
|
|
|
|
|
+ workOrdMasters = workOrdMasters.Where(x => nbrMasterList.Select(c => c.WorkOrd).Contains(x.WorkOrd)).ToList();
|
|
|
|
|
+
|
|
|
|
|
+ List<mes_morder> morders = _mysql_mes_morder.GetListAsync(x => domain == x.factory_id.ToString() && workOrdMasters.Select(s => s.WorkOrd).Contains(x.morder_no) && !x.IsDeleted).Result;
|
|
|
|
|
+ morders.ForEach(x =>
|
|
|
|
|
+ {
|
|
|
|
|
+ x.morder_state = MorderEnum.Xd_state;
|
|
|
|
|
+ });
|
|
|
string seqSql = "";
|
|
string seqSql = "";
|
|
|
var weekplan = _replenishmentWeekPlan.GetListAsync(s => s.factory_id.ToString() == domain && workOrdMasters.Select(x => x.WorkOrd).Contains(s.ProductionOrder)).Result;
|
|
var weekplan = _replenishmentWeekPlan.GetListAsync(s => s.factory_id.ToString() == domain && workOrdMasters.Select(x => x.WorkOrd).Contains(s.ProductionOrder)).Result;
|
|
|
var worklistDto = _serialNumberAppService.GetBillNo(domain, "WOlot", workOrdMasters.Count, userAccount, 1);
|
|
var worklistDto = _serialNumberAppService.GetBillNo(domain, "WOlot", workOrdMasters.Count, userAccount, 1);
|
|
@@ -4072,7 +4075,7 @@ namespace Business.ResourceExamineManagement
|
|
|
if (worklistDto[index] != null)
|
|
if (worklistDto[index] != null)
|
|
|
{
|
|
{
|
|
|
p.LotSerial = worklistDto[index].NbrResult.ToString();
|
|
p.LotSerial = worklistDto[index].NbrResult.ToString();
|
|
|
- var weekp = weekplan.Find(s => s.ProductionOrder == p.WorkOrd && s.IsReplenishmentModel=="N");
|
|
|
|
|
|
|
+ var weekp = weekplan.Find(s => s.ProductionOrder == p.WorkOrd && s.IsReplenishmentModel == "N");
|
|
|
if (weekp != null)
|
|
if (weekp != null)
|
|
|
{
|
|
{
|
|
|
weekp.ProductionBatch = p.LotSerial;
|
|
weekp.ProductionBatch = p.LotSerial;
|
|
@@ -4081,12 +4084,11 @@ namespace Business.ResourceExamineManagement
|
|
|
index++;
|
|
index++;
|
|
|
}
|
|
}
|
|
|
//生成工单事务、工单下达事务
|
|
//生成工单事务、工单下达事务
|
|
|
- strWoSql += "A,"+p.Domain+","+ seqId.ToString()+ ",nbr-wo-mes,工单," + p.WorkOrd+","+p.RecID+ "|";
|
|
|
|
|
|
|
+ strWoSql += "A," + p.Domain + "," + seqId.ToString() + ",nbr-wo-mes,工单," + p.WorkOrd + "," + p.RecID + "|";
|
|
|
seqId++;
|
|
seqId++;
|
|
|
strWoStuSql += "REL," + p.Domain + "," + seqId.ToString() + ",nbr-wo-stu,工单下达," + p.WorkOrd + "," + p.RecID + "|";
|
|
strWoStuSql += "REL," + p.Domain + "," + seqId.ToString() + ",nbr-wo-stu,工单下达," + p.WorkOrd + "," + p.RecID + "|";
|
|
|
seqId++;
|
|
seqId++;
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
var nbrlistDto = _serialNumberAppService.GetBillNo(workOrdMasters[0].Domain, "SM", nbrMasterList.Count, userAccount, 1);
|
|
var nbrlistDto = _serialNumberAppService.GetBillNo(workOrdMasters[0].Domain, "SM", nbrMasterList.Count, userAccount, 1);
|
|
|
if (nbrlistDto.Any())
|
|
if (nbrlistDto.Any())
|
|
|
{
|
|
{
|
|
@@ -4102,13 +4104,11 @@ namespace Business.ResourceExamineManagement
|
|
|
index++;
|
|
index++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
//清理掉库存占用 这里考虑的是资源检查的占用没有完全占用备料单数据,而其他数据再进行齐套检查时,无法考虑到备料单的占用。
|
|
//清理掉库存占用 这里考虑的是资源检查的占用没有完全占用备料单数据,而其他数据再进行齐套检查时,无法考虑到备料单的占用。
|
|
|
var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => workOrdMasters.Select(x => x.WorkOrd).Contains(s.morder_mo) && s.factory_id.ToString() == domain).Result;
|
|
var itemstockoccupy = _mysql_ic_item_stockoccupy.GetListAsync(s => workOrdMasters.Select(x => x.WorkOrd).Contains(s.morder_mo) && s.factory_id.ToString() == domain).Result;
|
|
|
var icitem = _mysql_ic_item.GetListAsync(s => s.factory_id.ToString() == domain && nbrDetailList.Select(c => c.ItemNum).Contains(s.number)).Result;
|
|
var icitem = _mysql_ic_item.GetListAsync(s => s.factory_id.ToString() == domain && nbrDetailList.Select(c => c.ItemNum).Contains(s.number)).Result;
|
|
|
//根据领料单生成一次工单的数据占用
|
|
//根据领料单生成一次工单的数据占用
|
|
|
List<ic_item_stockoccupy> insertOccuyy = new List<ic_item_stockoccupy>();
|
|
List<ic_item_stockoccupy> insertOccuyy = new List<ic_item_stockoccupy>();
|
|
|
-
|
|
|
|
|
nbrMasterList.ForEach(s =>
|
|
nbrMasterList.ForEach(s =>
|
|
|
{
|
|
{
|
|
|
var nbrdtls = nbrDetailList.Where(a => a.Nbr == s.Nbr).ToList();
|
|
var nbrdtls = nbrDetailList.Where(a => a.Nbr == s.Nbr).ToList();
|
|
@@ -4130,14 +4130,13 @@ namespace Business.ResourceExamineManagement
|
|
|
itemStockoccupyDto.quantity = x.CurrQtyOpened.GetValueOrDefault();
|
|
itemStockoccupyDto.quantity = x.CurrQtyOpened.GetValueOrDefault();
|
|
|
insertOccuyy.Add(itemStockoccupyDto);
|
|
insertOccuyy.Add(itemStockoccupyDto);
|
|
|
}
|
|
}
|
|
|
- });
|
|
|
|
|
|
|
+ });
|
|
|
seqSql += "insert QadTracking(Ufld1,Domain,SeqID,TransType,Subject,[Order],Int1,Ufld2,CreateTime,CreateUser,UpdateTime,UpdateUser) " +
|
|
seqSql += "insert QadTracking(Ufld1,Domain,SeqID,TransType,Subject,[Order],Int1,Ufld2,CreateTime,CreateUser,UpdateTime,UpdateUser) " +
|
|
|
"select 'A','" + domain + "'," + seqId.ToString() + ",'nbr-sm-mes','领料申请单',Nbr,RecID,'sm',getdate(),CreateUser,getdate(),UpdateUser from NbrMaster where RecID=" + s.RecID + ";";
|
|
"select 'A','" + domain + "'," + seqId.ToString() + ",'nbr-sm-mes','领料申请单',Nbr,RecID,'sm',getdate(),CreateUser,getdate(),UpdateUser from NbrMaster where RecID=" + s.RecID + ";";
|
|
|
seqId++;
|
|
seqId++;
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
//获取工单工艺路径数据
|
|
//获取工单工艺路径数据
|
|
|
- List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => ords.Contains(p.WorkOrd) && p.MilestoneOp && p.Domain == workOrdMasters[0].Domain && p.Status != "C" && p.IsActive);
|
|
|
|
|
|
|
+ List<WorkOrdRouting> workOrdRoutings = _workOrdRouting.Select(p => workOrdMasters.Select(x => x.WorkOrd).Contains(p.WorkOrd) && p.MilestoneOp && p.Domain == domain && p.Status != "C" && p.IsActive);
|
|
|
workOrdRoutings.ForEach(p => { p.Status = "r"; });
|
|
workOrdRoutings.ForEach(p => { p.Status = "r"; });
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
{
|
|
@@ -4146,7 +4145,7 @@ namespace Business.ResourceExamineManagement
|
|
|
_nbrMaster.Insert(nbrMasterList);
|
|
_nbrMaster.Insert(nbrMasterList);
|
|
|
nbrMasterList.ForEach(a =>
|
|
nbrMasterList.ForEach(a =>
|
|
|
{
|
|
{
|
|
|
- string sql =string.Format("exec pr_WMS_BPM_AddMobileTask @TaskID='{0}',@PlanDate='{1}',@ExecuterTypeID=2,@CreateUser='{2}'", a.Nbr, a.Date.Value.ToString("yyyy-MM-dd"), a.CreateUser);
|
|
|
|
|
|
|
+ string sql = string.Format("exec pr_WMS_BPM_AddMobileTask @TaskID='{0}',@PlanDate='{1}',@ExecuterTypeID=2,@CreateUser='{2}'", a.Nbr, a.Date.Value.ToString("yyyy-MM-dd"), a.CreateUser);
|
|
|
_businessDbContext.Database.ExecuteSqlRaw(sql);
|
|
_businessDbContext.Database.ExecuteSqlRaw(sql);
|
|
|
});
|
|
});
|
|
|
if (!string.IsNullOrEmpty(strWoSql))
|
|
if (!string.IsNullOrEmpty(strWoSql))
|
|
@@ -4156,7 +4155,8 @@ namespace Business.ResourceExamineManagement
|
|
|
string sql = string.Format("exec pr_WMS_AddWorkOrdSeq @strWoSql='{0}',@strWoStuSql='{1}'", strWoSql, strWoStuSql);
|
|
string sql = string.Format("exec pr_WMS_AddWorkOrdSeq @strWoSql='{0}',@strWoStuSql='{1}'", strWoSql, strWoStuSql);
|
|
|
_businessBangDbContext.Database.ExecuteSqlRaw(sql);
|
|
_businessBangDbContext.Database.ExecuteSqlRaw(sql);
|
|
|
}
|
|
}
|
|
|
- if (!string.IsNullOrEmpty(seqSql)) {
|
|
|
|
|
|
|
+ if (!string.IsNullOrEmpty(seqSql))
|
|
|
|
|
+ {
|
|
|
_businessBangDbContext.Database.ExecuteSqlRaw(seqSql);
|
|
_businessBangDbContext.Database.ExecuteSqlRaw(seqSql);
|
|
|
}
|
|
}
|
|
|
if (itemstockoccupy.Any())
|
|
if (itemstockoccupy.Any())
|
|
@@ -4164,10 +4164,9 @@ namespace Business.ResourceExamineManagement
|
|
|
await _mysql_ic_item_stockoccupy.HardDeleteAsync(itemstockoccupy);
|
|
await _mysql_ic_item_stockoccupy.HardDeleteAsync(itemstockoccupy);
|
|
|
}
|
|
}
|
|
|
if (insertOccuyy.Any())
|
|
if (insertOccuyy.Any())
|
|
|
- {
|
|
|
|
|
|
|
+ {
|
|
|
_businessDbContext.BulkInsert(insertOccuyy);
|
|
_businessDbContext.BulkInsert(insertOccuyy);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
//快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
//快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
|
List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
|
|
List<string> nbrs = nbrMasterList.Select(a => a.Nbr).ToList();
|
|
|
var DBnbrList = _nbrMaster.Select(a => a.Domain == workOrdMasters[0].Domain && a.Type == "SM" && nbrs.Contains(a.Nbr));
|
|
var DBnbrList = _nbrMaster.Select(a => a.Domain == workOrdMasters[0].Domain && a.Type == "SM" && nbrs.Contains(a.Nbr));
|
|
@@ -4177,8 +4176,12 @@ namespace Business.ResourceExamineManagement
|
|
|
});
|
|
});
|
|
|
_nbrDetail.Insert(nbrDetailList);
|
|
_nbrDetail.Insert(nbrDetailList);
|
|
|
await _replenishmentWeekPlan.UpdateManyAsync(weekplan);
|
|
await _replenishmentWeekPlan.UpdateManyAsync(weekplan);
|
|
|
|
|
+
|
|
|
|
|
+ if (morders != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ await _mysql_mes_morder.UpdateManyAsync(morders);
|
|
|
|
|
+ }
|
|
|
_workOrdMaster.Update(workOrdMasters);
|
|
_workOrdMaster.Update(workOrdMasters);
|
|
|
- _periodSequenceDet.Update(dbPeriodSequences);
|
|
|
|
|
_workOrdRouting.Update(workOrdRoutings);
|
|
_workOrdRouting.Update(workOrdRoutings);
|
|
|
await unitOfWork.CompleteAsync();
|
|
await unitOfWork.CompleteAsync();
|
|
|
}
|
|
}
|
|
@@ -4190,6 +4193,9 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ else {
|
|
|
|
|
+ return "当前工单下达失败,请检查工单信息。";
|
|
|
|
|
+ }
|
|
|
return "ok";
|
|
return "ok";
|
|
|
}
|
|
}
|
|
|
|
|
|