/// <summary> /// /// </summary> /// <param name="receiptNo"></param> /// <returns></returns> public ActionResult FinishedReceipt(string receiptNo) { try { var Message = "审核失败。"; int IsOk = 0; var entity = Repositoryfactory.Repository().FindEntity("ReceiptNo", receiptNo); if (entity == null || entity.Status != 2) { throw new Exception("该收货单不是收货中状态,不能完成收货"); } if (entity.IsLocked) { throw new Exception("该收货单已锁定,完成收货"); } entity.Modify(entity.ReceiptId); entity.Status = 3; IsOk = _receiptBll.UpdateReceiptStatus(entity); if (IsOk > 0) { Message = "审核成功。"; } WriteLog(IsOk, receiptNo, Message); return(Content(new JsonMessage { Success = true, Code = IsOk.ToString(), Message = Message }.ToString())); } catch (Exception ex) { WriteLog(-1, receiptNo, "操作失败:" + ex.Message); return(Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString())); } }
/// <summary> /// 收货单快速收货 /// </summary> /// <param name="receipt"></param> /// <returns></returns> public bool ReceiptQuickReceive(ReceiptEntity receipt) { IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { var warehouse = _warehouseBLL.GetWarehouse(receipt.WarehouseId); if (string.IsNullOrWhiteSpace(warehouse?.ReceiptLocationId)) { throw new Exception("该仓库没有设置默认的收货储位"); } var location = _warehouseLocationBLL.GetLocation(warehouse.WarehouseId, warehouse.ReceiptLocationId); if (string.IsNullOrWhiteSpace(location?.Code)) { throw new Exception("该仓库没有设置默认的收货储位"); } var receiptItemList = _receiptBll.GetReceiptItemList(receipt.ReceiptId); List <ReceiptRecordEntity> record = new List <ReceiptRecordEntity>(); foreach (var receiptItemEntity in receiptItemList) { var recordItem = new ReceiptRecordEntity(); recordItem.Create(); recordItem.ReceiptId = receipt.ReceiptId; recordItem.ReceiptItemId = receiptItemEntity.ItemId; recordItem.ReceivedQty = receiptItemEntity.Qty; recordItem.ProductId = receiptItemEntity.ProductId; recordItem.LocationCode = location.Code; recordItem.LocationId = location.LocationId; recordItem.Status = 0; record.Add(recordItem); } if (record.Count == 0) { throw new Exception("没有有效的收货记录"); } foreach (var receiptRecordEntity in record) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("UPDATE [Receipt_Item] SET ReceivedQty = ReceivedQty + {0} WHERE ItemId = '{1}'", receiptRecordEntity.ReceivedQty.ToString(), receiptRecordEntity.ReceiptItemId); database.ExecuteBySql(sb, isOpenTrans); database.Insert(receiptRecordEntity, isOpenTrans); } record = record.OrderBy(a => a.ProductId).ThenBy(a => a.LocationCode).ToList(); Dictionary <string, int> dicInventory = new Dictionary <string, int>(); foreach (var receiptRecordEntity in record) { string key = string.Format("{0}${1}", receiptRecordEntity.ProductId, receiptRecordEntity.LocationCode); if (!dicInventory.ContainsKey(key)) { dicInventory.Add(key, receiptRecordEntity.ReceivedQty); } else { dicInventory[key] = dicInventory[key] + receiptRecordEntity.ReceivedQty; } } foreach (var item in dicInventory) { string[] itemValue = item.Key.Split('$'); _inventoryBLL.UpdateInventoryByReceive(receipt.ReceiptNo, InventoryTransactionType.Receive, receipt.WarehouseId, itemValue[0], receipt.MerchantId, item.Value, isOpenTrans); _inventoryLocationBLL.UpdateInventoryByMoveIn(receipt.WarehouseId, InventoryLocationTransactionType.Receive, itemValue[0], "", itemValue[1], item.Value, isOpenTrans); } receipt.Modify(receipt.ReceiptId); receipt.Status = (int)ReceiptStatus.Received; _receiptBll.UpdateReceiptStatus(receipt); database.Commit(); return(true); } catch (Exception ex) { database.Rollback(); return(false); } }
/// <summary> /// /// </summary> /// <param name="receiptNo"></param> /// <param name="receiptRecordJson"></param> /// <returns></returns> public ActionResult SubmitReceiptRecord(string receiptNo, string receiptRecordJson) { IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { string Message = "操作成功。"; ReceiptEntity receipt = _receiptBll.Repository().FindEntity("ReceiptNo", receiptNo); if (receipt == null) { throw new Exception("收货单不存在"); } var receiptItemList = _receiptBll.GetReceiptItemList(receipt.ReceiptId); List <ReceiptRecordViewModel> receiptRecordList = receiptRecordJson.JonsToList <ReceiptRecordViewModel>(); List <ReceiptRecordEntity> record = new List <ReceiptRecordEntity>(); foreach (ReceiptRecordViewModel item in receiptRecordList) { if (!string.IsNullOrEmpty(item.ItemId)) { var recordItem = new ReceiptRecordEntity(); recordItem.Create(); recordItem.ReceiptId = receipt.ReceiptId; recordItem.ReceiptItemId = item.ItemId; recordItem.ReceivedQty = item.ReceivedQty; recordItem.LocationCode = item.LocationCode; recordItem.Status = 0; foreach (var receiptItemEntity in receiptItemList) { if (receiptItemEntity.ItemId == recordItem.ReceiptItemId) { recordItem.ProductId = receiptItemEntity.ProductId; if (receiptItemEntity.Qty < receiptItemEntity.ReceivedQty + recordItem.ReceivedQty) { throw new Exception(string.Format("{0}收货数量超过预计收货数量", receiptItemEntity.ProductName)); } } } if (string.IsNullOrEmpty(recordItem.ProductId)) { throw new Exception("商品编号无效"); } WarehouseLocationEntity location = _locationBLL.GetLocationByCode(receipt.WarehouseId, recordItem.LocationCode); if (location == null) { throw new Exception(string.Format("当前仓库没有该储位{0}", recordItem.LocationCode)); } recordItem.LocationId = location.LocationId; if (recordItem.ReceivedQty > 0) { record.Add(recordItem); } } } if (record.Count == 0) { throw new Exception("没有有效的收货记录"); } foreach (var receiptRecordEntity in record) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("UPDATE [Receipt_Item] SET ReceivedQty = ReceivedQty + {0} WHERE ItemId = '{1}'", receiptRecordEntity.ReceivedQty.ToString(), receiptRecordEntity.ReceiptItemId); database.ExecuteBySql(sb, isOpenTrans); database.Insert(receiptRecordEntity, isOpenTrans); } record = record.OrderBy(a => a.ProductId).ThenBy(a => a.LocationCode).ToList(); Dictionary <string, int> dicInventory = new Dictionary <string, int>(); foreach (var receiptRecordEntity in record) { string key = string.Format("{0}${1}", receiptRecordEntity.ProductId, receiptRecordEntity.LocationCode); if (!dicInventory.ContainsKey(key)) { dicInventory.Add(key, receiptRecordEntity.ReceivedQty); } else { dicInventory[key] = dicInventory[key] + receiptRecordEntity.ReceivedQty; } } foreach (var item in dicInventory) { string[] itemValue = item.Key.Split('$'); _inventoryBLL.UpdateInventoryByReceive(receipt.ReceiptNo, InventoryTransactionType.Receive, receipt.WarehouseId, itemValue[0], receipt.ReceiptId, item.Value, isOpenTrans); _inventoryLocationBLL.UpdateInventoryByMoveIn(receipt.WarehouseId, InventoryLocationTransactionType.Receive, itemValue[0], "", itemValue[1], item.Value, isOpenTrans); } receipt.Modify(receipt.ReceiptId); receipt.Status = (int)ReceiptStatus.Receiving; _receiptBll.UpdateReceiptStatus(receipt); database.Commit(); return(Content(new JsonMessage { Success = true, Code = "1", Message = Message }.ToString())); } catch (Exception ex) { database.Rollback(); return(Content(new JsonMessage { Success = false, Code = "-1", Message = "操作失败:" + ex.Message }.ToString())); } }