Ejemplo n.º 1
0
 public 专家任务 生成专家任务(任务 x, 任务 y, 专家任务性质?xz, string bz)
 {
     using (IRepository rep = this.GenerateRepository())
     {
         return(生成专家任务(x, y, false, xz, bz, rep));
     }
 }
Ejemplo n.º 2
0
        public bool  达专家任务(任务 rw, DateTime?时间要求始, DateTime?时间要求止, string 区域编号, int?缓急程度, DateTime 达时间)
        {
            using (IRepository rep = base.GenerateRepository())
            {
                try
                {
                    rep.BeginTransaction();
                    专家任务 zjrw = new 专家任务();
                    zjrw.新任务号     = "O" + rw.任务号;
                    zjrw.IsActive = true;
                    zjrw.时间要求始    = 时间要求始.HasValue ? 时间要求始.Value : zjrw.时间要求始;
                    zjrw.时间要求止    = 时间要求止.HasValue ? 时间要求止.Value : zjrw.时间要求止;
                    zjrw.区域编号     = 区域编号;
                    zjrw.缓急程度     = 缓急程度.HasValue ? 缓急程度.Value : 0;
                    zjrw.达时间      = 达时间;
                    zjrw.任务性质     = Get专家任务性质(rw);
                    base.Save(rep, zjrw);

                    rw.专家任务 = zjrw;
                    m_任务dao.Update(rep, rw);
                    rep.CommitTransaction();

                    return(true);
                }
                catch (Exception ex)
                {
                    rep.RollbackTransaction();
                    rw.专家任务 = null;
                    ExceptionProcess.ProcessWithNotify(ex);

                    return(false);
                }
            }
        }
Ejemplo n.º 3
0
        public 专家任务 撤销专家任务(专家任务 x, 任务 y)
        {
            using (IRepository rep = this.GenerateRepository())
            {
                try
                {
                    rep.BeginTransaction();
                    rep.Attach(x);
                    foreach (var i in x.任务)
                    {
                        if (i.任务号 != y.任务号)
                        {
                            x.新任务号 = "O" + i.任务号;
                            x.任务性质 = Get专家任务性质(i);
                            rep.Update(x);

                            if (x.车辆作业 != null)
                            {
                                x.车辆作业.作业号 = m_车辆作业Dao.生成作业号(x.新任务号);
                                rep.Update(x.车辆作业);
                            }
                        }
                        else
                        {
                            i.专家任务 = null;
                            rep.Update(i);
                        }
                    }

                    rep.CommitTransaction();
                    x.任务.Remove(y);
                }
                catch (Exception)
                {
                    rep.RollbackTransaction();
                    throw;
                }
            }
            return(x);
        }
Ejemplo n.º 4
0
        public bool 是否能组合(任务 x, 任务 y, 专家任务性质 zjrwxz)
        {
            switch (zjrwxz)
            {
            case 专家任务性质.静态优化套箱:
            case 专家任务性质.动态优化套箱:
                return(x.箱属船公司编号 == y.箱属船公司编号 && x.箱型编号 == y.箱型编号 &&
                       ((x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.进口拆箱) ||
                        (x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.出口装箱)));

            case 专家任务性质.静态优化出口箱带货:
            case 专家任务性质.动态优化出口箱带货:
                return((x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.E带货) ||
                       (x.任务性质 == 任务性质.E带货 && y.任务性质 == 任务性质.出口装箱));

            case 专家任务性质.静态优化进口箱带货:
            case 专家任务性质.动态优化进口箱带货:
                return((x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.I带货) ||
                       (x.任务性质 == 任务性质.I带货 && y.任务性质 == 任务性质.进口拆箱));

            case 专家任务性质.静态优化进口箱对箱:
            case 专家任务性质.动态优化进口箱对箱:
                return(x.是否小箱 && y.是否小箱 &&
                       ((x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.出口装箱) ||
                        (y.任务性质 == 任务性质.进口拆箱 && x.任务性质 == 任务性质.出口装箱)));

            case 专家任务性质.静态优化出口箱对箱:
            case 专家任务性质.动态优化出口箱对箱:
                return(x.是否小箱 && y.是否小箱 &&
                       (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.出口装箱));

            case 专家任务性质.静态优化进出口对箱:
            case 专家任务性质.动态优化进出口对箱:
                return(x.是否小箱 && y.是否小箱 &&
                       (x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.进口拆箱));
            }
            return(false);
        }
Ejemplo n.º 5
0
        public 专家任务 生成专家任务(专家任务 x, 任务 y, 专家任务性质?xz)
        {
            using (IRepository rep = this.GenerateRepository())
            {
                System.Diagnostics.Debug.Assert(x.任务.Count == 1, "动态调度的原始专家任务任务数必须为1");

                try
                {
                    rep.Attach(x);

                    专家任务 zjrw = 生成专家任务(x.任务[0], y, true, xz, x.备注, rep);
                    if (zjrw != null)
                    {
                        if (x.车辆作业 != null)
                        {
                            x.车辆作业.作业号 = m_车辆作业Dao.生成作业号(zjrw.新任务号);

                            rep.BeginTransaction();
                            m_车辆作业Dao.Update(rep, x.车辆作业);

                            m_作业异常Dao.新作业异常(x.车辆作业, "动态任务追加", y.任务号, System.DateTime.Now);

                            m_作业监控Dao.更新作业监控状态2(rep, x.车辆作业, System.DateTime.Now, null, null);

                            rep.CommitTransaction();
                        }
                    }
                    return(zjrw);
                }
                catch (Exception)
                {
                    rep.RollbackTransaction();
                    throw;
                }
            }
        }
Ejemplo n.º 6
0
 public bool 撤销专家任务(任务 rw)
 {
     return(撤销专家任务(rw, null));
 }
Ejemplo n.º 7
0
        public 专家任务性质 Get专家任务性质(任务 x, 任务 y, 专家任务性质?xz, bool 是否动态)
        {
            if (x == null && y == null)
            {
                throw new NullReferenceException("两个任务参数都为空");
            }

            if (xz.HasValue)
            {
                return(xz.Value);
            }

            if (x != null && y != null)
            {
                //if (x.是否小箱 && y.是否小箱)
                //{
                //    if (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.进口拆箱
                //        || x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.出口装箱)
                //        return 专家任务性质.静态优化进出口对箱;
                //    else if (x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.进口拆箱)
                //        return 专家任务性质.静态优化进口箱对箱;
                //    else if (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.出口装箱)
                //        return 专家任务性质.静态优化出口箱对箱;
                //    else
                //        throw new ArgumentException("小箱配对任务性质不符合要求!");
                //}
                if (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.进口拆箱 ||
                    x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.出口装箱)
                {
                    if (x.是否小箱 && y.是否小箱)
                    {
                        return(是否动态 ? 专家任务性质.动态优化进出口对箱 : 专家任务性质.静态优化进出口对箱);
                    }
                    else
                    {
                        return(是否动态 ? 专家任务性质.动态优化套箱 : 专家任务性质.静态优化套箱);
                    }
                }
                else if (x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.I带货 ||
                         x.任务性质 == 任务性质.I带货 && y.任务性质 == 任务性质.进口拆箱)
                {
                    return(是否动态 ? 专家任务性质.动态优化进口箱带货 : 专家任务性质.静态优化进口箱带货);
                }
                else if (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.E带货 ||
                         x.任务性质 == 任务性质.E带货 && y.任务性质 == 任务性质.出口装箱)
                {
                    return(是否动态 ? 专家任务性质.动态优化出口箱带货 : 专家任务性质.静态优化出口箱带货);
                }
                else if (x.任务性质 == 任务性质.进口拆箱 && y.任务性质 == 任务性质.进口拆箱)
                {
                    if (x.是否小箱 && y.是否小箱)
                    {
                        return(是否动态 ? 专家任务性质.动态优化进口箱对箱 : 专家任务性质.静态优化进口箱对箱);
                    }
                }
                else if (x.任务性质 == 任务性质.出口装箱 && y.任务性质 == 任务性质.出口装箱)
                {
                    if (x.是否小箱 && y.是否小箱)
                    {
                        return(是否动态 ? 专家任务性质.动态优化出口箱对箱 : 专家任务性质.静态优化出口箱对箱);
                    }
                }
            }
            else
            {
                任务 rw = x != null ? x : y;
                switch (rw.任务性质)
                {
                case 任务性质.进口拆箱:
                    return(专家任务性质.无优化进口拆箱);

                case 任务性质.出口装箱:
                    return(专家任务性质.无优化出口装箱);

                case 任务性质.I带货:
                    return(专家任务性质.无优化I带货);

                case 任务性质.E带货:
                    return(专家任务性质.无优化E带货);
                }
            }

            throw new ArgumentException("两个任务不符合专家任务配对规则");
        }
Ejemplo n.º 8
0
 public 专家任务性质 Get专家任务性质(任务 rw)
 {
     return(Get专家任务性质(rw, null, null, false));
 }
Ejemplo n.º 9
0
        /// <summary>
        /// 返回新任务号
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="是否动态">是否动态优化</param>
        /// <returns></returns>
        public 专家任务 生成专家任务(任务 x, 任务 y, bool 是否动态, 专家任务性质?xz, string bz, IRepository rep)
        {
            if ((x == null && y == null) || (x != null && y != null && x.专家任务 != null && y.专家任务 != null))
            {
                throw new NullReferenceException("不能生成专家任务!");
            }

            bool bx = false, by = false;

            try
            {
                rep.BeginTransaction();

                专家任务 zjrw = null;
                if (x != null && y != null)
                {
                    // 动态
                    if (x.专家任务 != null || y.专家任务 != null)
                    {
                        zjrw = x.专家任务 != null ? x.专家任务 : y.专家任务;
                    }
                    else
                    {
                        zjrw          = new 专家任务();
                        zjrw.任务       = new List <任务>();
                        zjrw.IsActive = true;
                        zjrw.备注       = bz;
                        zjrw.缓急程度     = Math.Max(x.缓急程度, y.缓急程度);
                    }

                    zjrw.任务性质 = Get专家任务性质(x, y, xz, 是否动态);

                    if (zjrw.任务性质 == 专家任务性质.静态优化套箱 ||
                        zjrw.任务性质 == 专家任务性质.动态优化套箱)
                    {
                        if (x.任务性质 == 任务性质.出口装箱)
                        {
                            if (string.IsNullOrEmpty(x.箱号))
                            {
                                x.箱号 = y.箱号;
                            }
                        }
                        else if (y.任务性质 == 任务性质.出口装箱)
                        {
                            if (string.IsNullOrEmpty(y.箱号))
                            {
                                y.箱号 = x.箱号;
                            }
                        }
                    }
                    switch (zjrw.任务性质)
                    {
                    case 专家任务性质.静态优化套箱:
                        zjrw.新任务号 = "NT";
                        break;

                    case 专家任务性质.动态优化套箱:
                        zjrw.新任务号 = "MT";
                        break;

                    case 专家任务性质.静态优化进口箱带货:
                        zjrw.新任务号 = "NI";
                        break;

                    case 专家任务性质.动态优化进口箱带货:
                        zjrw.新任务号 = "MI";
                        break;

                    case 专家任务性质.静态优化出口箱带货:
                        zjrw.新任务号 = "NE";
                        break;

                    case 专家任务性质.动态优化出口箱带货:
                        zjrw.新任务号 = "ME";
                        break;

                    case 专家任务性质.静态优化进出口对箱:
                        zjrw.新任务号 = "NB";
                        break;

                    case 专家任务性质.动态优化进出口对箱:
                        zjrw.新任务号 = "MB";
                        break;

                    case 专家任务性质.静态优化进口箱对箱:
                        zjrw.新任务号 = "NS";
                        break;

                    case 专家任务性质.动态优化进口箱对箱:
                        zjrw.新任务号 = "MS";
                        break;

                    case 专家任务性质.静态优化出口箱对箱:
                        zjrw.新任务号 = "NA";
                        break;

                    case 专家任务性质.动态优化出口箱对箱:
                        zjrw.新任务号 = "MA";
                        break;
                    }
                    //zjrw.新任务号 += PrimaryMaxIdGenerator.GetIdYearMonth();
                    //zjrw.新任务号 = PrimaryMaxIdGenerator.GetMaxId("业务备案_专家任务", "新任务号", 12, zjrw.新任务号);

                    string s = null;
                    switch (zjrw.任务性质)
                    {
                    case 专家任务性质.静态优化套箱:
                    case 专家任务性质.静态优化进口箱带货:
                    case 专家任务性质.静态优化进口箱对箱:
                    case 专家任务性质.静态优化进出口对箱:
                    case 专家任务性质.动态优化套箱:
                    case 专家任务性质.动态优化进口箱带货:
                    case 专家任务性质.动态优化进口箱对箱:
                    case 专家任务性质.动态优化进出口对箱:
                        s = x.任务性质 == 任务性质.进口拆箱 ? x.任务号 : y.任务号;
                        break;

                    case 专家任务性质.静态优化出口箱带货:
                    case 专家任务性质.静态优化出口箱对箱:
                    case 专家任务性质.动态优化出口箱带货:
                    case 专家任务性质.动态优化出口箱对箱:
                        s = x.任务性质 == 任务性质.出口装箱 ? x.任务号 : y.任务号;
                        break;

                    default:
                        throw new ArgumentException("不合理的专家任务性质!");
                    }
                    zjrw.新任务号 += s.Substring(1);
                }
                else // 无优化专家任务
                {
                    任务 rw = x != null ? x : y;
                    if (rw.专家任务 == null)
                    {
                        zjrw          = new 专家任务();
                        zjrw.任务       = new List <任务>();
                        zjrw.IsActive = true;
                        zjrw.备注       = bz;
                        zjrw.缓急程度     = rw.缓急程度;
                    }
                    else
                    {
                        zjrw = rw.专家任务;
                    }
                    zjrw.新任务号 = "O" + rw.任务号;
                    zjrw.任务性质 = Get专家任务性质(rw);
                }

                base.SaveOrUpdate(rep, zjrw);

                if (x != null && x.专家任务 == null)
                {
                    bx     = true;
                    x.专家任务 = zjrw;
                    m_任务Dao.Update(rep, x);
                }
                if (y != null && y.专家任务 == null)
                {
                    by     = true;
                    y.专家任务 = zjrw;
                    m_任务Dao.Update(rep, y);
                }

                rep.CommitTransaction();

                if (bx)
                {
                    zjrw.任务.Add(x);
                }
                if (by)
                {
                    zjrw.任务.Add(y);
                }

                return(zjrw);
            }
            catch (Exception ex)
            {
                rep.RollbackTransaction();
                if (bx)
                {
                    x.专家任务 = null;
                }
                if (by)
                {
                    y.专家任务 = null;
                }
                ExceptionProcess.ProcessWithNotify(ex);
                return(null);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 已下达的专家任务,将无法删除和移出任务
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public bool 撤销专家任务(任务 x, 任务 y)
        {
            专家任务 zjrw = null;

            if (x != null && y != null)
            {
                if (x.专家任务 == null || y.专家任务 == null)
                {
                    return(true);
                }

                using (IRepository rep = this.GenerateRepository())
                {
                    rep.Attach(x);
                    rep.Attach(y);

                    zjrw = x.专家任务;
                    if (zjrw == null)   // 到这zjrw = null,可能因为多人操作,别人删除了专家任务
                    {
                        return(true);
                    }
                    if (zjrw.达时间.HasValue)
                    {
                        return(false);
                    }
                    try
                    {
                        rep.BeginTransaction();
                        x.专家任务 = null;
                        m_任务Dao.Update(rep, x);
                        y.专家任务 = null;
                        m_任务Dao.Update(rep, y);
                        // 动态调度时,只撤销rw
                        if (!zjrw.达时间.HasValue)
                        {
                            base.Delete(rep, zjrw);
                        }
                        rep.CommitTransaction();
                    }
                    catch (Exception ex)
                    {
                        rep.RollbackTransaction();
                        x.专家任务 = zjrw;
                        y.专家任务 = zjrw;
                        ExceptionProcess.ProcessWithNotify(ex);
                        return(false);
                    }
                }
                return(true);
            }
            else
            {
                任务 rw = x != null ? x : y;
                if (rw != null)
                {
                    if (rw.专家任务 == null)
                    {
                        return(true);
                    }

                    using (IRepository rep = this.GenerateRepository())
                    {
                        try
                        {
                            rep.Attach(rw);
                            rep.BeginTransaction();
                            zjrw = rw.专家任务;
                            if (zjrw == null)   // 到这zjrw = null,可能因为多人操作,别人删除了专家任务
                            {
                                return(true);
                            }
                            if (zjrw.达时间.HasValue)
                            {
                                return(false);
                            }
                            rw.专家任务 = null;
                            m_任务Dao.Update(rep, rw);
                            bool deleteZjrw = true;
                            foreach (任务 rwItem in zjrw.任务)
                            {
                                if (rwItem.ID != rw.ID)
                                {
                                    zjrw.任务性质 = Get专家任务性质(rwItem);
                                    base.Update(rep, zjrw);
                                    deleteZjrw = false;
                                }
                            }
                            // 动态调度时,只撤销rw
                            // 如果原有2个任务,会报约束异常
                            if (!zjrw.达时间.HasValue && deleteZjrw)
                            {
                                base.Delete(rep, zjrw);
                            }
                            rep.CommitTransaction();
                        }
                        catch (Exception ex)
                        {
                            rep.RollbackTransaction();
                            rw.专家任务 = zjrw;
                            ExceptionProcess.ProcessWithNotify(ex);
                            return(false);
                        }
                    }
                }
                return(true);
            }
        }