refactor(storage): 优化储位管理和服务层实现
- 将getBinNos方法改为getBinNo,统一返回单个储位编号 - 移除SAP服务集成相关的代码逻辑 - 更新InCostCenterBackController中的储位获取逻辑 - 添加仓库位置启用状态检查功能 - 重构入库记录中的二维码处理流程 - 引入条码处理阶段常量进行状态管理 - 优化InProduceBackController中的储位设置逻辑 - 更新生产订单控制器中的入库处理逻辑 - 调整物料扫描记录中的储位字段为单一值 - 修改多个控制器中的资源注入方式 - 更新物料退料提交对象的数据结构 - 优化条码主数据的状态更新机制 - 调整物料清单控制器中的删除操作事务处理 - 修复Excel导入验证条件的逻辑错误 - 优化包装数量计算使用统一工具类方法
This commit is contained in:
parent
2a79163ac3
commit
3b8b92942a
|
|
@ -13,6 +13,7 @@ import com.nflg.wms.admin.util.NoUtil;
|
||||||
import com.nflg.wms.admin.util.PdfGeneratorUtil;
|
import com.nflg.wms.admin.util.PdfGeneratorUtil;
|
||||||
import com.nflg.wms.admin.util.QRCodeUtil;
|
import com.nflg.wms.admin.util.QRCodeUtil;
|
||||||
import com.nflg.wms.admin.util.ThymeleafUtil;
|
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.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
import com.nflg.wms.common.pojo.PageData;
|
||||||
import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
|
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.pojo.vo.*;
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.WmsInCostcenterBack;
|
import com.nflg.wms.repository.entity.*;
|
||||||
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.service.*;
|
import com.nflg.wms.repository.service.*;
|
||||||
import com.nflg.wms.starter.BaseController;
|
import com.nflg.wms.starter.BaseController;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
|
@ -80,6 +78,12 @@ public class InCostCenterBackController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private BasdeSerialNumberControllerService serialNumberControllerService;
|
private BasdeSerialNumberControllerService serialNumberControllerService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsWarehouseService warehouseService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询SAP领料订单数据
|
* 查询SAP领料订单数据
|
||||||
*/
|
*/
|
||||||
|
|
@ -181,9 +185,8 @@ public class InCostCenterBackController extends BaseController {
|
||||||
if (StrUtil.isBlank(vo.getLgort2())) {
|
if (StrUtil.isBlank(vo.getLgort2())) {
|
||||||
vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0));
|
vo.setLgort2(CollectionUtil.get(storageService.getWarehouseNo(order.getWerks(), item.getMatnr()), 0));
|
||||||
}
|
}
|
||||||
if (StrUtil.isNotBlank(vo.getLgort2()) && StrUtil.isBlank(vo.getLgpbe())) {
|
vo.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getWerks(), vo.getLgort2()));
|
||||||
vo.setLgpbe(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), vo.getLgort2())));
|
vo.setIsDisableLocation(warehouseService.isEnableLocation(order.getWerks(), vo.getLgort2()));
|
||||||
}
|
|
||||||
return vo;
|
return vo;
|
||||||
}).toList()
|
}).toList()
|
||||||
)
|
)
|
||||||
|
|
@ -208,8 +211,17 @@ public class InCostCenterBackController extends BaseController {
|
||||||
.setCreateTime(LocalDateTime.now());
|
.setCreateTime(LocalDateTime.now());
|
||||||
List<WmsInCostcenterBackItem> datas = inCostcenterBackItemService.getList(order.getId());
|
List<WmsInCostcenterBackItem> datas = inCostcenterBackItemService.getList(order.getId());
|
||||||
List<InMaterialScanRecord> records = new ArrayList<>();
|
List<InMaterialScanRecord> records = new ArrayList<>();
|
||||||
// List<MaterialQRCodeContentDTO> dtos = new ArrayList<>();
|
|
||||||
List<WmsInCostcenterBackTicketItem> ticketItems = 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 -> {
|
request.getItems().forEach(it -> {
|
||||||
WmsInCostcenterBackItem item = datas.stream().filter(d -> Objects.equals(it.getOrderItemId(), d.getId())).findFirst().orElse(null);
|
WmsInCostcenterBackItem item = datas.stream().filter(d -> Objects.equals(it.getOrderItemId(), d.getId())).findFirst().orElse(null);
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效");
|
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("订单项无效");
|
||||||
|
|
@ -217,12 +229,12 @@ public class InCostCenterBackController extends BaseController {
|
||||||
.setId(IdUtil.getSnowflakeNextId())
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
.setTicketId(ticket.getId())
|
.setTicketId(ticket.getId())
|
||||||
.setOrderItemId(item.getId())
|
.setOrderItemId(item.getId())
|
||||||
.setLgpbe(StrUtil.join(",", it.getBinNos()))
|
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList()))
|
||||||
.setNum(BigDecimal.ZERO);
|
.setNum(BigDecimal.ZERO);
|
||||||
ticketItems.add(ti);
|
ticketItems.add(ti);
|
||||||
it.getQrCodes().forEach(qrCode -> {
|
it.getItems().forEach(iit -> {
|
||||||
|
iit.getQrCodes().forEach(qrCode -> {
|
||||||
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
|
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
|
||||||
// dtos.add(qrCodeContent);
|
|
||||||
String materialNo = qrCodeContent.getMaterialNo();
|
String materialNo = qrCodeContent.getMaterialNo();
|
||||||
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
|
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
|
||||||
.throwMessage("订单项与物料不符");
|
.throwMessage("订单项与物料不符");
|
||||||
|
|
@ -241,16 +253,28 @@ public class InCostCenterBackController extends BaseController {
|
||||||
.setSerialNo(qrCodeContent.getSerialNo())
|
.setSerialNo(qrCodeContent.getSerialNo())
|
||||||
.setFactoryNo(order.getWerks())
|
.setFactoryNo(order.getWerks())
|
||||||
.setWarehouseNo(request.getLgort())
|
.setWarehouseNo(request.getLgort())
|
||||||
.setBinNos(StrUtil.split(it.getBinNos(), "/"))
|
.setBinNo(iit.getBinNo())
|
||||||
.setUniqNo(qrCodeContent.getUniqNo())
|
.setUniqNo(qrCodeContent.getUniqNo())
|
||||||
.setNum(qrCodeContent.getNum())
|
.setNum(qrCodeContent.getNum())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(Instant.now())
|
.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);
|
inCostcenterBackItemService.updateBatchById(datas);
|
||||||
inMaterialScanRecordRespository.saveAll(records);
|
|
||||||
inCostcenterBackTicketItemService.saveBatch(ticketItems);
|
inCostcenterBackTicketItemService.saveBatch(ticketItems);
|
||||||
inCostcenterBackService.lambdaUpdate()
|
inCostcenterBackService.lambdaUpdate()
|
||||||
.set(WmsInCostcenterBack::getSapStatus, true)
|
.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)
|
.set(WmsInCostcenterBack::getState, datas.stream().map(WmsInCostcenterBackItem::getLeft).reduce(BigDecimal.ZERO, BigDecimal::add).compareTo(BigDecimal.ZERO) > 0 ? 1 : 2)
|
||||||
.eq(WmsInCostcenterBack::getId, order.getId())
|
.eq(WmsInCostcenterBack::getId, order.getId())
|
||||||
.update();
|
.update();
|
||||||
|
qrCodeMasterService.updateBatchById(qrCodeMasters);
|
||||||
inventoryService.in(records.stream()
|
inventoryService.in(records.stream()
|
||||||
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
|
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
|
||||||
.values()
|
.values()
|
||||||
|
|
@ -299,6 +324,7 @@ public class InCostCenterBackController extends BaseController {
|
||||||
ticket.setDocYear(vo.getEMJahr());
|
ticket.setDocYear(vo.getEMJahr());
|
||||||
ticket.setMatDoc(vo.getEMblnr());
|
ticket.setMatDoc(vo.getEMblnr());
|
||||||
inCostcenterBackTicketService.save(ticket);
|
inCostcenterBackTicketService.save(ticket);
|
||||||
|
inMaterialScanRecordRespository.saveAll(records);
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ import com.nflg.wms.admin.util.NoUtil;
|
||||||
import com.nflg.wms.admin.util.PdfGeneratorUtil;
|
import com.nflg.wms.admin.util.PdfGeneratorUtil;
|
||||||
import com.nflg.wms.admin.util.QRCodeUtil;
|
import com.nflg.wms.admin.util.QRCodeUtil;
|
||||||
import com.nflg.wms.admin.util.ThymeleafUtil;
|
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.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
import com.nflg.wms.common.pojo.PageData;
|
||||||
import com.nflg.wms.common.pojo.document.InMaterialScanRecord;
|
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.pojo.vo.*;
|
||||||
import com.nflg.wms.common.util.UserUtil;
|
import com.nflg.wms.common.util.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.WmsInProduceBack;
|
import com.nflg.wms.repository.entity.*;
|
||||||
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.service.*;
|
import com.nflg.wms.repository.service.*;
|
||||||
import com.nflg.wms.starter.BaseController;
|
import com.nflg.wms.starter.BaseController;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
|
@ -76,6 +74,15 @@ public class InProduceBackController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private BasdeSerialNumberControllerService serialNumberControllerService;
|
private BasdeSerialNumberControllerService serialNumberControllerService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsStorageService storageService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsWarehouseService warehouseService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询SAP领料订单数据
|
* 查询SAP领料订单数据
|
||||||
*/
|
*/
|
||||||
|
|
@ -185,10 +192,11 @@ public class InProduceBackController extends BaseController {
|
||||||
.map(item -> new OutProduceItemVO()
|
.map(item -> new OutProduceItemVO()
|
||||||
.setId(item.getId())
|
.setId(item.getId())
|
||||||
.setLgort2(order.getLgort2())
|
.setLgort2(order.getLgort2())
|
||||||
.setLgpbe(item.getLgpbe())
|
.setLgpbe(storageService.getBinNo(item.getMatnr(), order.getDwerk(), order.getLgort2()))
|
||||||
.setMaktx2(item.getMaktx2())
|
.setMaktx2(item.getMaktx2())
|
||||||
.setMatnr(item.getMatnr())
|
.setMatnr(item.getMatnr())
|
||||||
.setNum(item.getSqsl().subtract(item.getNum()))
|
.setNum(item.getSqsl().subtract(item.getNum()))
|
||||||
|
.setIsDisableLocation(warehouseService.isEnableLocation(order.getDwerk(), order.getLgort2()))
|
||||||
).toList()
|
).toList()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -213,7 +221,16 @@ public class InProduceBackController extends BaseController {
|
||||||
// List<MaterialQRCodeContentDTO> dtos = new ArrayList<>();
|
// List<MaterialQRCodeContentDTO> dtos = new ArrayList<>();
|
||||||
List<WmsInProduceBackTicketItem> ticketItems = new ArrayList<>();
|
List<WmsInProduceBackTicketItem> ticketItems = new ArrayList<>();
|
||||||
Multimap<String, String> input2 = ArrayListMultimap.create();
|
Multimap<String, String> input2 = ArrayListMultimap.create();
|
||||||
request.getQrCodes().forEach(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);
|
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
|
||||||
// dtos.add(qrCodeContent);
|
// dtos.add(qrCodeContent);
|
||||||
String materialNo = qrCodeContent.getMaterialNo();
|
String materialNo = qrCodeContent.getMaterialNo();
|
||||||
|
|
@ -259,9 +276,22 @@ public class InProduceBackController extends BaseController {
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(Instant.now())
|
.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);
|
inProduceBackItemService.updateBatchById(datas);
|
||||||
inMaterialScanRecordRespository.saveAll(records);
|
qrCodeMasterService.updateBatchById(qrCodeMasters);
|
||||||
inProduceBackTicketItemService.saveBatch(ticketItems);
|
inProduceBackTicketItemService.saveBatch(ticketItems);
|
||||||
inventoryService.in(records.stream()
|
inventoryService.in(records.stream()
|
||||||
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
|
.collect(Collectors.groupingBy(InMaterialScanRecord::getKey))
|
||||||
|
|
@ -310,6 +340,7 @@ public class InProduceBackController extends BaseController {
|
||||||
.set(WmsInProduceBack::getState, inNum.compareTo(totalNum) >= 0 ? 2 : 1)
|
.set(WmsInProduceBack::getState, inNum.compareTo(totalNum) >= 0 ? 2 : 1)
|
||||||
.eq(WmsInProduceBack::getId, order.getId())
|
.eq(WmsInProduceBack::getId, order.getId())
|
||||||
.update();
|
.update();
|
||||||
|
inMaterialScanRecordRespository.saveAll(records);
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,12 @@ public class InProduceOrderController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private IWmsQrCodeMasterService qrCodeMasterService;
|
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsStorageService storageService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IWmsWarehouseService warehouseService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从SAP查询生产订单信息
|
* 从SAP查询生产订单信息
|
||||||
* @param no 生产订单号
|
* @param no 生产订单号
|
||||||
|
|
@ -367,21 +373,21 @@ public class InProduceOrderController extends BaseController {
|
||||||
if (Objects.equals(type, 0)) {
|
if (Objects.equals(type, 0)) {
|
||||||
child.setMustScan(false);
|
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);
|
datas.addAll(children);
|
||||||
});
|
});
|
||||||
return ApiResult.success(datas);
|
return ApiResult.success(datas);
|
||||||
} else {
|
} else {
|
||||||
list.forEach(it -> {
|
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);
|
return ApiResult.success(list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 收货(PDA使用)
|
* 入库(PDA使用)
|
||||||
* @param request 请求参数
|
* @param request 请求参数
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
|
|
@ -413,8 +419,18 @@ public class InProduceOrderController extends BaseController {
|
||||||
List<String> materialNos = new ArrayList<>();
|
List<String> materialNos = new ArrayList<>();
|
||||||
List<InMaterialScanRecord> records = new ArrayList<>();
|
List<InMaterialScanRecord> records = new ArrayList<>();
|
||||||
Map<Long, String> warehouseNoChange = new HashMap<>();
|
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 -> {
|
datas.forEach(it -> {
|
||||||
InProduceOrderReceiveMaterialQO materialQO = request.getItems()
|
InProduceOrderReceiveMaterialQO materialQO = request.getMaterials()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(q -> StrUtil.equals(q.getMaterialNo(), it.getMaterialNo()))
|
.filter(q -> StrUtil.equals(q.getMaterialNo(), it.getMaterialNo()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
|
|
@ -422,7 +438,7 @@ public class InProduceOrderController extends BaseController {
|
||||||
if (Objects.isNull(materialQO)) {
|
if (Objects.isNull(materialQO)) {
|
||||||
materialNos.add(it.getMaterialNo());
|
materialNos.add(it.getMaterialNo());
|
||||||
} else {
|
} else {
|
||||||
VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getQrCodes()))
|
VUtil.trueThrowBusinessError(it.isMustScan() && CollectionUtil.isEmpty(materialQO.getItems()))
|
||||||
.throwMessage(materialQO.getMaterialNo() + "需要提供扫码信息");
|
.throwMessage(materialQO.getMaterialNo() + "需要提供扫码信息");
|
||||||
if (!StrUtil.equals(it.getWarehouseNo(), materialQO.getWarehouseNo())) {
|
if (!StrUtil.equals(it.getWarehouseNo(), materialQO.getWarehouseNo())) {
|
||||||
warehouseNoChange.put(it.getId(), materialQO.getWarehouseNo());
|
warehouseNoChange.put(it.getId(), materialQO.getWarehouseNo());
|
||||||
|
|
@ -437,8 +453,9 @@ public class InProduceOrderController extends BaseController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (it.isMustScan()) {
|
if (it.isMustScan()) {
|
||||||
|
materialQO.getItems().forEach(item -> {
|
||||||
BigDecimal num = BigDecimal.ZERO;
|
BigDecimal num = BigDecimal.ZERO;
|
||||||
for (String qrCode : materialQO.getQrCodes()) {
|
for (String qrCode : item.getQrCodes()) {
|
||||||
MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode);
|
MaterialQRCodeContentDTO content = NoUtil.getMaterialQRCodeContent(qrCode);
|
||||||
if (Objects.nonNull(content.getNum())) {
|
if (Objects.nonNull(content.getNum())) {
|
||||||
num = num.add(content.getNum());
|
num = num.add(content.getNum());
|
||||||
|
|
@ -455,16 +472,29 @@ public class InProduceOrderController extends BaseController {
|
||||||
.setUniqNo(content.getUniqNo())
|
.setUniqNo(content.getUniqNo())
|
||||||
.setFactoryNo(it.getFactoryNo())
|
.setFactoryNo(it.getFactoryNo())
|
||||||
.setWarehouseNo(it.getWarehouseNo())
|
.setWarehouseNo(it.getWarehouseNo())
|
||||||
.setBinNos(StrUtil.split(materialQO.getBinNos(), "/"))
|
.setBinNo(item.getBinNo())
|
||||||
.setNum(content.getNum())
|
.setNum(content.getNum())
|
||||||
.setUnit(it.getUnit())
|
.setUnit(it.getUnit())
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(Instant.now())
|
.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());
|
||||||
}
|
}
|
||||||
if (num.compareTo(it.getNum()) != 0) {
|
if (num.compareTo(it.getNum()) != 0) {
|
||||||
materialNos.add(it.getMaterialNo());
|
materialNos.add(it.getMaterialNo());
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
// if (!order.getList()) {
|
// if (!order.getList()) {
|
||||||
// //是否更改了储位
|
// //是否更改了储位
|
||||||
|
|
@ -511,6 +541,9 @@ public class InProduceOrderController extends BaseController {
|
||||||
.map(InMaterialScanRecord::getSerialNo)
|
.map(InMaterialScanRecord::getSerialNo)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
if (CollectionUtil.isNotEmpty(qrCodeMasters)) {
|
||||||
|
qrCodeMasterService.updateBatchById(qrCodeMasters);
|
||||||
|
}
|
||||||
inventoryService.in(list.stream()
|
inventoryService.in(list.stream()
|
||||||
.filter(it -> Objects.equals(it.getParentId(), 0L))
|
.filter(it -> Objects.equals(it.getParentId(), 0L))
|
||||||
.map(it -> new InventoryDTO()
|
.map(it -> new InventoryDTO()
|
||||||
|
|
@ -522,7 +555,6 @@ public class InProduceOrderController extends BaseController {
|
||||||
.setSerialNo(it.getSernr())
|
.setSerialNo(it.getSernr())
|
||||||
).toList()
|
).toList()
|
||||||
);
|
);
|
||||||
inMaterialScanRecordRespository.saveAll(records);
|
|
||||||
if (CollectionUtil.isNotEmpty(warehouseNoChange)) {
|
if (CollectionUtil.isNotEmpty(warehouseNoChange)) {
|
||||||
produceOrderItemService.updateBatchById(
|
produceOrderItemService.updateBatchById(
|
||||||
warehouseNoChange.entrySet()
|
warehouseNoChange.entrySet()
|
||||||
|
|
@ -541,6 +573,7 @@ public class InProduceOrderController extends BaseController {
|
||||||
order.setUpdateBy(UserUtil.getUserName());
|
order.setUpdateBy(UserUtil.getUserName());
|
||||||
order.setUpdateTime(LocalDateTime.now());
|
order.setUpdateTime(LocalDateTime.now());
|
||||||
produceOrderService.updateById(order);
|
produceOrderService.updateById(order);
|
||||||
|
inMaterialScanRecordRespository.saveAll(records);
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.dto.QrCodeMasterPrintDTO;
|
||||||
import com.nflg.wms.common.pojo.qo.*;
|
import com.nflg.wms.common.pojo.qo.*;
|
||||||
import com.nflg.wms.common.pojo.vo.*;
|
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.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.*;
|
import com.nflg.wms.repository.entity.*;
|
||||||
|
|
@ -47,7 +46,6 @@ import java.time.Instant;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
|
||||||
|
|
@ -243,10 +241,11 @@ public class InProduceOrderSurplusController extends BaseController {
|
||||||
.setId(IdUtil.getSnowflakeNextId())
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
.setTicketId(ticket.getId())
|
.setTicketId(ticket.getId())
|
||||||
.setOrderItemId(item.getId())
|
.setOrderItemId(item.getId())
|
||||||
.setLgpbe(StrUtil.join(",", it.getBinNos()))
|
.setLgpbe(StrUtil.join(",", it.getItems().stream().map(InCostcenterBackSubmitItemQRQO::getBinNo).toList()))
|
||||||
.setNum(BigDecimal.ZERO);
|
.setNum(BigDecimal.ZERO);
|
||||||
ticketItems.add(ti);
|
ticketItems.add(ti);
|
||||||
it.getQrCodes().forEach(qrCode -> {
|
it.getItems().forEach(iit -> {
|
||||||
|
iit.getQrCodes().forEach(qrCode -> {
|
||||||
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
|
MaterialQRCodeContentDTO qrCodeContent = NoUtil.getMaterialQRCodeContent(qrCode);
|
||||||
String materialNo = qrCodeContent.getMaterialNo();
|
String materialNo = qrCodeContent.getMaterialNo();
|
||||||
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
|
VUtil.trueThrowBusinessError(!StrUtil.equals(materialNo, item.getMatnr()))
|
||||||
|
|
@ -269,7 +268,7 @@ public class InProduceOrderSurplusController extends BaseController {
|
||||||
.setSerialNo(qrCodeContent.getSerialNo())
|
.setSerialNo(qrCodeContent.getSerialNo())
|
||||||
.setFactoryNo(order.getDwerk())
|
.setFactoryNo(order.getDwerk())
|
||||||
.setWarehouseNo(ticket.getLgort())
|
.setWarehouseNo(ticket.getLgort())
|
||||||
.setBinNos(StrUtil.split(it.getBinNos(), "/"))
|
.setBinNo(iit.getBinNo())
|
||||||
.setUniqNo(qrCodeContent.getUniqNo())
|
.setUniqNo(qrCodeContent.getUniqNo())
|
||||||
.setRspos(item.getRspos())
|
.setRspos(item.getRspos())
|
||||||
.setNum(qrCodeContent.getNum())
|
.setNum(qrCodeContent.getNum())
|
||||||
|
|
@ -278,6 +277,7 @@ public class InProduceOrderSurplusController extends BaseController {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
inProduceOrderSurplusItemService.updateBatchById(datas);
|
inProduceOrderSurplusItemService.updateBatchById(datas);
|
||||||
inMaterialScanRecordRespository.saveAll(records);
|
inMaterialScanRecordRespository.saveAll(records);
|
||||||
inProduceOrderSurplusTicketItemService.saveBatch(ticketItems);
|
inProduceOrderSurplusTicketItemService.saveBatch(ticketItems);
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ public class OutPurchaseController extends BaseController {
|
||||||
public ApiResult<ZWM3A05VO> searchSAP(@Valid @RequestBody @NotNull zwm3A05QO request) {
|
public ApiResult<ZWM3A05VO> searchSAP(@Valid @RequestBody @NotNull zwm3A05QO request) {
|
||||||
ZWM3A05VO result = sapService.zwm3A05(request);
|
ZWM3A05VO result = sapService.zwm3A05(request);
|
||||||
result.getItems().parallelStream().forEach(it -> {
|
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);
|
return ApiResult.success(result);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -881,7 +881,7 @@ public class StructuralPackageOrderController extends BaseController {
|
||||||
log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
|
log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
|
||||||
} else {
|
} else {
|
||||||
it.setWarehouseNo(dto.getWarehouseNo());
|
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){
|
// if (dto.getTransportNum().compareTo(new BigDecimal(it.getNum()))<0){
|
||||||
// it.setNum(dto.getTransportNum().intValue());
|
// it.setNum(dto.getTransportNum().intValue());
|
||||||
// }
|
// }
|
||||||
|
|
|
||||||
|
|
@ -484,7 +484,7 @@ public class TransferCompanyController extends BaseController {
|
||||||
.setMatnr(item.getMatnr())
|
.setMatnr(item.getMatnr())
|
||||||
.setMaktx(item.getMaktx())
|
.setMaktx(item.getMaktx())
|
||||||
.setNum(item.getNum())
|
.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()
|
).toList()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
@ -515,7 +515,7 @@ public class TransferCompanyController extends BaseController {
|
||||||
.setSerialNo(record.getSerialNo())
|
.setSerialNo(record.getSerialNo())
|
||||||
.setFactoryNo(ticket.getWerks())
|
.setFactoryNo(ticket.getWerks())
|
||||||
.setWarehouseNo(qo.getLgort1())
|
.setWarehouseNo(qo.getLgort1())
|
||||||
.setBinNos(Objects.isNull(itemQo) ? Collections.emptyList() : StrUtil.split(itemQo.getBinNos(), "/"))
|
.setBinNo(Objects.isNull(itemQo) ? "" : itemQo.getBinNos())
|
||||||
.setUniqNo(record.getUniqNo())
|
.setUniqNo(record.getUniqNo())
|
||||||
.setRspos(record.getRspos())
|
.setRspos(record.getRspos())
|
||||||
.setNum(record.getNum())
|
.setNum(record.getNum())
|
||||||
|
|
|
||||||
|
|
@ -212,8 +212,8 @@ public class TransferFactoryController extends BaseController {
|
||||||
.setLgort(order.getLgort())
|
.setLgort(order.getLgort())
|
||||||
.setNum(item.getLeft())
|
.setNum(item.getLeft())
|
||||||
.setMeins(item.getMeins())
|
.setMeins(item.getMeins())
|
||||||
.setBinIn(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getUmlgo())))
|
.setBinIn(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getUmlgo())))
|
||||||
.setBinOut(StrUtil.join("/", storageService.getBinNos(item.getMatnr(), order.getWerks(), order.getLgort())));
|
.setBinOut(StrUtil.join("/", storageService.getBinNo(item.getMatnr(), order.getWerks(), order.getLgort())));
|
||||||
vo.setQiTao(type > 0);
|
vo.setQiTao(type > 0);
|
||||||
if (Objects.equals(type, 1)) {
|
if (Objects.equals(type, 1)) {
|
||||||
vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
|
vo.setChildren(bomService.getChildrenVO(item.getMatnr()));
|
||||||
|
|
@ -446,8 +446,8 @@ public class TransferFactoryController extends BaseController {
|
||||||
.setLgort(ticket.getLgort())
|
.setLgort(ticket.getLgort())
|
||||||
.setLgort1(ticket.getUmlgo())
|
.setLgort1(ticket.getUmlgo())
|
||||||
.setNum(it.getNum())
|
.setNum(it.getNum())
|
||||||
.setBinIn(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo())))
|
.setBinIn(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getUmlgo())))
|
||||||
.setBinOut(StrUtil.join("/", storageService.getBinNos(it.getMatnr(), ticket.getWerks(), ticket.getLgort())))
|
.setBinOut(StrUtil.join("/", storageService.getBinNo(it.getMatnr(), ticket.getWerks(), ticket.getLgort())))
|
||||||
).toList())
|
).toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -479,12 +479,13 @@ public class TransferFactoryController extends BaseController {
|
||||||
.setSerialNo(record.getSerialNo())
|
.setSerialNo(record.getSerialNo())
|
||||||
.setFactoryNo(ticket.getWerks())
|
.setFactoryNo(ticket.getWerks())
|
||||||
.setWarehouseNo(qo.getLgort1())
|
.setWarehouseNo(qo.getLgort1())
|
||||||
.setBinNos(StrUtil.split(qo.getItems()
|
.setBinNo(qo.getItems()
|
||||||
.stream()
|
.stream()
|
||||||
.filter(it -> Objects.equals(it.getId(), record.getTicketItemId()))
|
.filter(it -> Objects.equals(it.getId(), record.getTicketItemId()))
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.orElse(new InSubmitItemQO())
|
.orElse(new InSubmitItemQO())
|
||||||
.getBinNos(), "/"))
|
.getBinNos()
|
||||||
|
)
|
||||||
.setUniqNo(record.getUniqNo())
|
.setUniqNo(record.getUniqNo())
|
||||||
.setRspos(record.getRspos())
|
.setRspos(record.getRspos())
|
||||||
.setNum(record.getNum())
|
.setNum(record.getNum())
|
||||||
|
|
|
||||||
|
|
@ -17,22 +17,7 @@ public class BinService {
|
||||||
@Resource
|
@Resource
|
||||||
private IWmsStorageService storageService;
|
private IWmsStorageService storageService;
|
||||||
|
|
||||||
@Resource
|
public String getBinNo(String materialNo, String factory, String warehouseNo) {
|
||||||
private SapService sapService;
|
return storageService.getBinNo(materialNo, factory, warehouseNo);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,9 +45,9 @@ public class InMaterialScanRecord {
|
||||||
private String warehouseNo;
|
private String warehouseNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 储位列表
|
* 储位
|
||||||
*/
|
*/
|
||||||
private List<String> binNos;
|
private String binNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码内容
|
* 二维码内容
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.nflg.wms.common.pojo.qo;
|
package com.nflg.wms.common.pojo.qo;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
@ -16,15 +17,10 @@ public class InCostcenterBackSubmitItemQO {
|
||||||
@NotNull
|
@NotNull
|
||||||
private Long orderItemId;
|
private Long orderItemId;
|
||||||
|
|
||||||
/**
|
|
||||||
* 实际入库储位编号列表
|
|
||||||
*/
|
|
||||||
@NotBlank
|
|
||||||
private String binNos;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码列表
|
* 二维码列表
|
||||||
*/
|
*/
|
||||||
|
@Valid
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private List<String> qrCodes;
|
private List<InCostcenterBackSubmitItemQRQO> items;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package com.nflg.wms.common.pojo.qo;
|
package com.nflg.wms.common.pojo.qo;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotEmpty;
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
@ -21,6 +22,7 @@ public class InProduceBackSubmitQO {
|
||||||
/**
|
/**
|
||||||
* 二维码列表
|
* 二维码列表
|
||||||
*/
|
*/
|
||||||
|
@Valid
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private List<String> qrCodes;
|
private List<InCostcenterBackSubmitItemQRQO> items;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package com.nflg.wms.common.pojo.qo;
|
package com.nflg.wms.common.pojo.qo;
|
||||||
|
|
||||||
|
import jakarta.validation.Valid;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -17,15 +19,12 @@ public class InProduceOrderReceiveMaterialQO {
|
||||||
/**
|
/**
|
||||||
* 仓库编号
|
* 仓库编号
|
||||||
*/
|
*/
|
||||||
|
@NotBlank
|
||||||
private String warehouseNo;
|
private String warehouseNo;
|
||||||
|
|
||||||
/**
|
|
||||||
* 储位编号列表
|
|
||||||
*/
|
|
||||||
private String binNos;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 二维码列表
|
* 二维码列表
|
||||||
*/
|
*/
|
||||||
private List<String> qrCodes;
|
@Valid
|
||||||
|
private List<InCostcenterBackSubmitItemQRQO> items;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,5 +21,5 @@ public class InProduceOrderReceiveQO {
|
||||||
*/
|
*/
|
||||||
@Valid
|
@Valid
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private List<InProduceOrderReceiveMaterialQO> items;
|
private List<InProduceOrderReceiveMaterialQO> materials;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ public class InProduceOrderItemVO {
|
||||||
/**
|
/**
|
||||||
* 储位
|
* 储位
|
||||||
*/
|
*/
|
||||||
private String binNos;
|
private String binNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批次号
|
* 批次号
|
||||||
|
|
|
||||||
|
|
@ -76,4 +76,10 @@ public class OutProduceItemVO {
|
||||||
public boolean getUseChildren() {
|
public boolean getUseChildren() {
|
||||||
return CollectionUtil.isNotEmpty(children);
|
return CollectionUtil.isNotEmpty(children);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用储位管理
|
||||||
|
*/
|
||||||
|
@JsonProperty("isDisableLocation")
|
||||||
|
private Boolean isDisableLocation;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ public interface WmsStorageMapper extends BaseMapper<WmsStorage> {
|
||||||
|
|
||||||
List<String> getWarehouseNo(String factoryNo, String materialNo);
|
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();
|
List<StorageVO> searchNonSync();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,4 +32,6 @@ public interface WmsWarehouseMapper extends BaseMapper<WmsWarehouse> {
|
||||||
List<WarehouseVO> getListByIds(List<Long> list);
|
List<WarehouseVO> getListByIds(List<Long> list);
|
||||||
|
|
||||||
WarehouseVO getInfo(Long id);
|
WarehouseVO getInfo(Long id);
|
||||||
|
|
||||||
|
Boolean isEnableLocation(String factoryNo, String warehouseNo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ public interface IWmsStorageService extends IService<WmsStorage> {
|
||||||
|
|
||||||
List<String> getWarehouseNo(String factoryNo, String materialNo);
|
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();
|
List<StorageVO> searchNonSync();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -43,4 +43,6 @@ public interface IWmsWarehouseService extends IService<WmsWarehouse> {
|
||||||
List<WarehouseVO> getListByIds(List<Long> list);
|
List<WarehouseVO> getListByIds(List<Long> list);
|
||||||
|
|
||||||
WarehouseVO getInfo(Long id);
|
WarehouseVO getInfo(Long id);
|
||||||
|
|
||||||
|
Boolean isEnableLocation(String factoryNo, String warehouseNo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -102,8 +102,8 @@ public class WmsStorageServiceImpl extends ServiceImpl<WmsStorageMapper, WmsStor
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getBinNos(String materialNo, String factoryNo, String warehouseNo) {
|
public String getBinNo(String materialNo, String factoryNo, String warehouseNo) {
|
||||||
return new HashSet<>(StrUtil.split(baseMapper.getBinNos(materialNo,factoryNo,warehouseNo), ","));
|
return baseMapper.getBinNo(materialNo,factoryNo,warehouseNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -120,4 +120,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl<WmsWarehouseMapper, Wms
|
||||||
public WarehouseVO getInfo(Long id) {
|
public WarehouseVO getInfo(Long id) {
|
||||||
return baseMapper.getInfo(id);
|
return baseMapper.getInfo(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean isEnableLocation(String factoryNo, String warehouseNo) {
|
||||||
|
return baseMapper.isEnableLocation(factoryNo, warehouseNo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@
|
||||||
WHERE s.material_no = #{materialNo} and di."value" = #{factoryNo}
|
WHERE s.material_no = #{materialNo} and di."value" = #{factoryNo}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getBinNos" resultType="java.lang.String">
|
<select id="getBinNo" resultType="java.lang.String">
|
||||||
SELECT bin.no
|
SELECT bin.no
|
||||||
FROM wms_storage s
|
FROM wms_storage s
|
||||||
INNER JOIN wms_bin bin ON s.bin_id = bin.id
|
INNER JOIN wms_bin bin ON s.bin_id = bin.id
|
||||||
|
|
|
||||||
|
|
@ -77,4 +77,11 @@
|
||||||
left join dictionary_item di on w.factory_id = di.id
|
left join dictionary_item di on w.factory_id = di.id
|
||||||
where w.id = #{id}
|
where w.id = #{id}
|
||||||
</select>
|
</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>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -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.ShipmentMaterialCodeQRVO;
|
||||||
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
import com.nflg.wms.common.pojo.vo.ShipmentMaterialCodeItemVO;
|
||||||
import com.nflg.wms.common.util.EecExcelUtil;
|
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.UserUtil;
|
||||||
import com.nflg.wms.common.util.VUtil;
|
import com.nflg.wms.common.util.VUtil;
|
||||||
import com.nflg.wms.repository.entity.*;
|
import com.nflg.wms.repository.entity.*;
|
||||||
|
|
@ -113,12 +114,35 @@ public class MaterialCodeController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* 清单-删除
|
* 清单-删除
|
||||||
*/
|
*/
|
||||||
|
@Transactional
|
||||||
@PostMapping("delete")
|
@PostMapping("delete")
|
||||||
public ApiResult<Void> delete(@RequestBody @NotEmpty List<Long> ids) {
|
public ApiResult<Void> delete(@RequestBody @NotEmpty List<Long> ids) {
|
||||||
materialCodeService.lambdaUpdate()
|
List<Long> idsForDelete = materialCodeService.lambdaQuery()
|
||||||
|
.select(WmsShipmentMaterialCode::getId)
|
||||||
.eq(WmsShipmentMaterialCode::getStatus, 0)
|
.eq(WmsShipmentMaterialCode::getStatus, 0)
|
||||||
.in(WmsShipmentMaterialCode::getId, ids)
|
.in(WmsShipmentMaterialCode::getId, ids)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(WmsShipmentMaterialCode::getId)
|
||||||
|
.toList();
|
||||||
|
if (CollectionUtil.isNotEmpty(idsForDelete)) {
|
||||||
|
materialCodeService.removeByIds(idsForDelete);
|
||||||
|
materialCodeForwardService.lambdaUpdate()
|
||||||
|
.in(WmsShipmentMaterialCodeForward::getMaterialCodeId)
|
||||||
.remove();
|
.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();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -193,21 +217,21 @@ public class MaterialCodeController extends BaseController {
|
||||||
log.debug("第{}行:{}", row.getRowNum(), row);
|
log.debug("第{}行:{}", row.getRowNum(), row);
|
||||||
if (row.getRowNum() == 1) {
|
if (row.getRowNum() == 1) {
|
||||||
materialCode.setCustomerName(row.getString(2));
|
materialCode.setCustomerName(row.getString(2));
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getCustomerName()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getCustomerName()))
|
||||||
.throwMessage("客户名称不能为空");
|
.throwMessage("客户名称不能为空");
|
||||||
} else if (row.getRowNum() == 2) {
|
} else if (row.getRowNum() == 2) {
|
||||||
materialCode.setDeviceNo(row.getString(2));
|
materialCode.setDeviceNo(row.getString(2));
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getDeviceNo()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getDeviceNo()))
|
||||||
.throwMessage("设备编号不能为空");
|
.throwMessage("设备编号不能为空");
|
||||||
materialCode.setOrderDate(row.getLocalDate(6).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
materialCode.setOrderDate(row.getLocalDate(6).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getOrderDate()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getOrderDate()))
|
||||||
.throwMessage("订单日期不能为空");
|
.throwMessage("订单日期不能为空");
|
||||||
} else if (row.getRowNum() == 3) {
|
} else if (row.getRowNum() == 3) {
|
||||||
materialCode.setSoNo(row.getString(2));
|
materialCode.setSoNo(row.getString(2));
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getSoNo()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getSoNo()))
|
||||||
.throwMessage("销售订单号不能为空");
|
.throwMessage("销售订单号不能为空");
|
||||||
materialCode.setMaterialNo(row.getString(6));
|
materialCode.setMaterialNo(row.getString(6));
|
||||||
VUtil.trueThrowBusinessError(StrUtil.isNotBlank(materialCode.getMaterialNo()))
|
VUtil.trueThrowBusinessError(StrUtil.isBlank(materialCode.getMaterialNo()))
|
||||||
.throwMessage("设备料号不能为空");
|
.throwMessage("设备料号不能为空");
|
||||||
} else if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) {
|
} else if (row.getRowNum() > 4 && StrUtil.isNotBlank(row.getString(1))) {
|
||||||
WmsShipmentMaterialCodeItem item = new WmsShipmentMaterialCodeItem();
|
WmsShipmentMaterialCodeItem item = new WmsShipmentMaterialCodeItem();
|
||||||
|
|
@ -225,6 +249,8 @@ public class MaterialCodeController extends BaseController {
|
||||||
item.setBoxNo(row.getString(9));
|
item.setBoxNo(row.getString(9));
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
item.setCreateTime(LocalDateTime.now());
|
item.setCreateTime(LocalDateTime.now());
|
||||||
|
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
||||||
|
item.setPackingLeft(item.getPackingNum());
|
||||||
items.add(item);
|
items.add(item);
|
||||||
qrs.add(new WmsShipmentMaterialCodeItemQr()
|
qrs.add(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setItemId(item.getId())
|
.setItemId(item.getId())
|
||||||
|
|
@ -271,16 +297,18 @@ public class MaterialCodeController extends BaseController {
|
||||||
item.setId(IdUtil.getSnowflakeNextId());
|
item.setId(IdUtil.getSnowflakeNextId());
|
||||||
item.setCreateBy(UserUtil.getUserName());
|
item.setCreateBy(UserUtil.getUserName());
|
||||||
item.setCreateTime(LocalDateTime.now());
|
item.setCreateTime(LocalDateTime.now());
|
||||||
BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
||||||
BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
||||||
item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
||||||
|
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
||||||
item.setPackingLeft(item.getPackingNum());
|
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++) {
|
for (int i = 1; i <= item.getPackingNum(); i++) {
|
||||||
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setItemId(item.getId())
|
.setItemId(item.getId())
|
||||||
.setNo(KeyUtil.next())
|
.setNo(KeyUtil.next())
|
||||||
.setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
|
// .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum())
|
||||||
|
.setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i))
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
);
|
);
|
||||||
|
|
@ -318,16 +346,17 @@ public class MaterialCodeController extends BaseController {
|
||||||
materialCodeItemQrService.lambdaUpdate()
|
materialCodeItemQrService.lambdaUpdate()
|
||||||
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
.eq(WmsShipmentMaterialCodeItemQr::getItemId, item.getId())
|
||||||
.remove();
|
.remove();
|
||||||
BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
// BigDecimal result = item.getNum().divide(item.getMinPackagingNum(), 3, RoundingMode.HALF_UP);
|
||||||
BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
// BigDecimal decimalValue = result.remainder(BigDecimal.ONE);
|
||||||
item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
// item.setPackingNum(decimalValue.compareTo(BigDecimal.ZERO) > 0 ? result.intValue() + 1 : result.intValue());
|
||||||
|
item.setPackingNum(NumberUtil.calculateLabelNum(item.getNum(), item.getMinPackagingNum()));
|
||||||
item.setPackingLeft(item.getPackingNum());
|
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++) {
|
for (int i = 1; i <= item.getPackingNum(); i++) {
|
||||||
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr()
|
||||||
.setItemId(item.getId())
|
.setItemId(item.getId())
|
||||||
.setNo(KeyUtil.next())
|
.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())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now())
|
.setCreateTime(LocalDateTime.now())
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue