feat(warehouse): add copy functionality for Warehouse and its Shelves

This commit is contained in:
2025-03-11 20:51:32 +08:00
parent d4fb8e3493
commit d12a57dc13
2 changed files with 68 additions and 0 deletions

View File

@@ -51,4 +51,15 @@ public class WarehouseController {
public Page<WarehouseDto> list(@RequestBody CommonQuery request) {
return this.service.list(request);
}
@PostMapping("/copy")
public WarehouseDto copy(@RequestBody IdRequest request) {
return this.service.copy(request);
}
}

View File

@@ -1,5 +1,6 @@
package cn.lihongjie.coal.warehouse.service;
import cn.hutool.core.bean.BeanUtil;
import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.service.BaseService;
@@ -11,8 +12,15 @@ import cn.lihongjie.coal.warehouse.entity.WarehouseEntity;
import cn.lihongjie.coal.warehouse.mapper.WarehouseMapper;
import cn.lihongjie.coal.warehouse.repository.WarehouseRepository;
import cn.lihongjie.coal.warehouseShelve.dto.CreateWarehouseShelveDto;
import cn.lihongjie.coal.warehouseShelve.entity.WarehouseShelveEntity;
import cn.lihongjie.coal.warehouseShelve.repository.WarehouseShelveRepository;
import cn.lihongjie.coal.warehouseShelve.service.WarehouseShelveService;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -20,9 +28,12 @@ import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Slf4j
@Transactional
@@ -87,4 +98,50 @@ public class WarehouseService extends BaseService<WarehouseEntity, WarehouseRepo
return page.map(this.mapper::toDto);
}
@Autowired
WarehouseShelveRepository warehouseShelveRepository;
public WarehouseDto copy(IdRequest request) {
WarehouseEntity entity = this.get(request.getId());
WarehouseEntity copy = new WarehouseEntity();
BeanUtil.copyProperties(entity, copy);
copy.setId(null);
copy.setCode(copy.getCode() + "_副本");
this.repository.save(copy);
List<WarehouseShelveEntity> all = warehouseShelveRepository.findAll(new Specification<WarehouseShelveEntity>() {
@Override
public Predicate toPredicate(Root<WarehouseShelveEntity> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.and(
criteriaBuilder.equal(root.get("warehouse").get("id"), request.getId())
);
}
});
for (WarehouseShelveEntity shelveEntity : all) {
WarehouseShelveEntity copyShelve = new WarehouseShelveEntity();
BeanUtil.copyProperties(shelveEntity, copyShelve);
copyShelve.setId(null);
copyShelve.setWarehouse(copy);
warehouseShelveRepository.save(copyShelve);
}
return this.getById(copy.getId());
}
}