跳到主要内容

3-拼板分板配置

这算是第一个正式接手的比较大的项目,有点难度,代码不难写,主要是逻辑难以捋顺.

PCB:印刷电路板

SMT:一种工艺,对PCB进行贴片,将一些元器件安装到PCB板上

1. 业务背景

一块板子经过镭射打码后会生成条码,上传MES,此时一块拼板(多块小板拼接,小板也有条码)已经形成绑定关系。拼板关系流入SMT工序(此时关系合格),流入下一个工序则不合格,只支持按实际关系绑定的一个一个过站。

1.1 任务

  1. 可以配置的按照机型,工序的拼板和分板方式

  2. 过站后变更

  3. 流过SMT后对板就行序列编码(标记1,2,3,.........)

  4. 支持按照工序的批量拼板绑定以及后续的解绑操作

  5. 支持按照工序实时分板

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来包裹核心代码,适当时候抛出异常.

服务编写逻辑:

  1. 注入@Service
  2. 注入Dao
  3. 注入一些其他的Service类
  4. ServiceImpl实现Service的服务
  5. Controller调用Service服务
try{

demo------
if(条件){
throw new RuntimeException(message);
}
demo------

}catch (Exception e){
throw new RuntimeException(e.getMessage(),e);
}

4.2 接口编写

接口编写主要就是调用Service提供服务,获取或者返回数据.注意功能逻辑卸载Impl类中,不要在Controller中书写功能.

接口编写逻辑:

  1. 注入@RestController,@RequestMapping(value = "该Controller入口")
  2. 注入@Api(value = " ",tags = " ")开启Swagger
  3. 注入需要的服务类
  4. 根据获取或者返回的数据需求,选择是否使用Json还是普通表单
  5. 表单可以使用@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);
}
}