⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 laneinfo_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
          RelayFace[i].Face_Lane:=FieldByName('Face_Lane').AsInteger;
          RelayFace[i].Area_Id:=FieldByName('Area').AsInteger;
          RelayFace[i].WorkGroup_Id:=FieldByName('WorkGroup').AsInteger;
          RelayFace[i].BeginDate:=FieldByName('Begin_Date').AsDateTime;
          RelayFace[i].EndDate:=FieldByName('End_Date').AsDateTime;
          RelayFace[i].FirstMine:=false; //初始假定均不是首采面,后面再进行判断
          RelayFace[i].HaveChose:=false;//辅助判断变量,为帮助生成掘进任务之用
          next;
          i:=i+1;
        end;
    end;
  //对读取后的数据进行相关判断和处理
  for i:=1 to High(RelayFace) do
    begin
      Face:=RelayFace[i].Face_Lane;
      Area:=RelayFace[i].Area_Id;
      WorkGroup:=RelayFace[i].WorkGroup_Id;
      //确定回采面名称及其工艺
      Data_Frm.Face_AdoTab.Locate('Face_Id',Face,[locaseinsensitive]);
      with Data_Frm.Face_AdoTab do
        begin
          RelayFace[i].FaceState:=FieldByName('Mined').AsInteger;//0:采完,1:正在回采,2:待采状态
          RelayFace[i].Face_Name:=FieldByName('Name').AsString;
          m:=FieldByName('Push_Length').AsInteger;
          n:=FieldByName('Finish_Length').AsInteger;
          RelayFace[i].Push_Length:=m-n;
          RelayFace[i].Face_Length:=FieldByName('Face_Length').AsInteger;
          RelayFace[i].Height:=FieldByName('Mine_Height').AsFloat;
          RelayFace[i].DayProgress:=FieldByName('Day_Progress').AsFloat;
          RelayFace[i].Consistency:=FieldByName('Consistency').AsFloat;
          RelayFace[i].RepairTime:=FieldByName('Repair_Time').AsInteger;
          RelayFace[i].AverageDayOut:=FieldByName('Day_OutPut').AsInteger;
        end;
      Technic:=Data_Frm.Face_AdoTab.FieldByName('Technic_Type').AsInteger;
      RelayFace[i].MineTechnicId:=Technic;//1:炮采,2:普采,3:综采,4:综放
      //确定不同工艺的回采面的安准时间和掘进完成提前时间
      Data_Frm.MineInterval_AdoTab.Locate('Technic_Type',Technic,[locaseinsensitive]);
      RelayFace[i].SetUpTime:=Data_Frm.MineInterval_AdoTab.FieldByName('FixPrepare_Time').AsInteger;
      RelayFace[i].AheadTime:=Data_Frm.MineInterval_AdoTab.FieldByName('DrillFinish_Ahead').AsInteger;
      //确定采区性质、采区名称和采区生产状态
      Data_Frm.Area_AdoTab.Locate('Area_Id',Area,[locaseinsensitive]);
      RelayFace[i].AreaType:=Data_Frm.Area_AdoTab.fieldByName('Area_Type').AsString;
      RelayFace[i].Area_Name:=Data_Frm.Area_AdoTab.fieldByName('Area_Name').AsString;
      RelayFace[i].BelongedAreaState:=Data_Frm.Area_AdoTab.fieldByName('State').AsString;
    //确定采煤队名称
      Data_Frm.Worker_AdoTab.Locate('WorkGroup_Id',WorkGroup,[locaseinsensitive]);
      RelayFace[i].WorkGroup_Name:=Data_Frm.Worker_AdoTab.FieldByName('WorkGroup_Name').AsString;
      //确定首采面
      Earliest:=true;
      for j:=1 to High(RelayFace) do
        begin
          if (RelayFace[i].Project_Id=RelayFace[j].Project_Id)and(RelayFace[i].Area_Id=RelayFace[j].Area_Id)
             and(RelayFace[i].BeginDate>RelayFace[j].BeginDate)and(RelayFace[j].Seq<>RelayFace[i].Seq) then
               begin
                 Earliest:=false;
                 break;
               end;
        end;
      //只有准备采区才存在首采面的问题
      if (RelayFace[i].BelongedAreaState='准备采区')and(Earliest) then
          RelayFace[i].FirstMine:=true;
    end;
end;

procedure TLaneInfo_Frm.BitBtn13Click(Sender: TObject);
var
i,j,t,Lane_Id,m,IdPos:integer;
TempLane_Id:integer; //给前工序排序之用
TempLane_Name:string; //给前工序排序之用
TaskName,LaneName:string;
begin
  BitBtn2.Enabled:=false;
  BitBtn8.Enabled:=false;
  BitBtn9.Enabled:=false;
  BitBtn10.Enabled:=false;
  BitBtn11.Enabled:=false;

  //由于掘进任务变化(巷道f表)引起了编号(Lane_Id)变化,需要对前置工序f表中的Lane_Id和PriorLane_Id进行调整
  AdjustDrillTask;

  //读取掘进任务信息
  ReadLaneInfo;

  //检查是否存在工序没有估算工期
  for i:=1 to High(LaneInfo) do
    begin
      if (LaneInfo[i].State<>'已完工')and((LaneInfo[i].TaskT=null)or(LaneInfo[i].TaskT=0)) then
        begin
          showmessage('’'+LaneInfo[i].Name+'‘还没有估算工期!');
          //找到没有估计工期的记录位置
          with Base_DataS.DataSet do
            begin
              first;
              while not eof do
                begin
                  if FieldByName('Lane_Id').AsInteger=LaneInfo[i].Lane_Id
                     then break;
                  next;
                end;
            end;
          exit;
        end;
    end;

  //显示自动产生的各掘进任务的前工序的信息,并可由用户进行修改
  PriorTask_Frm:=TPriorTask_Frm.Create(self);
  PriorTask_Frm.ShowModal;
  PriorTask_Frm.Free;
  PriorTask_Frm:=nil;

  //读取掘进任务前工序信息
  with Data_Frm.PriorTask_AdoTab do  //对应于“前置工序”表
    begin
      first;
      //确定前工序数目
      while not eof do
        begin



          TaskName:=FieldByName('Lane_Name').AsString;
          //原来:t:=FieldByName('Lane_Id').AsInteger;

          for i:=1 to High(LaneInfo) do
            begin
              if LaneInfo[i].Name=TaskName then //原来:if LaneInfo[i].Lane_Id=t then
                begin
                  LaneInfo[i].PriorLane_Count:=LaneInfo[i].PriorLane_Count+1;
                  break;
                end;
            end;
          next;
        end;
      for i:=1 to High(LaneInfo) do
        begin
          if LaneInfo[i].PriorLane_Count<>0 then
            begin
              setlength(LaneInfo[i].PriorLane,LaneInfo[i].PriorLane_Count+1);
            end;
        end;
      //确定前工序具体信息
      first;
      while not eof do
        begin
          TaskName:=FieldByName('Lane_Name').AsString;
          //原来:t:=FieldByName('Lane_Id').AsInteger;
          for i:=1 to High(LaneInfo) do
            begin
              if LaneInfo[i].Name=TaskName then //原来:if LaneInfo[i].Lane_Id=t then
                begin
                  j:=LaneInfo[i].tag;
                  LaneInfo[i].PriorLane[j].Lane_Id:=FieldByName('PriorLane_Id').AsInteger;
                  LaneInfo[i].PriorLane[j].Name:=FieldByName('PriorLane_Name').AsString;
                  LaneName:=LaneInfo[i].PriorLane[j].Name;
                  //原来:Lane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
                  //找到并读取前工序在“巷道”表中(Lane_AdoTab)对应的相关信息
                  for m:=1 to High(LaneInfo) do
                    begin
                      if LaneInfo[m].Name=LaneName then //原来:if LaneInfo[m].Lane_Id=Lane_Id then
                        begin
                          LaneInfo[i].PriorLane[j].Propty:=LaneInfo[m].Propty;
                          LaneInfo[i].PriorLane[j].State:=LaneInfo[m].State;
                          LaneInfo[i].PriorLane[j].TaskT:=LaneInfo[m].TaskT;
                          LaneInfo[i].PriorLane[j].LST:=LaneInfo[m].LST;
                          LaneInfo[i].PriorLane[j].LFT:=LaneInfo[m].LFT;
                          LaneInfo[i].PriorLane[j].tag:=0;
                          LaneInfo[i].PriorLane[j].Disposed:=0;
                          LaneInfo[i].PriorLane[j].BETCalculated:=false;
                          break;
                        end;
                    end;
                  LaneInfo[i].tag:=LaneInfo[i].tag+1;
                  break;
                end; //end:   if LaneInfo[i].Lane_Id=t then
            end;
          next;
        end; //end:  while not eof //确定前工序具体信息
      //把掘进任务的前工序按照Lane_Id从小到大进行排序
      for i:=1 to High(LaneInfo) do
        begin
          if LaneInfo[i].PriorLane_Count=0 then continue;
          for j:=1 to LaneInfo[i].PriorLane_Count do
            begin
              TempLane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
              TempLane_Name:=LaneInfo[i].PriorLane[j].Name;
              IdPos:=0;
              for m:=j+1 to LaneInfo[i].PriorLane_Count do
                begin
                  if LaneInfo[i].PriorLane[m].Lane_Id<TempLane_Id then
                    begin
                      TempLane_Id:=LaneInfo[i].PriorLane[m].Lane_Id;
                      TempLane_Name:=LaneInfo[i].PriorLane[m].Name;
                      IdPos:=m;
                    end;
                end;
              if IdPos>0 then //找到了比LaneInfo[i].PriorLane[j].Lane_Id还小的前工序
                begin
                  LaneInfo[i].PriorLane[IdPos].Lane_Id:=LaneInfo[i].PriorLane[j].Lane_Id;
                  LaneInfo[i].PriorLane[IdPos].Name:=LaneInfo[i].PriorLane[j].Name;
                  LaneInfo[i].PriorLane[j].Lane_Id:=TempLane_Id;
                  LaneInfo[i].PriorLane[j].Name:=TempLane_Name;
                end;
            end;
        end; //end: for i:=1 to High(LaneInfo) do //把掘进任务的前工序按照Lane_Id从小到大进行排序
    end;   //end:  with Data_Frm.PriorTask_AdoTab do  //读取掘进任务前工序信息



  //确定掘进任务的内容
  DrillTask_Frm:=TDrillTask_Frm.Create(self);
  //读取掘进任务内容
  setlength(DrillTask,DrillTask_Frm.Base_DataS.DataSet.RecordCount+1);
  with DrillTask_Frm.Base_DataS.DataSet do
    begin
      i:=1;
      First;
      while not eof do
        begin
          DrillTask[i].Id:=FieldByName('Id').AsInteger;
          DrillTask[i].Name:=FieldByName('Name').AsString;
          DrillTask[i].Task_Type:=FieldByName('Type').AsString;
          DrillTask[i].IsLastTask:=false;
          next;
          i:=i+1;
        end;
    end;
  //判断各类掘进任务的最后任务
  for i:=1 to High(DrillTask)-1 do
    begin
      if DrillTask[i].Task_Type<>DrillTask[i+1].Task_Type then
        DrillTask[i].IsLastTask:=true;
    end;
  DrillTask[High(DrillTask)].IsLastTask:=true;

  DrillTask_Frm.Free;
  DrillTask_Frm:=nil;

  //由用户输入确定采区准备完毕的提前时间,即开始进行回采巷道掘进之前要提前的时间:AreaFinshAheadTime
  AreaAheadPara_Frm:=TAreaAheadPara_Frm.Create(self);
  AreaAheadPara_Frm.ShowModal;
  try
    AreaFinishAheadTime:=strtoint(AreaAheadPara_Frm.Edit1.Text);
  except
    showmessage('请确定输入的是整型数据!这里将指定为100天,若修改,请重新进行时间计算!');
    AreaFinishAheadTime:=100;
  end;
  AreaAheadPara_Frm.Free;
  AreaAheadPara_Frm:=nil;

  CalBET_ShortDate;
  
  //显示并修改有关掘进任务开、完工时间参数
  LaneTime_Frm:=TLaneTime_Frm.Create(self);
  LaneTime_Frm.ShowModal;
  LaneTime_Frm.Free;
  showmessage('下面可以进行掘进计划安排!');
  BitBtn2.Enabled:=false;
  BitBtn8.Enabled:=false;
  BitBtn10.Enabled:=false;
  BitBtn11.Enabled:=false;

end;

procedure TLaneInfo_Frm.ReadLaneInfo;
var
i:integer;
begin
    setlength(LaneInfo,Base_DataS.DataSet.RecordCount+1);
    with Base_DataS.DataSet do
      begin
        if not active then open;
        first;
        i:=1;
        while not eof do
          begin
            LaneInfo[i].Project_Id:=FieldByName('Project_Id').AsInteger;
            LaneInfo[i].Lane_Id:=FieldByName('Lane_Id').AsInteger;
            LaneInfo[i].Name:=FieldByName('Name').AsString;
            LaneInfo[i].Propty:=FieldByName('Property').AsString;
            LaneInfo[i].Section_Area:=FieldByName('Section_Area').AsFloat;
            LaneInfo[i].Section_Type:=FieldByName('Section_Type').AsString;
            LaneInfo[i].SupportType:=FieldByName('Support_Type').AsString;
            LaneInfo[i].TechnicType:=FieldByName('Technic_Type').AsString;
            LaneInfo[i].Rock_Property:=FieldByName('Rock_Property').AsString;
            LaneInfo[i].State:=FieldByName('State').AsString;
            LaneInfo[i].WorkQuantity:=FieldByName('WorkQuantity').AsFloat;
            LaneInfo[i].DayProgress:=FieldByName('DayProgress').AsFloat;
            LaneInfo[i].TaskT:=FieldByName('TaskTime').AsInteger;
            LaneInfo[i].LST:=FieldByName('LST').AsDateTime;
            LaneInfo[i].LFT:=FieldByName('LFT').AsDateTime;
            LaneInfo[i].Face:=FieldByName('Face').AsString;
            LaneInfo[i].Area:=FieldByName('Area').AsString;
            LaneInfo[i].Disposed:=FieldByName('Disposed').AsInteger;
            //--------------------------
            LaneInfo[i].PriorLane_Count:=0;
            LaneInfo[i].tag:=1;
            LaneInfo[i].BETCalculated:=false;
            next;
            i:=i+1;
          end;
      end;
end;

procedure TLaneInfo_Frm.WriteIntoLaneTab(RelayF: TRelayFace);
var
i,j,LastId,m,n,LastSequence,Lane_Id:integer;
str,str1,str2,TaskName,LaneName:string;
begin
  if not RelayF.FirstMine then  //若不是首采面
    begin
      //逐个把掘进任务写进表中
      for i:=1 to High(DrillTask) do
        begin
          //由于不是首采面,所以该面的掘进准备工作只涉及回采巷道,
          //因此排除非回采巷道任务
          if DrillTask[i].Task_Type<>'回采' then continue;
          //只有综采和综放才存在切眼刷大的工序
          if RelayF.MineTechnicId<3 then //1:炮采,2:普采,3:综采,4:综放
            begin
              if pos('切眼刷大',DrillTask[i].Name)>0 then continue;
            end;
          //写入
          LastId:=GetLastRecId(Base_DataS.DataSet,'Lane_Id');
          Lane_Id:=LastId+1;
          with Base_DataS.DataSet do  //Base_DataS.DataSet:"巷道"表:(Data_Frm.Lane_AdoTab)
            begin
              append;
              FieldByName('Lane_Id').AsInteger:=Lane_Id;
              FieldByName('Project_Id').AsInteger:=RelayF.Project_Id;
              FieldByName('Disposed').AsInteger:=0;//初始时指定任务没有被安排,0:没有安排;1:已安排
          //---------------------------------------------------------------------------
              FieldByName('Property').AsString:='回采巷道';
              FieldByName('Name').AsString:=RelayF.Face_Name+DrillTask[i].Name;

              FieldByName('Section_Area').AsFloat:=6.6;
              FieldByName('Section_Type').AsString:='梯形'; //应指定用户常用的项目,此处暂时指定‘梯形’,‘锚喷’,‘机掘’,‘煤巷’
              FieldByName('Support_Type').AsString:='锚喷';
              FieldByName('Technic_Type').AsString:='机掘';
              FieldByName('Rock_Property').AsString:='煤巷';
              FieldByName('Area').AsString:=RelayF.Area_Name;
              FieldByName('Face').AsString:=RelayF.Face_Name;

           //--------调试:暂时先指定掘进任务工期均为50天,调试完成后去掉此处代码
            FieldByName('TaskTime').AsInteger:=50;
           //-------------------------Test-----------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -