谷粒商城-基础篇-Day09-整合Ware服务
创始人
2024-05-10 11:03:07

整合Ware服务

将服务注册到nacos中

spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-ware
@MapperScan("com.atguigu.gulimall.ware.dao")//mybatis包扫描
@SpringBootApplication
@EnableDiscoveryClient//开启服务发现
@EnableTransactionManagement //开启事务管理

在这里插入图片描述

修改网关路由

        - id: wareuri: lb://gulimall-warepredicates:- Path=/api/ware/**filters:- RewritePath=/api/(?/?.*), /$\{segment}

仓库维护的模糊查询

在WareInfoController中

    @RequestMapping("/list")// @RequiresPermissions("ware:wareinfo:list")public R list(@RequestParam Map params){PageUtils page = wareInfoService.queryPageByConfitions(params);return R.ok().put("page", page);}

编写queryPageByConfitions(params)方法

    @Overridepublic PageUtils queryPageByConfitions(Map params) {QueryWrapper wareInfoEntityQueryWrapper = new QueryWrapper<>();String key = (String) params.get("key");if (!StringUtils.isEmpty(key)){wareInfoEntityQueryWrapper.eq("id",key).or().like("name",key).or().like("address",key).or().like("areacode",key);}IPage page = this.page(new Query().getPage(params),wareInfoEntityQueryWrapper);return new PageUtils(page);}

商品库存的模糊查询

实现效果:

在这里插入图片描述

在WareSkuController中

 /*** 列表*/@RequestMapping("/list")
// @RequiresPermissions("ware:waresku:list")public R list(@RequestParam Map params){PageUtils page = wareSkuService.queryPageByConditions(params);return R.ok().put("page", page);}

编写queryPageByConditions(params)方法

    @Overridepublic PageUtils queryPageByConditions(Map params) {QueryWrapper wareSkuEntityQueryWrapper = new QueryWrapper<>();//        wareId: 123,//仓库id
//         skuId: 123//商品idString wareId = (String) params.get("wareId");if (!StringUtils.isEmpty(wareId)){wareSkuEntityQueryWrapper.eq("ware_id",wareId);}String skuId = (String) params.get("skuId");if (!StringUtils.isEmpty(skuId)){wareSkuEntityQueryWrapper.eq("sku_id",skuId);}IPage page = this.page(new Query().getPage(params),wareSkuEntityQueryWrapper);return new PageUtils(page);}

采购需求的模糊查询

使用新增创建一个采购需求

并进行模糊查询

在PurchaseDetailController中

    @RequestMapping("/list")// @RequiresPermissions("ware:purchasedetail:list")public R list(@RequestParam Map params){PageUtils page = purchaseDetailService.queryPageByConditions(params);return R.ok().put("page", page);}

创建方法queryPageByConditions(params);

    @Overridepublic PageUtils queryPageByConditions(Map params) {
//        key:'华为',//检索关键字
//        status:0,//状态
//        wareId:1,//仓库idQueryWrapper purchaseDetailEntityQueryWrapper = new QueryWrapper<>();String key = (String) params.get("key");if (!StringUtils.isEmpty(key)){purchaseDetailEntityQueryWrapper.and((queryWrapper)->{queryWrapper.eq("id",key).or().eq("sku_id",key);});}String status = (String) params.get("status");if (!StringUtils.isEmpty(status)){purchaseDetailEntityQueryWrapper.eq("status",status);}String wareId = (String) params.get("wareId");if (!StringUtils.isEmpty(wareId)){purchaseDetailEntityQueryWrapper.eq("ware_id",wareId);}IPage page = this.page(new Query().getPage(params),purchaseDetailEntityQueryWrapper);return new PageUtils(page);}

合并采购需求

点击合并页面会发送一个请求

一、查询采购单

在这里插入图片描述

在PurchaseController中

    @RequestMapping("/unreceive/list")// @RequiresPermissions("ware:purchase:list")public R Unreceivelist(@RequestParam Map params){PageUtils page = purchaseService.queryPageUnreceive(params);return R.ok().put("page", page);}

编写queryPageUnreceive(params)方法

    @Overridepublic PageUtils queryPageUnreceive(Map params) {IPage page = this.page(new Query().getPage(params),new QueryWrapper().eq("status",0).or().eq("status",1));return new PageUtils(page);}

效果展示
在这里插入图片描述

二、合并采购单

点击合并,发送请求

在这里插入图片描述

创建一个vo对象接受参数

@Data
public class MergeVo {private Long purchaseId; //整单idprivate List items; //合并项集合
}

在PurchseController中

    @RequestMapping("/merge")// @RequiresPermissions("ware:purchase:delete")public R merge(@RequestBody MergeVo mergeVo){purchaseService.mergePurchase(mergeVo);return R.ok();}

编写mergePurchase(mergeVo)方法

    @Transactional@Overridepublic void mergePurchase(MergeVo mergeVo) {Long purchaseId = mergeVo.getPurchaseId();//判断要合并到的采购单是否存在if (purchaseId==null){//需要创建一个采购单PurchaseEntity purchaseEntity = new PurchaseEntity();purchaseEntity.setCreateTime(new Date());purchaseEntity.setUpdateTime(new Date());purchaseEntity.setStatus(WareConstant.PurchaseStatusEnum.CREATED.getCode());this.save(purchaseEntity);//新建完采购单后,就有采购单idpurchaseId=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());//进行更新就可以purchaseDetailService.updateBatchById(collect);//修改更新时间,采购单idPurchaseEntity purchaseEntity = new PurchaseEntity();purchaseEntity.setId(purchaseId);purchaseEntity.setUpdateTime(new Date());this.updateById(purchaseEntity);}}

并将原来的创建采购单的方法也设置创建事件和更新时间

  @RequestMapping("/save")//@RequiresPermissions("ware:purchase:save")public R save(@RequestBody PurchaseEntity purchase){purchase.setCreateTime(new Date());purchase.setUpdateTime(new Date());purchaseService.save(purchase);return R.ok();}

创建一个枚举类用来存放订单的状态

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;}}
}

领取采购单

使用postman模拟人工领取采购单http://localhost:88/api/ware/purchase/received在这里插入图片描述

在PurchaseController中

    @PostMapping("received")public R received(@RequestBody List ids){purchaseService.receiverByIds(ids);
return R.ok();}
  @Overridepublic void receiverByIds(List ids) {//修改采购单的状态List purchaseEntity= ids.stream().map((id) -> {PurchaseEntity byId = this.getById(id);return byId;//过滤出status为0或1的}).filter((item)->{if (item.getStatus()==WareConstant.PurchaseStatusEnum.CREATED.getCode()||item.getStatus()==WareConstant.PurchaseDetailStatusEnum.ASSIGNED.getCode()){return true;}return  false;}).collect(Collectors.toList());//修改他的状态purchaseEntity.forEach(item->{item.setUpdateTime(new Date());item.setStatus(WareConstant.PurchaseStatusEnum.RECEIVE.getCode());this.updateById(item);//改变采购需求的状态List entities=purchaseDetailService.listDetailByPuchersId(item.getId());List collect = entities.stream().map(entity -> {PurchaseDetailEntity purchaseDetailEntity = new PurchaseDetailEntity();purchaseDetailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.BUYING.getCode());purchaseDetailEntity.setId(entity.getId());return purchaseDetailEntity;}).collect(Collectors.toList());purchaseDetailService.updateBatchById(collect);});}}

创建方法List listDetailByPuchersId(Long id);

   @Overridepublic List  listDetailByPuchersId(Long id) {//查询采购需求的状态List purchase_id = this.list(new QueryWrapper().eq("purchase_id", id));return purchase_id;}

效果展示:
在这里插入图片描述

在这里插入图片描述

完成采购

使用postman发送请求http://localhost:88/api/ware/purchase/done

{"id": 1,"items": [{"itemId":1,"status":3,"reason":""},{"itemId":2,"status":4,"reason":"无货"}]
}

在PurchaseController中

///ware/purchase/done
@PostMapping("/done")
public R done(@RequestBody PurchaseDoneVo purchaseDoneVo){purchaseService.done(purchaseDoneVo);return R.ok();
}

编写done(purchaseDoneVo)方法

@Overridepublic void done(PurchaseDoneVo purchaseDoneVo) {Long id = purchaseDoneVo.getId();//1、改变采购需求的状态Boolean flag=true;List purchaseDetailEntityList=new ArrayList<>();List items = purchaseDoneVo.getItems();for (PurchaseItemDoneVo item : items) {PurchaseDetailEntity purchaseDetailEntity = new PurchaseDetailEntity();if (item.getStatus()==WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode()){//失败的flag=false;purchaseDetailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode());}else{//已完成purchaseDetailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.FINISH.getCode());//3、将成功采购的入库//传参:采购单id,采购数量,仓库idPurchaseDetailEntity byId = purchaseDetailService.getById(item.getItemId());Long skuId = byId.getSkuId();Integer skuNum = byId.getSkuNum();Long wareId = byId.getWareId();wareSkuService.addStock(skuId,skuNum,wareId);}purchaseDetailEntity.setId(item.getItemId());purchaseDetailEntityList.add(purchaseDetailEntity);}purchaseDetailService.updateBatchById(purchaseDetailEntityList);//2、改变采购单的状态--通过上面的flag决定这个采购单的状态PurchaseEntity purchaseEntity=new PurchaseEntity();purchaseEntity.setId(id);purchaseEntity.setStatus(flag?WareConstant.PurchaseStatusEnum.FINISH.getCode():WareConstant.PurchaseStatusEnum.HASERROR.getCode());purchaseEntity.setUpdateTime(new Date());this.updateById(purchaseEntity);}

编写addStock(Long skuId, Integer skuNum, Long wareId)方法

@Transactional
@Override
public void addStock(Long skuId, Integer skuNum, Long wareId) {List list = this.list(new QueryWrapper().eq("sku_id", skuId).eq("ware_id", wareId));if (list==null||list.size()==0){//如果没有则需要新增WareSkuEntity wareSkuEntity=new WareSkuEntity();wareSkuEntity.setSkuId(skuId);wareSkuEntity.setWareId(wareId);wareSkuEntity.setStock(skuNum);wareSkuEntity.setStockLocked(0);//skuname没有设置try {R info = productFeignService.info(skuId);if (info.getCode() == 0) {//查询成功Map skuInfo = (Map) info.get("skuInfo");wareSkuEntity.setSkuName((String) skuInfo.get("skuName"));}}catch (Exception e){}this.baseMapper.insert(wareSkuEntity);}else{//如果库存中有skuId和wareId,则直接updatethis.baseMapper.addStock(skuId,skuNum,wareId);}}

由于设置spuName需要调用查询name

远程调用

@FeignClient("gulimall-product")
public interface ProductFeignService {//查询sku信息@RequestMapping("/product/skuinfo/info/{skuId}")R info(@PathVariable("skuId") Long skuId);
}

获取spu规格

当点击规格页面报错则需要在src/router/index.js添加

在这里插入图片描述

 { path: '/product-attrupdate', component: _import('modules/product/attrupdate'), name: 'attr-update', meta: { title: '规格维护', isTab: true } }

在AttrController中

@GetMapping("/base/listforspu/{spuId}")
public  R getSpu(@PathVariable("spuId") Long spuId){List list=productAttrValueService.baseAttrListForSpu(spuId);return R.ok().put("data",list);
}

编写baseAttrListForSpu(spuId);方法

@Override
public List baseAttrListForSpu(Long spuId) {List list = this.baseMapper.selectList(new QueryWrapper().eq("spu_id", spuId));return list;}

规格维护

在AttrController中

    ///product/attr/update/{spuId}@PostMapping("/update/{spuId}")public R updateSpu(@PathVariable("spuId") Long spuId,@RequestBody List entityList){productAttrValueService.updateBySpuId(spuId,entityList);
return R.ok();}

编写方法updateBySpuId(spuId,entityList)

    @Overridepublic void updateBySpuId(Long spuId, List entityList) {//先将存在的删除,然后在新增this.baseMapper.delete(new QueryWrapper().eq("spu_id",spuId));List collect = entityList.stream().map((item) -> {item.setSpuId(spuId);return item;}).collect(Collectors.toList());this.saveBatch(collect);}}

相关内容

热门资讯

脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...