diff --git a/src/main/java/com/huaheng/framework/config/HuaHengConfig.java b/src/main/java/com/huaheng/framework/config/HuaHengConfig.java index ca80f5c..a7e4365 100644 --- a/src/main/java/com/huaheng/framework/config/HuaHengConfig.java +++ b/src/main/java/com/huaheng/framework/config/HuaHengConfig.java @@ -20,6 +20,8 @@ public class HuaHengConfig private String copyrightYear; /** 上传路径 */ private static String profile; + /** 上传路径 */ + private static String apkpath; /** 获取地址开关 */ private static boolean addressEnabled; @@ -63,6 +65,14 @@ public class HuaHengConfig HuaHengConfig.profile = profile; } + public static String getApkpath() { + return apkpath; + } + + public void setApkpath(String apkpath) { + HuaHengConfig.apkpath = apkpath; + } + public static boolean isAddressEnabled() { return addressEnabled; diff --git a/src/main/java/com/huaheng/pc/manager/apkinfo/controller/ApkinfoController.java b/src/main/java/com/huaheng/pc/manager/apkinfo/controller/ApkinfoController.java new file mode 100644 index 0000000..458a76e --- /dev/null +++ b/src/main/java/com/huaheng/pc/manager/apkinfo/controller/ApkinfoController.java @@ -0,0 +1,144 @@ +package com.huaheng.pc.manager.apkinfo.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.utils.file.FileUploadUtils; +import com.huaheng.framework.config.HuaHengConfig; +import com.huaheng.framework.web.page.PageDomain; +import com.huaheng.framework.web.page.TableDataInfo; +import com.huaheng.framework.web.page.TableSupport; +import com.huaheng.common.utils.StringUtils; +import com.huaheng.pc.system.user.domain.User; +import io.swagger.annotations.ApiOperation; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; +import com.huaheng.framework.aspectj.lang.annotation.Log; +import com.huaheng.framework.aspectj.lang.constant.BusinessType; +import com.huaheng.pc.manager.apkinfo.domain.Apkinfo; +import com.huaheng.pc.manager.apkinfo.service.IApkinfoService; +import com.huaheng.framework.web.controller.BaseController; +import com.huaheng.framework.web.domain.AjaxResult; +import com.huaheng.common.support.Convert; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +/** + * 【请填写功能名称】 信息操作处理 + * + * @author huaheng + * @date 2020-07-23 + */ +@Controller +@RequestMapping("/manager/apkinfo") +public class ApkinfoController extends BaseController { + private String prefix = "manager/apkinfo"; + + @Resource + private IApkinfoService apkinfoService; + + @GetMapping() + public String apkinfo() { + return prefix + "/list"; + } + + /** + * 查询【请填写功能名称】列表 + */ + @PostMapping("/list") + @ResponseBody + 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); + } + } + + /** + * 新增【请填写功能名称】 + */ + @GetMapping("/add") + public String add() { + return prefix + "/add"; + } + /** + * 新增保存入库单 + */ + @Log(title = "新增应用信息", action = BusinessType.INSERT) + @PostMapping("/add") + @ResponseBody + public AjaxResult addSave(Apkinfo apkinfo) { + return toAjax(apkinfoService.save(apkinfo)); + } + + /** + * 修改【请填写功能名称】 + */ + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Long id, ModelMap mmap) { + Apkinfo apkinfo = apkinfoService.getById(id); + mmap.put("apkinfo", apkinfo); + return prefix + "/edit"; + } + + + @Log(title = "【请填写功能名称】", action = BusinessType.UPDATE) + @PostMapping("/edit") + @ResponseBody + public AjaxResult editSave(Apkinfo apkinfo) { + return toAjax(apkinfoService.updateById(apkinfo)); + } + + @Log(title = "【请填写功能名称】", action = BusinessType.DELETE) + @PostMapping( "/remove") + @ResponseBody + public AjaxResult remove(String ids) { + if (StringUtils.isEmpty(ids)){ + return AjaxResult.error("id不能为空"); + } + return toAjax(apkinfoService.removeByIds(Arrays.asList(Convert.toIntArray(ids)))); + } + + + @Log(title = "系统管理-用户管理", operating = "保存头像", action = BusinessType.UPDATE) + @PostMapping("/updateApk") + @ResponseBody + public AjaxResult updateApk(@RequestParam("avatarfile") MultipartFile file) + { + try + { + if (!file.isEmpty()) + { + String apk = FileUploadUtils.upload(HuaHengConfig.getApkpath(), file, ""); + } + return success("上传成功"); + } + catch (Exception e) + { + return error(e.getMessage()); + } + } +} diff --git a/src/main/java/com/huaheng/pc/manager/apkinfo/domain/Apkinfo.java b/src/main/java/com/huaheng/pc/manager/apkinfo/domain/Apkinfo.java new file mode 100644 index 0000000..edaab68 --- /dev/null +++ b/src/main/java/com/huaheng/pc/manager/apkinfo/domain/Apkinfo.java @@ -0,0 +1,46 @@ +package com.huaheng.pc.manager.apkinfo.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import io.swagger.annotations.ApiModelProperty; +import javax.validation.constraints.*; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 【请填写功能名称】表 apkinfo + * + * @author huaheng + * @date 2020-07-23 + */ +@Data +@TableName(value = "apkinfo") +public class Apkinfo implements Serializable{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** $column.columnComment */ + @TableField(value = "pkgName") + private String pkgName; + /** $column.columnComment */ + @TableField(value = "versionCode") + private Long versionCode; + /** $column.columnComment */ + @TableField(value = "versionName") + private String versionName; + /** $column.columnComment */ + @TableField(value = "url") + private String url; + /** $column.columnComment */ + @TableField(value = "md5") + private String md5; + +} diff --git a/src/main/java/com/huaheng/pc/manager/apkinfo/mapper/ApkinfoMapper.java b/src/main/java/com/huaheng/pc/manager/apkinfo/mapper/ApkinfoMapper.java new file mode 100644 index 0000000..94e10a2 --- /dev/null +++ b/src/main/java/com/huaheng/pc/manager/apkinfo/mapper/ApkinfoMapper.java @@ -0,0 +1,16 @@ +package com.huaheng.pc.manager.apkinfo.mapper; + +import com.huaheng.pc.manager.apkinfo.domain.Apkinfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.List; + +/** + * 【请填写功能名称】 数据层 + * + * @author huaheng + * @date 2020-07-23 + */ +public interface ApkinfoMapper extends BaseMapper<Apkinfo> { + +} + diff --git a/src/main/java/com/huaheng/pc/manager/apkinfo/service/IApkinfoService.java b/src/main/java/com/huaheng/pc/manager/apkinfo/service/IApkinfoService.java new file mode 100644 index 0000000..73e117c --- /dev/null +++ b/src/main/java/com/huaheng/pc/manager/apkinfo/service/IApkinfoService.java @@ -0,0 +1,17 @@ +package com.huaheng.pc.manager.apkinfo.service; + +import com.huaheng.pc.manager.apkinfo.domain.Apkinfo; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * 【请填写功能名称】 服务层 + * + * @author huaheng + * @date 2020-07-23 + */ +public interface IApkinfoService extends IService<Apkinfo> { + +} + + diff --git a/src/main/java/com/huaheng/pc/manager/apkinfo/service/impl/ApkinfoServiceImpl.java b/src/main/java/com/huaheng/pc/manager/apkinfo/service/impl/ApkinfoServiceImpl.java new file mode 100644 index 0000000..35901b6 --- /dev/null +++ b/src/main/java/com/huaheng/pc/manager/apkinfo/service/impl/ApkinfoServiceImpl.java @@ -0,0 +1,19 @@ +package com.huaheng.pc.manager.apkinfo.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.huaheng.pc.manager.apkinfo.service.IApkinfoService; +import com.huaheng.pc.manager.apkinfo.domain.Apkinfo; +import com.huaheng.pc.manager.apkinfo.mapper.ApkinfoMapper; +import org.springframework.stereotype.Service; + + +/** + * 【请填写功能名称】 服务层实现 + * + * @author huaheng + * @date 2020-07-23 + */ +@Service +public class ApkinfoServiceImpl extends ServiceImpl<ApkinfoMapper, Apkinfo> implements IApkinfoService { + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 8b461f1..4e483c0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -12,6 +12,8 @@ huaheng: copyrightYear: 2020 # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/Huaheng/uploadPath/ + # apk路径 + apkpath: D:/download/ # 获取ip地址开关 addressEnabled: false diff --git a/src/main/resources/mybatis/manager/apkinfo/ApkinfoMapper.xml b/src/main/resources/mybatis/manager/apkinfo/ApkinfoMapper.xml new file mode 100644 index 0000000..ee3efdf --- /dev/null +++ b/src/main/resources/mybatis/manager/apkinfo/ApkinfoMapper.xml @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE mapper +PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.huaheng.pc.manager.apkinfo.mapper.ApkinfoMapper"> + + <resultMap type="com.huaheng.pc.manager.apkinfo.domain.Apkinfo" id="apkinfoResult"> + <result property="id" column="id" /> + <result property="pkgName" column="pkgName" /> + <result property="versionCode" column="versionCode" /> + <result property="versionName" column="versionName" /> + <result property="url" column="url" /> + <result property="md5" column="md5" /> + </resultMap> + <sql id="selectapkinfoVo"> + select id, pkgName, versionCode, versionName, url, md5 from apkinfo + </sql> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/templates/manager/apkinfo/add.html b/src/main/resources/templates/manager/apkinfo/add.html new file mode 100644 index 0000000..d8837ab --- /dev/null +++ b/src/main/resources/templates/manager/apkinfo/add.html @@ -0,0 +1,86 @@ +<!DOCTYPE HTML> +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> +<meta charset="utf-8"> +<head> + <th:block th:include="include :: header"/> + </head> +<body class="white-bg"> +<div class="wrapper wrapper-content animated fadeInRight ibox-content"> + <form class="form-horizontal m" id="form-apkinfo-add"> + <div class="form-group"> + <label class="col-sm-3 control-label">应用包名 + :</label> + <div class="col-sm-8"> + <input name="pkgname" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">应用版本号 + :</label> + <div class="col-sm-8"> + <input name="versioncode" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">应用版本名称 + :</label> + <div class="col-sm-8"> + <input name="versionname" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">下载链接 + :</label> + <div class="col-sm-8"> + <input name="url" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">MD5校验码 + :</label> + <div class="col-sm-8"> + <input name="md5" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <div class="form-control-static col-sm-offset-9"> + <button type="submit" class="btn btn-primary">提交</button> + <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button> + </div> + </div> + </form> +</div> +<th:block th:include="include :: footer"/> +<script type="text/javascript"> + var prefix = ctx + "manager/apkinfo" + $("#form-apkinfo-add").validate({ + rules:{ + xxxx:{ + required:true, + }, + }, + submitHandler: function(form) { + $.ajax({ + cache : true, + type : "POST", + url : prefix + "/add", + async : false, + data : { + "pkgName": $("input[name='pkgname']").val(), + "versionCode": $("input[name='versioncode']").val(), + "versionName": $("input[name='versionname']").val(), + "url": $("input[name='url']").val(), + "md5": $("input[name='md5']").val(), + }, + error : function(request) { + $.modal.alertError("请求失败!"); + }, + success : function(data) { + $.operate.saveSuccess(data); + } + }); + } + }); +</script> +</body> +</html> diff --git a/src/main/resources/templates/manager/apkinfo/edit.html b/src/main/resources/templates/manager/apkinfo/edit.html new file mode 100644 index 0000000..fede22f --- /dev/null +++ b/src/main/resources/templates/manager/apkinfo/edit.html @@ -0,0 +1,56 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" > +<head> + <th:block th:include="include :: header" /> + </head> +<body class="white-bg"> +<div class="wrapper wrapper-content animated fadeInRight ibox-content"> + <form class="form-horizontal m" id="form-apkinfo-edit" th:object="${apkinfo}"> + <input name="id" th:field="*{id}" type="hidden"> + <div class="form-group"> + <label class="col-sm-3 control-label">${comment}:</label> + <div class="col-sm-8"> + <input name="pkgname" th:field="*{pkgname}" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">${comment}:</label> + <div class="col-sm-8"> + <input name="versioncode" th:field="*{versioncode}" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">${comment}:</label> + <div class="col-sm-8"> + <input name="versionname" th:field="*{versionname}" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">${comment}:</label> + <div class="col-sm-8"> + <input name="url" th:field="*{url}" class="form-control" type="text"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-3 control-label">${comment}:</label> + <div class="col-sm-8"> + <input name="md5" th:field="*{md5}" class="form-control" type="text"> + </div> + </div> + </form> +</div> +<th:block th:include="include :: footer" /> + <script th:inline="javascript"> + var prefix = ctx + "task/apkinfo"; + $("#form-apkinfo-edit").validate({ + focusCleanup: true + }); + + function submitHandler() { + if ($.validate.form()) { + $.operate.save(prefix + "/edit", $('#form-apkinfo-edit').serialize()); + } + } + </script> +</body> +</html> \ No newline at end of file diff --git a/src/main/resources/templates/manager/apkinfo/list.html b/src/main/resources/templates/manager/apkinfo/list.html new file mode 100644 index 0000000..69401aa --- /dev/null +++ b/src/main/resources/templates/manager/apkinfo/list.html @@ -0,0 +1,106 @@ +<!DOCTYPE HTML> +<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"> +<meta charset="utf-8"> +<head th:include="include :: header"></head> +<body class="gray-bg"> +<div class="container-div"> + <div class="row"> + <div class="col-sm-12 select-info"> + <form id="formId"> + <div class="select-list"> + <ul> + <li> + <label>应用包名:</label> + <input type="text" name="pkgname"/> + </li> + <li> + <label>应用版本号:</label> + <input type="text" name="versioncode"/> + </li> + <li> + <label>应用版本名称:</label> + <input type="text" name="versionname"/> + </li> + <li> + <a class="btn btn-primary btn-rounded btn-sm" onclick="$.table.search()"><i + class="fa fa-search"></i> 搜索</a> + <a class="btn btn-warning btn-rounded btn-sm" onclick="$.form.reset()"><i + class="fa fa-refresh"></i> 重置</a> + </li> + </ul> + </div> + </form> + </div> + <div class="btn-group hidden-xs" id="toolbar" role="group"> + <a class="btn btn-outline btn-success btn-rounded" onclick="$.operate.add()"> + <i class="fa fa-plus"></i> 新增 + </a> + <a class="btn btn-outline btn-primary single disabled" onclick="$.operate.edit()"> + <i class="fa fa-edit"></i> 修改 + </a> + <a class="btn btn-outline btn-danger btn-rounded multiple disabled" onclick="$.operate.batRemove()"> + <i class="fa fa-trash-o"></i> 删除 + </a> + </div> + + <div class="col-sm-12 select-info table-striped"> + <table id="bootstrap-table" data-mobile-responsive="true" class="table table-bordered table-hover"></table> + </div> + </div> + </div> + <div th:include="include :: footer"></div> + <script th:inline="javascript"> + var prefix = ctx + "manager/apkinfo" + + $(function () { + var options = { + url: prefix + "/list", + createUrl: prefix + "/add", + updateUrl: prefix + "/edit/{id}", + removeUrl: prefix + "/remove", + modalName: "上传应用", + columns: [{ + checkbox: true + }, + { + field: 'id', + title: 'id', + visible: false + }, + { + field: 'pkgName', + title: '应用包名' + }, + { + field: 'versionCode', + title: '应用版本号' + }, + { + field: 'versionName', + title: '应用版本名称' + }, + { + field: 'url', + title: '下载链接' + }, + { + field: 'md5', + title: 'md5校验码' + }, + { + title: '操作', + align: 'center', + formatter: function (value, row, index) { + var actions = []; + actions.push('<a class="btn btn-success btn-xs ' + '" href="#" onclick="$.operate.edit(\'' + row.id + '\')"><i class="fa fa-edit"></i>编辑</a> '); + actions.push('<a class="btn btn-danger btn-xs ' + '" href="#" onclick="$.operate.remove(\'' + row.id + '\')"><i class="fa fa-remove"></i>删除</a>'); + return actions.join(''); + } + }] + }; + $.table.init(options); + }); + +</script> +</body> +</html> \ No newline at end of file