This commit is contained in:
Vinjor 2025-08-26 15:46:35 +08:00
parent 3013bf3c0d
commit 56cdd668ee
5 changed files with 57 additions and 22 deletions

View File

@ -24,6 +24,7 @@ import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.constant.StrConstants;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.webSocket.Message;
import io.swagger.annotations.Api;
@ -36,12 +37,17 @@ import org.springframework.web.HttpRequestHandler;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.util.*;
import static com.ruoyi.constant.DictConstants.*;
import static com.ruoyi.constant.DictConstants.CATG_TYPE_WZ;
import static com.ruoyi.constant.StrConstants.UPLOAD_DIR;
/**
* Web 专用Controller
@ -502,4 +508,46 @@ public class WebController extends BaseController {
public R<BaseApp> getNewApp() {
return R.ok(appService.selectNewApp());
}
@ApiOperation("下载APK文件")
@GetMapping("/downloadApk")
public void downloadApk(HttpServletResponse response) {
try {
// APK文件路径
File file = new File(UPLOAD_DIR);
// 检查文件是否存在
if (!file.exists()) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().write("文件不存在");
return;
}
// 设置响应头
response.setContentType("application/vnd.android.package-archive");
response.setHeader("Content-Disposition", "attachment; filename=truck.apk");
response.setHeader("Content-Length", String.valueOf(file.length()));
// 写入响应流
FileInputStream fis = new FileInputStream(file);
OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
fis.close();
os.flush();
os.close();
} catch (Exception e) {
try {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("文件下载失败: " + e.getMessage());
} catch (Exception ex) {
logger.error("下载APK文件时发生错误", ex);
}
}
}
}

View File

@ -31,11 +31,7 @@ public class BaseApp extends DlBaseEntity
/** 版本 */
@Excel(name = "版本")
private BigDecimal version;
/** app包下载地址 */
@Excel(name = "app包下载地址")
private String apkUrl;
private String version;
/** 本次升级描述 */
@Excel(name = "本次升级描述")

View File

@ -36,4 +36,8 @@ public class StrConstants {
* 国家
*/
public static final String COUNTRY = "country";
/**
* app下载目录
*/
public static final String UPLOAD_DIR = "/app/apk/truck.apk";
}

View File

@ -7,7 +7,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<resultMap type="BaseApp" id="BaseAppResult">
<result property="id" column="id" />
<result property="version" column="version" />
<result property="apkUrl" column="apk_url" />
<result property="content" column="content" />
<result property="creator" column="creator" />
<result property="createTime" column="create_time" />
@ -17,7 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectBaseAppVo">
select id, version, apk_url, content, creator, create_time, updater, update_time, del_flag from dl_base_app
select id, version, content, creator, create_time, updater, update_time, del_flag from dl_base_app
</sql>
<select id="queryListPage" parameterType="BaseApp" resultMap="BaseAppResult">
@ -25,6 +24,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
<if test="entity.version != null "> and version like concat('%', #{entity.version}, '%')</if>
</where>
order by create_time desc
order by version DESC,create_time desc
</select>
</mapper>

View File

@ -33,12 +33,7 @@
<el-table-column type="index" width="60" label="序号" align="center"/>
<el-table-column label="版本" align="center" prop="version" >
<template slot-scope="scope">
<el-tag>{{ parseFloat(scope.row.version).toFixed(1) }}</el-tag>
</template>
</el-table-column>
<el-table-column label="app包" align="center" prop="apkUrl" >
<template slot-scope="scope">
<file-upload v-model="scope.row.apkUrl" :limit="1" :fileType="fileType" :fileSize="50" :disabled="true" />
<el-tag>{{scope.row.version }}</el-tag>
</template>
</el-table-column>
<el-table-column label="本次升级描述" align="center" prop="content" />
@ -74,10 +69,7 @@
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="版本" prop="version">
<el-input type="number" v-model="form.version" placeholder="请输入版本" />
</el-form-item>
<el-form-item label="app包" prop="apkUrl">
<file-upload v-model="form.apkUrl" :limit="1" :fileType="fileType" :fileSize="50"/>
<el-input v-model="form.version" placeholder="请输入版本" />
</el-form-item>
<el-form-item label="本次升级描述" prop="content">
<el-input v-model="form.content" type="textarea" placeholder="请输入内容" />
@ -130,9 +122,6 @@ export default {
version: [
{ required: true, message: '请输入版本号', trigger: 'blur' }
],
apkUrl: [
{ required: true, message: '请上传程序包', trigger: 'blur' }
],
}
};
},
@ -159,7 +148,6 @@ export default {
this.form = {
id: null,
version: null,
apkUrl: null,
content: null,
creator: null,
createTime: null,