新增无码收货-生产订单副产品功能
This commit is contained in:
parent
abdfe65261
commit
4b546578ea
|
|
@ -6,9 +6,11 @@ import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
|
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
|
||||||
|
import com.nflg.wms.admin.pojo.request.NoScanningRequest;
|
||||||
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
|
import com.nflg.wms.admin.repository.InMaterialScanRecordRespository;
|
||||||
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
|
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
|
||||||
import com.nflg.wms.admin.service.BinService;
|
import com.nflg.wms.admin.service.BinService;
|
||||||
|
import com.nflg.wms.admin.service.NoScanningBaseControllerService;
|
||||||
import com.nflg.wms.admin.service.SapService;
|
import com.nflg.wms.admin.service.SapService;
|
||||||
import com.nflg.wms.admin.util.*;
|
import com.nflg.wms.admin.util.*;
|
||||||
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
import com.nflg.wms.common.constant.BarCodeProcessStage;
|
||||||
|
|
@ -120,6 +122,9 @@ public class InProduceOrderController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private IOptRecordService optRecordService;
|
private IOptRecordService optRecordService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private NoScanningBaseControllerService noScanningBaseControllerService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从SAP查询生产订单信息
|
* 从SAP查询生产订单信息
|
||||||
* @param no 生产订单号
|
* @param no 生产订单号
|
||||||
|
|
@ -222,6 +227,67 @@ public class InProduceOrderController extends BaseController {
|
||||||
return ApiResult.success(order.getId());
|
return ApiResult.success(order.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 无码保存
|
||||||
|
* @param request 请求参数
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@PostMapping("saveNoScanning")
|
||||||
|
public ApiResult<Long> saveNoScanning(@Valid @RequestBody InProduceOrderGenerateMaterialsQO request) {
|
||||||
|
return ApiResult.success(saveNoScanningOrder(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Long saveNoScanningOrder(InProduceOrderGenerateMaterialsQO request) {
|
||||||
|
WmsInProduceOrder order = new WmsInProduceOrder()
|
||||||
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
|
.setDataType(request.getDataType())
|
||||||
|
.setNo(serialNumberControllerService.generateSerialNumber(8))
|
||||||
|
.setOrderNo(request.getAufnr())
|
||||||
|
.setList(request.getList())
|
||||||
|
.setCreateBy(UserUtil.getUserName())
|
||||||
|
.setCreateTime(LocalDateTime.now());
|
||||||
|
produceOrderService.save(order);
|
||||||
|
String date = DateTimeUtil.format(LocalDate.now(), "yyMMdd");
|
||||||
|
stringRedisTemplate.opsForValue().setIfAbsent("index:batchNo:" + date, "0", 24 - LocalDateTime.now().getHour(), TimeUnit.HOURS);
|
||||||
|
String index = StrUtil.padPre(String.valueOf(stringRedisTemplate.opsForValue().increment("index:batchNo:" + date)), 4, "0");
|
||||||
|
WmsInProduceOrderItem parent = new WmsInProduceOrderItem()
|
||||||
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
|
.setOrderId(order.getId())
|
||||||
|
.setParentId(0L)
|
||||||
|
.setNum(request.getNum())
|
||||||
|
.setMaterialNo(request.getMatnr())
|
||||||
|
.setMaterialDesc(request.getMaktx())
|
||||||
|
.setUnit(request.getMeins())
|
||||||
|
.setFactoryNo(request.getPwerk())
|
||||||
|
.setWarehouseNo(request.getLgort())
|
||||||
|
.setOrderNum(request.getPsmng())
|
||||||
|
.setBatchNo(date + index)
|
||||||
|
.setSernr(request.getSernr());
|
||||||
|
produceOrderItemService.save(parent);
|
||||||
|
if (request.getList()) {
|
||||||
|
List<WmsBom> children = bomService.getChildren(request.getMatnr());
|
||||||
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(children)).throwMessage("请先添加齐套物料");
|
||||||
|
List<WmsInProduceOrderItem> items = children.stream()
|
||||||
|
.map(it -> new WmsInProduceOrderItem()
|
||||||
|
.setId(IdUtil.getSnowflakeNextId())
|
||||||
|
.setOrderId(order.getId())
|
||||||
|
.setParentId(parent.getId())
|
||||||
|
.setNum(it.getNum())
|
||||||
|
.setMaterialNo(it.getNo())
|
||||||
|
.setMaterialDesc(it.getDescribe())
|
||||||
|
.setUnit(request.getMeins())
|
||||||
|
.setFactoryNo(request.getPwerk())
|
||||||
|
.setWarehouseNo(request.getLgort())
|
||||||
|
.setOrderNum(request.getPsmng())
|
||||||
|
.setBatchNo(parent.getBatchNo())
|
||||||
|
.setSernr(request.getSernr())
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
produceOrderItemService.saveBatch(items);
|
||||||
|
}
|
||||||
|
return order.getId();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 搜索
|
* 搜索
|
||||||
* @param request 搜索参数
|
* @param request 搜索参数
|
||||||
|
|
@ -625,6 +691,127 @@ public class InProduceOrderController extends BaseController {
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 无码收货和入库(PDA使用)
|
||||||
|
* @param requests 请求参数
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
@PostMapping("receiveNoScanning")
|
||||||
|
public ApiResult<Void> receiveNoScanning(@Valid @RequestBody @NotEmpty List<NoScanningRequest> requests) {
|
||||||
|
List<WmsInProduceOrderItem> orderItems = produceOrderItemService.lambdaQuery()
|
||||||
|
.in(WmsInProduceOrderItem::getId, requests.stream().map(NoScanningRequest::getOrderItemId).distinct().toList())
|
||||||
|
.list();
|
||||||
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在");
|
||||||
|
VUtil.trueThrowBusinessError(orderItems.size() != requests.stream().map(NoScanningRequest::getOrderItemId).distinct().count())
|
||||||
|
.throwMessage("存在无效的订单项");
|
||||||
|
|
||||||
|
Set<Long> orderIds = orderItems.stream().map(WmsInProduceOrderItem::getOrderId).collect(Collectors.toSet());
|
||||||
|
VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货");
|
||||||
|
WmsInProduceOrder order = produceOrderService.getById(orderIds.iterator().next());
|
||||||
|
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
|
||||||
|
VUtil.trueThrowBusinessError(!Objects.equals(order.getState(), (short) 0))
|
||||||
|
.throwMessage("该订单非待收货状态");
|
||||||
|
|
||||||
|
Map<Long, WmsInProduceOrderItem> orderItemMap = orderItems.stream()
|
||||||
|
.collect(Collectors.toMap(WmsInProduceOrderItem::getId, item -> item));
|
||||||
|
List<InMaterialScanRecord> records = new ArrayList<>();
|
||||||
|
List<InventoryInDTO> inventories = new ArrayList<>();
|
||||||
|
requests.forEach(request -> {
|
||||||
|
WmsInProduceOrderItem orderItem = orderItemMap.get(request.getOrderItemId());
|
||||||
|
VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在");
|
||||||
|
VUtil.trueThrowBusinessError(!StrUtil.equals(request.getMaterialNo(), orderItem.getMaterialNo()))
|
||||||
|
.throwMessage("订单项与物料不匹配:" + request.getMaterialNo());
|
||||||
|
VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMaterialNo()))
|
||||||
|
.throwMessage("物料" + orderItem.getMaterialNo() + "已生成二维码,不允许无码收货");
|
||||||
|
|
||||||
|
BigDecimal totalNum = request.getItems().stream()
|
||||||
|
.peek(item -> VUtil.trueThrowBusinessError(Objects.isNull(item.getNum()) || item.getNum().compareTo(BigDecimal.ZERO) <= 0)
|
||||||
|
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量必须大于0"))
|
||||||
|
.map(item -> item.getNum())
|
||||||
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getNum()) != 0)
|
||||||
|
.throwMessage("物料" + orderItem.getMaterialNo() + "的无码收货数量与订单数量不一致");
|
||||||
|
|
||||||
|
request.getItems().forEach(item -> {
|
||||||
|
records.add(new InMaterialScanRecord()
|
||||||
|
.setSource(4)
|
||||||
|
.setSourceId(order.getId())
|
||||||
|
.setSourceItemId(orderItem.getId())
|
||||||
|
.setTicketItemId(orderItem.getId())
|
||||||
|
.setMaterialNo(orderItem.getMaterialNo())
|
||||||
|
.setMaterialDesc(orderItem.getMaterialDesc())
|
||||||
|
.setFactoryNo(orderItem.getFactoryNo())
|
||||||
|
.setWarehouseNo(orderItem.getWarehouseNo())
|
||||||
|
.setBinNo(StrUtil.blankToDefault(item.getBinNo(), ""))
|
||||||
|
.setContent("")
|
||||||
|
.setBatchNo(StrUtil.blankToDefault(item.getBatchNo(), ""))
|
||||||
|
.setSerialNo(StrUtil.blankToDefault(item.getSerialNo(), ""))
|
||||||
|
.setNum(item.getNum())
|
||||||
|
.setUnit(orderItem.getUnit())
|
||||||
|
.setUniqNo("NO_SCAN_" + IdUtil.getSnowflakeNextId())
|
||||||
|
.setCreateBy(UserUtil.getUserName())
|
||||||
|
.setCreateTime(Instant.now())
|
||||||
|
);
|
||||||
|
inventories.add(new InventoryInDTO()
|
||||||
|
.setMaterialNo(orderItem.getMaterialNo())
|
||||||
|
.setFactoryNo(orderItem.getFactoryNo())
|
||||||
|
.setWarehouseNo(orderItem.getWarehouseNo())
|
||||||
|
.setBatchNo(StrUtil.blankToDefault(item.getBatchNo(), ""))
|
||||||
|
.setSerialNo(StrUtil.blankToDefault(item.getSerialNo(), ""))
|
||||||
|
.setBinLocation("")
|
||||||
|
.setNum(item.getNum())
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
inventoryService.in(mergeInventories(inventories));
|
||||||
|
OptRecordDTO optRecordDTO = new OptRecordDTO();
|
||||||
|
optRecordDTO.setOperationType((short) 1)
|
||||||
|
.setOrderId(order.getNo());
|
||||||
|
optRecordService.add(optRecordDTO);
|
||||||
|
|
||||||
|
Zwm00Mb107DTO dto = sapService.zwm00_mb107(
|
||||||
|
order.getOrderNo(),
|
||||||
|
UserUtil.getUserName(),
|
||||||
|
records.stream().collect(Collectors.groupingBy(InMaterialScanRecord::getKey8))
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
|
.map(items -> new Zwm00Mb107QO()
|
||||||
|
.setPWERK(items.get(0).getFactoryNo())
|
||||||
|
.setPSMNG(items.stream().map(InMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
|
||||||
|
.setAMEIN(items.get(0).getUnit())
|
||||||
|
.setLGORT(items.get(0).getWarehouseNo())
|
||||||
|
.setCHARG(items.get(0).getBatchNo()))
|
||||||
|
.toList(),
|
||||||
|
records.stream().map(InMaterialScanRecord::getSerialNo).toList()
|
||||||
|
);
|
||||||
|
order.setMblnr(dto.getE_MBLNR());
|
||||||
|
order.setMjahr(dto.getE_MJAHR());
|
||||||
|
order.setState((short) 1);
|
||||||
|
order.setUpdateBy(UserUtil.getUserName());
|
||||||
|
order.setUpdateTime(LocalDateTime.now());
|
||||||
|
produceOrderService.updateById(order);
|
||||||
|
inMaterialScanRecordRespository.saveAll(records);
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<InventoryInDTO> mergeInventories(List<InventoryInDTO> inventories) {
|
||||||
|
return inventories.stream()
|
||||||
|
.collect(Collectors.groupingBy(InventoryInDTO::getKey))
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
|
.map(items -> new InventoryInDTO()
|
||||||
|
.setMaterialNo(items.get(0).getMaterialNo())
|
||||||
|
.setFactoryNo(items.get(0).getFactoryNo())
|
||||||
|
.setWarehouseNo(items.get(0).getWarehouseNo())
|
||||||
|
.setBatchNo(items.get(0).getBatchNo())
|
||||||
|
.setSerialNo(items.get(0).getSerialNo())
|
||||||
|
.setBinLocation(items.get(0).getBinLocation())
|
||||||
|
.setNum(items.stream().map(InventoryInDTO::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
|
||||||
|
)
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
// private void syncStorage(InProduceOrderItemVO it, Collection<String> binNos) {
|
// private void syncStorage(InProduceOrderItemVO it, Collection<String> binNos) {
|
||||||
// if (CollectionUtil.isEmpty(binNos))
|
// if (CollectionUtil.isEmpty(binNos))
|
||||||
// return;
|
// return;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue