| | |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.AsnExceStatus; |
| | | import com.vincent.rsf.server.manager.enums.PakinIOStatus; |
| | | import com.vincent.rsf.server.manager.enums.QlyIsptResult; |
| | | import com.vincent.rsf.server.manager.enums.QlyIsptStatus; |
| | | import com.vincent.rsf.server.manager.mapper.*; |
| | | import com.vincent.rsf.server.manager.service.*; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R receiptToWarehouse(Map<String, Object> params, Long loginUserId) { |
| | | public synchronized R receiptToWarehouse(Map<String, Object> params, Long loginUserId) { |
| | | if (Objects.isNull(params)) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | |
| | | } |
| | | |
| | | List<ReceiptDetlsDto> receipts = receiptParam.getReceipts(); |
| | | List<WarehouseAreasItem> allOrders = new ArrayList<>(); |
| | | |
| | | Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum(); |
| | | |
| | |
| | | // if (dto.getReceiptQty().compareTo(dto.getAnfme()) > 0) { |
| | | // throw new CoolException("收货数量不能大于采购数量!!"); |
| | | // } |
| | | AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() |
| | | .eq(AsnOrderItem::getAsnCode, asnCode) |
| | | .eq(AsnOrderItem::getTrackCode, dto.getBarcode()) |
| | | .eq(AsnOrderItem::getMatnrId, dto.getMatnrId())); |
| | | // AsnOrderItem orderItem = asnOrderItemMapper.selectOne(new LambdaQueryWrapper<AsnOrderItem>() |
| | | // .eq(AsnOrderItem::getAsnCode, asnCode) |
| | | // .eq(AsnOrderItem::getId, dto.getId()) |
| | | // .eq(AsnOrderItem::getTrackCode, dto.getBarcode()) |
| | | // .eq(AsnOrderItem::getSplrBatch, dto.getSplrBatch())); |
| | | |
| | | AsnOrderItem orderItem = asnOrderItemMapper.resultById(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getId, dto.getId())); |
| | | |
| | | if (Objects.isNull(orderItem)) { |
| | | throw new CoolException("通知单明细不存在!!"); |
| | | } |
| | |
| | | } |
| | | Double itemRcptQty = dto.getReceiptQty() + orderItem.getQty(); |
| | | orderItem.setQty(itemRcptQty) |
| | | .setSplrBatch(dto.getSplrBatch()) |
| | | // .setSplrBatch(dto.getSplrBatch()) |
| | | .setUpdateBy(loginUserId) |
| | | .setStockUnit(dto.getStockUnit()) |
| | | .setProdTime(dto.getProdTime()); |
| | | |
| | |
| | | if (asnOrderItemMapper.updateById(orderItem) < 1) { |
| | | throw new CoolException("通知单明细数量修改失败!!"); |
| | | } |
| | | |
| | | WarehouseAreasItem item = new WarehouseAreasItem(); |
| | | // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | // String format = null; |
| | | // if (Objects.isNull(dto.getProdTime())) { |
| | | // format = dateFormat.format(dto.getProdTime()); |
| | | // } |
| | | item.setTrackCode(dto.getBarcode()) |
| | | .setAreaName(areasItem.getName()) |
| | | .setAreaId(areasItem.getId()) |
| | | .setAsnItemId(orderItem.getId()) |
| | | .setAsnCode(asnOrder.getCode()) |
| | | .setAsnId(asnOrder.getId()) |
| | | .setProdTime(dto.getProdTime()) |
| | | .setWeight(dto.getWeigth()) |
| | | //库存单位为最小单位 |
| | | .setUnit(orderItem.getStockUnit()) |
| | | .setStockUnit(orderItem.getStockUnit()) |
| | | .setBatch(StringUtils.isBlank(orderItem.getBatch()) ? SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto) : orderItem.getBatch()) |
| | | .setAnfme(dto.getReceiptQty()) |
| | | .setSplrBatch(dto.getSplrBatch()) |
| | | .setMatnrCode(matnr.getCode()) |
| | | .setUpdateBy(loginUserId) |
| | | .setCreateBy(loginUserId) |
| | | .setMatnrId(matnr.getId()) |
| | | .setMaktx(matnr.getName()) |
| | | .setWeight(matnr.getWeight()) |
| | | .setFieldsIndex(orderItem.getFieldsIndex()) |
| | | .setShipperId(matnr.getShipperId()); |
| | | //TODO 供应商标识未设置,标识由PO单供应商编码转换 |
| | | |
| | | WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>() |
| | | .eq(WarehouseAreasItem::getAsnItemId, item.getAsnItemId()) |
| | | .eq(WarehouseAreasItem::getTrackCode, item.getTrackCode()) |
| | | .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch())); |
| | | if (!Objects.isNull(serviceOne)) { |
| | | item.setAnfme(item.getAnfme() + serviceOne.getAnfme()); |
| | | item.setId(serviceOne.getId()); |
| | | } |
| | | |
| | | if (!warehouseAreasItemService.saveOrUpdate(item)) { |
| | | throw new CoolException("收货失败!!"); |
| | | } |
| | | /**保存明细至收货区**/ |
| | | extracted(loginUserId, dto, areasItem, orderItem, asnOrder, matnr); |
| | | |
| | | } |
| | | |
| | | // if (!warehouseAreasItemService.saveBatch(allOrders)) { |
| | | // throw new CoolException("收货失败!!"); |
| | | // } |
| | | // //获取采购数量 |
| | | // double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); |
| | | AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getCode, asnCode)); |
| | | if (order.getQty().compareTo(order.getAnfme()) >= 0.00) { |
| | | order.setExceStatus(AsnExceStatus.ASN_EXCE_STATUS_RECEIPT_DONE.val).setRleStatus(Short.valueOf("1")); |
| | | if (!asnOrderMapper.updateById(order)) { |
| | | throw new CoolException("订单状态修改失败!!"); |
| | | } |
| | | } |
| | | |
| | | return R.ok("收货成功!!"); |
| | | } |
| | | |
| | | private void extracted(Long loginUserId, ReceiptDetlsDto dto, WarehouseAreas areasItem, AsnOrderItem orderItem, AsnOrder asnOrder, Matnr matnr) { |
| | | WarehouseAreasItem item = new WarehouseAreasItem(); |
| | | item.setTrackCode(dto.getBarcode()) |
| | | .setAreaName(areasItem.getName()) |
| | | .setAreaId(areasItem.getId()) |
| | | .setAsnItemId(orderItem.getId()) |
| | | .setAsnCode(asnOrder.getCode()) |
| | | .setAsnId(asnOrder.getId()) |
| | | .setProdTime(dto.getProdTime()) |
| | | .setWeight(dto.getWeigth()) |
| | | //库存单位为最小单位 |
| | | .setUnit(orderItem.getStockUnit()) |
| | | .setStockUnit(orderItem.getStockUnit()) |
| | | .setBatch(StringUtils.isBlank(orderItem.getBatch()) ? SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_RECEIPT_BATCH, dto) : orderItem.getBatch()) |
| | | .setAnfme(dto.getReceiptQty()) |
| | | .setSplrBatch(dto.getSplrBatch()) |
| | | .setMatnrCode(matnr.getCode()) |
| | | .setUpdateBy(loginUserId) |
| | | .setCreateBy(loginUserId) |
| | | .setMatnrId(matnr.getId()) |
| | | .setMaktx(matnr.getName()) |
| | | .setWeight(matnr.getWeight()) |
| | | .setFieldsIndex(orderItem.getFieldsIndex()) |
| | | .setShipperId(matnr.getShipperId()); |
| | | //TODO 供应商标识未设置,标识由PO单供应商编码转换 |
| | | WarehouseAreasItem serviceOne = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>() |
| | | .eq(WarehouseAreasItem::getAsnItemId, item.getAsnItemId()) |
| | | .eq(WarehouseAreasItem::getTrackCode, item.getTrackCode()) |
| | | .eq(StringUtils.isNotBlank(item.getSplrBatch()), WarehouseAreasItem::getSplrBatch, item.getSplrBatch())); |
| | | if (!Objects.isNull(serviceOne)) { |
| | | item.setAnfme(item.getAnfme() + serviceOne.getAnfme()); |
| | | } |
| | | |
| | | //未质检 |
| | | if (!warehouseAreasItemService.saveOrUpdate(item)) { |
| | | throw new CoolException("收货失败!!"); |
| | | } |
| | | |
| | | // if (null != orderItem.getSafeQty() || null != orderItem.getDisQty() ) { |
| | | // |
| | | // BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty)); |
| | | // //判断已收货数量是否小于等于采购数量 |
| | | // if (subtract.compareTo(new BigDecimal("0.0")) <= 0) { |
| | | // asnOrder.setRleStatus(Short.valueOf("1")); |
| | | // //日志表操作 |
| | | // operateOrderLogs(asnOrder); |
| | | // } |
| | | return R.ok(asnOrder); |
| | | // else { |
| | | // //不合格数量 |
| | | // if (orderItem.getDisQty().compareTo(0.00) > 0) { |
| | | // item.setIsptQty(orderItem.getDisQty()).setFlagNorm(QlyIsptResult.QLY_ISPT_RESULT_DEFECT.val); |
| | | // if (!warehouseAreasItemService.saveOrUpdate(item)) { |
| | | // throw new CoolException("收货失败!!"); |
| | | // } |
| | | // } |
| | | // |
| | | // item.setIsptQty(orderItem.getSafeQty()).setFlagNorm(QlyIsptResult.QLY_ISPT_RESULT_EXCELLENT.val); |
| | | // if (!warehouseAreasItemService.saveOrUpdate(item)) { |
| | | // throw new CoolException("收货失败!!"); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>() |
| | | .eq(AsnOrderItem::getAsnCode, params.getAsnCode()) |
| | | .eq(!Objects.isNull(params.getTrackCode()), AsnOrderItem::getTrackCode, params.getTrackCode())); |
| | | .eq(!Objects.isNull(params.getTrackCode()), AsnOrderItem::getTrackCode, params.getTrackCode()) |
| | | .eq(!Cools.isEmpty(params.getMatnrCode()), AsnOrderItem::getMatnrCode, params.getMatnrCode()) |
| | | ); |
| | | |
| | | if (Objects.isNull(asnOrderItem)) { |
| | | throw new CoolException("单据明细不存在!!"); |
| | |
| | | * @time 2025/4/7 16:58 |
| | | */ |
| | | @Override |
| | | public R getDeltByCode(String code) { |
| | | public R getDeltByCode(Map<String, Object> params) { |
| | | Object code = params.get("code"); |
| | | Object matnrCode = params.get("matnrCode"); |
| | | String batch = null; |
| | | if (!Objects.isNull(params.get("batch"))) { |
| | | batch = params.get("batch").toString(); |
| | | } |
| | | //TODO 后续需根据策略配置,获取组拖数据。如:混装,按批次混装等 |
| | | LambdaQueryWrapper<WarehouseAreasItem> queryWrapper = new QueryWrapper<WarehouseAreasItem>() |
| | | .select("SUM(anfme) as anfme, track_code, asn_code, id, splr_batch, ispt_result, plat_item_id, batch,unit, stock_unit, qty, work_qty, matnr_code, matnr_id, maktx").lambda() |
| | | .eq(WarehouseAreasItem::getTrackCode, code) |
| | | .eq(!Objects.isNull(code), WarehouseAreasItem::getTrackCode, code) |
| | | .eq(StringUtils.isNotBlank(batch), WarehouseAreasItem::getSplrBatch, batch) |
| | | .eq(!Objects.isNull(matnrCode), WarehouseAreasItem::getMatnrCode, matnrCode) |
| | | .groupBy(WarehouseAreasItem::getSplrBatch, WarehouseAreasItem::getAsnId, WarehouseAreasItem::getAreaId, WarehouseAreasItem::getMatnrId); |
| | | return R.ok(warehouseAreasItemService.getOne(queryWrapper)); |
| | | return R.ok(warehouseAreasItemService.list(queryWrapper)); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public WaitPakin mergeItems(WaitPakinParam waitPakin, Long userId) { |
| | | return waitPakinService.mergeItems(waitPakin, userId); |
| | | } |
| | | |
| | | @Override |
| | | public WaitPakin mergeMatnrItems(WaitPakinParam waitPakin, Long userId) { |
| | | return waitPakinService.mergeMatnrItems(waitPakin, userId); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R publicToStock(PublicToStockParams params, Long loginUserId) { |
| | | public synchronized R publicToStock(PublicToStockParams params, Long loginUserId) { |
| | | if (Objects.isNull(params.getLocCode()) || StringUtils.isBlank(params.getLocCode())) { |
| | | throw new CoolException("库位不能为空!!"); |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public R taskGetLocs(String code) throws Exception { |
| | | public synchronized R taskGetLocs(String code) throws Exception { |
| | | if (StringUtils.isBlank(code)) { |
| | | throw new CoolException("拖盘码不能为空!!"); |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public R getItemByContainer(Map<String, Object> params) { |
| | | if (Objects.isNull(params.get("code"))) { |
| | | throw new CoolException("参数不能为空!!"); |
| | | } |
| | | //获取组拖未生成任务的组拖档 |
| | | List<Short> asList = Arrays.asList(Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val), Short.valueOf(PakinIOStatus.PAKIN_IO_STATUS_DONE.val)); |
| | | Short flagDefect = 0; |
| | |
| | | * @description 生成任务列表 |
| | | */ |
| | | @Override |
| | | public R generateTask(Map<String, Object> map, Long loginUserId) { |
| | | public synchronized R generateTask(Map<String, Object> map, Long loginUserId) { |
| | | String barcode = map.get("barcode").toString(); |
| | | List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, barcode)); |
| | | if (waitPakins.isEmpty()) { |
| | |
| | | ReceiptDetlsDto detlsDto = new ReceiptDetlsDto(); |
| | | |
| | | detlsDto.setAsnCode(asnOrderItem.getAsnCode()) |
| | | .setId(asnOrderItem.getId()) |
| | | .setMaktx(asnOrderItem.getMaktx()) |
| | | .setFieldsIndex(asnOrderItem.getFieldsIndex()) |
| | | .setBarcode(asnOrderItem.getTrackCode()) |
| | |
| | | .setPoCode(asnOrderItem.getPoCode()) |
| | | .setAnfme(asnOrderItem.getAnfme()) |
| | | .setPurQty(asnOrderItem.getPurQty()) |
| | | .setSplrBatch(asnOrderItem.getSplrBatch()); |
| | | .setSplrBatch(asnOrderItem.getSplrBatch()) |
| | | .setMatnr(asnOrderItem.getMatnrCode()) |
| | | .setInspect(asnOrderItem.getIsptResult$()) //质检结果 |
| | | ; |
| | | |
| | | Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); |
| | | if (Objects.isNull(matnr)) { |
| | |
| | | //SET 物料最大存放数量 |
| | | detlsDto.setMaxQty(matnr.getMaxQty()) |
| | | .setMatnrId(matnr.getId()); |
| | | QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() |
| | | .eq(QlyInspect::getAsnId, asnOrderItem.getAsnId())); |
| | | if (!Objects.isNull(inspect)) { |
| | | //set 质检结果 |
| | | detlsDto.setInspect(inspect.getStatus$()); |
| | | } |
| | | // QlyInspect inspect = qlyInspectMapper.selectOne(new LambdaQueryWrapper<QlyInspect>() |
| | | // .eq(QlyInspect::getAsnId, asnOrderItem.getAsnId())); |
| | | // if (!Objects.isNull(inspect)) { |
| | | // //set 质检结果 |
| | | // detlsDto.setInspect(inspect.getStatus$()); |
| | | // } |
| | | //获取当前库存信息 |
| | | LocItem stockItem = locItemService.getOne(new LambdaQueryWrapper<LocItem>() |
| | | // .eq(LocItem::getOrderItemId, asnOrderItem.getId()) |