一、调用webservice接口新增报错逻辑梳理
1.初始化数据源、集团、用户
private void init(){
InvocationInfoProxy.getInstance().setUserDataSource(getEnvInfo(“datasource”));
InvocationInfoProxy.getInstance().setGroupId(getEnvInfo(“groupid”));
InvocationInfoProxy.getInstance().setUserId(getEnvInfo(“userid”));
}
2.new一个存放状态码和提示信息的对象
3.new一个jsonvo存放json中的表头和表体信息
CksqdJson jsonvo = new Gson().fromJson(jsonInfo, CksqdJson.class);
4.new一个aggvo、一个headvo以及一个bvoslist用来接收jsonvo中的数据
5.处理标记(如果标记存在则不允许新增)
6.给headvo赋默认值,把jsonvo中的表头信息传给headvo,headvo的状态设置为NEW
7.将headvo中的编码翻译为主键
SuperVOUtil.execFormulaWithVOs(new KfcksqdVO[]{headvo}, new String[]{
“personnel->getcolvalue(bd_psndoc,pk_psndoc,code,personnel)”,
“department->getcolvalue(org_dept,pk_dept,code,department)”
});
8.把赋完值的headvo传给aggvo
9.循环把jsonvo中的表体赋值给bodyvo(包括计算的字段),bodyvo的状态设置为NEW,将赋完值的bodyvo添加到bvoslist集合中
10.将bodyvo中的编码翻译为主键
11.把bvolist转换为数组,然后传给aggvo
12.调用新增保存的接口
13.设置状态码和提示信息
二、调用webservice接口删除回写逻辑梳理
1.初始化数据源、集团、用户
private void init(){
InvocationInfoProxy.getInstance().setUserDataSource(getEnvInfo(“datasource”));
InvocationInfoProxy.getInstance().setGroupId(getEnvInfo(“groupid”));
InvocationInfoProxy.getInstance().setUserId(getEnvInfo(“userid”));
}
2.new一个存放状态码和提示信息的对象
3.接收json中的标记字段
JSONObject jsonObject = JSONObject.parseObject(jsonInfo);
String flag = jsonObject.getString(“flag”);
4.通过标记查询该条记录的主键
5.通过主键查询该条记录对应的aggvo
BillQuery billQuery = new BillQuery< AggKfcksqdVO>( AggKfcksqdVO.class);
AggKfcksqdVO[] cksqdvos = billQuery.query(new String[]{listpk});
6.调用删除回写的接口
7.设置状态码和提示信息
8.注意事项:
8.1JSONObject导下面的这个包
import com.alibaba.fastjson.JSONObject;
8.2将json转成aggvo时用到的方法
方法一:jsonvo里面只能是字符串类型的
CksqdJson jsonvo = new Gson().fromJson(jsonInfo, CksqdJson.class);
方法二:param里面可以是任意类型的
GsonBuilder gsonBuilder = new GsonBuilder();
UFDataTypeDeserializer ufDeserializer = new UFDataTypeDeserializer();
gsonBuilder.registerTypeAdapter(UFDateTime.class, ufDeserializer);
gsonBuilder.registerTypeAdapter(UFDate.class, ufDeserializer);
gsonBuilder.registerTypeAdapter(UFBoolean.class, ufDeserializer);
gsonBuilder.registerTypeAdapter(UFDouble.class, ufDeserializer);
gsonBuilder.registerTypeAdapter(UFTime.class, ufDeserializer);
gsonBuilder.registerTypeAdapter(UFLiteralDate.class, ufDeserializer);
CksqdJson param = gsonBuilder.create().fromJson(jsonInfo.toString(),CksqdJson.class);
8.3sql语句中的exists用法
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False
8.4json格式校验的网址
https://www.bejson.com/
8.5在调用接口生成单子的时候,需要把新增的表头表体的vo状态变为new
headvo.setStatus(VOStatus.NEW);
bvo.setStatus(VOStatus.NEW);
三、调用webservice接口传入单据日期,传出该单据日期下的所有出库申请单的单据号、单据日期、人员、部门(json格式)逻辑梳理
1.初始化数据源、集团、用户
private void init(){
InvocationInfoProxy.getInstance().setUserDataSource(getEnvInfo(“datasource”));
InvocationInfoProxy.getInstance().setGroupId(getEnvInfo(“groupid”));
InvocationInfoProxy.getInstance().setUserId(getEnvInfo(“userid”));
}
2.new一个存放状态码、提示信息和要传出数据的数组的对象
public class ResultParam1 {
private String code;
private String message;
private E[] datas;
}
3.接收json中的单据日期字段
JSONObject jsonObject = JSONObject.parseObject(jsonInfo);
String date = jsonObject.getString(“date”);
4.写sql语句查询该单据日期下的所有出库申请单的单据号、单据日期、人员、部门(包括人员和部门字段的翻译)
5.如果sql查询到的数据为空,返回错误信息
6.如果sql查询到的数据不为空,新建一个List存放要传出数据的数组
7.for循环把sql查出来的数据赋给传出数据的对象,然后添加到list集合中
8.返回查询正确信息和查询出来的json数据
四、问题汇总
1.通过字段查主键,主键查aggvo的方法,如果只是用到表头的信息就不要用这种方法获取里面的字段,用sql查询语句直接获取里面的字段就可以,这样可以省去查询表体数据的时间。
2.for循环里面一定不要写数据库查询语句,因为打开数据库关闭数据库很耗时间,不然查询效率会特别低。
3.调用接口新增保存时,jsonvo和元数据的字段名要保持一致。
4.接口那边传过来的字段类型不能乱改,接口那边是数值型,jsonvo这边也应该是BigDecimal或者UFDouble。
5.调用外部接口时一定要初始化数据源、集团、用户,这一步相当于模拟登录。
五、问题汇总
1.eclipse中clean的作用
eclipse —>project ----->clean 选项
将工程中的.class文件删除,同时重新编译工程(Java文件),类似于jbuild中的rebuild
2.在写新增保存接口时,前端不可编辑的字段也要传
3.查询详情接口和新增保存接口要传入的参数基本一致,自定义参照字段除外
4.自定义参照字段在写新增保存接口的时候只传主键就可以,在写查询详情接口的时候要返回一个参照对象(id、code、name),要通过id把code和name查询出来,然后封装到参照对象里面返回
5.在做接口的时候要一份测试用例,写开发方案的时候还要用到