3-拼板分板配置
这算是第一个正式接手的比较大的项目,有点难度,代码不难写,主要是逻辑难以捋顺.
PCB:印刷电路板
SMT:一种工艺,对PCB进行贴片,将一些元器件安装到PCB板上
1. 业务背景
一块板子经过镭射打码后会生成条码,上传MES,此时一块拼板(多块小板拼接,小板也有条码)已经形成绑定关系。拼板关系流入SMT工序(此时关系合格),流入下一个工序则不合格,只支持按实际关系绑定的一个一个过站。
1.1 任务
-
可以配置的按照机型,工序的拼板和分板方式
-
过站后变更
-
流过SMT后对板就行序列编码(标记1,2,3,.........)
-
支持按照工序的批量拼板绑定以及后续的解绑操作
-
支持按照工序实时分板
2.数据库设计
涉及机密,数据库设计初始设计考虑不周,在生产中尽量可以不用外键关联,根据需求适当添加一些方便自己操作的字段,或者关联字段.
3.JPA工具 && SQL执行
3.1 JPA
JPA是JAVA跟数据库交互的一种工具,不同于MyBatis需要写xml文件和SQL来交互,JPA可以根据一些命名规范来直接完成交互,简单的增删查改可以不用写SQL.
1.构建实体类,加上注解
@MetaData("")
@Entity
@Table(name = "")
2.构建Dao,加上注解并extends Jpa
在Dao中可以使用JPA规范来写数据库交互的函数,也可以使用JPQL的方式来自定义SQL
@Repository
public interface TestDao extends JpaRepository<Test,String> {
//func1
List<String> searchResultById(String Id)
//func2
@Query(value = "select Result from table where Id =: Id",nativeQuery = true)
List<String> searchResultById_1(@Param("Id")String Id)
}JPA
3.在Impl中使用Dao也可以快捷的使用save,delete等方法,只用过save,传入实体类即可,直接调用Dao.save(Class)即可在数据库中插入新数据.
3.2 SQL执行
内部还是封装有直接执行SQL的方法,使用JPA是方便,但是遇到繁杂的业务,需要几次的JPA才能解决,增加了与数据库交互次数,性能损耗大.
可以直接书写SQL,通过封装好的方法执行即可.
String preProcess;
StringBuffer sql;
sql = new StringBuffer();
List<Map<String,Object>> sqlResult = new ArrayList<>();//内部封装就是这个返回类型
sqlResult = baseFunctionService.getSqlResult(sql.toString());//还有其他很多方法,一般查询用这个
--------解析sqlResult的逻辑---------------
4.服务和接口手记
4.1 服务编写
生产环境中,总是会遇到多种多样的异常情况,所以服务实现的时候,基本使用try-catch来包裹核心代码,适当时候抛出异常.
服务编写逻辑:
- 注入@Service
- 注入Dao
- 注入一些其他的Service类
- ServiceImpl实现Service的服务
- Controller调用Service服务
try{
demo------
if(条件){
throw new RuntimeException(message);
}
demo------
}catch (Exception e){
throw new RuntimeException(e.getMessage(),e);
}
4.2 接口编写
接口编写主要就是调用Service提供服务,获取或者返回数据.注意功能逻辑卸载Impl类中,不要在Controller中书写功能.
接口编写逻辑:
- 注入@RestController,@RequestMapping(value = "该Controller入口")
- 注入@Api(value = " ",tags = " ")开启Swagger
- 注入需要的服务类
- 根据获取或者返回的数据需求,选择是否使用Json还是普通表单
- 表单可以使用@Parm和@RequestParm注解来获取参数,前者可为空后者不行
需要使用JSON: 当传入数据使用JSON或者返回JSON的时候,需要自己自定义类,以保存传入或者返回的对象,使用RequestBody Class class 的形式来获取JSON格式参数
@RestController
@RequestMapping(value = "/rachel/test")
@Api(value = "测试",tags = "test")
public class RachelTestController {
@Autowired
private TestService testService;
@ApiOperation(value = "test")
@RequestMapping(value = "/serachId",method={RequestMethod.POST})
public OperationResult serachDetais(
@RequestParam(value = "name")String name,
@Param(value = "sex")String sex) {
return TestService.serachId(name,sex);
}
@ApiOperation(value = "test")
@RequestMapping(value = "/serachId",method={RequestMethod.POST})
public OperationResult serachDetais(
@RequestBody Person person) {
return TestService.serachId(person.getName,person.getSex);
}
}