0
点赞
收藏
分享

微信扫一扫

自定义Vo

V0(value object)值对象

通常用于业务层之间的数据传递,和PO -样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。用new关键字创建由GC回收的。View object:视图对象; 接受页面传递来的数据,封装对象将业务处理完成的对象,封装成页面要用的数据

//ConTroller 控制层只接收 处理请求 校验数据 //service 接受controller 传来数据业务处理 //ConTroller接收 service 处理完数据 封装成页面 指定的Vo

//1.创建AttrVo 
@Data//自动生成get set 方法
public class AttrVo {
    //将attr中所有属性复制过来
/**
 * 并加入新的分组id
 */
private Long attrGroupId;

//2.AttrController
//AttrEntity 改成AttrVo 多接收一个attrGroupId 属性分组id
@RequestMapping("/save")
  public R save(@RequestBody AttrVo attr){
attrService.saveAttr(attr);
      return R.ok();
  }
//3.AttrService
void saveAttr(AttrVo attr);

//4.impl
@Transactional
@Override //attr页面来的数值
public void saveAttr(AttrVo attr) {
    //1.先保存基本信息 在保存其他信息 先存AttrEntity
    AttrEntity attrEntity = new AttrEntity();
    //用springBeanUtils.copyProperties 复制属性 第一个是属性的来源 第二个是复制到哪
    //将页码的来的数值attr 复制到attrao中
    BeanUtils.copyProperties(attr,attrEntity);
    this.save(attrEntity);
    //2.保存关联关系 是关联系 pms_attr_attrgroup_relation 注入dao
    AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
    //关系表使劲儿中属性分组id是attr获取id
    relationEntity.setAttrGroupId(attr.getAttrGroupId());
    //同 属性 id 是实体attrid
    relationEntity.setAttrId(attrEntity.getAttrId());
    relationDao.insert(relationEntity);
}
  • 【 规格参数 baseattr】在返回数据时候 需要显示catelogName 和groupName 定义:AttrRespVo 在查询一遍 分组 和分页信息 封装返回
@Data // 响应数据 基本包含 attr 直接继承AttrVo即可
public class AttrRespVo extends AttrVo {
    private String catelogName; //分类名字
    private String groupName; //分组名字
}

// 显示某一条信息
  @RequestMapping("/info/{attrId}")
  public R info(@PathVariable("attrId") Long attrId){
//AttrEntity attr = attrService.getById(attrId);
      AttrRespVo respVo = attrService.getAttrInfo(attrId);
      return R.ok().put("attr", respVo);
  }
  @Override
public AttrRespVo getAttrInfo(Long attrId) {
    //根据返回要字段要求 返回respVo
    AttrRespVo respVo = new AttrRespVo();
    //先查详细信息
    AttrEntity attrEntity = this.getById(attrId);
    BeanUtils.copyProperties(attrEntity,respVo);
    //放置分类id、和完整路径
    // 分组信息 respVo.setAttrGroupId(); 调用分组信息 查询selectOne一条数据,
    // 根据返回分组信息 关系表查询 attr_id 等于发过来请求的attrId 返回这一条数据attrAttrgroup
    AttrAttrgroupRelationEntity attrgroupRelation 
    = relationDao.selectOne(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attrId));
    if (attrgroupRelation!=null){
        respVo.setAttrGroupId(attrgroupRelation.getAttrGroupId());
        AttrGroupEntity attrGroupEntity = attrGroupDao.selectById(attrgroupRelation.getAttrGroupId());
        if (attrGroupEntity!=null){
            respVo.setGroupName(attrGroupEntity.getAttrGroupName());
        }
    }
    //respVo.setCatelogPath(); 查询分类的路径
    Long catelogId = attrEntity.getCatelogId();
    //调用之前service 传入catelogId
    Long[] catelogPath = categoryService.findCatelogPath(catelogId);
    respVo.setCatelogPath(catelogPath);
    CategoryEntity categoryEntity = categoryDao.selectById(catelogId);
    if (categoryEntity!=null){
        respVo.setCatelogName(categoryEntity.getName());
    }
    return respVo;
}

【 规格参数 baseattr】修改记录Attr

@Transactional
@Override
public void updateAttr(AttrVo attr) {
    AttrEntity attrEntity = new AttrEntity();
    //复制 接收页面的attr 放到attrEntity
    BeanUtils.copyProperties(attr,attrEntity);
    //修改基本属性
    this.updateById(attrEntity);
    //修改分组关联 不是按照id 修改 是按照attr_id 修改的
    AttrAttrgroupRelationEntity relationEntity
     = new AttrAttrgroupRelationEntity();
    //更新属性分组id
    relationEntity.setAttrGroupId(attr.getAttrGroupId());
    //更新 属性id
    relationEntity.setAttrId(attr.getAttrId());
    //查询记录数 如果大于0 则是修改 否则新增
    Integer count = relationDao.selectCount(new QueryWrapper<AttrAttrgroupRelationEntity>().eq("attr_id", attr.getAttrId()));
    if (count>0){
        //更新 :依据 attr_id 更新关联关系表
        relationDao.update(relationEntity, new UpdateWrapper<AttrAttrgroupRelationEntity>().eq("attr_id",attr.getAttrId()));
    }else {
        relationDao.insert(relationEntity);
    }
}
  • 【 销售属性saleattr】新增Attr和规格属性几乎差不多,
//product/attr/sale/list/{catelogId} 基本属性和销售属性基本一致 一个当两个用
@GetMapping("/{attrType}/list/{catelogId}")
public R baseAttrList(@RequestParam Map<String, Object> params,
                      @PathVariable("catelogId") Long catelogId,
                      @PathVariable("attrType") String type){
    PageUtils page =attrService.queryBaseAttrPage(params,catelogId,type); //定义分页查询传入 分页条件params 和catelogId 一起返回给PageUtils page
    return R.ok().put("page", page);//return 出去page信息
}

获取指定分组关联的所有属性相应数据

image.png

//controller层
@GetMapping("{attrgroupId}/attr/relation")
public R attrReleation(@PathVariable("attrgroupId") Long attrgroupId){
//调用getRelationAttr传入attrgroupId 需要返回一个List里面是AttrEntity 的数据即List<AttrEntity>
    List<AttrEntity> entities = attrService.getRelationAttr(attrgroupId);
    //返回改数据data数组里面是entities
    return R.ok().put("data",entities);
}
[]是数组形b形式,{}是对象形式,都du可以包含其他类型.

@Override //根据attrgroupId查找关联的所有基本属性
public List<AttrEntity> getRelationAttr(Long attrgroupId) {
    //先去关联 关系表查找attrgroupId 对应的attrid
    // 这是查询的是 所有attrgroupId相关的,用selectList
    List<AttrAttrgroupRelationEntity> entities 
    = relationDao.selectList(new QueryWrapper<AttrAttrgroupRelationEntity>()
    .eq("attr_group_id", attrgroupId));
    //收集属性id 返回一个Long 类型的attr集合
    List<Long> attrIds = entities.stream().map((hahaha) -> {
        return hahaha.getAttrId();
    }).collect(Collectors.toList());

    //2.查出当前所以属性 通过属性的ids集合
    Collection<AttrEntity> attrEntities = this.listByIds(attrIds);
    //返回 并转换
    return (List<AttrEntity>) attrEntities;

根据 非id 两个字段删除

@Data
public class AttrGroupRelationVo {
    //定义vo 接收传入两个非主键 字段
    private  Long attrId;
    private  Long attrGroupId;
}

//接受的是一个对象 用[]
@PostMapping("/attr/relation/delete")
public R deleteRelation(@RequestBody AttrGroupRelationVo[] vos){
    attrService.deleteRelation(vos);
    return R.ok();
}

@Override
public void deleteRelation(AttrGroupRelationVo[] vos) {
    //传入参数 批量删除 传入关联关系实体类
    //Arrays.asList的作用是将数组转化为list
    List<AttrAttrgroupRelationEntity> entites = Arrays.asList(vos).stream().map((item) -> {
        AttrAttrgroupRelationEntity relationEntity = new AttrAttrgroupRelationEntity();
        BeanUtils.copyProperties(item, relationEntity);
        //item复制到 relationEntity
        return relationEntity;
    }).collect(Collectors.toList());
    relationDao.deleteBatchRelation(entites);
}

void deleteBatchRelation(@Param("entites") List<AttrAttrgroupRelationEntity> entites);

<delete id="deleteBatchRelation">
    delete from pms_attr_attrgroup_relation where
--         遍历循环删除 item  separator是分隔符 or 
    <foreach collection="entites" item="item" separator="OR">
    (attr_id=#{item.attrId} and attr_group_id=#{item.attrGroupId})
    </foreach>
</delete>

定义Vo

image.png

public class PurchaseDoneVo {
    private Long id;
    private List<PurchaseItemDoneVo> items;
}
和
public class PurchaseItemDoneVo {
    private Long itemId;
    private Integer status;
    private String reason;
}

RequestBody  接收处理
@PostMapping("/done")
public  R finish(@RequestBody PurchaseDoneVo doneVo){
    purchaseService.done(doneVo);
    return R.ok();
}
void done(PurchaseDoneVo doneVo);
举报

相关推荐

0 条评论