楼主,平台的计划中心底层是这样计算那个序号的
static function TPlanCode.GetPlanTreeCode(
const APlanID, AParentPlanID: string): string;
const
cSelect = 'SELECT * FROM TPlanTreeCode WHERE FPLANID = ''%s''';
var
lQuery: TQuery;
lSerial: Integer;
lTreeCode: string;
begin
if APlanID = '' then
begin
Result := '';
Exit;
end;
lQuery := TQuery.Create(nil);
try
lQuery.ConnectionString := TPlanSpecialLogic.GetPlanConnectionString;
if (AParentPlanID <> '') and (AParentPlanID <> JSConst.cRootID) then
begin
lQuery.CommandText := SysUtils.Format(cSelect, [AParentPlanID]);
lQuery.Open;
if (lQuery.RecordCount > 0) then
begin
lSerial := lQuery.FieldByName('FCHILDRENSERIAL').AsInteger + 1;
lQuery.Edit;
end
else
begin
lSerial := 1;
lQuery.Append;
lQuery.FieldByName('FPLANID').AsString := AParentPlanID;
lQuery.FieldByName('FTREECODE').AsString := AParentPlanID;
end;
lQuery.FieldByName('FCHILDRENSERIAL').AsInteger := lSerial;
lQuery.ApplyUpdates;
lTreeCode := SysUtils.Format('%s%.5d', [
lQuery.FieldByName('FTREECODE').AsString, lSerial]);
lQuery.Close;
end
else
lTreeCode := APlanID;
lQuery.CommandText := SysUtils.Format(cSelect, [APlanID]);
lQuery.Open;
if (lQuery.RecordCount > 0) then
begin
lQuery.Edit;
end
else
begin
lQuery.Append;
lQuery.FieldByName('FPLANID').AsString := APlanID;
lQuery.FieldByName('FCHILDRENSERIAL').AsInteger := 0;
end;
lQuery.FieldByName('FTREECODE').AsString := lTreeCode;
lQuery.ApplyUpdates;
Result := lTreeCode;
finally
lQuery.Free;
end;
end;
-------------------------------------------
你可以参考着来,基本上就是本节点ID和本节点父ID来动态生成 |