mirror of
https://github.com/zccbbg/wms-ruoyi.git
synced 2024-09-20 03:05:53 +08:00
feat: 盘库单保存、删除、查询接口
This commit is contained in:
parent
1b76475ff7
commit
1a9a64f3f1
|
@ -2,6 +2,7 @@ package com.ruoyi.wms.controller;
|
|||
|
||||
import java.util.List;
|
||||
|
||||
import com.ruoyi.common.core.constant.ServiceConstants;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
@ -76,6 +77,7 @@ public class CheckOrderController extends BaseController {
|
|||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody CheckOrderBo bo) {
|
||||
bo.setCheckOrderStatus(ServiceConstants.CheckOrderStatus.PENDING);
|
||||
checkOrderService.insertByBo(bo);
|
||||
return R.ok();
|
||||
}
|
||||
|
@ -95,14 +97,14 @@ public class CheckOrderController extends BaseController {
|
|||
/**
|
||||
* 删除库存盘点单据
|
||||
*
|
||||
* @param ids 主键串
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("wms:checkOrder:remove")
|
||||
@Log(title = "库存盘点单据", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
checkOrderService.deleteByIds(List.of(ids));
|
||||
@DeleteMapping("/{id}")
|
||||
public R<Void> remove(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
checkOrderService.deleteById(id);
|
||||
return R.ok();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,4 +105,13 @@ public class CheckOrderDetailController extends BaseController {
|
|||
checkOrderDetailService.deleteByIds(List.of(ids));
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据盘库单id查询盘库单详情列表
|
||||
*/
|
||||
@SaCheckPermission("wms:checkOrderDetail:query")
|
||||
@GetMapping("/list/{checkOrderId}")
|
||||
public R<List<CheckOrderDetailVo>> listByCheckOrderId(@NotNull @PathVariable Long checkOrderId) {
|
||||
return R.ok(checkOrderDetailService.queryByCheckOrderId(checkOrderId));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import jakarta.validation.constraints.*;
|
|||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 库存盘点单据业务对象 wms_check_order
|
||||
|
@ -24,7 +25,7 @@ import java.math.BigDecimal;
|
|||
public class CheckOrderBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@NotNull(message = "不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
@ -38,7 +39,6 @@ public class CheckOrderBo extends BaseEntity {
|
|||
/**
|
||||
* 库存盘点单状态 -1:作废 0:未盘库 1:已盘库
|
||||
*/
|
||||
@NotNull(message = "库存盘点单状态 -1:作废 0:未盘库 1:已盘库不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer checkOrderStatus;
|
||||
|
||||
/**
|
||||
|
@ -56,14 +56,13 @@ public class CheckOrderBo extends BaseEntity {
|
|||
/**
|
||||
* 所属库区
|
||||
*/
|
||||
@NotNull(message = "所属库区不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long areaId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String remark;
|
||||
|
||||
private List<CheckOrderDetailBo> details;
|
||||
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ public class CheckOrderDetailVo implements Serializable {
|
|||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@ExcelProperty(value = "")
|
||||
private Long id;
|
||||
|
@ -80,5 +80,8 @@ public class CheckOrderDetailVo implements Serializable {
|
|||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
private ItemSkuVo itemSku;
|
||||
|
||||
private InventoryDetailVo inventoryDetail;
|
||||
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import io.github.linpeilie.annotations.AutoMapper;
|
|||
|
||||
import java.io.Serializable;
|
||||
import java.io.Serial;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 库存盘点单据视图对象 wms_check_order
|
||||
|
@ -27,7 +28,7 @@ public class CheckOrderVo implements Serializable {
|
|||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
@ExcelProperty(value = "")
|
||||
private Long id;
|
||||
|
@ -68,5 +69,5 @@ public class CheckOrderVo implements Serializable {
|
|||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
private List<CheckOrderDetailVo> details;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.ruoyi.wms.service;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.ruoyi.common.core.utils.MapstructUtils;
|
||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||
|
@ -7,16 +9,22 @@ import com.ruoyi.common.core.utils.StringUtils;
|
|||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.ruoyi.wms.domain.entity.MovementOrderDetail;
|
||||
import com.ruoyi.wms.domain.vo.InventoryDetailVo;
|
||||
import com.ruoyi.wms.domain.vo.ItemSkuVo;
|
||||
import com.ruoyi.wms.domain.vo.MovementOrderDetailVo;
|
||||
import com.ruoyi.wms.mapper.InventoryDetailMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.wms.domain.bo.CheckOrderDetailBo;
|
||||
import com.ruoyi.wms.domain.vo.CheckOrderDetailVo;
|
||||
import com.ruoyi.wms.domain.entity.CheckOrderDetail;
|
||||
import com.ruoyi.wms.mapper.CheckOrderDetailMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 库存盘点单据详情Service业务层处理
|
||||
|
@ -26,9 +34,11 @@ import java.util.Collection;
|
|||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class CheckOrderDetailService {
|
||||
public class CheckOrderDetailService extends ServiceImpl<CheckOrderDetailMapper, CheckOrderDetail> {
|
||||
|
||||
private final CheckOrderDetailMapper checkOrderDetailMapper;
|
||||
private final ItemSkuService itemSkuService;
|
||||
private final InventoryDetailMapper inventoryDetailMapper;
|
||||
|
||||
/**
|
||||
* 查询库存盘点单据详情
|
||||
|
@ -89,4 +99,36 @@ public class CheckOrderDetailService {
|
|||
public void deleteByIds(Collection<Long> ids) {
|
||||
checkOrderDetailMapper.deleteBatchIds(ids);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void saveDetails(List<CheckOrderDetail> list) {
|
||||
if (CollUtil.isEmpty(list)) {
|
||||
return;
|
||||
}
|
||||
saveOrUpdateBatch(list);
|
||||
}
|
||||
|
||||
public List<CheckOrderDetailVo> queryByCheckOrderId(Long checkOrderId) {
|
||||
CheckOrderDetailBo bo = new CheckOrderDetailBo();
|
||||
bo.setCheckOrderId(checkOrderId);
|
||||
List<CheckOrderDetailVo> details = queryList(bo);
|
||||
if (CollUtil.isEmpty(details)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Set<Long> skuIds = details
|
||||
.stream()
|
||||
.map(CheckOrderDetailVo::getSkuId)
|
||||
.collect(Collectors.toSet());
|
||||
Map<Long, ItemSkuVo> itemSkuMap = itemSkuService.queryVosByIds(skuIds)
|
||||
.stream()
|
||||
.collect(Collectors.toMap(ItemSkuVo::getId, Function.identity()));
|
||||
List<Long> inventoryDetailIds = details.stream().map(CheckOrderDetailVo::getInventoryDetailId).toList();
|
||||
Map<Long, InventoryDetailVo> inventoryDetailMap = inventoryDetailMapper.selectVoBatchIds(inventoryDetailIds)
|
||||
.stream().collect(Collectors.toMap(InventoryDetailVo::getId, Function.identity()));
|
||||
details.forEach(it -> {
|
||||
it.setItemSku(itemSkuMap.get(it.getSkuId()));
|
||||
it.setInventoryDetail(inventoryDetailMap.get(it.getInventoryDetailId()));
|
||||
});
|
||||
return details;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,24 @@
|
|||
package com.ruoyi.wms.service;
|
||||
|
||||
import com.ruoyi.common.core.constant.ServiceConstants;
|
||||
import com.ruoyi.common.core.exception.ServiceException;
|
||||
import com.ruoyi.common.core.exception.base.BaseException;
|
||||
import com.ruoyi.common.core.utils.MapstructUtils;
|
||||
import com.ruoyi.common.mybatis.core.domain.BaseEntity;
|
||||
import com.ruoyi.common.mybatis.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.mybatis.core.page.PageQuery;
|
||||
import com.ruoyi.common.core.utils.StringUtils;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.ruoyi.wms.domain.entity.CheckOrderDetail;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.wms.domain.bo.CheckOrderBo;
|
||||
import com.ruoyi.wms.domain.vo.CheckOrderVo;
|
||||
import com.ruoyi.wms.domain.entity.CheckOrder;
|
||||
import com.ruoyi.wms.mapper.CheckOrderMapper;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -29,12 +35,18 @@ import java.util.Collection;
|
|||
public class CheckOrderService {
|
||||
|
||||
private final CheckOrderMapper checkOrderMapper;
|
||||
private final CheckOrderDetailService checkOrderDetailService;
|
||||
|
||||
/**
|
||||
* 查询库存盘点单据
|
||||
*/
|
||||
public CheckOrderVo queryById(Long id){
|
||||
return checkOrderMapper.selectVoById(id);
|
||||
CheckOrderVo checkOrderVo = checkOrderMapper.selectVoById(id);
|
||||
if (checkOrderVo == null) {
|
||||
throw new BaseException("盘库单不存在");
|
||||
}
|
||||
checkOrderVo.setDetails(checkOrderDetailService.queryByCheckOrderId(id));
|
||||
return checkOrderVo;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -62,23 +74,61 @@ public class CheckOrderService {
|
|||
lqw.eq(bo.getCheckOrderTotal() != null, CheckOrder::getCheckOrderTotal, bo.getCheckOrderTotal());
|
||||
lqw.eq(bo.getWarehouseId() != null, CheckOrder::getWarehouseId, bo.getWarehouseId());
|
||||
lqw.eq(bo.getAreaId() != null, CheckOrder::getAreaId, bo.getAreaId());
|
||||
lqw.orderByDesc(BaseEntity::getCreateTime);
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增库存盘点单据
|
||||
*/
|
||||
@Transactional
|
||||
public void insertByBo(CheckOrderBo bo) {
|
||||
// 校验盘库单号唯一性
|
||||
validateCheckOrderNo(bo.getCheckOrderNo());
|
||||
// 创建盘库单
|
||||
CheckOrder add = MapstructUtils.convert(bo, CheckOrder.class);
|
||||
checkOrderMapper.insert(add);
|
||||
// 创建盘库单明细
|
||||
List<CheckOrderDetail> addDetailList = MapstructUtils.convert(bo.getDetails(), CheckOrderDetail.class);
|
||||
addDetailList.forEach(it -> it.setCheckOrderId(add.getId()));
|
||||
checkOrderDetailService.saveDetails(addDetailList);
|
||||
}
|
||||
|
||||
private void validateCheckOrderNo(String checkOrderNo) {
|
||||
LambdaQueryWrapper<CheckOrder> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
||||
lambdaQueryWrapper.eq(CheckOrder::getCheckOrderNo, checkOrderNo);
|
||||
if (checkOrderMapper.exists(lambdaQueryWrapper)) {
|
||||
throw new BaseException("盘库单号重复,请手动修改");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改库存盘点单据
|
||||
*/
|
||||
@Transactional
|
||||
public void updateByBo(CheckOrderBo bo) {
|
||||
// 更新盘库单
|
||||
CheckOrder update = MapstructUtils.convert(bo, CheckOrder.class);
|
||||
checkOrderMapper.updateById(update);
|
||||
// 保存盘库单明细
|
||||
List<CheckOrderDetail> detailList = MapstructUtils.convert(bo.getDetails(), CheckOrderDetail.class);
|
||||
detailList.forEach(it -> it.setCheckOrderId(bo.getId()));
|
||||
checkOrderDetailService.saveDetails(detailList);
|
||||
}
|
||||
|
||||
public void deleteById(Long id) {
|
||||
validateIdBeforeDelete(id);
|
||||
checkOrderMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateIdBeforeDelete(Long id) {
|
||||
CheckOrderVo checkOrderVo = queryById(id);
|
||||
if (checkOrderVo == null) {
|
||||
throw new BaseException("盘库单不存在");
|
||||
}
|
||||
if (ServiceConstants.CheckOrderStatus.FINISH.equals(checkOrderVo.getCheckOrderStatus())) {
|
||||
throw new ServiceException("盘库单【" + checkOrderVo.getCheckOrderNo() + "】已盘库完成,无法删除!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -47,4 +47,13 @@ public class ServiceConstants {
|
|||
public static final Integer PENDING = 0;
|
||||
public static final Integer FINISH = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 盘库单状态
|
||||
*/
|
||||
public class CheckOrderStatus {
|
||||
public static final Integer INVALID = -1;
|
||||
public static final Integer PENDING = 0;
|
||||
public static final Integer FINISH = 1;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue