182 lines
8.7 KiB
Plaintext
182 lines
8.7 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.cmeim.stock.repository.OrderInfoRepository;
|
|
import com.cmeim.stock.repository.StationInfoRepository;
|
|
import com.cmeim.stock.service.ContainerService;
|
|
import com.google.common.collect.Lists;
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.ApiOperation;
|
|
import lombok.extern.log4j.Log4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
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.*;
|
|
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
import javax.persistence.criteria.CriteriaQuery;
|
|
import javax.persistence.criteria.Predicate;
|
|
import javax.persistence.criteria.Root;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @author 李俊辉
|
|
* @version 1.0
|
|
* date: 2023/6/27
|
|
*/
|
|
@Api(tags = "周转箱")
|
|
@RestController
|
|
@Slf4j
|
|
@RequestMapping(value = "container")
|
|
public class ContainerController extends GenericController {
|
|
@Autowired
|
|
private ContainerInfoRepository containerInfoRepository;
|
|
@Autowired
|
|
private ContainerRecoderRepository containerRecoderRepository;
|
|
@Autowired
|
|
private ContainerService containerService;
|
|
@Autowired
|
|
private StationInfoRepository stationInfoRepository;
|
|
@Autowired
|
|
private OrderInfoRepository orderInfoRepository;
|
|
@Value("${container.hour}")
|
|
private String hour;
|
|
|
|
@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(@RequestBody ContainerInfo containerInfo) {
|
|
ContainerInfo container = containerInfoRepository.findByContainerNumber(containerInfo.getContainerNumber());
|
|
if (container == null) {
|
|
throw new ServiceException(RespondEnum.PARAMETER_ERROR, "未找到该周转箱");
|
|
}
|
|
if (StringUtils.isBlank(containerInfo.getStationCode())) {
|
|
throw new ServiceException(RespondEnum.PARAMETER_ERROR, "站位编码为空");
|
|
}
|
|
//查询正在执行的任务单,绑定任务单
|
|
StationInfo stationInfo = stationInfoRepository.findByStationCode(containerInfo.getStationCode());
|
|
containerInfo.setProductionTask(stationInfo.getProductionTask());
|
|
//修订周转箱数量
|
|
List<ContainerInfo> containerInfoList = containerInfoRepository.findByProductionTask(stationInfo.getProductionTask());
|
|
Integer sumQty = containerInfoList.stream().collect(Collectors.summingInt(ContainerInfo::getQty));
|
|
OrderInfo orderInfo = orderInfoRepository.findByProductionTask(stationInfo.getProductionTask());
|
|
if (orderInfo.getPlanQty() - sumQty < 6) {
|
|
container.setQty(orderInfo.getPlanQty() - sumQty);
|
|
}
|
|
//赋值其他属性
|
|
container.setContainerStatus(containerInfo.getContainerStatus());
|
|
container.setQty(containerInfo.getQty());
|
|
container.setUpdatedBy(containerInfo.getUpdatedBy());
|
|
container.setUpdatedDt(containerInfo.getUpdatedDt());
|
|
ContainerInfo save = containerInfoRepository.save(container);
|
|
|
|
//修改任务单中的入库中数量
|
|
if (orderInfo != null) {
|
|
orderInfo.setOngoingQty(orderInfo.getOngoingQty() + save.getQty());
|
|
orderInfoRepository.save(orderInfo);
|
|
}
|
|
return buildSuccess(save);
|
|
}
|
|
|
|
@ApiOperation(value = "查询大于规定小时的任务单及数量")
|
|
@PostMapping(value = "findGreaterThanEightHours")
|
|
public Respond findGreaterThanEightHours() {
|
|
List<ContainerInfo> containerInfoList = containerService.queryGreaterThanEightHours();
|
|
//根据生产任务单进行分组求和
|
|
Map<String, Integer> sumMap = containerInfoList.stream()
|
|
.collect(Collectors.groupingBy(ContainerInfo::getProductionTask, Collectors.summingInt(ContainerInfo::getQty)));
|
|
return buildSuccess(sumMap);
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|