Merge branch 'refs/heads/develop' into dev_zhangke

This commit is contained in:
zhangke 2026-03-03 22:48:15 +08:00
commit beb4011729
27 changed files with 365 additions and 220 deletions

View File

@ -13,6 +13,7 @@ import com.nflg.wms.admin.util.NoUtil;
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.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
@ -24,10 +25,7 @@ import com.nflg.wms.common.pojo.qo.*;
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.WmsInCostcenterBack;
import com.nflg.wms.repository.entity.WmsInCostcenterBackItem;
import com.nflg.wms.repository.entity.WmsInCostcenterBackTicket;
import com.nflg.wms.repository.entity.WmsInCostcenterBackTicketItem;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
@ -80,6 +78,12 @@ public class InCostCenterBackController extends BaseController {
@Resource
private BasdeSerialNumberControllerService serialNumberControllerService;
@Resource
private IWmsWarehouseService warehouseService;
@Resource
private IWmsQrCodeMasterService qrCodeMasterService;
/**
* 查询SAP领料订单数据
*/
@ -181,9 +185,8 @@ public class InCostCenterBackController extends BaseController {
if (StrUtil.isBlank(vo.getLgort2())) {
vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0));
}
if (StrUtil.isNotBlank(vo.getLgort2()) && StrUtil.isBlank(vo.getLgpbe())) {
vo.setLgpbe(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), vo.getLgort2())));
}
vo.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getWerks(), vo.getLgort2()));
vo.setIsDisableLocation(warehouseService.isEnableLocation(order.getWerks(), vo.getLgort2()));
return vo;
}).toList()
)
@ -208,8 +211,17 @@ public class InCostCenterBackController extends BaseController {
.setCreateTime(LocalDateTime.now());
List<WmsInCostcenterBackItem> datas = inCostcenterBackItemService.getList(order.getId());
List<InMaterialScanRecord> records = new ArrayList<>();
// List<MaterialQRCodeContentDTO> dtos = new ArrayList<>();
List<WmsInCostcenterBackTicketItem> ticketItems = new ArrayList<>();
Set<String> allQrCodes = new HashSet<>();
request.getItems().forEach(it -> {
it.getItems().forEach(item -> {
allQrCodes.addAll(item.getQrCodes());
});
});
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery()
.lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
.list();
request.getItems().forEach(it -> {
WmsInCostcenterBackItem item = datas.stream().filter(d -> Objects.equals(it.getOrderItemId(), d.getId())).findFirst().orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效");
@ -217,40 +229,52 @@ public class InCostCenterBackController extends BaseController {
.setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId())
.setOrderItemId(item.getId())
.setLgpbe(StrUtil.join(",", it.getBinNos()))
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList()))
.setNum(BigDecimal.ZERO);
ticketItems.add(ti);
it.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
// dtos.add(qrCodeContent);
String materialNo = qrCodeContent.getMaterialNo();
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
.throwMessage("订单项与物料不符");
item.setLeft(item.getLeft().subtract(qrCodeContent.getNum()));
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
ti.setNum(ti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(2)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketItemId(ti.getId())
.setMaterialNo(materialNo)
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setFactoryNo(order.getWerks())
.setWarehouseNo(request.getLgort())
.setBinNos(StrUtil.split(it.getBinNos(), "/"))
.setUniqNo(qrCodeContent.getUniqNo())
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
it.getItems().forEach(iit -> {
iit.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
String materialNo = qrCodeContent.getMaterialNo();
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
.throwMessage("订单项与物料不符");
item.setLeft(item.getLeft().subtract(qrCodeContent.getNum()));
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
ti.setNum(ti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(2)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketItemId(ti.getId())
.setMaterialNo(materialNo)
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setFactoryNo(order.getWerks())
.setWarehouseNo(request.getLgort())
.setBinNo(iit.getBinNo())
.setUniqNo(qrCodeContent.getUniqNo())
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
.filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode))
.findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效");
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setFactoryCode(order.getWerks());
qrCodeMaster.setStorageLocation(request.getLgort());
qrCodeMaster.setBinLocation(iit.getBinNo());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
});
});
});
inCostcenterBackItemService.updateBatchById(datas);
inMaterialScanRecordRespository.saveAll(records);
inCostcenterBackTicketItemService.saveBatch(ticketItems);
inCostcenterBackService.lambdaUpdate()
.set(WmsInCostcenterBack::getSapStatus, true)
@ -260,6 +284,7 @@ public class InCostCenterBackController extends BaseController {
.set(WmsInCostcenterBack::getState, datas.stream().map(WmsInCostcenterBackItem::getLeft).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(BigDecimal.ZERO) > 0 ? 1 : 2)
.eq(WmsInCostcenterBack::getId, order.getId())
.update();
qrCodeMasterService.updateBatchById(qrCodeMasters);
inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
.values()
@ -299,6 +324,7 @@ public class InCostCenterBackController extends BaseController {
ticket.setDocYear(vo.getEMJahr());
ticket.setMatDoc(vo.getEMblnr());
inCostcenterBackTicketService.save(ticket);
inMaterialScanRecordRespository.saveAll(records);
return ApiResult.success();
}

View File

@ -15,6 +15,7 @@ import com.nflg.wms.admin.util.NoUtil;
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.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
@ -23,10 +24,7 @@ import com.nflg.wms.common.pojo.qo.*;
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.WmsInProduceBack;
import com.nflg.wms.repository.entity.WmsInProduceBackItem;
import com.nflg.wms.repository.entity.WmsInProduceBackTicket;
import com.nflg.wms.repository.entity.WmsInProduceBackTicketItem;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
@ -76,6 +74,15 @@ public class InProduceBackController extends BaseController {
@Resource
private BasdeSerialNumberControllerService serialNumberControllerService;
@Resource
private IWmsQrCodeMasterService qrCodeMasterService;
@Resource
private IWmsStorageService storageService;
@Resource
private IWmsWarehouseService warehouseService;
/**
* 查询SAP领料订单数据
*/
@ -185,10 +192,11 @@ public class InProduceBackController extends BaseController {
.map(item -> new OutProduceItemVO()
.setId(item.getId())
.setLgort2(order.getLgort2())
.setLgpbe(item.getLgpbe())
.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getDwerk(), order.getLgort2()))
.setMaktx2(item.getMaktx2())
.setMatnr(item.getMatnr())
.setNum(item.getSqsl().subtract(item.getNum()))
.setIsDisableLocation(warehouseService.isEnableLocation(order.getDwerk(), order.getLgort2()))
).toList()
)
);
@ -213,55 +221,77 @@ public class InProduceBackController extends BaseController {
// List<MaterialQRCodeContentDTO> dtos = new ArrayList<>();
List<WmsInProduceBackTicketItem> ticketItems = new ArrayList<>();
Multimap<String, String> input2 = ArrayListMultimap.create();
request.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
Set<String> allQrCodes = new HashSet<>();
request.getItems().forEach(it -> {
allQrCodes.addAll(it.getQrCodes());
});
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery()
.lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
.list();
request.getItems().forEach(iit -> {
iit.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
// dtos.add(qrCodeContent);
String materialNo = qrCodeContent.getMaterialNo();
WmsInProduceBackItem item = datas.stream().filter(d -> StrUtil.equals(d.getMatnr(), materialNo)).findFirst().orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("物料" + materialNo + "不需要退料");
String materialNo = qrCodeContent.getMaterialNo();
WmsInProduceBackItem item = datas.stream().filter(d -> StrUtil.equals(d.getMatnr(), materialNo)).findFirst().orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("物料" + materialNo + "不需要退料");
// VUtil.trueThrowBusinessError(List.of("3","4").contains(item.getLbprt()) && StrUtil.isBlank(qrCodeContent.getSerialNo()))
// .throwMessage("物料" + materialNo + "必须有序列号");
// if (List.of("3","4").contains(item.getLbprt())){
// input2.put(item.getRspos(),qrCodeContent.getSerialNo());
// }
input2.put(item.getRspos(), qrCodeContent.getSerialNo());
WmsInProduceBackTicketItem pti = ticketItems.stream()
.filter(ti -> Objects.equals(ti.getProduceBackItemId(), item.getId()))
.findFirst()
.orElseGet(() -> {
WmsInProduceBackTicketItem ti = new WmsInProduceBackTicketItem()
.setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId())
.setProduceBackItemId(item.getId())
.setNum(BigDecimal.ZERO);
ticketItems.add(ti);
return ti;
});
BigDecimal num = item.getSqsl().subtract(item.getNum());
VUtil.trueThrowBusinessError(num.compareTo(qrCodeContent.getNum()) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
item.setNum(item.getNum().add(qrCodeContent.getNum()));
pti.setNum(pti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(1)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setUniqNo(qrCodeContent.getUniqNo())
.setFactoryNo(order.getDwerk())
.setWarehouseNo(request.getLgort())
input2.put(item.getRspos(), qrCodeContent.getSerialNo());
WmsInProduceBackTicketItem pti = ticketItems.stream()
.filter(ti -> Objects.equals(ti.getProduceBackItemId(), item.getId()))
.findFirst()
.orElseGet(() -> {
WmsInProduceBackTicketItem ti = new WmsInProduceBackTicketItem()
.setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId())
.setProduceBackItemId(item.getId())
.setNum(BigDecimal.ZERO);
ticketItems.add(ti);
return ti;
});
BigDecimal num = item.getSqsl().subtract(item.getNum());
VUtil.trueThrowBusinessError(num.compareTo(qrCodeContent.getNum()) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
item.setNum(item.getNum().add(qrCodeContent.getNum()));
pti.setNum(pti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(1)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketItemId(pti.getId())
.setMaterialNo(materialNo)
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setUniqNo(qrCodeContent.getUniqNo())
.setFactoryNo(order.getDwerk())
.setWarehouseNo(request.getLgort())
// .setBinNos(StrUtil.split(it.getBinNos(), "/"))
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
.filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode))
.findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效");
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setFactoryCode(order.getDwerk());
qrCodeMaster.setStorageLocation(request.getLgort());
qrCodeMaster.setBinLocation(iit.getBinNo());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
});
});
inProduceBackItemService.updateBatchById(datas);
inMaterialScanRecordRespository.saveAll(records);
qrCodeMasterService.updateBatchById(qrCodeMasters);
inProduceBackTicketItemService.saveBatch(ticketItems);
inventoryService.in(records.stream()
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
@ -310,6 +340,7 @@ public class InProduceBackController extends BaseController {
.set(WmsInProduceBack::getState, inNum.compareTo(totalNum) >= 0 ? 2 : 1)
.eq(WmsInProduceBack::getId, order.getId())
.update();
inMaterialScanRecordRespository.saveAll(records);
return ApiResult.success();
}

View File

@ -108,6 +108,12 @@ public class InProduceOrderController extends BaseController {
@Resource
private IWmsQrCodeMasterService qrCodeMasterService;
@Resource
private IWmsStorageService storageService;
@Resource
private IWmsWarehouseService warehouseService;
/**
* 从SAP查询生产订单信息
* @param no 生产订单号
@ -367,21 +373,21 @@ public class InProduceOrderController extends BaseController {
if (Objects.equals(type, 0)) {
child.setMustScan(false);
}
child.setBinNos(binService.getBinNos(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo()));
child.setBinNo(binService.getBinNo(child.getMaterialNo(), child.getFactoryNo(), child.getWarehouseNo()));
});
datas.addAll(children);
});
return ApiResult.success(datas);
} else {
list.forEach(it -> {
it.setBinNos(binService.getBinNos(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo()));
it.setBinNo(binService.getBinNo(it.getMaterialNo(), it.getFactoryNo(), it.getWarehouseNo()));
});
return ApiResult.success(list);
}
}
/**
* 收货PDA使用
* 入库PDA使用
* @param request 请求参数
*/
@Transactional
@ -413,8 +419,18 @@ public class InProduceOrderController extends BaseController {
List<String> materialNos = new ArrayList<>();
List<InMaterialScanRecord> records = new ArrayList<>();
Map<Long, String> warehouseNoChange = new HashMap<>();
Set<String> allQrCodes = new HashSet<>();
request.getMaterials().forEach(it -> {
it.getItems().forEach(item -> {
allQrCodes.addAll(item.getQrCodes());
});
});
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
.lt(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
.list();
datas.forEach(it -> {
InProduceOrderReceiveMaterialQO materialQO = request.getItems()
InProduceOrderReceiveMaterialQO materialQO = request.getMaterials()
.stream()
.filter(q -> StrUtil.equals(q.getMaterialNo(), it.getMaterialNo()))
.findFirst()
@ -422,7 +438,7 @@ public class InProduceOrderController extends BaseController {
if (Objects.isNull(materialQO)) {
materialNos.add(it.getMaterialNo());
} else {
VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getQrCodes()))
VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getItems()))
.throwMessage(materialQO.getMaterialNo() + "需要提供扫码信息");
if (!StrUtil.equals(it.getWarehouseNo(), materialQO.getWarehouseNo())) {
warehouseNoChange.put(it.getId(), materialQO.getWarehouseNo());
@ -437,34 +453,48 @@ public class InProduceOrderController extends BaseController {
}
}
if (it.isMustScan()) {
BigDecimal num = BigDecimal.ZERO;
for (String qrCode : materialQO.getQrCodes()) {
MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode);
if (Objects.nonNull(content.getNum())) {
num = num.add(content.getNum());
materialQO.getItems().forEach(item -> {
BigDecimal num = BigDecimal.ZERO;
for (String qrCode : item.getQrCodes()) {
MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode);
if (Objects.nonNull(content.getNum())) {
num = num.add(content.getNum());
}
records.add(new InMaterialScanRecord()
.setSource(4)
.setSourceId(order.getId())
.setSourceItemId(it.getId())
.setTicketItemId(it.getId())
.setMaterialNo(it.getMaterialNo())
.setContent(qrCode)
.setBatchNo(content.getBatchNo())
.setSerialNo(content.getSerialNo())
.setUniqNo(content.getUniqNo())
.setFactoryNo(it.getFactoryNo())
.setWarehouseNo(it.getWarehouseNo())
.setBinNo(item.getBinNo())
.setNum(content.getNum())
.setUnit(it.getUnit())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
WmsQrCodeMaster qrCodeMaster = qrCodeMasters.stream()
.filter(q -> StrUtil.equals(q.getBarcodeCode(), qrCode))
.findFirst()
.orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("二维码" + qrCode + "无效");
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setFactoryCode(it.getFactoryNo());
qrCodeMaster.setStorageLocation(it.getWarehouseNo());
qrCodeMaster.setBinLocation(item.getBinNo());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setLastScanTime(LocalDateTime.now());
}
records.add(new InMaterialScanRecord()
.setSource(4)
.setSourceId(order.getId())
.setSourceItemId(it.getId())
.setTicketItemId(it.getId())
.setMaterialNo(it.getMaterialNo())
.setContent(qrCode)
.setBatchNo(content.getBatchNo())
.setSerialNo(content.getSerialNo())
.setUniqNo(content.getUniqNo())
.setFactoryNo(it.getFactoryNo())
.setWarehouseNo(it.getWarehouseNo())
.setBinNos(StrUtil.split(materialQO.getBinNos(), "/"))
.setNum(content.getNum())
.setUnit(it.getUnit())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
}
if (num.compareTo(it.getNum()) != 0) {
materialNos.add(it.getMaterialNo());
}
if (num.compareTo(it.getNum()) != 0) {
materialNos.add(it.getMaterialNo());
}
});
}
// if (!order.getList()) {
// //是否更改了储位
@ -511,6 +541,9 @@ public class InProduceOrderController extends BaseController {
.map(InMaterialScanRecord::getSerialNo)
.toList();
}
if (CollectionUtil.isNotEmpty(qrCodeMasters)) {
qrCodeMasterService.updateBatchById(qrCodeMasters);
}
inventoryService.in(list.stream()
.filter(it -> Objects.equals(it.getParentId(), 0L))
.map(it -> new InventoryDTO()
@ -522,7 +555,6 @@ public class InProduceOrderController extends BaseController {
.setSerialNo(it.getSernr())
).toList()
);
inMaterialScanRecordRespository.saveAll(records);
if (CollectionUtil.isNotEmpty(warehouseNoChange)) {
produceOrderItemService.updateBatchById(
warehouseNoChange.entrySet()
@ -541,6 +573,7 @@ public class InProduceOrderController extends BaseController {
order.setUpdateBy(UserUtil.getUserName());
order.setUpdateTime(LocalDateTime.now());
produceOrderService.updateById(order);
inMaterialScanRecordRespository.saveAll(records);
return ApiResult.success();
}

View File

@ -21,7 +21,6 @@ import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.dto.QrCodeMasterPrintDTO;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.NumberUtil;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*;
@ -47,7 +46,6 @@ import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@ -243,39 +241,41 @@ public class InProduceOrderSurplusController extends BaseController {
.setId(IdUtil.getSnowflakeNextId())
.setTicketId(ticket.getId())
.setOrderItemId(item.getId())
.setLgpbe(StrUtil.join(",", it.getBinNos()))
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList()))
.setNum(BigDecimal.ZERO);
ticketItems.add(ti);
it.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
String materialNo = qrCodeContent.getMaterialNo();
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
.throwMessage("订单项与物料不符");
item.setLeftNum(item.getLeftNum().subtract(qrCodeContent.getNum()));
VUtil.trueThrowBusinessError(item.getLeftNum().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
ti.setNum(ti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(7)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(ti.getId())
.setMaterialNo(materialNo)
.setMaterialDesc(qrCodeContent.getMaterialDesc())
.setUnit(item.getMeins())
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setFactoryNo(order.getDwerk())
.setWarehouseNo(ticket.getLgort())
.setBinNos(StrUtil.split(it.getBinNos(), "/"))
.setUniqNo(qrCodeContent.getUniqNo())
.setRspos(item.getRspos())
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
it.getItems().forEach(iit -> {
iit.getQrCodes().forEach(qrCode -> {
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
String materialNo = qrCodeContent.getMaterialNo();
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
.throwMessage("订单项与物料不符");
item.setLeftNum(item.getLeftNum().subtract(qrCodeContent.getNum()));
VUtil.trueThrowBusinessError(item.getLeftNum().compareTo(BigDecimal.ZERO) < 0)
.throwMessage("物料" + materialNo + "的入库数量超出申请数量");
ti.setNum(ti.getNum().add(qrCodeContent.getNum()));
records.add(new InMaterialScanRecord()
.setSource(7)
.setSourceId(order.getId())
.setSourceItemId(item.getId())
.setTicketId(ticket.getId())
.setTicketItemId(ti.getId())
.setMaterialNo(materialNo)
.setMaterialDesc(qrCodeContent.getMaterialDesc())
.setUnit(item.getMeins())
.setContent(qrCode)
.setBatchNo(qrCodeContent.getBatchNo())
.setSerialNo(qrCodeContent.getSerialNo())
.setFactoryNo(order.getDwerk())
.setWarehouseNo(ticket.getLgort())
.setBinNo(iit.getBinNo())
.setUniqNo(qrCodeContent.getUniqNo())
.setRspos(item.getRspos())
.setNum(qrCodeContent.getNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())
);
});
});
});
inProduceOrderSurplusItemService.updateBatchById(datas);

View File

@ -78,7 +78,7 @@ public class OutPurchaseController extends BaseController {
public ApiResult<ZWM3A05VO> searchSAP(@Valid @RequestBody @NotNull zwm3A05QO request) {
ZWM3A05VO result = sapService.zwm3A05(request);
result.getItems().parallelStream().forEach(it -> {
it.setBinNos(binService.getBinNos(it.getMatnr(), result.getWerks(), it.getLgort()));
it.setBinNos(binService.getBinNo(it.getMatnr(), result.getWerks(), it.getLgort()));
});
return ApiResult.success(result);
}

View File

@ -881,7 +881,7 @@ public class StructuralPackageOrderController extends BaseController {
log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
} else {
it.setWarehouseNo(dto.getWarehouseNo());
it.setBinNos(binService.getBinNos(it.getPackageNo(), dto.getWerks(), dto.getWarehouseNo()));
it.setBinNos(binService.getBinNo(it.getPackageNo(), dto.getWerks(), dto.getWarehouseNo()));
// if (dto.getTransportNum().compareTo(new BigDecimal(it.getNum()))<0){
// it.setNum(dto.getTransportNum().intValue());
// }

View File

@ -484,7 +484,7 @@ public class TransferCompanyController extends BaseController {
.setMatnr(item.getMatnr())
.setMaktx(item.getMaktx())
.setNum(item.getNum())
.setBinIn(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), ticket.getWerks(), ticket.getLgort())))
.setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), ticket.getWerks(), ticket.getLgort())))
).toList()
)
);
@ -515,7 +515,7 @@ public class TransferCompanyController extends BaseController {
.setSerialNo(record.getSerialNo())
.setFactoryNo(ticket.getWerks())
.setWarehouseNo(qo.getLgort1())
.setBinNos(Objects.isNull(itemQo) ? Collections.emptyList() : StrUtil.split(itemQo.getBinNos(), "/"))
.setBinNo(Objects.isNull(itemQo) ? "" : itemQo.getBinNos())
.setUniqNo(record.getUniqNo())
.setRspos(record.getRspos())
.setNum(record.getNum())

View File

@ -212,8 +212,8 @@ public class TransferFactoryController extends BaseController {
.setLgort(order.getLgort())
.setNum(item.getLeft())
.setMeins(item.getMeins())
.setBinIn(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getUmlgo())))
.setBinOut(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getLgort())));
.setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getUmlgo())))
.setBinOut(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getLgort())));
vo.setQiTao(type > 0);
if (Objects.equals(type, 1)) {
vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
@ -446,8 +446,8 @@ public class TransferFactoryController extends BaseController {
.setLgort(ticket.getLgort())
.setLgort1(ticket.getUmlgo())
.setNum(it.getNum())
.setBinIn(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo())))
.setBinOut(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getLgort())))
.setBinIn(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo())))
.setBinOut(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getLgort())))
).toList())
);
}
@ -479,12 +479,13 @@ public class TransferFactoryController extends BaseController {
.setSerialNo(record.getSerialNo())
.setFactoryNo(ticket.getWerks())
.setWarehouseNo(qo.getLgort1())
.setBinNos(StrUtil.split(qo.getItems()
.setBinNo(qo.getItems()
.stream()
.filter(it -> Objects.equals(it.getId(), record.getTicketItemId()))
.findFirst()
.orElse(new InSubmitItemQO())
.getBinNos(), "/"))
.getBinNos()
)
.setUniqNo(record.getUniqNo())
.setRspos(record.getRspos())
.setNum(record.getNum())

View File

@ -17,22 +17,7 @@ public class BinService {
@Resource
private IWmsStorageService storageService;
@Resource
private SapService sapService;
public String getBinNos(String materialNo, String factory, String warehouseNo) {
Set<String> bins = storageService.getBinNos(materialNo, factory, warehouseNo);
// if (CollectionUtil.isNotEmpty(bins)){
// return String.join("/",bins);
// }else {
// List<SAPSyncFromDTO> dtos = sapService.zwm3A01(factory, List.of(warehouseNo), List.of(materialNo), null, null);
// if (CollectionUtil.isEmpty(dtos)){
// log.error("{},{},{}未从SAP的ZWM3A01接口查询到数据", factory, warehouseNo, materialNo);
// return null;
// }else {
// return dtos.get(0).getBinNos();
// }
// }
return String.join("/",bins);
public String getBinNo(String materialNo, String factory, String warehouseNo) {
return storageService.getBinNo(materialNo, factory, warehouseNo);
}
}

View File

@ -45,9 +45,9 @@ public class InMaterialScanRecord {
private String warehouseNo;
/**
* 储位列表
* 储位
*/
private List<String> binNos;
private String binNo;
/**
* 二维码内容

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
@ -16,15 +17,10 @@ public class InCostcenterBackSubmitItemQO {
@NotNull
private Long orderItemId;
/**
* 实际入库储位编号列表
*/
@NotBlank
private String binNos;
/**
* 二维码列表
*/
@Valid
@NotEmpty
private List<String> qrCodes;
private List<InCostcenterBackSubmitItemQRQO> items;
}

View File

@ -0,0 +1,21 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@Data
public class InCostcenterBackSubmitItemQRQO {
/**
* 实际入库储位编号列表
*/
private String binNo;
/**
* 二维码列表
*/
@NotEmpty
private List<String> qrCodes;
}

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
@ -21,6 +22,7 @@ public class InProduceBackSubmitQO {
/**
* 二维码列表
*/
@Valid
@NotEmpty
private List<String> qrCodes;
private List<InCostcenterBackSubmitItemQRQO> items;
}

View File

@ -1,6 +1,8 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@ -17,15 +19,12 @@ public class InProduceOrderReceiveMaterialQO {
/**
* 仓库编号
*/
@NotBlank
private String warehouseNo;
/**
* 储位编号列表
*/
private String binNos;
/**
* 二维码列表
*/
private List<String> qrCodes;
@Valid
private List<InCostcenterBackSubmitItemQRQO> items;
}

View File

@ -21,5 +21,5 @@ public class InProduceOrderReceiveQO {
*/
@Valid
@NotEmpty
private List<InProduceOrderReceiveMaterialQO> items;
private List<InProduceOrderReceiveMaterialQO> materials;
}

View File

@ -55,7 +55,7 @@ public class InProduceOrderItemVO {
/**
* 储位
*/
private String binNos;
private String binNo;
/**
* 批次号

View File

@ -76,4 +76,10 @@ public class OutProduceItemVO {
public boolean getUseChildren() {
return CollectionUtil.isNotEmpty(children);
}
/**
* 是否启用储位管理
*/
@JsonProperty("isDisableLocation")
private Boolean isDisableLocation;
}

View File

@ -29,7 +29,7 @@ public interface WmsStorageMapper extends BaseMapper<WmsStorage> {
List<String> getWarehouseNo(String factoryNo, String materialNo);
String getBinNos(String materialNo, String factoryNo, String warehouseNo);
String getBinNo(String materialNo, String factoryNo, String warehouseNo);
List<StorageVO> searchNonSync();

View File

@ -32,4 +32,6 @@ public interface WmsWarehouseMapper extends BaseMapper<WmsWarehouse> {
List<WarehouseVO> getListByIds(List<Long> list);
WarehouseVO getInfo(Long id);
Boolean isEnableLocation(String factoryNo, String warehouseNo);
}

View File

@ -39,7 +39,7 @@ public interface IWmsStorageService extends IService<WmsStorage> {
List<String> getWarehouseNo(String factoryNo, String materialNo);
Set<String> getBinNos(String materialNo, @NotBlank String factoryNo, String warehouseNo);
String getBinNo(String materialNo, @NotBlank String factoryNo, String warehouseNo);
List<StorageVO> searchNonSync();

View File

@ -43,4 +43,6 @@ public interface IWmsWarehouseService extends IService<WmsWarehouse> {
List<WarehouseVO> getListByIds(List<Long> list);
WarehouseVO getInfo(Long id);
Boolean isEnableLocation(String factoryNo, String warehouseNo);
}

View File

@ -102,8 +102,8 @@ public class WmsStorageServiceImpl extends ServiceImpl<WmsStorageMapper, WmsStor
}
@Override
public Set<String> getBinNos(String materialNo, String factoryNo, String warehouseNo) {
return new HashSet<>(StrUtil.split(baseMapper.getBinNos(materialNo,factoryNo,warehouseNo), ","));
public String getBinNo(String materialNo, String factoryNo, String warehouseNo) {
return baseMapper.getBinNo(materialNo,factoryNo,warehouseNo);
}
@Override

View File

@ -120,4 +120,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl<WmsWarehouseMapper, Wms
public WarehouseVO getInfo(Long id) {
return baseMapper.getInfo(id);
}
@Override
public Boolean isEnableLocation(String factoryNo, String warehouseNo) {
return baseMapper.isEnableLocation(factoryNo, warehouseNo);
}
}

View File

@ -86,7 +86,7 @@
WHERE s.material_no = #{materialNo} and di."value" = #{factoryNo}
</select>
<select id="getBinNos" resultType="java.lang.String">
<select id="getBinNo" resultType="java.lang.String">
SELECT bin.no
FROM wms_storage s
INNER JOIN wms_bin bin ON s.bin_id = bin.id

View File

@ -77,4 +77,11 @@
left join dictionary_item di on w.factory_id = di.id
where w.id = #{id}
</select>
<select id="isEnableLocation" resultType="java.lang.Boolean">
SELECT wh.is_disable_location
FROM wms_warehouse wh
INNER JOIN dictionary_item di ON wh.factory_id=di."id"
WHERE di."value"=#{factoryNo} AND wh."no"=#{warehouseNo}
</select>
</mapper>

View File

@ -11,6 +11,7 @@ import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeQRVO;
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
import com.nflg.wms.common.util.EecExcelUtil;
import com.nflg.wms.common.util.NumberUtil;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*;
@ -113,12 +114,35 @@ public class MaterialCodeController extends BaseController {
/**
* 清单-删除
*/
@Transactional
@PostMapping("delete")
public ApiResult<Void> delete(@RequestBody @NotEmpty List<Long> ids) {
materialCodeService.lambdaUpdate()
List<Long> idsForDelete = materialCodeService.lambdaQuery()
.select(WmsShipmentMaterialCode::getId)
.eq(WmsShipmentMaterialCode::getStatus, 0)
.in(WmsShipmentMaterialCode::getId, ids)
.remove();
.list()
.stream()
.map(WmsShipmentMaterialCode::getId)
.toList();
if (CollectionUtil.isNotEmpty(idsForDelete)) {
materialCodeService.removeByIds(idsForDelete);
materialCodeForwardService.lambdaUpdate()
.in(WmsShipmentMaterialCodeForward::getMaterialCodeId)
.remove();
idsForDelete = materialCodeItemService.lambdaQuery()
.in(WmsShipmentMaterialCodeItem::getMaterialCodeId, idsForDelete)
.list()
.stream()
.map(WmsShipmentMaterialCodeItem::getId)
.toList();
if (CollectionUtil.isNotEmpty(idsForDelete)) {
materialCodeItemService.removeByIds(idsForDelete);
materialCodeItemQrService.lambdaUpdate()
.in(WmsShipmentMaterialCodeItemQr::getItemId, idsForDelete)
.remove();
}
}
return ApiResult.success();
}
@ -193,21 +217,21 @@ public class MaterialCodeController extends BaseController {
log.debug("第{}行:{}", row.getRowNum(), row);
if (row.getRowNum() == 1) {
materialCode.setCustomerName(row.getString(2));
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getCustomerName()))
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getCustomerName()))
.throwMessage("客户名称不能为空");
} else if (row.getRowNum() == 2) {
materialCode.setDeviceNo(row.getString(2));
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getDeviceNo()))
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getDeviceNo()))
.throwMessage("设备编号不能为空");
materialCode.setOrderDate(row.getLocalDate(6).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getOrderDate()))
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getOrderDate()))
.throwMessage("订单日期不能为空");
} else if (row.getRowNum() == 3) {
materialCode.setSoNo(row.getString(2));
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getSoNo()))
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getSoNo()))
.throwMessage("销售订单号不能为空");
materialCode.setMaterialNo(row.getString(6));
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getMaterialNo()))
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getMaterialNo()))
.throwMessage("设备料号不能为空");
} else if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) {
WmsShipmentMaterialCodeItem item = new WmsShipmentMaterialCodeItem();
@ -225,6 +249,8 @@ public class MaterialCodeController extends BaseController {
item.setBoxNo(row.getString(9));
item.setCreateBy(UserUtil.getUserName());
item.setCreateTime(LocalDateTime.now());
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
item.setPackingLeft(item.getPackingNum());
items.add(item);
qrs.add(new WmsShipmentMaterialCodeItemQr()
.setItemId(item.getId())
@ -271,18 +297,20 @@ public class MaterialCodeController extends BaseController {
item.setId(IdUtil.getSnowflakeNextId());
item.setCreateBy(UserUtil.getUserName());
item.setCreateTime(LocalDateTime.now());
BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
item.setPackingLeft(item.getPackingNum());
int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
for (int i = 1; i <= item.getPackingNum(); i++) {
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
.setItemId(item.getId())
.setNo(KeyUtil.next())
.setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
.setItemId(item.getId())
.setNo(KeyUtil.next())
// .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
.setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i))
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
);
}
materialCodeItemService.save(item);
@ -318,16 +346,17 @@ public class MaterialCodeController extends BaseController {
materialCodeItemQrService.lambdaUpdate()
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
.remove();
BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
item.setPackingLeft(item.getPackingNum());
int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
// int count = decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue();
for (int i = 1; i <= item.getPackingNum(); i++) {
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
.setItemId(item.getId())
.setNo(KeyUtil.next())
.setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
.setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i))
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
);
@ -551,7 +580,7 @@ public class MaterialCodeController extends BaseController {
return exportItemZip(datas);
}
private ResponseEntity<byte[]> exportItemZip(List<ShipmentMaterialCodeQRVO> datas) throws Exception{
private ResponseEntity<byte[]> exportItemZip(List<ShipmentMaterialCodeQRVO> datas) throws Exception {
Map<String, String> iamges = materialService.lambdaQuery()
.select(WmsShipmentMaterial::getNo, WmsShipmentMaterial::getImage)
.in(WmsShipmentMaterial::getNo, datas.stream().map(ShipmentMaterialCodeQRVO::getMaterialNo).collect(Collectors.toSet()))