From 30cd02737b40fae614330ddc0ef16ff02185ded4 Mon Sep 17 00:00:00 2001 From: Kirk Lin Date: Tue, 15 Jun 2021 19:53:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=93=E5=82=A8=E6=9C=8D=E5=8A=A1-API-?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lkk/common/constant/WareConstant.java | 6 +- .../kkmall/coupon/config/MybatisConfig.java | 28 +++ .../src/main/resources/application.yml | 4 +- .../kkmall/ware/KkmallWareApplication.java | 4 +- .../lkk/kkmall/ware/config/MybatisConfig.java | 28 +++ .../ware/controller/PurchaseController.java | 60 ++++-- .../controller/PurchaseDetailController.java | 22 +- .../name/lkk/kkmall/ware/dao/WareSkuDao.java | 7 +- .../ware/feign/ProductFeignService.java | 24 +++ .../ware/service/PurchaseDetailService.java | 3 + .../kkmall/ware/service/PurchaseService.java | 11 + .../kkmall/ware/service/WareSkuService.java | 6 + .../impl/PurchaseDetailServiceImpl.java | 42 +++- .../service/impl/PurchaseServiceImpl.java | 193 +++++++++++++++++- .../service/impl/WareInfoServiceImpl.java | 16 +- .../ware/service/impl/WareSkuServiceImpl.java | 72 ++++++- .../java/name/lkk/kkmall/ware/vo/MergeVo.java | 25 +++ .../lkk/kkmall/ware/vo/PurchaseDoneVo.java | 23 +++ .../kkmall/ware/vo/PurchaseItemDoneVo.java | 21 ++ .../src/main/resources/application.yml | 4 +- .../main/resources/mapper/ware/WareSkuDao.xml | 5 +- 21 files changed, 552 insertions(+), 52 deletions(-) create mode 100644 kkmall-coupon/src/main/java/name/lkk/kkmall/coupon/config/MybatisConfig.java create mode 100644 kkmall-ware/src/main/java/name/lkk/kkmall/ware/config/MybatisConfig.java create mode 100644 kkmall-ware/src/main/java/name/lkk/kkmall/ware/feign/ProductFeignService.java create mode 100644 kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/MergeVo.java create mode 100644 kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseDoneVo.java create mode 100644 kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseItemDoneVo.java diff --git a/kkmall-common/src/main/java/name/lkk/common/constant/WareConstant.java b/kkmall-common/src/main/java/name/lkk/common/constant/WareConstant.java index bcd1d30..d51c30d 100644 --- a/kkmall-common/src/main/java/name/lkk/common/constant/WareConstant.java +++ b/kkmall-common/src/main/java/name/lkk/common/constant/WareConstant.java @@ -6,8 +6,10 @@ package name.lkk.common.constant; public class WareConstant { public enum PurchaseStatusEnum{ - CREATED(0,"新建"),ASSIGNED(1,"已分配"), - RECEIVE(2,"已领取"),FINISH(3,"已完成"), + CREATED(0,"新建"), + ASSIGNED(1,"已分配"), + RECEIVE(2,"已领取"), + FINISH(3,"已完成"), HASERROR(4,"有异常"); private int code; private String msg; diff --git a/kkmall-coupon/src/main/java/name/lkk/kkmall/coupon/config/MybatisConfig.java b/kkmall-coupon/src/main/java/name/lkk/kkmall/coupon/config/MybatisConfig.java new file mode 100644 index 0000000..c89a21f --- /dev/null +++ b/kkmall-coupon/src/main/java/name/lkk/kkmall/coupon/config/MybatisConfig.java @@ -0,0 +1,28 @@ +package name.lkk.kkmall.coupon.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + *

Title: MybatisConfig

+ * Description:引入分页插件 + * + */ +@EnableTransactionManagement +@MapperScan("name.lkk.kkmall.coupon.dao") +@Configuration +public class MybatisConfig { + + // 最新版 + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/kkmall-coupon/src/main/resources/application.yml b/kkmall-coupon/src/main/resources/application.yml index 119c2b6..644f84e 100644 --- a/kkmall-coupon/src/main/resources/application.yml +++ b/kkmall-coupon/src/main/resources/application.yml @@ -12,7 +12,9 @@ spring: server-addr: localhost:8848 application: name: kkmall-coupon - + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/KkmallWareApplication.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/KkmallWareApplication.java index 4946adc..0b3c881 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/KkmallWareApplication.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/KkmallWareApplication.java @@ -1,13 +1,13 @@ package name.lkk.kkmall.ware; -import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableDiscoveryClient -@MapperScan("name.lkk.kkmall.ware.dao") +@EnableFeignClients("name.lkk.kkmall.ware.feign") public class KkmallWareApplication { public static void main(String[] args) { diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/config/MybatisConfig.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/config/MybatisConfig.java new file mode 100644 index 0000000..804be7c --- /dev/null +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/config/MybatisConfig.java @@ -0,0 +1,28 @@ +package name.lkk.kkmall.ware.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +/** + *

Title: MybatisConfig

+ * Description:引入分页插件 + * + */ +@EnableTransactionManagement +@MapperScan("name.lkk.kkmall.ware.dao") +@Configuration +public class MybatisConfig { + + // 最新版 + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } +} diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseController.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseController.java index a84aac6..536f4ef 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseController.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseController.java @@ -1,19 +1,17 @@ package name.lkk.kkmall.ware.controller; -import java.util.Arrays; -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import name.lkk.kkmall.ware.entity.PurchaseEntity; -import name.lkk.kkmall.ware.service.PurchaseService; import name.lkk.common.utils.PageUtils; import name.lkk.common.utils.R; +import name.lkk.kkmall.ware.entity.PurchaseEntity; +import name.lkk.kkmall.ware.service.PurchaseService; +import name.lkk.kkmall.ware.vo.MergeVo; +import name.lkk.kkmall.ware.vo.PurchaseDoneVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; @@ -30,6 +28,44 @@ public class PurchaseController { @Autowired private PurchaseService purchaseService; + /** + * 完成采购单 + */ + @PostMapping("/done") + public R finish(@RequestBody PurchaseDoneVo doneVo){ + purchaseService.done(doneVo); + + return R.ok(); + } + + /** + * 领取采购单 + */ + @PostMapping("/received") + public R received(@RequestBody List ids){ + purchaseService.received(ids); + + return R.ok(); + } + + /** + * 合并采购单 + */ + @PostMapping("/merge") + public R merge(@RequestBody MergeVo mergeVo){ + purchaseService.mergePurchase(mergeVo); + return R.ok(); + } + /** + * 列表 + */ + @RequestMapping("/unreceive/list") + public R unreceive(@RequestParam Map params){ + PageUtils page = purchaseService.queryPageUnreceivePurchase(params); + + return R.ok().put("page", page); + } + /** * 列表 */ diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseDetailController.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseDetailController.java index d8448f5..a2e72c9 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseDetailController.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/controller/PurchaseDetailController.java @@ -1,20 +1,15 @@ package name.lkk.kkmall.ware.controller; +import name.lkk.common.utils.PageUtils; +import name.lkk.common.utils.R; +import name.lkk.kkmall.ware.entity.PurchaseDetailEntity; +import name.lkk.kkmall.ware.service.PurchaseDetailService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + import java.util.Arrays; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import name.lkk.kkmall.ware.entity.PurchaseDetailEntity; -import name.lkk.kkmall.ware.service.PurchaseDetailService; -import name.lkk.common.utils.PageUtils; -import name.lkk.common.utils.R; - /** @@ -31,10 +26,9 @@ public class PurchaseDetailController { private PurchaseDetailService purchaseDetailService; /** - * 列表 + * 采购需求模糊查询 */ @RequestMapping("/list") - //@RequiresPermissions("ware:purchasedetail:list") public R list(@RequestParam Map params){ PageUtils page = purchaseDetailService.queryPage(params); diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/dao/WareSkuDao.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/dao/WareSkuDao.java index ea11899..42eb6ab 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/dao/WareSkuDao.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/dao/WareSkuDao.java @@ -1,8 +1,9 @@ package name.lkk.kkmall.ware.dao; -import name.lkk.kkmall.ware.entity.WareSkuEntity; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import name.lkk.kkmall.ware.entity.WareSkuEntity; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 商品库存 @@ -13,5 +14,7 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface WareSkuDao extends BaseMapper { - + + void addStock(@Param("skuId") Long skuId, @Param("wareId") Long wareId, @Param("skuNum") Integer skuNum); + } diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/feign/ProductFeignService.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/feign/ProductFeignService.java new file mode 100644 index 0000000..01b4458 --- /dev/null +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/feign/ProductFeignService.java @@ -0,0 +1,24 @@ +package name.lkk.kkmall.ware.feign; + + +import name.lkk.common.utils.R; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@FeignClient("kkmall-product") +public interface ProductFeignService { + + /** + * 远程调用 product 获取商品名称 + * + * 1)、让所有请求过网关; + * 1、@FeignClient("mall-gateway"):给mall-gateway所在的机器发请求 + * 2、/api/product/skuinfo/info/{skuId} + * 2)、直接让后台指定服务处理 + * 1、@FeignClient("mall-gateway") + * 2、/product/skuinfo/info/{skuId} + */ + @RequestMapping("/product/skuinfo/info/{skuId}") + R info(@PathVariable("skuId") Long skuId); +} diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseDetailService.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseDetailService.java index 7da0185..29e5c3c 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseDetailService.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseDetailService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import name.lkk.common.utils.PageUtils; import name.lkk.kkmall.ware.entity.PurchaseDetailEntity; +import java.util.List; import java.util.Map; /** @@ -16,5 +17,7 @@ import java.util.Map; public interface PurchaseDetailService extends IService { PageUtils queryPage(Map params); + + List listDetailByPurchaseId(Long id); } diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseService.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseService.java index db2075f..49248f0 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseService.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/PurchaseService.java @@ -3,7 +3,10 @@ package name.lkk.kkmall.ware.service; import com.baomidou.mybatisplus.extension.service.IService; import name.lkk.common.utils.PageUtils; import name.lkk.kkmall.ware.entity.PurchaseEntity; +import name.lkk.kkmall.ware.vo.MergeVo; +import name.lkk.kkmall.ware.vo.PurchaseDoneVo; +import java.util.List; import java.util.Map; /** @@ -16,5 +19,13 @@ import java.util.Map; public interface PurchaseService extends IService { PageUtils queryPage(Map params); + + PageUtils queryPageUnreceivePurchase(Map params); + + void mergePurchase(MergeVo mergeVo); + + void received(List ids); + + void done(PurchaseDoneVo doneVo); } diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/WareSkuService.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/WareSkuService.java index d6b1bdc..278b634 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/WareSkuService.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/WareSkuService.java @@ -16,5 +16,11 @@ import java.util.Map; public interface WareSkuService extends IService { PageUtils queryPage(Map params); + + /** + * 保存库存的时候顺便查到商品价格 + */ + double addStock(Long skuId, Long wareId, Integer skuNum); + } diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseDetailServiceImpl.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseDetailServiceImpl.java index 5623d85..9cdc32d 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseDetailServiceImpl.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseDetailServiceImpl.java @@ -1,29 +1,63 @@ package name.lkk.kkmall.ware.service.impl; -import org.springframework.stereotype.Service; -import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import name.lkk.common.utils.PageUtils; import name.lkk.common.utils.Query; - import name.lkk.kkmall.ware.dao.PurchaseDetailDao; import name.lkk.kkmall.ware.entity.PurchaseDetailEntity; import name.lkk.kkmall.ware.service.PurchaseDetailService; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; +import java.util.Map; @Service("purchaseDetailService") public class PurchaseDetailServiceImpl extends ServiceImpl implements PurchaseDetailService { + /** + * 采购需求模糊查询 + * status: 0 + * wareId: 1 + */ @Override public PageUtils queryPage(Map params) { + QueryWrapper wrapper = new QueryWrapper<>(); + + String key = (String) params.get("key"); + if(!ObjectUtils.isEmpty(key)){ + // 连续拼接 + wrapper.and(w-> w.eq("purchase_id",key).or().eq("sku_id",key)); + } + + String status = (String) params.get("status"); + if(!ObjectUtils.isEmpty(status)){ + wrapper.eq("status", status); + } + String wareId = (String) params.get("wareId"); + if(!ObjectUtils.isEmpty(wareId)){ + wrapper.eq("ware_id", wareId); + } + IPage page = this.page( new Query().getPage(params), - new QueryWrapper() + wrapper ); return new PageUtils(page); } + /** + * 根据采购单id 改变采购项 + */ + @Override + public List listDetailByPurchaseId(Long id) { + // 获取所有采购项 + List entities = this.list(new QueryWrapper().eq("purchase_id", id)); + return entities; + } + } \ No newline at end of file diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseServiceImpl.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseServiceImpl.java index f3f8df3..f7a6431 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseServiceImpl.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/PurchaseServiceImpl.java @@ -1,21 +1,41 @@ package name.lkk.kkmall.ware.service.impl; -import org.springframework.stereotype.Service; -import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import name.lkk.common.constant.WareConstant; import name.lkk.common.utils.PageUtils; import name.lkk.common.utils.Query; - import name.lkk.kkmall.ware.dao.PurchaseDao; +import name.lkk.kkmall.ware.entity.PurchaseDetailEntity; import name.lkk.kkmall.ware.entity.PurchaseEntity; +import name.lkk.kkmall.ware.service.PurchaseDetailService; import name.lkk.kkmall.ware.service.PurchaseService; +import name.lkk.kkmall.ware.service.WareSkuService; +import name.lkk.kkmall.ware.vo.MergeVo; +import name.lkk.kkmall.ware.vo.PurchaseDoneVo; +import name.lkk.kkmall.ware.vo.PurchaseItemDoneVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service("purchaseService") public class PurchaseServiceImpl extends ServiceImpl implements PurchaseService { + @Autowired + private PurchaseDetailService detailService; + + @Autowired + private WareSkuService wareSkuService; + @Override public PageUtils queryPage(Map params) { IPage page = this.page( @@ -26,4 +46,171 @@ public class PurchaseServiceImpl extends ServiceImpl params) { + IPage page = this.page( + new Query().getPage(params), +// 采购状态只能是0,1 :新建,已分配 + new QueryWrapper().eq("status", 0).or().eq("status", 1) + ); + + return new PageUtils(page); + } + + /** + * 根据情况修改、创建采购单 [没有更改分配状态] + */ + @Transactional + @Override + public void mergePurchase(MergeVo mergeVo) { + Long purchaseId = mergeVo.getPurchaseId(); + // 如果采购id为null 说明没选采购单 + 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(); + + // 从数据库查询所有要合并的采购单并过滤所有大于 [已分配] 状态的订单 + PurchaseEntity purchaseEntity = new PurchaseEntity(); + List detailEntities = detailService.getBaseMapper().selectBatchIds(items).stream().filter(entity -> { + // 如果正在合并采购异常的项就把这个采购项之前所在的采购单的状态 wms_purchase 表的状态修改为 已分配 + if(entity.getStatus() == WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode()){ + purchaseEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.ASSIGNED.getCode()); + purchaseEntity.setId(entity.getPurchaseId()); + this.updateById(purchaseEntity); + } + return entity.getStatus() < WareConstant.PurchaseDetailStatusEnum.BUYING.getCode() || entity.getStatus() == WareConstant.PurchaseDetailStatusEnum.HASERROR.getCode(); + }).collect(Collectors.toList()); + // 将符合条件的id集合重新赋值给 items + items = detailEntities.stream().map(entity -> entity.getId()).collect(Collectors.toList()); + if(items == null || items.size() == 0){ + return; + } + // 设置仓库id + purchaseEntity.setWareId(detailEntities.get(0).getWareId()); + Long finalPurchaseId = purchaseId; + // 给采购单设置各种属性 + List collect = items.stream().map(item -> { + PurchaseDetailEntity entity = new PurchaseDetailEntity(); + entity.setId(item); + entity.setPurchaseId(finalPurchaseId); + entity.setStatus(WareConstant.PurchaseDetailStatusEnum.ASSIGNED.getCode()); + return entity; + }).collect(Collectors.toList()); + + // 每次更新完就更新时间 + detailService.updateBatchById(collect); + purchaseEntity.setId(purchaseId); + purchaseEntity.setUpdateTime(new Date()); + this.updateById(purchaseEntity); + } + + /** + * 领取采购单 + * ids:采购单id + */ + @Override + public void received(List ids) { + if(ids == null || ids.size() == 0){ + return; + } + // 1.确认当前采购单是已分配状态 + List collect = ids.stream().map(id -> this.getById(id) + // 只能采购已分配的 + ).filter(item -> item.getStatus() == WareConstant.PurchaseStatusEnum.ASSIGNED.getCode() || item.getStatus() == WareConstant.PurchaseStatusEnum.CREATED.getCode()) + .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 entities = detailService.listDetailByPurchaseId(item.getId()); + + // 收集所有需要更新的采购单id + List detailEntities = entities.stream().map(entity -> { + PurchaseDetailEntity detailEntity = new PurchaseDetailEntity(); + detailEntity.setId(entity.getId()); + detailEntity.setStatus(WareConstant.PurchaseDetailStatusEnum.BUYING.getCode()); + return detailEntity; + }).collect(Collectors.toList()); + // 根据id 批量更新 + detailService.updateBatchById(detailEntities); + }); + } + + /** + * { + * "id":"1", + * "items":[ + * {"itemId":1,"status":3,"reason":""}, + * {"itemId":3,"status":4,"reason":"无货"} + * ] + * } + * + * id: 采购单id + * items: 采购项 + * itemId: 采购需求id + * status: 采购状态 + */ + @Transactional + @Override + public void done(PurchaseDoneVo doneVo) { + // 1.改变采购单状态 + Long id = doneVo.getId(); + Boolean flag = true; + List items = doneVo.getItems(); + ArrayList updates = new ArrayList<>(); + double price; + double p = 0; + double sum = 0; + // 2.改变采购项状态 + for (PurchaseItemDoneVo 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()); + // 3.将成功采购的进行入库 + // 查出当前采购项的详细信息 + PurchaseDetailEntity entity = detailService.getById(item.getItemId()); + // skuId、到那个仓库、sku名字 + price = wareSkuService.addStock(entity.getSkuId(), entity.getWareId(), entity.getSkuNum()); + if(price != p){ + p = entity.getSkuNum() * price; + } + detailEntity.setSkuPrice(new BigDecimal(p)); + sum += p; + } + // 设置采购成功的id + detailEntity.setId(item.getItemId()); + updates.add(detailEntity); + } + // 批量更新采购单 + detailService.updateBatchById(updates); + + // 对采购单的状态进行更新 + PurchaseEntity purchaseEntity = new PurchaseEntity(); + purchaseEntity.setId(id); + purchaseEntity.setAmount(new BigDecimal(sum)); + purchaseEntity.setStatus(flag?WareConstant.PurchaseStatusEnum.FINISH.getCode():WareConstant.PurchaseStatusEnum.HASERROR.getCode()); + purchaseEntity.setUpdateTime(new Date()); + this.updateById(purchaseEntity); + } + } \ No newline at end of file diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareInfoServiceImpl.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareInfoServiceImpl.java index 40e713a..a2b41b6 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareInfoServiceImpl.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareInfoServiceImpl.java @@ -1,16 +1,17 @@ package name.lkk.kkmall.ware.service.impl; -import org.springframework.stereotype.Service; -import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import name.lkk.common.utils.PageUtils; import name.lkk.common.utils.Query; - import name.lkk.kkmall.ware.dao.WareInfoDao; import name.lkk.kkmall.ware.entity.WareInfoEntity; import name.lkk.kkmall.ware.service.WareInfoService; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.Map; @Service("wareInfoService") @@ -18,11 +19,16 @@ public class WareInfoServiceImpl extends ServiceImpl params) { + QueryWrapper wrapper = new QueryWrapper<>(); + + String key = (String) params.get("key"); + if(!ObjectUtils.isEmpty(key)){ + wrapper.eq("id", key).or().like("name",key).or().like("address", key).or().like("areacode", key); + } IPage page = this.page( new Query().getPage(params), - new QueryWrapper() + wrapper ); - return new PageUtils(page); } diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareSkuServiceImpl.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareSkuServiceImpl.java index d70cd78..62e3623 100644 --- a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareSkuServiceImpl.java +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/service/impl/WareSkuServiceImpl.java @@ -1,29 +1,91 @@ package name.lkk.kkmall.ware.service.impl; -import org.springframework.stereotype.Service; -import java.util.Map; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import name.lkk.common.utils.PageUtils; import name.lkk.common.utils.Query; - +import name.lkk.common.utils.R; import name.lkk.kkmall.ware.dao.WareSkuDao; import name.lkk.kkmall.ware.entity.WareSkuEntity; +import name.lkk.kkmall.ware.feign.ProductFeignService; import name.lkk.kkmall.ware.service.WareSkuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.List; +import java.util.Map; @Service("wareSkuService") public class WareSkuServiceImpl extends ServiceImpl implements WareSkuService { + @Autowired + private WareSkuDao wareSkuDao; + @Autowired + private ProductFeignService productFeignService; + /** + * 商品库存的模糊查询 + * skuId: 1 + * wareId: 1 + */ @Override public PageUtils queryPage(Map params) { + QueryWrapper wrapper = new QueryWrapper<>(); + String id = (String) params.get("skuId"); + if(!ObjectUtils.isEmpty(id)){ + wrapper.eq("sku_id", id); + } + id = (String) params.get("wareId"); + if(!ObjectUtils.isEmpty(id)){ + wrapper.eq("ware_id", id); + } IPage page = this.page( new Query().getPage(params), - new QueryWrapper() + wrapper ); - return new PageUtils(page); } + /** + * 添加库存 + * wareId: 仓库id + * return 返回商品价格 + */ + @Transactional + @Override + public double addStock(Long skuId, Long wareId, Integer skuNum) { + // 1.如果还没有这个库存记录 那就是新增操作 + List entities = wareSkuDao.selectList(new QueryWrapper().eq("sku_id", skuId).eq("ware_id", wareId)); + double price = 0.0; + // TODO 还可以用什么办法让异常出现以后不回滚?高级 + WareSkuEntity entity = new WareSkuEntity(); + try { + R info = productFeignService.info(skuId); + Map data = (Map) info.get("skuInfo"); + + if(info.getCode() == 0){ + entity.setSkuName((String) data.get("skuName")); + // 设置商品价格 + price = (Double) data.get("price"); + } + }catch (Exception e){ + System.out.println("com.firenay.mall.ware.service.impl.WareSkuServiceImpl:远程调用出错"); + } + // 新增操作 + if(entities == null || entities.size() == 0){ + entity.setSkuId(skuId); + entity.setStock(skuNum); + entity.setWareId(wareId); + entity.setStockLocked(0); + wareSkuDao.insert(entity); + }else { + wareSkuDao.addStock(skuId, wareId, skuNum); + } + return price; + } + + } \ No newline at end of file diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/MergeVo.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/MergeVo.java new file mode 100644 index 0000000..ab200d8 --- /dev/null +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/MergeVo.java @@ -0,0 +1,25 @@ +package name.lkk.kkmall.ware.vo; + +import lombok.Data; + +import java.util.List; + +/** + *

Title: MergeVo

+ * Description: + * date:2020/6/6 23:23 + */ +@Data +public class MergeVo { + + /** + * 整单id + */ + private Long purchaseId; + + /** + * [1,2,3,4] + * 合并项集合 + */ + private List items; +} diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseDoneVo.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseDoneVo.java new file mode 100644 index 0000000..03f6ac9 --- /dev/null +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseDoneVo.java @@ -0,0 +1,23 @@ +package name.lkk.kkmall.ware.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +/** + *

Title: PurchaseDoneVo

+ * Description:采购单 + * date:2020/6/6 23:23 + */ +@Data +public class PurchaseDoneVo { + + /** + * 采购单id + */ + @NotNull + private Long id; + + private List items; +} diff --git a/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseItemDoneVo.java b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseItemDoneVo.java new file mode 100644 index 0000000..e85d870 --- /dev/null +++ b/kkmall-ware/src/main/java/name/lkk/kkmall/ware/vo/PurchaseItemDoneVo.java @@ -0,0 +1,21 @@ +package name.lkk.kkmall.ware.vo; + +import lombok.Data; + +/** + *

Title: PurchaseItemDoneVo

+ * Description:采购项 + * date:2020/6/6 23:23 + */ +@Data +public class PurchaseItemDoneVo { + /** + * "itemId":1,"status":3,"reason":"", + * "itemId":3,"status":4,"reason":"无货" + */ + private Long itemId; + + private Integer status; + + private String reason; +} diff --git a/kkmall-ware/src/main/resources/application.yml b/kkmall-ware/src/main/resources/application.yml index b4e07f3..824cea6 100644 --- a/kkmall-ware/src/main/resources/application.yml +++ b/kkmall-ware/src/main/resources/application.yml @@ -12,7 +12,9 @@ spring: server-addr: localhost:8848 application: name: kkmall-ware - + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: diff --git a/kkmall-ware/src/main/resources/mapper/ware/WareSkuDao.xml b/kkmall-ware/src/main/resources/mapper/ware/WareSkuDao.xml index aa970f2..e739f19 100644 --- a/kkmall-ware/src/main/resources/mapper/ware/WareSkuDao.xml +++ b/kkmall-ware/src/main/resources/mapper/ware/WareSkuDao.xml @@ -12,6 +12,9 @@ - + + + UPDATE `wms_ware_sku` SET stock = stock + #{skuNum} WHERE sku_id = #{skuId} AND ware_id = #{wareId} + \ No newline at end of file