|
|
@@ -934,33 +934,33 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
|
|
|
//PR手动合并
|
|
|
- public string PrMerge(string ids)
|
|
|
+ public async Task<string> PrMerge(string ids)
|
|
|
{
|
|
|
//物料、供应商为相同才允许合并。
|
|
|
var idList = AnalysisIdList(ids);
|
|
|
List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => idList.Contains(s.Id)).Result;
|
|
|
if (prlist.Where(s => s.state == 0).Count() > 0)
|
|
|
{
|
|
|
- return "所选包含已关闭采购申请,请重新选择。";
|
|
|
+ return JsonConvert.SerializeObject("所选包含已关闭采购申请,请重新选择。");
|
|
|
}
|
|
|
if (prlist.Where(s => s.state == 2).Count() > 0)
|
|
|
{
|
|
|
- return "所选包含已提交评审采购申请,请重新选择。";
|
|
|
+ return JsonConvert.SerializeObject("所选包含已提交评审采购申请,请重新选择。");
|
|
|
}
|
|
|
if (prlist.Where(s => s.state == 4).Count() > 0)
|
|
|
{
|
|
|
- return "所选包含已评审通过采购申请,请重新选择。";
|
|
|
+ return JsonConvert.SerializeObject("所选包含已评审通过采购申请,请重新选择。");
|
|
|
}
|
|
|
if (prlist.Any())
|
|
|
{
|
|
|
var list = prlist.GroupBy(s => new { s.icitem_id, s.pr_purchaseid });
|
|
|
if (list.Count() > 1)
|
|
|
{
|
|
|
- return "所选行的物料编码,供应商名称必须相同";
|
|
|
+ return JsonConvert.SerializeObject("所选行的物料编码,供应商名称必须相同");
|
|
|
}
|
|
|
}
|
|
|
else {
|
|
|
- return "所选采购申请单未找到,请刷新界面重新操作。";
|
|
|
+ return JsonConvert.SerializeObject("所选采购申请单未找到,请刷新界面重新操作。");
|
|
|
}
|
|
|
|
|
|
srm_pr_main srm_Pr = help.DeepCopy(prlist[0]);
|
|
|
@@ -972,11 +972,11 @@ namespace Business.ResourceExamineManagement
|
|
|
srm_Pr.pr_mono = mes_morder.morder_no;//关联工单号
|
|
|
srm_Pr.entity_id = 1;//工单行号
|
|
|
}*/
|
|
|
- /*srm_Pr.pr_purchaseid = prlist[0].pr_purchaseid;//供应商id
|
|
|
+ srm_Pr.pr_purchaseid = prlist[0].pr_purchaseid;//供应商id
|
|
|
srm_Pr.pr_purchasenumber = prlist[0].pr_purchasenumber;//供应商编码
|
|
|
srm_Pr.pr_purchasename = prlist[0].pr_purchasename;//供应商名称
|
|
|
srm_Pr.pr_purchaser = prlist[0].pr_purchaser;//采购员
|
|
|
- srm_Pr.pr_purchaser_num = "";//采购员工号(采购信息表)*/
|
|
|
+ srm_Pr.pr_purchaser_num = "";//采购员工号(采购信息表)*//*
|
|
|
srm_Pr.pr_rqty = prlist.Sum(s => s.pr_rqty);//需求数量
|
|
|
srm_Pr.pr_aqty = prlist.Sum(s => s.pr_aqty);//申请数量
|
|
|
srm_Pr.pr_sqty = prlist.Sum(s => s.pr_sqty);//建议数量
|
|
|
@@ -1007,16 +1007,16 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
_businessDbContext.BulkUpdate(prlist);
|
|
|
_businessDbContext.BulkInsert(new List<srm_pr_main> { srm_Pr });
|
|
|
- unitOfWork.CompleteAsync();
|
|
|
+ await unitOfWork.CompleteAsync();
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
new NLogHelper("ResourceExamineAppService").WriteLog("PrMerge", "采购申请单合并数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
unitOfWork.Dispose();
|
|
|
- return e.Message;
|
|
|
+ return JsonConvert.SerializeObject(e.Message);
|
|
|
}
|
|
|
}
|
|
|
- return "ok";
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
}
|
|
|
|
|
|
//PR自动合并
|
|
|
@@ -1043,11 +1043,13 @@ namespace Business.ResourceExamineManagement
|
|
|
{
|
|
|
bool bl = pr.sentry_id == null ? true : false;
|
|
|
//找到是否生成了新的PR
|
|
|
- var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && (s.sentry_id == null) == bl);
|
|
|
+ //var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && (s.sentry_id == null) == bl);
|
|
|
+ var newPr = insetPrList.Find(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id);
|
|
|
if (newPr == null)
|
|
|
{
|
|
|
//有多条才进行合并
|
|
|
- var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && (s.sentry_id == null) == bl).ToList();
|
|
|
+ //var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id && (s.sentry_id == null) == bl).ToList();
|
|
|
+ var ilist = prlist.Where(s => s.pr_purchaseid == pr.pr_purchaseid && s.icitem_id == pr.icitem_id).ToList();
|
|
|
if (ilist.Count > 1)
|
|
|
{
|
|
|
var icitem = ic_Items.Find(s => s.Id == pr.icitem_id);
|
|
|
@@ -1063,6 +1065,7 @@ namespace Business.ResourceExamineManagement
|
|
|
decimal day = 0;
|
|
|
if (icitem != null)
|
|
|
{
|
|
|
+ //目前只加入了下单前置(天)
|
|
|
day += icitem.order_leadtime.GetValueOrDefault();
|
|
|
}
|
|
|
newPr.pr_rarrive_date = starttime;//需求到货日期
|
|
|
@@ -1075,11 +1078,12 @@ namespace Business.ResourceExamineManagement
|
|
|
newPr.pr_orderprice = newPr.pr_rqty * pr.pr_price * (1 + pr.pr_rate);//订单价格(含税)
|
|
|
ilist.ForEach(s => { s.refer_pr_billno = newPr.pr_billno; });
|
|
|
insetPrList.Add(newPr);
|
|
|
+ ilist.ForEach(s => { s.state = 0; });
|
|
|
updatePrList.AddRange(ilist);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- updatePrList.ForEach(s => { s.state = 0; });
|
|
|
+
|
|
|
#region 此逻辑是处理按每周几送货实现,先屏蔽
|
|
|
/*foreach (var pr in moPrlist)
|
|
|
{
|
|
|
@@ -1153,6 +1157,7 @@ namespace Business.ResourceExamineManagement
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 解析按周频率送货方式
|
|
|
/// </summary>
|
|
|
@@ -1224,29 +1229,31 @@ namespace Business.ResourceExamineManagement
|
|
|
return weekOfYear;
|
|
|
}*/
|
|
|
|
|
|
- //PR手动审核
|
|
|
- public async void PrApprove()
|
|
|
+ //PR自动审核
|
|
|
+ public async Task<string> PrAutoApprove()
|
|
|
{
|
|
|
//直接按间隔多少天一次来处理数据,定时任务按周四来考虑。
|
|
|
DateTime toTime = new DateTime(2023, 7, 6);
|
|
|
DateTime starttime = toTime.AddDays(1);
|
|
|
DateTime endtime = toTime.AddDays(8);
|
|
|
- List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.pr_rarrive_date >= starttime && s.pr_rarrive_date <= endtime && (s.state == 1 || s.state == 3)).Result;
|
|
|
-
|
|
|
+ List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => s.pr_rarrive_date >= starttime && s.pr_rarrive_date <= endtime && (s.state == 1|| s.state == 2 || s.state == 3)).Result;
|
|
|
+
|
|
|
if (prlist.Any())
|
|
|
{
|
|
|
- List<srm_supplier> itemsupplierList = new List<srm_supplier>();
|
|
|
List<srm_purchase> purchaselist = _mysql_srm_purchase.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.icitem_id) && prlist.Select(c => c.pr_purchaseid).Contains(s.supplier_id)).Result;
|
|
|
+ List<srm_supplier> itemsupplierList = _mysql_srm_supplier.GetListAsync(s => prlist.Select(c => c.pr_purchaseid).Contains(s.Id)).Result;
|
|
|
List<ic_item> ic_Items = _mysql_ic_item.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.Id)).Result;
|
|
|
PoActionListDto poaction = new PoActionListDto();
|
|
|
+ param.tenantId = prlist[0].tenant_id;
|
|
|
+ param.factoryId = prlist[0].factory_id.GetValueOrDefault();
|
|
|
AutoCreatePOFromPR(prlist, ic_Items, itemsupplierList, purchaselist, poaction);
|
|
|
-
|
|
|
using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (poaction.poMain.Any())
|
|
|
{
|
|
|
+ _businessDbContext.BulkUpdate(prlist);
|
|
|
_businessDbContext.BulkInsert(poaction.poMain);
|
|
|
}
|
|
|
if (poaction.polist.Any())
|
|
|
@@ -1275,12 +1282,95 @@ namespace Business.ResourceExamineManagement
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
unitOfWork.Dispose();
|
|
|
- new NLogHelper("ResourceExamineAppService").WriteLog("OrderKittingCheck", "工单检查数据更新失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("PrApprove", "采购申请单合并失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ return JsonConvert.SerializeObject("合并失败,请联系管理员。");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return JsonConvert.SerializeObject("没有需要审核的采购申请单。");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// //PR手动审核
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="ids"></param>
|
|
|
+ /// <returns></returns>
|
|
|
+ public async Task<string> PrApprove(string ids)
|
|
|
+ {
|
|
|
+ //物料、供应商为相同才允许合并。
|
|
|
+ var idList = AnalysisIdList(ids);
|
|
|
+ List<srm_pr_main> prlist = _mysql_srm_pr_main.GetListAsync(s => idList.Contains(s.Id)).Result;
|
|
|
+ if (!prlist.Any())
|
|
|
+ {
|
|
|
+ return JsonConvert.SerializeObject("所选采购申请单未找到,请刷新界面重新操作。");
|
|
|
+ }
|
|
|
+ if (prlist.Where(s => s.state == 0).Count() > 0)
|
|
|
+ {
|
|
|
+ return JsonConvert.SerializeObject("所选包含已关闭采购申请,请重新选择。");
|
|
|
+ }
|
|
|
+ if (prlist.Where(s => s.state == 3).Count() > 0)
|
|
|
+ {
|
|
|
+ return JsonConvert.SerializeObject("所选包含评审未通过采购申请,请重新选择。");
|
|
|
+ }
|
|
|
+ List<srm_purchase> purchaselist = _mysql_srm_purchase.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.icitem_id) && prlist.Select(c => c.pr_purchaseid).Contains(s.supplier_id)).Result;
|
|
|
+ List<srm_supplier> itemsupplierList = _mysql_srm_supplier.GetListAsync(s => prlist.Select(c => c.pr_purchaseid).Contains(s.Id)).Result;
|
|
|
+ var purclist = purchaselist.GroupBy(s => new { s.supplier_type, s.supplier_id });
|
|
|
+ if (purclist.Count() > 1)
|
|
|
+ {
|
|
|
+ return JsonConvert.SerializeObject("采购申请单的采购类别必须相同。");
|
|
|
+ }
|
|
|
+ List<ic_item> ic_Items = _mysql_ic_item.GetListAsync(s => prlist.Select(c => c.icitem_id).Contains(s.Id)).Result;
|
|
|
+ PoActionListDto poaction = new PoActionListDto();
|
|
|
+ param.tenantId = prlist[0].tenant_id;
|
|
|
+ param.factoryId = prlist[0].factory_id.GetValueOrDefault();
|
|
|
+ AutoCreatePOFromPR(prlist, ic_Items, itemsupplierList, purchaselist, poaction);
|
|
|
+ using (var unitOfWork = _unitOfWorkManager.Begin(false, true))
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (poaction.poMain.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkUpdate(prlist);
|
|
|
+ _businessDbContext.BulkInsert(poaction.poMain);
|
|
|
+ }
|
|
|
+ if (poaction.polist.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(poaction.polist);
|
|
|
+ }
|
|
|
+ if (poaction.poOccupiesList.Any())
|
|
|
+ {
|
|
|
+ _businessDbContext.BulkInsert(poaction.poOccupiesList);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (poaction.poMasterList.Any())
|
|
|
+ {
|
|
|
+ _purOrdMaster.Insert(poaction.poMasterList);
|
|
|
+ //快开平台用自增列RecId关联,所以需要插入后再查给明细表赋相应的值
|
|
|
+ List<string> nbrs = poaction.poMasterList.Select(a => a.PurOrd).ToList();
|
|
|
+ var nbrList = _purOrdMaster.Select(a => a.Domain == "1001" && nbrs.Contains(a.PurOrd));
|
|
|
+ poaction.poDetailList.ForEach(c =>
|
|
|
+ {
|
|
|
+ c.PurOrdRecID = nbrList.Where(a => a.PurOrd == c.PurOrd).First().RecID;
|
|
|
+ });
|
|
|
+ _purOrdDetail.Insert(poaction.poDetailList);
|
|
|
}
|
|
|
+ await unitOfWork.CompleteAsync();
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ unitOfWork.Dispose();
|
|
|
+ new NLogHelper("ResourceExamineAppService").WriteLog("PrApprove", "采购申请单合并失败:" + e.Message, _currentTenant.Id.ToString());
|
|
|
+ return JsonConvert.SerializeObject("合并失败,请联系管理员。");
|
|
|
}
|
|
|
}
|
|
|
+ return JsonConvert.SerializeObject("ok");
|
|
|
}
|
|
|
|
|
|
+
|
|
|
private List<long> AnalysisIdList(string ids)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(ids))
|
|
|
@@ -1615,6 +1705,8 @@ namespace Business.ResourceExamineManagement
|
|
|
/// <returns></returns>
|
|
|
public async Task DbSnapShot(long tenantId, long factoryId, long bangid,List<b_bom_pretreatment> pretreatments)
|
|
|
{
|
|
|
+ //TODO:申老师明确后续需要调整 根据需要使用的字段,来同步表数据。
|
|
|
+
|
|
|
//同步物料库存数据 根据预处理,来只找出部分数据同步。
|
|
|
List<long> itemIds = pretreatments.Select(s => s.item_id.GetValueOrDefault()).ToList();
|
|
|
//var icitemStokc = _mysql_ic_item_stock.GetListAsync(p => p.tenant_id == tenantId && p.factory_id == factoryId).Result;
|
|
|
@@ -1847,18 +1939,23 @@ namespace Business.ResourceExamineManagement
|
|
|
//此逻辑已经在PR按周合并了。这一块直接转PO_list,然后根据此类型,再生成PO
|
|
|
foreach (var item in list)
|
|
|
{
|
|
|
- int type = item.sentry_id == null ? 1 : 0;
|
|
|
var pur = purchaselist.Find(s => s.supplier_id == item.pr_purchaseid && s.icitem_id == item.icitem_id);
|
|
|
- POGroupDto poDto = pOGroupDtos.Find(s => s.supplier_type == pur.supplier_type && s.Type == type && s.erp_cls == item.pr_type.GetValueOrDefault());
|
|
|
+ if (pur == null)
|
|
|
+ {
|
|
|
+ //无货源清单的PR不处理
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ POGroupDto poDto = pOGroupDtos.Find(s => s.supplier_type == pur.supplier_type && s.supplier_id == item.pr_purchaseid);
|
|
|
if (poDto == null)
|
|
|
{
|
|
|
poDto = new POGroupDto();
|
|
|
- poDto.Type = type;
|
|
|
- poDto.erp_cls = item.pr_type.GetValueOrDefault();//委外 外购
|
|
|
+ poDto.supplier_id = item.pr_purchaseid.GetValueOrDefault();
|
|
|
poDto.supplier_type = pur.supplier_type;
|
|
|
poDto.polist = new List<srm_po_list>();
|
|
|
pOGroupDtos.Add(poDto);
|
|
|
}
|
|
|
+ item.state = 0;
|
|
|
+
|
|
|
srm_po_list podetail = new srm_po_list();
|
|
|
podetail.GenerateNewId(help.NextId());
|
|
|
podetail.pr_id = item.Id;
|
|
|
@@ -1902,6 +1999,7 @@ namespace Business.ResourceExamineManagement
|
|
|
po_Main.state = 0;
|
|
|
po_Main.po_note = "";
|
|
|
po_Main.po_order_type = 1;
|
|
|
+ po_Main.po_total = 0;
|
|
|
po_Main.currency = pr.currencytype;
|
|
|
po_Main.bill_type = poType;
|
|
|
po_Main.supplier_id = pr.pr_purchaseid;
|