Files
scrq-hd/.svn/pristine/a9/a94e5c3c992712dc2e8bf4c00ccc97faf6df9662.svn-base
2025-07-03 10:34:04 +08:00

143 lines
6.8 KiB
Plaintext

package com.cmeim.stock.controller;
import com.cmeim.common.core.exception.ServiceException;
import com.cmeim.common.core.web.controller.GenericController;
import com.cmeim.common.core.web.domain.Respond;
import com.cmeim.common.core.web.domain.RespondEnum;
import com.cmeim.common.core.web.page.PageVo;
import com.cmeim.common.log.annotation.Log;
import com.cmeim.common.log.enums.BusinessType;
import com.cmeim.stock.po.*;
import com.cmeim.stock.repository.ContainerInfoRepository;
import com.cmeim.stock.repository.ContainerRecoderRepository;
import com.google.common.collect.Lists;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.List;
/**
* @author 李俊辉
* @version 1.0
* date: 2023/6/27
*/
@Api(tags = "周转箱")
@RestController
@Log4j
@RequestMapping(value = "container")
public class ContainerController extends GenericController {
@Autowired
private ContainerInfoRepository containerInfoRepository;
@Autowired
private ContainerRecoderRepository containerRecoderRepository;
@ApiOperation(value = "列表")
@GetMapping(value = "infoList")
public Respond infoList(PageVo pv, ContainerInfo containerInfo) {
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
Sort.by(sortOrder(containerInfo.getOrders())));
Page page = containerInfoRepository.findAll(buildSpecification(containerInfo), pageRequest);
List<ContainerInfo> list = page.getContent();
pv.setRecordsTotal(page.getTotalElements());
pv.setData(list);
return buildSuccess(pv);
}
@ApiOperation(value = "列表")
@GetMapping(value = "recorderList")
public Respond recorderList(PageVo pv, ContainerRecoder containerRecoder) {
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
Sort.by(sortOrder(containerRecoder.getOrders())));
Page page = containerInfoRepository.findAll(buildSpecification2(containerRecoder), pageRequest);
List<ContainerRecoder> list = page.getContent();
pv.setRecordsTotal(page.getTotalElements());
pv.setData(list);
return buildSuccess(pv);
}
@ApiOperation(value = "修改周转箱状态")
@Log(title = "周转箱", businessType = BusinessType.UPDATE)
@PostMapping(value = "updateContainerStatus")
public Respond updateContainerStatus(ContainerInfo containerInfo) {
List<ContainerInfo> containerInfoList = containerInfoRepository.findByContainerNumber(containerInfo.getContainerNumber());
if (containerInfoList.size() == 0) {
ServiceException exception = new ServiceException(RespondEnum.FAILURE);
exception.setErrorMessage("未找到该周转箱");
throw exception;
}
ContainerInfo container = containerInfoList.get(0);
container.setContainerStatus(containerInfo.getContainerStatus());
container.setQty(containerInfo.getQty());
container.setUpdatedBy(containerInfo.getUpdatedBy());
container.setUpdatedDt(containerInfo.getUpdatedDt());
ContainerInfo save = containerInfoRepository.save(container);
return buildSuccess(save);
}
private Specification buildSpecification(ContainerInfo containerInfo) {
Specification<ContainerInfo> specification = new Specification<ContainerInfo>() {
@Override
public Predicate toPredicate(Root<ContainerInfo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
if (containerInfo.getContainerNumber() != null) {
predicates.add(cb.like(root.get("containerNumber").as(String.class), "%" + containerInfo.getContainerNumber() + "%"));
}
if (containerInfo.getStoreCode() != null) {
predicates.add(cb.like(root.get("storeCode").as(String.class), "%" + containerInfo.getStoreCode() + "%"));
}
if (containerInfo.getContainerStatus() != null) {
predicates.add(cb.equal(root.get("containerStatus").as(Integer.class), containerInfo.getContainerStatus()));
}
if (containerInfo.getContainerStatusArr() != null) {
CriteriaBuilder.In<Integer> in = cb.in(root.get("containerStatus").as(Integer.class));
for (Integer status : containerInfo.getContainerStatusArr()) {
in.value(status);
}
predicates.add(in);
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
private Specification buildSpecification2(ContainerRecoder containerRecoder) {
Specification<ContainerRecoder> specification = new Specification<ContainerRecoder>() {
@Override
public Predicate toPredicate(Root<ContainerRecoder> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
List<Predicate> predicates = Lists.newArrayList();
if (containerRecoder.getContainerNumber() != null) {
predicates.add(cb.like(root.get("containerNumber").as(String.class), "%" + containerRecoder.getContainerNumber() + "%"));
}
if (containerRecoder.getContainerStatus() != null) {
predicates.add(cb.equal(root.get("containerStatus").as(Integer.class), containerRecoder.getContainerStatus()));
}
if (containerRecoder.getContainerStatusArr() != null) {
CriteriaBuilder.In<Integer> in = cb.in(root.get("containerStatus").as(Integer.class));
for (Integer status : containerRecoder.getContainerStatusArr()) {
in.value(status);
}
predicates.add(in);
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return specification;
}
}