Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
 /// <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);
     }
 }
Exemplo n.º 3
0
 /// <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);
     }
 }
Exemplo n.º 4
0
        /// <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);
            }
        }
Exemplo n.º 5
0
        /// <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);
            }
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        /// <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()));
        }