/// <summary>
        /// 保存总包号 和 总包与福邮的关系
        /// </summary>
        /// <param name="mainPostTag">总局袋牌</param>
        /// <param name="re">关系数据</param>
        /// <returns></returns>
        public bool SaveMainPostBagTag(MailTotalPackageInfo mainPostTag, MailTotalPackageOrPostBagRelational re)
        {
            var ctx = this.UnitOfWork as LMS_DbContext;

            lock (_lockSaveMainPostBagTag)
            {
                if (ctx.MailTotalPackageOrPostBagRelationals.Any(t => t.PostBagNumber == re.PostBagNumber))
                {
                    throw new BusinessLogicException("[福邮袋牌号]已经扫描过了.");
                }

                using (var tran = new TransactionScope(TransactionScopeOption.Required))
                {
                    if (!ctx.MailTotalPackageInfos.Any(t => t.MailTotalPackageNumber == mainPostTag.MailTotalPackageNumber)) //不存在
                    {
                        DateTime fiveDaysAgo = DateTime.Now.AddDays(-5);

                        //5天之前是否存在
                        if (ctx.MailTotalPackageInfos.Any(t => t.TotalPackageNumber == mainPostTag.TotalPackageNumber && t.CreatedOn >= fiveDaysAgo))
                        {
                            //替换MailTotalPackageNumber
                            mainPostTag.MailTotalPackageNumber = ctx.MailTotalPackageInfos
                                                                 .Where(t => t.TotalPackageNumber == mainPostTag.TotalPackageNumber && t.CreatedOn >= fiveDaysAgo)
                                                                 .OrderByDescending(p => p.CreatedOn)
                                                                 .Select(t => t.MailTotalPackageNumber)
                                                                 .FirstOrDefault();
                        }
                        else
                        {
                            //insert MailTotalPackageInfo
                            ctx.MailTotalPackageInfos.Add(mainPostTag);
                        }
                    }

                    //insert MailTotalPackageOrPostBagRelational
                    re.MailTotalPackageNumber = mainPostTag.MailTotalPackageNumber;
                    ctx.MailTotalPackageOrPostBagRelationals.Add(re);

                    ctx.SaveChanges();
                    tran.Complete();
                }

                return(true);
            }
            // throw new NotImplementedException();
        }
Esempio n. 2
0
        public ResultInfo MainPostNumberSave(string fuPostNumber, string mainPostNumber)
        {
            ResultInfo result = new ResultInfo();

            MailTotalPackageInfo m  = new MailTotalPackageInfo();
            string mainCountryCode  = "";
            string fuCountryCode    = "";
            string fourBagNumberStr = GetMainPackageNumber(mainPostNumber);

            if (string.IsNullOrWhiteSpace(fourBagNumberStr))
            {
                result.Status  = false;
                result.Message = "[总包号]不合法.";
                return(result);
            }

            int fourBagNumber;

            int.TryParse(fourBagNumberStr, out fourBagNumber);

            m.MailTotalPackageNumber = DateTime.Now.ToString("yyyyMMdd") + fourBagNumberStr;
            m.TotalPackageNumber     = mainPostNumber;
            m.ShortNumber            = fourBagNumber;
            m.ScanTime    = DateTime.Now;
            m.TrackStatus = 0;
            m.CreatedBy   = _workContext.User.UserUame;
            m.CreatedOn   = DateTime.Now;

            DateTime?dt = null;

            m.TaiWanArrivedTime   = dt;
            m.TaiWanDepartureTime = dt;
            m.ToArrivedTime       = dt;
            m.FuZhouDepartureTime = dt;
            m.LastUpdatedOn       = DateTime.Now;
            m.LastUpdatedBy       = _workContext.User.UserUame;

            MailTotalPackageOrPostBagRelational re = new MailTotalPackageOrPostBagRelational();

            re.CreatedBy = _workContext.User.UserUame;
            re.CreatedOn = DateTime.Now;
            //re.MailTotalPackageNumber
            //获取客袋带牌号信息
            var mailPostBagInfo = _mailPostBagInfoRepository.GetYunExpressBagNumber(fuPostNumber);

            if (mailPostBagInfo != null)
            {
                re.PostBagNumber = mailPostBagInfo.PostBagNumber;
                fuCountryCode    = mailPostBagInfo.CountryCode.ToUpperInvariant();
            }
            re.ScanTime      = DateTime.Now;
            re.LastUpdatedOn = DateTime.Now;
            re.LastUpdatedBy = _workContext.User.UserUame;


            if (mainPostNumber.Length > 8)
            {
                mainCountryCode = mainPostNumber.Substring(6, 2).ToUpperInvariant();
            }

            // 国际小包U+ 总包号扫描校验客户袋牌与总包号对应国家是否一致。
            // Add by zhengsong
            if (string.IsNullOrWhiteSpace(mainCountryCode) || string.IsNullOrWhiteSpace(fuCountryCode) ||
                mainCountryCode != fuCountryCode)
            {
                result.Status  = false;
                result.Message = "客户袋牌与总包号对应国家不一致,请检查是否贴错!关联不成功!";
                return(result);
            }

            if (string.IsNullOrWhiteSpace(re.PostBagNumber))
            {
                result.Status  = false;
                result.Message = "未找到[福邮袋牌]或者[总包号].";
                return(result);
            }

            try
            {
                if (_mailTotalPackageInfoRepository.SaveMainPostBagTag(m, re))
                {
                    result.Status = true;
                    return(result);
                }
            }
            catch (BusinessLogicException ex)
            {
                result.Message = ex.Message;
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
            result.Status = false;

            if (string.IsNullOrWhiteSpace(result.Message))
            {
                result.Message = "服务器内部错误.";
            }

            return(result);
        }