package com.chinaztt.mes.warehouse.util; import cn.hutool.core.util.BooleanUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; import com.chinaztt.mes.basic.dto.LocationIfsMoveDTO; import com.chinaztt.mes.basic.entity.Location; import com.chinaztt.mes.basic.entity.Part; import com.chinaztt.mes.basic.entity.WorkstationLocation; import com.chinaztt.mes.basic.mapper.LocationMapper; import com.chinaztt.mes.basic.mapper.PartMapper; import com.chinaztt.mes.basic.mapper.WorkstationLocationMapper; import com.chinaztt.mes.basic.service.LocationService; import com.chinaztt.mes.common.numgen.NumberGenerator; import com.chinaztt.mes.warehouse.dto.StockAddDTO; import com.chinaztt.mes.warehouse.dto.StockDTO; import com.chinaztt.mes.warehouse.entity.*; import com.chinaztt.mes.warehouse.mapper.*; import com.chinaztt.ztt.common.core.util.R; import com.google.common.base.Enums; import lombok.AllArgsConstructor; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; /** * @Author: cxf * @Date: 2020/10/26 11:20 */ @Service @AllArgsConstructor public class StockUtils { private StockMapper stockMapper; private LocationMapper locationMapper; private PartMapper partMapper; private TransactionMapper transactionMapper; private StockDetailMapper stockDetailMapper; private ReserveMainMapper reserveMainMapper; private ReserveDetailMapper reserveDetailMapper; private NumberGenerator numberGenerator; private NumberGenerator stockNumberGenerator; private JoinStockOrderMapper joinStockOrderMapper; private WorkstationLocationMapper workstationLocationMapper; private LocationService locationService; /** * 从预留中扣除库存 * * @param id * @param joInStockQuantityIncrement * @return * @Author xucg */ public boolean joinStockerChange(Long id, BigDecimal joInStockQuantityIncrement) { //根据id获取预留库存数据 JoinStockOrder joinStockOrder = joinStockOrderMapper.selectById(id); //根据id获取库存数据 Stock stock = stockMapper.selectById(joinStockOrder.getStockId()); if (joInStockQuantityIncrement != null && joInStockQuantityIncrement.compareTo(BigDecimal.ZERO) != 0) { // 预留库存扣除预留数量 joinStockOrder.setReservedQuantity(joinStockOrder.getReservedQuantity().subtract(joInStockQuantityIncrement)); // 扣除库存接口的总数量和预留库存数量 stock.setStockQuantity(stock.getStockQuantity().subtract(joInStockQuantityIncrement)); stock.setReserveQuantity(stock.getReserveQuantity().subtract(joInStockQuantityIncrement)); } // 判断预留库存数值大于等于0 if (stock.getReserveQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("预留库存不够"); } // 预留 < 0 抛出异常 if (joinStockOrder.getReservedQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("预留库存不够"); } // 预留 == 0 删除预留数据 if (joinStockOrder.getReservedQuantity().compareTo(BigDecimal.ZERO) == 0) { joinStockOrderMapper.deleteById(joinStockOrder); } // 预留 > 0 更新预留数据 if (joinStockOrder.getReservedQuantity().compareTo(BigDecimal.ZERO) == 1) { joinStockOrderMapper.updateById(joinStockOrder); } return SqlHelper.retBool(stockMapper.updateById(stock)); } /** * @param stockId 库存id * @param workStationId 工作站id * @param suppliedQuantity 投入数量 * @return */ public boolean feeding(Long stockId, Long workStationId, BigDecimal suppliedQuantity, String billNo,String source) { Stock stock = stockMapper.selectById(stockId); List locationList = workstationLocationMapper.selectList(Wrappers.lambdaQuery() .eq(WorkstationLocation::getWorkstationId, workStationId) .eq(WorkstationLocation::getLocationType, WorkstationLocation.FED_LOCATION)); if (CollectionUtils.isEmpty(locationList)) { throw new RuntimeException("缺少已投料库位"); } Location location = locationMapper.selectById(locationList.get(0).getLocationId()); Stock newStock = null; if ("erp".equals(source)){ newStock = stockMapper.selectOne(Wrappers.lambdaQuery() .eq(Stock::getPartBatchNo, stock.getPartBatchNo()) .eq(Stock::getLocationId, location.getId())); }else { newStock = stockMapper.selectOne(Wrappers.lambdaQuery() .eq(Stock::getPartBatchNo, stock.getPartBatchNo()) // .eq(Stock::getSystemNo, stock.getSystemNo()) // .eq(Stock::getIfsBatchNo, stock.getIfsBatchNo()) .eq(Stock::getLocationId, location.getId())); } if (null == newStock) { createTransaction(BigDecimal.ZERO, suppliedQuantity, stock.getPartId(), location.getId(), stock.getPartBatchNo(), billNo, TransactionType.PRODUCT_FEEDING.getValue(), stock.getIfsBatchNo()); newStock = new Stock(); newStock.setPartId(stock.getPartId()); newStock.setSystemNo(stock.getSystemNo()); newStock.setPartBatchNo(stock.getPartBatchNo()); newStock.setIfsBatchNo(stock.getIfsBatchNo()); newStock.setReelNumber(stock.getReelNumber()); newStock.setLocationId(location.getId()); newStock.setStockQuantity(suppliedQuantity); newStock.setReserveQuantity(BigDecimal.ZERO); newStock.setAvailableStockQuantity(suppliedQuantity); newStock.setOperationStockStatus(stock.getOperationStockStatus()); newStock.setCustomerOrderNo(stock.getCustomerOrderNo()); newStock.setMpsNo(stock.getMpsNo()); newStock.setOuterColor(stock.getOuterColor()); newStock.setInsulationColor(stock.getInsulationColor()); newStock.setIfsMoveNo(stock.getIfsMoveNo()); stockMapper.insert(newStock); } else { createTransaction(newStock.getStockQuantity(), suppliedQuantity, newStock.getPartId(), newStock.getLocationId(), newStock.getPartBatchNo(), billNo, TransactionType.PRODUCT_FEEDING.getValue(), newStock.getIfsBatchNo()); newStock.setStockQuantity(newStock.getStockQuantity().add(suppliedQuantity)); newStock.setAvailableStockQuantity(newStock.getAvailableStockQuantity().add(suppliedQuantity)); stockMapper.updateById(newStock); } return true; } public boolean erpFeeding(String partBatch, Long workStationId, BigDecimal suppliedQuantity, String billNo,Part part) { List locationList = workstationLocationMapper.selectList(Wrappers.lambdaQuery() .eq(WorkstationLocation::getWorkstationId, workStationId) .eq(WorkstationLocation::getLocationType, WorkstationLocation.FED_LOCATION)); if (CollectionUtils.isEmpty(locationList)) { throw new RuntimeException("缺少已投料库位"); } Location location = locationMapper.selectById(locationList.get(0).getLocationId()); Stock newStock = stockMapper.selectOne(Wrappers.lambdaQuery() .eq(Stock::getPartBatchNo, partBatch) .eq(Stock::getLocationId, location.getId() ) ); if (null == newStock) { createTransaction(BigDecimal.ZERO, suppliedQuantity, part.getId(), location.getId(), partBatch, billNo, TransactionType.PRODUCT_FEEDING.getValue(), null); newStock = new Stock(); newStock.setPartId(part.getId()); newStock.setPartBatchNo(partBatch); newStock.setLocationId(location.getId()); newStock.setStockQuantity(suppliedQuantity); newStock.setReserveQuantity(BigDecimal.ZERO); newStock.setAvailableStockQuantity(suppliedQuantity); // newStock.setCustomerOrderNo(stock.getCustomerOrderNo()); stockMapper.insert(newStock); } else { createTransaction(newStock.getStockQuantity(), suppliedQuantity, newStock.getPartId(), newStock.getLocationId(), newStock.getPartBatchNo(), billNo, TransactionType.PRODUCT_FEEDING.getValue(), newStock.getIfsBatchNo()); newStock.setStockQuantity(newStock.getStockQuantity().add(suppliedQuantity)); newStock.setAvailableStockQuantity(newStock.getAvailableStockQuantity().add(suppliedQuantity)); stockMapper.updateById(newStock); } return true; } /** * @param workstationId 工作站id * @param returnQuantity 退料数量 * @param partId 零件id * @param partBatchNo 零件sn号码 * @param SystemNo systemNo * @param id stock的id * @param returnLocationId * @return */ public boolean rejectFeeding(Long workstationId, BigDecimal returnQuantity, Long partId, String partBatchNo, String SystemNo, Long id, Long returnLocationId) { String billNo = RandomStringUtils.random(10, true, true); //退库 Stock returnStock = stockMapper.selectById(id); //判断库存是否允许退库 if (returnQuantity.compareTo(returnStock.getStockQuantity()) > 0) { throw new RuntimeException("退料数量大用库存数量"); } if (null == returnLocationId) { throw new RuntimeException("缺少退料库位"); } //查询是否存在线边仓 //List locationList = locationMapper.getLocationByWorkstationId(workstationId, WorkstationLocation.FEED_LOCATION); //if (CollectionUtils.isEmpty(locationList)) { // throw new RuntimeException("缺少线边仓"); //} Location location = locationMapper.selectById(returnLocationId); //查询线边仓是否有库存 Stock stock = stockMapper.selectOne(Wrappers.lambdaQuery() .eq(Stock::getLocationId, location.getId()) .eq(Stock::getPartId, partId) .eq(Stock::getPartBatchNo, partBatchNo) .eq(Stock::getSystemNo, SystemNo)); //如果不存在就新增 存在就在现编仓库存上加上去 if (stock == null) { createTransaction(BigDecimal.ZERO, returnQuantity, partId, location.getId(), partBatchNo, billNo, TransactionType.PRODUCT_CANCEL.getValue(), returnStock.getIfsBatchNo()); stock = new Stock(); stock.setPartId(partId); stock.setSystemNo(SystemNo); stock.setPartBatchNo(partBatchNo); //stock.setIfsBatchNo(partBatchNo);//严重bug,会导致ifs批次号双边系统不一致 stock.setIfsBatchNo(returnStock.getIfsBatchNo()); stock.setLocationId(location.getId()); stock.setStockQuantity(returnQuantity); stock.setReserveQuantity(BigDecimal.ZERO); stock.setAvailableStockQuantity(returnQuantity); stock.setOperationStockStatus(returnStock.getOperationStockStatus()); stock.setCustomerOrderNo(returnStock.getCustomerOrderNo()); stock.setMpsNo(returnStock.getMpsNo()); stock.setReelNumber(returnStock.getReelNumber()); stockMapper.insert(stock); } else { createTransaction(stock.getStockQuantity(), returnQuantity, stock.getPartId(), stock.getLocationId(), stock.getPartBatchNo(), billNo, TransactionType.PRODUCT_CANCEL.getValue(), returnStock.getIfsBatchNo()); stock.setStockQuantity(stock.getStockQuantity().add(returnQuantity)); stock.setAvailableStockQuantity(stock.getAvailableStockQuantity().add(returnQuantity)); stockMapper.updateById(stock); } //减去库存 createTransaction(returnStock.getStockQuantity(), returnQuantity.negate(), returnStock.getPartId(), returnStock.getLocationId(), returnStock.getPartBatchNo(), billNo, TransactionType.PRODUCT_CANCEL.getValue(), returnStock.getIfsBatchNo()); returnStock.setStockQuantity(returnStock.getStockQuantity().add(returnQuantity.negate())); returnStock.setAvailableStockQuantity(returnStock.getAvailableStockQuantity().add(returnQuantity.negate())); stockMapper.updateById(returnStock); return true; } /** * @param id * @param stockQuantityIncrement 库存数量 * @param reserveQuantityIncrement 库存预留数量 * @param sstockQuantityIncrement 库存数量2 * @param sreserveQuantityIncrement 库存预留数量2 * @param billNo * @param billType * @return */ public boolean updateById(Long id, BigDecimal stockQuantityIncrement, BigDecimal reserveQuantityIncrement, BigDecimal sstockQuantityIncrement, BigDecimal sreserveQuantityIncrement, String billNo, String billType) { synchronized (String.valueOf(id).intern()) { Stock stock = stockMapper.selectById(id); BigDecimal beforeQuantity = stock.getStockQuantity(); // 1.更新库存数量 if (stockQuantityIncrement != null && stockQuantityIncrement.compareTo(BigDecimal.ZERO) != 0) { stock.setStockQuantity(stock.getStockQuantity().add(stockQuantityIncrement));//库存数量 stock.setAvailableStockQuantity(stock.getAvailableStockQuantity().add(stockQuantityIncrement));//可用库存数量 } // 2.更新预留数量 if (reserveQuantityIncrement != null && reserveQuantityIncrement.compareTo(BigDecimal.ZERO) != 0) { stock.setReserveQuantity(stock.getReserveQuantity().add(reserveQuantityIncrement));//预留数量 stock.setAvailableStockQuantity(stock.getAvailableStockQuantity().subtract(reserveQuantityIncrement));//可用库存数量 } // 1.更新库存数量2 if (sstockQuantityIncrement != null && sstockQuantityIncrement.compareTo(BigDecimal.ZERO) != 0) { stock.setSStockQuantity(stock.getSStockQuantity().add(sstockQuantityIncrement));//库存数量 stock.setSAvailableStockQuantity(stock.getSAvailableStockQuantity().add(sstockQuantityIncrement));//可用库存数量 } // 2.更新预留数量2 if (sreserveQuantityIncrement != null && sreserveQuantityIncrement.compareTo(BigDecimal.ZERO) != 0) { stock.setSReserveQuantity(stock.getSReserveQuantity().add(sreserveQuantityIncrement));//预留数量 stock.setSAvailableStockQuantity(stock.getSAvailableStockQuantity().subtract(sreserveQuantityIncrement));//可用库存数量 } // 判断预留库存数值大于等于0 if (stock.getReserveQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("预留库存不够"); } // 判断可用库存数值大于等于0 if (stock.getAvailableStockQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("可用库存不够,当前可用库存:" + stock.getAvailableStockQuantity()); } // 判断预留库存数值大于等于0 if (stock.getSReserveQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("预留库存2不够"); } // 判断可用库存数值大于等于0 if (stock.getSAvailableStockQuantity().compareTo(BigDecimal.ZERO) == -1) { throw new RuntimeException("可用库存2不够"); } addReserveDetail(stock); createTransaction(beforeQuantity, stockQuantityIncrement, stock.getPartId(), stock.getLocationId(), stock.getPartBatchNo(), billNo, billType, stock.getIfsBatchNo()); return SqlHelper.retBool(stockMapper.updateById(stock)); } } /** * 生成领料单 * * @param stock */ private void addReserveDetail(Stock stock) { //如果可用库存的数量低于安全库存,触发材料申请自动生成领料单 StockDetail stockDetail = stockDetailMapper.selectOne(Wrappers.lambdaQuery().eq(StockDetail::getPartId , stock.getPartId()).eq(StockDetail::getSafetyStockId, stock.getLocationId())); if (stockDetail != null) { if (stockDetail.getLowQty().compareTo(stock.getAvailableStockQuantity()) != -1) { ReserveMain reserveMain = new ReserveMain(); reserveMain.setResType((long) 34); reserveMain.setResStatus("05create"); reserveMain.setResNo(numberGenerator.generateNumberWithPrefix(ReserveMain.DIGIT, ReserveMain.PREFIX , ReserveMain::getResNo)); reserveMain.setResDate(LocalDateTime.now()); reserveMainMapper.insert(reserveMain); ReserveDetail reserveDetail = new ReserveDetail(); reserveDetail.setWarehouseMainId(reserveMain.getId()); reserveDetail.setResQty((stockDetail.getHighQty().subtract(stockDetail.getLowQty())) .divide(stockDetail.getBatchQty(), 2)); reserveDetail.setPartId(stock.getPartId()); reserveDetail.setLocationId(stock.getLocationId()); reserveDetail.setStatus("未下发"); reserveDetailMapper.insert(reserveDetail); } } } /** * 新增实时库存 * * @return */ public synchronized Stock query(StockAddDTO stockAdd) { Part part = partMapper.selectById(stockAdd.getPartsId()); if (part != null && part.getUseSystemNo()) { // 零件启用系统编号 if (StringUtils.isBlank(stockAdd.getNewPartBatchNo())) { stockAdd.setNewPartBatchNo("*"); } if (StringUtils.isBlank(stockAdd.getNewSystemNo())) { stockAdd.setNewSystemNo(stockNumberGenerator.generateNumberWithPrefix(Stock.DIGIT, Stock.PREFIX, Stock::getSystemNo)); } } else { // 零件不启用系统编号 stockAdd.setNewPartBatchNo("*"); stockAdd.setNewSystemNo("*"); } Stock stock = stockMapper.selectOne(Wrappers.lambdaQuery() .eq(Stock::getPartId, stockAdd.getPartsId()) .eq(Stock::getLocationId, stockAdd.getNewLocationId()) .eq(Stock::getPartBatchNo, stockAdd.getNewPartBatchNo()) .eq(Stock::getSystemNo, stockAdd.getNewSystemNo())); if (stock == null) { stock = new Stock(); stock.setPartId(stockAdd.getPartsId()); stock.setPartBatchNo(stockAdd.getNewPartBatchNo()); if (stockAdd.getIfsBatchNo() != null || BooleanUtil.isTrue(stockAdd.getManualInput())) { stock.setIfsBatchNo(stockAdd.getIfsBatchNo()); }else { stock.setIfsBatchNo(stockAdd.getNewPartBatchNo()); } stock.setLocationId(stockAdd.getNewLocationId()); stock.setReelNumber(stockAdd.getReelNumber()); stock.setSystemNo(stockAdd.getNewSystemNo()); stock.setInsulationColor(stockAdd.getInsulationColor()); stock.setOuterColor(stockAdd.getOuterColor()); stock.setCustomerOrderNo(stockAdd.getCustomerOrderNo()); stock.setMpsNo(stockAdd.getMpsNo()); stock.setOperationStockStatus(stockAdd.getOperationStockStatus()); stockMapper.insert(stock); } return stock; } /** * @param beforeQuantity 变更前的数量 * @param incrementQuantity 变更数量 * @param partId * @param locId * @param partBatchNo * @param billNo * @param billType * @param ifsBatchNo IFS批次号 */ public void createTransaction(BigDecimal beforeQuantity, BigDecimal incrementQuantity, Long partId, Long locId, String partBatchNo, String billNo, String billType, String ifsBatchNo) { Part part = partMapper.selectById(partId); Location location = locationMapper.selectById(locId); if (location == null) { throw new RuntimeException("缺少id为:" + locId + " 的库位!!"); } Transaction transaction = new Transaction(); transaction.setBeforeQuantity(beforeQuantity); transaction.setQuantity(incrementQuantity); transaction.setAfterQuantity(beforeQuantity.add(incrementQuantity)); transaction.setPartNo(part.getPartNo()); transaction.setPartName(part.getPartName()); transaction.setUnit(part.getUnit()); transaction.setPartBatchNo(partBatchNo); transaction.setLocationNo(location.getLocNo()); transaction.setIfsBatchNo(ifsBatchNo); if (Enums.getIfPresent(TransactionType.class, billType).orNull() == null) { transaction.setBillType(billType); } else { transaction.setBillType(TransactionType.valueOf(billType).getValue()); } transaction.setBillNo(billNo); transactionMapper.insert(transaction); } /** * 自身移库 * * @param partId * @param systemNo * @param lotBatchNo * @param stockQuantityIncrement 移库数量 * @param oldLocationId 老库位 * @param newLocationId 新库位 */ public void localMove(Long partId, String systemNo, String lotBatchNo, BigDecimal stockQuantityIncrement, Long oldLocationId, Long newLocationId) { StockAddDTO oldAdd = new StockAddDTO(); oldAdd.setPartsId(partId); oldAdd.setNewLocationId(oldLocationId); oldAdd.setNewPartBatchNo(lotBatchNo); oldAdd.setNewSystemNo(systemNo); Stock oldStock = query(oldAdd); Location location = locationMapper.selectById(newLocationId); //获取预留库存 List joinStockOrderList = joinStockOrderMapper.selectList(Wrappers.lambdaQuery().eq(JoinStockOrder::getStockId, oldStock.getId())); BigDecimal reserveQuantity = BigDecimal.ZERO; if (joinStockOrderList.size() > 0) { //根据库存id查询预留总数量 reserveQuantity = joinStockOrderMapper.selectTotalQuantityByStockId(oldStock.getId()); List ids = joinStockOrderList.stream().map(JoinStockOrder::getId).collect(Collectors.toList()); //根据ids删除预留数据 joinStockOrderMapper.deleteBatchIds(ids); //退回预留数量 updateById(oldStock.getId(), BigDecimal.ZERO, reserveQuantity.negate(), BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.CANCEL_RESERVED.getValue()); } updateById(oldStock.getId(), stockQuantityIncrement.negate(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.TEST_STOCK.getValue()); StockAddDTO stockAdd = new StockAddDTO(); stockAdd.setPartsId(partId); stockAdd.setNewLocationId(newLocationId); stockAdd.setMpsNo(oldStock.getMpsNo()); stockAdd.setNewPartBatchNo(lotBatchNo); stockAdd.setNewSystemNo(systemNo); stockAdd.setReelNumber(oldStock.getReelNumber()); stockAdd.setOperationStockStatus(oldStock.getOperationStockStatus()); stockAdd.setIfsBatchNo(oldStock.getIfsBatchNo()); Stock newStock = query(stockAdd); //新增预留数据 if (joinStockOrderList.size() > 0) { joinStockOrderList.forEach(joinStockOrdeOld -> { JoinStockOrder joinStockOrderNew = new JoinStockOrder(); BeanUtils.copyProperties(joinStockOrdeOld, joinStockOrderNew); joinStockOrderNew.setId(null); joinStockOrderNew.setLocationName(location.getLocName()); joinStockOrderNew.setLocationNo(location.getLocNo()); joinStockOrderMapper.insert(joinStockOrderNew); }); //库存预留数量更新 updateById(oldStock.getId(), BigDecimal.ZERO, reserveQuantity, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.CONFIRM_RESERVED.getValue()); } updateById(newStock.getId(), stockQuantityIncrement, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.TEST_STOCK.getValue()); } public String feedingIfsMove(List stockList, Location location) { // ifs移库 LocationIfsMoveDTO moveDTO = new LocationIfsMoveDTO(); moveDTO.setRECORD_ID(UUID.randomUUID().toString().replace("-", "")); List dataBeans = new ArrayList<>(); moveDTO.setBATCH_INFO(dataBeans); String moveNo = null; for (StockDTO stock : stockList) { // 库存件退料需要ifs移库 Part part = partMapper.selectById(stock.getPartId()); if (stock.getOperationStockStatus() == null) { if (org.apache.commons.lang3.StringUtils.equals("3", part.getMaterialType())) { stock.setOperationStockStatus(Boolean.FALSE); } } if (BooleanUtil.isTrue(stock.getOperationStockStatus())) { continue; } Location nowLocation = locationMapper.selectById(stock.getLocationId()); if (nowLocation.getIfsLocation() == null) { throw new RuntimeException("库存库位未绑定ifs库位"); } LocationIfsMoveDTO.DataBean bean = new LocationIfsMoveDTO.DataBean(); bean.setPART_NO(part.getPartNo()); if (part.getLotTrackingIfs() != null && part.getLotTrackingIfs()) { bean.setLOT_BATCH_NO(stock.getIfsBatchNo()); bean.setWAIV_DEV_REJ_NO(stock.getPartBatchNo()); } else { bean.setLOT_BATCH_NO("*"); bean.setWAIV_DEV_REJ_NO("*"); } bean.setMOVE_QTY(stock.getFeedQuantity()); bean.setLOCATION_NO(nowLocation.getIfsLocation()); bean.setTO_LOCATION_NO(location.getIfsLocation()); dataBeans.add(bean); } R response = locationService.moveIfsLocation(moveDTO); if (response.getCode() == 0) { moveNo = moveDTO.getRECORD_ID(); for (StockDTO stockDTO : stockList) { Stock updateIfs = new Stock(); updateIfs.setId(stockDTO.getId()); updateIfs.setIfsMoveNo(moveNo); stockMapper.updateById(updateIfs); } } else { throw new RuntimeException("ifs移库失败:" + response.getMsg()); } return moveNo; } public String feedingIfsMoveByDTO(List stockList, LocationIfsMoveDTO moveDTO) { // ifs移库 String moveNo = null; R response = locationService.moveIfsLocation(moveDTO); if (response.getCode() == 0) { moveNo = moveDTO.getRECORD_ID(); for (StockDTO stockDTO : stockList) { Stock updateIfs = new Stock(); updateIfs.setId(stockDTO.getId()); updateIfs.setIfsMoveNo(moveNo); stockMapper.updateById(updateIfs); } } else { throw new RuntimeException("ifs移库失败:" + response.getMsg()); } return moveNo; } public void replaceMove(Long partId, String systemNo, String lotBatchNo, BigDecimal stockQuantityIncrement, Long oldLocationId, Long newLocationId, Long replacePartId) { StockAddDTO oldAdd = new StockAddDTO(); oldAdd.setPartsId(partId); oldAdd.setNewLocationId(oldLocationId); oldAdd.setNewPartBatchNo(lotBatchNo); oldAdd.setNewSystemNo(systemNo); Stock oldStock = query(oldAdd); updateById(oldStock.getId(), stockQuantityIncrement.negate(), BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.REPLACEMENT_ISSUE.getValue()); StockAddDTO stockAdd = new StockAddDTO(); stockAdd.setPartsId(replacePartId); stockAdd.setNewLocationId(newLocationId); stockAdd.setNewPartBatchNo(lotBatchNo); stockAdd.setNewSystemNo(systemNo); stockAdd.setReelNumber(oldStock.getReelNumber()); stockAdd.setOperationStockStatus(oldStock.getOperationStockStatus()); stockAdd.setIfsBatchNo(oldStock.getIfsBatchNo()); Stock newStock = query(stockAdd); updateById(newStock.getId(), stockQuantityIncrement, BigDecimal.ZERO, BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.REPLACEMENT_RECEIVE.getValue()); } }