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

📄 minerelay_unt.pas

📁 煤矿行业采掘接替计划自动生成系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit MineRelay_Unt;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Relay_BaseUnt, DB, DBCtrls, Grids, DBGrids, StdCtrls, Buttons,
  ExtCtrls, ADODB, ComCtrls, Menus;

type
  TRelayFaceInfo=record
    Project_Id:integer;
    Id:integer;
    Name:string;
    Arrayed:boolean;
  end;
  TInterval=record
    MineTechnic:integer;
    FixPrepareTime:integer;
    IntervalTime:integer;
  end;
  TMineRelay_Frm = class(TRelay_BaseFrm)
    MineGroup_DataS: TDataSource;
    Face_DataS: TDataSource;
    MineGroup_AdoQ: TADOQuery;
    Face_AdoQ: TADOQuery;
    Area_DataS: TDataSource;
    AllFace_DataS: TDataSource;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    PopupMenu2: TPopupMenu;
    N2: TMenuItem;
    Face_AdoQFace_Id: TIntegerField;
    Face_AdoQName: TStringField;
    Face_AdoQFace_Type: TIntegerField;
    Face_AdoQMine_Height: TFloatField;
    Face_AdoQTechnic_Type: TIntegerField;
    Face_AdoQObliquity: TFloatField;
    Face_AdoQMiningArea: TIntegerField;
    Face_AdoQMined: TIntegerField;
    Face_AdoQCoal: TIntegerField;
    Face_AdoQFinish_Length: TIntegerField;
    Face_AdoQReserve: TFloatField;
    Face_AdoQRemain_Reserve: TFloatField;
    Face_AdoQField: TStringField;
    N3: TMenuItem;
    N4: TMenuItem;
    Face_AdoQFace_Length: TIntegerField;
    Face_AdoQPush_Length: TIntegerField;
    N5: TMenuItem;
    Face_AdoQDay_Progress: TFloatField;
    Face_AdoQConsistency: TFloatField;
    Face_AdoQTaskTime: TIntegerField;
    Face_AdoQDay_Output: TIntegerField;
    procedure FormCreate(Sender: TObject);
    procedure DBLookupComboBox3Click(Sender: TObject);
    procedure DBLookupListBox1DblClick(Sender: TObject);
    procedure DBLookupListBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn8Click(Sender: TObject);
    procedure BitBtn9Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    //procedure DBLookupListBox1Enter(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    //记录各种回采工艺的安装准备时间和接替间隔时间
    IntervalPara:array of TInterval;
    procedure AddPost_NewRelayTask;//在表的最后添加一条记录
    procedure InsertPost_NewRelayTask; //在当前记录的前面插入一条记录
    function FaceArrayFinished:boolean;//检查待安排的回采面是否被安排完毕

    procedure MineRelay_StripGraph; //将回采接替计划导入Project
    procedure MineRelayTrace;  //将采煤生产的实际情况导入到Project,以进行采煤计划的跟踪管理
    procedure MineRelay_Report;//将回采接替计划按照要求在Excel中形成报表
  end;

var
  MineRelay_Frm: TMineRelay_Frm;

implementation
uses Data_Unt,TimePara_Unt,MineRelayInterval_Unt,MineTechPopup_Unt,
      DrillAssurance_Unt,FaceInfo_Unt,DrillRelay_Unt, Main_Unt,
      CAD_Pro_Exc_Unt,LaneInfo_Unt,ReportCondition_Unt,Hint_Unt;
{$R *.dfm}

procedure TMineRelay_Frm.FormCreate(Sender: TObject);
var
str:string;
i,n:integer;
begin
  MineRelay_FrmCreated:=true;
  
  inherited;
  n:=MineInterval_DataS.DataSet.RecordCount;
  SetLength(IntervalPara,n+1);
  with MineInterval_DataS.DataSet do
    begin
      first;
      for i:=1 to n do
        begin
          IntervalPara[i].MineTechnic:=FieldByName('Technic_Type').AsInteger;
          IntervalPara[i].FixPrepareTime:=FieldByName('FixPrepare_Time').AsInteger;
          IntervalPara[i].IntervalTime:=FieldByName('Interval_Time').AsInteger;
          next;
        end;
    end;
  //从施工队中查找采煤队
  with MineGroup_AdoQ do
    begin
      close;
      sql.Clear;
      sql.Add('select WorkGroup_Type,WorkGroup_Name,WorkGroup_Id from 施工队f');
      sql.Add('where WorkGroup_Type=:r');
      str:='采煤';
      parameters.ParamByName('r').Value:=str;
      ExecSQL;
      open;
    end;
  DBLookUpComboBox2.ListSource:=MineGroup_DataS;
  DBLookUpComboBox2.ListField:='WorkGroup_Name';
  DBLookUpComboBox2.KeyField:='WorkGroup_Id';
  DBLookUpComboBox2.DataSource:=Base_DataS;
  DBLookUpComboBox2.DataField:='WorkGroup';
end;

procedure TMineRelay_Frm.DBLookupComboBox3Click(Sender: TObject);
var
str:string;
begin
  str:=DBLookUpComboBox3.Text;
  if str='' then
    begin
      showmessage('请输入相应的采区!');
      exit;
    end;
  if Area_DataS.DataSet.Locate('Area_Name',str,[locaseinsensitive])
  then
    with Face_AdoQ do
      begin
        close;
        //sql.Clear;
        //sql.Add('select Face_Id,Name,MiningArea,Mined,Remain_Reserve,Technic_Type,Day_Output from 回采面');
        //sql.Add('where (MiningArea=:v1) and (Mined<>0)'); //Mined<>0意思是该回采面没有回采完毕,是正在回采或者待采的面
        parameters.ParamByName('v1').Value:=Area_DataS.DataSet.fieldbyname('Area_Id').AsInteger;
        ExecSQL;
        open;
      end
  else exit;
  DBLookUpListBox1.ListSource:=Face_DataS;//Face_DataS的数据集对应Face_AdoQ
  DBLookUpListBox1.ListField:='Name';
  DBLookUpListBox1.KeyField:='Face_Id';
  //DBLookUpListBox1.DataSource:=Area_DataS;
  //DBLookUpListBox1.DataField:='';
end;

procedure TMineRelay_Frm.DBLookupListBox1DblClick(Sender: TObject);
begin
 if InsertMode then
   begin
     InsertPost_NewRelayTask;
     Face_AdoQ.Close;
     DBLookupListBox1.Refresh;
   end;
 if AddMode then
   begin
     AddPost_NewRelayTask;
     Face_AdoQ.Close;
     DBLookupListBox1.Refresh;
   end;
end;

procedure TMineRelay_Frm.DBLookupListBox1KeyDown(Sender: TObject;
  var Key: Word; Shift: TShiftState);
begin
  if key=VK_RETURN then
    begin
      if InsertMode then
         begin
           InsertPost_NewRelayTask;
           Face_AdoQ.Close;
           DBLookupListBox1.Refresh;
         end;
      if AddMode then
         begin                        
           AddPost_NewRelayTask;
           Face_AdoQ.Close;
           DBLookupListBox1.Refresh;
         end;
    end;
end;

procedure TMineRelay_Frm.BitBtn3Click(Sender: TObject);
var
i,j,Pro_Id:integer;
Inf,Inf1:Variant;
EditFace:integer;
EditFaceName:string;
EditBeginDate,EditEndDate:TDate;
BeginDay:integer;
Remain,DayOutput:single;
AddTaskTime:integer;
DelT:integer;//计算当前记录修改后的结束时间与原结束时间之间的差
BK:TBookMark;

begin
  if EditMode then
    begin

      //若没有做任何修改,则退出,并做相关处理
      if(not FaceIsEdit)and(not BeginDateChange)and(not EndDateChange)then
        begin
           showmessage('没有做任何修改!');
           Base_DataS.DataSet.Cancel; //取消表的添加操作
           EditMode:=false;
           BitBtn3.Enabled:=false;
           BitBtn1.Enabled:=true;
           BitBtn2.Enabled:=true;
           BitBtn4.Enabled:=true;
           BitBtn5.Enabled:=true;
           BitBtn6.Enabled:=true;
           BitBtn7.Enabled:=true;
           BitBtn8.Enabled:=true;
           BitBtn9.Enabled:=true;
           BitBtn10.Enabled:=true;
           BitBtn11.Enabled:=true;
           BitBtn12.Enabled:=true;

           DBLookUpComboBox2.Enabled:=false;
           DBLookUpComboBox3.Enabled:=false;
           DBLookUpListBox1.Enabled:=false;
           Label6.Visible:=false;
           Label7.Visible:=false;
           DateTimePicker1.Visible:=false;
           DateTimePicker2.Visible:=false;
           exit;
        end;
      //对修改的回采面的开始时间和结束时间进行判断

      EditBeginDate:=trunc(DateTimePicker1.Date);
      EditEndDate:=trunc(DateTimePicker2.Date);
      if BeginDateChange and EndDateChange then //开始时间和结束时间均修改了
        begin
          if EditBeginDate>=EditEndDate then
            begin
              showmessage('结束时间应该在开始时间之后!');
              DateTimePicker2.SetFocus;
              exit;
            end;
        end;
      if BeginDateChange then //仅仅修改了开始时间,或者开始与结束时间都修改了
        begin
          if Current.Sequence<>1 then
            begin
              if Current.Relay_Id<>1 then
                begin
                  if EditBeginDate<=CurrentPriorRelay.E_Date then
                    begin
                      showmessage('本回采面的开始时间应该在上一个回采面结束以后!');
                      DateTimePicker1.SetFocus;
                      exit;
                    end;
                end;
            end;
        end;

      if (not BeginDateChange)and(EndDateChange) then //仅仅修改了结束时间
        begin
          if EditEndDate<=Current.B_Date then
            begin
              showmessage('修改后的结束时间应在本回采面的开始时间之后!');
              DateTimePicker2.SetFocus;
              exit;
            end;
        end;
      

      Inf:=messagedlg('确认修改吗?',mtconfirmation,[mbyes,mbno],0);
      if Inf=mryes
        then
          begin
            if (FaceIsEdit)and(DBLookUpListBox1.SelectedItem<>'') then
                begin
                  EditFace:=Face_DataS.DataSet.FieldByName('Face_Id').AsInteger;
                  EditFaceName:=Face_DataS.DataSet.FieldByName('Name').AsString;
                  //.......要根据不同情况对采煤队编号,接替号和工作面进行处理.....
                  for i:=1 to High(Relay) do
                    begin
                      if (Relay[i].Project_Id=Current.Project_Id)
                          and(Relay[i].Face_Lane=EditFace)then
                        begin
                           if Current.Face_Lane=EditFace then break;//可以允许保持原记录的回采面不变
                           Inf1:=messagedlg('该方案中不能重复接替 "'+EditFaceName+'" 回采面,请重新指定!继续请按"yes"!',mtconfirmation,[mbyes,mbno],0);
                           if Inf1=mrno then
                             begin
                               Base_DataS.DataSet.Cancel; //取消表的添加操作
                               EditMode:=false;
                               BitBtn3.Enabled:=false;

⌨️ 快捷键说明

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