/// <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))); }
/// <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)); }
/// <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"); }
/// <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))); }
/// <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))); }
/// <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))); }
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()); }
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()); }
/// <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))); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); }