/// <summary> /// 完成 /// </summary> /// <param name="id"></param> /// <param name="loginUser"></param> /// <returns></returns> public bool GenerationdifferenceInfos(List <string> rowsKeyValues, string loginUser) { List <InventoryNoticeOrderInfo> inventoryNoticeOrderInfos = dal.GetList("[ID] IN (" + string.Join(",", rowsKeyValues) + ") and [STATUS] = " + (int)InventoryOrderStatusConstants.CONFIRMED + "", string.Empty); if (inventoryNoticeOrderInfos.Count == 0) { throw new Exception("MC:0x00000376");///已确认状态才能进行完成操作 } StringBuilder stringBuilder = new StringBuilder(); string check = new ConfigBLL().GetValueByCode("ENABLE_SAP_INVENTORY_REPORT_FLAG"); if (check == "true") { List <InventoryNoticeOrderInfo> infos = new List <InventoryNoticeOrderInfo>(); List <InventoryOrderPartInfo> orderPartInfos = new InventoryOrderPartDAL().GetList("[ORDER_FID] IN ('" + string.Join("','", inventoryNoticeOrderInfos.Select(d => d.Fid).ToArray()) + "')", string.Empty); List <InventoryPartBarcodeInfo> inventoryPartBarcodes = new InventoryPartBarcodeDAL().GetList("[PART_FID] IN ('" + string.Join("','", orderPartInfos.Select(d => d.Fid).ToArray()) + "')", string.Empty); Dictionary <string, Guid> keyValues = new Dictionary <string, Guid>(); List <MaintainPartsInfo> maintainParts = new MaintainPartsDAL().GetList("[PART_NO] IN ('" + string.Join("','", orderPartInfos.Select(d => d.PartNo).ToArray()) + "')", string.Empty); foreach (var item in inventoryNoticeOrderInfos) { ///生成SAP盘点报告中间表数据 Guid guid = Guid.NewGuid(); if (keyValues.Keys.Contains <string>(item.SapIblnr) == false) { keyValues.Add(item.SapIblnr, guid); } List <InventoryOrderPartInfo> partInfos = orderPartInfos.Where(d => d.OrderFid == item.Fid).ToList(); foreach (var items in partInfos) { string PartName = maintainParts.FirstOrDefault(d => d.PartNo == items.PartNo).PartCname; stringBuilder.Append("insert into [LES].[TI_IFM_SAP_INVENTORY_CHECK_REPORT] ([FID],[LOG_FID],[IBLNR],[LGORT],[REMARKS],[MATNR],[MENGE],[ZLDAT],[AQTY],[DQTY],[PROCESS_FLAG],[PROCESS_TIME],[VALID_FLAG],[CREATE_USER],[CREATE_DATE])values("); string partQty = string.Empty; if (items.PartQty == null) { partQty = "NULL"; } else { partQty = ((int)items.PartQty).ToString(); } string sapDqty = string.Empty; if (items.SapDqty == null) { sapDqty = "NULL"; } else { sapDqty = ((int)items.SapDqty).ToString(); } stringBuilder.Append("newid(),N'" + keyValues[item.SapIblnr] + "',N'" + item.SapIblnr + "',N'" + item.SapLgort + "',N'" + item.Comments + "',N'" + items.PartNo + "'," + partQty + ",N'" + item.SapZldat + "',N'" + items.SapMenge + "'," + sapDqty + ",N'" + item.Status + "',N'" + item.ModifyDate + "',1,N'" + loginUser + "',GETDATE());\n\n"); InventoryPartBarcodeInfo barcodeInfo = inventoryPartBarcodes.Where(d => d.PartFid == items.Fid).FirstOrDefault(); if (barcodeInfo != null) { if (barcodeInfo.PartQty != items.DifferenceQty) { stringBuilder.Append("update [LES].[TT_WMM_INVENTORY_PART_BARCODE] set [PART_QTY] = N'" + items.DifferenceQty + "',[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' where [ID] = " + barcodeInfo.Id + ";\n\n"); } } } ///新数据排除盘点计划号一致的 InventoryNoticeOrderInfo InventoryNoticeOrderInfos = infos.Where(d => d.SapIblnr == item.SapIblnr).FirstOrDefault(); if (InventoryNoticeOrderInfos == null) { infos.Add(item); } } List <InventoryNoticeOrderInfo> inventoryNotices = dal.GetList(" [ID] not in (" + string.Join(",", rowsKeyValues) + ") and [STATUS] = " + (int)InventoryOrderStatusConstants.CONFIRMED + " and [SAP_IBLNR] in ('" + string.Join("','", inventoryNoticeOrderInfos.Select(d => d.SapIblnr).ToArray()) + "')", string.Empty); foreach (var item in infos) { List <InventoryNoticeOrderInfo> inventoryNoticeOrders = inventoryNotices.Where(d => d.SapIblnr == item.SapIblnr).ToList(); List <InventoryNoticeOrderInfo> inventories = inventoryNotices.Where(d => d.SapIblnr == item.SapIblnr && d.Status == item.Status).ToList(); if (inventoryNoticeOrders.Count == inventories.Count) { //生成盘点报告发送任务 string targetSystem = "SAP"; string methodCode = "LES-WMM-071"; string keyValue = item.SapIblnr; stringBuilder.AppendFormat(BLL.LES.CommonBLL.GetCreateOutboundLogSql(targetSystem, keyValues[item.SapIblnr], methodCode, keyValue, loginUser)); } } } using (TransactionScope trans = new TransactionScope()) { if (!string.IsNullOrEmpty(stringBuilder.ToString())) { stringBuilder.Append("\n\n update [LES].[TT_WMM_INVENTORY_NOTICE_ORDER] set [STATUS] = " + (int)InventoryOrderStatusConstants.COMPLETED + ",[MODIFY_DATE] = GETDATE(),[MODIFY_USER] = N'" + loginUser + "' where [VALID_FLAG] = 1 and [ID] IN (" + string.Join(",", rowsKeyValues) + ") "); CommonDAL.ExecuteNonQueryBySql(stringBuilder.ToString()); } trans.Complete(); } return(true); }