package com.doumee.service.business.impl; 
 | 
  
 | 
import com.alibaba.druid.sql.visitor.functions.Concat; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.DateUtil; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.core.utils.redis.RedisUtil; 
 | 
import com.doumee.dao.business.*; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.service.business.YwOutinboundService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 运维出入库信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2025/01/06 11:05 
 | 
 */ 
 | 
@Service 
 | 
public class YwOutinboundServiceImpl implements YwOutinboundService { 
 | 
  
 | 
    @Autowired 
 | 
    private YwOutinboundMapper ywOutinboundMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private YwMaterialMapper ywMaterialMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private YwOutinboundRecordMapper ywOutinboundRecordMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private YwStockMapper ywStockMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private YwWarehouseMapper ywWarehouseMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private YwStocktakingMapper ywStocktakingMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {Exception.class, BusinessException.class}) 
 | 
    public Integer create(YwOutinbound ywOutinbound) { 
 | 
        List<YwOutinboundRecord> recordList = this.verifyData(ywOutinbound); 
 | 
        YwWarehouse ywWarehouse = ywWarehouseMapper.selectById(ywOutinbound.getWarehouseId()); 
 | 
        if(Objects.isNull(ywWarehouse)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未查询到仓库信息"); 
 | 
        } 
 | 
        LoginUserInfo loginUserInfo = ywOutinbound.getLoginUserInfo(); 
 | 
        //根据操作类型进行判断是入库/出库 
 | 
        Constants.ywOutInType ywOutInType = Constants.ywOutInType.getYwOutInType(ywOutinbound.getType()); 
 | 
        if(Objects.isNull(ywOutInType)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未匹配到出入库类型"); 
 | 
        } 
 | 
        //生成出入库单据编号 
 | 
        ywOutinbound.setCode(getNextInOutCode(ywOutInType.getInOut())); 
 | 
        ywOutinbound.setCreator(loginUserInfo.getId()); 
 | 
        ywOutinbound.setCreateDate(new Date()); 
 | 
        ywOutinbound.setOrigin(Constants.ZERO); 
 | 
        ywOutinboundMapper.insert(ywOutinbound); 
 | 
        for (YwOutinboundRecord ywOutinboundRecord:recordList) { 
 | 
                ywOutinboundRecord.setOutInBoundId(ywOutinbound.getId()); 
 | 
            ywOutinboundRecord.setCreator(loginUserInfo.getId()); 
 | 
            ywOutinboundRecord.setCreateDate(new Date()); 
 | 
            ywOutinboundRecord.setIsdeleted(Constants.ZERO); 
 | 
        } 
 | 
        ywOutinboundRecordMapper.insert(recordList); 
 | 
        //更新库存信息 
 | 
        this.dealStockData(ywOutinbound,recordList,ywOutInType.getInOut()); 
 | 
        return ywOutinbound.getId(); 
 | 
    } 
 | 
  
 | 
  
 | 
    public List<YwOutinboundRecord> verifyData(YwOutinbound ywOutinbound){ 
 | 
        if(Objects.isNull(ywOutinbound) 
 | 
                || Objects.isNull(ywOutinbound.getType()) 
 | 
//                || (Objects.nonNull(ywOutinbound.getType()) && (!(ywOutinbound.getType() == Constants.ZERO || ywOutinbound.getType() == Constants.ONE))) 
 | 
                || Objects.isNull(ywOutinbound.getWarehouseId()) 
 | 
                || Objects.isNull(ywOutinbound.getDoneDate()) 
 | 
                || com.github.xiaoymin.knife4j.core.util.CollectionUtils.isEmpty(ywOutinbound.getRecordList()) 
 | 
        ){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        List<YwOutinboundRecord> recordList = ywOutinbound.getRecordList(); 
 | 
        for (YwOutinboundRecord ywOutinboundRecord:recordList) { 
 | 
            if(Objects.isNull(ywOutinboundRecord) 
 | 
                    ||Objects.isNull(ywOutinboundRecord.getMaterialId()) 
 | 
                    ||Objects.isNull(ywOutinboundRecord.getStock()) 
 | 
                    ||ywOutinboundRecord.getStock().compareTo(BigDecimal.ZERO)<=Constants.ZERO 
 | 
            ){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
            } 
 | 
            ywOutinboundRecord.setId(null); 
 | 
        } 
 | 
        //判断当前是否存在进行中的盘点单 
 | 
        if(ywStocktakingMapper.selectCount(new QueryWrapper<YwStocktaking>().lambda().eq(YwStocktaking::getIsdeleted,Constants.ZERO) 
 | 
                        .eq(YwStocktaking::getWarehouseId,ywOutinbound.getWarehouseId()) 
 | 
                .eq(YwStocktaking::getStatus,Constants.ONE))>Constants.ZERO){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在进行中的盘点单,无法进行出入库操作"); 
 | 
        }; 
 | 
        //判断是否存在相同数据 
 | 
        Set<Integer> materialIds = new HashSet<Integer>(recordList.stream().map(i->i.getMaterialId()).collect(Collectors.toList())); 
 | 
        if(materialIds.size() != recordList.size()){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"存在相同资产信息,请检查数据!"); 
 | 
        } 
 | 
        if(ywMaterialMapper.selectCount(new QueryWrapper<YwMaterial>().lambda().in(YwMaterial::getId,materialIds))!=recordList.size()){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"资产信息存在异常,请检查数据!"); 
 | 
        } 
 | 
        return recordList; 
 | 
    } 
 | 
  
 | 
    public void dealStockData(YwOutinbound ywOutinbound,List<YwOutinboundRecord> recordList,Integer inOut){ 
 | 
        for (YwOutinboundRecord ywOutinboundRecord:recordList) { 
 | 
            YwStock ywStock = ywStockMapper.selectOne(new QueryWrapper<YwStock>().lambda().eq(YwStock::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(YwStock::getWarehouseId,ywOutinbound.getWarehouseId()).eq(YwStock::getMaterialId,ywOutinboundRecord.getMaterialId())); 
 | 
            if(Constants.equalsInteger(inOut,Constants.ZERO)){ 
 | 
                //入库 
 | 
                if(Objects.isNull(ywStock)){ 
 | 
                    ywStock = new YwStock(); 
 | 
                    ywStock.setIsdeleted(Constants.ZERO); 
 | 
                    ywStock.setStock(ywOutinboundRecord.getStock()); 
 | 
                    ywStock.setWarehouseId(ywOutinbound.getWarehouseId()); 
 | 
                    ywStock.setMaterialId(ywOutinboundRecord.getMaterialId()); 
 | 
                    ywStock.setCreateDate(new Date()); 
 | 
                    ywStock.setCreator(ywOutinbound.getCreator()); 
 | 
                    ywStockMapper.insert(ywStock); 
 | 
                }else{ 
 | 
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda() 
 | 
                                .setSql(" stock = ( stock + "+ywOutinboundRecord.getStock()+") ") 
 | 
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime()) 
 | 
                            .set(YwStock::getEditor, ywOutinbound.getCreator()) 
 | 
                            .eq(YwStock::getId,ywStock.getId()) 
 | 
                    ); 
 | 
                } 
 | 
            }else{ 
 | 
                YwMaterial ywMaterial = ywMaterialMapper.selectById(ywOutinboundRecord.getMaterialId()); 
 | 
                //出库 
 | 
                if(Objects.isNull(ywStock) || ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) < Constants.ZERO){ 
 | 
                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ywMaterial.getName() + "库存不足,请刷新重试"); 
 | 
                }else if(ywStock.getStock().compareTo(ywOutinboundRecord.getStock()) == Constants.ZERO){ 
 | 
                    ywStockMapper.deleteById(ywStock.getId()); 
 | 
                }else{ 
 | 
                    ywStockMapper.update(new UpdateWrapper<YwStock>().lambda() 
 | 
                            .setSql(" stock = ( stock - "+ywOutinboundRecord.getStock()+") ") 
 | 
                            .set(YwStock::getEditDate, DateUtil.getCurrDateTime()) 
 | 
                            .set(YwStock::getEditor, ywOutinbound.getCreator()) 
 | 
                            .eq(YwStock::getId,ywStock.getId()) 
 | 
                    ); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        ywOutinboundMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(YwOutinbound ywOutinbound) { 
 | 
        UpdateWrapper<YwOutinbound> deleteWrapper = new UpdateWrapper<>(ywOutinbound); 
 | 
        ywOutinboundMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        ywOutinboundMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(YwOutinbound ywOutinbound) { 
 | 
        ywOutinboundMapper.updateById(ywOutinbound); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<YwOutinbound> ywOutinbounds) { 
 | 
        if (CollectionUtils.isEmpty(ywOutinbounds)) { 
 | 
            return; 
 | 
        } 
 | 
        for (YwOutinbound ywOutinbound: ywOutinbounds) { 
 | 
            this.updateById(ywOutinbound); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public YwOutinbound findById(Integer id) { 
 | 
        return ywOutinboundMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public YwOutinbound findOne(YwOutinbound ywOutinbound) { 
 | 
        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound); 
 | 
        return ywOutinboundMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<YwOutinbound> findList(YwOutinbound ywOutinbound) { 
 | 
        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound); 
 | 
        return ywOutinboundMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public YwOutinbound getDetail(Integer id) { 
 | 
        MPJLambdaWrapper<YwOutinbound> queryWrapper = new MPJLambdaWrapper<YwOutinbound>(); 
 | 
        queryWrapper.selectAll(YwOutinbound.class) 
 | 
                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName) 
 | 
                .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName) 
 | 
                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator) 
 | 
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId) 
 | 
                .eq(YwOutinbound::getId,id) 
 | 
                .last(" limit 1"); 
 | 
        YwOutinbound ywOutinbound = ywOutinboundMapper.selectJoinOne(YwOutinbound.class,queryWrapper); 
 | 
        List<Integer> idList = new ArrayList<>(); 
 | 
        idList.add(id); 
 | 
        ywOutinbound.setRecordList(this.getRecordDetailData(idList)); 
 | 
        return ywOutinbound; 
 | 
    } 
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap) { 
 | 
        IPage<YwOutinbound> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<YwOutinbound> queryWrapper = new MPJLambdaWrapper<YwOutinbound>(); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        YwOutinbound model = pageWrap.getModel(); 
 | 
        if(Objects.isNull(model)||Objects.isNull(model.getInOut())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        List<Integer> typeList  = Constants.ywOutInType.getAllTypeKey(model.getInOut()); 
 | 
        queryWrapper.selectAll(YwOutinbound.class) 
 | 
                .selectAs(SystemUser::getRealname,YwOutinbound::getCreateUserName) 
 | 
                .selectAs(YwWarehouse::getName,YwOutinbound::getWarehouseName) 
 | 
                .leftJoin(SystemUser.class,SystemUser::getId,YwOutinbound::getCreator) 
 | 
                .leftJoin(YwWarehouse.class,YwWarehouse::getId,YwOutinbound::getWarehouseId) 
 | 
                .like(StringUtils.isNotBlank(model.getCode()),YwOutinbound::getCode,model.getCode()) 
 | 
                .eq(Objects.nonNull(model.getType()),YwOutinbound::getType,model.getType()) 
 | 
                .eq(Objects.nonNull(model.getWarehouseId()),YwOutinbound::getWarehouseId,model.getWarehouseId()) 
 | 
                .in(Objects.nonNull(model.getInOut()),YwOutinbound::getType,typeList) 
 | 
        ; 
 | 
        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        IPage iPage = ywOutinboundMapper.selectJoinPage(page,YwOutinbound.class,queryWrapper); 
 | 
        if(Objects.nonNull(iPage.getRecords())){ 
 | 
            iPage.setRecords(this.getDetailData(iPage.getRecords())); 
 | 
        } 
 | 
        return PageData.from(iPage); 
 | 
    } 
 | 
  
 | 
    public List<YwOutinbound> getDetailData(List<YwOutinbound> ywOutinboundList){ 
 | 
        List<Integer> idList = ywOutinboundList.stream().map(i->i.getId()).collect(Collectors.toList()); 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(idList)){ 
 | 
           List<YwOutinboundRecord> ywOutinboundRecordList =  this.getRecordDetailData(idList); 
 | 
           if(CollectionUtils.isEmpty(ywOutinboundRecordList)){ 
 | 
               return ywOutinboundList; 
 | 
           } 
 | 
           for (YwOutinbound ywOutinbound:ywOutinboundList) { 
 | 
                ywOutinbound.setRecordList( 
 | 
                        ywOutinboundRecordList.stream().filter(i->Constants.equalsInteger(i.getOutInBoundId(),ywOutinbound.getId())).collect(Collectors.toList()) 
 | 
                ); 
 | 
            } 
 | 
        } 
 | 
        return ywOutinboundList; 
 | 
    } 
 | 
  
 | 
  
 | 
    public List<YwOutinboundRecord> getRecordDetailData(List<Integer> outinBoundIdList){ 
 | 
        List<YwOutinboundRecord> ywOutinboundRecordList =  ywOutinboundRecordMapper.selectJoinList(YwOutinboundRecord.class, 
 | 
                new MPJLambdaWrapper<YwOutinboundRecord>() 
 | 
                        .selectAll(YwOutinboundRecord.class) 
 | 
                        .selectAs(YwMaterial::getCode,YwOutinboundRecord::getMaterialCode) 
 | 
                        .selectAs(YwMaterial::getName,YwOutinboundRecord::getMaterialName) 
 | 
                        .selectAs(YwMaterial::getQrcode,YwOutinboundRecord::getMaterialQrcode) 
 | 
                        .selectAs(YwMaterial::getBrand,YwOutinboundRecord::getMaterialBrand) 
 | 
                        .selectAs(YwMaterial::getUnitName,YwOutinboundRecord::getMaterialUnitName) 
 | 
                        .leftJoin(YwMaterial.class,YwMaterial::getId,YwOutinboundRecord::getMaterialId) 
 | 
                        .eq(YwOutinboundRecord::getIsdeleted,Constants.ZERO) 
 | 
                        .in(YwOutinboundRecord::getOutInBoundId,outinBoundIdList) 
 | 
        ); 
 | 
        return ywOutinboundRecordList; 
 | 
    } 
 | 
  
 | 
  
 | 
//    @Override 
 | 
//    public PageData<YwOutinbound> findPage(PageWrap<YwOutinbound> pageWrap) { 
 | 
//        IPage<YwOutinbound> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
// 
 | 
//        QueryWrapper<YwOutinbound> queryWrapper = new QueryWrapper<>(); 
 | 
//        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
//        if (pageWrap.getModel().getId() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getId, pageWrap.getModel().getId()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getCreator() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getCreator, pageWrap.getModel().getCreator()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
//            queryWrapper.lambda().ge(YwOutinbound::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
//            queryWrapper.lambda().le(YwOutinbound::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getEditor() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getEditor, pageWrap.getModel().getEditor()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getEditDate() != null) { 
 | 
//            queryWrapper.lambda().ge(YwOutinbound::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
//            queryWrapper.lambda().le(YwOutinbound::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getRemark() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getRemark, pageWrap.getModel().getRemark()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getWarehouseId() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getWarehouseId, pageWrap.getModel().getWarehouseId()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getMaterialId() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getMaterialId, pageWrap.getModel().getMaterialId()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getStock() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getStock, pageWrap.getModel().getStock()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getType() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getType, pageWrap.getModel().getType()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getOrigin() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getOrigin, pageWrap.getModel().getOrigin()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getContent() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getContent, pageWrap.getModel().getContent()); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getDoneDate() != null) { 
 | 
//            queryWrapper.lambda().ge(YwOutinbound::getDoneDate, Utils.Date.getStart(pageWrap.getModel().getDoneDate())); 
 | 
//            queryWrapper.lambda().le(YwOutinbound::getDoneDate, Utils.Date.getEnd(pageWrap.getModel().getDoneDate())); 
 | 
//        } 
 | 
//        if (pageWrap.getModel().getStatus() != null) { 
 | 
//            queryWrapper.lambda().eq(YwOutinbound::getStatus, pageWrap.getModel().getStatus()); 
 | 
//        } 
 | 
//        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
//            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
//                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
//            } else { 
 | 
//                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
//            } 
 | 
//        } 
 | 
//        return PageData.from(ywOutinboundMapper.selectPage(page, queryWrapper)); 
 | 
//    } 
 | 
  
 | 
    @Override 
 | 
    public long count(YwOutinbound ywOutinbound) { 
 | 
        QueryWrapper<YwOutinbound> wrapper = new QueryWrapper<>(ywOutinbound); 
 | 
        return ywOutinboundMapper.selectCount(wrapper); 
 | 
    } 
 | 
  
 | 
  
 | 
    public synchronized String  getNextInOutCode(Integer inOut){ 
 | 
        String prefix =  (Constants.equalsInteger(inOut,0)?"RK-":"CK-") + DateUtil.getDate(new Date(),"yyyyMMdd") +"-"; 
 | 
        Integer countNum  = RedisUtil.getObject(redisTemplate, 
 | 
                Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY, 
 | 
                Integer.class); 
 | 
        countNum = Constants.formatIntegerNum(countNum)+1; 
 | 
        //更新缓存 
 | 
        RedisUtil.addObject(redisTemplate,Constants.equalsInteger(inOut,0)?Constants.RedisKeys.COM_OUTBOUND_OUT_KEY:Constants.RedisKeys.COM_OUTBOUND_IN_KEY,countNum); 
 | 
        String nextIndex =Integer.toString( countNum ); 
 | 
        return prefix + StringUtils.leftPad(nextIndex,4,"0"); 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |