📄 ufrmcaller.pas
字号:
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 + -