Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
yf001217 2026-03-20 17:06:23 +08:00
commit bdfd9e8844
14 changed files with 481 additions and 202 deletions

View File

@ -220,31 +220,32 @@ public class ComponentOutboundController extends BaseController {
if (item.isQiTao()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getBatchs()))
.throwMessage("齐套物料需要提供批次信息");
item.getBatchs()
.forEach(it -> {
records.add(new OutMaterialScanRecord()
.setSource(7)
.setSourceId(packing.getId())
.setSourceItemId(outboundItem.getPackingItemId())
.setTicketId(outbound.getId())
.setTicketItemId(outboundItem.getId())
.setMaterialNo(outboundItem.getIdnrk())
.setContent("")
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setFactoryNo(packing.getFactoryNo())
.setWarehouseNo(outboundItem.getLgort())
item.getBatchs().forEach(it -> {
records.add(new OutMaterialScanRecord()
.setSource(7)
.setSourceId(packing.getId())
.setSourceItemId(outboundItem.getPackingItemId())
.setTicketId(outbound.getId())
.setTicketItemId(outboundItem.getId())
.setMaterialNo(outboundItem.getIdnrk())
.setContent("")
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(packing.getFactoryNo())
.setWarehouseNo(outboundItem.getLgort())
// .setUnit(item.getMeins())
.setNum(it.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
});
.setNum(it.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
});
VUtil.trueThrowBusinessError(outboundItem.getOutQty()
.compareTo(records.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add)) != 0)
.throwMessage("物料" + outboundItem.getIdnrk() + "的领取数量不等于装箱数量");
} else {
}
if (item.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes()))
.throwMessage("需要提供扫码信息");
if (CollectionUtil.isNotEmpty(item.getScanCodes())) {
@ -284,28 +285,31 @@ public class ComponentOutboundController extends BaseController {
// .setLgpbe(outboundItem.getLgpbe());
// outboundScanCodes.add(scanCodes);
WmsQrCodeMaster qrCodeContent = qrCodeMasterService.getByCode(code.getCodeId());
records.add(new OutMaterialScanRecord()
.setSource(7)
.setSourceId(packing.getId())
.setSourceItemId(outboundItem.getPackingItemId())
.setTicketId(outbound.getId())
.setTicketItemId(outboundItem.getId())
.setMaterialNo(outboundItem.getIdnrk())
.setContent(qrCodeContent.getBarcodeCode())
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setUniqNo(code.getCodeId())
.setFactoryNo(qrCodeContent.getFactoryCode())
.setWarehouseNo(qrCodeContent.getStorageLocation())
.setBinNo(qrCodeContent.getBinLocation())
if (!item.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(7)
.setSourceId(packing.getId())
.setSourceItemId(outboundItem.getPackingItemId())
.setTicketId(outbound.getId())
.setTicketItemId(outboundItem.getId())
.setMaterialNo(outboundItem.getIdnrk())
.setContent(qrCodeContent.getBarcodeCode())
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setUniqNo(code.getCodeId())
.setQiTao(false)
.setFactoryNo(qrCodeContent.getFactoryCode())
.setWarehouseNo(qrCodeContent.getStorageLocation())
.setBinNo(qrCodeContent.getBinLocation())
// .setUnit(item.getMeins())
.setNum(code.getCodeNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
.setNum(code.getCodeNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
//组装下库存信息
setInventoryOutDTO(inventories, outboundItem.getIdnrk(), packing.getFactoryNo()
, qrCodeContent.getStorageLocation(), qrCodeContent.getBinLocation(),qrCodeContent.getBatchNo()
, qrCodeContent.getStorageLocation(), qrCodeContent.getBinLocation(), qrCodeContent.getBatchNo()
, qrCodeContent.getSerialNo(), code.getCodeNum());
}
@ -405,11 +409,11 @@ public class ComponentOutboundController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() :qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -438,11 +442,11 @@ public class ComponentOutboundController extends BaseController {
.orElse(null);
if (Objects.isNull(codeItem)) {
scanCodesGroup.add(new ScanCodeQO()
.setCodeId(record.getId())
.setBatchNumber(record.getBatchNo())
.setSerialNumbers(record.getSerialNo())
.setCodeId(record.getId())
.setBatchNumber(record.getBatchNo())
.setSerialNumbers(record.getSerialNo())
// .setCodeContent(record.getContent())
.setCodeNum(record.getNum())
.setCodeNum(record.getNum())
);
} else {
codeItem.setCodeNum(codeItem.getCodeNum().add(record.getNum()));
@ -573,7 +577,7 @@ public class ComponentOutboundController extends BaseController {
组装库存信息
*/
private void setInventoryOutDTO(List<InventoryOutDTO> inventories, String materialNo,
String factoryNo, String warehouseNo,String binNo, String batchNumber, String serialNo, BigDecimal outQty
String factoryNo, String warehouseNo, String binNo, String batchNumber, String serialNo, BigDecimal outQty
) {
InventoryOutDTO inventory = inventories.stream()
.filter(it -> StrUtil.equals(it.getMaterialNo(), materialNo)

View File

@ -262,6 +262,7 @@ public class OutAssistanceController extends BaseController {
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(order.getWerks())
.setWarehouseNo(order.getLgort1())
.setUnit(item.getMeins())
@ -276,7 +277,8 @@ public class OutAssistanceController extends BaseController {
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制");
});
} else {
}
if (qitem.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
.throwMessage("需要提供扫码信息");
qitem.getQrCodes().forEach(qrCode -> {
@ -299,27 +301,30 @@ public class OutAssistanceController extends BaseController {
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new OutMaterialScanRecord()
.setSource(3)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setUnit(item.getMeins())
.setNum(qrCodeMaster.getQuantity())
.setEbeln(order.getEbeln())
.setEbelp(item.getEbelp())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
if (!qitem.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(3)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setUnit(item.getMeins())
.setQiTao(false)
.setNum(qrCodeMaster.getQuantity())
.setEbeln(order.getEbeln())
.setEbelp(item.getEbelp())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
});
}
});
@ -377,11 +382,11 @@ public class OutAssistanceController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -462,8 +467,7 @@ public class OutAssistanceController extends BaseController {
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, records.stream().map(OutMaterialScanRecord::getUniqNo).toList())
.list();
qrCodeMasters.stream()
.forEach(p -> {
qrCodeMasters.forEach(p -> {
OutMaterialScanRecord record = records.stream()
.filter(r -> r.getUniqNo().equals(p.getBarcodeCode()))
.findFirst()

View File

@ -259,6 +259,7 @@ public class OutCostCenterController extends BaseController {
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(order.getWerks())
.setWarehouseNo(request.getLgort())
.setNum(it.getNum())
@ -270,7 +271,8 @@ public class OutCostCenterController extends BaseController {
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制");
});
} else {
}
if (qitem.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
.throwMessage("需要提供扫码信息");
qitem.getQrCodes().forEach(qrCode -> {
@ -293,24 +295,27 @@ public class OutCostCenterController extends BaseController {
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new OutMaterialScanRecord()
.setSource(2)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
if (!qitem.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(2)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setQiTao(false)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
});
}
});
@ -339,7 +344,7 @@ public class OutCostCenterController extends BaseController {
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters);
submitSap(order, ticket, records, datas,qrCodeMasters);
submitSap(order, ticket, records, datas, qrCodeMasters);
} else {
inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream()
@ -357,7 +362,7 @@ public class OutCostCenterController extends BaseController {
}
private void submitSap(WmsOutCostcenter order, WmsOutCostcenterTicket ticket, List<OutMaterialScanRecord> records
, List<WmsOutCostcenterItem> datas,List<WmsQrCodeMaster> qrCodeMasters) {
, List<WmsOutCostcenterItem> datas, List<WmsQrCodeMaster> qrCodeMasters) {
inventoryService.out(records.stream()
.collect(Collectors.groupingBy(OutMaterialScanRecord::getKey))
.values()
@ -368,11 +373,11 @@ public class OutCostCenterController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -455,7 +460,7 @@ public class OutCostCenterController extends BaseController {
.list();
qrCodeMasters.stream()
.forEach(p -> {
OutMaterialScanRecord record=records.stream()
OutMaterialScanRecord record = records.stream()
.filter(r -> r.getUniqNo().equals(p.getBarcodeCode()))
.findFirst()
.get();
@ -466,7 +471,7 @@ public class OutCostCenterController extends BaseController {
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
if (p.getPackagingType() == 1){
if (p.getPackagingType() == 1) {
List<WmsQrCodeMaster> children = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getParentBarcodeId, p.getId())
.list();
@ -485,7 +490,7 @@ public class OutCostCenterController extends BaseController {
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters);
submitSap(order, ticket, records, outCostcenterItemService.getList(order.getId()),qrCodeMasters);
submitSap(order, ticket, records, outCostcenterItemService.getList(order.getId()), qrCodeMasters);
} else {
List<OutCostcenterInfoItemVO> items = outCostcenterTicketItemService.getList(qo.getId());
items.forEach(it -> {

View File

@ -373,6 +373,7 @@ public class OutProduceController extends BaseController {
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(order.getDwerk())
.setWarehouseNo(ticket.getLgort())
.setUnit(item.getMeins())
@ -389,7 +390,8 @@ public class OutProduceController extends BaseController {
});
VUtil.trueThrowBusinessError(item.getNum().compareTo(item.getSqsl()) > 0)
.throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制");
} else {
}
if (qitem.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
.throwMessage("需要提供扫码信息");
qitem.getQrCodes().forEach(qrCode -> {
@ -415,26 +417,29 @@ public class OutProduceController extends BaseController {
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new OutMaterialScanRecord()
.setSource(1)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setUnit(item.getMeins())
.setRspos(item.getRspos())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
if (!qitem.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(1)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setQiTao(false)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setUnit(item.getMeins())
.setRspos(item.getRspos())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
});
}
});
@ -463,7 +468,7 @@ public class OutProduceController extends BaseController {
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters);
submitSap(order, ticket, records, datas,qrCodeMasters);
submitSap(order, ticket, records, datas, qrCodeMasters);
} else {
inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream()
@ -481,7 +486,7 @@ public class OutProduceController extends BaseController {
}
private void submitSap(WmsOutProduce order, WmsOutProduceTicket ticket, List<OutMaterialScanRecord> records
, List<WmsOutProduceItem> datas,List<WmsQrCodeMaster> qrCodeMasters) {
, List<WmsOutProduceItem> datas, List<WmsQrCodeMaster> qrCodeMasters) {
inventoryService.out(records.stream()
.collect(Collectors.groupingBy(OutMaterialScanRecord::getKey))
.values()
@ -492,11 +497,11 @@ public class OutProduceController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -606,7 +611,7 @@ public class OutProduceController extends BaseController {
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters);
submitSap(order, ticket, records, outProduceItemService.getList(order.getId()),qrCodeMasters);
submitSap(order, ticket, records, outProduceItemService.getList(order.getId()), qrCodeMasters);
} else {
List<OutProduceInfoItemVO> items = outProduceTicketItemService.getList(qo.getId());
items.forEach(it -> {

View File

@ -283,8 +283,8 @@ public class OutPurchaseController extends BaseController {
.setBinLocation(qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()

View File

@ -2,12 +2,17 @@ package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.QRCodeUtil;
import com.nflg.wms.admin.util.ThymeleafUtil;
import com.nflg.wms.common.constant.BarCodeProcessStage;
import com.nflg.wms.common.constant.UserType;
import com.nflg.wms.common.pojo.ApiResult;
@ -22,20 +27,16 @@ import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
import com.nflg.wms.starter.annotation.ApiMark;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
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 org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -66,6 +67,9 @@ public class PurchaseReturnController extends BaseController {
@Resource
private IUserService userService;
@Resource
private IUserSupplierService userSupplierService;
/**
* 获取送货单的入库信息
@ -452,4 +456,28 @@ public class PurchaseReturnController extends BaseController {
return ApiResult.success(qrCodeVO);
}
/**
* 导出采购退货申请单
*/
@GetMapping("exportTicket")
public void exportTicket(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
WmsReturnRequest order = returnRequestService.getById(id);
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("申请单不存在");
VUtil.trueThrowBusinessError(order.getApprovalStatus()!=1).throwMessage("申请单未审核通过");
UserSupplier supplier=userSupplierService.getByCode(order.getSupplierCode());
List<WmsReturnRequestItem> list = returnRequestItemService.lambdaQuery()
.eq(WmsReturnRequestItem::getApplicationId, id)
.list();
Map<String, String> base = new HashMap<>();
base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd"));
base.put("qrcode", QRCodeUtil.generateQRCodeBase64(order.getApplicationNo(), 100, 100));
base.put("supplier", supplier.getSupplierName());
Map<String, Object> variables = new HashMap<>();
variables.put("info", order);
variables.put("base", base);
variables.put("pages", PdfPageDTO.create(list, 11, new WmsReturnRequestItem()));
String html = ThymeleafUtil.generator("/template/", "采购退货申请单", ".html", variables);
PdfGeneratorUtil.generatePdf("采购入(退)库单" + order.getApplicationNo(), html, response);
}
}

View File

@ -292,7 +292,9 @@ public class TransferCompanyController extends BaseController {
.setContent("")
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setBinNo(it.getBinNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(order.getReswk())
.setWarehouseNo(request.getLgort())
.setNum(it.getNum())
@ -307,7 +309,8 @@ public class TransferCompanyController extends BaseController {
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + item.getMatnr() + "的领取数量超出申请限制");
});
} else {
}
if (qitem.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
.throwMessage("需要提供扫码信息");
qitem.getQrCodes().forEach(qrCode -> {
@ -329,28 +332,31 @@ public class TransferCompanyController extends BaseController {
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new OutMaterialScanRecord()
.setSource(5)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setUnit(item.getMeins())
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setEbelp(item.getEbelp())
.setEbeln(order.getEbeln())
.setExt(item.getEbelp())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
if (!qitem.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(5)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setUnit(item.getMeins())
.setQiTao(false)
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setEbelp(item.getEbelp())
.setEbeln(order.getEbeln())
.setExt(item.getEbelp())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
});
}
});
@ -384,7 +390,7 @@ public class TransferCompanyController extends BaseController {
}
});
qrCodeMasterService.updateBarCode(qrCodeMasters);
submitSap(order, ticket, records, datas, ticketItems,qrCodeMasters);
submitSap(order, ticket, records, datas, ticketItems, qrCodeMasters);
} else {
inventoryForOutRepository.saveAll(request.getRecommendBatch()
.stream()
@ -402,7 +408,7 @@ public class TransferCompanyController extends BaseController {
}
private void submitSap(WmsTransferCompany order, WmsTransferCompanyTicket ticket, List<OutMaterialScanRecord> records
, List<WmsTransferCompanyItem> datas, List<WmsTransferCompanyTicketItem> ticketItems,List<WmsQrCodeMaster> qrCodeMasters) {
, List<WmsTransferCompanyItem> datas, List<WmsTransferCompanyTicketItem> ticketItems, List<WmsQrCodeMaster> qrCodeMasters) {
inventoryService.out(records.stream()
.collect(Collectors.groupingBy(OutMaterialScanRecord::getKey))
.values()
@ -413,11 +419,11 @@ public class TransferCompanyController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -484,14 +490,14 @@ public class TransferCompanyController extends BaseController {
) {
if (qo.isPass()) {
WmsTransferCompany order = transferCompanyService.getById(ticket.getOrderId());
List<OutMaterialScanRecord> records =outMaterialScanRecordRespository.findByTicketId(ticket.getId());
List<OutMaterialScanRecord> records = outMaterialScanRecordRespository.findByTicketId(ticket.getId());
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, records.stream().map(OutMaterialScanRecord::getUniqNo).toList())
.list();
qrCodeMasters.stream()
.forEach(p -> {
OutMaterialScanRecord record=records.stream()
OutMaterialScanRecord record = records.stream()
.filter(r -> r.getUniqNo().equals(p.getBarcodeCode()))
.findFirst()
.get();
@ -502,7 +508,7 @@ public class TransferCompanyController extends BaseController {
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
if (p.getPackagingType() == 1){
if (p.getPackagingType() == 1) {
List<WmsQrCodeMaster> children = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getParentBarcodeId, p.getId())
.list();
@ -525,7 +531,7 @@ public class TransferCompanyController extends BaseController {
, records
, transferCompanyItemService.getList(order.getId())
, transferCompanyTicketItemService.lambdaQuery().eq(WmsTransferCompanyTicketItem::getTicketId, ticket.getId()).list()
,qrCodeMasters
, qrCodeMasters
);
} else {
List<TransferCompanyItemVO> items = transferCompanyTicketItemService.getList(qo.getId());

View File

@ -275,7 +275,6 @@ public class TransferFactoryController extends BaseController {
.list();
qrCodeMasters.addAll(tempList);
}
request.getItems().forEach(qitem -> {
WmsTransferFactoryItem item = datas.stream().filter(d -> Objects.equals(d.getId(), qitem.getItemId())).findFirst().orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("物料" + qitem.getMaterialNo() + "不需要出库");
@ -310,6 +309,7 @@ public class TransferFactoryController extends BaseController {
.setBatchNo(it.getBatchNo())
.setSerialNo(it.getSerialNo())
.setUniqNo("")
.setQiTao(true)
.setFactoryNo(order.getWerks())
.setWarehouseNo(request.getLgort())
.setNum(it.getNum())
@ -321,7 +321,8 @@ public class TransferFactoryController extends BaseController {
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的领取数量超出申请限制");
});
} else {
}
if (qitem.isUseChildren()) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qitem.getQrCodes()))
.throwMessage("需要提供扫码信息");
qitem.getQrCodes().forEach(qrCode -> {
@ -342,26 +343,29 @@ public class TransferFactoryController extends BaseController {
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
records.add(new OutMaterialScanRecord()
.setSource(4)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setUnit(item.getMeins())
.setRspos(item.getRspos())
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
if (!qitem.isQiTao()) {
records.add(new OutMaterialScanRecord()
.setSource(4)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setUnit(item.getMeins())
.setQiTao(false)
.setRspos(item.getRspos())
.setContent(qrCodeMaster.getBarcodeCode())
.setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(qrCodeMaster.getSerialNo())
.setUniqNo(qrCodeMaster.getBarcodeCode())
.setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBinNo(qrCodeMaster.getBinLocation())
.setNum(qrCodeMaster.getQuantity())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
});
}
});
@ -405,11 +409,11 @@ public class TransferFactoryController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()
@ -457,7 +461,7 @@ public class TransferFactoryController extends BaseController {
.list();
qrCodeMasters.stream()
.forEach(p -> {
OutMaterialScanRecord record=records.stream()
OutMaterialScanRecord record = records.stream()
.filter(r -> r.getUniqNo().equals(p.getBarcodeCode()))
.findFirst()
.get();
@ -468,7 +472,7 @@ public class TransferFactoryController extends BaseController {
p.setLastScanBy(UserUtil.getUserId());
p.setLastScanByname(UserUtil.getUserName());
p.setLastScanTime(LocalDateTime.now());
if (p.getPackagingType() == 1){
if (p.getPackagingType() == 1) {
List<WmsQrCodeMaster> children = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getParentBarcodeId, p.getId())
.list();
@ -497,11 +501,11 @@ public class TransferFactoryController extends BaseController {
.setSerialNo(list.get(0).getSerialNo())
.setFactoryNo(list.get(0).getFactoryNo())
.setWarehouseNo(list.get(0).getWarehouseNo())
.setBinLocation(qrCodeMasters.stream()
.setBinLocation(list.get(0).isQiTao() ? list.get(0).getBinNo() : qrCodeMasters.stream()
.filter(qr -> StrUtil.equals(qr.getBarcodeCode(), list.get(0).getUniqNo()))
.findFirst()
.get()
.getBinLocation()
.map(WmsQrCodeMaster::getBinLocation)
.orElse("")
)
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
).toList()

View File

@ -107,7 +107,7 @@
}
.package-logo {
width: 150px;
width: 250px;
margin: 0 auto;
margin-bottom: 20px;
}

View File

@ -0,0 +1,202 @@
<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>采购退货申请单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */
margin: 10mm; /* 页边距 */
}
body {
font-family: SimSun, serif;
font-size: 12px;
margin: 10px;
}
.container {
max-width: 100%;
margin: 0 auto;
background-color: white;
padding: 10px;
border: 1px solid #ccc;
page-break-after: always;
}
.container:last-child {
page-break-after: auto;
}
.company-name {
text-align: center;
font-size: 18px;
margin: 10px 0;
}
.title {
text-align: center;
font-size: 25px;
font-weight: bold;
margin: 20px 0;
}
.info-item label {
display: inline-block;
width: 80px;
font-weight: bold;
}
.table-data {
clear: both;
margin: 5px 0;
}
.table-data table {
width: 100%;
border-collapse: collapse;
border: 1px solid #000;
}
.table-desc table {
width: 100%;
border: 0;
}
.table-desc td {
text-align: left;
border: 0;
}
th, td {
border: 1px solid #000;
padding: 5px;
text-align: center;
font-size: 12px;
}
th {
background-color: #f0f0f0;
font-weight: bold;
height: 20px;
}
td {
height: 15px;
}
.footer {
margin-top: 10px;
overflow: hidden;
}
.footer-item {
float: left;
width: 33%;
font-size: 12px;
text-align: center;
}
.footer-item label {
margin-right: 10px;
}
.filled-row {
background-color: #fff;
}
.package-logo {
width: 250px;
margin: 0 auto;
margin-bottom: 20px;
}
.package-logo img {
width: 100%;
}
.qrcode {
width: 100px;
position: absolute;
right: 0;
top: 0;
}
.qrcode img {
width: 100%;
}
.col-left {
text-align: left;
}
</style>
</head>
<body>
<div class="container" th:each="page,pageStat : ${pages}">
<div style="position:relative;">
<div class="package-logo" style="margin: 5px;position:absolute;"><img src="../img/logo1.png"/></div>
<div class="qrcode"><img th:src="${base.qrcode}" src="../img/qrcode.png"/></div>
<div>
<div class="company-name">福建南方路面机械股份有限公司</div>
<div class="title">采购入(退)库单</div>
</div>
</div>
<div class="table-desc">
<table>
<tr>
<td style="width: 30%;">采购订单号:<span th:text="${info.poNum}"></span></td>
<td style="text-align: center">过账日期:<span th:text="${base.date}"></span></td>
<td style="width: 25%;">页码:<span th:text="${pageStat.count}">1</span>/<span
th:text="${pageStat.size}">1</span></td>
</tr>
<tr>
<td colspan="2">&nbsp;&nbsp;商:<span th:text="${base.supplier}"></span></td>
<td>物料凭证号:<span></span></td>
</tr>
</table>
</div>
<div style="clear: both;"></div>
<div class="table-data">
<table>
<tr>
<td style="width: 30px">订单<br/>项次</td>
<td style="width: 70px">移动<br/>类型</td>
<td style="width: 70px">物料号</td>
<td>物料描述</td>
<td style="width: 30px">单位</td>
<td style="width: 50px">数量</td>
<td style="width: 60px">工厂</td>
<td style="width: 60px">仓库</td>
<td style="width: 50px">仓位</td>
</tr>
<tr class="filled-row" th:each="item,iterStat : ${page.datas}">
<td th:text="${iterStat.count}">1</td>
<td></td>
<td th:text="${item.materialCode}">物料号</td>
<td th:text="${item.materialDescription}" class="col-left">非金属联件和紧固件等 M6 DIN 982 不锈钢304</td>
<td th:text="${item.unit}">PC</td>
<td th:text="${item.requestQuantity}">10.00</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
<div class="footer">
<div class="footer-item">
<label>品质检验:</label>
</div>
<div class="footer-item">
<label>收料部门主管:</label>
</div>
<div class="footer-item">
<label>收料经办人:</label>
</div>
</div>
</div>
</body>
</html>

View File

@ -123,6 +123,11 @@ public class OutMaterialScanRecord {
*/
private String ext;
/**
* 是否是齐套物料
*/
private boolean isQiTao = false;
/**
* 创建人
*/

View File

@ -35,6 +35,11 @@ public class ComponentOutboundItemInputQO {
@JsonProperty("isQiTao")
private boolean isQiTao;
/**
* 是否扫码子项
*/
private boolean useChildren = true;
/**
* 批次列表
*/

View File

@ -3,6 +3,8 @@ package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.util.Objects;
@Data
public class InventoryInItemQRCodeQO {
@ -16,4 +18,8 @@ public class InventoryInItemQRCodeQO {
* 储位编号
*/
private String binNo;
public String getBinNo() {
return Objects.isNull(binNo) ? "" : binNo;
}
}

View File

@ -30,6 +30,11 @@ public class OutProduceSubmitItemQO {
@JsonProperty("isQiTao")
private boolean isQiTao;
/**
* 是否扫码子项
*/
private boolean useChildren;
/**
* 批次列表
*/