生产订单副产品(拆解)管理无码功能修改
This commit is contained in:
parent
dd57c80551
commit
0499563371
|
|
@ -23,15 +23,12 @@ import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
|
|||
import com.nflg.wms.common.pojo.dto.InventoryInDTO;
|
||||
import com.nflg.wms.common.pojo.dto.OptRecordDTO;
|
||||
import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO;
|
||||
import com.nflg.wms.common.pojo.dto.Zwm00Mb107DTO;
|
||||
import com.nflg.wms.common.pojo.qo.*;
|
||||
import com.nflg.wms.common.util.DateTimeUtil;
|
||||
import com.nflg.wms.common.pojo.vo.*;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.common.util.VUtil;
|
||||
import com.nflg.wms.repository.entity.*;
|
||||
import com.nflg.wms.repository.service.*;
|
||||
import com.nflg.wms.starter.annotation.ApiMark;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.Valid;
|
||||
|
|
@ -39,7 +36,6 @@ import jakarta.validation.constraints.NotEmpty;
|
|||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
|
|
@ -51,10 +47,8 @@ import java.io.ByteArrayOutputStream;
|
|||
import java.math.BigDecimal;
|
||||
import java.net.URL;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
|
@ -73,15 +67,6 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
@Resource
|
||||
private BasdeSerialNumberControllerService serialNumberControllerService;
|
||||
|
||||
@Resource
|
||||
private IWmsInProduceOrderService produceOrderService;
|
||||
|
||||
@Resource
|
||||
private IWmsInProduceOrderItemService produceOrderItemService;
|
||||
|
||||
@Resource
|
||||
private IWmsBomService bomService;
|
||||
|
||||
@Resource
|
||||
private IWmsInProduceOrderSurplusService inProduceOrderSurplusService;
|
||||
|
||||
|
|
@ -100,9 +85,6 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
@Resource
|
||||
private IWmsInventoryService inventoryService;
|
||||
|
||||
@Resource
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
|
||||
@Resource
|
||||
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||
|
||||
|
|
@ -183,67 +165,6 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
return ApiResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 无码保存
|
||||
* @param request 请求参数
|
||||
*/
|
||||
@Transactional
|
||||
@PostMapping("saveNoScanning")
|
||||
public ApiResult<Long> saveNoScanning(@Valid @RequestBody InProduceOrderGenerateMaterialsQO request) {
|
||||
return ApiResult.success(saveNoScanningOrder(request));
|
||||
}
|
||||
|
||||
private Long saveNoScanningOrder(InProduceOrderGenerateMaterialsQO request) {
|
||||
WmsInProduceOrder order = new WmsInProduceOrder()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setDataType(request.getDataType())
|
||||
.setNo(serialNumberControllerService.generateSerialNumber(8))
|
||||
.setOrderNo(request.getAufnr())
|
||||
.setList(request.getList())
|
||||
.setCreateBy(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
produceOrderService.save(order);
|
||||
String date = DateTimeUtil.format(LocalDate.now(), "yyMMdd");
|
||||
stringRedisTemplate.opsForValue().setIfAbsent("index:batchNo:" + date, "0", 24 - LocalDateTime.now().getHour(), TimeUnit.HOURS);
|
||||
String index = StrUtil.padPre(String.valueOf(stringRedisTemplate.opsForValue().increment("index:batchNo:" + date)), 4, "0");
|
||||
WmsInProduceOrderItem parent = new WmsInProduceOrderItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setOrderId(order.getId())
|
||||
.setParentId(0L)
|
||||
.setNum(request.getNum())
|
||||
.setMaterialNo(request.getMatnr())
|
||||
.setMaterialDesc(request.getMaktx())
|
||||
.setUnit(request.getMeins())
|
||||
.setFactoryNo(request.getPwerk())
|
||||
.setWarehouseNo(request.getLgort())
|
||||
.setOrderNum(request.getPsmng())
|
||||
.setBatchNo(date + index)
|
||||
.setSernr(request.getSernr());
|
||||
produceOrderItemService.save(parent);
|
||||
if (request.getList()) {
|
||||
List<WmsBom> children = bomService.getChildren(request.getMatnr());
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(children)).throwMessage("请先添加齐套物料");
|
||||
List<WmsInProduceOrderItem> items = children.stream()
|
||||
.map(it -> new WmsInProduceOrderItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setOrderId(order.getId())
|
||||
.setParentId(parent.getId())
|
||||
.setNum(it.getNum())
|
||||
.setMaterialNo(it.getNo())
|
||||
.setMaterialDesc(it.getDescribe())
|
||||
.setUnit(request.getMeins())
|
||||
.setFactoryNo(request.getPwerk())
|
||||
.setWarehouseNo(request.getLgort())
|
||||
.setOrderNum(request.getPsmng())
|
||||
.setBatchNo(parent.getBatchNo())
|
||||
.setSernr(request.getSernr())
|
||||
)
|
||||
.toList();
|
||||
produceOrderItemService.saveBatch(items);
|
||||
}
|
||||
return order.getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* 搜索订单
|
||||
*/
|
||||
|
|
@ -483,23 +404,23 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
*/
|
||||
@GetMapping("getListForNoScan")
|
||||
public ApiResult<List<NoScanItemVO>> getListForNoScan(@RequestParam Long orderId) {
|
||||
WmsInProduceOrder order = produceOrderService.getById(orderId);
|
||||
WmsInProduceOrderSurplus order = inProduceOrderSurplusService.getById(orderId);
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
List<WmsInProduceOrderItem> items = produceOrderItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderItem::getOrderId, orderId)
|
||||
List<WmsInProduceOrderSurplusItem> items = inProduceOrderSurplusItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderSurplusItem::getOrderId, orderId)
|
||||
.list();
|
||||
items.removeIf(item -> item.getNum().compareTo(BigDecimal.ZERO) <= 0
|
||||
|| noScanningBaseControllerService.existsQrCode(item.getMaterialNo()));
|
||||
items.removeIf(item -> item.getLeftNum().compareTo(BigDecimal.ZERO) <= 0
|
||||
|| noScanningBaseControllerService.existsQrCode(item.getMatnr()));
|
||||
return ApiResult.success(
|
||||
items.stream()
|
||||
.map(item -> new NoScanItemVO()
|
||||
.setRowNo("")
|
||||
.setRowNo(item.getRspos())
|
||||
.setOrderItemId(item.getId())
|
||||
.setMaterialNo(item.getMaterialNo())
|
||||
.setMaterialDesc(item.getMaterialDesc())
|
||||
.setFactoryNo(item.getFactoryNo())
|
||||
.setWarehouseNo(item.getWarehouseNo())
|
||||
.setNum(item.getNum())
|
||||
.setMaterialNo(item.getMatnr())
|
||||
.setMaterialDesc(item.getMaktx2())
|
||||
.setFactoryNo(order.getDwerk())
|
||||
.setWarehouseNo(order.getLgort2())
|
||||
.setNum(item.getLeftNum())
|
||||
)
|
||||
.toList()
|
||||
);
|
||||
|
|
@ -513,83 +434,119 @@ public class InProduceOrderSurplusController extends BaseController {
|
|||
@PostMapping("receiveNoScanning")
|
||||
public ApiResult<Void> receiveNoScanning(@Valid @RequestBody @NotEmpty List<NoScanningRequest> requests) {
|
||||
List<InventoryInDTO> inventories = new ArrayList<>();
|
||||
List<Zwm00Mb107QO> input1 = new ArrayList<>();
|
||||
List<String> sernrs = new ArrayList<>();
|
||||
Map<String, ZWM3A22Input1QO> input1Map = new LinkedHashMap<>();
|
||||
Map<String, ZWM3A22Input2QO> input2Map = new LinkedHashMap<>();
|
||||
Set<Long> orderIds = new HashSet<>();
|
||||
Set<String> warehouseNos = new HashSet<>();
|
||||
WmsInProduceOrderSurplusTicket ticket = null;
|
||||
List<WmsInProduceOrderSurplusItem> orderItemsToUpdate = new ArrayList<>();
|
||||
List<WmsInProduceOrderSurplusTicketItem> ticketItems = new ArrayList<>();
|
||||
WmsInProduceOrderSurplus order = null;
|
||||
|
||||
for (NoScanningRequest request : requests) {
|
||||
WmsInProduceOrder order = produceOrderService.getById(request.getId());
|
||||
order = inProduceOrderSurplusService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||
VUtil.trueThrowBusinessError(!Objects.equals(order.getState(), (short) 0))
|
||||
.throwMessage("该订单非待收货状态");
|
||||
|
||||
List<WmsInProduceOrderItem> orderItems = produceOrderItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderItem::getOrderId, order.getId())
|
||||
WmsInProduceOrderSurplus currentOrder = order;
|
||||
List<WmsInProduceOrderSurplusItem> orderItems = inProduceOrderSurplusItemService.lambdaQuery()
|
||||
.eq(WmsInProduceOrderSurplusItem::getOrderId, currentOrder.getId())
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
|
||||
Map<Long, WmsInProduceOrderItem> orderItemMap = orderItems.stream()
|
||||
.collect(Collectors.toMap(WmsInProduceOrderItem::getId, item -> item));
|
||||
orderIds.add(order.getId());
|
||||
Map<Long, WmsInProduceOrderSurplusItem> orderItemMap = orderItems.stream()
|
||||
.collect(Collectors.toMap(WmsInProduceOrderSurplusItem::getId, item -> item));
|
||||
orderIds.add(currentOrder.getId());
|
||||
VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货");
|
||||
warehouseNos.addAll(request.getItems().stream().map(NoScanningItemRequest::getWarehouseNo).collect(Collectors.toSet()));
|
||||
VUtil.trueThrowBusinessError(warehouseNos.size() != 1).throwMessage("请一次只提交同一个库存地点的无码收货");
|
||||
if (ticket == null) {
|
||||
ticket = new WmsInProduceOrderSurplusTicket()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setNo(serialNumberControllerService.generateSerialNumber(25))
|
||||
.setOrderId(currentOrder.getId())
|
||||
.setLgort(warehouseNos.iterator().next())
|
||||
.setCreateBy(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now());
|
||||
}
|
||||
|
||||
for (NoScanningItemRequest item : request.getItems()) {
|
||||
WmsInProduceOrderItem orderItem = orderItemMap.get(item.getOrderItemId());
|
||||
WmsInProduceOrderSurplusItem orderItem = orderItemMap.get(item.getOrderItemId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在");
|
||||
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMaterialNo()))
|
||||
VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr()))
|
||||
.throwMessage("订单项与物料不匹配:" + item.getMaterialNo());
|
||||
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMaterialNo()))
|
||||
.throwMessage("物料" + orderItem.getMaterialNo() + "已生成二维码,不允许无码收货");
|
||||
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr()))
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码收货");
|
||||
|
||||
BigDecimal totalNum = item.getDatas().stream()
|
||||
.peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0)
|
||||
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量必须大于0"))
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量必须大于0"))
|
||||
.map(NoScanningItemDataRequest::getNum)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getNum()) != 0)
|
||||
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量与订单数量不一致");
|
||||
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getLeftNum()) > 0)
|
||||
.throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量超出可入库数量");
|
||||
orderItem.setLeftNum(orderItem.getLeftNum().subtract(totalNum));
|
||||
orderItemsToUpdate.add(orderItem);
|
||||
|
||||
item.getDatas().forEach(data -> {
|
||||
inventories.add(new InventoryInDTO()
|
||||
.setMaterialNo(orderItem.getMaterialNo())
|
||||
.setFactoryNo(orderItem.getFactoryNo())
|
||||
.setWarehouseNo(orderItem.getWarehouseNo())
|
||||
.setMaterialNo(orderItem.getMatnr())
|
||||
.setFactoryNo(currentOrder.getDwerk())
|
||||
.setWarehouseNo(item.getWarehouseNo())
|
||||
.setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), ""))
|
||||
.setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), ""))
|
||||
.setBinLocation(StrUtil.blankToDefault(data.getBinNo(), ""))
|
||||
.setNum(data.getNum())
|
||||
);
|
||||
String input1Key = orderItem.getRspos() + "|" + orderItem.getMatnr() + "|" + StrUtil.blankToDefault(data.getBatchNo(), "") + "|" + item.getWarehouseNo();
|
||||
input1Map.merge(input1Key, new ZWM3A22Input1QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setMatnr(orderItem.getMatnr())
|
||||
.setMaktx(orderItem.getMaktx2())
|
||||
.setWerks(currentOrder.getDwerk())
|
||||
.setLgort(item.getWarehouseNo())
|
||||
.setMenge(data.getNum())
|
||||
.setMenge_t(BigDecimal.ZERO)
|
||||
.setMeins(orderItem.getMeins())
|
||||
.setCharg(StrUtil.blankToDefault(data.getBatchNo(), "")), (e, i) -> {
|
||||
e.setMenge(e.getMenge().add(i.getMenge()));
|
||||
return e;
|
||||
});
|
||||
if (StrUtil.isNotBlank(data.getSerialNo())) {
|
||||
String input2Key = orderItem.getRspos() + "|" + data.getSerialNo();
|
||||
input2Map.putIfAbsent(input2Key, new ZWM3A22Input2QO()
|
||||
.setRspos(orderItem.getRspos())
|
||||
.setSernr(data.getSerialNo()));
|
||||
}
|
||||
});
|
||||
ticketItems.add(new WmsInProduceOrderSurplusTicketItem()
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setTicketId(ticket.getId())
|
||||
.setOrderItemId(orderItem.getId())
|
||||
.setLgpbe(StrUtil.join(",", item.getDatas().stream()
|
||||
.map(NoScanningItemDataRequest::getBinNo)
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.toList()))
|
||||
.setNum(totalNum));
|
||||
}
|
||||
|
||||
input1.addAll(orderItems.stream()
|
||||
.filter(it -> Objects.equals(it.getParentId(), 0L))
|
||||
.map(it -> new Zwm00Mb107QO()
|
||||
.setPWERK(it.getFactoryNo())
|
||||
.setPSMNG(it.getNum())
|
||||
.setAMEIN(it.getUnit())
|
||||
.setLGORT(it.getWarehouseNo())
|
||||
.setCHARG(it.getBatchNo()))
|
||||
.toList());
|
||||
sernrs.addAll(orderItems.stream()
|
||||
.filter(it -> Objects.equals(it.getParentId(), 0L))
|
||||
.map(WmsInProduceOrderItem::getSernr)
|
||||
.toList());
|
||||
}
|
||||
|
||||
inventoryService.in(mergeInventories(inventories));
|
||||
WmsInProduceOrder order = produceOrderService.getById(requests.get(0).getId());
|
||||
inProduceOrderSurplusItemService.updateBatchById(orderItemsToUpdate);
|
||||
inProduceOrderSurplusTicketItemService.saveBatch(ticketItems);
|
||||
Pair<String, String> result = sapService.zwm3a22(new ZWM3A22QO()
|
||||
.setAufnr(order.getAufnr())
|
||||
.setInput1(new ArrayList<>(input1Map.values()))
|
||||
.setInput2(new ArrayList<>(input2Map.values())));
|
||||
ticket.setMatDoc(result.getKey());
|
||||
ticket.setDocYear(result.getValue());
|
||||
inProduceOrderSurplusTicketService.save(ticket);
|
||||
inProduceOrderSurplusService.lambdaUpdate()
|
||||
.set(WmsInProduceOrderSurplus::getUpdateBy, UserUtil.getUserName())
|
||||
.set(WmsInProduceOrderSurplus::getUpdateTime, LocalDateTime.now())
|
||||
.eq(WmsInProduceOrderSurplus::getId, order.getId())
|
||||
.update();
|
||||
OptRecordDTO optRecordDTO = new OptRecordDTO();
|
||||
optRecordDTO.setOperationType((short) 1)
|
||||
.setOrderId(order.getNo());
|
||||
.setOrderId(ticket.getNo());
|
||||
optRecordService.add(optRecordDTO);
|
||||
|
||||
Zwm00Mb107DTO dto = sapService.zwm00_mb107(order.getOrderNo(), UserUtil.getUserName(), input1, sernrs);
|
||||
order.setMblnr(dto.getE_MBLNR());
|
||||
order.setMjahr(dto.getE_MJAHR());
|
||||
order.setState((short) 1);
|
||||
order.setUpdateBy(UserUtil.getUserName());
|
||||
order.setUpdateTime(LocalDateTime.now());
|
||||
produceOrderService.updateById(order);
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue