Exemple #1
0
        /// <summary>
        /// 新增销售订单
        /// </summary>
        /// <returns></returns>
        public ActionResult Create()
        {
            string                  CompanyID = WebUtil.GetFormValue <string>("CompanyID", string.Empty);
            SaleOrderEntity         entity    = WebUtil.GetFormObject <SaleOrderEntity>("Entity");
            List <SaleDetailEntity> list      = WebUtil.GetFormObject <List <SaleDetailEntity> >("List");

            entity.SnNum        = ConvertHelper.NewGuid();
            entity.AuditeStatus = (int)EAudite.Wait;
            entity.Status       = (int)EOrderStatus.CreateOrder;
            entity.IsDelete     = (int)EIsDelete.NotDelete;
            entity.CreateTime   = DateTime.Now;
            entity.CompanyID    = entity.CompanyID.IsEmpty() ? CompanyID : entity.CompanyID;

            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            string     returnValue = bill.Create(entity, list);
            DataResult result      = new DataResult();

            if (EnumHelper.GetEnumDesc <EReturnStatus>(EReturnStatus.Success) == returnValue)
            {
                result.Code    = (int)EResponseCode.Success;
                result.Message = "销售订单创建成功";
            }
            else
            {
                result.Code    = (int)EResponseCode.Exception;
                result.Message = "销售订单创建失败";
            }
            return(Content(JsonHelper.SerializeObject(result)));
        }
Exemple #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="billNo"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool ScanBillNo(string billNo, out string message)
        {
            SaleOrderEntity orderEntity = billNo.ToLower().StartsWith("so")
                ? _orderBll.GetSaleOrder(billNo)
                : _orderBll.GetSaleOrderByExpressNum(billNo);

            if (orderEntity == null)
            {
                message = string.Format("无效的物流单号或订单号[{0}]", billNo);
                return(false);
            }

            if (string.IsNullOrWhiteSpace(orderEntity.ExpressNum))
            {
                message = string.Format("订单[{0}]没有匹配物流单号不能出库校验", orderEntity.OrderNo);
                return(false);
            }

            if (orderEntity.Status != (int)OrderStatus.WaitOutStock)
            {
                message = string.Format("订单[{0}]不是待拣货状态,不能出库校验", orderEntity.OrderNo);
                return(false);
            }

            message = "";
            return(true);
        }
        public ActionResult Add()
        {
            SaleOrderEntity entity    = WebUtil.GetFormObject <SaleOrderEntity>("Entity");
            string          OrderTime = WebUtil.GetFormValue <string>("OrderTime", string.Empty);
            string          SendDate  = WebUtil.GetFormValue <string>("SendDate", string.Empty);

            if (!OrderTime.IsEmpty())
            {
                entity.OrderTime = ConvertHelper.ToType <DateTime>(OrderTime);
            }
            if (!SendDate.IsEmpty())
            {
                entity.SendDate = ConvertHelper.ToType <DateTime>(SendDate);
            }
            List <SaleDetailEntity> listDetail = Session[SessionKey.SESSION_SALEORDER_DETAIL] as List <SaleDetailEntity>;
            string CompanyID = this.CompanyID;

            if (listDetail.IsNullOrEmpty())
            {
                DataResult <string> dataResult = new DataResult <string>()
                {
                    Code = (int)EResponseCode.Exception, Message = "请选择要入库的产品"
                };
                return(Content(JsonHelper.SerializeObject(dataResult)));
            }
            string ApiName = SaleApiName.SaleApiName_Add;

            if (!entity.SnNum.IsEmpty())
            {
                ApiName = SaleApiName.SaleApiName_Edit;
            }

            entity.CreateUser = this.LoginUser.UserNum;
            entity.CreateTime = DateTime.Now;
            entity.IsDelete   = (int)EIsDelete.NotDelete;
            entity.Status     = (int)EAudite.Wait;

            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add("CompanyID", CompanyID);
            dic.Add("Entity", JsonConvert.SerializeObject(entity));
            dic.Add("List", JsonConvert.SerializeObject(listDetail));

            ITopClient client = new TopClientDefault();
            string     result = client.Execute(ApiName, dic);

            return(Content(result));
        }
Exemple #4
0
        /// <summary>
        /// 根据销售订单转换为财务账务记录
        /// 1000: 账务记录生成成功
        /// 1001:销售订单不存在
        /// 1002:已经生成账务记录,不要重复操作
        /// 1003:账务记录生成异常
        /// </summary>
        /// <param name="SnNum"></param>
        /// <returns></returns>
        public string ToFiance(string SnNum)
        {
            SaleOrderEntity entity = new SaleOrderEntity();

            entity.SnNum = SnNum;
            entity       = this.GetOrder(entity);
            if (entity == null)
            {
                return("1001");
            }
            if (entity.AuditeStatus == (int)EBool.Yes)
            {
                return("1002");
            }
            FinanceBillEntity bill = new FinanceBillEntity();

            bill.SnNum       = ConvertHelper.NewGuid();
            bill.CateNum     = "";
            bill.CateName    = "";
            bill.BillType    = (int)EFinanceType.BillReceivable;
            bill.FromNum     = entity.CusSnNum;
            bill.FromName    = entity.CusName;
            bill.ToName      = "";
            bill.ToNum       = "公司";
            bill.Amount      = entity.Amount;
            bill.Title       = string.Format("[销售][{0}]{1}", entity.CreateTime.ToString("yyyy-MM-dd"), entity.CusName);
            bill.ContractSn  = entity.SnNum;
            bill.ContractNum = entity.OrderNum;
            bill.Status      = (int)EAudite.Wait;
            bill.IsDelete    = (int)EIsDelete.NotDelete;
            bill.CreateTime  = DateTime.Now;
            bill.CreateUser  = entity.CreateUser;
            bill.Remark      = string.Empty;
            bill.CompanyID   = this.CompanyID;

            FinanceBillProvider provider = new FinanceBillProvider(this.CompanyID);
            int line = provider.Add(bill);

            if (line > 0)
            {
                entity.AuditeStatus = (int)EBool.Yes;
                entity.IncludeAuditeStatus(true);
                entity.Where(a => a.SnNum == entity.SnNum);
                line += this.SaleOrder.Update(entity);
            }
            return(line > 0 ? "1000" : "1003");
        }
Exemple #5
0
        /// <summary>
        /// 查询销售订单
        /// </summary>
        /// <returns></returns>
        public ActionResult GetOrder()
        {
            string          SnNum     = WebUtil.GetFormValue <string>("SnNum");
            string          CompanyID = WebUtil.GetFormValue <string>("CompanyID", string.Empty);
            SaleOrderEntity entity    = new SaleOrderEntity();

            entity.SnNum     = SnNum;
            entity.CompanyID = CompanyID;
            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            SaleOrderEntity result = bill.GetOrder(entity);

            DataResult <SaleOrderEntity> dataResult = new DataResult <SaleOrderEntity>();

            dataResult.Code    = (int)EResponseCode.Success;
            dataResult.Message = "响应成功";
            dataResult.Result  = result;
            return(Content(JsonHelper.SerializeObject(dataResult)));
        }
Exemple #6
0
        /// <summary>
        /// 审核销售订单
        /// </summary>
        /// <returns></returns>
        public ActionResult Audite()
        {
            string SnNum         = WebUtil.GetFormValue <string>("SnNum");
            string CompanyID     = WebUtil.GetFormValue <string>("CompanyID", string.Empty);
            int    Status        = WebUtil.GetFormValue <int>("Status", (int)EAudite.NotPass);
            string AuditUser     = WebUtil.GetFormValue <string>("AuditUser", string.Empty);
            string Reason        = WebUtil.GetFormValue <string>("Reason", string.Empty);
            int    OperateType   = WebUtil.GetFormValue <int>("OperateType", 0);
            string EquipmentNum  = WebUtil.GetFormValue <string>("EquipmentNum");
            string EquipmentCode = WebUtil.GetFormValue <string>("EquipmentCode");
            string Remark        = WebUtil.GetFormValue <string>("Remark");

            SaleOrderEntity entity = new SaleOrderEntity();

            entity.SnNum        = SnNum;
            entity.CompanyID    = CompanyID;
            entity.Status       = Status;
            entity.AuditeStatus = Status;
            entity.Reason       = Reason;
            entity.Remark       = Remark;

            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            string     returnValue = bill.Audite(entity);
            DataResult result      = new DataResult();

            if ("1000" == returnValue)
            {
                result.Code    = (int)EResponseCode.Success;
                result.Message = "操作成功";
            }
            else if ("1001" == returnValue)
            {
                result.Code    = (int)EResponseCode.Exception;
                result.Message = "销售订单不存在";
            }
            else if ("1002" == returnValue)
            {
                result.Code    = (int)EResponseCode.Exception;
                result.Message = "销售订单已经审核";
            }
            return(Content(JsonHelper.SerializeObject(result)));
        }
Exemple #7
0
        /// <summary>
        /// 编辑销售订单
        /// </summary>
        /// <returns></returns>
        public ActionResult Edit()
        {
            string                  CompanyID = WebUtil.GetFormValue <string>("CompanyID", string.Empty);
            SaleOrderEntity         entity    = WebUtil.GetFormObject <SaleOrderEntity>("Entity");
            List <SaleDetailEntity> list      = WebUtil.GetFormObject <List <SaleDetailEntity> >("List");

            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            string     returnValue = bill.EditOrder(entity, list);
            DataResult result      = new DataResult();

            if (EnumHelper.GetEnumDesc <EReturnStatus>(EReturnStatus.Success) == returnValue)
            {
                result.Code    = (int)EResponseCode.Success;
                result.Message = "销售订单编辑成功";
            }
            else
            {
                result.Code    = (int)EResponseCode.Exception;
                result.Message = "销售订单编辑失败";
            }
            return(Content(JsonHelper.SerializeObject(result)));
        }
Exemple #8
0
        public ActionResult Detail()
        {
            string SnNum = WebUtil.GetQueryStringValue <string>("SnNum");

            SaleOrderEntity entity = null;

            if (!SnNum.IsEmpty())
            {
                ITopClient client = new TopClientDefault();
                Dictionary <string, string> dic = new Dictionary <string, string>();

                dic.Add("CompanyID", CompanyID);
                dic.Add("SnNum", SnNum);

                string result = client.Execute(SaleApiName.SaleApiName_GetOrder, dic);
                DataResult <SaleOrderEntity> dataResult = JsonConvert.DeserializeObject <DataResult <SaleOrderEntity> >(result);
                entity = dataResult.Result;
            }
            entity         = entity.IsNull() ? new SaleOrderEntity() : entity;
            ViewBag.Entity = entity;
            return(View());
        }
Exemple #9
0
        public ActionResult Add()
        {
            string SnNum = WebUtil.GetQueryStringValue <string>("SnNum");

            SaleOrderEntity         entity = null;
            List <SaleDetailEntity> list   = null;

            if (!SnNum.IsEmpty())
            {
                ITopClient client = new TopClientDefault();
                Dictionary <string, string> dic = new Dictionary <string, string>();

                dic.Add("CompanyID", CompanyID);
                dic.Add("SnNum", SnNum);

                string result = client.Execute(SaleApiName.SaleApiName_GetOrder, dic);
                DataResult <SaleOrderEntity> dataResult = JsonConvert.DeserializeObject <DataResult <SaleOrderEntity> >(result);
                entity = dataResult.Result;

                result = client.Execute(SaleApiName.SaleApiName_GetDetail, dic);
                DataResult <List <SaleDetailEntity> > dataList = JsonConvert.DeserializeObject <DataResult <List <SaleDetailEntity> > >(result);
                list = dataList.Result;
            }
            if (entity == null)
            {
                entity                = new SaleOrderEntity();
                entity.CreateUser     = this.LoginUser.UserNum;
                entity.CreateUserName = this.LoginUser.UserName;
                entity.OrderTime      = DateTime.Now;
            }
            ViewBag.Entity = entity;

            list = list.IsNull() ? new List <SaleDetailEntity>() : list;
            Session[SessionKey.SESSION_SALEORDER_DETAIL] = list;

            entity.OrderType  = entity.OrderType == 0 ? (int)EOrderType.Really : entity.OrderType;
            ViewBag.OrderType = EnumHelper.GetOptions <EOrderType>(entity.OrderType);
            return(View());
        }
Exemple #10
0
        /// <summary>
        /// 取消销售订单
        /// </summary>
        /// <returns></returns>
        public ActionResult Cancel()
        {
            string          SnNum     = WebUtil.GetFormValue <string>("SnNum");
            string          CompanyID = WebUtil.GetFormValue <string>("CompanyID", string.Empty);
            SaleOrderEntity entity    = new SaleOrderEntity();

            entity.SnNum     = SnNum;
            entity.CompanyID = CompanyID;
            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            string     returnValue = bill.Cancel(entity);
            DataResult result      = new DataResult();

            if (EnumHelper.GetEnumDesc <EReturnStatus>(EReturnStatus.Success) == returnValue)
            {
                result.Code    = (int)EResponseCode.Success;
                result.Message = "操作成功";
            }
            else
            {
                result.Code    = (int)EResponseCode.Exception;
                result.Message = "操作失败";
            }
            return(Content(JsonHelper.SerializeObject(result)));
        }
Exemple #11
0
        /// <summary>
        /// 查询销售订单分页列表
        /// </summary>
        /// <returns></returns>
        public ActionResult GetOrderList()
        {
            string CompanyID = WebUtil.GetFormValue <string>("CompanyID");
            int    PageIndex = WebUtil.GetFormValue <int>("PageIndex", 1);
            int    PageSize  = WebUtil.GetFormValue <int>("PageSize", 10);

            string OrderNum  = WebUtil.GetFormValue <string>("OrderNum");
            int    OrderType = WebUtil.GetFormValue <int>("OrderType", 0);

            string CusNum  = WebUtil.GetFormValue <string>("CusNum");
            string CusName = WebUtil.GetFormValue <string>("CusName");
            string Contact = WebUtil.GetFormValue <string>("Contact");
            string Phone   = WebUtil.GetFormValue <string>("Phone");

            string ContractOrder = WebUtil.GetFormValue <string>("ContractOrder");
            string ContractSn    = WebUtil.GetFormValue <string>("ContractSn");

            int    AuditeStatus = WebUtil.GetFormValue <int>("AuditeStatus", -1);
            int    Status       = WebUtil.GetFormValue <int>("Status", 0);
            string BeginTime    = WebUtil.GetFormValue <string>("BeginTime");
            string EndTime      = WebUtil.GetFormValue <string>("EndTime");

            string BeginOrderTime = WebUtil.GetFormValue <string>("BeginOrderTime");
            string EndOrderTime   = WebUtil.GetFormValue <string>("EndOrderTime");

            string BeginSendTime = WebUtil.GetFormValue <string>("BeginSendTime");
            string EndSendTime   = WebUtil.GetFormValue <string>("EndSendTime");

            Bill <SaleOrderEntity, SaleDetailEntity> bill = new SaleOrder(CompanyID);
            SaleOrderEntity entity = new SaleOrderEntity();

            entity.CompanyID      = CompanyID;
            entity.OrderNum       = OrderNum;
            entity.OrderType      = OrderType;
            entity.CusNum         = CusNum;
            entity.CusName        = CusName;
            entity.Contact        = Contact;
            entity.Phone          = Phone;
            entity.ContractOrder  = ContractOrder;
            entity.ContractSn     = ContractSn;
            entity.AuditeStatus   = AuditeStatus;
            entity.Status         = Status;
            entity.BeginTime      = BeginTime;
            entity.EndTime        = EndTime;
            entity.BeginOrderTime = BeginOrderTime;
            entity.EndOrderTime   = EndOrderTime;
            entity.BeginSendTime  = BeginSendTime;
            entity.EndSendTime    = EndSendTime;

            PageInfo pageInfo = new PageInfo()
            {
                PageIndex = PageIndex, PageSize = PageSize
            };

            List <SaleOrderEntity>           listResult = bill.GetList(entity, ref pageInfo);
            DataListResult <SaleOrderEntity> dataResult = new DataListResult <SaleOrderEntity>()
            {
                Code     = (int)EResponseCode.Success,
                Message  = "响应成功",
                Result   = listResult,
                PageInfo = pageInfo
            };

            return(Content(JsonHelper.SerializeObject(dataResult)));
        }
        /// <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);
        }
Exemple #13
0
        /// <summary>
        /// 根据销售订单转换为出库单
        /// </summary>
        /// <param name="SnNum"></param>
        /// <returns></returns>
        public DataResult ToOutStorage(string SnNum, List <SaleDetailEntity> list, string StorageNum)
        {
            SaleOrderEntity entity = new SaleOrderEntity();

            entity.SnNum = SnNum;
            entity       = this.GetOrder(entity);
            DataResult result = new DataResult();

            if (entity == null)
            {
                result.Code    = 1001;
                result.Message = "销售订单不存在";
                return(result);
            }

            if (entity.Status == (int)EOrderStatus.CreateOrder)
            {
                result.Code    = 1001;
                result.Message = "销售订单审核流程不正确,不能生成出库单";
                return(result);
            }

            if (entity.Status == (int)EPurchaseStatus.AllIn)
            {
                result.Code    = 1002;
                result.Message = "销售订单已经全部出库,请勿重新出库";
                return(result);
            }

            if (entity.Status == (int)EPurchaseStatus.OrderCancel)
            {
                result.Code    = 1003;
                result.Message = "订单已经被取消,不能出库";
                return(result);
            }

            SaleDetailEntity detailEntity = new SaleDetailEntity();

            detailEntity.OrderSnNum = SnNum;
            List <SaleDetailEntity> listSource = this.GetOrderDetail(detailEntity);

            if (listSource.IsNullOrEmpty())
            {
                result.Code    = 1004;
                result.Message = "销售订单中不存在出库货品";
                return(result);
            }


            //检查入库产品是否在采购单内
            List <SaleDetailEntity> listExists = new List <SaleDetailEntity>();

            foreach (SaleDetailEntity item in list)
            {
                if (!listSource.Exists(a => a.SnNum == item.SnNum))
                {
                    //不存在添加到集合
                    listExists.Add(item);
                }
            }
            if (!listExists.IsNullOrEmpty())
            {
                string content = listExists.Select(a => string.Format("[{0}]{1}", a.BarCode, a.ProductName)).ToArray().ToString();
                result.Code    = 1005;
                result.Message = content + " 不在销售订单[" + entity.OrderNum + "]中,请重新确认再出库";
                return(result);
            }

            List <LocalProductEntity> listResult = new List <LocalProductEntity>();

            //拣货
            foreach (SaleDetailEntity item in list)
            {
                Proc_PickProductEntity pickEntity = new Proc_PickProductEntity();
                pickEntity.InStorageNum = StorageNum;
                pickEntity.InProductNum = item.ProductNum;
                pickEntity.InCompanyID  = this.CompanyID;
                pickEntity.InNum        = item.Qty;

                List <LocalProductEntity> listPickResult = this.Proc_PickProduct.ExceuteEntityList <LocalProductEntity>(pickEntity);
                if (listPickResult.IsNullOrEmpty() || listPickResult.Sum(a => a.Num) < item.Qty)
                {
                    result.Code    = 1006;
                    result.Message = string.Format("货品[{0}]拣货数 {1} 不满足要求数 {2},请确保仓库有足够的货品", item.ProductName, listPickResult.Sum(a => a.Num).ToString("0.00"), item.Qty.ToString("0.00"));
                    return(result);
                }

                listResult.AddRange(listPickResult);
            }

            OutStorageEntity outEntity = new OutStorageEntity();

            outEntity.SnNum         = ConvertHelper.NewGuid();
            outEntity.OutType       = (int)EOutType.Sell;
            outEntity.ProductType   = (int)EProductType.Goods;
            outEntity.StorageNum    = StorageNum;
            outEntity.CusSnNum      = entity.CusSnNum;
            outEntity.CusNum        = entity.CusNum;
            outEntity.CusName       = entity.CusName;
            outEntity.Contact       = entity.Contact;
            outEntity.Phone         = entity.Phone;
            outEntity.Address       = entity.Address;
            outEntity.ContractOrder = entity.SnNum;
            outEntity.SendDate      = entity.SendDate;
            outEntity.Status        = (int)EAudite.Wait;
            outEntity.IsDelete      = (int)EIsDelete.NotDelete;
            outEntity.CreateTime    = DateTime.Now;
            outEntity.CreateUser    = entity.CreateUser;
            outEntity.OperateType   = (int)EOpType.PC;
            outEntity.EquipmentNum  = "";
            outEntity.EquipmentCode = "";
            outEntity.CompanyID     = this.CompanyID;

            List <OutStoDetailEntity> listDetails = new List <OutStoDetailEntity>();

            foreach (LocalProductEntity item in listResult)
            {
                OutStoDetailEntity detail = new OutStoDetailEntity();
                detail.SnNum       = ConvertHelper.NewGuid();
                detail.OrderSnNum  = outEntity.SnNum;
                detail.ProductName = item.ProductName;
                detail.ProductNum  = item.ProductNum;
                detail.BarCode     = item.BarCode;
                detail.BatchNum    = item.BatchNum;
                detail.LocalNum    = item.LocalNum;
                detail.StorageNum  = item.StorageNum;
                detail.Num         = item.Num;
                detail.IsPick      = (int)EBool.No;
                detail.RealNum     = 0;

                SaleDetailEntity saleEntity = list.FirstOrDefault(a => a.ProductNum == item.ProductNum);
                if (saleEntity != null)
                {
                    detail.OutPrice      = saleEntity.Price;
                    detail.Amount        = detail.OutPrice * detail.Num;
                    detail.ContractOrder = entity.OrderNum;
                    detail.ContractSn    = saleEntity.SnNum;
                }
                detail.LocalSn    = item.Sn;
                detail.CreateTime = DateTime.Now;
                detail.CompanyID  = this.CompanyID;

                listDetails.Add(detail);
            }

            string returnValue = string.Empty;

            using (TransactionScope ts = new TransactionScope())
            {
                Bill <OutStorageEntity, OutStoDetailEntity> bill = new OutStorage.OutStorageOrder(this.CompanyID);
                returnValue = bill.Create(outEntity, listDetails);

                if (EnumHelper.GetEnumDesc <EReturnStatus>(EReturnStatus.Success) == returnValue)
                {
                    foreach (SaleDetailEntity item in list)
                    {
                        if (item.RealNum + item.Qty >= item.Num)
                        {
                            item.Status   = (int)EOrderStatus.AllDelivery;
                            item.RealNum += item.Qty;
                        }
                        else if ((item.RealNum + item.Qty) < item.Num && (item.RealNum + item.Qty) > 0)
                        {
                            item.Status   = (int)EOrderStatus.PartialDelivery;
                            item.RealNum += item.Qty;
                        }
                        item.Include(a => new { a.RealNum, a.Status });
                        item.Where(a => a.SnNum == item.SnNum);
                        this.SaleDetail.Update(item);
                    }

                    //再次查询校验状态
                    detailEntity            = new SaleDetailEntity();
                    detailEntity.OrderSnNum = SnNum;
                    listSource = this.GetOrderDetail(detailEntity);
                    if (!listSource.IsNullOrEmpty())
                    {
                        if (listSource.Count(a => a.Status == (int)EOrderStatus.PartialDelivery) > 0 ||
                            (listSource.Count(a => a.Status == (int)EOrderStatus.AllDelivery) < listSource.Count() && listSource.Count(a => a.Status == (int)EOrderStatus.AllDelivery) > 0)
                            )
                        {
                            entity.Status = (int)EOrderStatus.PartialDelivery;
                        }
                        else if (listSource.Count(a => a.Status == (int)EOrderStatus.AllDelivery) == listSource.Count())
                        {
                            entity.Status = (int)EOrderStatus.AllDelivery;
                        }
                        entity.IncludeStatus(true);
                        entity.Where(a => a.SnNum == entity.SnNum);
                        this.SaleOrder.Update(entity);
                    }
                    result.Code    = (int)EResponseCode.Success;
                    result.Message = "出库单创建成功";
                }
                else
                {
                    result.Code    = (int)EResponseCode.Exception;
                    result.Message = "出库单创建失败";
                }

                ts.Complete();
            }
            return(result);
        }
Exemple #14
0
        /// <summary>
        /// 销售退货单
        /// </summary>
        /// <param name="SnNum"></param>
        /// <param name="list"></param>
        /// <returns></returns>
        public DataResult ToReturn(string SnNum, List <SaleDetailEntity> list)
        {
            SaleOrderEntity entity = new SaleOrderEntity();

            entity.SnNum = SnNum;
            entity       = this.GetOrder(entity);
            DataResult result = new DataResult();

            if (entity == null)
            {
                result.Code    = 1001;
                result.Message = "销售订单不存在";
                return(result);
            }
            if (!(entity.Status == (int)EOrderStatus.PartialDelivery || entity.Status == (int)EOrderStatus.AllDelivery))
            {
                result.Code    = 1002;
                result.Message = "该销售订单未发货,不能申请退货";
                return(result);
            }
            SaleDetailEntity detailEntity = new SaleDetailEntity();

            detailEntity.OrderSnNum = SnNum;
            List <SaleDetailEntity> listSource = this.GetOrderDetail(detailEntity);

            if (listSource.IsNullOrEmpty())
            {
                result.Code    = 1003;
                result.Message = "销售订单中不存在出库货品";
                return(result);
            }

            foreach (SaleDetailEntity item in list)
            {
                if (item.Qty > 0)
                {
                    SaleReturnDetailEntity returnDetail = new SaleReturnDetailEntity();
                    returnDetail.IncludeAll();
                    returnDetail
                    .Where(a => a.CompanyID == this.CompanyID)
                    .And(a => a.SaleDetailSn == item.SnNum)
                    ;

                    List <SaleReturnDetailEntity> listDetail = this.SaleReturnDetail.GetList(returnDetail);

                    if (listDetail != null && listDetail.Where(a => a.SaleDetailSn == item.SnNum).Sum(a => a.ReturnNum) >= item.Num)
                    {
                        result.Code    = 1006;
                        result.Message = string.Format("货品[{0}]已经全部退货,请勿重复申请退货", item.ProductName);
                        return(result);
                    }
                }
            }

            string returnValue = string.Empty;

            using (TransactionScope ts = new TransactionScope())
            {
                Bill <SaleReturnEntity, SaleReturnDetailEntity> bill = new SaleReturnOrder(this.CompanyID);
                SaleReturnEntity SaleReturnEntity = new SaleReturnEntity();
                SaleReturnEntity.CusSnNum     = entity.CusSnNum;
                SaleReturnEntity.CusNum       = entity.CusNum;
                SaleReturnEntity.CusName      = entity.CusName;
                SaleReturnEntity.Contact      = entity.Contact;
                SaleReturnEntity.Phone        = entity.Phone;
                SaleReturnEntity.SaleSnNum    = entity.SnNum;
                SaleReturnEntity.SaleOrderNum = entity.OrderNum;
                SaleReturnEntity.CompanyID    = this.CompanyID;

                List <SaleReturnDetailEntity> listReturnDetail = new List <SaleReturnDetailEntity>();
                foreach (SaleDetailEntity item in list)
                {
                    if (item.Qty > 0)
                    {
                        SaleReturnDetailEntity DetailEntity = new SaleReturnDetailEntity();
                        DetailEntity.SnNum        = ConvertHelper.NewGuid();
                        DetailEntity.ProductName  = item.ProductName;
                        DetailEntity.BarCode      = item.BarCode;
                        DetailEntity.ProductNum   = item.ProductNum;
                        DetailEntity.Num          = item.Num;
                        DetailEntity.ReturnNum    = item.Qty;
                        DetailEntity.UnitNum      = item.UnitNum;
                        DetailEntity.Price        = item.Price;
                        DetailEntity.Amount       = item.Price * item.Qty;
                        DetailEntity.ReturnTime   = DateTime.Now;
                        DetailEntity.SaleDetailSn = item.SnNum;
                        DetailEntity.CompanyID    = this.CompanyID;
                        DetailEntity.CreateTime   = DateTime.Now;

                        listReturnDetail.Add(DetailEntity);
                    }
                }

                returnValue = bill.Create(SaleReturnEntity, listReturnDetail);

                if (EnumHelper.GetEnumDesc <EReturnStatus>(EReturnStatus.Success) == returnValue)
                {
                    Task.Factory.StartNew(() =>
                    {
                        foreach (SaleDetailEntity DetailItem in listSource)
                        {
                            SaleReturnDetailEntity returnDetail = new SaleReturnDetailEntity();
                            returnDetail.IncludeAll();
                            returnDetail
                            .Where(a => a.CompanyID == this.CompanyID)
                            .And(a => a.SaleDetailSn == DetailItem.SnNum)
                            ;
                            SaleReturnEntity returnItem = new SaleReturnEntity();
                            returnItem.And(a => a.IsDelete == (int)EIsDelete.NotDelete)
                            ;
                            returnDetail.Left <SaleReturnEntity>(returnItem, new Params <string, string>()
                            {
                                Item1 = "OrderSnNum", Item2 = "SnNum"
                            });

                            List <SaleReturnDetailEntity> listDetail = this.SaleReturnDetail.GetList(returnDetail);
                            if (!listDetail.IsNullOrEmpty())
                            {
                                double ReturnNum = listDetail.Sum(a => a.ReturnNum);
                                DetailItem.IncludeReturnNum(true);
                                DetailItem.ReturnNum = ReturnNum;
                                DetailItem.Where(a => a.SnNum == DetailItem.SnNum).And(a => a.CompanyID == this.CompanyID);
                                this.SaleDetail.Update(DetailItem);
                            }
                        }
                        SaleOrderEntity SaleItem = new SaleOrderEntity();
                        SaleItem.HasReturn       = (int)EBool.Yes;
                        SaleItem.IncludeHasReturn(true);
                        SaleItem.Where(a => a.SnNum == SnNum).And(a => a.CompanyID == this.CompanyID);
                        this.SaleOrder.Update(SaleItem);
                    });

                    result.Code    = (int)EResponseCode.Success;
                    result.Message = "销售退货单创建成功";
                }
                else
                {
                    result.Code    = (int)EResponseCode.Exception;
                    result.Message = "销售退货单创建失败";
                }
                ts.Complete();
            }
            return(result);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="shipTypeId"></param>
        /// <param name="expressNum"></param>
        /// <param name="createUserId"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool ScanExpressNum(string shipTypeId, string expressNum, string createUserId, out string message)
        {
            var handover = _handoverBll.GetUnPrintHandoverByShipType(shipTypeId, createUserId);

            if (handover == null)
            {
                handover = new HandoverEntity();
                handover.Create();
                handover.HandoverNo = "";
                handover.IsPrinted  = 0;
                handover.ShipTypeId = shipTypeId;
                _handoverBll.Repository().Insert(handover);
            }

            SaleOrderEntity orderEntity = _saleOrderBll.GetSaleOrderByExpressNum(expressNum);

            if (orderEntity == null)
            {
                message = string.Format("无效的物流单号[{0}]", expressNum);
                return(false);
            }


            if (orderEntity.Status != (int)OrderStatus.OutStock && orderEntity.Status != (int)OrderStatus.Handover)
            {
                message = string.Format("订单[{0}]不是已出库或已交接状态,不能交接扫描", orderEntity.OrderNo);
                return(false);
            }

            if (orderEntity.ShipTypeId != shipTypeId)
            {
                message = string.Format("物流单号[{0}]与所选物流方式不一致,不能扫描", orderEntity.ExpressNum);
                return(false);
            }

            if (orderEntity.IsSuspended)
            {
                message = string.Format("订单[{0}]已被挂起,不能与配送商交接", orderEntity.OrderNo);
                return(false);
            }


            HandoverItemEntity itemEntity = _handoverBll.GetHandOverItem(expressNum);

            IDatabase     database    = DataFactory.Database();
            DbTransaction isOpenTrans = database.BeginTrans();

            try
            {
                var picks = _pickItemBll.GetPickItemListByOrderNo(orderEntity.OrderNo);
                message = string.Empty;
                if (itemEntity == null)
                {
                    HandoverItemEntity handoverItemEntity = new HandoverItemEntity();
                    handoverItemEntity.Create();
                    handoverItemEntity.HandoverId = handover.HandoverId;
                    handoverItemEntity.ExpressNum = expressNum;
                    handoverItemEntity.OrderNo    = orderEntity.OrderNo;
                    handoverItemEntity.ScanedTime = DateTime.Now;
                    _handoverItemBll.Repository().Insert(handoverItemEntity, isOpenTrans);

                    orderEntity.Status = (int)OrderStatus.Handover;
                    bool flag = _saleOrderBll.UpdateStatus(orderEntity, OrderStatus.OutStock, isOpenTrans);
                    if (!flag)
                    {
                        throw new Exception("修改订单状态出现异常,请重新操作");
                    }

                    //foreach (var item in picks)
                    //{
                    //    bool moveIn = _inventoryLocationBLL.UpdateInventoryByMoveIn(orderEntity.WarehouseId, item.ProductId, item.ToLocationCode, item.Qty, isOpenTrans);
                    //    if (!moveIn)
                    //    {
                    //        throw new Exception("更新目的储位库存失败");
                    //    }
                    //}
                }
                else
                {
                    if (itemEntity.HandoverId == handover.HandoverId)
                    {
                        if (_handoverBll.CancelItem(handover.HandoverId, itemEntity.ExpressNum))
                        {
                            orderEntity.Status = (int)OrderStatus.OutStock;
                            bool flag = _saleOrderBll.UpdateStatus(orderEntity, OrderStatus.Handover, isOpenTrans);
                            if (!flag)
                            {
                                throw new Exception("修改订单状态出现异常,请重新操作");
                            }

                            message = string.Format("物流单号[{0}]已取消扫描", orderEntity.ExpressNum);
                        }
                        else
                        {
                            throw new Exception(string.Format("物流单号[{0}]取消扫描失败", orderEntity.ExpressNum));
                        }
                    }
                    else
                    {
                        throw new Exception(string.Format("物流单号[{0}]已扫入其他交接单", orderEntity.ExpressNum));
                    }

                    //foreach (var item in picks)
                    //{
                    //    bool moveIn = _inventoryLocationBLL.UpdateInventoryByMoveIn(orderEntity.WarehouseId, item.ProductId, item.ToLocationCode, -1 * item.Qty, isOpenTrans);
                    //    if (!moveIn)
                    //    {
                    //        throw new Exception("更新目的储位库存失败");
                    //    }
                    //}
                }
                database.Commit();
                return(true);
            }
            catch (Exception ex)
            {
                database.Rollback();
                message = string.Format("订单交接扫描异常:{0}", ex.Message);
                return(false);
            }
        }
Exemple #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="billNo"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public bool ScanFinished(string billNo, out string message)
        {
            SaleOrderEntity orderEntity = billNo.ToLower().StartsWith("so")
                ? _orderBll.GetSaleOrder(billNo)
                : _orderBll.GetSaleOrderByExpressNum(billNo);

            if (orderEntity == null)
            {
                message = string.Format("无效的物流单号或订单号[{0}]", billNo);
                return(false);
            }

            if (orderEntity.Status != (int)OrderStatus.WaitOutStock)
            {
                message = string.Format("订单[{0}]不是待拣货状态,不能出库校验", orderEntity.OrderNo);
                return(false);
            }

            IDatabase     database    = DataFactory.Database();
            DbTransaction isOpenTrans = database.BeginTrans();

            try
            {
                orderEntity.Status = (int)OrderStatus.OutStock;

                bool flag = _orderBll.UpdateStatus(orderEntity, OrderStatus.WaitOutStock, null);
                if (!flag)
                {
                    message = "修改订单状态出现异常,请重新操作";
                    return(false);
                }

                var picks = _pickItemBll.GetPickItemListByOrderNo(orderEntity.OrderNo);
                foreach (var item in picks)
                {
                    bool outStock1 = _inventoryLocationBLL.UpdateInventoryByOutStock(item.WarehouseId, InventoryLocationTransactionType.OutStock, item.ProductId,
                                                                                     item.LocationCode, item.Qty, isOpenTrans);
                    if (!outStock1)
                    {
                        throw new Exception(string.Format("更新储位{0}库存失败", item.LocationCode));
                    }

                    bool outStock2 = _inventoryBLL.UpdateInventoryByOutStock(orderEntity.OrderNo, InventoryTransactionType.OutStock, item.WarehouseId,
                                                                             orderEntity.MerchantId, item.ProductId, item.Qty, isOpenTrans);
                    if (!outStock2)
                    {
                        throw new Exception("更新在库库存失败");
                    }
                }

                database.Commit();
            }
            catch (Exception ex)
            {
                database.Rollback();
                message = string.Format("订单[{0}]出库校验失败:{1}", orderEntity.OrderNo, ex.Message);
                return(false);
            }

            message = "";
            return(true);
        }