private IList<TransportOrderRoute> PrepareTransportOrderRoute(string orderNo, TransportMode transportMode, IDictionary<int, string> shipAddressDic) { IList<TransportOrderRoute> transportOrderRouteList = new List<TransportOrderRoute>(); TransportOrderRoute prevTransportOrderRoute = null; IList<Address> addressList = null; if (shipAddressDic != null && shipAddressDic.Count > 0) { StringBuilder selectHql = null; IList<object> parms = new List<object>(); foreach (var shipAddress in shipAddressDic) { if (selectHql == null) { selectHql = new StringBuilder("from Address where Code in (?"); } else { selectHql.Append(", ?"); } parms.Add(shipAddress.Value); } selectHql.Append(")"); addressList = genericMgr.FindAll<Address>(selectHql.ToString(), parms.ToArray()); } foreach (var shipAddress in shipAddressDic.OrderBy(s => s.Key)) { Address address = addressList.Where(a => a.Code == shipAddress.Value).SingleOrDefault(); if (address == null) { throw new BusinessException("站点{0}不存在。", shipAddress.Value); } TransportOrderRoute transportOrderRoute = new TransportOrderRoute(); transportOrderRoute.OrderNo = orderNo; transportOrderRoute.Sequence = shipAddress.Key; transportOrderRoute.ShipAddress = address.Code; transportOrderRoute.ShipAddressDescription = address.CodeAddressContent; transportOrderRoute.Distance = prevTransportOrderRoute != null ? CalculateShipDistance(prevTransportOrderRoute.ShipAddress, transportOrderRoute.ShipAddress, transportMode) : 0; transportOrderRouteList.Add(transportOrderRoute); prevTransportOrderRoute = transportOrderRoute; } return transportOrderRouteList; }
public void AddTransportOrderRoute(string orderNo, int seq, string shipAddress) { if (string.IsNullOrWhiteSpace(orderNo)) { throw new TechnicalException("运输单号不能为空。"); } if (seq <= 0) { throw new TechnicalException("序号不能小于等于0。"); } if (string.IsNullOrWhiteSpace(shipAddress)) { throw new TechnicalException("站点不能为空。"); } TransportOrderMaster transportOrderMaster = this.genericMgr.FindAll<TransportOrderMaster>("from TransportOrderMaster where OrderNo = ?", orderNo).SingleOrDefault(); if (transportOrderMaster == null) { throw new BusinessException("运输单号{0}不存在。", orderNo); } if (transportOrderMaster.Status == TransportStatus.Close) { throw new BusinessException("运输单号{0}已经关闭,不能添加站点。", orderNo); } if (transportOrderMaster.Status == TransportStatus.Cancel) { throw new BusinessException("运输单号{0}已经取消,不能添加站点。", orderNo); } Address shipAddressInstance = genericMgr.FindAll<Address>("from Address where Code = ?", shipAddress).SingleOrDefault(); if (shipAddressInstance == null) { throw new BusinessException("站点{0}不存在。", shipAddress); } if (!transportOrderMaster.MultiSitePick && seq == 1) { throw new BusinessException("不能改变运输单{0}的始发站点。", orderNo); } IList<TransportOrderRoute> transportOrderRouteList = genericMgr.FindAll<TransportOrderRoute>("from TransportOrderRoute where OrderNo = ? ", orderNo); var prevTransportOrderRoute = transportOrderRouteList.Where(r => r.Sequence < seq).SingleOrDefault(); var nextTransportOrderRouteList = transportOrderRouteList.Where(r => r.Sequence >= seq); TransportOrderRoute transportOrderRoute = new TransportOrderRoute(); transportOrderRoute.OrderNo = orderNo; transportOrderRoute.Sequence = nextTransportOrderRouteList.Count() > 0 ? seq : prevTransportOrderRoute.Sequence + 1; transportOrderRoute.ShipAddress = shipAddress; transportOrderRoute.ShipAddressDescription = shipAddressInstance.AddressContent; transportOrderRoute.Distance = prevTransportOrderRoute != null ? CalculateShipDistance(prevTransportOrderRoute.ShipAddress, transportOrderRoute.ShipAddress, transportOrderMaster.TransportMode) : 0; this.genericMgr.Create(transportOrderRoute); for (int i = 0; i < nextTransportOrderRouteList.Count(); i++) { TransportOrderRoute nextTransportOrderRoute = nextTransportOrderRouteList.ElementAt(i); nextTransportOrderRoute.Sequence++; if (i == 0) { nextTransportOrderRoute.Distance = CalculateShipDistance(transportOrderRoute.ShipAddress, nextTransportOrderRoute.ShipAddress, transportOrderMaster.TransportMode); } this.genericMgr.Update(nextTransportOrderRoute); } }