让一齐随风 發表於 2022-7-19 08:56:00

delphi rest代码工厂使用

<p>delphi rest代码工厂使用</p>
<p>代码工厂所生成的代码,以轻量化、跨平台、跨语言为目的。</p>
<p>支持基础资料(单表)、单据主从表(多表)、一对多的代码生成。</p>
<p>支持JSON和GOOGLE PROTOBUF二种数据序列格式。</p>
<p>配置数据库连接</p>
<p><img src="https://img2022.cnblogs.com/blog/368779/202207/368779-20220719084518382-748024523.png"></p>
<p>1)商品资料(基础资料)代码生成</p>
<p><img src="https://img2022.cnblogs.com/blog/368779/202207/368779-20220719084914467-1157046648.png"></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">unit rest.tgoods;
//代码由代码工厂自动生成
//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
Ttgoods = record
    goodsid: string;
    barcode: string;
    goodsname: string;
    pyjm: string;
    gg: string;
    kindid: string;
    jj: double;
    lsj: double;
    kcxx: double;
    kcsx: double;
    unitid: string;
    kindname: string;
    unitname: string;
end;

TtgoodsArray = record
    status: integer;
    exception: string;
    message: string;
    tgoodss: TArray&lt;Ttgoods&gt;;
end;

TRes = record
    status: integer;
    exception: string;
    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&lt;string&gt;;
serial: TJsonSerializer;
rows: TtgoodsArray;
i: integer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      var where: string := '';
      if high(arr) &gt;= 5 then
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      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&lt;TtgoodsArray&gt;(rows);
      exit;
      end;
      SetLength(rows.tgoodss, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
      rows.tgoodss.goodsid := db.qry.fieldbyname('goodsid').asstring;
      rows.tgoodss.barcode := db.qry.fieldbyname('barcode').asstring;
      rows.tgoodss.goodsname := db.qry.fieldbyname('goodsname').asstring;
      rows.tgoodss.pyjm := db.qry.fieldbyname('pyjm').asstring;
      rows.tgoodss.gg := db.qry.fieldbyname('gg').asstring;
      rows.tgoodss.kindid := db.qry.fieldbyname('kindid').asstring;
      rows.tgoodss.jj := db.qry.fieldbyname('jj').AsFloat;
      rows.tgoodss.lsj := db.qry.fieldbyname('lsj').AsFloat;
      rows.tgoodss.kcxx := db.qry.fieldbyname('kcxx').AsFloat;
      rows.tgoodss.kcsx := db.qry.fieldbyname('kcsx').AsFloat;
      rows.tgoodss.unitid := db.qry.fieldbyname('unitid').asstring;
      rows.tgoodss.kindname := db.qry.fieldbyname('kindname').asstring;
      rows.tgoodss.unitname := db.qry.fieldbyname('unitname').asstring;
      inc(i);
      db.qry.Next;
      end;
      rows.status := 1;
      rows.message := 'success';
      result := serial.Serialize&lt;TtgoodsArray&gt;(rows);
    except
      on E: Exception do
      begin
      res.status := 0;
      res.exception := E.message;
      result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: TtgoodsArray;
      rows := serial.Deserialize&lt;TtgoodsArray&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: TtgoodsArray;
      rows := serial.Deserialize&lt;TtgoodsArray&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      db.qry.Close;
      db.qry.SQL.Clear;
      var where: string := ' where ' + TNetEncoding.URL.Decode(arr);
      db.qry.SQL.Text := 'delete from tgoods' + where;
      db.qry.ExecSQL;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(res);
      end;
    end;
finally
    pool.Unlock(db);
    serial.Free;
end;
end;

end.
</pre>
</div>
<p>  2)生成采购订单(主从表单据)代码</p>
<p><img src="https://img2022.cnblogs.com/blog/368779/202207/368779-20220719085134648-955603127.png"></p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;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
    billid: string;
    adddate: TDateTime;
    supplierid: string;
    suppliername: string;
    warehouseid: string;
    warehousename: string;
    makerid: string;
    note: string;
    shenhe: string;
    maker: string;
end;

TtcgddArray = record
    status: integer;
    exception: string;
    message: string;
    tcgdds: TArray&lt;Ttcgdd&gt;;
end;

type
Ttcgdd2 = record
    billid: string;
    recno: integer;
    goodsid: string;
    goodsname: string;
    gg: string;
    dw: string;
    dj: double;
    qty: double;
    amount: double;
end;

Ttcgdd2Array = record
    status: integer;
    exception: string;
    message: string;
    tcgdd2s: TArray&lt;Ttcgdd2&gt;;
end;

Tmodels = record
    status: integer;
    exception: string;
    message: string;
    tcgdds: TArray&lt;Ttcgdd&gt;;
    tcgdd2s: TArray&lt;Ttcgdd2&gt;;
end;

TRes = record
    status: integer;
    exception: string;
    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&lt;string&gt;;
serial: TJsonSerializer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      var where: string;
      db.qry.Close;
      db.qry.SQL.Clear;
      if high(arr) &gt;= 5 then
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      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&lt;Tmodels&gt;(rows);
      exit;
      end;
      SetLength(rows.tcgdds, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
      rows.tcgdds.billid := db.qry.fieldbyname('billid').asstring;
      rows.tcgdds.adddate := db.qry.fieldbyname('adddate').AsDateTime;
      rows.tcgdds.supplierid := db.qry.fieldbyname('supplierid').asstring;
      rows.tcgdds.suppliername := db.qry.fieldbyname('suppliername').asstring;
      rows.tcgdds.warehouseid := db.qry.fieldbyname('warehouseid').asstring;
      rows.tcgdds.warehousename := db.qry.fieldbyname('warehousename').asstring;
      rows.tcgdds.makerid := db.qry.fieldbyname('makerid').asstring;
      rows.tcgdds.note := db.qry.fieldbyname('note').asstring;
      rows.tcgdds.shenhe := db.qry.fieldbyname('shenhe').asstring;
      rows.tcgdds.maker := db.qry.fieldbyname('maker').asstring;
      inc(i);
      db.qry.Next;
      end;
      db.qry.Close;
      db.qry.SQL.Clear;
      if high(arr) &gt;= 5 then
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      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&lt;Tmodels&gt;(rows);
      exit;
      end;
      SetLength(rows.tcgdd2s, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
      rows.tcgdd2s.billid := db.qry.fieldbyname('billid').asstring;
      rows.tcgdd2s.recno := db.qry.fieldbyname('recno').asinteger;
      rows.tcgdd2s.goodsid := db.qry.fieldbyname('goodsid').asstring;
      rows.tcgdd2s.goodsname := db.qry.fieldbyname('goodsname').asstring;
      rows.tcgdd2s.gg := db.qry.fieldbyname('gg').asstring;
      rows.tcgdd2s.dw := db.qry.fieldbyname('dw').asstring;
      rows.tcgdd2s.dj := db.qry.fieldbyname('dj').AsFloat;
      rows.tcgdd2s.qty := db.qry.fieldbyname('qty').AsFloat;
      rows.tcgdd2s.amount := db.qry.fieldbyname('amount').AsFloat;
      inc(i);
      db.qry.Next;
      end;
      rows.status := 1;
      rows.message := 'success';
      result := serial.Serialize&lt;Tmodels&gt;(rows);
    except
      on E: Exception do
      begin
      res.status := 0;
      res.exception := E.message;
      result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: Tmodels;
      rows := serial.Deserialize&lt;Tmodels&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: Tmodels;
      rows := serial.Deserialize&lt;Tmodels&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      var where: string;
      db.startTrans;
      db.qry.Close;
      db.qry.SQL.Clear;
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      db.qry.SQL.Text := 'delete from tcgdd' + where;
      db.qry.ExecSQL;
      db.qry.Close;
      db.qry.SQL.Clear;
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      db.qry.SQL.Text := 'delete from tcgdd2' + where;
      db.qry.ExecSQL;
      db.commitTrans;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(res);
      end;
    end;
finally
    pool.Unlock(db);
    serial.Free;
end;
end;

end.
</pre>
</div>
<p>3)“一对多”代码生成</p>
<p>sql语句</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">select a.* from tcgdd a left join twarehouse b on a.warehouseid=b.ckid;select a.* from tcgdd2 a left join tgoods b on a.goodsid=b.goodsid
</pre>
</div>
<p>  <img src="https://img2022.cnblogs.com/blog/368779/202207/368779-20220719085435990-228506055.png"></p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;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
    billid: string;
    adddate: TDateTime;
    supplierid: string;
    suppliername: string;
    warehouseid: string;
    warehousename: string;
    makerid: string;
    note: string;
    shenhe: string;
    maker: string;
end;

TtcgddArray = record
    status: integer;
    exception: string;
    message: string;
    tcgdds: TArray&lt;Ttcgdd&gt;;
end;

type
Ttcgdd2 = record
    billid: string;
    recno: integer;
    goodsid: string;
    goodsname: string;
    gg: string;
    dw: string;
    dj: double;
    qty: double;
    amount: double;
end;

Ttcgdd2Array = record
    status: integer;
    exception: string;
    message: string;
    tcgdd2s: TArray&lt;Ttcgdd2&gt;;
end;

Tmodels = record
    status: integer;
    exception: string;
    message: string;
    tcgdds: TArray&lt;Ttcgdd&gt;;
    tcgdd2s: TArray&lt;Ttcgdd2&gt;;
end;

TRes = record
    status: integer;
    exception: string;
    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&lt;string&gt;;
serial: TJsonSerializer;
rows: Tmodels;
i: integer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      var where: string;
      db.qry.Close;
      db.qry.SQL.Clear;
      if high(arr) &gt;= 5 then
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      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&lt;Tmodels&gt;(rows);
      exit;
      end;
      SetLength(rows.tcgdds, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
      rows.tcgdds.billid := db.qry.fieldbyname('billid').asstring;
      rows.tcgdds.adddate := db.qry.fieldbyname('adddate').AsDateTime;
      rows.tcgdds.supplierid := db.qry.fieldbyname('supplierid').asstring;
      rows.tcgdds.suppliername := db.qry.fieldbyname('suppliername').asstring;
      rows.tcgdds.warehouseid := db.qry.fieldbyname('warehouseid').asstring;
      rows.tcgdds.warehousename := db.qry.fieldbyname('warehousename').asstring;
      rows.tcgdds.makerid := db.qry.fieldbyname('makerid').asstring;
      rows.tcgdds.note := db.qry.fieldbyname('note').asstring;
      rows.tcgdds.shenhe := db.qry.fieldbyname('shenhe').asstring;
      rows.tcgdds.maker := db.qry.fieldbyname('maker').asstring;
      inc(i);
      db.qry.Next;
      end;
      db.qry.Close;
      db.qry.SQL.Clear;
      if high(arr) &gt;= 5 then
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      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&lt;Tmodels&gt;(rows);
      exit;
      end;
      SetLength(rows.tcgdd2s, db.qry.RecordCount);
      db.qry.First;
      i := 0;
      while not db.qry.Eof do
      begin
      rows.tcgdd2s.billid := db.qry.fieldbyname('billid').asstring;
      rows.tcgdd2s.recno := db.qry.fieldbyname('recno').asinteger;
      rows.tcgdd2s.goodsid := db.qry.fieldbyname('goodsid').asstring;
      rows.tcgdd2s.goodsname := db.qry.fieldbyname('goodsname').asstring;
      rows.tcgdd2s.gg := db.qry.fieldbyname('gg').asstring;
      rows.tcgdd2s.dw := db.qry.fieldbyname('dw').asstring;
      rows.tcgdd2s.dj := db.qry.fieldbyname('dj').AsFloat;
      rows.tcgdd2s.qty := db.qry.fieldbyname('qty').AsFloat;
      rows.tcgdd2s.amount := db.qry.fieldbyname('amount').AsFloat;
      inc(i);
      db.qry.Next;
      end;
      rows.status := 1;
      rows.message := 'success';
      result := serial.Serialize&lt;Tmodels&gt;(rows);
    except
      on E: Exception do
      begin
      res.status := 0;
      res.exception := E.message;
      result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: Tmodels;
      rows := serial.Deserialize&lt;Tmodels&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      var rows: Tmodels;
      rows := serial.Deserialize&lt;Tmodels&gt;(TEncoding.UTF8.GetString(body));
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      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&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(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&lt;string&gt;;
serial: TJsonSerializer;
res: TRes;
begin
serial := TJsonSerializer.Create;
try
    try
      arr := url.Split(['/']);
      pool := GetDBPool(arr);
      db := pool.Lock;
      var where: string;
      db.startTrans;
      db.qry.Close;
      db.qry.SQL.Clear;
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      db.qry.SQL.Text := 'delete from tcgdd' + where;
      db.qry.ExecSQL;
      db.qry.Close;
      db.qry.SQL.Clear;
      where := ' where ' + TNetEncoding.URL.Decode(arr);
      db.qry.SQL.Text := 'delete from tcgdd2' + where;
      db.qry.ExecSQL;
      db.commitTrans;
      res.status := 1;
      res.message := 'success';
      Result := serial.Serialize&lt;TRes&gt;(res);
    except
      on E: Exception do
      begin
      db.rollbackTrans;
      res.status := 0;
      res.exception := E.Message;
      Result := serial.Serialize&lt;TRes&gt;(res);
      end;
    end;
finally
    pool.Unlock(db);
    serial.Free;
end;
end;

end.
</pre>
</div>
<p>  </p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16492775.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/16492775.html
頁: [1]
查看完整版本: delphi rest代码工厂使用