一、基础配置
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); }