栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

谷粒商城7——【基础篇完结】商品服务-新增商品 、仓库管理 商品属性的上传 feign远程调用方法 复杂业务逻辑的实现 基础篇完结-小总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谷粒商城7——【基础篇完结】商品服务-新增商品 、仓库管理 商品属性的上传 feign远程调用方法 复杂业务逻辑的实现 基础篇完结-小总结

文章目录
  • 九、商品服务-新增商品
    • 1.调试会员等级相关接口
    • 2.获取分类相关的品牌
    • 3.获取分类下所有分组及属性
    • 4.提交商品数据
  • 十、仓库管理
    • 1.仓库维护-查询
    • 2.合并采购需求
    • 3.模拟移动端员工领取采购单
    • 4.完成采购
    • 5.获取SPU规格
    • 6.修改SPU规格
  • 十一、基础篇完结——总结

九、商品服务-新增商品 1.调试会员等级相关接口

将会员模块加入到网关路由

2.获取分类相关的品牌

接口文档:

新建一个BrandRespVo来返回数据

package com.henu.soft.merist.gulimall.product.vo;

import lombok.Data;

@Data
public class BrandRespVo {
    private Long brandId;

    private String brandName;
}

===================CategoryBrandRelationController.java==============
    
    @GetMapping("/brands/list")
    public R brandList (@RequestParam("catId") Long catelogId){
        List brandRespVos= categoryBrandRelationService.getBrandsByCatelogId(catelogId);

        return R.ok().put("data",brandRespVos);
    }
==================CategoryBrandRelationServiceImpl.java======================
    @Override
    public List getBrandsByCatelogId(Long catelogId) {
        List categoryBrandRelationEntities = categoryBrandRelationDao.selectList(new QueryWrapper().eq("catelog_id",catelogId));
        List brandRespVos = new ArrayList();
        if (categoryBrandRelationEntities.size() != 0 && categoryBrandRelationEntities != null){
            brandRespVos = categoryBrandRelationEntities.stream().map(categoryBrandRelationEntity -> {
                BrandRespVo brandRespVo = new BrandRespVo();
                brandRespVo.setBrandId(categoryBrandRelationEntity.getBrandId());
                BrandEntity brandEntity = brandDao.selectById(categoryBrandRelationEntity.getBrandId());
                if (brandEntity != null) {
                    brandRespVo.setBrandName(brandEntity.getName());
                }
                return brandRespVo;
            }).collect(Collectors.toList());
        }
        return brandRespVos;
    }

3.获取分类下所有分组及属性

==================AttrGroupController.java======================
    ///product/attrgroup/{catelogId}/withattr
    @GetMapping("/{catelogId}/withattr")
    public R withattr(@PathVariable("catelogId") Long catelogId){
        List attrGroupWithAttrsVos = attrGroupService.getCategoryBrandGroupByCatelogId(catelogId);
        return R.ok().put("data",attrGroupWithAttrsVos);
    }
=================AttrGroupServiceImpl.java==========================
    @Override
    public List getCategoryBrandGroupByCatelogId(Long catelogId) {
        //查询基本数据
        List attrGroupEntities = this.list(new QueryWrapper().eq("catelog_id",catelogId));

        //查询attrs
        List collect = attrGroupEntities.stream().map( group->{
            AttrGroupWithAttrsVo attrsVo = new AttrGroupWithAttrsVo();
            //存入基本数据
            BeanUtils.copyProperties(group,attrsVo);
            //存入attrs
            List relationAttr = attrService.getRelationAttr(group.getAttrGroupId());
            attrsVo.setAttrs(relationAttr);
            return attrsVo;
        }).collect(Collectors.toList());

        return collect;
    }

4.提交商品数据

提交数据,在控制台获取到表单的json数据

在线json转java实体类网站:www.bejson.com

将生成的vo类中的所有价格字段、小数字段都改为BigDecimal数据结构 清空get、set方法增加@Data注解

保存业务流程分析

商品服务调用优惠券积分服务

多条件查询

 @Override
    public PageUtils queryPageByCondition(Map params) {

        QueryWrapper wrapper = new QueryWrapper<>();

        String key = (String) params.get("key");
        if(!StringUtils.isEmpty(key)){
            wrapper.and((w)->{
                w.eq("id",key).or().like("spu_name",key);
            });
        }
        
        // status=1 and (id=1 or spu_name like xxx)
        
        String status = (String) params.get("status");
        if(!StringUtils.isEmpty(status)){
            wrapper.eq("publish_status",status);
        }

        String brandId = (String) params.get("brandId");
        if(!StringUtils.isEmpty(brandId)&&!"0".equalsIgnoreCase(brandId)){
            wrapper.eq("brand_id",brandId);
        }

        String catelogId = (String) params.get("catelogId");
        if(!StringUtils.isEmpty(catelogId)&&!"0".equalsIgnoreCase(catelogId)){
            wrapper.eq("catalog_id",catelogId);
        }

        

        IPage page = this.page(
                new Query().getPage(params),
                wrapper
        );

        return new PageUtils(page);
    }

日期格式处理

十、仓库管理 1.仓库维护-查询

仓库查询

在生成的代码上加上检索条件即可

库存查询

采购需求查询

2.合并采购需求

采购简要流程

在【合并到采购单】里获取到所有未被领取的采购单

合并采购需求

在common模块新增一个WareConstant

package com.henu.soft.merist.common.constant;

public class WareConstant {
    public enum PurchaseStatusEnum{
        CREATED(0,"新建"),ASSIGNED(1,"已分配"),
        RECEIVE(2,"已领取"),FINISH(3,"已完成"),
        HASERROR(4,"有异常");
        private int code;
        private String msg;

        PurchaseStatusEnum(int code,String msg){
            this.code = code;
            this.msg = msg;
        }

        public int getCode() {
            return code;
        }

        public String getMsg() {
            return msg;
        }
    }

    public enum PurchaseDetailStatusEnum{
        CREATED(0,"新建"),ASSIGNED(1,"已分配"),
        BUYING(2,"正在采购"),FINISH(3,"已完成"),
        HASERROR(4,"采购失败");
        private int code;
        private String msg;

        PurchaseDetailStatusEnum(int code,String msg){
            this.code = code;
            this.msg = msg;
        }

        public int getCode() {
            return code;
        }

        public String getMsg() {
            return msg;
        }
    }
}

业务逻辑

@Transactional
    @Override
    public void mergePurchase(MergeVo mergeVo) {
        Long purchaseId = mergeVo.getPurchaseId();

        if (purchaseId == null){
            PurchaseEntity purchaseEntity = new PurchaseEntity();

            purchaseEntity.setStatus(WareConstant.PurchaseStatusEnum.CREATED.getCode());
            purchaseEntity.setCreateTime(new Date());
            purchaseEntity.setUpdateTime(new Date());
            this.save(purchaseEntity);
            purchaseId = purchaseEntity.getId();
        }

        List items = mergeVo.getItems();
        Long finalPurchaseId = purchaseId;

        List collect = items.stream().map(i -> {
            PurchaseDetailEntity purchaseDetailEntity = new PurchaseDetailEntity();

            purchaseDetailEntity.setId(i);
            purchaseDetailEntity.setPurchaseId(finalPurchaseId);
            purchaseDetailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.ASSIGNED.getCode());

            return purchaseDetailEntity;
        }).collect(Collectors.toList());

        detailService.updateBatchById(collect);

        //时间
        PurchaseEntity purchaseEntity = new PurchaseEntity();
        purchaseEntity.setId(purchaseId);
        purchaseEntity.setUpdateTime(new Date());
        this.updateById(purchaseEntity);

    }
3.模拟移动端员工领取采购单

@Override
    public void getReveived(List ids) {
        //确认采购单是新建或者已分配状态
        List collect = ids.stream().map(id -> {
            PurchaseEntity byId = this.getById(id);
            return byId;
        }).filter(item -> {
            if (item.getStatus() == WareConstant.PurchaseStatusEnum.CREATED.getCode() ||
            item.getStatus() == WareConstant.PurchaseStatusEnum.ASSIGNED.getCode()){
                return true;
            }
            return false;
        }).map(item -> {
            //改变采购单状态
            item.setStatus(WareConstant.PurchaseStatusEnum.RECEIVE.getCode());
            item.setUpdateTime(new Date());
            return item;
        }).collect(Collectors.toList());

        //更新采购单的状态
        this.updateBatchById(collect);

        //改变采购项的状态
        collect.forEach(item -> {
            List entities = detailService.listDetailByPurchaseId(item.getId());
            List collect1 = entities.stream().map(entity -> {
                PurchaseDetailEntity entity1 = new PurchaseDetailEntity();
                entity1.setId(entity.getId());
                entity1.setStatus(WareConstant.PurchaseDetailStatusEnum.BUYING.getCode());
                return entity1;
            }).collect(Collectors.toList());
            detailService.updateBatchById(collect1);
        });
    }

Postman模拟app访问接口

4.完成采购

新建两个vo接收数据

远程调用了product的info

  =======================PurchaseServiceImpl.java======================
	@Transactional
    @Override
    public void postDone(PurchaseDoneVo purchaseDoneVo) {

        Long id = purchaseDoneVo.getId();

        //改变采购项的状态
        Boolean flag = true;//用来判断是否进库
        List items = purchaseDoneVo.getItems();
        List updates = new ArrayList<>();

        //默认传来的status 只有 3、4 两种状态即 已完成、有错误
        for (PurchaseItemsDoneVo item : items) {
            PurchaseDetailEntity detailEntity = new PurchaseDetailEntity();
            if (item.getStatus() == WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode()){
                flag = false;
                detailEntity.setStatus(item.getStatus());
            }else {
                //全部采购成功
                detailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.FINISH.getCode());
                //成功入库
                PurchaseDetailEntity entity = purchaseDetailService.getById(item.getItemId());
                wareSkuService.addstock(entity.getSkuId(),entity.getWareId(),entity.getSkuNum());
            }

            detailEntity.setId(item.getItemId());
            updates.add(detailEntity);
        }

        detailService.updateBatchById(updates);

        //改变采购单的状态

        //将成功采购的进行入库
    }
==============================WareSkuServcieImpl.java============================
	@Override
    public void addstock(Long skuId, Long wareId, Integer skuNum) {
        //库不存在就新增
        List entities = wareSkuDao.selectList(new QueryWrapper().eq("sku_id",skuId));
        if (entities == null || entities.size() == 0){
            WareSkuEntity wareSkuEntity = new WareSkuEntity();
            wareSkuEntity.setSkuId(skuId);
            wareSkuEntity.setStock(skuNum);
            wareSkuEntity.setWareId(wareId);
            wareSkuEntity.setStockLocked(0);
            //TODO 远程查询sku的名字 失败则整个事务无需回滚
            //自己catch异常
            //TODO 还有什么方法让异常出现后不回滚?高级
            try {
                R info = productFeignService.info(skuId);
                Map data = (Map) info.get("skuInfo");

                if (info.getCode() == 0){
                    wareSkuEntity.setSkuName((String) data.get("skuName"));
                }
            }catch (Exception e){

            }
            wareSkuDao.insert(wareSkuEntity);
        }else {
            wareSkuDao.addStock(skuId,wareId,skuNum);
        }
    }

更新成功

5.获取SPU规格

@Override
public List getSpuList(Long spuId) {
    return productAttrValueDao.selectList(new QueryWrapper().eq("spu_id", spuId));
}
6.修改SPU规格

@Override
public void updateSpu(Long spuId,List productAttrValueEntityList) {
    //删除之前的spu
    this.baseMapper.delete(new QueryWrapper().eq("spu_id",spuId));

    //保存更新的spu
    List collect = productAttrValueEntityList.stream().map(entity -> {
        entity.setSpuId(spuId);
        return entity;
    }).collect(Collectors.toList());
    this.saveBatch(collect);

}
十一、基础篇完结——总结

理论篇章包括:

  • 谷粒商城项目1——分布式基础概念、环境搭建_HotRabbit.的博客-CSDN博客
  • 谷粒商城项目2——环境搭建、renren-generator逆向生成所有微服务基本CRUD代码_HotRabbit.的博客-CSDN博客
  • 谷粒商城项目3——微服务——注册中心、配置中心、网关:SpringCloud Alibaba、Nacos、OpenFeign、GateWay_HotRabbit.的博客-CSDN博客_微服务网关注册中心
  • 谷粒商城项目4——前端基础 Vue框架的属性 ES6前端编程规范学习_HotRabbit.的博客-CSDN博客_谷粒商城前端

代码CRUD包括:

  • 谷粒商城5——商品信息-分类维护、品牌管理 GateWay 网关路由配置 文件上传功能 OSS对象存储 前后端表单校验 后端JSR303校验 JSR303分组、自定义校验 统一异常处理_HotRabbit.的博客-CSDN博客
  • 谷粒商城6—— MyBatis-Plus分页插件 模糊查询 大数据多表查询高效查询 平台属性业务代码的实现 Object划分:PODOTODTOVOBOPOJODAO_HotRabbit.的博客-CSDN博客
  • 还有本篇

在理论篇章,一些环境的搭建、测试都会随着后续版本的提升 或者在入职公司后开发版本的不同 而产生不同的错误信息。所以更要掌握的是在官网学习的能力,独自阅读文档的能力。在部署、测试时产生的经验往往都是面试时的谈资。同时为了准备面试也要开始背八股文了。

5、6、7篇都是代码的CRUD,其中还包含一些配置性的代码,比如网关的配置、OSS对象存储等等。CRUD写到后面已经可以自己根据接口开发了,最近想利用空闲时间根据renren-fast开发一个比较新颖的项目,有意的同学可以联系我一起想点子,做一个自己的项目。

作为一名准大三生,这个暑假才开始考驾驶证,不过等车的时候就是个背八股文、看面经、夯实基础的好机会,不学车的时候就做项目、敲代码。加油吧~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号