delphi rest代码工厂使用

delphi rest代码工厂使用

代码工厂所生成的代码,以轻量化、跨平台、跨语言为目的。

支持基础资料(单表)、单据主从表(多表)、一对多的代码生成。

支持JSON和GOOGLE PROTOBUF二种数据序列格式。

配置数据库连接

delphi rest代码工厂使用

1)商品资料(基础资料)代码生成

delphi rest代码工厂使用

csharp;gutter:true; unit rest.tgoods; //代码由代码工厂自动生成 //2022-07-19 {$I def.inc} interface</p> <p>uses {$IFDEF firedac} db.firedac, db.firedacPool, {$ENDIF} {$IFDEF unidac}db.unidac, db.unidacpool, {$ENDIF} classes, db, System.NetEncoding, system.JSON.Serializers, yn.log, system.JSON, SysUtils, json.help;</p> <p>type Ttgoods = record [Serialize(1)] goodsid: string; [Serialize(2)] barcode: string; [Serialize(3)] goodsname: string; [Serialize(4)] pyjm: string; [Serialize(5)] gg: string; [Serialize(6)] kindid: string; [Serialize(7)] jj: double; [Serialize(8)] lsj: double; [Serialize(9)] kcxx: double; [Serialize(10)] kcsx: double; [Serialize(11)] unitid: string; [Serialize(12)] kindname: string; [Serialize(13)] unitname: string; end;</p> <p>TtgoodsArray = record [Serialize(1)] status: integer; [Serialize(2)] exception: string; [Serialize(3)] message: string; [Serialize(4)] tgoodss: TArray; end;</p> <p>TRes = record [Serialize(1)] status: integer; [Serialize(2)] exception: string; [Serialize(3)] message: string; end;</p> <p>function select(url: string; body: TBytes): string;</p> <p>function insert(url: string; body: TBytes): string;</p> <p>function update(url: string; body: TBytes): string;</p> <p>function delete(url: string; body: TBytes): string;</p> <p>implementation</p> <p>function select(url: string; body: TBytes): string; var db: tdb; pool: tdbpool; arr: TArray; serial: TJsonSerializer; rows: TtgoodsArray; i: integer; res: TRes; begin serial := TJsonSerializer.Create; try try arr := url.Split(['/']); pool := GetDBPool(arr[4]); db := pool.Lock; db.qry.Close; db.qry.SQL.Clear; var where: string := ''; if high(arr) >= 5 then where := ' where ' + TNetEncoding.URL.Decode(arr[5]); db.qry.SQL.Text := 'select * from tgoods' + where; db.qry.Open; if db.qry.isempty then begin rows.status := 0; rows.exception := 'No found any data.'; result := serial.Serialize(rows); exit; end; SetLength(rows.tgoodss, db.qry.RecordCount); db.qry.First; i := 0; while not db.qry.Eof do begin rows.tgoodss[i].goodsid := db.qry.fieldbyname('goodsid').asstring; rows.tgoodss[i].barcode := db.qry.fieldbyname('barcode').asstring; rows.tgoodss[i].goodsname := db.qry.fieldbyname('goodsname').asstring; rows.tgoodss[i].pyjm := db.qry.fieldbyname('pyjm').asstring; rows.tgoodss[i].gg := db.qry.fieldbyname('gg').asstring; rows.tgoodss[i].kindid := db.qry.fieldbyname('kindid').asstring; rows.tgoodss[i].jj := db.qry.fieldbyname('jj').AsFloat; rows.tgoodss[i].lsj := db.qry.fieldbyname('lsj').AsFloat; rows.tgoodss[i].kcxx := db.qry.fieldbyname('kcxx').AsFloat; rows.tgoodss[i].kcsx := db.qry.fieldbyname('kcsx').AsFloat; rows.tgoodss[i].unitid := db.qry.fieldbyname('unitid').asstring; rows.tgoodss[i].kindname := db.qry.fieldbyname('kindname').asstring; rows.tgoodss[i].unitname := db.qry.fieldbyname('unitname').asstring; inc(i); db.qry.Next; end; rows.status := 1; rows.message := 'success'; result := serial.Serialize(rows); except on E: Exception do begin res.status := 0; res.exception := E.message; result := serial.Serialize(res); end; end; finally pool.Unlock(db); serial.Free; end; end;</p> <p>function insert(url: string; body: TBytes): string; var db: tdb; pool: tdbpool; arr: tarray; serial: TJsonSerializer; res: TRes; begin serial := TJsonSerializer.Create; try try var rows: TtgoodsArray; rows := serial.Deserialize(TEncoding.UTF8.GetString(body)); arr := url.Split(['/']); pool := GetDBPool(arr[4]); db := pool.Lock; db.startTrans; for var row: Ttgoods in rows.tgoodss do begin db.qry.Close; db.qry.SQL.Clear; db.qry.SQL.Text := 'insert into tgoods (goodsid,barcode,goodsname,pyjm,gg,kindid,jj,lsj,kcxx,kcsx,unitid,kindname,unitname) values (:goodsid,:barcode,:goodsname,:pyjm,:gg,:kindid,:jj,:lsj,:kcxx,:kcsx,:unitid,:kindname,:unitname)'; db.qry.ParamByName('goodsid').AsString := row.goodsid; db.qry.ParamByName('barcode').AsString := row.barcode; db.qry.ParamByName('goodsname').AsString := row.goodsname; db.qry.ParamByName('pyjm').AsString := row.pyjm; db.qry.ParamByName('gg').AsString := row.gg; db.qry.ParamByName('kindid').AsString := row.kindid; db.qry.ParamByName('jj').AsFloat := row.jj; db.qry.ParamByName('lsj').AsFloat := row.lsj; db.qry.ParamByName('kcxx').AsFloat := row.kcxx; db.qry.ParamByName('kcsx').AsFloat := row.kcsx; db.qry.ParamByName('unitid').AsString := row.unitid; db.qry.ParamByName('kindname').AsString := row.kindname; db.qry.ParamByName('unitname').AsString := row.unitname; db.qry.ExecSQL; end; db.commitTrans; res.status := 1; res.message := 'success'; Result := serial.Serialize(res); except on E: Exception do begin db.rollbackTrans; res.status := 0; res.exception := E.Message; Result := serial.Serialize(res); end; end; finally pool.Unlock(db); serial.Free; end; end;</p> <p>function update(url: string; body: TBytes): string; var db: tdb; pool: tdbpool; arr: tarray; serial: TJsonSerializer; res: TRes; begin serial := TJsonSerializer.Create; try try var rows: TtgoodsArray; rows := serial.Deserialize(TEncoding.UTF8.GetString(body)); arr := url.Split(['/']); pool := GetDBPool(arr[4]); db := pool.Lock; db.startTrans; for var row: Ttgoods in rows.tgoodss do begin db.qry.Close; db.qry.SQL.Clear; db.qry.SQL.Text := 'update tgoods set goodsid=:goodsid,barcode=:barcode,goodsname=:goodsname,pyjm=:pyjm,gg=:gg,kindid=:kindid,jj=:jj,lsj=:lsj,kcxx=:kcxx,kcsx=:kcsx,unitid=:unitid,kindname=:kindname,unitname=:unitname where goodsid=:key0'; db.qry.ParamByName('goodsid').AsString := row.goodsid; db.qry.ParamByName('key0').value := row.goodsid; db.qry.ParamByName('barcode').AsString := row.barcode; db.qry.ParamByName('goodsname').AsString := row.goodsname; db.qry.ParamByName('pyjm').AsString := row.pyjm; db.qry.ParamByName('gg').AsString := row.gg; db.qry.ParamByName('kindid').AsString := row.kindid; db.qry.ParamByName('jj').AsFloat := row.jj; db.qry.ParamByName('lsj').AsFloat := row.lsj; db.qry.ParamByName('kcxx').AsFloat := row.kcxx; db.qry.ParamByName('kcsx').AsFloat := row.kcsx; db.qry.ParamByName('unitid').AsString := row.unitid; db.qry.ParamByName('kindname').AsString := row.kindname; db.qry.ParamByName('unitname').AsString := row.unitname; db.qry.ExecSQL; end; db.commitTrans; res.status := 1; res.message := 'success'; Result := serial.Serialize(res); except on E: Exception do begin db.rollbackTrans; res.status := 0; res.exception := E.Message; Result := serial.Serialize(res); end; end; finally pool.Unlock(db); serial.Free; end; end;</p> <p>function delete(url: string; body: TBytes): string; var db: tdb; pool: tdbpool; arr: tarray; serial: TJsonSerializer; res: TRes; begin serial := TJsonSerializer.Create; try try arr := url.Split(['/']); pool := GetDBPool(arr[4]); db := pool.Lock; db.qry.Close; db.qry.SQL.Clear; var where: string := ' where ' + TNetEncoding.URL.Decode(arr[5]); db.qry.SQL.Text := 'delete from tgoods' + where; db.qry.ExecSQL; res.status := 1; res.message := 'success'; Result := serial.Serialize(res); except on E: Exception do begin res.status := 0; res.exception := E.Message; Result := serial.Serialize(res); end; end; finally pool.Unlock(db); serial.Free; end; end;</p> <p>end.</p> <pre><code> 2)生成采购订单(主从表单据)代码 ![delphi rest代码工厂使用](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/368779-20220719085134648-955603127.png) ;gutter:true;
unit rest.tcgdd,tcgdd2;
//代码由代码工厂自动生成
//2022-07-19
{$I def.inc}
interface

uses
{$IFDEF firedac} db.firedac, db.firedacPool, {$ENDIF}
{$IFDEF unidac}db.unidac, db.unidacpool, {$ENDIF}
classes, db, System.NetEncoding,
system.JSON.Serializers, yn.log, system.JSON, SysUtils, json.help;

type
Ttcgdd = record
[Serialize(1)] billid: string;
[Serialize(2)] adddate: TDateTime;
[Serialize(3)] supplierid: string;
[Serialize(4)] suppliername: string;
[Serialize(5)] warehouseid: string;
[Serialize(6)] warehousename: string;
[Serialize(7)] makerid: string;
[Serialize(8)] note: string;
[Serialize(9)] shenhe: string;
[Serialize(10)] maker: string;
end;

TtcgddArray = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdds: TArray;
end;

type
Ttcgdd2 = record
[Serialize(1)] billid: string;
[Serialize(2)] recno: integer;
[Serialize(3)] goodsid: string;
[Serialize(4)] goodsname: string;
[Serialize(5)] gg: string;
[Serialize(6)] dw: string;
[Serialize(7)] dj: double;
[Serialize(8)] qty: double;
[Serialize(9)] amount: double;
end;

Ttcgdd2Array = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdd2s: TArray;
end;

Tmodels = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdds: TArray;
[Serialize(5)] tcgdd2s: TArray;
end;

TRes = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
end;

function select(url: string; body: TBytes): string;

function insert(url: string; body: TBytes): string;

function update(url: string; body: TBytes): string;

function delete(url: string; body: TBytes): string;

implementation

function select(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: TArray;
serial: TJsonSerializer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
var where: string;
db.qry.Close;
db.qry.SQL.Clear;
if high(arr) >= 5 then
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[5]);
db.qry.SQL.Text := ‘select * from tcgdd’ + where;
db.qry.Open;
if db.qry.isempty then
begin
rows.status := 0;
rows.exception := ‘No found any data.’;
result := serial.Serialize(rows);
exit;
end;
SetLength(rows.tcgdds, db.qry.RecordCount);
db.qry.First;
i := 0;
while not db.qry.Eof do
begin
rows.tcgdds[i].billid := db.qry.fieldbyname(‘billid’).asstring;
rows.tcgdds[i].adddate := db.qry.fieldbyname(‘adddate’).AsDateTime;
rows.tcgdds[i].supplierid := db.qry.fieldbyname(‘supplierid’).asstring;
rows.tcgdds[i].suppliername := db.qry.fieldbyname(‘suppliername’).asstring;
rows.tcgdds[i].warehouseid := db.qry.fieldbyname(‘warehouseid’).asstring;
rows.tcgdds[i].warehousename := db.qry.fieldbyname(‘warehousename’).asstring;
rows.tcgdds[i].makerid := db.qry.fieldbyname(‘makerid’).asstring;
rows.tcgdds[i].note := db.qry.fieldbyname(‘note’).asstring;
rows.tcgdds[i].shenhe := db.qry.fieldbyname(‘shenhe’).asstring;
rows.tcgdds[i].maker := db.qry.fieldbyname(‘maker’).asstring;
inc(i);
db.qry.Next;
end;
db.qry.Close;
db.qry.SQL.Clear;
if high(arr) >= 5 then
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[6]);
db.qry.SQL.Text := ‘select * from tcgdd2’ + where;
db.qry.Open;
if db.qry.isempty then
begin
rows.status := 0;
rows.exception := ‘No found any data.’;
result := serial.Serialize(rows);
exit;
end;
SetLength(rows.tcgdd2s, db.qry.RecordCount);
db.qry.First;
i := 0;
while not db.qry.Eof do
begin
rows.tcgdd2s[i].billid := db.qry.fieldbyname(‘billid’).asstring;
rows.tcgdd2s[i].recno := db.qry.fieldbyname(‘recno’).asinteger;
rows.tcgdd2s[i].goodsid := db.qry.fieldbyname(‘goodsid’).asstring;
rows.tcgdd2s[i].goodsname := db.qry.fieldbyname(‘goodsname’).asstring;
rows.tcgdd2s[i].gg := db.qry.fieldbyname(‘gg’).asstring;
rows.tcgdd2s[i].dw := db.qry.fieldbyname(‘dw’).asstring;
rows.tcgdd2s[i].dj := db.qry.fieldbyname(‘dj’).AsFloat;
rows.tcgdd2s[i].qty := db.qry.fieldbyname(‘qty’).AsFloat;
rows.tcgdd2s[i].amount := db.qry.fieldbyname(‘amount’).AsFloat;
inc(i);
db.qry.Next;
end;
rows.status := 1;
rows.message := ‘success’;
result := serial.Serialize(rows);
except
on E: Exception do
begin
res.status := 0;
res.exception := E.message;
result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function insert(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
var rows: Tmodels;
rows := serial.Deserialize(TEncoding.UTF8.GetString(body));
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
db.startTrans;
for var row: Ttcgdd in rows.tcgdds do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘insert into tcgdd (billid,adddate,supplierid,suppliername,warehouseid,warehousename,makerid,note,shenhe,maker) values (:billid,:adddate,:supplierid,:suppliername,:warehouseid,:warehousename,:makerid,:note,:shenhe,:maker)’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘adddate’).AsDateTime := row.adddate;
db.qry.ParamByName(‘supplierid’).AsString := row.supplierid;
db.qry.ParamByName(‘suppliername’).AsString := row.suppliername;
db.qry.ParamByName(‘warehouseid’).AsString := row.warehouseid;
db.qry.ParamByName(‘warehousename’).AsString := row.warehousename;
db.qry.ParamByName(‘makerid’).AsString := row.makerid;
db.qry.ParamByName(‘note’).AsString := row.note;
db.qry.ParamByName(‘shenhe’).AsString := row.shenhe;
db.qry.ParamByName(‘maker’).AsString := row.maker;
db.qry.ExecSQL;
end;
for var row: Ttcgdd2 in rows.tcgdd2s do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘insert into tcgdd2 (billid,recno,goodsid,goodsname,gg,dw,dj,qty,amount) values (:billid,:recno,:goodsid,:goodsname,:gg,:dw,:dj,:qty,:amount)’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘recno’).AsInteger := row.recno;
db.qry.ParamByName(‘goodsid’).AsString := row.goodsid;
db.qry.ParamByName(‘goodsname’).AsString := row.goodsname;
db.qry.ParamByName(‘gg’).AsString := row.gg;
db.qry.ParamByName(‘dw’).AsString := row.dw;
db.qry.ParamByName(‘dj’).AsFloat := row.dj;
db.qry.ParamByName(‘qty’).AsFloat := row.qty;
db.qry.ParamByName(‘amount’).AsFloat := row.amount;
db.qry.ExecSQL;
end;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function update(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
var rows: Tmodels;
rows := serial.Deserialize(TEncoding.UTF8.GetString(body));
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
db.startTrans;
for var row: Ttcgdd in rows.tcgdds do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘update tcgdd set billid=:billid,adddate=:adddate,supplierid=:supplierid,suppliername=:suppliername,warehouseid=:warehouseid,warehousename=:warehousename,makerid=:makerid,note=:note,shenhe=:shenhe,maker=:maker where billid=:key0’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘key0’).value := row.billid;
db.qry.ParamByName(‘adddate’).AsDateTime := row.adddate;
db.qry.ParamByName(‘supplierid’).AsString := row.supplierid;
db.qry.ParamByName(‘suppliername’).AsString := row.suppliername;
db.qry.ParamByName(‘warehouseid’).AsString := row.warehouseid;
db.qry.ParamByName(‘warehousename’).AsString := row.warehousename;
db.qry.ParamByName(‘makerid’).AsString := row.makerid;
db.qry.ParamByName(‘note’).AsString := row.note;
db.qry.ParamByName(‘shenhe’).AsString := row.shenhe;
db.qry.ParamByName(‘maker’).AsString := row.maker;
db.qry.ExecSQL;
end;
for var row: Ttcgdd2 in rows.tcgdd2s do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘update tcgdd2 set billid=:billid,recno=:recno,goodsid=:goodsid,goodsname=:goodsname,gg=:gg,dw=:dw,dj=:dj,qty=:qty,amount=:amount where billid=:key0 and recno=:key1’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘key0’).value := row.billid;
db.qry.ParamByName(‘recno’).AsInteger := row.recno;
db.qry.ParamByName(‘key1’).value := row.recno;
db.qry.ParamByName(‘goodsid’).AsString := row.goodsid;
db.qry.ParamByName(‘goodsname’).AsString := row.goodsname;
db.qry.ParamByName(‘gg’).AsString := row.gg;
db.qry.ParamByName(‘dw’).AsString := row.dw;
db.qry.ParamByName(‘dj’).AsFloat := row.dj;
db.qry.ParamByName(‘qty’).AsFloat := row.qty;
db.qry.ParamByName(‘amount’).AsFloat := row.amount;
db.qry.ExecSQL;
end;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function delete(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
var where: string;
db.startTrans;
db.qry.Close;
db.qry.SQL.Clear;
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[5]);
db.qry.SQL.Text := ‘delete from tcgdd’ + where;
db.qry.ExecSQL;
db.qry.Close;
db.qry.SQL.Clear;
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[6]);
db.qry.SQL.Text := ‘delete from tcgdd2’ + where;
db.qry.ExecSQL;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

end.

3)”一对多”代码生成

sql语句

csharp;gutter:true; select a.<em> from tcgdd a left join twarehouse b on a.warehouseid=b.ckid;select a.</em> from tcgdd2 a left join tgoods b on a.goodsid=b.goodsid</p> <pre><code> ![delphi rest代码工厂使用](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/368779-20220719085435990-228506055.png) ;gutter:true;
unit rest.;
//代码由代码工厂自动生成
//2022-07-19
{$I def.inc}
interface

uses
{$IFDEF firedac} db.firedac, db.firedacPool, {$ENDIF}
{$IFDEF unidac}db.unidac, db.unidacpool, {$ENDIF}
classes, db, System.NetEncoding,
system.JSON.Serializers, yn.log, system.JSON, SysUtils, json.help;

type
Ttcgdd = record
[Serialize(1)] billid: string;
[Serialize(2)] adddate: TDateTime;
[Serialize(3)] supplierid: string;
[Serialize(4)] suppliername: string;
[Serialize(5)] warehouseid: string;
[Serialize(6)] warehousename: string;
[Serialize(7)] makerid: string;
[Serialize(8)] note: string;
[Serialize(9)] shenhe: string;
[Serialize(10)] maker: string;
end;

TtcgddArray = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdds: TArray;
end;

type
Ttcgdd2 = record
[Serialize(1)] billid: string;
[Serialize(2)] recno: integer;
[Serialize(3)] goodsid: string;
[Serialize(4)] goodsname: string;
[Serialize(5)] gg: string;
[Serialize(6)] dw: string;
[Serialize(7)] dj: double;
[Serialize(8)] qty: double;
[Serialize(9)] amount: double;
end;

Ttcgdd2Array = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdd2s: TArray;
end;

Tmodels = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
[Serialize(4)] tcgdds: TArray;
[Serialize(5)] tcgdd2s: TArray;
end;

TRes = record
[Serialize(1)] status: integer;
[Serialize(2)] exception: string;
[Serialize(3)] message: string;
end;

function select(url: string; body: TBytes): string;

function insert(url: string; body: TBytes): string;

function update(url: string; body: TBytes): string;

function delete(url: string; body: TBytes): string;

implementation

function select(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: TArray;
serial: TJsonSerializer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
var where: string;
db.qry.Close;
db.qry.SQL.Clear;
if high(arr) >= 5 then
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[5]);
db.qry.SQL.Text := ‘select a.* from tcgdd a left join twarehouse b on a.warehouseid=b.ckid’ + where;
db.qry.Open;
if db.qry.isempty then
begin
rows.status := 0;
rows.exception := ‘No found any data.’;
result := serial.Serialize(rows);
exit;
end;
SetLength(rows.tcgdds, db.qry.RecordCount);
db.qry.First;
i := 0;
while not db.qry.Eof do
begin
rows.tcgdds[i].billid := db.qry.fieldbyname(‘billid’).asstring;
rows.tcgdds[i].adddate := db.qry.fieldbyname(‘adddate’).AsDateTime;
rows.tcgdds[i].supplierid := db.qry.fieldbyname(‘supplierid’).asstring;
rows.tcgdds[i].suppliername := db.qry.fieldbyname(‘suppliername’).asstring;
rows.tcgdds[i].warehouseid := db.qry.fieldbyname(‘warehouseid’).asstring;
rows.tcgdds[i].warehousename := db.qry.fieldbyname(‘warehousename’).asstring;
rows.tcgdds[i].makerid := db.qry.fieldbyname(‘makerid’).asstring;
rows.tcgdds[i].note := db.qry.fieldbyname(‘note’).asstring;
rows.tcgdds[i].shenhe := db.qry.fieldbyname(‘shenhe’).asstring;
rows.tcgdds[i].maker := db.qry.fieldbyname(‘maker’).asstring;
inc(i);
db.qry.Next;
end;
db.qry.Close;
db.qry.SQL.Clear;
if high(arr) >= 5 then
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[6]);
db.qry.SQL.Text := ‘select a.* from tcgdd2 a left join tgoods b on a.goodsid=b.goodsid’ + where;
db.qry.Open;
if db.qry.isempty then
begin
rows.status := 0;
rows.exception := ‘No found any data.’;
result := serial.Serialize(rows);
exit;
end;
SetLength(rows.tcgdd2s, db.qry.RecordCount);
db.qry.First;
i := 0;
while not db.qry.Eof do
begin
rows.tcgdd2s[i].billid := db.qry.fieldbyname(‘billid’).asstring;
rows.tcgdd2s[i].recno := db.qry.fieldbyname(‘recno’).asinteger;
rows.tcgdd2s[i].goodsid := db.qry.fieldbyname(‘goodsid’).asstring;
rows.tcgdd2s[i].goodsname := db.qry.fieldbyname(‘goodsname’).asstring;
rows.tcgdd2s[i].gg := db.qry.fieldbyname(‘gg’).asstring;
rows.tcgdd2s[i].dw := db.qry.fieldbyname(‘dw’).asstring;
rows.tcgdd2s[i].dj := db.qry.fieldbyname(‘dj’).AsFloat;
rows.tcgdd2s[i].qty := db.qry.fieldbyname(‘qty’).AsFloat;
rows.tcgdd2s[i].amount := db.qry.fieldbyname(‘amount’).AsFloat;
inc(i);
db.qry.Next;
end;
rows.status := 1;
rows.message := ‘success’;
result := serial.Serialize(rows);
except
on E: Exception do
begin
res.status := 0;
res.exception := E.message;
result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function insert(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
var rows: Tmodels;
rows := serial.Deserialize(TEncoding.UTF8.GetString(body));
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
db.startTrans;
for var row: Ttcgdd in rows.tcgdds do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘insert into tcgdd (billid,adddate,supplierid,suppliername,warehouseid,warehousename,makerid,note,shenhe,maker) values (:billid,:adddate,:supplierid,:suppliername,:warehouseid,:warehousename,:makerid,:note,:shenhe,:maker)’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘adddate’).AsDateTime := row.adddate;
db.qry.ParamByName(‘supplierid’).AsString := row.supplierid;
db.qry.ParamByName(‘suppliername’).AsString := row.suppliername;
db.qry.ParamByName(‘warehouseid’).AsString := row.warehouseid;
db.qry.ParamByName(‘warehousename’).AsString := row.warehousename;
db.qry.ParamByName(‘makerid’).AsString := row.makerid;
db.qry.ParamByName(‘note’).AsString := row.note;
db.qry.ParamByName(‘shenhe’).AsString := row.shenhe;
db.qry.ParamByName(‘maker’).AsString := row.maker;
db.qry.ExecSQL;
end;
for var row: Ttcgdd2 in rows.tcgdd2s do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘insert into tcgdd2 (billid,recno,goodsid,goodsname,gg,dw,dj,qty,amount) values (:billid,:recno,:goodsid,:goodsname,:gg,:dw,:dj,:qty,:amount)’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘recno’).AsInteger := row.recno;
db.qry.ParamByName(‘goodsid’).AsString := row.goodsid;
db.qry.ParamByName(‘goodsname’).AsString := row.goodsname;
db.qry.ParamByName(‘gg’).AsString := row.gg;
db.qry.ParamByName(‘dw’).AsString := row.dw;
db.qry.ParamByName(‘dj’).AsFloat := row.dj;
db.qry.ParamByName(‘qty’).AsFloat := row.qty;
db.qry.ParamByName(‘amount’).AsFloat := row.amount;
db.qry.ExecSQL;
end;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function update(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
var rows: Tmodels;
rows := serial.Deserialize(TEncoding.UTF8.GetString(body));
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
db.startTrans;
for var row: Ttcgdd in rows.tcgdds do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘update tcgdd set billid=:billid,adddate=:adddate,supplierid=:supplierid,suppliername=:suppliername,warehouseid=:warehouseid,warehousename=:warehousename,makerid=:makerid,note=:note,shenhe=:shenhe,maker=:maker where billid=:key0’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘key0’).value := row.billid;
db.qry.ParamByName(‘adddate’).AsDateTime := row.adddate;
db.qry.ParamByName(‘supplierid’).AsString := row.supplierid;
db.qry.ParamByName(‘suppliername’).AsString := row.suppliername;
db.qry.ParamByName(‘warehouseid’).AsString := row.warehouseid;
db.qry.ParamByName(‘warehousename’).AsString := row.warehousename;
db.qry.ParamByName(‘makerid’).AsString := row.makerid;
db.qry.ParamByName(‘note’).AsString := row.note;
db.qry.ParamByName(‘shenhe’).AsString := row.shenhe;
db.qry.ParamByName(‘maker’).AsString := row.maker;
db.qry.ExecSQL;
end;
for var row: Ttcgdd2 in rows.tcgdd2s do
begin
db.qry.Close;
db.qry.SQL.Clear;
db.qry.SQL.Text := ‘update tcgdd2 set billid=:billid,recno=:recno,goodsid=:goodsid,goodsname=:goodsname,gg=:gg,dw=:dw,dj=:dj,qty=:qty,amount=:amount where billid=:key0 and recno=:key1’;
db.qry.ParamByName(‘billid’).AsString := row.billid;
db.qry.ParamByName(‘key0’).value := row.billid;
db.qry.ParamByName(‘recno’).AsInteger := row.recno;
db.qry.ParamByName(‘key1’).value := row.recno;
db.qry.ParamByName(‘goodsid’).AsString := row.goodsid;
db.qry.ParamByName(‘goodsname’).AsString := row.goodsname;
db.qry.ParamByName(‘gg’).AsString := row.gg;
db.qry.ParamByName(‘dw’).AsString := row.dw;
db.qry.ParamByName(‘dj’).AsFloat := row.dj;
db.qry.ParamByName(‘qty’).AsFloat := row.qty;
db.qry.ParamByName(‘amount’).AsFloat := row.amount;
db.qry.ExecSQL;
end;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

function delete(url: string; body: TBytes): string;
var
db: tdb;
pool: tdbpool;
arr: tarray;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
try
arr := url.Split([‘/’]);
pool := GetDBPool(arr[4]);
db := pool.Lock;
var where: string;
db.startTrans;
db.qry.Close;
db.qry.SQL.Clear;
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[5]);
db.qry.SQL.Text := ‘delete from tcgdd’ + where;
db.qry.ExecSQL;
db.qry.Close;
db.qry.SQL.Clear;
where := ‘ where ‘ + TNetEncoding.URL.Decode(arr[6]);
db.qry.SQL.Text := ‘delete from tcgdd2’ + where;
db.qry.ExecSQL;
db.commitTrans;
res.status := 1;
res.message := ‘success’;
Result := serial.Serialize(res);
except
on E: Exception do
begin
db.rollbackTrans;
res.status := 0;
res.exception := E.Message;
Result := serial.Serialize(res);
end;
end;
finally
pool.Unlock(db);
serial.Free;
end;
end;

end.

Original: https://www.cnblogs.com/hnxxcxg/p/16492775.html
Author: delphi中间件
Title: delphi rest代码工厂使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545866/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • ClickHouse-查询优化

    单表查询【使用的频率高】 Prewhere 和 where 语句的作用相同,用来过滤数据。不同之处在于 prewhere 只支持*MergeTree 族系列引擎的表,首先会读取指定…

    技术杂谈 2023年7月10日
    082
  • fdisk、mkfs.ext4、make_ext4fs、img2simg、simg2img

    一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统。 二进制在烧录的时候比较简单,将二进制数据写…

    技术杂谈 2023年5月31日
    0139
  • React Suspense 尝鲜,处理前后端IO异步操作

    简单介绍一下Suspense Suspense主要用来解决网络IO问题,它早在2018年的React 16.6.0版本中就已发布。它的相关用法有些已经比较成熟,有的相对不太稳定,甚…

    技术杂谈 2023年5月31日
    0135
  • Python小游戏——猜数字

    1 print("————–我爱鱼———–") 2 temp = input("不妨猜一下甲鱼现在心里想的是哪个数字:…

    技术杂谈 2023年7月24日
    085
  • FineUIPro/Mvc/Core v7.1.0 正式发布了!

    FineUIPro/Mvc/Core v7.1.0 正式发布了,这个版本支持了多文件上传,WebForms版修正了一个通杀.Net Framework的XSS漏洞,基础版也第一次支…

    技术杂谈 2023年6月1日
    0115
  • yuv rgb 互转 公式 及算法

    1 前言 自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用的过程,所以在不同的应用领…

    技术杂谈 2023年5月31日
    0105
  • Hadoop HA(高可用)、脑裂、联邦机制详解

    Hadoop HA(高可用) 一、hadoop1.x的问题 1.单点故障 每个集群只有一个NameNode,NameNode存在单点故障(SPOF) 如果该计算机或者NameNod…

    技术杂谈 2023年7月11日
    0100
  • poi导出excel工具类+注解

    导出excel作为很多页面的常用功能,但是不同页面导出的数据内容和字段不一,不方便操作,本文通过注解和工具类来解决excel通用导出问题 1.注解 通过注解来定义excel字段的名…

    技术杂谈 2023年7月25日
    071
  • IntelliJ IDEA one-line function formatting

    IntelliJ keeps formatting this: public void addElement(Element elem) { this.elements.add(e…

    技术杂谈 2023年5月31日
    090
  • vi显示行号

    输入如下配置: 某一行显示 :number 全部显示 :set number 跳转到第2行 :2G Original: https://www.cnblogs.com/EasonJ…

    技术杂谈 2023年5月31日
    094
  • Drools语法文档

    https://docs.jboss.org/drools/release/6.2.0.CR3/drools-docs/html/DroolsLanguageReferenceCh…

    技术杂谈 2023年7月24日
    091
  • 微信公众账号开发入门

    此文记录了微信公众号开发的整个流程,想要调用微信 JS API 并非直接引入一个 jweixin-1.0.0.js 到页面里那么简单。需要获取 access_token, jsap…

    技术杂谈 2023年6月1日
    0107
  • Kubernetes 概念整理

    注:以下大部分内容来自网上摘录,以便后期查阅。 Kubernetes (通常称为 K8s) 是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统,是 G…

    技术杂谈 2023年6月1日
    0106
  • 多项式除和取余

    [F(x)=Q(x)G(x)+R(x) ] 已知(n)次的(F(x))和(m)次(G(x))求商(Q(x))和余数(R(x)),要求(Q(x))次数为(n-m),(R(x))次数小…

    技术杂谈 2023年6月21日
    0109
  • ArcGIS Pro创建注记

    You can check out some of these Annotation tools: Annotate Selected Features Convert Label…

    技术杂谈 2023年5月30日
    0115
  • 使用VisualVM 进行性能分析及调优

    概述 开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下…

    技术杂谈 2023年5月31日
    0119
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球