Merge branch 'feature/NoScanning' into qms/develop-0625

This commit is contained in:
曹鹏飞 2026-06-25 17:24:50 +08:00
commit 34d75903c0
15 changed files with 201 additions and 87 deletions

View File

@ -861,10 +861,12 @@ public class NormalPGIController extends BaseController {
zwm3A17DTOS.add(zwm3A17DTO);
}
Map<String, String> codeBinNoMap = request.getItems().stream()
.map(PoReceiveTaskItemConfirmQO::getItems)
.flatMap(List::stream)
Map<String, String> codeBinNoMap = qo.getItems().stream()
.collect(Collectors.toMap(InCostCenterBackSubmitItemQRQO::getQrCode, InCostCenterBackSubmitItemQRQO::getBinNo));
// request.getItems().stream()
// .map(PoReceiveTaskItemConfirmQO::getItems)
// .flatMap(List::stream)
// .collect(Collectors.toMap(InCostCenterBackSubmitItemQRQO::getQrCode, InCostCenterBackSubmitItemQRQO::getBinNo));
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.getByCodes(codeBinNoMap.keySet());
List<String> tmpQrCodes = qrCodeMasters.stream()
.filter(qrCodeMaster -> !Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.Received.getState()))

View File

@ -133,7 +133,6 @@ public class NormalQMController extends BaseController {
@PostMapping("PDA/task/confirm")
@ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架确认")
public ApiResult<Void> confirm(@Valid @RequestBody List<QCReceiveTaskConfirmQO> request) {
if (CollectionUtil.isEmpty(request))
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("入库参数为空");
//根据详情ID 获取到相应的入库单信息
@ -147,7 +146,7 @@ public class NormalQMController extends BaseController {
.apply("check_qty>in_qty")
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("不存在待入库的物料(或此物料已入库)");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(wmsQcReceiveItems)).throwMessage("不存在待入库的物料(或此物料已入库)");
List<String> qrCodes = CollectionUtil.unionAll(
request.stream()
@ -228,14 +227,14 @@ public class NormalQMController extends BaseController {
List<QCReceiveDTO> qcReceiveDTOS = new ArrayList<>();
for (String poNum : poNums) {
//封装一个数据
QCReceiveDTO qcReceiveDTO = new QCReceiveDTO()
// .setUnqualifiedInventories(new ArrayList<>())
.setQcIdList(new ArrayList<>())
.setReceiveIds(new ArrayList<>())
.setWaitModifyItems(new ArrayList<>())
.setStorageLocationDTOS(new ArrayList<>())
.setQualifiednventories(new ArrayList<>());
// //封装一个数据
// QCReceiveDTO qcReceiveDTO = new QCReceiveDTO()
//// .setUnqualifiedInventories(new ArrayList<>())
// .setQcIdList(new ArrayList<>())
// .setReceiveIds(new ArrayList<>())
// .setWaitModifyItems(new ArrayList<>())
// .setStorageLocationDTOS(new ArrayList<>())
// .setQualifiednventories(new ArrayList<>());
List<QCReceiveTaskConfirmQO> qcReceiveTaskConfirmQOS = request.stream()
.filter(q -> q.getPoNum().equals(poNum))
.collect(Collectors.toList());
@ -248,6 +247,15 @@ public class NormalQMController extends BaseController {
if (Objects.isNull(wmsQcReceiveItem)) {
continue;
}
//封装一个数据
QCReceiveDTO qcReceiveDTO = new QCReceiveDTO()
// .setUnqualifiedInventories(new ArrayList<>())
.setQcIdList(new ArrayList<>())
.setReceiveIds(new ArrayList<>())
.setWaitModifyItems(new ArrayList<>())
.setStorageLocationDTOS(new ArrayList<>())
.setQualifiednventories(new ArrayList<>());
qcReceiveDTOS.add(qcReceiveDTO);
if (!qcReceiveDTO.getReceiveIds().stream().anyMatch(id -> id.equals(wmsQcReceiveItem.getReceiveId()))) {
qcReceiveDTO.getReceiveIds().add(wmsQcReceiveItem.getReceiveId());
}
@ -362,7 +370,7 @@ public class NormalQMController extends BaseController {
}
}
}
qcReceiveDTOS.add(qcReceiveDTO);
// qcReceiveDTOS.add(qcReceiveDTO);
}
qrCodeMasterService.updateBarCode(qrCodeMasters);
normalQMControllerService.confirmReceive(qcReceiveDTOS);

View File

@ -389,7 +389,6 @@ public class StructuralPackageOrderController extends BaseController {
.setPackagingType((short) 0)
.setQuantity(BigDecimal.valueOf(it.getNum()))
.setUnit(it.getUnit())
.setSupplierId(it.getSupplierId())
.setPoNumber(it.getExternalOrderNo())
.setPoLineNumber(it.getRowNo())
.setExtendId(it.getId())
@ -1205,7 +1204,7 @@ public class StructuralPackageOrderController extends BaseController {
List<WmsStructuralPackageOrderTrayItem> items = structuralPackageOrderTrayItemService.getList(request.getId());
items.forEach(it -> it.setStoreNum(it.getShipmentNum()));
structuralPackageOrderTrayItemService.updateBatchById(items);
if (structuralPackageDeliverOrderService.updateStateByOrderId(request.getId()) == 2) {
structuralPackageDeliverOrderService.updateStateByOrderId(request.getId());
qrCodeMasterService.lambdaUpdate()
.set(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
.set(WmsQrCodeMaster::getLastScanBy, UserUtil.getUserId())
@ -1213,7 +1212,6 @@ public class StructuralPackageOrderController extends BaseController {
.set(WmsQrCodeMaster::getLastScanTime, LocalDateTime.now())
.eq(WmsQrCodeMaster::getExtendId, request.getId())
.update();
}
WmsStructuralPackageDeliverOrderMap om = structuralPackageDeliverOrderMapService.lambdaQuery()
.eq(WmsStructuralPackageDeliverOrderMap::getOrderId, request.getId())
.one();

View File

@ -0,0 +1,26 @@
package com.nflg.wms.admin.pojo.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StorageImportDTO {
private String factoryNo;
private String warehouseNo;
private String binNo;
/**
* 库存地点ID
*/
private Long warehouseId;
private Long binId;
private String error;
}

View File

@ -9,6 +9,7 @@ import com.nflg.wms.admin.pojo.dto.ZWM3A27ItemDTO;
import com.nflg.wms.common.pojo.dto.OptRecordDTO;
import com.nflg.wms.common.pojo.vo.QCTaskItemScanCodesVO;
import com.nflg.wms.common.pojo.vo.QCTaskItemVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsQcReceive;
import com.nflg.wms.repository.entity.WmsQcReceiveItem;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
@ -120,11 +121,17 @@ public class NormalQMControllerService {
iWmsQcReceiveService.lambdaUpdate()
.eq(WmsQcReceive::getId, receiveId)
.set(WmsQcReceive::getIsCompleted, 2)
.set(WmsQcReceive::getUpdateTime, LocalDateTime.now())
.set(WmsQcReceive::getUpdateUserId, UserUtil.getUserId())
.set(WmsQcReceive::getUpdateUserName, UserUtil.getUserName())
.update();
} else {
iWmsQcReceiveService.lambdaUpdate()
.eq(WmsQcReceive::getId, receiveId)
.set(WmsQcReceive::getIsCompleted, 1)
.set(WmsQcReceive::getUpdateTime, LocalDateTime.now())
.set(WmsQcReceive::getUpdateUserId, UserUtil.getUserId())
.set(WmsQcReceive::getUpdateUserName, UserUtil.getUserName())
.update();
}
}

View File

@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.admin.pojo.dto.StorageImportDTO;
import com.nflg.wms.common.constant.Constant;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.pojo.ApiResult;
@ -49,9 +50,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
@Component
@ -144,18 +143,77 @@ public class StorageControllerService {
@Transactional
public boolean updateCheckAndImport(List<StorageExcelExportDTO> data) {
List<WmsStorage> storages = new ArrayList<>();
List<WmsStorage> storagesForAdd = new ArrayList<>();
Set<String> materialNos = data.stream().map(StorageExcelExportDTO::getMaterialNo).collect(Collectors.toSet());
List<MaterialMainDTO> dtos = bomMaterialService.getList(materialNos);
Set<String> fwbs = new HashSet<>();
data.forEach(dto -> {
if (dtos.stream().noneMatch(d -> StrUtil.equals(d.getMaterialNo(), dto.getMaterialNo()))) {
dto.setError("物料编号无效;");
} else {
if (StrUtil.isNotBlank(dto.getBinNo())) {
fwbs.add(dto.getFactoryNo() + "$" + dto.getWarehouseNo() + "$" + dto.getBinNo());
}
}
});
List<DictionaryItem> factories = dictionaryItemService.getListByDictionaryCode(Constant.DICTIONARY_FACTORY);
List<StorageImportDTO> fwbos = new ArrayList<>();
fwbs.forEach(fwb -> {
List<String> fwbl = StrUtil.split(fwb, "$");
if (factories.stream().noneMatch(f -> StrUtil.equals(f.getValue(), fwbl.get(0)))) {
fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), null, null, "工厂编号无效"));
} else {
WmsBin bin = wmsBinService.getByCode(fwbl.get(0), fwbl.get(1), fwbl.get(2));
if (Objects.isNull(bin)) {
fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), null, null, "储位编号无效"));
} else {
fwbos.add(new StorageImportDTO(fwbl.get(0), fwbl.get(1), fwbl.get(2), bin.getWarehouseId(), bin.getId(), null));
}
}
});
List<WmsStorage> storagesForUpdate = storageService.lambdaQuery()
.in(WmsStorage::getMaterialNo, materialNos)
.list();
for (StorageExcelExportDTO dto : data) {
WmsStorage storage = new WmsStorage();
if (StrUtil.isNotBlank(dto.getError())) {
continue;
}
WmsStorage storage = null;
StringBuilder sb = new StringBuilder();
if (StrUtil.isBlank(dto.getMaterialNo())) {
sb.append("物料编号不能为空;");
}
String factoryNo = StrUtil.trim(dto.getFactoryNo());
if (StrUtil.isBlank(factoryNo)) {
sb.append("工厂编号不能为空;");
}
String warehouseNo = StrUtil.trim(dto.getWarehouseNo());
if (StrUtil.isBlank(warehouseNo)) {
sb.append("库存地点编号不能为空;");
}
if (StrUtil.isBlank(dto.getBinNo())) {
sb.append("储位编号不能为空;");
} else {
MaterialMainDTO material = bomMaterialService.getMaterialInfo(dto.getMaterialNo());
if (Objects.isNull(material)) {
sb.append("物料编号无效;");
StorageImportDTO fwbo = fwbos.stream()
.filter(f -> StrUtil.equals(f.getFactoryNo(), factoryNo)
&& StrUtil.equals(f.getWarehouseNo(), warehouseNo)
&& StrUtil.equals(f.getBinNo(), dto.getBinNo())
)
.findFirst()
.get();
if (StrUtil.isNotBlank(fwbo.getError())) {
sb.append(fwbo.getError()).append(";");
} else {
storage = storageService.lambdaQuery().eq(WmsStorage::getMaterialNo, material.getMaterialNo()).one();
MaterialMainDTO material = dtos.stream()
.filter(d -> StrUtil.equals(d.getMaterialNo(), dto.getMaterialNo()))
.findFirst()
.get();
storage = storagesForUpdate.stream()
.filter(s -> StrUtil.equals(s.getMaterialNo(), dto.getMaterialNo())
&& s.getWarehouseId().equals(fwbo.getWarehouseId())
)
.findFirst()
.orElse(null);
if (Objects.isNull(storage)) {
storage = new WmsStorage()
.setId(IdUtil.getSnowflakeNextId())
@ -164,56 +222,25 @@ public class StorageControllerService {
.setMaterialDesc(material.getMaterialDesc())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
storagesForAdd.add(storage);
} else {
storage.setUpdateBy(UserUtil.getUserName());
storage.setUpdateTime(LocalDateTime.now());
}
}
}
String factoryNo = StrUtil.trim(dto.getFactoryNo());
DictionaryItem item = null;
if (StrUtil.isBlank(factoryNo)) {
sb.append("工厂编号不能为空;");
} else {
item = dictionaryItemService.getByCode(Constant.DICTIONARY_FACTORY, factoryNo);
if (Objects.isNull(item)) {
sb.append("工厂编号无效;");
}
}
String warehouseNo = StrUtil.trim(dto.getWarehouseNo());
WmsWarehouse warehouse = null;
if (StrUtil.isBlank(warehouseNo)) {
sb.append("库存地点编号不能为空;");
} else if (Objects.nonNull(item)) {
warehouse = warehouseService.lambdaQuery().eq(WmsWarehouse::getFactoryId, item.getId()).eq(WmsWarehouse::getNo, warehouseNo).one();
if (Objects.isNull(warehouse)) {
sb.append("库存地点编号无效;");
} else {
storage.setWarehouseId(warehouse.getId());
}
}
if (StrUtil.isBlank(dto.getBinNo())) {
sb.append("储位编号不能为空;");
} else if (Objects.nonNull(warehouse)) {
WmsBin bin = wmsBinService.lambdaQuery()
.eq(WmsBin::getWarehouseId, warehouse.getId())
.eq(WmsBin::getNo, dto.getBinNo())
.one();
if (Objects.isNull(bin)) {
sb.append("储位编号无效;");
}else {
storage.setBinId(bin.getId());
}
}
storage.setWarehouseId(fwbo.getWarehouseId());
storage.setBinId(fwbo.getBinId());
storage.setRemark(dto.getRemark());
}
}
dto.setError(sb.toString());
storages.add(storage);
}
if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))) {
storageService.saveOrUpdateBatch(storages);
// storageBinService.remove(new LambdaQueryWrapper<WmsStorageBin>()
// .in(WmsStorageBin::getStorageId, storages.stream().map(WmsStorage::getId).toList()));
// storageBinService.saveBatch(storageBinAll);
if (CollectionUtil.isNotEmpty(storagesForAdd)) {
storageService.saveBatch(storagesForAdd);
}
if (CollectionUtil.isNotEmpty(storagesForUpdate)) {
storageService.updateBatchById(storagesForUpdate);
}
return true;
}
return false;

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.dto;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import lombok.Data;
import lombok.experimental.Accessors;
@ -8,6 +9,8 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
public class LdapUserDTO {
private Long id = IdUtil.getSnowflakeNextId();
/**
* 用户名
*/

View File

@ -82,4 +82,14 @@ public class QCReceiptVO {
* 1 无码收货
*/
private Integer sourceType;
/**
* 入库时间
*/
private LocalDateTime inTime;
/**
* 入库人
*/
private String inUserName;
}

View File

@ -19,7 +19,8 @@ public interface WmsQcReceiveItemMapper extends BaseMapper<WmsQcReceiveItem> {
List<QCTaskItemVO> getTaskItem(Long taskId);
void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc);
void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc,
BigDecimal UnqualifiedQty ,BigDecimal QualifiedQty);
void updateInQty(Long id, BigDecimal inQty, BigDecimal unqualifiedQty, BigDecimal qualifiedQty);

View File

@ -21,7 +21,7 @@ public interface IWmsQcReceiveItemService extends IService<WmsQcReceiveItem> {
List<QCTaskItemVO> getTaskItem(@Valid @NotNull Long taskId);
void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode,String materialDoc);
void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode,String materialDoc,BigDecimal UnqualifiedQty ,BigDecimal QualifiedQty);
void updateInQty(Long id, BigDecimal inQty,BigDecimal unqualifiedQty,BigDecimal qualifiedQty);

View File

@ -27,8 +27,8 @@ public class WmsQcReceiveItemServiceImpl extends ServiceImpl<WmsQcReceiveItemMap
}
@Override
public void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc) {
baseMapper.updateCheckNum(InspectionQty, noteNum, lineNumber, itemCode, materialDoc);
public void updateCheckNum(BigDecimal InspectionQty, String noteNum, String lineNumber, String itemCode, String materialDoc,BigDecimal UnqualifiedQty ,BigDecimal QualifiedQty) {
baseMapper.updateCheckNum(InspectionQty, noteNum, lineNumber, itemCode, materialDoc,UnqualifiedQty,QualifiedQty);
}
@Override

View File

@ -30,7 +30,9 @@
<update id="updateCheckNum">
update wms_qc_receive_item
set check_qty=check_qty + #{InspectionQty}
set check_qty=check_qty + #{InspectionQty},
unqualified_qty= #{ UnqualifiedQty },
qualified_qty= #{ QualifiedQty }
where note_num = #{ noteNum}
and line_number = #{ lineNumber}
and material_doc = #{materialDoc}

View File

@ -10,10 +10,12 @@
wh.id AS "warehouseId",
wh.no AS "warehouseNo",
s.bin_id,
bin.no as "binNo"
bin.no as "binNo",
di.value as "factoryNo"
FROM wms_storage s
INNER JOIN wms_bin bin ON s.bin_id = bin.id
LEFT JOIN wms_warehouse wh ON s.warehouse_id = wh.id
LEFT JOIN dictionary_item di ON wh.factory_id = di."id"
<where>
<if test="request.warehouseNo!=null and request.warehouseNo!=''">
and wh.no ilike concat('%', #{request.warehouseNo}, '%')
@ -56,10 +58,12 @@
wh.id AS "warehouseId",
wh.no AS "warehouseNo",
s.bin_id,
bin.no as "binNo"
bin.no as "binNo",
di.value as "factoryNo"
FROM wms_storage s
INNER JOIN wms_bin bin ON s.bin_id = bin.id
LEFT JOIN wms_warehouse wh ON s.warehouse_id = wh.id
LEFT JOIN dictionary_item di ON wh.factory_id = di."id"
<where>
<if test="request.warehouseNo!=null and request.warehouseNo!=''">
and wh.no like concat('%', #{request.warehouseNo}, '%')

View File

@ -155,6 +155,8 @@ public class SRMController extends BaseController {
.eq(WmsQcReceiveItem::getMaterialDoc, data.getReceiveNum())
.eq(WmsQcReceiveItem::getLineNumber, data.getLineNumber())
.eq(WmsQcReceiveItem::getNoteNum, data.getNoteNum())
.eq(WmsQcReceiveItem::getPoLineNumber, data.poLineNumber)
.eq(WmsQcReceiveItem::getPoNum, data.getPoNum())
.one();
if (Objects.isNull(receiveItem)) {
log.error("未找到对应收货明细, 质检单号: {}, 物料: {}, 收货单: {}, 行号: {}",

View File

@ -0,0 +1,24 @@
package repository;
import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.mongodb.repository.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface SrmMaterialReceiptScanCodesRepository
extends MongoRepository<SrmMaterialReceiptScanCodes, String> {
List<SrmMaterialReceiptScanCodes> findByOrderItemId(Long orderItemId);
List<SrmMaterialReceiptScanCodes> findByReceiveItemId(Long receiveItemId);
List<SrmMaterialReceiptScanCodes> findByCodeIdIn(List<String> attr0);
@Query("{ 'codeId' : { $in : ?0 } }")
@Update("{ $set : { 'isIntoStorage' : ?1 } }")
void updateIsIntoStorage(List<String> codeIds, boolean isIntoStorage);
}