ApkinfoController.java 5.71 KB
package com.huaheng.system.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huaheng.common.core.domain.R;
import com.huaheng.common.core.text.Convert;
import com.huaheng.common.core.utils.StringUtils;
import com.huaheng.common.core.web.controller.BaseController;
import com.huaheng.common.core.web.domain.AjaxResult;
import com.huaheng.common.core.web.page.PageDomain;
import com.huaheng.common.core.web.page.TableDataInfo;
import com.huaheng.common.core.web.page.TableSupport;
import com.huaheng.common.log.annotation.Log;
import com.huaheng.common.log.enums.BusinessType;
import com.huaheng.system.api.RemoteFileService;
import com.huaheng.system.api.domain.SysFile;
import com.huaheng.system.domain.Apkinfo;
import com.huaheng.system.domain.MD5Util;
import com.huaheng.system.service.IApkinfoService;
import io.swagger.annotations.ApiOperation;
import net.dongliu.apk.parser.ApkFile;
import net.dongliu.apk.parser.bean.ApkMeta;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.util.Arrays;
import java.util.List;

import static com.huaheng.common.core.web.domain.AjaxResult.error;
import static com.huaheng.common.core.web.domain.AjaxResult.success;

/**
 * apk信息操作处理
 *
 * @author huaheng
 * @date 2020-07-23
 */
@RestController
@RequestMapping("/apkinfo")
public class ApkinfoController extends BaseController {

    @Resource
    private IApkinfoService apkinfoService;
    @Resource
    private RemoteFileService remoteFileService;

    /**
     * 查询apk信息列表
     */
    @PostMapping("/list")
    @Log(title = "查询apk信息列表", businessType = BusinessType.GRANT)
    public TableDataInfo list(Apkinfo apkinfo) {
        LambdaQueryWrapper<Apkinfo> lambdaQueryWrapper = Wrappers.lambdaQuery();
        lambdaQueryWrapper.like(StringUtils.isNotEmpty(apkinfo.getPkgName()), Apkinfo::getPkgName, apkinfo.getPkgName())
                .eq(StringUtils.isNotNull(apkinfo.getVersionCode()), Apkinfo::getVersionCode, apkinfo.getVersionCode())
                .like(StringUtils.isNotEmpty(apkinfo.getVersionName()), Apkinfo::getVersionName, apkinfo.getVersionName())
                .eq(StringUtils.isNotEmpty(apkinfo.getUrl()), Apkinfo::getUrl, apkinfo.getUrl())
                .eq(StringUtils.isNotEmpty(apkinfo.getMd5()), Apkinfo::getMd5, apkinfo.getMd5())
        ;
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
            /*使用分页查询*/
            Page<Apkinfo> page = new Page<>(pageNum, pageSize);
            IPage<Apkinfo> iPage = apkinfoService.page(page, lambdaQueryWrapper);
            return getMpDataTable(iPage.getRecords(), iPage.getTotal());
        } else {
            List<Apkinfo> list = apkinfoService.list(lambdaQueryWrapper);
            return getDataTable(list);
        }
    }

    /**
     * 新增保存api信息
     */
    @PostMapping("/add")
    @Log(title = "新增保存api信息", businessType = BusinessType.INSERT)
    public AjaxResult addSave(Apkinfo apkinfo) {
        return toAjax(apkinfoService.save(apkinfo));
    }

    @ApiOperation(value = "获取apk信息")
    @GetMapping("/{id}")
    @Log(title = "根据id获取apk信息", businessType = BusinessType.GRANT)
    public AjaxResult getById(@PathVariable int id) {
        Apkinfo apkinfo = apkinfoService.getById(id);
        return AjaxResult.success(apkinfo);
    }


    /**
     * 修改单据
     */
    @Log(title = "修改apk信息", businessType = BusinessType.UPDATE)
    @PutMapping()
    @ApiOperation(value = "修改单据")
    @Transactional(rollbackFor = Exception.class)
    public boolean updateById(Apkinfo apkinfo) {
        return apkinfoService.updateById(apkinfo);
    }

    @PostMapping("/remove")
    @Log(title = "删除apk信息", businessType = BusinessType.DELETE)
    public AjaxResult remove(String ids) {
        if (StringUtils.isEmpty(ids)) {
            return error("id不能为空");
        }
        return toAjax(apkinfoService.removeByIds(Arrays.asList(Convert.toIntArray(ids))));
    }

    @PostMapping("/upload/updateApk")
	@Log(title = "上传apk", businessType = BusinessType.OTHER)
    public AjaxResult updateApk(@RequestParam("file") MultipartFile file, Model model) {
        try {
            if (!file.isEmpty()) {
                R<SysFile> fileResult = remoteFileService.upload(file);
                String md5 = MD5Util.md5(new File(fileResult.getData().getUrl()));
                ApkFile apkFile = new ApkFile(new File(fileResult.getData().getUrl()));
                ApkMeta apkMeta = apkFile.getApkMeta();
                Apkinfo apkinfo = new Apkinfo();
//				String ip = SecurityUtils.getSubject().getSession().getHost();
                apkinfo.setUrl(fileResult.getData().getUrl());
                apkinfo.setPkgName(apkMeta.getPackageName());
                apkinfo.setVersionCode(apkMeta.getVersionCode());
                apkinfo.setVersionName(apkMeta.getVersionName());
                apkinfo.setMd5(md5);
                addSave(apkinfo);
                return success(fileResult.getData().getUrl());
            }
            return success("上传成功");
        } catch (Exception e) {
            return error("上传失败,已经有这个文件了");
        }
    }
}