/// <summary> /// 收货单明细列表(返回Json) /// </summary> /// <param name="receiptId">收货单主键</param> /// <returns></returns> public ActionResult GetReceiptItemList(string receiptId) { try { var jsonData = new { rows = _receiptBll.GetReceiptItemList(receiptId), }; return(Content(jsonData.ToJson())); } catch (Exception ex) { BaseSysLogBll.Instance.WriteLog("", OperationType.Query, "-1", "异常错误:" + ex.Message); return(null); } }
/// <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())); } }