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

📄 ufrmcaller.pas

📁 a voice guide client ,it is the second part of voice guide center
💻 PAS
📖 第 1 页 / 共 4 页
字号:
procedure TfrmCaller.doOnWMCopyData(var Msg: TWMCopyData);
var
  p_gis_point        : PGIS_Point;
  gis_point          : TGIS_Point;
  copy_data_struc    : PCopyDataStruct;
begin
  copy_data_struc:= Msg.CopyDataStruct;
  p_gis_point:= copy_data_struc.lpData;
  lbLon.Caption := Format('%.6f', [p_gis_point.X]);
  lbLat.Caption := Format('%.6f', [p_gis_point.Y]);

  gis_point.X := p_gis_point.X;
  gis_point.Y := p_gis_point.Y;

  BaseGisMapCall.AddCallerPoint(gis_point);

  btnConfirmBaseInfo.Enabled := True;
  // 取点之后 就算开始召车
  timeCall := Now;
end;

//------------------------------------------------------------------------------
//  私有方法 -- 窗口管理
//------------------------------------------------------------------------------

procedure TfrmCaller.iniBaseGisMapCall;
begin
  BaseGisMapCall.InitialForm(Self);
end;

{: 重制详细信息。}
procedure TfrmCaller.resetStatus;
begin
  cbxCallerIAName.ItemIndex := 0;
  cbxCallerIAHigh.ItemIndex := 0;
  cbxCallerIASex.ItemIndex := 0;
  cbxCallerIAGuestCount.ItemIndex := 0;
  cbxCallerIAAgeSegmentID.ItemIndex := 0;
  cbxCallerIAHasPackage.ItemIndex := 0;
  mmCallerIAOtherInfo.Text := '详细信息(&O)';
end;

{: 设置按钮状态。
  @param _status     状态
}
procedure TfrmCaller.setBtnStatus(_status: TBtnStatus);
begin
  case _status of
    btnStatusNew:
    begin
      btnConfirmBaseInfo.Enabled := False;
      btnGetPoint.Enabled := True;
      btnConfirmAdditionalInfo.Enabled := False;
      btnCancel.Enabled := False;
      btnContent.Enabled := False;
      btnReply.Enabled := False;

      Timer1.Enabled := False;
      btnConfirmAdditionalInfo.Colors.Default   := clDefault;
      btnConfirmAdditionalInfo.Colors.Normal    := clDefault;
      btnConfirmAdditionalInfo.Colors.Hot       := clDefault;
      btnConfirmAdditionalInfo.Colors.Pressed   := clDefault;
      btnConfirmAdditionalInfo.Colors.Disabled  := clDefault;

      edtCallerIBPhoneNO.Text := '';
      cbxCancelReason.ItemIndex := 0;
      cbxCallerIAFeedbackTypeID.ItemIndex := 0;
      teCallerIBBookTime.Enabled := False;

      lbTaskNO.Caption := '流水号:';
      lbCommNO.Caption := '通信号:';
      lbVehicleMode.Caption := '车辆型号:';
      lbAppearanceType.Caption := '车辆外观:';
      lbDriverName.Caption := '司机姓名:';
      lbDriverMobileNO.Caption := '手机号码:';
      lbCallerIBPositionLon.Caption := '召车人经度:';
      lbCallerIBPositionLat.Caption := '召车人纬度:';
      lbLon.Caption := '';
      lbLat.Caption := '';
    end;
    btnStatusSelect:
    begin
      btnConfirmBaseInfo.Enabled := False;
      btnGetPoint.Enabled := False;
      btnConfirmAdditionalInfo.Enabled := True;
      btnCancel.Enabled := True;
      btnContent.Enabled := True;
      btnReply.Enabled := True;
    end;
  end;
end;

{: 初始化树。
}
procedure TfrmCaller.iniTialVtTaskTree;
var
  vt_column : TVirtualTreeColumn;
begin
  vt_column       := vtTaskTree.Header.Columns.Add;
  vt_column.Text  := '召车时间';
  vt_column.Width := 130;
  vt_column       := vtTaskTree.Header.Columns.Add;
  vt_column.Text  := '状态';
  vt_column.Width := 60;
  vt_column       := vtTaskTree.Header.Columns.Add;
  vt_column.Text  := '车牌号码';
  vt_column.Width := 80;
  vt_column       := vtTaskTree.Header.Columns.Add;
  vt_column.Text  := '召车人电话';
  vt_column.Width := 80;

  vt_column       := vtMemo.Header.Columns.Add;
  vt_column.Text  := '任务日志';
  vt_column.Width := 300;
end;

{: 刷新任务列表。}
procedure TfrmCaller.refreshTaskList(_p_task: PTask);
var
  node : PVirtualNode;
begin
  node := nil;

  if Assigned(_p_task) then
    node := vtTaskTree.AddChild(nil, _p_task);

  if Assigned(node) then
    vtTaskTree.Selected[node] := True;

  vtTaskTree.Invalidate;
end;

{: 填充任务树内容。}
procedure TfrmCaller.vtTaskTreeGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  address_node_data     : Pointer;
  p_task                : PTask;
begin
  CellText  := '';

  address_node_data := vtTaskTree.GetNodeData(Node);
  if not Assigned(address_node_data) then
    Exit;

  p_task := PTask(address_node_data^);
  if not Assigned(p_task) then
    Exit;

  if Column < 0  then
    Exit;

  case Column of
    0: CellText  := FormatDateTime('yyyy-mm-dd hh:mm:ss', p_task^.TimeCall);
    1: CellText  := getTaskStatusType(p_task^.Status);
    2: CellText  := p_task^.RegistrationNO;
    3: CellText  := p_task^.CallerIBPhoneNO;
  end;
end;

{: 获取任务状态信息。
  @param _task_status     任务状态
  @result            任务状态信息
}
function TfrmCaller.getTaskStatusType(_status: TITaxiServiceTaskManagerTaskStatus): string;
begin
  Result := '';
  
  case _status of
    taskStatusContact   : Result := '联系中';
    taskStatusConfirm   : Result := '司机确认等待附加信息';
    taskStatusGoing     : Result := '前往中';
  end;
end;

{: 获取任务结束信息。
  @param _task_result     任务结束状态
  @result                 任务结束信息
}
function TfrmCaller.getTaskResultType(_result: TITaxiServiceTaskManagerTaskResult): string;
begin
  Result := '';

  case _result of
    taskResultFail        : Result := '联系车失败';
    taskResultSuccess     : Result := '任务完成';
    taskResultBreak       : Result := '中途载客';
    taskResultDelay       : Result := '无法及时前往';
    taskResultDisconnect  : Result := '车辆断线';
    taskResultCancel      : Result := '任务取消';
  end;
end;

//------------------------------------------------------------------------------
//  私有方法 -- 任务管理
//------------------------------------------------------------------------------

{: 通过任务对象找到列表序号。}
function TfrmCaller.getTaskListIndexByPTask(_p_task: PTask): Integer;
var
  i       : Integer;
  p_task  : PTask;
begin
  result := -1;
  
  for i := taskList.Count - 1 downto 0 do
  begin
    p_task := PTask(taskList.Objects[i]);
    if not Assigned(p_task) then
      Continue;

    if p_task = _p_task then
    begin
      result := i;
      Break;
    end;
  end;
end;

{: 释放任务对象。}
procedure TfrmCaller.clearPTask(_p_task: PTask);
var
  i       : Integer;
  p_reject: PRejectTaxi;
begin
  // 清空任务的车辆对象
  clearPTargetByName(_p_task^.RegistrationNO);

  for i := _p_task^.RejectTaxiIDList.Count - 1 downto 0 do
  begin
    p_reject := PRejectTaxi(_p_task^.RejectTaxiIDList.Objects[i]);
    if not Assigned(p_reject) then
      Continue;

    Dispose(p_reject);
  end;

  _p_task^.RejectTaxiIDList.Free;

  taskList.Delete(getTaskListIndexByPTask(_p_task));
  Dispose(_p_task);
end;

{: 清空任务列表。}
procedure TfrmCaller.clearTaskList;
var
  i       : Integer;
  j       : Integer;
  p_task  : PTask;
  p_reject: PRejectTaxi;
begin
  for i := taskList.Count - 1 downto 0 do
  begin
    p_task := PTask(taskList.Objects[i]);
    if not Assigned(p_task) then
      Continue;

    if not Assigned(p_task^.RejectTaxiIDList) then
      Continue;

    for j := p_task^.RejectTaxiIDList.Count - 1 downto 0 do
    begin
      p_reject := PRejectTaxi(p_task^.RejectTaxiIDList.Objects[j]);
      if not Assigned(p_reject) then
        Continue;

      Dispose(p_reject);
    end;

    p_task^.RejectTaxiIDList.Free;
    Dispose(p_task);
  end;

  taskList.Clear;
  vtTaskTree.Clear;
end;

{: 清空车辆列表。}
procedure TfrmCaller.clearTargetList;
var
  i         : Integer;
  p_target  : PTargetData;
begin
  for i := targetList.Count - 1 downto 0 do
  begin
    p_target := PTargetData(targetList.Objects[i]);
    if not Assigned(p_target) then
      Continue;

    TBaseODMProtocalUtils.DisposeStringList(p_target.TrackList);

    Dispose(p_target);
  end;

  targetList.Clear;
end;

{: 清空车辆。
  @param _reg_no  车牌号码
}
procedure TfrmCaller.clearPTargetByName(_reg_no: string);
var
  i         : Integer;
  p_target  : PTargetData;
begin
  if _reg_no = '' then
    Exit;

  for i := targetList.Count - 1 downto 0 do
  begin
    p_target := PTargetData(targetList.Objects[i]);
    if not Assigned(p_target) then
      Continue;

    if p_target^.RegistrationNO = _reg_no then
    begin
      TBaseODMProtocalUtils.DisposeStringList(p_target.TrackList);
      Dispose(p_target);
      targetList.Delete(i);
      Break;
    end;
  end;
end;

{: 提交基本信息。}
procedure TfrmCaller.btnConfirmBaseInfoClick(Sender: TObject);
var
  p_protocal_dataset    : PBaseODMProtocalDataset;
  wait_time             : Integer;
  book_time             : TDateTime;
begin
  if edtCallerIBPhoneNO.Text = '' then
  begin
    ShowMessage('请输入来电号码!');
    Exit;
  end;

  // 建立对象
  p_protocal_dataset := TBaseODMProtocalUtils.BuildProtocalDataset(
    'BCM_Task_InfoBase', False, 0);

  // 增加指令对象内容
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'SeatUserName', userSeatName);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBPhoneNO', Trim(edtCallerIBPhoneNO.Text));
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBPositionLon', StrToFloatDef(lbLon.Caption, 0));
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBPositionLat', StrToFloatDef(lbLat.Caption, 0));
  if cbxCallerIBMaxWaitTime.Text = '' then
    wait_time := gMaxWaitTime
  else wait_time := StrToIntDef(cbxCallerIBMaxWaitTime.Text, gMaxWaitTime);

  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBMaxWaitTime', wait_time);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBIsBook', cbxCallerIBIsBook.Checked);
  book_time := teCallerIBBookTime.Time;
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIBBookTime', book_time);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'TimeCall', timeCall);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'TimeSubmitInfoBase', Now);

  // 发送指令对象
  clientLogistic.SendODMP(p_protocal_dataset);
end;

{: 提交附加信息。}
procedure TfrmCaller.btnConfirmAdditionalInfoClick(Sender: TObject);
var
  address_node_data     : Pointer;
  p_task                : PTask;
  p_protocal_dataset    : PBaseODMProtocalDataset;
  p_node                : PVirtualNode;
begin
  p_node := vtTaskTree.GetFirstSelected;
  if not Assigned(p_node) then
    Exit;

  address_node_data := vtTaskTree.GetNodeData(p_node);
  if not Assigned(address_node_data) then
    Exit;

  p_task := PTask(address_node_data^);
  if not Assigned(p_task) then
    Exit;

  p_task^.CallerIAName := Trim(cbxCallerIAName.Text);
  if cbxCallerIASex.ItemIndex = 0 then
    p_task^.CallerIAGender  := True
  else p_task^.CallerIAGender := False;
  p_task^.CallerIAHeight := StrToIntDef(cbxCallerIAHigh.Text, -1);
  p_task^.CallerIAAgeSegmentID    := cbxCallerIAAgeSegmentID.ItemIndex;
  p_task^.CallerIAOtherInfo       := mmCallerIAOtherInfo.Text;
  p_task^.CallerIAGuestCount  := StrToIntDef(cbxCallerIAGuestCount.Text, -1);
  p_task^.CallerIAHasPackage  := cbxCallerIAHasPackage.ItemIndex;
  p_task^.CallerHasInfoAdditional  := True;
  p_task^.TimeSubmitInfoAdditional := now;

  // 建立对象
  p_protocal_dataset := TBaseODMProtocalUtils.BuildProtocalDataset(
    'BCM_Task_InfoAdditional', False, 0);

  // 增加指令对象内容
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'TaskNO', p_task^.TaskNO);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'SeatUserName', p_task^.SeatUserName);
  if cbxCallerIAName.ItemIndex = 0 then
    TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
      'CallerIAName', '')
  else  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
          'CallerIAName', cbxCallerIAName.Text);

  if cbxCallerIASex.ItemIndex = 0 then
    TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
      'CallerIAGender', True)
  else TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
        'CallerIAGender', False);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAHeight', p_task^.CallerIAHeight);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAAgeSegmentID', cbxCallerIAAgeSegmentID.ItemIndex + 1);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAOtherInfo', mmCallerIAOtherInfo.Text);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAGuestCount', p_task^.CallerIAGuestCount);
  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAHasPackage', cbxCallerIAHasPackage.ItemIndex + 1);

  TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
    'CallerIAFeedbackTypeID', 6);

⌨️ 快捷键说明

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