init commit
This commit is contained in:
@ -0,0 +1,391 @@
|
||||
package com.cmeim.biz.controller.app;
|
||||
|
||||
import com.cmeim.basic.api.RemoteLocationService;
|
||||
import com.cmeim.biz.po.MmMaterialBar;
|
||||
import com.cmeim.biz.po.MmSporadicPickBill;
|
||||
import com.cmeim.biz.po.MmSporadicPickBillDetail;
|
||||
import com.cmeim.biz.po.MmSporadicPickBillItem;
|
||||
import com.cmeim.biz.repository.MmSporadicPickBillDetailRepository;
|
||||
import com.cmeim.biz.repository.MmSporadicPickBillItemRepository;
|
||||
import com.cmeim.biz.repository.MmSporadicPickBillRepository;
|
||||
import com.cmeim.biz.service.OutputAppService;
|
||||
import com.cmeim.biz.service.SporadicPickBillService;
|
||||
import com.cmeim.biz.vo.InputBillDetailVo;
|
||||
import com.cmeim.biz.vo.MmPickBillVo;
|
||||
import com.cmeim.biz.vo.MmSporadicPickBillVo;
|
||||
import com.cmeim.biz.vo.app.FndByPickNumberVo;
|
||||
import com.cmeim.biz.vo.app.SporadicPickBillAppVo;
|
||||
import com.cmeim.biz.vo.app.SporadicPickBillDetailVo;
|
||||
import com.cmeim.biz.vo.app.SporadicPickSaveVo;
|
||||
import com.cmeim.biz.vo.app.SporadicRedPickSaveVo;
|
||||
import com.cmeim.common.core.utils.BeanUtil;
|
||||
import com.cmeim.common.core.utils.DateUtil;
|
||||
import com.cmeim.common.core.utils.SecurityUtils;
|
||||
import com.cmeim.common.core.utils.bean.BeanUtils;
|
||||
import com.cmeim.common.core.web.controller.GenericController;
|
||||
import com.cmeim.common.core.web.domain.Respond;
|
||||
import com.cmeim.common.core.web.page.PageVo;
|
||||
import com.cmeim.stock.dto.MmStockDto;
|
||||
import com.cmeim.stock.po.MmStock;
|
||||
import com.cmeim.stock.repository.MmStockRepository;
|
||||
import com.google.common.collect.Lists;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
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.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
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.Join;
|
||||
import javax.persistence.criteria.JoinType;
|
||||
import javax.persistence.criteria.Order;
|
||||
import javax.persistence.criteria.Path;
|
||||
import javax.persistence.criteria.Predicate;
|
||||
import javax.persistence.criteria.Root;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Api(value = "app", tags = "APP零星出库模块")
|
||||
@RestController
|
||||
@RequestMapping(value = "output/app/sporadicPickBill")
|
||||
public class AppSporadicPickBillController extends GenericController {
|
||||
|
||||
@Autowired
|
||||
private OutputAppService appService;
|
||||
@Autowired
|
||||
private SporadicPickBillService service;
|
||||
@Autowired
|
||||
private MmSporadicPickBillRepository repository;
|
||||
@Autowired
|
||||
private MmSporadicPickBillDetailRepository detailRepository;
|
||||
@Autowired
|
||||
private RemoteLocationService locationService;
|
||||
@Autowired
|
||||
private MmSporadicPickBillItemRepository sporadicPickBillItemRepository;
|
||||
@Autowired
|
||||
private MmStockRepository mmStockRepository;
|
||||
|
||||
|
||||
private static final String sporadicPickBillNumber = "sporadicPickBillNumber";
|
||||
/**
|
||||
* IF-150:pc未完成领料单列表 工单 领料单号
|
||||
*/
|
||||
@ApiOperation(value = "IF-150:pc未完成领料单列表 工单 领料单号")
|
||||
@GetMapping(value = "missPickList2")
|
||||
public Respond missPickList2(PageVo pv, String parameter) {
|
||||
String[] orders = {"sporadicPickBillNumber desc"};
|
||||
pv.setPageSize(50);
|
||||
pv.setPageNo(1);
|
||||
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
|
||||
Sort.by(sortOrder(orders)));
|
||||
Integer[] dictStatus = new Integer[2];
|
||||
dictStatus[0] = 15; // 部分领料
|
||||
dictStatus[1] = 20; // 全部领料
|
||||
MmSporadicPickBillVo mmPickBillVo = new MmSporadicPickBillVo();
|
||||
mmPickBillVo.setDictStatusArr(dictStatus);
|
||||
Page page = repository.findAll(buildSpecification(mmPickBillVo, parameter), pageRequest);
|
||||
|
||||
List<MmSporadicPickBill> pickBillList = BeanUtil.copyProperties(page.getContent(), MmSporadicPickBill.class);
|
||||
final List<MmSporadicPickBill> collectBillList =
|
||||
pickBillList.stream().filter(e -> e.getDictType() != 3).collect(Collectors.toList());
|
||||
return buildSuccess(collectBillList);
|
||||
}
|
||||
|
||||
private Specification buildSpecification(MmSporadicPickBillVo mmArriveBillVo, String parameter) {
|
||||
return new Specification<MmSporadicPickBill>() {
|
||||
@Override
|
||||
public Predicate toPredicate(Root<MmSporadicPickBill> root, CriteriaQuery<?> criteriaQuery,
|
||||
CriteriaBuilder cb) {
|
||||
List<Predicate> predicates = Lists.newArrayList();
|
||||
List<Predicate> orlsit = new ArrayList<>();
|
||||
if (mmArriveBillVo.getDictStatusArr() != null) {
|
||||
CriteriaBuilder.In<Integer> in = cb.in(root.get("dictStatus").as(Integer.class));
|
||||
for (Integer status : mmArriveBillVo.getDictStatusArr()) {
|
||||
in.value(status);
|
||||
}
|
||||
predicates.add(in);
|
||||
}
|
||||
|
||||
if (com.cmeim.common.core.utils.StringUtils.isNotEmpty(parameter)) {
|
||||
orlsit.add(cb.like(root.get(sporadicPickBillNumber).as(String.class), "%" + parameter + "%"));
|
||||
orlsit.add(cb.like(root.get("orderProdNumber").as(String.class), "%" + parameter + "%"));
|
||||
}
|
||||
|
||||
|
||||
List<Order> orders = new ArrayList<>();
|
||||
orders.add(cb.desc(root.get(sporadicPickBillNumber)));
|
||||
criteriaQuery.orderBy(orders);
|
||||
|
||||
// 外联结子表,状态多选->去重
|
||||
criteriaQuery.distinct(true);
|
||||
|
||||
Predicate[] preOr = new Predicate[orlsit.size()];
|
||||
Predicate[] preAnd = new Predicate[predicates.size()];
|
||||
|
||||
if (orlsit.size() == 0) {
|
||||
//单独使用 and 或者 or 时 返回
|
||||
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
|
||||
}
|
||||
//组合 and or 时 返回
|
||||
return criteriaQuery.where(cb.and(predicates.toArray(preAnd)), cb.or(orlsit.toArray(preOr))).getRestriction();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-180:未完成出库单列表接口
|
||||
*/
|
||||
@ApiOperation(value = "IF-180:未完成出库单列表接口")
|
||||
@GetMapping(value = "uncompletedList")
|
||||
public Respond uncompletedList(PageVo pv, MmSporadicPickBillVo query) {
|
||||
Integer[] dictStatusArr = {5, 15,20};//,20
|
||||
query.setDictStatusArr(dictStatusArr);
|
||||
PageRequest pageRequest = PageRequest.of(pv.getPageNo() - 1, pv.getPageSize(),
|
||||
Sort.by(sortOrder(pv.getOrders())));
|
||||
Page page = repository.findAll(buildSpecifications(query), pageRequest);
|
||||
List<MmSporadicPickBill> list = page.getContent();
|
||||
List<SporadicPickBillAppVo> voList = new ArrayList<>();
|
||||
//优化调用接口的逻辑
|
||||
list.forEach(v -> {
|
||||
SporadicPickBillAppVo vo = new SporadicPickBillAppVo();
|
||||
BeanUtils.copyProperties(v, vo);
|
||||
if (vo.getDictType() != null) {
|
||||
vo.setDictTypeShow(appService.judge1(vo.getDictType()));
|
||||
}
|
||||
vo.setDictStatusShow(appService.judge2(vo.getDictStatus()));
|
||||
voList.add(vo);
|
||||
});
|
||||
pv.setRecordsTotal(page.getTotalElements());
|
||||
pv.setData(voList);
|
||||
return buildSuccess(pv);
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-181:出库单明细接口
|
||||
*/
|
||||
@ApiOperation(value = "IF-181:出库单明细接口")
|
||||
@GetMapping(value = "getDetail")
|
||||
public Respond getDetail(String sporadicPickBillNumber) {
|
||||
MmSporadicPickBill sporadicPickBill = repository.findBySporadicPickBillNumber(sporadicPickBillNumber);
|
||||
|
||||
List<MmSporadicPickBillDetail> detailList =
|
||||
detailRepository.findAllBySporadicPickBillNumber(sporadicPickBillNumber);
|
||||
List<SporadicPickBillDetailVo> voList = BeanUtil.copyProperties(detailList, SporadicPickBillDetailVo.class);
|
||||
|
||||
voListAdd(voList,sporadicPickBill);
|
||||
|
||||
return buildSuccess(voList);
|
||||
}
|
||||
|
||||
public void voListAdd(List<SporadicPickBillDetailVo> voList,MmSporadicPickBill sporadicPickBill){
|
||||
voList.forEach(vo -> {
|
||||
if (vo.getDoneQty().compareTo(vo.getPlanQty()) < 0) {
|
||||
// 还需要领取的数量
|
||||
BigDecimal needQty = vo.getPlanQty().subtract(vo.getDoneQty());
|
||||
|
||||
List<MmStock> result =
|
||||
mmStockRepository.findAllByWarehouseCodeAndMaterialCode(sporadicPickBill.getWarehouseCode(),
|
||||
vo.getMaterialCode());
|
||||
List<MmStockDto> stockDtoList = BeanUtil.copyProperties(result, MmStockDto.class);
|
||||
|
||||
if (stockDtoList.size() != 0) {
|
||||
List<String> materialBarList = new ArrayList<>();
|
||||
List<String> locationCodeList = new ArrayList<>();
|
||||
|
||||
for (MmStockDto stock : stockDtoList) {
|
||||
materialBarList.add(stock.getMaterialBar());
|
||||
locationCodeList.add(stock.getLocationCode());
|
||||
if (needQty.compareTo(stock.getQty()) > 0) {
|
||||
needQty = needQty.subtract(stock.getQty());
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
vo.setRecommendBar(String.join(",", materialBarList));
|
||||
if (locationCodeList.size() > 0) {
|
||||
// 库位去重
|
||||
locationCodeList = locationCodeList.stream().distinct().collect(Collectors.toList());
|
||||
vo.setRecommendLocation(String.join(",", locationCodeList));
|
||||
}
|
||||
}
|
||||
}
|
||||
// 查询相关领料记录
|
||||
List<MmSporadicPickBillItem> items =
|
||||
sporadicPickBillItemRepository.findAllBySporadicPickBillNumberAndMaterialCode(sporadicPickBillNumber, vo.getMaterialCode());
|
||||
vo.setItems(items);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-152:app领料单保存
|
||||
*/
|
||||
@ApiOperation(value = "IF-152:app领料单保存")
|
||||
@PostMapping(value = "sporadicPickSave")
|
||||
public Respond sporadicPickSave(@RequestBody SporadicPickSaveVo vo) {
|
||||
MmMaterialBar mmMaterialBar = service.sporadicPickSave(vo.getSporadicPickBillNumber(), vo.getMaterialBar(), vo.getQty());
|
||||
return buildSuccess(mmMaterialBar);
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-152:app红字领料单保存
|
||||
*/
|
||||
@ApiOperation(value = "IF-152:app红字领料单保存")
|
||||
@PostMapping(value = "sporadicRedPickSave")
|
||||
public Respond sporadicRedPickSave(@RequestBody SporadicRedPickSaveVo vo) {
|
||||
service.sporadicRedPickSave(vo);
|
||||
return buildSuccess("保存成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* IF-153:app零星出库选择库区
|
||||
*/
|
||||
@ApiOperation(value = "IF-153:app零星出库选择库区")
|
||||
@PostMapping(value = "saveSporadicPickBill")
|
||||
public Respond saveSporadicPickBill(@RequestBody MmSporadicPickBill mmSporadicPickBill) {
|
||||
MmSporadicPickBill mmSporadicPickBill1 = BeanUtil.copyProperties(mmSporadicPickBill, MmSporadicPickBill.class);
|
||||
mmSporadicPickBill1.setUpdatedBy(SecurityUtils.getUsername());
|
||||
mmSporadicPickBill1.setUpdatedDt(DateUtil.getCurrentDate());
|
||||
repository.save(mmSporadicPickBill1);
|
||||
return buildSuccess("库区修改成功");
|
||||
}
|
||||
|
||||
public Specification buildSpecifications(MmSporadicPickBillVo entity) {
|
||||
String items = "items";
|
||||
String createdDt = "createdDt";
|
||||
return (Specification<MmPickBillVo>) (root, criteriaQuery, cb) -> {
|
||||
List<Predicate> predicates = Lists.newArrayList();
|
||||
if (StringUtils.isNotBlank(entity.getSporadicPickBillNumber())) {
|
||||
predicates.add(cb.like(root.get(sporadicPickBillNumber).as(String.class),
|
||||
"%" + entity.getSporadicPickBillNumber() + "%"));
|
||||
}
|
||||
if (entity.getDictStatusArr() != null) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("dictStatus");
|
||||
CriteriaBuilder.In<Integer> in = cb.in(path);
|
||||
for (Integer status : entity.getDictStatusArr()) {
|
||||
in.value(status);
|
||||
}
|
||||
predicates.add(in);
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getStartTime())) {
|
||||
predicates.add(cb.greaterThanOrEqualTo(root.get(createdDt).as(String.class),
|
||||
entity.getStartTime()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getEndTime())) {
|
||||
predicates.add(cb.lessThanOrEqualTo(root.get(createdDt).as(String.class), entity.getEndTime()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getCustomerName())) {
|
||||
predicates.add(cb.like(root.get("customerName").as(String.class),
|
||||
"%" + entity.getCustomerName() + "%"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getCustomerCode())) {
|
||||
predicates.add(cb.like(root.get("customerCode").as(String.class), entity.getCustomerCode()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getOrderProdNumber())) {
|
||||
predicates.add(cb.like(root.get("orderProdNumber").as(String.class), entity.getOrderProdNumber()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getOrderWorkNumber())) {
|
||||
predicates.add(cb.like(root.get("orderWorkNumber").as(String.class), entity.getOrderWorkNumber()));
|
||||
}
|
||||
if (entity.getDictTypeArr() != null) {
|
||||
CriteriaBuilder.In<Integer> in = cb.in(root.get("dictType").as(Integer.class));
|
||||
for (Integer status : entity.getDictTypeArr()) {
|
||||
in.value(status);
|
||||
}
|
||||
predicates.add(in);
|
||||
}
|
||||
if (entity.getOrderArr() != null) {
|
||||
CriteriaBuilder.In<String> in = cb.in(root.get(sporadicPickBillNumber).as(String.class));
|
||||
for (String status : entity.getOrderArr()) {
|
||||
in.value(status);
|
||||
}
|
||||
predicates.add(in);
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getMaterialCode())) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("materialCode");
|
||||
predicates.add(cb.like(path, "%" + entity.getMaterialCode() + "%"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getMaterialName())) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("materialName");
|
||||
predicates.add(cb.like(path, "%" + entity.getMaterialName() + "%"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getMaterialSpec())) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("materialSpec");
|
||||
predicates.add(cb.like(path, "%" + entity.getMaterialSpec() + "%"));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getSourceWarehouseCode())) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("sourceWarehouseCode");
|
||||
predicates.add(cb.equal(path, entity.getSourceWarehouseCode()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(entity.getTargetWarehouseCode())) {
|
||||
Path path;
|
||||
Join join = root.join(items, JoinType.LEFT);
|
||||
path = join.get("targetWarehouseCode");
|
||||
predicates.add(cb.equal(path, entity.getTargetWarehouseCode()));
|
||||
}
|
||||
List<Order> orders = new ArrayList<>();
|
||||
orders.add(cb.desc(root.get(createdDt)));
|
||||
criteriaQuery.orderBy(orders);
|
||||
criteriaQuery.distinct(true);
|
||||
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 领料亮灯推荐
|
||||
*/
|
||||
@ApiOperation(value = "领料亮灯推荐")
|
||||
@GetMapping(value = "pickLightUp")
|
||||
public Respond pickLightUp(String pickBillNumber) {
|
||||
String color = service.pickLightUp(pickBillNumber);
|
||||
return buildSuccess(color);
|
||||
}
|
||||
/**
|
||||
* 红字货架熄灯
|
||||
*/
|
||||
@ApiOperation(value = "红字货架熄灯")
|
||||
@GetMapping(value = "redOff")
|
||||
public Respond redOff(String inputBillNumber) {
|
||||
service.redOff(inputBillNumber);
|
||||
return buildSuccess();
|
||||
}
|
||||
/**
|
||||
* APP筛选
|
||||
*/
|
||||
@ApiOperation(value = "APP筛选")
|
||||
@PostMapping(value = "findBySporadicPickBillList")
|
||||
public Respond findBySporadicPickBillList(@RequestBody FndByPickNumberVo vo) {
|
||||
List<SporadicPickBillDetailVo> voList = service.findBySporadicPickBillList(vo.getPickBillNumber(), vo.getDictStatus(), vo.getMaterialCode());
|
||||
|
||||
if (voList.size() > 0) {
|
||||
return buildSuccess(voList.stream().sorted(
|
||||
Comparator.comparing(SporadicPickBillDetailVo::getDictStatus)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
return buildSuccess(voList);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user