package com.zy.asrs.wms.controller;
|
|
import com.zy.asrs.common.domain.dto.LocDto;
|
import com.zy.asrs.common.sys.service.StaDescService;
|
import com.zy.asrs.common.web.BaseController;
|
import com.zy.asrs.common.wms.entity.LocDetl;
|
import com.zy.asrs.common.wms.entity.OrderDetl;
|
import com.zy.asrs.common.wms.service.*;
|
import com.zy.asrs.framework.annotations.ManagerAuth;
|
import com.zy.asrs.framework.common.BaseRes;
|
import com.zy.asrs.framework.common.Cools;
|
import com.zy.asrs.framework.common.R;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.RequestBody;
|
import org.springframework.web.bind.annotation.RestController;
|
|
import java.util.*;
|
|
/**
|
* Created by vincent on 2022/3/26
|
*/
|
|
@RestController
|
public class OutController extends BaseController {
|
|
@Autowired
|
private OrderService orderService;
|
@Autowired
|
private OrderDetlService orderDetlService;
|
@Autowired
|
private StaDescService staDescService;
|
@Autowired
|
private LocDetlService locDetlService;
|
@Autowired
|
private LocMastService locMastService;
|
@Autowired
|
private WorkService workService;
|
@Autowired
|
private BasDevpService basDevpService;
|
|
@PostMapping("/out/pakout/preview/auth")
|
@ManagerAuth
|
public R pakoutPreview(@RequestBody List<Long> ids) {
|
if (Cools.isEmpty(ids)) {
|
return R.parse(BaseRes.PARAM);
|
}
|
List<OrderDetl> orderDetls = orderDetlService.listByIds(ids);
|
List<LocDto> locDtos = new ArrayList<>();
|
|
Set<String> exist = new HashSet<>();
|
|
for (OrderDetl orderDetl : orderDetls) {
|
double issued = Optional.of(orderDetl.getAnfme() - orderDetl.getQty()).orElse(0.0D);
|
if (issued <= 0.0D) { continue; }
|
List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getOrigin(), exist);
|
for (LocDetl locDetl : locDetls) {
|
if (!Cools.isEmpty(locDetl.getMemo())){
|
continue;
|
}
|
if (issued > 0) {
|
LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
|
issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);
|
List<Integer> staNos = staDescService.queryOutStaNosByLocNo(locDetl.getLocNo(), issued >= locDetl.getAnfme() ? 101 : 103);
|
locDto.setStaNos(staNos);
|
locDtos.add(locDto);
|
exist.add(locDetl.getLocNo());
|
// 剩余待出数量递减
|
issued = issued - locDetl.getAnfme();
|
} else {
|
break;
|
}
|
}
|
if (issued > 0) {
|
LocDto locDto = new LocDto(null, orderDetl.getMatnr(), orderDetl.getMaktx(), orderDetl.getBatch(), orderDetl.getOrderNo(), issued);
|
locDto.setLack(Boolean.TRUE);
|
locDtos.add(locDto);
|
}
|
}
|
return R.ok().add(locDtos);
|
}
|
|
}
|