/// <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); }
/// <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); }
/// <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); }
/// <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()); }
/// <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("该航线下箱主重复定义。"); } }
/// <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); }
/// <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>()); }
/// <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()); }
public void DeleteVessel([FromBody] DataSet1.T_OCRX_VESSELDataTable row) { webDAL.DeleteVessel(row[0]); //return Json<DataSet1.T_OCRX_CODataTable>(result); }