| | |
| | | using WIDESEA_Common.CommonEnum; |
| | | using WIDESEA_Common.TaskEnum; |
| | | using WIDESEA_IBasicService; |
| | | using static HslCommunication.Profinet.Knx.KnxCode; |
| | | using System.Collections; |
| | | using WIDESEA_Common.AllocateEnum; |
| | | using WIDESEA_Model.Models.Basic; |
| | | using WIDESEA_IOutboundService; |
| | | |
| | | namespace WIDESEA_InboundService |
| | | { |
| | |
| | | private readonly IRepository<Dt_TakeStockOrderDetail> _takeStockOrderDetail; |
| | | private readonly IRepository<Dt_Task> _taskRepository; |
| | | private readonly ILocationInfoService _locationInfoService; |
| | | public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService) : base(BaseDal) |
| | | private readonly IRepository<Dt_InboundOrder> _inboundOrderRepository; |
| | | private readonly IRepository<Dt_OutboundOrder> _outboundOrderRepository; |
| | | private readonly IRepository<Dt_InboundOrderDetail> _inboundOrderDetailRepository; |
| | | private readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository; |
| | | private readonly IOutboundPickingService _outboundPickingService; |
| | | public TakeStockOrderService(IRepository<Dt_TakeStockOrder> BaseDal, IUnitOfWorkManage unitOfWorkManage,IRepository<Dt_TakeStockOrder> takeStockOrder,IRepository<Dt_StockInfo> stockInfoRepository,IRepository<Dt_TakeStockOrderDetail> takeStockOrderDetail,IRepository<Dt_Task> taskRepository,ILocationInfoService locationInfoService, IRepository<Dt_InboundOrder> inboundOrderRepository,IRepository<Dt_OutboundOrder> outboundOrderRepository,IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository, IOutboundPickingService outboundPickingService) : base(BaseDal) |
| | | { |
| | | _unitOfWorkManage = unitOfWorkManage; |
| | | _takeStockOrder = takeStockOrder; |
| | |
| | | _takeStockOrderDetail = takeStockOrderDetail; |
| | | _taskRepository = taskRepository; |
| | | _locationInfoService = locationInfoService; |
| | | _inboundOrderRepository = inboundOrderRepository; |
| | | _outboundOrderRepository = outboundOrderRepository; |
| | | _inboundOrderDetailRepository = inboundOrderDetailRepository; |
| | | _outboundOrderDetailRepository = outboundOrderDetailRepository; |
| | | _outboundPickingService = outboundPickingService; |
| | | } |
| | | |
| | | public WebResponseContent ValidateBoxNo(string orderNo, string boxNo) |
| | |
| | | if (stockInfo == null) { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥æçåºå"); |
| | | } |
| | | if(stockInfo.StockStatus != StockStatusEmun.çç¹åºåºå®æ.ObjToInt()) |
| | | if(stockInfo.StockStatus != StockStatusEmun.çç¹åºåºå®æ.ObjToInt() && stockInfo.StockStatus != StockStatusEmun.çç¹åºå宿.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçå¤äºéçç¹ç¶æï¼è¯·æ£æ¥çç¹ä»»å¡"); |
| | | } |
| | |
| | | bool isMatch = remarkValues.Any(val => val.Equals(boxNo, StringComparison.OrdinalIgnoreCase)); |
| | | if (!isMatch) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç®±å·ã{boxNo}ãæªå¨çç¹åç®±å·ã{takeStockOrder.Remark}ã䏿¾å°å¹é
项"); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | bool isMatch = takeStockOrder.Remark.Trim().Equals(boxNo, StringComparison.OrdinalIgnoreCase); |
| | | if (!isMatch) |
| | | { |
| | | return WebResponseContent.Instance.Error($"ç®±å·ã{boxNo}ãä¸çç¹åç®±å·ã{takeStockOrder.Remark}ãä¸å¹é
"); |
| | | return WebResponseContent.Instance.Error($"ç®±å·ã{boxNo}ãæªå¨çç¹åç®±å·ã{takeStockOrder.AllPalletCode}ã䏿¾å°å¹é
项"); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | try |
| | | { |
| | | if(completeStockTakeDTO.actualQuantity == completeStockTakeDTO.stockQuantity) |
| | | { |
| | | return WebResponseContent.Instance.OK("该æ¡ç ä¸ºå¹³è´¦ï¼æ éè®°å½å·®å¼"); |
| | | } |
| | | Dt_TakeStockOrder takeStockOrder = _takeStockOrder.QueryFirst(x=>x.OrderNo == completeStockTakeDTO.orderNo); |
| | | if (takeStockOrder == null) |
| | | { |
| | |
| | | { |
| | | return WebResponseContent.Instance.Error("æ¡ç åºåæ°æ®æªæ¾å°å¹é
æ°æ®"); |
| | | } |
| | | List<Dt_AllocateMaterialInfo> allocateMaterialInfos = new List<Dt_AllocateMaterialInfo>(); |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = new Dt_TakeStockOrderDetail() |
| | | { |
| | | TakeStockId = takeStockOrder.Id, |
| | | MaterielCode = stockInfoDetail.MaterielCode, |
| | | MaterielName = stockInfoDetail.MaterielName??"", |
| | | MaterielName = stockInfoDetail.MaterielName ?? "", |
| | | BatchNo = stockInfoDetail.BatchNo, |
| | | TakePalletCode = completeStockTakeDTO.boxNo, |
| | | TakeDetalStatus = TakeStockDetailStatusEnum.çç¹å®æ.ObjToInt(), |
| | | TakeDetalStatus = TakeStockDetailStatusEnum.æªè¿è¡å¹³è´¦å¤ç.ObjToInt(), |
| | | Unit = stockInfoDetail.Unit, |
| | | SysQty = completeStockTakeDTO.stockQuantity, |
| | | Qty =completeStockTakeDTO.actualQuantity, |
| | | Remark = completeStockTakeDTO.stockQuantity-completeStockTakeDTO.actualQuantity>=0 ?"çäº":"çç", |
| | | Qty = completeStockTakeDTO.actualQuantity, |
| | | Remark = completeStockTakeDTO.stockQuantity - completeStockTakeDTO.actualQuantity >= 0 ? "çäº" : "çç", |
| | | barcode = completeStockTakeDTO.barcode, |
| | | WarehouseCode = stockInfoDetail.WarehouseCode??"", |
| | | WarehouseCode = stockInfoDetail.WarehouseCode ?? "", |
| | | FactoryArea = stockInfoDetail.FactoryArea, |
| | | SupplyCode = stockInfoDetail.SupplyCode??"", |
| | | SupplyCode = stockInfoDetail.SupplyCode ?? "", |
| | | TakeStockNo = takeStockOrder.OrderNo, |
| | | DifferenceQty = completeStockTakeDTO.stockQuantity - completeStockTakeDTO.actualQuantity |
| | | |
| | | }; |
| | | foreach (var item in stockInfo.Details) |
| | | { |
| | | Dt_AllocateMaterialInfo allocateMaterialInfo = new Dt_AllocateMaterialInfo() |
| | | { |
| | | Barcode = item.Barcode, |
| | | BatchNo = item.BatchNo, |
| | | FactoryArea = item.FactoryArea, |
| | | MaterialCode = item.MaterielCode, |
| | | MaterialName = item.MaterielName, |
| | | OrderId = takeStockOrder.Id, |
| | | OrderNo = takeStockOrder.OrderNo, |
| | | Quantity = item.StockQuantity, |
| | | SupplyCode = item.SupplyCode, |
| | | Unit = item.Unit |
| | | }; |
| | | } |
| | | stockInfo.StockStatus = StockStatusEmun.çç¹åºå宿.ObjToInt(); |
| | | _unitOfWorkManage.BeginTran(); |
| | | _takeStockOrderDetail.AddData(takeStockOrderDetail); |
| | | _stockInfoRepository.UpdateData(stockInfo); |
| | | _unitOfWorkManage.CommitTran(); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch (Exception ex) |
| | | return WebResponseContent.Instance.OK("çç¹å®æï¼è¯·å走该å¼å¸¸æç®±è¿è¡å¹³è´¦å¤çï¼"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent ReturnBox(string orderNo, string boxNo) |
| | | public WebResponseContent ReturnBox(string orderNo, string boxNo, string sourceAddress) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | try |
| | |
| | | { |
| | | return content.Error($"æç{boxNo}åå¨ä»»å¡ååºå¤±è´¥!"); |
| | | } |
| | | if(stock.StockStatus != StockStatusEmun.çç¹åºåºå®æ.ObjToInt()) |
| | | if(stock.StockStatus != StockStatusEmun.çç¹åºåºå®æ.ObjToInt() && stock.StockStatus != StockStatusEmun.çç¹åºå宿.ObjToInt()) |
| | | { |
| | | return content.Error("该æçç¶æä¸å¯¹,ä¸å
许çç¹å
¥åº"); |
| | | } |
| | | stock.StockStatus = StockStatusEmun.å
¥åºç¡®è®¤.ObjToInt(); |
| | | |
| | | takeStockOrder.TakeStockStatus = TakeStockStatusEnum.çç¹å®æ.ObjToInt(); |
| | | var palletCodes = new HashSet<string>(StringComparer.OrdinalIgnoreCase); |
| | | if (!string.IsNullOrEmpty(takeStockOrder.AllPalletCode)) |
| | | { |
| | | palletCodes = takeStockOrder.AllPalletCode |
| | | .Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries) |
| | | .Select(p => p.Trim()) |
| | | .ToHashSet(StringComparer.OrdinalIgnoreCase); |
| | | } |
| | | Dt_TakeStockOrderDetail isReturn = _takeStockOrderDetail.QueryFirst(x => x.TakePalletCode == boxNo && (x.TakeDetalStatus == TakeStockDetailStatusEnum.æªè¿è¡å¹³è´¦å¤ç.ObjToInt() || x.TakeDetalStatus == TakeStockDetailStatusEnum.ææ¶æå平账å¤çä¸.ObjToInt())); |
| | | if(isReturn != null) |
| | | { |
| | | return WebResponseContent.Instance.Error("该æçè¿ææ¡ç å¾
平账ï¼è¯·å
å¤çåååº"); |
| | | } |
| | | bool hasRelatedTasks = _taskRepository.QueryData(x => palletCodes.Contains(x.PalletCode)).Any(); |
| | | bool hasRelatedDetails = _takeStockOrderDetail.QueryData(x => palletCodes.Contains(x.TakePalletCode)).Any(); |
| | | |
| | | if (!hasRelatedTasks && !hasRelatedDetails) |
| | | { |
| | | takeStockOrder.TakeStockStatus = (int)TakeStockStatusEnum.çç¹å®æ; |
| | | } |
| | | |
| | | // åé
æ°è´§ä½ |
| | | var newLocation = _locationInfoService.AssignLocation(stock.LocationType); |
| | | |
| | |
| | | NextAddress = "", |
| | | OrderNo = takeStockOrder.OrderNo, |
| | | Roadway = newLocation.RoadwayNo, |
| | | SourceAddress = takeStockOrder.Remark, |
| | | SourceAddress = sourceAddress, |
| | | TargetAddress = newLocation.LocationCode, |
| | | TaskStatus = (int)TaskStatusEnum.New, |
| | | TaskType = TaskTypeEnum.InInventory.ObjToInt(), |
| | |
| | | return content.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent ManualReconciliation(int id) |
| | | { |
| | | try |
| | | { |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetail.QueryFirst(x=>x.Id == id); |
| | | if(takeStockOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥çç¹å·®å¼è®°å½"); |
| | | } |
| | | else |
| | | { |
| | | if(takeStockOrderDetail.TakeDetalStatus != TakeStockDetailStatusEnum.æªè¿è¡å¹³è´¦å¤ç.ObjToInt()) |
| | | { |
| | | return WebResponseContent.Instance.Error("该记å½å·²ç»è¿è¡äºå¹³è´¦æä½"); |
| | | } |
| | | takeStockOrderDetail.DifferenceQty = 0; |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.å·²è¿è¡å¹³è´¦å¤ç.ObjToInt(); |
| | | } |
| | | _takeStockOrderDetail.UpdateData(takeStockOrderDetail); |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent SelectOrder(string remark, int id) |
| | | { |
| | | try |
| | | { |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetail.QueryFirst(x => x.Id == id); |
| | | if (takeStockOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥çç¹å·®å¼è®°å½"); |
| | | } |
| | | else |
| | | { |
| | | //æ¥ææ¶å |
| | | if (takeStockOrderDetail.Remark == "çç") |
| | | { |
| | | List<Dt_InboundOrderDetail> inboundOrderDetails = new List<Dt_InboundOrderDetail>(); |
| | | List<Dt_InboundOrder> inboundOrders = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x => x.BusinessType == "12" && x.OrderStatus != InOrderStatusEnum.å
¥åºå®æ.ObjToInt()).Includes(x => x.Details).ToList(); |
| | | foreach (var inboundOrder in inboundOrders) |
| | | { |
| | | |
| | | var matchedDetails = inboundOrder.Details |
| | | |
| | | .Where(detail => !string.IsNullOrEmpty(detail.MaterielCode) |
| | | && detail.MaterielCode == takeStockOrderDetail.MaterielCode && detail.OrderDetailStatus != OrderDetailStatusEnum.Over.ObjToInt()) |
| | | |
| | | .WhereIF(!string.IsNullOrEmpty(takeStockOrderDetail.FactoryArea), |
| | | detail => !string.IsNullOrEmpty(inboundOrder.FactoryArea) |
| | | && inboundOrder.FactoryArea == takeStockOrderDetail.FactoryArea) |
| | | .WhereIF(!string.IsNullOrEmpty(takeStockOrderDetail.WarehouseCode), |
| | | detail => !string.IsNullOrEmpty(detail.WarehouseCode) |
| | | && detail.WarehouseCode == takeStockOrderDetail.WarehouseCode) |
| | | .ToList(); |
| | | |
| | | // å°å¹é
çæç»æ·»å å°æ»å表 |
| | | if (matchedDetails.Any()) |
| | | { |
| | | inboundOrderDetails.AddRange(matchedDetails); |
| | | } |
| | | } |
| | | return WebResponseContent.Instance.OK("æå",data: inboundOrderDetails); |
| | | } |
| | | else |
| | | { |
| | | List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>(); |
| | | List<Dt_OutboundOrder> outboundOrders = _outboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.BusinessType == "23" && x.OrderStatus != OutOrderStatusEnum.åºåºå®æ.ObjToInt()).Includes(x => x.Details).ToList(); |
| | | foreach (var outboundOrder in outboundOrders) |
| | | { |
| | | var matchedDetails = outboundOrder.Details |
| | | .Where(detail => !string.IsNullOrWhiteSpace(detail.MaterielCode) |
| | | && detail.MaterielCode == takeStockOrderDetail.MaterielCode) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(takeStockOrderDetail.FactoryArea), |
| | | detail => !string.IsNullOrWhiteSpace(outboundOrder.FactoryArea) |
| | | && outboundOrder.FactoryArea == takeStockOrderDetail.FactoryArea) |
| | | .WhereIF(!string.IsNullOrWhiteSpace(takeStockOrderDetail.WarehouseCode), |
| | | detail => !string.IsNullOrWhiteSpace(detail.WarehouseCode) |
| | | && detail.WarehouseCode == takeStockOrderDetail.WarehouseCode) |
| | | .Where(detail => string.IsNullOrWhiteSpace(detail.BatchNo)|| |
| | | detail.BatchNo == takeStockOrderDetail.BatchNo) |
| | | |
| | | .Where(detail => string.IsNullOrWhiteSpace(detail.SupplyCode) || |
| | | detail.SupplyCode == takeStockOrderDetail.SupplyCode) |
| | | .ToList(); |
| | | |
| | | if (matchedDetails.Any()) |
| | | { |
| | | outboundOrderDetails.AddRange(matchedDetails); |
| | | } |
| | | } |
| | | return WebResponseContent.Instance.OK("æå", data: outboundOrderDetails); |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | } |
| | | } |
| | | |
| | | public WebResponseContent DocumentReconciliation(int orderId, int id) |
| | | { |
| | | try |
| | | { |
| | | Dt_TakeStockOrderDetail takeStockOrderDetail = _takeStockOrderDetail.QueryFirst(x => x.Id == id); |
| | | if(takeStockOrderDetail== null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°è¯¥çç¹å·®å¼æ°æ®"); |
| | | } |
| | | if(takeStockOrderDetail.Remark == "çç") |
| | | { |
| | | Dt_InboundOrderDetail inboundOrderDetail = _inboundOrderDetailRepository.QueryFirst(x => x.OrderId == orderId); |
| | | if(inboundOrderDetail == null) |
| | | { |
| | | return WebResponseContent.Instance.Error("æªæ¾å°éæ©çææ¶å¹³è´¦åæ®"); |
| | | } |
| | | Dt_InboundOrder inboundOrder = _inboundOrderRepository.Db.Queryable<Dt_InboundOrder>().Where(x=>x.Id == orderId).Includes(x=>x.Details).First(); |
| | | Dt_StockInfo stockInfo = _stockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.PalletCode == takeStockOrderDetail.TakePalletCode && x.StockStatus == StockStatusEmun.çç¹åºå宿.ObjToInt()).Includes(x=>x.Details).First(); |
| | | if(stockInfo== null) |
| | | { |
| | | return WebResponseContent.Instance.Error($"çç¹æç{takeStockOrderDetail.TakePalletCode}çåºåä¿¡æ¯æªæ¾å°ï¼ææçç¶æä¸æ£ç¡®"); |
| | | } |
| | | var datevaliDate = _inboundOrderRepository.Db.Queryable<Dt_MaterialExpirationDate>().Where(x => x.MaterialCode.Contains(inboundOrderDetail.MaterielCode.Substring(0, 6))).First(); |
| | | var newStockDetail = new Dt_StockInfoDetail |
| | | { |
| | | StockId = stockInfo == null ? 0 : stockInfo.Id, |
| | | Barcode = inboundOrderDetail.Barcode, |
| | | MaterielCode = inboundOrderDetail.MaterielCode, |
| | | MaterielName = inboundOrderDetail.MaterielName, |
| | | BatchNo = inboundOrderDetail.BatchNo, |
| | | Unit = inboundOrderDetail.Unit, |
| | | InboundOrderRowNo = inboundOrderDetail.lineNo, |
| | | SupplyCode = inboundOrderDetail.SupplyCode, |
| | | WarehouseCode = inboundOrderDetail.WarehouseCode, |
| | | StockQuantity = inboundOrderDetail.OrderQuantity, |
| | | BarcodeQty = inboundOrderDetail.BarcodeQty, |
| | | BarcodeUnit = inboundOrderDetail.BarcodeUnit, |
| | | FactoryArea = inboundOrder.FactoryArea, |
| | | Status = 0, |
| | | OrderNo = inboundOrder.InboundOrderNo, |
| | | BusinessType = inboundOrder.BusinessType, |
| | | ValidDate = inboundOrder.BusinessType == BusinessTypeEnum.å¤é¨ä»åºè°æºä».ToString() ? inboundOrderDetail.ValidDate : datevaliDate == null ? null : Convert.ToDateTime(DateTime.Now).AddDays(Convert.ToDouble(datevaliDate.ValidityDays)), |
| | | }; |
| | | stockInfo.Details.Add(newStockDetail); |
| | | |
| | | inboundOrderDetail.ReceiptQuantity = inboundOrderDetail.OrderQuantity; |
| | | inboundOrderDetail.OverInQuantity = inboundOrderDetail.OrderQuantity; |
| | | inboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt(); |
| | | int overCount = 1; |
| | | int moreOverCount = inboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()); |
| | | if (inboundOrder.Details.Count() == overCount + moreOverCount) |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºå®æ.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | inboundOrder.OrderStatus = InOrderStatusEnum.å
¥åºä¸.ObjToInt(); |
| | | } |
| | | takeStockOrderDetail.DifferenceQty += inboundOrderDetail.OrderQuantity; |
| | | if(takeStockOrderDetail.DifferenceQty > 0) |
| | | { |
| | | return WebResponseContent.Instance.Error("è¯¥ææ¶åæ®æç»æ¡ç æ°é大äºå¾
平账æ°éï¼è¯·å¦éå
¶ä»åæ®å¹³è´¦"); |
| | | } |
| | | else if (takeStockOrderDetail.DifferenceQty == 0) |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤ç.ObjToInt(); |
| | | } |
| | | else |
| | | { |
| | | takeStockOrderDetail.TakeDetalStatus = TakeStockDetailStatusEnum.ææ¶æå平账å¤çä¸.ObjToInt(); |
| | | } |
| | | |
| | | _unitOfWorkManage.BeginTran(); |
| | | _inboundOrderRepository.UpdateData(inboundOrder); |
| | | _inboundOrderDetailRepository.UpdateData(inboundOrderDetail); |
| | | _takeStockOrderDetail.UpdateData(takeStockOrderDetail); |
| | | BaseDal.Db.Insertable(newStockDetail).ExecuteCommand(); |
| | | _unitOfWorkManage.CommitTran(); |
| | | List<string> barcodes = new List<string>(); |
| | | barcodes.Add(inboundOrderDetail.Barcode); |
| | | _outboundPickingService.NoStockOutBatchInOrderFeedbackToMes(orderId, barcodes); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | |
| | | } |
| | | return WebResponseContent.Instance.OK(); |
| | | } |
| | | catch(Exception ex) |
| | | { |
| | | _unitOfWorkManage.RollbackTran(); |
| | | return WebResponseContent.Instance.Error(ex.Message); |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |