Пример #1
0
        /// <summary>
        /// 订单导入
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="dataResult"></param>
        /// <param name="errMessage"></param>
        /// <param name="importFile"></param>
        /// <returns></returns>
        public bool ImportOrder(SaleOrderImportFileEntity importFile, DataTable dt, out DataTable dataResult,
                                out string errMessage)
        {
            string userId = ManageProvider.Provider.Current().UserId;

            //构造导入返回结果表
            DataTable resultTable = new DataTable("Result");

            resultTable.Columns.Add("rowid", typeof(string));  //行号
            resultTable.Columns.Add("locate", typeof(string)); //位置
            resultTable.Columns.Add("reason", typeof(string)); //原因
            errMessage = string.Empty;
            bool isSuccess = false;

            if (dt != null && dt.Rows.Count > 0)
            {
                IDatabase database = DataFactory.Database();
                try
                {
                    List <SaleOrderImportItemEntity> lstEntities = new List <SaleOrderImportItemEntity>();
                    foreach (DataRow item in dt.Rows)
                    {
                        var importEntity = new SaleOrderImportItemEntity();
                        importEntity.Create();
                        //
                        importEntity.FileId      = importFile.FileId;
                        importEntity.ProductCode = item["商品编码"].ToString();
                        if (string.IsNullOrWhiteSpace(importEntity.ProductCode))
                        {
                            throw new Exception("商品编码不能为空");
                        }
                        importEntity.SourceOrderNo = item["外部单号"].ToString();
                        if (string.IsNullOrWhiteSpace(importEntity.SourceOrderNo))
                        {
                            throw new Exception("外部订单号不能为空");
                        }
                        //string OrderDate = item["制单日期"].ToString();
                        importEntity.OrderDate        = DateTime.Now;
                        importEntity.ReceiveContact   = item["联系人"].ToString();
                        importEntity.ReceivePhone     = item["固定电话"].ToString();
                        importEntity.ReceiveCellPhone = item["联系电话"].ToString();
                        importEntity.ReceiveZip       = item["邮编"].ToString();
                        importEntity.ExpressNum       = item["快递单号"].ToString();
                        importEntity.Province         = item["所在省"].ToString();
                        importEntity.City             = item["所在市"].ToString();
                        importEntity.County           = item["所在县/区"].ToString();
                        importEntity.ReceiveAddress   = item["详细地址"].ToString();
                        importEntity.Qty          = int.Parse(item["数量"].ToString());
                        importEntity.SellerNote   = item["卖家留言"].ToString();
                        importEntity.BuyerNote    = item["买家留言"].ToString();
                        importEntity.ShipTypeName = item["物流方式"].ToString();
                        importEntity.Remark       = item["备注"].ToString();

                        bool flag = _saleOrderBLL.IsExistSourceOrderNo(importEntity.SourceOrderNo);
                        if (flag)
                        {
                            throw new Exception(string.Format("外部单号{0}已存在,请作废后重新导入", importEntity.SourceOrderNo));
                        }

                        lstEntities.Add(importEntity);
                    }

                    lstEntities = lstEntities.OrderBy(a => a.SourceOrderNo).ToList();

                    var shipTypeList = _shipTypeBLL.GetList();

                    DbTransaction isOpenTrans = database.BeginTrans();

                    string sourceOrderNo = string.Empty;
                    string orderNo       = string.Empty;
                    List <SaleOrderEntity>     orderEntities     = new List <SaleOrderEntity>();
                    List <SaleOrderItemEntity> orderItemEntities = new List <SaleOrderItemEntity>();
                    foreach (SaleOrderImportItemEntity orderImportEntity in lstEntities)
                    {
                        var shipType = shipTypeList.Find(a => a.ShipTypeName == orderImportEntity.ShipTypeName);
                        if (shipType == null)
                        {
                            throw new Exception(string.Format("物流方式{0}不存在", orderImportEntity.ShipTypeName));
                        }

                        SaleOrderEntity orderEntity = new SaleOrderEntity();
                        var             select      = orderEntities.Where(i => i.ReceiveContact == orderImportEntity.ReceiveContact &&
                                                                          i.ReceivePhone == orderImportEntity.ReceivePhone
                                                                          &&
                                                                          i.ReceiveCellPhone == orderImportEntity.ReceiveCellPhone &&
                                                                          i.ReceiveZip == orderImportEntity.ReceiveZip &&
                                                                          i.Province == orderImportEntity.Province &&
                                                                          i.City == orderImportEntity.City &&
                                                                          i.County == orderImportEntity.County &&
                                                                          i.ReceiveAddress == orderImportEntity.ReceiveAddress &&
                                                                          i.WarehouseId == importFile.WarehouseId &&
                                                                          i.ShipTypeId == shipType.ShipTypeId &&
                                                                          i.ExpressNum == orderImportEntity.ExpressNum &&
                                                                          i.SellerNote == orderImportEntity.SellerNote &&
                                                                          i.BuyerNote == orderImportEntity.BuyerNote &&
                                                                          i.Remark == orderImportEntity.Remark);
                        if (select.Any())
                        {
                            orderEntity = select.First();
                            var otherSourceOrderNos = orderEntity.SourceOrderNo.Split(',').ToList();
                            if (!otherSourceOrderNos.Contains(orderImportEntity.SourceOrderNo))
                            {
                                otherSourceOrderNos.Add(orderImportEntity.SourceOrderNo);
                            }
                            orderEntity.SourceOrderNo = String.Join(",", otherSourceOrderNos.ToArray());
                        }
                        else
                        {
                            orderEntity.Create();
                            orderEntity.OrderId          = orderImportEntity.ItemId;
                            orderEntity.OrderNo          = _codeRuleBll.GetBillCode(userId, SaleOrderCodeName);
                            orderEntity.SourceOrderNo    = orderImportEntity.SourceOrderNo;
                            orderEntity.OrderDate        = DateTime.Now;
                            orderEntity.WarehouseId      = importFile.WarehouseId;
                            orderEntity.MerchantId       = importFile.MerchantId;
                            orderEntity.MerchantMallId   = importFile.MerchantMallId;
                            orderEntity.ShipTypeId       = shipType.ShipTypeId;
                            orderEntity.Province         = orderImportEntity.Province;
                            orderEntity.City             = orderImportEntity.City;
                            orderEntity.County           = orderImportEntity.County;
                            orderEntity.ReceiveAddress   = orderImportEntity.ReceiveAddress;
                            orderEntity.ReceiveContact   = orderImportEntity.ReceiveContact;
                            orderEntity.ReceivePhone     = orderImportEntity.ReceivePhone;
                            orderEntity.ReceiveCellPhone = orderImportEntity.ReceiveCellPhone;
                            orderEntity.ReceiveZip       = orderImportEntity.ReceiveZip;
                            orderEntity.SellerNote       = orderImportEntity.SellerNote;
                            orderEntity.BuyerNote        = orderImportEntity.BuyerNote;
                            orderEntity.ExpressNum       = orderImportEntity.ExpressNum;
                            orderEntity.City             = orderImportEntity.City;
                            orderEntity.Remark           = orderImportEntity.Remark;
                            orderEntities.Add(orderEntity);

                            _codeRuleBll.OccupyBillCode(ManageProvider.Provider.Current().UserId, SaleOrderCodeName,
                                                        isOpenTrans);

                            sourceOrderNo = orderImportEntity.SourceOrderNo;
                            orderNo       = orderEntity.OrderNo;
                        }

                        var product = _productBLL.GetProductByCode(orderImportEntity.ProductCode);
                        if (product == null)
                        {
                            throw new Exception(string.Format("商品编号{0}不存在", orderImportEntity.ProductCode));
                        }

                        var saleOrderItem = new SaleOrderItemEntity();
                        saleOrderItem.Create();
                        saleOrderItem.OrderId       = orderEntity.OrderId;
                        saleOrderItem.OrderNo       = orderNo;
                        saleOrderItem.ProductId     = product.ProductId;
                        saleOrderItem.Code          = product.Code;
                        saleOrderItem.ProductName   = product.ProductName;
                        saleOrderItem.Weight        = product.Weight;
                        saleOrderItem.Volume        = product.Volume;
                        saleOrderItem.Specification = product.Specification;
                        saleOrderItem.BaseUnit      = product.BaseUnit;
                        saleOrderItem.BarCode       = product.BarCode;
                        saleOrderItem.Price         = product.Price;
                        saleOrderItem.Qty           = orderImportEntity.Qty;

                        orderItemEntities.Add(saleOrderItem);
                    }


                    database.Insert(importFile);
                    foreach (SaleOrderImportItemEntity orderImportEntity in lstEntities)
                    {
                        database.Insert(orderImportEntity, isOpenTrans);
                    }

                    foreach (SaleOrderEntity orderImportEntity in orderEntities)
                    {
                        database.Insert(orderImportEntity, isOpenTrans);
                    }

                    foreach (SaleOrderItemEntity orderImportEntity in orderItemEntities)
                    {
                        database.Insert(orderImportEntity, isOpenTrans);
                    }

                    database.Commit();
                    isSuccess = true;
                }
                catch (Exception ex)
                {
                    database.Rollback();
                    BaseSysLogBll.Instance.WriteLog("", OperationType.Add, "-1", "异常错误:" + ex.Message);
                    isSuccess  = false;
                    errMessage = ex.Message;
                }
            }
            dataResult = resultTable;
            return(isSuccess);
        }
Пример #2
0
        /// <summary>
        /// 提交订单表单(新增、编辑)
        /// </summary>
        /// <param name="orderId">订单主键</param>
        /// <param name="entity">订单实体</param>
        /// <param name="saleOrderItemJson">订单明细</param>
        /// <returns></returns>
        public ActionResult SubmitOrderForm(string orderId, SaleOrderEntity entity, string saleOrderItemJson)
        {
            SaleOrderEntity oldEntity = null;
            IDatabase       database  = DataFactory.Database();

            if (!string.IsNullOrEmpty(orderId))
            {
                oldEntity = database.FindEntity <SaleOrderEntity>("OrderId", orderId);
            }

            if (oldEntity != null && oldEntity.Status != (int)OrderStatus.Initial && oldEntity.Status != (int)OrderStatus.WaitAudit)
            {
                return(Content(new JsonMessage {
                    Success = false, Code = "-1", Message = "操作失败:只有初始和待审核订单才能修改"
                }.ToString()));
            }

            DbTransaction isOpenTrans = database.BeginTrans();

            try
            {
                string message = orderId == "" ? "新增成功。" : "修改成功。";
                if (oldEntity != null)
                {
                    database.Delete <SaleOrderEntity>("OrderId", oldEntity.OrderId, isOpenTrans);
                    database.Delete <SaleOrderItemEntity>("OrderId", oldEntity.OrderId, isOpenTrans);
                    entity.Create();
                    entity.OrderDate = oldEntity.OrderDate;
                    entity.Status    = oldEntity.Status;
                    entity.Modify(orderId);
                    database.Insert(entity, isOpenTrans);
                }
                else
                {
                    entity.Create();
                    entity.OrderDate = DateTime.Now;
                    database.Insert(entity, isOpenTrans);
                    _codeRuleBll.OccupyBillCode(ManageProvider.Provider.Current().UserId, SaleOrderCodeName, isOpenTrans);
                }
                List <SaleOrderItemViewModel> orderItemList = saleOrderItemJson.JonsToList <SaleOrderItemViewModel>();
                foreach (SaleOrderItemViewModel item in orderItemList)
                {
                    if (!string.IsNullOrEmpty(item.ProductId))
                    {
                        ProductEntity product   = _productBll.GetProduct(item.ProductId);
                        var           orderItem = new SaleOrderItemEntity();
                        orderItem.Create();
                        orderItem.OrderId       = entity.OrderId;
                        orderItem.OrderNo       = entity.OrderNo;
                        orderItem.ProductId     = product.ProductId;
                        orderItem.Code          = product.Code;
                        orderItem.ProductName   = product.ProductName;
                        orderItem.Volume        = product.Volume;
                        orderItem.Weight        = product.Weight;
                        orderItem.BarCode       = product.BarCode;
                        orderItem.BaseUnit      = product.BaseUnit;
                        orderItem.Price         = product.Price;
                        orderItem.Specification = product.Specification;
                        orderItem.Qty           = int.Parse(item.Qty);
                        database.Insert(orderItem, isOpenTrans);
                    }
                }
                database.Commit();
                if (oldEntity == null)
                {
                    try
                    {
                        _orderBll.ExecSPOrderAllocInventory();
                    }
                    catch
                    {
                    }
                }
                return(Content(new JsonMessage {
                    Success = true, Code = entity.OrderId, Message = message
                }.ToString()));
            }
            catch (Exception ex)
            {
                database.Rollback();
                return(Content(new JsonMessage {
                    Success = false, Code = "-1", Message = "操作失败:" + ex.Message
                }.ToString()));
            }
        }
Пример #3
0
        public ActionResult SubmitSplitOrder(string splitOrderNo, SaleOrderEntity entity, string saleOrderItemJson)
        {
            SaleOrderEntity oldEntity = null;
            IDatabase       database  = DataFactory.Database();

            try
            {
                oldEntity = database.FindEntity <SaleOrderEntity>("OrderId", entity.OrderId);

                if (oldEntity != null && oldEntity.Status != (int)OrderStatus.OutOfStock && oldEntity.Status != (int)OrderStatus.Initial && oldEntity.Status != (int)OrderStatus.WaitAudit)
                {
                    return(Content(new JsonMessage {
                        Success = false, Code = "-1", Message = "操作失败:只有初始或缺货或待审核订单才能拆分订单"
                    }.ToString()));
                }

                List <SplitSaleOrderItemViewModel> splitItemList = saleOrderItemJson.JonsToList <SplitSaleOrderItemViewModel>();
                var orderItemList = _orderBll.GetOrderItemListByOrderId(oldEntity.OrderId);
                if (splitItemList.Sum(i => int.Parse(i.SplitQty)) == orderItemList.Sum(i => i.Qty))
                {
                    return(Content(new JsonMessage {
                        Success = false, Code = "-1", Message = "操作失败:不能将所有商品都拆分出去"
                    }.ToString()));
                }
                foreach (var item in splitItemList)
                {
                    var whereItem = orderItemList.Where(i => i.ItemId == item.ItemId);
                    if (whereItem.Count() > 0)
                    {
                        if (int.Parse(item.SplitQty) > whereItem.First().Qty)
                        {
                            return(Content(new JsonMessage {
                                Success = false, Code = "-1", Message = string.Format("操作失败:商品[{0}]拆分数据数量{1}大于可拆分数量{2}", whereItem.First().ProductId, item.SplitQty, whereItem.First().Qty)
                            }.ToString()));
                        }
                    }
                    else
                    {
                        return(Content(new JsonMessage {
                            Success = false, Code = "-1", Message = "操作失败:商品明细数据不存在,请刷新重试"
                        }.ToString()));
                    }
                }

                DbTransaction isOpenTrans = database.BeginTrans();
                try
                {
                    string message = "拆分订单成功。";

                    entity.Create();
                    entity.OrderNo   = splitOrderNo;
                    entity.OrderDate = DateTime.Now;
                    database.Insert(entity, isOpenTrans);
                    _codeRuleBll.OccupyBillCode(ManageProvider.Provider.Current().UserId, SaleOrderCodeName, isOpenTrans);

                    foreach (var item in splitItemList)
                    {
                        var oldItem   = orderItemList.Where(i => i.ItemId == item.ItemId).First();
                        var orderItem = new SaleOrderItemEntity();
                        orderItem.Create();
                        orderItem.OrderId       = entity.OrderId;
                        orderItem.OrderNo       = entity.OrderNo;
                        orderItem.ProductId     = oldItem.ProductId;
                        orderItem.Code          = oldItem.Code;
                        orderItem.ProductName   = oldItem.ProductName;
                        orderItem.Volume        = oldItem.Volume;
                        orderItem.Weight        = oldItem.Weight;
                        orderItem.BarCode       = oldItem.BarCode;
                        orderItem.BaseUnit      = oldItem.BaseUnit;
                        orderItem.Price         = oldItem.Price;
                        orderItem.Specification = oldItem.Specification;
                        orderItem.Qty           = int.Parse(item.SplitQty);
                        database.Insert(orderItem, isOpenTrans);

                        database.Delete <SaleOrderItemEntity>("ItemId", oldItem.ItemId, isOpenTrans);
                        if (int.Parse(item.SplitQty) != oldItem.Qty)
                        {
                            var oldOrderItem = new SaleOrderItemEntity();
                            oldOrderItem.Create();
                            oldOrderItem.OrderId       = oldEntity.OrderId;
                            oldOrderItem.OrderNo       = oldEntity.OrderNo;
                            oldOrderItem.ProductId     = oldItem.ProductId;
                            oldOrderItem.Code          = oldItem.Code;
                            oldOrderItem.ProductName   = oldItem.ProductName;
                            oldOrderItem.Volume        = oldItem.Volume;
                            oldOrderItem.Weight        = oldItem.Weight;
                            oldOrderItem.BarCode       = oldItem.BarCode;
                            oldOrderItem.BaseUnit      = oldItem.BaseUnit;
                            oldOrderItem.Price         = oldItem.Price;
                            oldOrderItem.Specification = oldItem.Specification;
                            oldOrderItem.Qty           = oldItem.Qty - int.Parse(item.SplitQty);
                            database.Insert(oldOrderItem, isOpenTrans);
                        }
                    }

                    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()));
                }
            }
            catch (Exception ex)
            {
                return(Content(new JsonMessage {
                    Success = false, Code = "-1", Message = "操作失败:" + ex.Message
                }.ToString()));
            }
        }
Пример #4
0
        public ActionResult SubmitMergeOrder(string orderIds, string mergeOrderNo, SaleOrderEntity entity)
        {
            IDatabase database = DataFactory.Database();

            try
            {
                string[] aryOrderId    = orderIds.Split(',');
                var      sourceOrderNo = string.Empty;
                List <SaleOrderEntity>     orderList = new List <SaleOrderEntity>();
                List <SaleOrderItemEntity> itemList  = new List <SaleOrderItemEntity>();
                foreach (var orderId in aryOrderId)
                {
                    SaleOrderEntity oldEntity = database.FindEntity <SaleOrderEntity>("OrderId", orderId);

                    if (oldEntity != null && oldEntity.Status != (int)OrderStatus.OutOfStock && oldEntity.Status != (int)OrderStatus.Initial && oldEntity.Status != (int)OrderStatus.WaitAudit)
                    {
                        return(Content(new JsonMessage {
                            Success = false, Code = "-1", Message = "操作失败:只有初始或缺货或待审核订单才能合并订单"
                        }.ToString()));
                    }
                    orderList.Add(entity);
                    var orderItemList = _orderBll.GetOrderItemListByOrderId(oldEntity.OrderId);
                    foreach (var item in orderItemList)
                    {
                        itemList.Add(item);
                    }
                }

                //判断是否一致,不一致则不通过
                var group = orderList.GroupBy(i => new { Province = i.Province, City = i.City, County = i.County, ReceiveAddress = i.ReceiveAddress, ReceiveContact = i.ReceiveContact, ReceiveCellPhone = i.ReceiveCellPhone, ReceivePhone = i.ReceivePhone });
                if (group.Count() > 1)
                {
                    return(Content(new JsonMessage {
                        Success = false, Code = "-1", Message = "操作失败:不符合订单合并条件( 省/市/区/地址/手机/电话/联系人相同)"
                    }.ToString()));
                }
                DbTransaction isOpenTrans = database.BeginTrans();
                try
                {
                    string message = "合并订单成功。";

                    entity.Create();
                    entity.OrderNo   = mergeOrderNo;
                    entity.OrderDate = DateTime.Now;
                    database.Insert(entity, isOpenTrans);
                    _codeRuleBll.OccupyBillCode(ManageProvider.Provider.Current().UserId, SaleOrderCodeName, isOpenTrans);

                    foreach (var item in itemList)
                    {
                        var orderItem = new SaleOrderItemEntity();
                        orderItem.Create();
                        orderItem.OrderId       = entity.OrderId;
                        orderItem.OrderNo       = entity.OrderNo;
                        orderItem.ProductId     = item.ProductId;
                        orderItem.Code          = item.Code;
                        orderItem.ProductName   = item.ProductName;
                        orderItem.Volume        = item.Volume;
                        orderItem.Weight        = item.Weight;
                        orderItem.BarCode       = item.BarCode;
                        orderItem.BaseUnit      = item.BaseUnit;
                        orderItem.Price         = item.Price;
                        orderItem.Specification = item.Specification;
                        orderItem.Qty           = item.Qty;
                        database.Insert(orderItem, isOpenTrans);
                    }

                    foreach (var orderId in aryOrderId)
                    {
                        database.Delete <SaleOrderEntity>("OrderId", orderId, isOpenTrans);
                        database.Delete <SaleOrderItemEntity>("OrderId", orderId, isOpenTrans);
                    }

                    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()));
                }
            }
            catch (Exception ex)
            {
                return(Content(new JsonMessage {
                    Success = false, Code = "-1", Message = "操作失败:" + ex.Message
                }.ToString()));
            }
        }