/// <summary> /// 审核 /// </summary> /// <param name="orderNo"></param> /// <param name="errMessage"></param> /// <returns></returns> public bool Audit(string orderNo, out string errMessage) { var entity = new RepositoryFactory <SaleOrderEntity>().Repository().FindEntity("OrderNo", orderNo); if (entity == null || entity.Status != (int)OrderStatus.WaitAudit) { errMessage = string.Format("订单{0}不是待审核状态,不能审核<br>", orderNo); return(false); } if (entity.IsSuspended) { errMessage = string.Format("订单{0}已被挂起,不能操作<br>", orderNo); return(false); } var orderItems = _saleOrderBLL.GetOrderItemList(entity.OrderNo); IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { entity.Modify(entity.OrderId); entity.Status = (int)OrderStatus.WaitConfirm; bool isSuccess = _saleOrderBLL.UpdateStatus(entity, OrderStatus.WaitAudit, isOpenTrans); if (!isSuccess) { throw new Exception(string.Format("订单{0}更新状态失败<br>", orderNo)); } //foreach (var item in orderItems) //{ // bool flag = _inventoryBll.UpdateInventoryByAllocate(entity.WarehouseId, item.ProductId, entity.MerchantId, item.Qty, isOpenTrans); // if (!flag) // { // throw new Exception("更新已分配库存失败"); // } //} database.Commit(); errMessage = ""; return(true); } catch (Exception ex) { database.Rollback(); errMessage = ex.Message; return(false); } }
/// <summary> /// 订单明细列表(返回Json) /// </summary> /// <param name="orderNo">订单号</param> /// <returns></returns> public ActionResult GetOrderItemList(string orderNo) { try { var jsonData = new { rows = _orderBll.GetOrderItemList(orderNo), }; return(Content(jsonData.ToJson())); } catch (Exception ex) { BaseSysLogBll.Instance.WriteLog("", OperationType.Query, "-1", "异常错误:" + ex.Message); return(null); } }
/// <summary> /// 订单明细列表(返回Json) /// </summary> /// <param name="billNo">订单号</param> /// <returns></returns> public ActionResult GetOrderItemList(string billNo) { try { List <SaleOrderItemEntity> items = billNo.ToLower().StartsWith("so") ? _orderBll.GetOrderItemList(billNo) : _orderBll.GetOrderItemListByExpressNum(billNo); var jsonData = new { rows = items }; return(Content(jsonData.ToJson())); } catch (Exception ex) { BaseSysLogBll.Instance.WriteLog("", OperationType.Query, "-1", "异常错误:" + ex.Message); return(null); } }
/// <summary> /// /// </summary> /// <param name="orderId"></param> /// <param name="message"></param> /// <returns></returns> public bool OrderAllocate(string orderId, out string message) { var order = new RepositoryFactory <SaleOrderEntity>().Repository().FindEntity("OrderId", orderId); if (order == null) { message = string.Format("订单[{0}]数据异常", orderId); return(false); } if (order.OutStockStatus != (int)OutStockStatus.Initial) { message = string.Format("订单出库状态[{0}]不是初始状态,配货失败", order.OrderNo); return(false); } var orderItems = _orderBll.GetOrderItemList(order.OrderNo); List <PickItemEntity> picks = new List <PickItemEntity>(); foreach (SaleOrderItemEntity orderItem in orderItems) { //待分配数量 int waitAllocateQty = orderItem.Qty; //商品库存 var inventoryList = _inventoryLocationBLL.GetProductInventoryList(order.WarehouseId, orderItem.ProductId, true); foreach (var inventoryEntity in inventoryList) { //本储位拣货数量 int pickQty = 0; //当前储位可用数量 int availableQty = inventoryEntity.QtyOnHand - inventoryEntity.QtyAllocated - inventoryEntity.QtySuspense; if (availableQty >= waitAllocateQty) { pickQty = waitAllocateQty; } else { pickQty = availableQty; } var location = _locationBll.GetLocationByCode(order.WarehouseId, inventoryEntity.LocationCode); if (location == null) { continue; } waitAllocateQty -= pickQty; var pick = new PickItemEntity(); pick.Create(); pick.WarehouseId = order.WarehouseId; pick.ProductId = orderItem.ProductId; pick.LocationCode = inventoryEntity.LocationCode; pick.ZoneCode = location.AllocZone; pick.ToLocationCode = "PACK"; pick.OrderNo = order.OrderNo; pick.Qty = pickQty; picks.Add(pick); if (waitAllocateQty == 0) { break; } } if (waitAllocateQty > 0) { message = string.Format("商品[{0}]库存不足,配货失败", orderItem.ProductName); return(false); } } IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { order.Modify(order.OrderId); order.OutStockStatus = (int)OutStockStatus.Allocated; bool isSuccess = _orderBll.UpdateStatus(order, OutStockStatus.Initial, isOpenTrans); if (!isSuccess) { throw new Exception("订单状态更新失败"); } foreach (var pick in picks) { bool flag = _inventoryLocationBLL.UpdateInventoryByAllocate(pick.WarehouseId, pick.ProductId, pick.LocationCode, pick.Qty, isOpenTrans); if (flag) { database.Insert(pick, isOpenTrans); } else { throw new Exception("库存占用失败"); } } database.Commit(); message = string.Format("订单[{0}]配货成功", order.OrderNo); return(true); } catch (Exception ex) { database.Rollback(); message = string.Format("订单[{0}]配货失败:{1}", order.OrderNo, ex.Message); return(false); } }
/// <summary> /// 打包 /// </summary> /// <param name="orderNo"></param> /// <param name="packageNum"></param> /// <param name="message"></param> /// <returns></returns> public bool Package(string orderNo, int packageNum, out string message) { if (packageNum >= 99) { message = string.Format("订单[{0}]最多只能打99个包裹", orderNo); return(false); } var order = new RepositoryFactory <SaleOrderEntity>().Repository().FindEntity("OrderNo", orderNo); if (order == null) { message = string.Format("订单[{0}]数据异常", orderNo); return(false); } if (order.OutStockStatus != (int)OutStockStatus.PickFinished) { message = string.Format("订单[{0}]不是拣货完成状态,不能打包", order.OrderNo); return(false); } List <CartonEntity> cartons = new List <CartonEntity>(); for (int i = 1; i <= packageNum; i++) { CartonEntity carton = new CartonEntity(); carton.Create(); carton.CartonNum = CreateCartonNum() + i.ToString("00"); carton.WarehouseId = order.WarehouseId; carton.MerchantId = order.MerchantId; carton.OrderNo = order.OrderNo; carton.ShipTypeId = order.ShipTypeId; carton.TotalCount = packageNum; carton.CurrentNum = i; carton.Status = 0; cartons.Add(carton); } var orderItems = _orderBll.GetOrderItemList(order.OrderNo); IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { order.Modify(order.OrderId); order.OutStockStatus = (int)OutStockStatus.Packaged; bool isSuccess = _orderBll.UpdateStatus(order, OutStockStatus.PickFinished, isOpenTrans); if (!isSuccess) { throw new Exception("订单状态更新失败"); } foreach (SaleOrderItemEntity orderItem in orderItems) { bool flag = _inventoryLocationBLL.UpdateInventoryByOutStock(order.WarehouseId, InventoryLocationTransactionType.Package, orderItem.ProductId, "PACK", orderItem.Qty, isOpenTrans); if (!flag) { throw new Exception("库存扣减失败"); } } foreach (CartonEntity carton in cartons) { database.Insert(carton, isOpenTrans); _codeRuleBll.OccupyBillCode(ManageProvider.Provider.Current().UserId, CartonCodeName, isOpenTrans); } database.Commit(); message = string.Format("订单[{0}]打包完成", order.OrderNo); return(true); } catch (Exception ex) { database.Rollback(); message = string.Format("订单[{0}]打包失败:{1}", order.OrderNo, ex.Message); return(false); } }
public ActionResult GetWayBill(string orderNo, string shipTypeCode) { SaleOrderBLL saleOrderBLL = new SaleOrderBLL(); var saleOrder = saleOrderBLL.GetSaleOrder(orderNo); var saleOrderItem = saleOrderBLL.GetOrderItemList(orderNo).FirstOrDefault(); var appId = "1276314"; var appKey = "319ee1b5-d572-4eb6-b2b9-228076c48eec"; var url = "http://api.kdniao.cc/api/eorderservice"; var printServer = ExpressDockingFactory.GetKdNiaoExpressDocking(url); KdNiaoRequestData kdnrd = new KdNiaoRequestData(); kdnrd.AppKey = appKey; kdnrd.EBusinessID = appId; kdnrd.DataType = "2"; kdnrd.RequestType = "1007"; KdNiaoWaybillRequestDataContent kdnrdc = new KdNiaoWaybillRequestDataContent(); kdnrdc.Receiver = new KdNiaoAddress() { ProvinceName = saleOrder.Province, CityName = saleOrder.City, ExpAreaName = saleOrder.County, Address = saleOrder.ReceiveAddress, Name = saleOrder.ReceiveContact, Mobile = saleOrder.ReceiveCellPhone, PostCode = saleOrder.ReceiveZip }; var sendInfo = new WarehouseBLL().GetWarehouse(saleOrder.WarehouseId); var provinceCityBll = new BaseProvinceCityBll(); kdnrdc.Sender = new KdNiaoAddress() { ProvinceName = provinceCityBll.GetNameByCode(sendInfo.ProvinceId), CityName = provinceCityBll.GetNameByCode(sendInfo.CityId), ExpAreaName = provinceCityBll.GetNameByCode(sendInfo.CountyId), Address = sendInfo.Address, Name = sendInfo.Contact, Mobile = sendInfo.Phone, PostCode = sendInfo.PostalCode }; kdnrdc.Commodity = new List <KdNiaoCommodity>() { new KdNiaoCommodity() { GoodsName = saleOrderItem.ProductName, GoodsWeight = saleOrderItem.Weight.ToString(), Goodsquantity = saleOrderItem.QtyScaned.ToString(), GoodsVol = saleOrderItem.Volume.ToString() } }; kdnrdc.ShipperCode = shipTypeCode; kdnrdc.OrderCode = saleOrder.OrderNo; kdnrdc.ExpType = "1"; kdnrdc.PayType = "1"; kdnrdc.IsNotice = "1"; kdnrdc.IsReturnPrintTemplate = "1"; if (shipTypeCode == "YTO") { kdnrdc.CustomerName = "k210314881"; kdnrdc.MonthCode = "f2ar5n8b"; } kdnrd.RequestData = kdnrdc.ToJson(); kdnrd.RequestDataContent = kdnrdc; kdnrd.DataSign = Encrypt.KdNiaoSingEncrypt(kdnrd.RequestData, appKey, "UTF-8"); var kdnrp = printServer.GetWayBill(kdnrd); //if (!kdnrp.Success) //{ // return Content(kdnrp.ToJson()); //} return(Content(kdnrp.PrintTemplate)); }
/// <summary> /// /// </summary> /// <param name="orderNo"></param> /// <param name="templateId"></param> /// <param name="pageIndex"></param> /// <returns></returns> public ActionResult GetPrintContent(string orderNo, string templateId, int pageIndex) { ShipTypeTemplateEntity template = _templateBLL.GetTemplate(templateId); var order = _orderBll.Repository().FindEntity("OrderNo", orderNo); var orderItems = _orderBll.GetOrderItemList(orderNo); if (order != null && orderItems.Count > 0) { string content = template.TemplateContent; var merchant = _merchantBLL.Repository().FindEntity("MerchantId", order.MerchantId); var warehouse = _warehouseBLL.Repository().FindEntity("WarehouseId", order.WarehouseId); content = content.Replace("发件人姓名", merchant.FullName); content = content.Replace("发件人电话", merchant.Phone); content = content.Replace("发件人手机号", merchant.Phone); content = content.Replace("发件人-省", merchant.Province); content = content.Replace("发件人-市", merchant.City); content = content.Replace("发件人-区", merchant.County); content = content.Replace("发件人地址", warehouse.Address); content = content.Replace("发件人邮编", warehouse.PostalCode); content = content.Replace("收件人姓名", order.ReceiveContact); content = content.Replace("收件人电话", order.ReceivePhone); content = content.Replace("收件人手机号", order.ReceiveCellPhone); content = content.Replace("收件人-省", order.Province); content = content.Replace("收件人-市", order.City); content = content.Replace("收件人-区", order.County); content = content.Replace("收件人地址", order.ReceiveAddress); content = content.Replace("收件人邮编", order.ReceiveZip); content = content.Replace("订单编号", order.OrderNo); content = content.Replace("派件备注", order.Remark); content = content.Replace("店铺名称", merchant.FullName); if (order.OrderDate.HasValue) { content = content.Replace("发货日期", order.OrderDate.Value.ToString("yyyy-MM-dd")); } else { } template.TemplateContent = content; if (pageIndex > 0) { Match match = Regex.Match(template.TemplateContent, @"LODOP\.PRINT_INITA.+?\);\r\n"); if (match.Success) { template.TemplateContent = template.TemplateContent.Replace(match.Groups[0].Value, ""); } match = Regex.Match(template.TemplateContent, @"LODOP\.SET_PRINT_PAGESIZE.+?\);\r\n"); if (match.Success) { template.TemplateContent = template.TemplateContent.Replace(match.Groups[0].Value, ""); } } } return(Content(template.ToJson())); }