十一、仓储服务--谷粒商城

发布时间 2023-06-20 17:02:49作者: 93丶Fss

一、基础配置

application.yml配置文件

server:
  port: 11000

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_wms
    driver-class-name: com.mysql.jdbc.Driver

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-ware

  jackson:
    date-format: yyyy-MM-dd HH:mm:ss


mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto

logging:
  level:
    com.atguigu: debug

启动类

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallWareApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallWareApplication.class, args);
    }

}

二、合并采购需求

controller
@PostMapping("/merge")
    public R merge(@RequestBody MergeVo mergeVo){

        purchaseService.mergePurchase(mergeVo);
        return R.ok();
    }

service

void mergePurchase(MergeVo mergeVo);

serviceimpl

@Transactional
    @Override
    public void mergePurchase(MergeVo mergeVo) {
        //得到要合并的整单id
        Long purchaseId = mergeVo.getPurchaseId();

        //如果整单id为空
        if(purchaseId == null){
            //1、新建一个整单entity
            PurchaseEntity purchaseEntity = new PurchaseEntity();

            //设置整单状态
            purchaseEntity.setStatus(WareConstant.PurchaseStatusEnum.CREATED.getCode());
            //设置时间
            purchaseEntity.setCreateTime(new Date());
            purchaseEntity.setUpdateTime(new Date());
            //保存这个实体类
            this.save(purchaseEntity);
            //保存后拿到其id
            purchaseId = purchaseEntity.getId();
        }

        //TODO 确认采购单状态是0,1才可以合并

        //得到要合并的项的id
        List<Long> items = mergeVo.getItems();
        Long finalPurchaseId = purchaseId;
        //对每个项的id进行处理
        List<PurchaseDetailEntity> collect = items.stream().map(i -> {
            //新建一个PurchaseDetailEntity
            PurchaseDetailEntity detailEntity = new PurchaseDetailEntity();

            //设置id
            detailEntity.setId(i);
            //设置整单的id
            detailEntity.setPurchaseId(finalPurchaseId);
            //设置状态
            detailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.ASSIGNED.getCode());
            return detailEntity;
        }).collect(Collectors.toList());

        //集体更新PurchaseDetailEntity
        detailService.updateBatchById(collect);

        //更新整单时间
        PurchaseEntity purchaseEntity = new PurchaseEntity();
        purchaseEntity.setId(purchaseId);
        purchaseEntity.setUpdateTime(new Date());
        this.updateById(purchaseEntity);
    }

三、领取采购单

 controller

@PostMapping("/received")
    public R received(@RequestBody List<Long> ids){

        purchaseService.received(ids);

        return R.ok();
    }

service

void received(List<Long> ids);

serviceimpl

@Override
    public void received(List<Long> ids) {
        //传来的是采购整单的ids

        //1、确认当前采购单是新建或者已分配状态
        List<PurchaseEntity> collect = ids.stream().map(id -> {
            //通过ids得到每一个整单的实体类
            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());

        //2、改变采购单的状态
        this.updateBatchById(collect);



        //3、改变采购项的状态
        collect.forEach((item)->{
            List<PurchaseDetailEntity> entities = detailService.listDetailByPurchaseId(item.getId());
            List<PurchaseDetailEntity> detailEntities = 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(detailEntities);
        });
    }

四、完成采购

 controller
@PostMapping("/done")
    public R finish(@RequestBody PurchaseDoneVo doneVo){

        purchaseService.done(doneVo);

        return R.ok();
    }

service

void done(PurchaseDoneVo doneVo);

serviceimpl

@Transactional
    @Override
    public void done(PurchaseDoneVo doneVo) {

        //拿到PurchaseEntity的Id
        Long id = doneVo.getId();


        //2、改变采购项的状态
        Boolean flag = true;
        //得到vo的项
        //这里面有PurchaseDetail的id
        List<PurchaseItemDoneVo> items = doneVo.getItems();

        List<PurchaseDetailEntity> updates = new ArrayList<>();

        for (PurchaseItemDoneVo item : items) {
            //创建对应实体类
            PurchaseDetailEntity detailEntity = new PurchaseDetailEntity();
            //如果任意一项item状态存在异常
            if(item.getStatus() == WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode()){
                //设置flag为false
                flag = false;
                //设置其状态
                detailEntity.setStatus(item.getStatus());
            }else{
                //状态没有异常 为对应实体类设置状态
                detailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.FINISH.getCode());
                3、将成功采购的进行入库
                PurchaseDetailEntity entity = detailService.getById(item.getItemId());
                wareSkuService.addStock(entity.getSkuId(),entity.getWareId(),entity.getSkuNum());

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

        detailService.updateBatchById(updates);

        //1、改变采购单状态
        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);
    }

五、SPU规格维护

product服务----AttrController

controller

@GetMapping("/base/listforspu/{spuId}")
    public R baseAttrlistforspu(@PathVariable("spuId") Long spuId){

        List<ProductAttrValueEntity> entities = productAttrValueService.baseAttrlistforspu(spuId);

        return R.ok().put("data",entities);
    }

service

List<ProductAttrValueEntity> baseAttrlistforspu(Long spuId);

serviceimpl

@Override
    public List<ProductAttrValueEntity> baseAttrlistforspu(Long spuId) {
        List<ProductAttrValueEntity> entities = this.baseMapper.selectList(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id", spuId));
        return entities;
    }

 更改规格接口编写

 controller
@PostMapping("/update/{spuId}")
    public R updateSpuAttr(@PathVariable("spuId") Long spuId,
                           @RequestBody List<ProductAttrValueEntity> entities){

        productAttrValueService.updateSpuAttr(spuId,entities);

        return R.ok();
    }

service

void updateSpuAttr(Long spuId, List<ProductAttrValueEntity> entities);

serviceimpl

 @Transactional
    @Override
    public void updateSpuAttr(Long spuId, List<ProductAttrValueEntity> entities) {
        //1、删除这个spuId之前对应的所有属性
        this.baseMapper.delete(new QueryWrapper<ProductAttrValueEntity>().eq("spu_id",spuId));


        List<ProductAttrValueEntity> collect = entities.stream().map(item -> {
            item.setSpuId(spuId);
            return item;
        }).collect(Collectors.toList());
        this.saveBatch(collect);
    }