mirror of
https://github.com/kirklin/kkmall.git
synced 2024-09-20 06:46:15 +08:00
仓储服务-API-仓库管理
This commit is contained in:
parent
b5ce8c530d
commit
30cd02737b
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>Title: MybatisConfig</p>
|
||||
* 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;
|
||||
}
|
||||
}
|
|
@ -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:
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* <p>Title: MybatisConfig</p>
|
||||
* 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;
|
||||
}
|
||||
}
|
|
@ -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<Long> 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<String, Object> params){
|
||||
PageUtils page = purchaseService.queryPageUnreceivePurchase(params);
|
||||
|
||||
return R.ok().put("page", page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
|
|
|
@ -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<String, Object> params){
|
||||
PageUtils page = purchaseDetailService.queryPage(params);
|
||||
|
||||
|
|
|
@ -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<WareSkuEntity> {
|
||||
|
||||
|
||||
void addStock(@Param("skuId") Long skuId, @Param("wareId") Long wareId, @Param("skuNum") Integer skuNum);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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<PurchaseDetailEntity> {
|
||||
|
||||
PageUtils queryPage(Map<String, Object> params);
|
||||
|
||||
List<PurchaseDetailEntity> listDetailByPurchaseId(Long id);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<PurchaseEntity> {
|
||||
|
||||
PageUtils queryPage(Map<String, Object> params);
|
||||
|
||||
PageUtils queryPageUnreceivePurchase(Map<String, Object> params);
|
||||
|
||||
void mergePurchase(MergeVo mergeVo);
|
||||
|
||||
void received(List<Long> ids);
|
||||
|
||||
void done(PurchaseDoneVo doneVo);
|
||||
}
|
||||
|
||||
|
|
|
@ -16,5 +16,11 @@ import java.util.Map;
|
|||
public interface WareSkuService extends IService<WareSkuEntity> {
|
||||
|
||||
PageUtils queryPage(Map<String, Object> params);
|
||||
|
||||
/**
|
||||
* 保存库存的时候顺便查到商品价格
|
||||
*/
|
||||
double addStock(Long skuId, Long wareId, Integer skuNum);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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<PurchaseDetailDao, PurchaseDetailEntity> implements PurchaseDetailService {
|
||||
|
||||
/**
|
||||
* 采购需求模糊查询
|
||||
* status: 0
|
||||
* wareId: 1
|
||||
*/
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
QueryWrapper<PurchaseDetailEntity> 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<PurchaseDetailEntity> page = this.page(
|
||||
new Query<PurchaseDetailEntity>().getPage(params),
|
||||
new QueryWrapper<PurchaseDetailEntity>()
|
||||
wrapper
|
||||
);
|
||||
|
||||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据采购单id 改变采购项
|
||||
*/
|
||||
@Override
|
||||
public List<PurchaseDetailEntity> listDetailByPurchaseId(Long id) {
|
||||
// 获取所有采购项
|
||||
List<PurchaseDetailEntity> entities = this.list(new QueryWrapper<PurchaseDetailEntity>().eq("purchase_id", id));
|
||||
return entities;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<PurchaseDao, PurchaseEntity> implements PurchaseService {
|
||||
|
||||
@Autowired
|
||||
private PurchaseDetailService detailService;
|
||||
|
||||
@Autowired
|
||||
private WareSkuService wareSkuService;
|
||||
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
IPage<PurchaseEntity> page = this.page(
|
||||
|
@ -26,4 +46,171 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseDao, PurchaseEntity
|
|||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询
|
||||
*/
|
||||
@Override
|
||||
public PageUtils queryPageUnreceivePurchase(Map<String, Object> params) {
|
||||
IPage<PurchaseEntity> page = this.page(
|
||||
new Query<PurchaseEntity>().getPage(params),
|
||||
// 采购状态只能是0,1 :新建,已分配
|
||||
new QueryWrapper<PurchaseEntity>().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<Long> items = mergeVo.getItems();
|
||||
|
||||
// 从数据库查询所有要合并的采购单并过滤所有大于 [已分配] 状态的订单
|
||||
PurchaseEntity purchaseEntity = new PurchaseEntity();
|
||||
List<PurchaseDetailEntity> 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<PurchaseDetailEntity> 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<Long> ids) {
|
||||
if(ids == null || ids.size() == 0){
|
||||
return;
|
||||
}
|
||||
// 1.确认当前采购单是已分配状态
|
||||
List<PurchaseEntity> 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<PurchaseDetailEntity> entities = detailService.listDetailByPurchaseId(item.getId());
|
||||
|
||||
// 收集所有需要更新的采购单id
|
||||
List<PurchaseDetailEntity> 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<PurchaseItemDoneVo> items = doneVo.getItems();
|
||||
ArrayList<PurchaseDetailEntity> 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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<WareInfoDao, WareInfoEntity
|
|||
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
QueryWrapper<WareInfoEntity> 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<WareInfoEntity> page = this.page(
|
||||
new Query<WareInfoEntity>().getPage(params),
|
||||
new QueryWrapper<WareInfoEntity>()
|
||||
wrapper
|
||||
);
|
||||
|
||||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
|
|
|
@ -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<WareSkuDao, WareSkuEntity> implements WareSkuService {
|
||||
|
||||
@Autowired
|
||||
private WareSkuDao wareSkuDao;
|
||||
@Autowired
|
||||
private ProductFeignService productFeignService;
|
||||
/**
|
||||
* 商品库存的模糊查询
|
||||
* skuId: 1
|
||||
* wareId: 1
|
||||
*/
|
||||
@Override
|
||||
public PageUtils queryPage(Map<String, Object> params) {
|
||||
QueryWrapper<WareSkuEntity> 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<WareSkuEntity> page = this.page(
|
||||
new Query<WareSkuEntity>().getPage(params),
|
||||
new QueryWrapper<WareSkuEntity>()
|
||||
wrapper
|
||||
);
|
||||
|
||||
return new PageUtils(page);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加库存
|
||||
* wareId: 仓库id
|
||||
* return 返回商品价格
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public double addStock(Long skuId, Long wareId, Integer skuNum) {
|
||||
// 1.如果还没有这个库存记录 那就是新增操作
|
||||
List<WareSkuEntity> entities = wareSkuDao.selectList(new QueryWrapper<WareSkuEntity>().eq("sku_id", skuId).eq("ware_id", wareId));
|
||||
double price = 0.0;
|
||||
// TODO 还可以用什么办法让异常出现以后不回滚?高级
|
||||
WareSkuEntity entity = new WareSkuEntity();
|
||||
try {
|
||||
R info = productFeignService.info(skuId);
|
||||
Map<String,Object> data = (Map<String, Object>) 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package name.lkk.kkmall.ware.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>Title: MergeVo</p>
|
||||
* Description:
|
||||
* date:2020/6/6 23:23
|
||||
*/
|
||||
@Data
|
||||
public class MergeVo {
|
||||
|
||||
/**
|
||||
* 整单id
|
||||
*/
|
||||
private Long purchaseId;
|
||||
|
||||
/**
|
||||
* [1,2,3,4]
|
||||
* 合并项集合
|
||||
*/
|
||||
private List<Long> items;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package name.lkk.kkmall.ware.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>Title: PurchaseDoneVo</p>
|
||||
* Description:采购单
|
||||
* date:2020/6/6 23:23
|
||||
*/
|
||||
@Data
|
||||
public class PurchaseDoneVo {
|
||||
|
||||
/**
|
||||
* 采购单id
|
||||
*/
|
||||
@NotNull
|
||||
private Long id;
|
||||
|
||||
private List<PurchaseItemDoneVo> items;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package name.lkk.kkmall.ware.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* <p>Title: PurchaseItemDoneVo</p>
|
||||
* 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;
|
||||
}
|
|
@ -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:
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
<result property="skuName" column="sku_name"/>
|
||||
<result property="stockLocked" column="stock_locked"/>
|
||||
</resultMap>
|
||||
|
||||
<!-- 更新库存 -->
|
||||
<insert id="addStock">
|
||||
UPDATE `wms_ware_sku` SET stock = stock + #{skuNum} WHERE sku_id = #{skuId} AND ware_id = #{wareId}
|
||||
</insert>
|
||||
|
||||
</mapper>
|
Loading…
Reference in a new issue