基于javaweb+mysql的springboot智能相册管理系统图片相册(java+springboot+maven+vue+mysql+redis)

基于javaweb+mysql的springboot智能相册管理系统图片相册(java+springboot+maven+vue+mysql+redis)

私信源码获取及调试交流

运行环境

Java≥8、MySQL≥5.7、Node.js≥10

开发工具

后端:eclipse/idea/myeclipse/sts等均可配置运行

前端:WebStorm/VSCode/HBuilderX等均可

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb的SpringBoot智能相册管理系统图片相册(java+springboot+maven+vue+mysql+redis)

前端启动命令:npm run serve

后端启动类:StartApplication

登录:

user1 123456

    /**
     * 分页按时间查询指定用户所有图片
     * @param userId
     * @param currentPage
     * @param pageSize
     * @param imageDate
     * @return
     */
    @Override
    public ImageVO selectAllImageByTime(Integer userId, Integer currentPage, Integer pageSize, Date imageDate) {
        PageHelper.startPage(currentPage,pageSize);
        List<Image> images = imageMapper.selectAllImageByTime(userId,imageDate);
        List<String> pres = new ArrayList<>();
        for (Image i:images){
            pres.add(i.getImageUrL());
        }
        Integer integer = imageMapper.selectImageCountByTime(userId,imageDate);
        ImageVO imageVO = new ImageVO(images,pres,integer);
        return imageVO;
    }

    /**
     * 查询图片时间和类型
     * @param userId
     * @return
     */
    @Override
    public AllTimeTypeVO selectTimeType(Integer userId) {
        List<Date> dates = imageMapper.selectAllImageTime(userId);
        //将null时间删掉
        for(int i=0;i<dates.size();i++){
            if(dates.get(i)==null){
                dates.remove(i);
            }
        }
        List<String> strings = imageMapper.selectAllImageType(userId);
        AllTimeTypeVO allTimeTypeVO = new AllTimeTypeVO(strings,dates);
        return allTimeTypeVO;
    }

    /**
     * 删除图片,加入回收站
     * @param userId
     * @param imageId
     */
    @Resource
    RecordService recordService;
    @Resource
    TokenUtil tokenUtil;

    //选择全部
    @RequestMapping("/selectAll")
    public JSONObject selectImage(String token){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;

        if(user!=null) {
            userId = user.getUserId();

        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        JSONObject res = recycleService.selectAll(userId);
        System.out.println(res);
        jsonObject.put("data",res);
        jsonObject.put("status","success");
        return jsonObject;
    }

    //恢复照片
    @RequestMapping("/recoverImage")
    public JSONObject recoverImage(HttpServletRequest req,String token,@RequestParam("imageId")List<Integer> imageId){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        System.out.println(imageId);
        recycleService.recoverImage(userId,imageId);
        jsonObject.put("status","success");
        recordService.addRecord(req,Operation.recoverImage.getName(), imageId.size(),userId);
    public JSONObject selectAllImageByTime(String token,Integer currentPage,Integer pageSize,String imageDate) throws ParseException {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);

        Date imgDate = dateFormat.parse(imageDate);
        System.out.println(imageDate);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        ImageVO  imageVO = imageService.selectAllImageByTime(userId,currentPage,pageSize,imgDate);
        jsonObject.put("data",imageVO);
        jsonObject.put("status","success");
        return jsonObject;
    }

    //根据ID删除图片
    @RequestMapping("/delete")
    public JSONObject deleteImage(HttpServletRequest req,String token, @RequestParam("imageId") List<Integer> imageId)  {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        imageService.deleteImage(userId,imageId);
        jsonObject.put("status","success");
        recordService.addRecord(req,Operation.addRecycle.getName(), imageId.size(),userId);
        return jsonObject;
    }

}

                if (albumId == 0) {
                    Album album = new Album();
                    album.setUserId(userId);
                    album.setAlbumName(albumName);
                    album.setAlbumImg(imageList.get(0).getCompressUrL());

                    albumMapper.addAlbum(album);
                    //添加记录
                    recordService.addRecord(req, Operation.createAlbum.getName()+"\""+albumName+"\"",1,userId);
                    albumMapper.addAlbumImage(album.getAlbumId(),imageIds);
                    recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"",imageIds.size(),userId);
                }
                else{
                    if(albumId > 0){
                        albumMapper.addAlbumImage(albumId,imageIds);
                        recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"",imageIds.size(),userId);
                    }
                }
            }

        return true;
    }

    /**
     * AI智能识别上传
     * @param imageList
     * @param userId
     * @param albumId
     * @param albumName
     * @param count
     * @return
     * @throws Exception
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public JSONArray AIUploadImage(HttpServletRequest req,List<Image> imageList, Integer userId, Integer albumId, String albumName, int count) throws Exception {
        //添加图片
        imageMapper.addImages(imageList);
        //返回图片id集合
        JSONArray data = new JSONArray();
        List<Integer> imageIds = new ArrayList<>();
        int i=0;
        for (Image image : imageList) {
            imageIds.add(image.getImageId());
            float fileSize = image.getImageSize();
            //

            recordService.addRecord(req, Operation.uploadImage.getName(),imgList.size(),userId);
        }
        else{
            for(Image i:imgList){
                String imageUrL = i.getImageUrL();
                fileServeUtil.deleteServe(imageUrL);
            }

            jsonObject.put("status","fail");
        }

        return jsonObject;
    }
    //ai上传图片
    @RequestMapping("/uploadAI")
    public JSONObject uploadAI(HttpServletRequest req,String token, @RequestParam("file")MultipartFile[] multipartFiles,String albumName,Integer albumId,String imgSite, String imgDate,Integer resNumber) throws Exception {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        String userName;
        if(user!=null) {
            userId = user.getUserId();
            userName = user.getUserName();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        Date imageDate ;
        if(imgDate.equals("null")||imgDate.equals("")){
            imageDate=null;
        }
        else {
            imageDate = dateFormat.parse(imgDate);
        }

        if(imgSite==null||imgSite.equals("")){
            imgSite= "其它";
        }
        List<Image> imgList = new ArrayList<>();
        //将所有上传的图片对象存入集合
        for (MultipartFile m:multipartFiles){
            String fileName = m.getOriginalFilename();
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addAlbum(HttpServletRequest req, String albumName, Integer userId) {
        Album album = new Album();
        album.setAlbumImg(defaultAlbum);
        album.setUserId(userId);
        album.setAlbumName(albumName);
        System.out.println(album);
        albumMapper.addAlbum(album);
        recordService.addRecord(req, Operation.createAlbum.getName()+"\""+albumName+"\"", 1,userId);
    }

    @Override
    public void setAlbumCover( Integer albumId, Integer imageId) {
        albumMapper.uploadAlbum(albumId,imageId);
    }

    /**
     * 查询相册
     * @param userId
     * @return
     */
    @Override

    public List<PartAlbumVO> selectAllAlbum(Integer userId) {
        if(userId==null){
            return null;
        }
        List<PartAlbumVO> partAlbumVO = albumMapper.selectAllAlbum(userId);
        return partAlbumVO;
    }

    /**
     * 将图片添加至相册
     * @param albumId
     * @param imageId
     */
    @Override
    public void addImageToAlbum(HttpServletRequest req,Integer albumId, List<Integer> imageId,Integer userId) {
        albumMapper.addAlbumImage(albumId,imageId);
        String albumName = albumMapper.selectAlbum(albumId);

        recordService.addRecord(req, Operation.addImageToAlbum.getName()+"\""+albumName+"\"", imageId.size(),userId);
    }

    /**
     * 将图片移除相册
     * @param albumId
     * @param imageId
     */
    @Override
    public void removeImageToAlbum(HttpServletRequest req,Integer albumId, List<Integer> imageId,Integer userId) {
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        recordService.addRecord(req, Operation.downloadImage.getName(),number,userId);
        jsonObject.put("status","success");
        return jsonObject;
    }
    //选择全部
    @RequestMapping("/selectAll")
    public JSONObject selectAllRecord(String token) throws ParseException {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        List<Record> records = recordService.selectAllRecord(userId);
        jsonObject.put("status","success");
        jsonObject.put("data",records);
        return jsonObject;
    }

    //删除全部
    @RequestMapping("/deleteAll")
    public JSONObject deleteAllRecord(String token){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");

@Service
public class AlbumServiceImpl implements AlbumService {
    @Resource
    AlbumMapper albumMapper;
    @Resource
    RecordService recordService;
    @Resource
    DateUtil dateUtil;
    private String defaultAlbum = "/static/album/albumImg.png";

    /**
     * 添加相册
     * @param albumName
     * @param userId
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addAlbum(HttpServletRequest req, String albumName, Integer userId) {
        Album album = new Album();
        album.setAlbumImg(defaultAlbum);
        album.setUserId(userId);
        album.setAlbumName(albumName);
        System.out.println(album);
        albumMapper.addAlbum(album);
        recordService.addRecord(req, Operation.createAlbum.getName()+"\""+albumName+"\"", 1,userId);
    }


@RestController
@RequestMapping("/album")
public class AlbumController {
    @Resource
    AlbumService albumService;
    @Resource
    RecordService recordService;
    @Resource
    TokenUtil tokenUtil;
    //选择相册名称
    @RequestMapping("/selectAlbumName")
    public JSONObject selectAlbumName(String token){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        if(user==null){
            jsonObject.put("status","fail");
            return jsonObject;
        }
        List<PartAlbumVO> partAlbumVOS = albumService.selectAllAlbum(user.getUserId());
        jsonObject.put("status","success");
        jsonObject.put("data", partAlbumVOS);
        return jsonObject;
    }
    //将图片添加相册
    @RequestMapping("/addImageToAlbum")
    public JSONObject addImageToAlbum(HttpServletRequest req, String token, @RequestParam("imageId") List<Integer> imageId, Integer albumId ){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        if(user==null){
            jsonObject.put("status","fail");
            return jsonObject;
        }
        albumService.addImageToAlbum(req,albumId,imageId,user.getUserId());
        jsonObject.put("status","success");
        return jsonObject;
    }
    //从相册中删除图像
        }
        else{
          b  =dateFormat.parse(birthday);
        }
        userToken.setBirthday(b);
        userService.updateUser(userToken);
        jsonObject.put("status", "success");
        return jsonObject;
    }

    @RequestMapping("/updateAvatar")
    public JSONObject updateUserAvatar(String token,@RequestParam("file") MultipartFile multipartFile) throws IOException {
        JSONObject jsonObject = new JSONObject();
        User userToken = tokenUtil.jwtParser(token);
        if(userToken==null){
            jsonObject.put("status", "fail");
            return jsonObject;
        }
        String userName = userToken.getUserName();
        //上传类型是头像,文件夹名采用用户名
        String avatarPath = fileServeUtil.uploadServe("avatar", userName, multipartFile);
        if(userToken!=null){
          userToken.setAvatar(avatarPath);
        }
        System.out.println(userToken);
        userService.updateUserAvatar(userToken);
        jsonObject.put("status", "success");
        return jsonObject;
    }

}

    @Resource
    private TokenUtil tokenUtil;
    @Resource
    RedisUtil redisUtil;
    @Resource
    private UserService userService;  //用户服务
    @Resource
    private FileServeUtil fileServeUtil;

    //默认头像
    private String defaultAvatar = "/static/avatar/1default.jpg";

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 用户注册
     * @param userName
     * @param passWord
     * @param email
     * @param codeNumber
     * @return
     */
    @RequestMapping("/add")
    public JSONObject addUser(@RequestParam("username")String userName,@RequestParam("password")String passWord,String email,String codeNumber){
        JSONObject jsonObject = new JSONObject();
        if(userService.selectUserName(userName)!=null){
            jsonObject.put("status","exist");
            return jsonObject;
        }

        System.out.println(email);
        String redisCode = redisUtil.get(email);
        if(!codeNumber.equals(redisCode)){
            jsonObject.put("status","codeError");
            return jsonObject;
        }
        User user = new User(null,userName,passWord,null,email,null,null,null,5000,defaultAvatar);
        userService.addUser(user);
        jsonObject.put("status","success");
        return jsonObject;
    }

        jsonObject.put("status","success");
        return jsonObject;
    }

    //恢复照片
    @RequestMapping("/recoverImage")
    public JSONObject recoverImage(HttpServletRequest req,String token,@RequestParam("imageId")List<Integer> imageId){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        System.out.println(imageId);
        recycleService.recoverImage(userId,imageId);
        jsonObject.put("status","success");
        recordService.addRecord(req,Operation.recoverImage.getName(), imageId.size(),userId);
        return jsonObject;
    }

    //删除照片
    @RequestMapping("/deleteImage")
    public JSONObject deleteImage(HttpServletRequest req, String token, @RequestParam("imageId")List<Integer> imageId){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        recycleService.deleteImage(userId,imageId);
        jsonObject.put("status","success");

        recordService.addRecord(req, Operation.deleteImage.getName(), imageId.size(),userId);
        return jsonObject;
    }

}

            return jsonObject;
        }
        ImageVO  imageVO = imageService.selectAllImageByType(userId,currentPage,pageSize,imageType);
        jsonObject.put("data",imageVO);
        jsonObject.put("status","success");
        return jsonObject;
    }

    // 按时间选择全部
    @RequestMapping("/selectAllByTime")
    public JSONObject selectAllImageByTime(String token,Integer currentPage,Integer pageSize,String imageDate) throws ParseException {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);

        Date imgDate = dateFormat.parse(imageDate);
        System.out.println(imageDate);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        ImageVO  imageVO = imageService.selectAllImageByTime(userId,currentPage,pageSize,imgDate);
        jsonObject.put("data",imageVO);
        jsonObject.put("status","success");
        return jsonObject;
    }

    //根据ID删除图片
    @RequestMapping("/delete")
    public JSONObject deleteImage(HttpServletRequest req,String token, @RequestParam("imageId") List<Integer> imageId)  {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
     * @return
     */
    @Override
    public ImageVO selectAllImageByType(Integer userId, Integer currentPage, Integer pageSize,String imageType) {
        PageHelper.startPage(currentPage,pageSize);
        List<Image> images = imageMapper.selectAllImageByType(userId,imageType);
        List<String> pres = new ArrayList<>();
        for (Image i:images){
            pres.add(i.getImageUrL());
        }
        Integer integer = imageMapper.selectImageCountByType(userId,imageType);
        ImageVO imageVO = new ImageVO(images,pres,integer);
        return imageVO;
    }

    /**
     * 分页按时间查询指定用户所有图片
     * @param userId
     * @param currentPage
     * @param pageSize
     * @param imageDate
     * @return
     */
    @Override
    public ImageVO selectAllImageByTime(Integer userId, Integer currentPage, Integer pageSize, Date imageDate) {
        PageHelper.startPage(currentPage,pageSize);
        List<Image> images = imageMapper.selectAllImageByTime(userId,imageDate);
        List<String> pres = new ArrayList<>();
        for (Image i:images){
            pres.add(i.getImageUrL());
        }
        Integer integer = imageMapper.selectImageCountByTime(userId,imageDate);
        ImageVO imageVO = new ImageVO(images,pres,integer);
        return imageVO;
    }

    /**
     * 查询图片时间和类型
     * @param userId
     * @return
     */
    @Override
    public AllTimeTypeVO selectTimeType(Integer userId) {
        List<Date> dates = imageMapper.selectAllImageTime(userId);
        //将null时间删掉
        for(int i=0;i<dates.size();i++){
        int count =1;
        if(resNumber!=null)
          count = resNumber ;
          JSONArray data = imageService.AIUploadImage(req,imgList,userId,albumId,albumName,count);
        if(data.size()>0){
            jsonObject.put("status","success");
            jsonObject.put("data",data);
            //记录操作
            //
            recordService.addRecord(req,Operation.AIUploadImage.getName(), imgList.size(),userId);
        }
        else{
            for(Image i:imgList){
                String imageUrL = i.getImageUrL();
                fileServeUtil.deleteServe(imageUrL);
            }
            jsonObject.put("status","fail");
        }

    return  jsonObject;
    }
    //选择时间类型
    @RequestMapping("/selectTimeType")
    public JSONObject selectTimeType(String token){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        AllTimeTypeVO allTimeTypeVO = imageService.selectTimeType(userId);
        jsonObject.put("data",allTimeTypeVO);
        jsonObject.put("status","success");
        return jsonObject;
    }
    //选择全部
    @RequestMapping("/selectAll")
    public JSONObject selectAllImage(String token,Integer currentPage,Integer pageSize){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        recordService.addRecord(req, Operation.downloadImage.getName(),number,userId);
        jsonObject.put("status","success");
        return jsonObject;
    }
    //选择全部
    @RequestMapping("/selectAll")
    public JSONObject selectAllRecord(String token) throws ParseException {
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        List<Record> records = recordService.selectAllRecord(userId);
        jsonObject.put("status","success");
        jsonObject.put("data",records);
        return jsonObject;
    }

    //删除全部
    @RequestMapping("/deleteAll")
    public JSONObject deleteAllRecord(String token){
        JSONObject jsonObject = new JSONObject();
        User user = tokenUtil.jwtParser(token);
        Integer userId;
        if(user!=null) {
            userId = user.getUserId();
        }
        else{
            jsonObject.put("status","fail");
            return jsonObject;
        }
        recordService.deleteAllRecord(userId);
        jsonObject.put("status","success");
    }
    /**
     * 删除相册
     * @param albumIds
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAlbum(HttpServletRequest req,List<Integer> albumIds,Integer userId) {
        albumMapper.deleteAlbum(albumIds);
        albumMapper.deleteAlbumImageByAlbum(albumIds);
        recordService.addRecord(req,Operation.deleteAlbum.getName(), albumIds.size(),userId);
    }

    /**
     * 查询相册所有图片
     * @param albumId
     * @return
     * @throws ParseException
     */
    @Override
    public JSONObject selectAlbumImage(Integer albumId) throws ParseException {
        List<Image> images = albumMapper.selectAlbumImage(albumId);
        List<Date> dates = albumMapper.selectAlbumImageTime(albumId);
        System.out.println(images);
        List<AlbumImageVO> albumImageVOS = new ArrayList<>();
        List<String> previewList = new ArrayList<>();
        System.out.println(dates);
        for(int i=0;i<dates.size();i++){
            List<Image> img = new ArrayList<>();
           for(int j=0;j<images.size();j++){
//                懒惰表达式
               if(dates.get(i)==null||dates.get(i).equals(images.get(j).getImageDate())){
                   img.add(images.get(j));
                   previewList.add(images.get(j).getImageUrL());
                   images.remove(j);
                   j--;
               }
           }
           String time = "";
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
           if(dates.get(i)!=null) {
               String format = dateFormat.format(dates.get(i));
               String week = dateUtil.getWeek(dates.get(i));
               time = format+week;
           }
           else{
               time="其它时间";
        List<String> previewList = new ArrayList<>();
        System.out.println(dates);
        for(int i=0;i<dates.size();i++){
            List<Image> img = new ArrayList<>();
           for(int j=0;j<images.size();j++){
//                懒惰表达式
               if(dates.get(i)==null||dates.get(i).equals(images.get(j).getImageDate())){
                   img.add(images.get(j));
                   previewList.add(images.get(j).getImageUrL());
                   images.remove(j);
                   j--;
               }
           }
           String time = "";
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
           if(dates.get(i)!=null) {
               String format = dateFormat.format(dates.get(i));
               String week = dateUtil.getWeek(dates.get(i));
               time = format+week;
           }
           else{
               time="其它时间";
           }
            albumImageVOS.add(new AlbumImageVO(time,img));
        }

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("images",albumImageVOS);
        jsonObject.put("previewImageUrL",previewList);
        return jsonObject;
    }

}

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java毕业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值