7-拼板过站接口修改
拼板过站是关键的一个接口,多个部门都在使用,且存在多设备使用的情况,即有并发场景
修改:
- 传参JSON
- 拼板过站前的校验
- 拼板重复过站校验
1.业务逻辑
设备传输时,根据传入的TYPE字段判断本次调用的目的: 校验:校验时类型TYPE传值为C,值不为NA的条码表单,到MESEXT_XLD_BAECODE表中的SFC逐一校验是否存在
上传数据:上传时,TYPE值需为I,看isPassing的值来判断是否过站,为N的时候不过站,对数据SFC不为NA的进行校验,并且保存,对NA的按照时间流水造一个SFC存入。为Y的时候执行上述的操作后进行过站
重复上传:TYPE值需为X,正常走上传数据的逻辑,但是走校验的时候,如果数据存在,checkCodeForm会返回exsit,会提示,不报错
2.拼板校验
校验工单工厂的空值,SFC表单的SFC数据是否存在,主板条码是否存在,设置标志位X为重复过站操作,遇到X的时候checkCodeForm校验存在SFC情况下返回exsit
其余情况下,只有完全校验通过才会返回success
3.条码保存
对校验通过的条码进行保存,批量保存,为了避免重复交互数据库,使用jdbc的批量保存:
String insertSql = "insert into mesext_xld_barcode (barcode, site, shop_order, azm, seq, status, create_date, create_user, sfc) " +
"values(?, ?, ?, ?, ?, ?, ?, ?, ?)";
BatchPreparedStatementSetter bs = new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, saveDataList.get(i).getBARCODE());
ps.setString(2, saveDataList.get(i).getSITE());
ps.setString(3, saveDataList.get(i).getSHOP_ORDER());
ps.setString(4, saveDataList.get(i).getAZM());
ps.setString(5, saveDataList.get(i).getSEQ());
ps.setString(6, saveDataList.get(i).getSTATUS());
ps.setString(7, saveDataList.get(i).getCREATE_DATE());
ps.setString(8, saveDataList.get(i).getCREATE_USER());
ps.setString(9, saveDataList.get(i).getSFC());
}
@Override
public int getBatchSize() {
return saveDataList.size();
}
};
jdbcTemplate.batchUpdate(insertSql, bs);
类似的,jdbc也提供了单条保存的方法,多看源码
4.拼板过站
使用原有的拼版过站方法即可
5.2024/10/31新增日志功能
记录请求和传出的数据,有AOP的方法和暴力的接口记录,这里还没去研究到AOP,先介绍暴力记录的方法:
在Controller的try-catch中新开事务
String message = e.getMessage();
Throwable cause = e.getCause();
status = "失败";
while (cause != null){
message = cause.getMessage();
cause = cause.getCause();
}
dataLog(startTime,parmas,message,status);
dataLog为记录日志的方法,在Impl中记录不起效,需要在Controller中新开事务才可以记录