Example #1
0
        /// <summary>
        /// 判断所属的外理公司
        /// </summary>
        /// <param name="vesselType"></param>
        /// <param name="velaliase"></param>
        /// <param name="service"></param>
        /// <param name="linecode"></param>
        /// <returns></returns>
        public string getCompanyCode(string vesselType, string velaliase, string service, string linecode)
        {
            string companyCode = string.Empty;

            if (vesselType == "B")
            {
                //班轮
                using (DataSet1.T_OCRX_VESSELDataTable rules = cctdbDAL.SelectVessel())
                {
                    if (rules == null || rules.Count == 0)
                    {
                        return("");
                    }

                    try
                    {
                        //查找匹配外理
                        companyCode = GetCompanyCode(service, linecode, rules);
                    }
                    catch { }
                }
            }
            else
            {
                //驳船
                //查对应的驳船公司
                OCRX.Model.DataSet1.T_OCRX_BARGERow bg = cctdbDAL.SelectBargeByVelaliase(velaliase);
                if (bg != null)
                {
                    companyCode = bg.COMPANYCODE;
                }
            }

            return(companyCode);
        }
Example #2
0
        /// <summary>
        /// 新增班轮分发规则
        /// </summary>
        /// <param name="row"></param>
        public void InsertVessel(string companyCode, string serviceCode, string lineCode)
        {
            if (string.IsNullOrEmpty(companyCode))
            {
                throw new Exception("请输入外理公司代码");
            }
            if (string.IsNullOrEmpty(serviceCode))
            {
                throw new Exception("请输入航线");
            }
            if (string.IsNullOrEmpty(lineCode))
            {
                throw new Exception("请输入箱主");
            }

            //较验箱主
            bool isValid = ValidateBLL.CheckEnglishComma(lineCode, 1, 10);

            if (!isValid)
            {
                throw new Exception("箱主不合法。多个箱主请用英文逗号隔开");
            }

            CheckLines(lineCode, serviceCode, companyCode);

            DataSet1.T_OCRX_VESSELRow row = new DataSet1.T_OCRX_VESSELDataTable().NewT_OCRX_VESSELRow();
            row.COMPANYCODE = companyCode;
            row.SERVICECODE = serviceCode;
            row.LINECODE    = lineCode;
            row.CREATEDBY   = Config.UserId;

            DAL.cctdbDAL.InsertVessel(row);
        }
Example #3
0
        /// <summary>
        /// 删除班轮分发规则
        /// </summary>
        /// <param name="row"></param>
        public void DeleteVessel(string companyCode, string serviceCode)
        {
            DataSet1.T_OCRX_VESSELRow row = new DataSet1.T_OCRX_VESSELDataTable().NewT_OCRX_VESSELRow();
            row.COMPANYCODE = companyCode;
            row.SERVICECODE = serviceCode;
            row.UPDATEDBY   = Config.UserId;

            DAL.cctdbDAL.DeleteVessel(row);
        }
Example #4
0
        /// <summary>
        /// 第三种情况 成功处理,无箱主
        /// </summary>
        public string DealSuccessWithoutLinecode()
        {
            StringBuilder sb = new StringBuilder();
            //查找所有班轮分发规则
            int i = 0;

            using (DataSet1.T_OCRX_VESSELDataTable rules = cctdbDAL.SelectVessel())
            {
                if (rules == null || rules.Count == 0)
                {
                    return("");
                }

                //查找待分发的识别记录

                using (OCR.Model.OcrCnt.T_OCR_CNTDataTable data = cctdbDAL.SelectDispatch3())
                {
                    foreach (OCR.Model.OcrCnt.T_OCR_CNTRow row in data)
                    {
                        try
                        {
                            //查找匹配外理
                            string companyCode = GetCompanyCode(row.SERVICECODE, row.containerowner, rules);
                            if (!string.IsNullOrEmpty(companyCode))
                            {
                                DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                newRow.COMPANYCODE = companyCode;

                                //插入新分发记录
                                cctdbDAL.InsertCntx(newRow);
                                //更新分发状态
                                cctdbDAL.UpdateDispatched(row.DOCK_ID, row.containerowner, companyCode);
                                i++;
                                //sb.AppendLine(string.Format("数据分发 {0} {1}", row.TRVAL_NO, newRow.CONTAINER_NO));
                            }
                        }
                        catch { }
                    }
                }
            }
            if (i > 0)
            {
                sb.AppendFormat("数据分发 {0}条记录", i);
            }
            return(sb.ToString());
        }
Example #5
0
        /// <summary>
        /// 校验箱主是否有重复
        /// </summary>
        /// <param name="lineCode"></param>
        /// <param name="serviceCode"></param>
        /// <returns></returns>
        private void CheckLines(string lineCode, string serviceCode, string companyCode)
        {
            //校验箱主是否有重复
            string[] newLines     = SplitLines(lineCode);
            bool     isDuplicated = false;

            DataSet1.T_OCRX_VESSELDataTable dt = DAL.cctdbDAL.SelectVesselByService(serviceCode);
            foreach (DataSet1.T_OCRX_VESSELRow r1 in dt)
            {
                if (r1.COMPANYCODE != companyCode)
                {
                    string[] lines = SplitLines(r1.LINECODE);
                    foreach (string l1 in lines)
                    {
                        foreach (string l2 in newLines)
                        {
                            if (l2.Equals(l1))
                            {
                                isDuplicated = true;
                                break;
                            }
                        }
                        if (isDuplicated)
                        {
                            break;
                        }
                    }
                    if (isDuplicated)
                    {
                        break;
                    }
                }
            }

            if (isDuplicated)
            {
                throw new Exception("该航线下箱主重复定义。");
            }
        }
Example #6
0
        /// <summary>
        /// 查找班轮外理
        /// </summary>
        /// <param name="serviceCode"></param>
        /// <param name="lineCode"></param>
        /// <param name="rules"></param>
        /// <returns></returns>
        private string GetCompanyCode(string serviceCode, string lineCode, DataSet1.T_OCRX_VESSELDataTable rules)
        {
            string companyCode = string.Empty;

            //箱主必须匹配,航线优先
            foreach (DataSet1.T_OCRX_VESSELRow row in rules)
            {
                row.LINECODE = string.Format(",{0},", row.LINECODE);
                string lineCode1 = string.Format(",{0},", lineCode);

                if (row.SERVICECODE == serviceCode && row.LINECODE.Contains(lineCode1))
                {
                    companyCode = row.COMPANYCODE;
                    break;
                }

                if (row.SERVICECODE == "ALL" && row.LINECODE.Contains(lineCode1))
                {
                    companyCode = row.COMPANYCODE;
                }
            }

            return(companyCode);
        }
Example #7
0
        /// <summary>
        /// 获取该公司在该船的分发船东
        /// </summary>
        /// <param name="vslaliase"></param>
        /// <param name="CompanyCode"></param>
        /// <param name="disc"></param>
        /// <returns></returns>
        public static List <string> SelectCompanyVesselOwner(string vslaliase, string CompanyCode, bool disc)
        {
            if (vslaliase.StartsWith("8"))
            {
                DataSet1.T_OCRX_BARGEDataTable barge = SelectBargeByVelaliase(vslaliase);

                if (barge.Count > 0)
                {
                    if (barge[0].COMPANYCODE == CompanyCode)
                    {
                        List <string> line = new List <string> {
                            "ALL"
                        };
                        return(line);
                    }
                    return(null);
                }
                else
                {
                    return(null);
                }
            }

            DataTable vslService = SelectService(vslaliase);
            string    service    = string.Empty;

            if (vslService.Rows.Count > 0)
            {
                service = disc ? vslService.Rows[0]["INVESSELLINECODE"].ToString() : vslService.Rows[0]["OUTVESSELLINECODE"].ToString();
            }
            else
            {
                return(null);
            }
            DataSet1.T_OCRX_VESSELDataTable serviceRule = SelectVesselByService(service);
            DataSet1.T_OCRX_VESSELDataTable companyRule = SelectVesselByCompany(service, CompanyCode);
            List <string> VesselOwners = SelectVesselOwners(vslaliase);

            HashSet <string> others  = new HashSet <string>();
            HashSet <string> company = new HashSet <string>();
            HashSet <string> vessel  = new HashSet <string>(VesselOwners);

            foreach (DataSet1.T_OCRX_VESSELRow dr in serviceRule)
            {
                if (dr.COMPANYCODE != CompanyCode)
                {
                    string[] owners = dr.LINECODE.Split(',');
                    foreach (string s in owners)
                    {
                        others.Add(s);
                    }
                }
            }
            foreach (DataSet1.T_OCRX_VESSELRow dr in companyRule)
            {
                string[] owners = dr.LINECODE.Split(',');
                foreach (string s in owners)
                {
                    company.Add(s);
                }
            }

            company.ExceptWith(others);
            vessel.IntersectWith(company);
            return(vessel.ToList <string>());
        }
Example #8
0
        /// <summary>
        /// 第一种情况 内理不作业,外理作业 SCT港区
        /// </summary>
        public string DealExOnlySCT()
        {
            StringBuilder sb = new StringBuilder();
            int           i  = 0;

            jobBLL bll = new jobBLL();

            //查找待分发的识别记录
            //如果有箱号,调CTOS接口,找出对应的船名航次
            //如果无箱号,或者箱号无效,根据QC设置表的船对应的船东分发

            using (OCR.Model.OcrCnt.T_OCR_CNTDataTable data = cctdbDAL.SelectDispatch())
            {
                using (DataSet1.T_OCRX_VESSELDataTable rules = cctdbDAL.SelectVessel())
                {
                    foreach (OCR.Model.OcrCnt.T_OCR_CNTRow row in data)
                    {
                        try
                        {
                            QcSet.T_OCR_QCSETRow qc = bll.SelectQCSet(row.TRVAL_NO);
                            if (row.CONTAINER_NO == "未识别" && string.IsNullOrEmpty(row.RCONTAINER_NO))
                            {
                                //该模式分班轮和驳船
                                if (row.IsENAMNull() || string.IsNullOrEmpty(row.ENAM) || row.ENAM.StartsWith("8"))
                                {
                                    //找到船名航次,分发给外理
                                    row.ENAM = qc.VESSELALIASE;
                                    //查对应的驳船公司
                                    OCRX.Model.DataSet1.T_OCRX_BARGERow bg = cctdbDAL.SelectBargeByVelaliase(row.ENAM);
                                    if (row.SERVICECODE == "DOM")
                                    {
                                        row.ISARCHIVED = "Y";
                                    }
                                    else if (bg != null)
                                    {
                                        row.COMPANYCODE = bg.COMPANYCODE;
                                        row.SHIP_CODE   = qc.SHIP_CODE;
                                        row.C_VOYAGE    = row.DOCK_STATUS == 0 ? qc.OUT_VOYAGE_CODE : qc.IN_VOYAGE_CODE;

                                        //row.LINECODE = cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["CONTAINEROWNER"].ToString();
                                        row.ISARCHIVED = "Y";
                                        //row.OPERATORNAME = Config.SysUser;
                                        row.CONTAINERID = 0;
                                        bll.UpdateCntStatus(row);

                                        DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                        //插入新分发记录
                                        cctdbDAL.InsertCntx(newRow);
                                        //更新分发状态
                                        cctdbDAL.UpdateDispatched(row.DOCK_ID, string.Empty, row.COMPANYCODE);

                                        continue;
                                    }
                                    else
                                    {
                                        //无外理认领,归档
                                        row.ISARCHIVED = "Y";
                                    }
                                }
                                else
                                {
                                    //班轮 是否有箱主,无则等待
                                    string lineCode = qc.OWNER;
                                    if (String.IsNullOrEmpty(lineCode))
                                    {
                                        //row.CSTATUS = Convert.ToDecimal(Config.CStatus.WaitHandle);//转人工
                                        row.ISARCHIVED = "N";
                                    }
                                    else
                                    {
                                        //查找匹配外理
                                        string companyCode = GetCompanyCode(row.SERVICECODE, lineCode, rules);
                                        if (!string.IsNullOrEmpty(companyCode))
                                        {
                                            DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                            newRow.COMPANYCODE = companyCode;

                                            //插入新分发记录
                                            cctdbDAL.InsertCntx(newRow);
                                            //更新分发状态
                                            cctdbDAL.UpdateDispatched(row.DOCK_ID, row.LINECODE, companyCode);
                                            i++;
                                            continue;
                                            //sb.AppendLine(string.Format("数据分发 {0} {1}", row.TRVAL_NO, newRow.CONTAINER_NO));
                                        }
                                        else
                                        {
                                            //无外理认领,归档
                                            row.ISARCHIVED = "Y";
                                        }
                                    }
                                }
                            }
                            else
                            {
                                //查箱信息
                                CtosResult cntInfo = CtosAPIBLL.CM005001(string.IsNullOrEmpty(row.RCONTAINER_NO) ? row.CONTAINER_NO : row.RCONTAINER_NO, qc.TICKET_ID);
                                if (cntInfo.ERRORCODE != CtosAPIBLL.SUCCESSCODE || cntInfo.DS.Tables[0].Rows.Count == 0)
                                {
                                    //班轮 是否有箱主,无则等待
                                    string lineCode = qc.OWNER;
                                    //查找匹配外理
                                    string companyCode = GetCompanyCode(row.SERVICECODE, lineCode, rules);
                                    row.LINECODE = lineCode;
                                    if (!string.IsNullOrEmpty(companyCode))
                                    {
                                        DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                        newRow.COMPANYCODE = companyCode;

                                        //插入新分发记录
                                        cctdbDAL.InsertCntx(newRow);
                                        //更新分发状态
                                        cctdbDAL.UpdateDispatched(row.DOCK_ID, row.LINECODE, companyCode);
                                        i++;
                                        continue;
                                        //sb.AppendLine(string.Format("数据分发 {0} {1}", row.TRVAL_NO, newRow.CONTAINER_NO));
                                    }
                                    else
                                    {
                                        //无外理认领,归档
                                        row.ISARCHIVED = "Y";
                                    }
                                }
                                else
                                {
                                    //该模式分班轮和驳船
                                    if (row.IsENAMNull() || string.IsNullOrEmpty(row.ENAM) || row.ENAM.StartsWith("8"))
                                    {
                                        //找到船名航次,分发给外理
                                        row.ENAM = row.DOCK_STATUS == 0 ? cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["OUTVELALIASE"].ToString() : cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["INVELALIASE"].ToString();
                                        //查对应的驳船公司
                                        OCRX.Model.DataSet1.T_OCRX_BARGERow bg = cctdbDAL.SelectBargeByVelaliase(row.ENAM);
                                        if (row.SERVICECODE == "DOM")
                                        {
                                            row.ISARCHIVED = "Y";
                                        }
                                        else if (bg != null)
                                        {
                                            row.COMPANYCODE = bg.COMPANYCODE;
                                            row.SHIP_CODE   = row.DOCK_STATUS == 0 ? cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["OUTEVESSELNAME"].ToString() : cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["INEVESSELNAME"].ToString();
                                            row.C_VOYAGE    = row.DOCK_STATUS == 0 ? cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["OUTBOUNDVOY"].ToString() : cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["INBOUNDVOY"].ToString();

                                            row.LINECODE   = cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["CONTAINEROWNER"].ToString();
                                            row.ISARCHIVED = "Y";
                                            //row.OPERATORNAME = Config.SysUser;
                                            row.CONTAINERID = 0;
                                            bll.UpdateCntStatus(row);

                                            DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                            //插入新分发记录
                                            cctdbDAL.InsertCntx(newRow);
                                            //更新分发状态
                                            cctdbDAL.UpdateDispatched(row.DOCK_ID, string.Empty, row.COMPANYCODE);

                                            continue;
                                        }
                                        else
                                        {
                                            //无外理认领,归档
                                            row.ISARCHIVED = "Y";
                                        }
                                    }
                                    else
                                    {
                                        //班轮 是否有箱主,无则等待
                                        string lineCode = cntInfo.DS.Tables["CM_CONTAINERS"].Rows[0]["CONTAINEROWNER"].ToString();
                                        if (String.IsNullOrEmpty(lineCode))
                                        {
                                            //row.CSTATUS = Convert.ToDecimal(Config.CStatus.WaitHandle);//转人工
                                            //row.ISARCHIVED = "N";
                                            lineCode = qc.OWNER;
                                        }
                                        //else
                                        //{

                                        //查找匹配外理
                                        string companyCode = GetCompanyCode(row.SERVICECODE, lineCode, rules);
                                        row.LINECODE = lineCode;
                                        if (!string.IsNullOrEmpty(companyCode))
                                        {
                                            DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                                            newRow.COMPANYCODE = companyCode;

                                            //插入新分发记录
                                            cctdbDAL.InsertCntx(newRow);
                                            //更新分发状态
                                            cctdbDAL.UpdateDispatched(row.DOCK_ID, row.LINECODE, companyCode);
                                            i++;
                                            continue;
                                            //sb.AppendLine(string.Format("数据分发 {0} {1}", row.TRVAL_NO, newRow.CONTAINER_NO));
                                        }
                                        else
                                        {
                                            //无外理认领,归档
                                            row.ISARCHIVED = "Y";
                                        }
                                        //}
                                    }
                                }
                            }

                            row.CONTAINERID = 0;
                            bll.UpdateCntStatus(row);

                            //DataSet1.T_OCRX_CNTRow newRow = CopyRow(row);
                            ////newRow.COMPANYCODE = companyCode;

                            ////插入新分发记录
                            //cctdbDAL.InsertCntx(newRow);
                            ////更新分发状态
                            //cctdbDAL.UpdateDispatched(row.DOCK_ID, string.Empty, row.COMPANYCODE);
                            //i++;
                            //sb.AppendLine(string.Format("数据分发 {0} {1}", row.TRVAL_NO, newRow.CONTAINER_NO));
                        }
                        catch (Exception ex) { sb.Append(ex.StackTrace); }
                    }
                }
            }

            if (i > 0)
            {
                sb.AppendFormat("数据分发 {0}条记录", i);
            }
            return(sb.ToString());
        }
Example #9
0
 public void DeleteVessel([FromBody] DataSet1.T_OCRX_VESSELDataTable row)
 {
     webDAL.DeleteVessel(row[0]);
     //return Json<DataSet1.T_OCRX_CODataTable>(result);
 }