📄 ufrmcaller.pas
字号:
{: 通过车辆号码找到车辆对象。
@param _sender 事件触发者
}
function TfrmCaller.getPTargetByRegistrationNO(
_registration_no: string): PTargetData;
var
i : Integer;
p_target : PTargetData;
begin
Result := nil;
for i := 0 to targetList.Count - 1 do
begin
p_target := PTargetData(targetList.Objects[i]);
if not Assigned(p_target) then
Continue;
if p_target^.RegistrationNO = _registration_no then
begin
Result := p_target;
Break;
end;
end;
end;
procedure TfrmCaller.btnCancelClick(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_protocal_dataset := TBaseODMProtocalUtils.BuildProtocalDataset(
'BCM_Task_Cancel', False, 0);
// 增加指令对象内容
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'TaskNO', p_task^.TaskNO);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'TimeCancelTask', Now);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'ReasonCancelTask', cbxCancelReason.ItemIndex + 1);
// 发送指令对象
clientLogistic.SendODMP(p_protocal_dataset);
end;
procedure TfrmCaller.btnReplyClick(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^.CallerIAFeedbackTypeID := cbxCallerIAFeedbackTypeID.ItemIndex;
// 建立对象
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', StrToIntDef(cbxCallerIAHigh.Text, -1));
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', StrToIntDef(cbxCallerIAGuestCount.Text, -1));
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'CallerIAHasPackage', cbxCallerIAHasPackage.ItemIndex + 1);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'TimeSubmitInfoAdditional', p_task^.TimeSubmitInfoAdditional);
TBaseODMProtocalUtils.BuildCommandAddParams(p_protocal_dataset^.Command,
'CallerIAFeedbackTypeID', cbxCallerIAFeedbackTypeID.ItemIndex + 1);
// 发送指令对象
clientLogistic.SendODMP(p_protocal_dataset);
end;
procedure TfrmCaller.btnContentClick(Sender: TObject);
var
address_node_data : Pointer;
p_task : PTask;
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;
frmTaskShow := TfrmTaskShow.Create(nil);
frmTaskShow.TaskShow(p_task);
frmTaskShow.ShowModal;
frmTaskShow.Free;
end;
procedure TfrmCaller.cbxCallerIBIsBookClick(Sender: TObject);
begin
if cbxCallerIBIsBook.Checked then
begin
teCallerIBBookTime.Enabled := True;
teCallerIBBookTime.SetFocus;
end
else teCallerIBBookTime.Enabled := False;
end;
procedure TfrmCaller.vtTaskTreeChange(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
i : Integer;
n : Integer;
gptlist : array of TGIS_Point;
gis_point : TGIS_Point;
address_node_data : Pointer;
p_node : PVirtualNode;
p_task : PTask;
p_target : PTargetData;
is_timer : Boolean;
p_track_data : PTargetTrackData;
begin
if vtTaskTree.Selected[Node] = False then
Exit;
BaseGisMapCall.ClearAllTarget;
is_timer := False;
gis_point.X := 0;
gis_point.Y := 0;
p_node := vtTaskTree.GetFirstSelected;
// 无选中任务
if not Assigned(p_node) then
begin
setBtnStatus(btnStatusNew);
vtTaskTree.ClearSelection;
// 清空召车人点
BaseGisMapCall.ClearCallerPoint;
Exit;
end;
SetLength(gptlist, vtTaskTree.SelectedCount);
n := 0;
while Assigned(p_node) do
begin
address_node_data := vtTaskTree.GetNodeData(p_node);
if not Assigned(address_node_data) then
Continue;
p_task := PTask(address_node_data^);
if not Assigned(p_task) then
Continue;
gis_point.X := p_task^.CallerIBPositionLon;
gis_point.Y := p_task^.CallerIBPositionLat;
gptlist[n] := gis_point;
Inc(n);
// 任务基本信息
lbTaskNO.Caption := Format('流水号: %d', [p_task^.TaskNO]);
// 任务信息
edtCallerIBPhoneNO.Text := p_task^.CallerIBPhoneNO;
cbxCallerIBMaxWaitTime.Text := IntToStr(p_task^.CallerIBMaxWaitTime);
lbLon.Caption := Format('%.6f', [p_task^.CallerIBPositionLon]);
lbLat.Caption := Format('%.6f', [p_task^.CallerIBPositionLat]);
cbxCallerIAFeedbackTypeID.ItemIndex := p_task^.CallerIAFeedbackTypeID;
// 车辆确认等待附加信息
if p_task^.Status = taskStatusConfirm then
is_timer := True
else is_timer := False;
p_target := getPTargetByRegistrationNO(p_task^.RegistrationNO);
if Assigned(p_target) then
begin
lbCommNO.Caption := Format('通信号: %s', [p_target^.CommNO]);
lbVehicleMode.Caption := Format('车辆型号: %s', [p_target^.VehicleModel]);
lbAppearanceType.Caption := Format('车辆外观: %s', [p_target^.AppearanceType]);
lbDriverName.Caption := Format('司机姓名: %s', [p_target^.DriverName]);
lbDriverMobileNO.Caption := Format('手机号码: %s', [p_target^.DriverMobileNO]);
for i := 0 to p_target^.TrackList.Count - 1 do
begin
p_track_data := PTargetTrackData(p_target^.TrackList.Objects[i]);
if not Assigned(p_track_data) then
Continue;
BaseGisMapCall.ReceiveGpsData(p_task^.RegistrationNO, p_track_data^.GPSPosTime,
p_track_data^.GPSLon, p_track_data^.GPSLat, p_track_data^.GPSHeading,
p_track_data^.GPSSpeed, True, False, False);
end;
end;
p_node := vtTaskTree.GetNextSelected(p_node);
end;
setBtnStatus(btnStatusSelect);
if is_timer then
begin
btnConfirmAdditionalInfo.Enabled := True;
Timer1.Enabled := True;
end
else begin
Timer1.Enabled := False;
btnConfirmAdditionalInfo.Colors.Default := clDefault;
btnConfirmAdditionalInfo.Colors.Normal := clDefault;
btnConfirmAdditionalInfo.Colors.Hot := clDefault;
btnConfirmAdditionalInfo.Colors.Pressed := clDefault;
btnConfirmAdditionalInfo.Colors.Disabled := clDefault;
btnConfirmAdditionalInfo.Enabled := False;
end;
// 增加召车人点
BaseGisMapCall.AddCallerPoint(gptlist);
end;
procedure TfrmCaller.vtTaskTreeMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
p_node : PVirtualNode;
begin
p_node := vtTaskTree.GetNodeAt(X, Y);
if not Assigned(p_node) then
begin
Timer1.Enabled := False;
btnConfirmAdditionalInfo.Colors.Default := clDefault;
btnConfirmAdditionalInfo.Colors.Normal := clDefault;
btnConfirmAdditionalInfo.Colors.Hot := clDefault;
btnConfirmAdditionalInfo.Colors.Pressed := clDefault;
btnConfirmAdditionalInfo.Colors.Disabled := clDefault;
setBtnStatus(btnStatusNew);
BaseGisMapCall.ClearAllTarget;
BaseGisMapCall.ClearCallerPoint;
end;
// else vtTaskTreeChange(vtTaskTree, p_node);
end;
procedure TfrmCaller.Timer1Timer(Sender: TObject);
begin
if btnConfirmAdditionalInfo.Colors.Default = clDefault then
begin
btnConfirmAdditionalInfo.Colors.Default := clRed;
btnConfirmAdditionalInfo.Colors.Normal := clRed;
btnConfirmAdditionalInfo.Colors.Hot := clRed;
btnConfirmAdditionalInfo.Colors.Pressed := clRed;
btnConfirmAdditionalInfo.Colors.Disabled := clRed;
end
else begin
btnConfirmAdditionalInfo.Colors.Default := clDefault;
btnConfirmAdditionalInfo.Colors.Normal := clDefault;
btnConfirmAdditionalInfo.Colors.Hot := clDefault;
btnConfirmAdditionalInfo.Colors.Pressed := clDefault;
btnConfirmAdditionalInfo.Colors.Disabled := clDefault;
end;
end;
procedure TfrmCaller.vtMemoGetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
address_node_data : Pointer;
p_memo : PMemoData;
begin
CellText := '';
address_node_data := vtMemo.GetNodeData(Node);
if not Assigned(address_node_data) then
Exit;
p_memo := PMemoData(address_node_data^);
if not Assigned(p_memo) then
Exit;
if Column < 0 then
Exit;
case Column of
0: CellText := p_memo^.Str;
end;
end;
procedure TfrmCaller.vtMemoFreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
address_node_data : Pointer;
p_memo : PMemoData;
begin
address_node_data := vtMemo.GetNodeData(Node);
if not Assigned(address_node_data) then
Exit;
p_memo := PMemoData(address_node_data^);
if Assigned(p_memo) then
Dispose(p_memo);
end;
procedure TfrmCaller.edtCallerIBPhoneNOKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', '-', #8]) then
Key := #0;
end;
procedure TfrmCaller.cbxCallerIBMaxWaitTimeKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then
Key := #0;
end;
procedure TfrmCaller.cbxCallerIAHighKeyPress(Sender: TObject;
var Key: Char);
begin
if not (Key in ['0'..'9', #8]) then
Key := #0;
end;
procedure TfrmCaller.vtTaskTreePaintText(Sender: TBaseVirtualTree;
const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
TextType: TVSTTextType);
var
address_node_data : Pointer;
p_task : PTask;
begin
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;
if p_task^.Status = taskStatusContact then
TargetCanvas.Font.Color := clBlack
else if p_task^.Status = taskStatusConfirm then
TargetCanvas.Font.Color := clRed
else TargetCanvas.Font.Color := clGreen;
end;
function TfrmCaller.getPNodeByTask(_p_task: PTask): PVirtualNode;
var
address_node_data : Pointer;
p_task : PTask;
p_node : PVirtualNode;
begin
Result := nil;
p_node := vtTaskTree.GetFirst;
while Assigned(p_node) do
begin
address_node_data := vtTaskTree.GetNodeData(p_node);
if not Assigned(address_node_data) then
begin
p_node := vtTaskTree.GetNext(p_node);
Continue;
end;
p_task := PTask(address_node_data^);
if p_task = _p_task then
begin
Result := p_node;
Break;
end;
p_node := vtTaskTree.GetNext(p_node);
end;
end;
procedure TfrmCaller.btnSelectPointClick(Sender: TObject);
begin
if mmCallerIAOtherInfo.Text <> '' then
BaseGisMapCall.SelectPoint(Trim(mmCallerIAOtherInfo.Text));
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -