rsf-admin/.env
@@ -1,3 +1,3 @@ VITE_BASE_IP=192.168.4.24 VITE_BASE_IP=127.0.0.1 # VITE_BASE_IP=47.76.147.249 VITE_BASE_PORT=8080 rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -264,4 +264,24 @@ return mobileService.completeOrder(id, getLoginUserId()); } @ApiOperation("获取不良托盘物料") @PostMapping("/defect/matnrs") @PreAuthorize("hasAuthority('manager:asnOrder:list')") public R getAsnDefectItemByCode(@RequestBody Map<String, Object> map) { if (Objects.isNull(map)) { return R.error("参数不能为空!!"); } return mobileService.getItemByContainer(map); } @ApiOperation("获取订单不良物料") @PostMapping("/defect/{trackCode}") @PreAuthorize("hasAuthority('manager:asnOrder:list')") public R defectProducts(@PathVariable String trackCode) { if (Objects.isNull(trackCode)) { return R.error("参数不能为空!!"); } return mobileService.defectProducts(trackCode); } } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/MatnrDefectType.java
New file @@ -0,0 +1,26 @@ package com.vincent.rsf.server.api.entity.enums; /** * @author Ryan * @version 1.0 * @title MatnrDefectType * @description * @create 2025/4/12 09:34 */ public enum MatnrDefectType { //物料不良类型 MATNR_DEFECT_NORMAL("0", "正常"), MATNR_DEFECT_FIX("1", "待返修"), MATNR_DEFECT_SCRAP("2", "待报废"), MATNR_DEFECT_DEGRADE("3", "待降级"), MATNR_DEFECT_PENDING("4", "待定"), ; MatnrDefectType(String type, String desc) { this.type = Short.parseShort(type); this.val = desc; } public Short type; public String val; } rsf-server/src/main/java/com/vincent/rsf/server/api/service/MobileService.java
@@ -61,4 +61,6 @@ R completeOrder(Long id, Long loginUserId); R getItemByContainer(Map<String, Object> params); R defectProducts(String trackCode); } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -740,8 +740,13 @@ public R getItemByContainer(Map<String, Object> params) { //获取组拖未生成任务的组拖档 List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)); Short flagDefect = 0; if (!Objects.isNull(params.get("type")) && params.get("type").equals("defective")) { flagDefect = 1; } WaitPakin waitPakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>() .eq(WaitPakin::getBarcode, params.get("barcode").toString()) .eq(WaitPakin::getFlagDefect, flagDefect) .in(WaitPakin::getIoStatus, asList)); if (Objects.isNull(waitPakin)) { return R.ok(new ArrayList<>()); @@ -751,22 +756,39 @@ if (pakinItems.isEmpty()) { return R.ok(new ArrayList<>()); } List<String> list = pakinItems.stream().map(WaitPakinItem::getTrackCode).collect(Collectors.toList()); LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx") .lambda() .in(WarehouseAreasItem::getTrackCode, list) .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getTrackCode); List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper); for (int i = 0; i < warehouseAreasItems.size(); i++) { for (WaitPakinItem pakinItem : pakinItems) { if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) { warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme()); if (!Objects.isNull(params.get("type")) && params.get("type").equals("defective")) { return R.ok(pakinItems); } else { List<String> list = pakinItems.stream().map(WaitPakinItem::getTrackCode).collect(Collectors.toList()); LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx") .lambda() .in(WarehouseAreasItem::getTrackCode, list) .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getTrackCode); List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper); for (int i = 0; i < warehouseAreasItems.size(); i++) { for (WaitPakinItem pakinItem : pakinItems) { if (warehouseAreasItems.get(i).getTrackCode().equals(pakinItem.getTrackCode())) { warehouseAreasItems.get(i).setAnfme(pakinItem.getAnfme()); } } } return R.ok(warehouseAreasItems); } return R.ok(warehouseAreasItems); } /** * @author Ryan * @description 不良标签 * @param * @return * @time 2025/4/12 08:12 */ @Override public R defectProducts(String trackCode) { AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, trackCode)); return R.ok(orderItem); } /** rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/WaitPakinParam.java
@@ -19,5 +19,8 @@ @ApiModelProperty("跟踪码") private List<PakinItem> items; @ApiModelProperty("组拖类型{null: 组拖, defective: 不良品}") private String type; } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakin.java
@@ -62,6 +62,12 @@ private Short ioStatus; /** * 是否不良品 */ @ApiModelProperty("是否不良品") private Short flagDefect; /** * 状态 1: 正常 0: 冻结 */ @ApiModelProperty(value= "状态 1: 正常 0: 冻结 ") rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -107,48 +107,69 @@ throw new CoolException("原单据清除失败!!"); } } LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx") .lambda() .in(WarehouseAreasItem::getTrackCode, tracks) .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getTrackCode); List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper); if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) { throw new CoolException("物料未送至收货区!!"); } List<WaitPakinItem> items = new ArrayList<>(); for (WarehouseAreasItem item : warehouseAreasItems) { WaitPakinItem pakinItem = new WaitPakinItem(); pakinItem.setAnfme(item.getAnfme()) .setPakinId(waitPakin1.getId()) .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setFieldsIndex(item.getFieldsIndex()) .setMatnrId(item.getMatnrId()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()); for (PakinItem waitPakinItem : waitPakin.getItems()) { if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) { if (waitPakinItem.getReceiptQty() > item.getAnfme()) { throw new CoolException("组拖数量不能大于收货数量!!"); } pakinItem .setAnfme(waitPakinItem.getReceiptQty()) .setTrackCode(waitPakinItem.getTrackCode()); /**更新单据执行中库存*/ // if (v.compareTo(item.getAnfme()) > 0) {throw new CoolException("执行中数量大于收货数量!!");} // if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>() // .eq(AsnOrderItem::getTrackCode, waitPakinItem.getTrackCode()).set(AsnOrderItem::getWorkQty, v))) { // throw new CoolException("执行中库存更新失败!!"); // } } if (!Objects.isNull(waitPakin.getType()) && waitPakin.getType().equals("defective")) { List<AsnOrderItem> orderItems = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().in(AsnOrderItem::getTrackCode, tracks)); if (Objects.isNull(orderItems) || orderItems.isEmpty()) { throw new CoolException("单据不存在!!"); } items.add(pakinItem); for (AsnOrderItem item : orderItems) { WaitPakinItem pakinItem = new WaitPakinItem(); pakinItem.setAnfme(item.getAnfme()) .setPakinId(waitPakin1.getId()) .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setFieldsIndex(item.getFieldsIndex()) .setMatnrId(item.getMatnrId()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()); for (PakinItem waitPakinItem : waitPakin.getItems()) { if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) { if (waitPakinItem.getReceiptQty() > item.getAnfme()) { throw new CoolException("组拖数量不能大于收货数量!!"); } pakinItem.setAnfme(waitPakinItem.getReceiptQty()).setTrackCode(waitPakinItem.getTrackCode()); } } items.add(pakinItem); } } else { LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch, qty, work_qty, matnr_code, matnr_id, maktx") .lambda() .in(WarehouseAreasItem::getTrackCode, tracks) .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getTrackCode); List<WarehouseAreasItem> warehouseAreasItems = warehouseAreasItemService.list(queryWrapper); if (Objects.isNull(warehouseAreasItems) || warehouseAreasItems.isEmpty()) { throw new CoolException("物料未送至收货区!!"); } for (WarehouseAreasItem item : warehouseAreasItems) { WaitPakinItem pakinItem = new WaitPakinItem(); pakinItem.setAnfme(item.getAnfme()) .setPakinId(waitPakin1.getId()) .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setFieldsIndex(item.getFieldsIndex()) .setMatnrId(item.getMatnrId()) .setMaktx(item.getMaktx()) .setMatnrCode(item.getMatnrCode()); for (PakinItem waitPakinItem : waitPakin.getItems()) { if (waitPakinItem.getTrackCode().equals(item.getTrackCode())) { if (waitPakinItem.getReceiptQty() > item.getAnfme()) { throw new CoolException("组拖数量不能大于收货数量!!"); } pakinItem.setAnfme(waitPakinItem.getReceiptQty()).setTrackCode(waitPakinItem.getTrackCode()); } } items.add(pakinItem); } } double sum1 = items.stream().mapToDouble(WaitPakinItem::getAnfme).sum(); if (!waitPakinItemService.saveBatch(items)) { rsf-server/src/main/resources/application-dev.yml
@@ -14,7 +14,7 @@ driver-class-name: com.mysql.jdbc.Driver # url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root url: jdbc:mysql://192.168.4.24:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # username: rsf password: 34821015 type: com.alibaba.druid.pool.DruidDataSource