feat: 按照id、编码、商品条码搜索商品

This commit is contained in:
2024-12-05 22:48:25 +08:00
parent 6bc074136d
commit 920e045a70
2 changed files with 62 additions and 4 deletions

View File

@@ -53,5 +53,12 @@ public class WarehouseGoodsController {
}
@PostMapping("/searchByCode")
public WarehouseGoodsDto searchByCode(@RequestBody IdRequest request) {
return this.service.searchByCode(request);
}
}

View File

@@ -4,6 +4,7 @@ import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.mapper.CommonMapper;
import cn.lihongjie.coal.base.service.BaseService;
import cn.lihongjie.coal.common.Ctx;
import cn.lihongjie.coal.warehouseGoods.dto.CreateWarehouseGoodsDto;
import cn.lihongjie.coal.warehouseGoods.dto.UpdateWarehouseGoodsDto;
import cn.lihongjie.coal.warehouseGoods.dto.WarehouseGoodsDto;
@@ -11,19 +12,30 @@ import cn.lihongjie.coal.warehouseGoods.entity.WarehouseGoodsEntity;
import cn.lihongjie.coal.warehouseGoods.mapper.WarehouseGoodsMapper;
import cn.lihongjie.coal.warehouseGoods.repository.WarehouseGoodsRepository;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.criteria.CriteriaBuilder;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
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
@@ -73,10 +85,49 @@ public class WarehouseGoodsService
return page.map(this.mapper::toDto);
}
@Autowired
private CommonMapper commonMapper;
@Autowired ObjectMapper objectMapper;
@Autowired private CommonMapper commonMapper;
@SneakyThrows
public WarehouseGoodsDto searchByCode(IdRequest request) {
String id = request.getId();
List<WarehouseGoodsEntity> all =
this.repository.findAll(
new Specification<WarehouseGoodsEntity>() {
@Override
public Predicate toPredicate(
Root<WarehouseGoodsEntity> root,
CriteriaQuery<?> query,
CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.or(
criteriaBuilder.equal(root.get("id"), id),
criteriaBuilder.and(
criteriaBuilder.equal(root.get("code"), id),
criteriaBuilder.equal(
root.get("organizationId"),
Ctx.currentUser().getOrganizationId())),
criteriaBuilder.and(
criteriaBuilder.equal(root.get("barCode"), id),
criteriaBuilder.equal(
root.get("organizationId"),
Ctx.currentUser().getOrganizationId())));
}
});
if (CollectionUtils.isEmpty(all)) {
return null;
} else if (all.size() > 1) {
log.warn(
"find more than one result by code: {} {}",
id,
objectMapper.writeValueAsString(all));
return mapper.toDto(all.get(0));
} else {
return mapper.toDto(all.get(0));
}
}
}