Commit 63d3ad9f5d8d615b2e2ff7005245574d004d3111

Authored by yeqianyong
1 parent d6dbfbad

楚江ERP-厂房信息维护(包含基本的增删改查)

  1 +package com.lframework.xingyun.basedata.bo.workshop;
  2 +
  3 +import com.fasterxml.jackson.annotation.JsonFormat;
  4 +import com.lframework.starter.common.constants.StringPool;
  5 +import com.lframework.starter.web.core.bo.BaseBo;
  6 +import com.lframework.xingyun.basedata.entity.Workshop;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import lombok.Data;
  9 +
  10 +import java.time.LocalDateTime;
  11 +
  12 +/**
  13 + * <p>
  14 + * 厂房信息 QueryBo
  15 + * </p>
  16 + */
  17 +@Data
  18 +public class GetWorkshopBo extends BaseBo<Workshop> {
  19 +
  20 + /**
  21 + * ID
  22 + */
  23 + @ApiModelProperty("ID")
  24 + private String id;
  25 +
  26 + /**
  27 + * 厂房编号
  28 + */
  29 + @ApiModelProperty("厂房编号")
  30 + private String code;
  31 +
  32 + /**
  33 + * 厂房名称
  34 + */
  35 + @ApiModelProperty("厂房名称")
  36 + private String name;
  37 +
  38 + /**
  39 + * 厂房类型
  40 + */
  41 + @ApiModelProperty("厂房类型")
  42 + private String type;
  43 +
  44 + /**
  45 + * 创建人
  46 + */
  47 + @ApiModelProperty("创建人")
  48 + private String createBy;
  49 +
  50 + /**
  51 + * 更新人
  52 + */
  53 + @ApiModelProperty("更新人")
  54 + private String updateBy;
  55 +
  56 + /**
  57 + * 创建时间
  58 + */
  59 + @ApiModelProperty("创建时间")
  60 + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
  61 + private LocalDateTime createTime;
  62 +
  63 + /**
  64 + * 更新时间
  65 + */
  66 + @ApiModelProperty("更新时间")
  67 + @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
  68 + private LocalDateTime updateTime;
  69 +
  70 + public GetWorkshopBo() {
  71 +
  72 + }
  73 +
  74 + public GetWorkshopBo(Workshop dto) {
  75 + super(dto);
  76 + }
  77 +
  78 + @Override
  79 + public BaseBo<Workshop> convert(Workshop dto) {
  80 + return super.convert(dto);
  81 + }
  82 +
  83 + @Override
  84 + protected void afterInit(Workshop dto) {
  85 + if (dto.getType() != null) {
  86 + this.type = dto.getType().getCode();
  87 + }
  88 + }
  89 +}
  1 +package com.lframework.xingyun.basedata.controller;
  2 +
  3 +import com.lframework.starter.web.core.annotations.security.HasPermission;
  4 +import com.lframework.starter.web.core.controller.DefaultBaseController;
  5 +import com.lframework.starter.web.core.utils.PageResultUtil;
  6 +import com.lframework.starter.web.core.components.resp.PageResult;
  7 +import com.lframework.starter.web.core.components.resp.InvokeResult;
  8 +import javax.annotation.Resource;
  9 +import javax.validation.constraints.NotBlank;
  10 +import com.lframework.xingyun.basedata.bo.workshop.GetWorkshopBo;
  11 +import com.lframework.xingyun.basedata.entity.Workshop;
  12 +import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
  13 +import com.lframework.xingyun.basedata.vo.workshop.CreateWorkshopVo;
  14 +import com.lframework.xingyun.basedata.vo.workshop.QueryWorkshopVo;
  15 +import com.lframework.xingyun.basedata.vo.workshop.UpdateWorkshopVo;
  16 +import io.swagger.annotations.ApiImplicitParam;
  17 +import com.lframework.starter.web.core.components.resp.InvokeResultBuilder;
  18 +import io.swagger.annotations.ApiOperation;
  19 +import com.lframework.starter.common.utils.CollectionUtil;
  20 +import io.swagger.annotations.Api;
  21 +import org.springframework.web.bind.annotation.DeleteMapping;
  22 +import org.springframework.validation.annotation.Validated;
  23 +import org.springframework.web.bind.annotation.*;
  24 +import javax.validation.Valid;
  25 +import java.util.List;
  26 +import java.util.stream.Collectors;
  27 +
  28 +
  29 +/**
  30 + * 厂房信息 Controller
  31 + */
  32 +@Api(tags = "厂房信息")
  33 +@Validated
  34 +@RestController
  35 +@RequestMapping("/workshop")
  36 +public class WorkshopController extends DefaultBaseController {
  37 +
  38 +
  39 + @Resource
  40 + private WorkshopService workshopService;
  41 +
  42 +
  43 + /**
  44 + * 查询列表
  45 + */
  46 + @ApiOperation("查询列表")
  47 + @HasPermission({"xingyun:tblworkshop:query"})
  48 + @GetMapping("/query")
  49 + public InvokeResult<PageResult<GetWorkshopBo>> query(@Valid QueryWorkshopVo vo) {
  50 +
  51 + PageResult<Workshop> pageResult = workshopService.query(getPageIndex(vo), getPageSize(vo), vo);
  52 +
  53 + List<Workshop> dataList = pageResult.getDatas();
  54 + List<GetWorkshopBo> results = null;
  55 + if (!CollectionUtil.isEmpty(dataList)) {
  56 + results = dataList.stream().map(GetWorkshopBo::new).collect(Collectors.toList());
  57 + }
  58 + return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results));
  59 + }
  60 +
  61 + /**
  62 + * 新增
  63 + */
  64 + @ApiOperation("新增")
  65 + @HasPermission({"xingyun:tblworkshop:add"})
  66 + @PostMapping
  67 + public InvokeResult<Void> create(@Valid CreateWorkshopVo vo) {
  68 + workshopService.create(vo);
  69 + return InvokeResultBuilder.success();
  70 + }
  71 +
  72 + /**
  73 + * 修改
  74 + */
  75 + @ApiOperation("修改")
  76 + @HasPermission({"xingyun:tblworkshop:modify"})
  77 + @PutMapping
  78 + public InvokeResult<Void> update(@Valid UpdateWorkshopVo vo) {
  79 + workshopService.update(vo);
  80 + return InvokeResultBuilder.success();
  81 + }
  82 +
  83 + /**
  84 + * 根据ID删除
  85 + */
  86 + @ApiOperation("根据ID删除")
  87 + @ApiImplicitParam(value = "id", name = "id", paramType = "query", required = true)
  88 + @HasPermission({"xingyun:tblworkshop:delete"})
  89 + @DeleteMapping
  90 + public InvokeResult<Void> deleteById(@NotBlank(message = "id不能为空!") String id) {
  91 + workshopService.deleteById(id);
  92 + return InvokeResultBuilder.success();
  93 + }
  94 +}
  1 +package com.lframework.xingyun.basedata.entity;
  2 +
  3 +import com.lframework.xingyun.basedata.enums.WorkshopType;
  4 +import com.baomidou.mybatisplus.annotation.FieldFill;
  5 +import com.baomidou.mybatisplus.annotation.TableField;
  6 +import com.baomidou.mybatisplus.annotation.TableName;
  7 +import com.lframework.starter.web.core.dto.BaseDto;
  8 +import com.lframework.starter.web.core.entity.BaseEntity;
  9 +import lombok.Data;
  10 +
  11 +import java.time.LocalDateTime;
  12 +
  13 +/**
  14 + * <p>
  15 + * 厂房信息
  16 + * </p>
  17 + */
  18 +@Data
  19 +@TableName("base_data_workshop")
  20 +public class Workshop extends BaseEntity implements BaseDto {
  21 +
  22 + private static final long serialVersionUID = 1L;
  23 +
  24 + public static final String CACHE_NAME = "TblWorkshop";
  25 +
  26 + /**
  27 + * ID
  28 + */
  29 + private String id;
  30 +
  31 + /**
  32 + * 厂房编号
  33 + */
  34 + private String code;
  35 +
  36 + /**
  37 + * 厂房名称
  38 + */
  39 + private String name;
  40 +
  41 + /**
  42 + * 厂房类型
  43 + */
  44 + private WorkshopType type;
  45 +
  46 + /**
  47 + * 创建人
  48 + */
  49 + @TableField(fill = FieldFill.INSERT)
  50 + private String createBy;
  51 +
  52 + /**
  53 + * 更新人
  54 + */
  55 + @TableField(fill = FieldFill.INSERT_UPDATE)
  56 + private String updateBy;
  57 +
  58 + /**
  59 + * 创建时间
  60 + */
  61 + @TableField(fill = FieldFill.INSERT)
  62 + private LocalDateTime createTime;
  63 +
  64 + /**
  65 + * 更新时间
  66 + */
  67 + @TableField(fill = FieldFill.INSERT_UPDATE)
  68 + private LocalDateTime updateTime;
  69 +}
  1 +package com.lframework.xingyun.basedata.enums;
  2 +
  3 +import com.baomidou.mybatisplus.annotation.EnumValue;
  4 +import com.lframework.starter.web.core.enums.BaseEnum;
  5 +
  6 +public enum WorkshopType implements BaseEnum<String> {
  7 +
  8 + PRO("PRO", "生产");
  9 +
  10 + @EnumValue
  11 + private final String code;
  12 +
  13 + private final String desc;
  14 +
  15 + WorkshopType(String code, String desc) {
  16 + this.code = code;
  17 + this.desc = desc;
  18 + }
  19 +
  20 + @Override
  21 + public String getCode() {
  22 +
  23 + return this.code;
  24 + }
  25 +
  26 + @Override
  27 + public String getDesc() {
  28 +
  29 + return this.desc;
  30 + }
  31 +}
  1 +package com.lframework.xingyun.basedata.impl.workshop;
  2 +
  3 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  4 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5 +import com.github.pagehelper.PageInfo;
  6 +import com.lframework.starter.web.core.impl.BaseMpServiceImpl;
  7 +import com.lframework.starter.web.core.utils.PageResultUtil;
  8 +import com.lframework.starter.web.core.components.resp.PageResult;
  9 +import com.lframework.starter.web.core.utils.OpLogUtil;
  10 +import com.lframework.starter.common.exceptions.impl.DefaultClientException;
  11 +import com.lframework.starter.web.core.utils.EnumUtil;
  12 +import com.lframework.starter.web.core.utils.IdUtil;
  13 +import com.lframework.starter.common.utils.ObjectUtil;
  14 +import com.lframework.starter.web.core.annotations.oplog.OpLog;
  15 +import com.lframework.starter.web.core.utils.PageHelperUtil;
  16 +import com.lframework.starter.common.utils.Assert;
  17 +import com.lframework.starter.web.inner.components.oplog.OtherOpLogType;
  18 +import com.lframework.xingyun.basedata.entity.Workshop;
  19 +import com.lframework.xingyun.basedata.enums.WorkshopType;
  20 +import com.lframework.xingyun.basedata.mappers.WorkshopMapper;
  21 +import com.lframework.xingyun.basedata.service.workshop.WorkshopService;
  22 +import com.lframework.xingyun.basedata.vo.workshop.CreateWorkshopVo;
  23 +import com.lframework.xingyun.basedata.vo.workshop.QueryWorkshopVo;
  24 +import com.lframework.xingyun.basedata.vo.workshop.UpdateWorkshopVo;
  25 +import org.springframework.transaction.annotation.Transactional;
  26 +import org.springframework.stereotype.Service;
  27 +
  28 +import java.util.List;
  29 +
  30 +
  31 +/**
  32 + * 厂房数据接口
  33 + */
  34 +@Service
  35 +public class WorkshopServiceImpl extends BaseMpServiceImpl<WorkshopMapper, Workshop> implements WorkshopService {
  36 +
  37 +
  38 + /**
  39 + * 分页获取厂房数据
  40 + *
  41 + * @param pageIndex 分页页码
  42 + * @param pageSize 分页大小
  43 + * @param vo 查询条件
  44 + * @return PageResult<Workshop>
  45 + */
  46 + @Override
  47 + public PageResult<Workshop> query(Integer pageIndex, Integer pageSize, QueryWorkshopVo vo) {
  48 + Assert.greaterThanZero(pageIndex);
  49 + Assert.greaterThanZero(pageSize);
  50 +
  51 + PageHelperUtil.startPage(pageIndex, pageSize);
  52 + List<Workshop> dataList = this.query(vo);
  53 +
  54 + return PageResultUtil.convert(new PageInfo<>(dataList));
  55 + }
  56 +
  57 +
  58 + /**
  59 + * 获取厂房数据
  60 + *
  61 + * @param vo 查询条件
  62 + * @return List<Workshop>
  63 + */
  64 + @Override
  65 + public List<Workshop> query(QueryWorkshopVo vo) {
  66 + return getBaseMapper().query(vo);
  67 + }
  68 +
  69 + /**
  70 + * 根据ID查询
  71 + *
  72 + * @param id 主键ID
  73 + * @return Workshop
  74 + */
  75 + @Override
  76 + public Workshop findById(String id) {
  77 + return getBaseMapper().selectById(id);
  78 + }
  79 +
  80 +
  81 + @OpLog(type = OtherOpLogType.class, name = "新增厂房信息,ID:{}", params = {"#id"})
  82 + @Transactional(rollbackFor = Exception.class)
  83 + @Override
  84 + public String create(CreateWorkshopVo vo) {
  85 + Workshop data = new Workshop();
  86 + data.setId(IdUtil.getId());
  87 + data.setCode(vo.getCode());
  88 + data.setName(vo.getName());
  89 + data.setType(EnumUtil.getByCode(WorkshopType.class, vo.getType()));
  90 +
  91 + getBaseMapper().insert(data);
  92 +
  93 + OpLogUtil.setVariable("id", data.getId());
  94 + OpLogUtil.setExtra(vo);
  95 +
  96 + return data.getId();
  97 + }
  98 +
  99 +
  100 + @OpLog(type = OtherOpLogType.class, name = "修改厂房信息,ID:{}", params = {"#id"})
  101 + @Transactional(rollbackFor = Exception.class)
  102 + @Override
  103 + public void update(UpdateWorkshopVo vo) {
  104 + Workshop data = getBaseMapper().selectById(vo.getId());
  105 + if (ObjectUtil.isNull(data)) {
  106 + throw new DefaultClientException("厂房信息不存在!");
  107 + }
  108 + LambdaUpdateWrapper<Workshop> updateWrapper = Wrappers.lambdaUpdate(Workshop.class)
  109 + .set(Workshop::getCode, vo.getType())
  110 + .set(Workshop::getName, vo.getName())
  111 + .set(Workshop::getType, EnumUtil.getByCode(WorkshopType.class, vo.getType()))
  112 + .eq(Workshop::getId, vo.getId());
  113 + getBaseMapper().update(updateWrapper);
  114 +
  115 + OpLogUtil.setVariable("id", data.getId());
  116 + OpLogUtil.setExtra(vo);
  117 + }
  118 +
  119 +
  120 + @OpLog(type = OtherOpLogType.class, name = "删除厂房信息,ID:{}", params = {"#id"})
  121 + @Transactional(rollbackFor = Exception.class)
  122 + @Override
  123 + public void deleteById(String id) {
  124 + getBaseMapper().deleteById(id);
  125 + }
  126 +}
  1 +package com.lframework.xingyun.basedata.mappers;
  2 +
  3 +import com.lframework.starter.web.core.mapper.BaseMapper;
  4 +import com.lframework.xingyun.basedata.entity.Workshop;
  5 +import com.lframework.xingyun.basedata.vo.workshop.QueryWorkshopVo;
  6 +import org.apache.ibatis.annotations.Param;
  7 +
  8 +import java.util.List;
  9 +
  10 +/**
  11 + * <p>
  12 + * 厂房信息 Mapper 接口
  13 + * </p>
  14 + */
  15 +public interface WorkshopMapper extends BaseMapper<Workshop> {
  16 +
  17 + /**
  18 + * 查询列表
  19 + *
  20 + * @param vo 查询条件
  21 + * @return Workshop
  22 + */
  23 + List<Workshop> query(@Param("vo") QueryWorkshopVo vo);
  24 +}
  1 +package com.lframework.xingyun.basedata.service.workshop;
  2 +
  3 +import com.lframework.starter.web.core.service.BaseMpService;
  4 +import com.lframework.starter.web.core.components.resp.PageResult;
  5 +import com.lframework.xingyun.basedata.entity.Workshop;
  6 +import com.lframework.xingyun.basedata.vo.workshop.CreateWorkshopVo;
  7 +import com.lframework.xingyun.basedata.vo.workshop.QueryWorkshopVo;
  8 +import com.lframework.xingyun.basedata.vo.workshop.UpdateWorkshopVo;
  9 +
  10 +import java.util.List;
  11 +
  12 +
  13 +/**
  14 + * 厂房信息 Service
  15 + */
  16 +public interface WorkshopService extends BaseMpService<Workshop> {
  17 +
  18 + /**
  19 + * 分页获取厂房数据
  20 + *
  21 + * @return PageResult<Workshop>
  22 + */
  23 + PageResult<Workshop> query(Integer pageIndex, Integer pageSize, QueryWorkshopVo vo);
  24 +
  25 + /**
  26 + * 获取厂房数据
  27 + *
  28 + * @param vo 查询条件
  29 + * @return List<Workshop>
  30 + */
  31 + List<Workshop> query(QueryWorkshopVo vo);
  32 +
  33 + /**
  34 + * 根据ID查询
  35 + *
  36 + * @param id 主键ID
  37 + * @return Workshop
  38 + */
  39 + Workshop findById(String id);
  40 +
  41 + /**
  42 + * 创建
  43 + *
  44 + * @param vo 创建数据
  45 + * @return String
  46 + */
  47 + String create(CreateWorkshopVo vo);
  48 +
  49 + /**
  50 + * 修改
  51 + *
  52 + * @param vo 更新数据
  53 + */
  54 + void update(UpdateWorkshopVo vo);
  55 +
  56 + /**
  57 + * 根据ID删除
  58 + *
  59 + * @param id 主键ID
  60 + */
  61 + void deleteById(String id);
  62 +}
  1 +package com.lframework.xingyun.basedata.vo.workshop;
  2 +
  3 +import com.lframework.starter.web.core.components.validation.IsEnum;
  4 +import javax.validation.constraints.NotBlank;
  5 +import com.lframework.starter.web.core.vo.BaseVo;
  6 +import com.lframework.xingyun.basedata.enums.WorkshopType;
  7 +import io.swagger.annotations.ApiModelProperty;
  8 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
  9 +import org.hibernate.validator.constraints.Length;
  10 +import java.io.Serializable;
  11 +import lombok.Data;
  12 +
  13 +@Data
  14 +public class CreateWorkshopVo implements BaseVo, Serializable {
  15 +
  16 + private static final long serialVersionUID = 1L;
  17 +
  18 + /**
  19 + * 厂房编号
  20 + */
  21 + @ApiModelProperty(value = "厂房编号", required = true)
  22 + @NotBlank(message = "请输入厂房编号!")
  23 + @Length(message = "厂房编号最多允许20个字符!")
  24 + private String code;
  25 +
  26 + /**
  27 + * 厂房名称
  28 + */
  29 + @ApiModelProperty(value = "厂房名称", required = true)
  30 + @NotBlank(message = "请输入厂房名称!")
  31 + @Length(message = "厂房名称最多允许50个字符!")
  32 + private String name;
  33 +
  34 + /**
  35 + * 厂房类型
  36 + */
  37 + @ApiModelProperty(value = "厂房类型", required = true)
  38 + @NotBlank(message = "请选择厂房类型!")
  39 + @IsEnum(message = "请选择厂房类型!", enumClass = WorkshopType.class)
  40 + @TypeMismatch(message = "厂房类型格式有误!")
  41 + private String type;
  42 +
  43 +}
  1 +package com.lframework.xingyun.basedata.vo.workshop;
  2 +
  3 +import com.lframework.xingyun.basedata.enums.WorkshopType;
  4 +import lombok.Data;
  5 +import com.lframework.starter.web.core.components.validation.IsEnum;
  6 +import com.lframework.starter.web.core.vo.PageVo;
  7 +import com.lframework.starter.web.core.vo.BaseVo;
  8 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
  9 +import io.swagger.annotations.ApiModelProperty;
  10 +import java.io.Serializable;
  11 +
  12 +@Data
  13 +public class QueryWorkshopVo extends PageVo implements BaseVo, Serializable {
  14 +
  15 + private static final long serialVersionUID = 1L;
  16 +
  17 + /**
  18 + * 厂房编号
  19 + */
  20 + @ApiModelProperty("厂房编号")
  21 + private String code;
  22 +
  23 + /**
  24 + * 厂房名称
  25 + */
  26 + @ApiModelProperty("厂房名称")
  27 + private String name;
  28 +
  29 + /**
  30 + * 厂房类型
  31 + */
  32 + @ApiModelProperty("厂房类型")
  33 + @TypeMismatch(message = "厂房类型格式有误!")
  34 + @IsEnum(message = "厂房类型格式有误!", enumClass = WorkshopType.class)
  35 + private String type;
  36 +
  37 +}
  1 +package com.lframework.xingyun.basedata.vo.workshop;
  2 +
  3 +import com.lframework.xingyun.basedata.enums.WorkshopType;
  4 +import lombok.Data;
  5 +import com.lframework.starter.web.core.components.validation.IsEnum;
  6 +import javax.validation.constraints.NotBlank;
  7 +import com.lframework.starter.web.core.vo.BaseVo;
  8 +import com.lframework.starter.web.core.components.validation.TypeMismatch;
  9 +import io.swagger.annotations.ApiModelProperty;
  10 +import org.hibernate.validator.constraints.Length;
  11 +import java.io.Serializable;
  12 +
  13 +@Data
  14 +public class UpdateWorkshopVo implements BaseVo, Serializable {
  15 +
  16 + private static final long serialVersionUID = 1L;
  17 +
  18 + /**
  19 + * ID
  20 + */
  21 + @ApiModelProperty(value = "ID", required = true)
  22 + @NotBlank(message = "id不能为空!")
  23 + private String id;
  24 +
  25 + /**
  26 + * 厂房名称
  27 + */
  28 + @ApiModelProperty(value = "厂房名称", required = true)
  29 + @NotBlank(message = "请输入厂房名称!")
  30 + @Length(message = "厂房名称最多允许50个字符!")
  31 + private String name;
  32 +
  33 + /**
  34 + * 厂房类型
  35 + */
  36 + @ApiModelProperty(value = "厂房类型", required = true)
  37 + @TypeMismatch(message = "厂房类型格式有误!")
  38 + @NotBlank(message = "请选择厂房类型!")
  39 + @IsEnum(message = "请选择厂房类型!", enumClass = WorkshopType.class)
  40 + private String type;
  41 +
  42 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.lframework.xingyun.basedata.mappers.WorkshopMapper">
  4 +
  5 + <resultMap id="TblWorkshop" type="com.lframework.xingyun.basedata.entity.Workshop">
  6 + <id column="id" property="id"/>
  7 + <result column="code" property="code"/>
  8 + <result column="name" property="name"/>
  9 + <result column="type" property="type"/>
  10 + <result column="create_by" property="createBy"/>
  11 + <result column="update_by" property="updateBy"/>
  12 + <result column="create_time" property="createTime"/>
  13 + <result column="update_time" property="updateTime"/>
  14 + </resultMap>
  15 +
  16 + <sql id="TblWorkshop_sql">
  17 + SELECT
  18 + tb.id,
  19 + tb.code,
  20 + tb.name,
  21 + tb.type,
  22 + tb.create_by,
  23 + tb.update_by,
  24 + tb.create_time,
  25 + tb.update_time
  26 + FROM tbl_workshop AS tb
  27 + </sql>
  28 +
  29 + <select id="query" resultMap="TblWorkshop">
  30 + <include refid="TblWorkshop_sql"/>
  31 + <where>
  32 + <if test="vo.code != null and vo.code != ''">
  33 + AND tb.code LIKE CONCAT('%', #{vo.code})
  34 + </if>
  35 + <if test="vo.name != null and vo.name != ''">
  36 + AND tb.name LIKE CONCAT('%', #{vo.name})
  37 + </if>
  38 + <if test="vo.type != null">
  39 + AND tb.type = #{vo.type}
  40 + </if>
  41 + </where>
  42 + </select>
  43 +</mapper>