final version

This commit is contained in:
ZhiJian 2024-04-24 09:37:20 +08:00
parent c47f75d166
commit d3089a9c4c
23 changed files with 204 additions and 111 deletions

View File

@ -16,11 +16,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.cxxm.domain.*; import com.ruoyi.cxxm.domain.*;
import com.ruoyi.cxxm.domain.dto.TaskCheckSubmit; import com.ruoyi.cxxm.domain.dto.TaskCheckSubmit;
import com.ruoyi.cxxm.domain.vo.TaskCheckSubmitVo; import com.ruoyi.cxxm.domain.vo.TaskCheckSubmitVo;
import com.ruoyi.cxxm.domain.vo.app.AppTaskCheckListItem; import com.ruoyi.cxxm.domain.vo.app.AppTaskCheckListItem;
import com.ruoyi.cxxm.mapper.TaskCheckMapper;
import com.ruoyi.cxxm.service.*; import com.ruoyi.cxxm.service.*;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -52,6 +54,8 @@ public class TaskCheckController extends BaseController {
private ITbxxService tbxxService; private ITbxxService tbxxService;
@Autowired @Autowired
private ITaskCheckAuditService taskCheckAuditService; private ITaskCheckAuditService taskCheckAuditService;
@Autowired
private TaskCheckMapper taskCheckMapper;
/** /**
* 查询任务巡查记录列表 * 查询任务巡查记录列表
@ -140,7 +144,7 @@ public class TaskCheckController extends BaseController {
/** /**
* 查询用户提交的填报记录列表 * 查询用户提交的填报记录列表
* *
* @param taskCheck 包含查询条件的任务检查实体 * @param taskCheck 包含查询条件的任务检查实体
* @param pageDomain 分页参数 * @param pageDomain 分页参数
* @return TableDataInfo 包含分页数据的表格信息 * @return TableDataInfo 包含分页数据的表格信息
*/ */
@ -149,13 +153,21 @@ public class TaskCheckController extends BaseController {
public TableDataInfo submittedList(TaskCheck taskCheck, PageDomain pageDomain) { public TableDataInfo submittedList(TaskCheck taskCheck, PageDomain pageDomain) {
// 初始化分页信息 // 初始化分页信息
Page<TaskCheck> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize()); Page<TaskCheck> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
// 构建查询条件查询当前用户提交的记录并按记录ID倒序排列
LambdaQueryWrapper<TaskCheck> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TaskCheck::getXcryId, SecurityUtils.getUserId());
queryWrapper.orderByDesc(TaskCheck::getId);
// 执行查询
Page<TaskCheck> taskCheckPage = taskCheckService.page(page, queryWrapper);
// 构建查询条件查询当前用户提交的记录并按记录ID倒序排列
// LambdaQueryWrapper<TaskCheck> queryWrapper = new LambdaQueryWrapper<>();
// queryWrapper.eq(TaskCheck::getXcryId, SecurityUtils.getUserId());
// queryWrapper.orderByDesc(TaskCheck::getId);
// 联表查询task表添加rwlx条件
MPJLambdaWrapper<TaskCheck> tcMPJQueryWrapper = new MPJLambdaWrapper<TaskCheck>()
.selectAll(TaskCheck.class)
.select(Task::getRwlx)
.leftJoin(Task.class, Task::getId,TaskCheck::getTaskId)
.eq(TaskCheck::getXcryId, SecurityUtils.getUserId())
.eq(Objects.nonNull(taskCheck.getRwlx()), Task::getRwlx, taskCheck.getRwlx());
// 执行查询
// Page<TaskCheck> taskCheckPage = taskCheckService.page(page, queryWrapper);
Page<TaskCheck> taskCheckPage = taskCheckMapper.selectJoinPage(page, TaskCheck.class, tcMPJQueryWrapper);
// 遍历查询结果转换为前端需要的格式 // 遍历查询结果转换为前端需要的格式
ArrayList<AppTaskCheckListItem> tcList = new ArrayList<>(); ArrayList<AppTaskCheckListItem> tcList = new ArrayList<>();
for (TaskCheck item : taskCheckPage.getRecords()) { for (TaskCheck item : taskCheckPage.getRecords()) {
@ -188,7 +200,7 @@ public class TaskCheckController extends BaseController {
} }
// 返回处理后的分页数据 // 返回处理后的分页数据
return getDataTableByPageNewList(taskCheckPage,tcList); return getDataTableByPageNewList(taskCheckPage, tcList);
} }
} }

View File

@ -5,6 +5,7 @@ import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.cxxm.domain.vo.app.AppTypeVo; import com.ruoyi.cxxm.domain.vo.app.AppTypeVo;
import com.ruoyi.cxxm.mapper.AppTypeMapper; import com.ruoyi.cxxm.mapper.AppTypeMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@RestController @RestController
@RequestMapping("/cxxm/app/type") @RequestMapping("/cxxm/app/type")
public class AppTypeController extends BaseController { public class AppTypeController extends BaseController {
@ -30,6 +32,7 @@ public class AppTypeController extends BaseController {
// 构建查询条件查询字典类型为"task_lx"的任务类型信息 // 构建查询条件查询字典类型为"task_lx"的任务类型信息
LambdaQueryWrapper<AppTypeVo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<AppTypeVo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AppTypeVo::getDictType,"task_lx"); queryWrapper.eq(AppTypeVo::getDictType,"task_lx");
queryWrapper.orderByAsc(AppTypeVo::getSort);
// 根据查询条件查询任务类型列表 // 根据查询条件查询任务类型列表
List<AppTypeVo> appTypeVos = appTypeMapper.selectList(queryWrapper); List<AppTypeVo> appTypeVos = appTypeMapper.selectList(queryWrapper);
// 将查询结果转换为数据表格格式返回 // 将查询结果转换为数据表格格式返回

View File

@ -1,22 +1,25 @@
package com.ruoyi.cxxm.controller.app; package com.ruoyi.cxxm.controller.app;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.PageDomain;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.text.StrFormatter;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.cxxm.domain.AppVersion; import com.ruoyi.cxxm.domain.AppVersion;
import com.ruoyi.cxxm.service.IAppVersionService; import com.ruoyi.cxxm.service.IAppVersionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.core.env.Environment;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.net.UnknownHostException;
/** /**
* app版本Controller * app版本Controller
@ -24,45 +27,93 @@ import java.util.List;
* @author jian * @author jian
* @date 2024-04-11 * @date 2024-04-11
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/cxxm/version") @RequestMapping("/cxxm/version")
public class AppVersionController extends BaseController public class AppVersionController extends BaseController {
{
@Autowired @Autowired
private IAppVersionService appVersionService; private IAppVersionService appVersionService;
@Autowired
private Environment environment;
/** /**
* 检查是否有新版本可用 * 检查是否有新版本可用
* *
* @param currentVersion 当前应用的版本号格式为X.Y.Z数字表示 * @param currentVersion 当前应用的版本号格式为X.Y.Z数字表示
* @return 返回新版本的信息或错误消息如果成功查询到新版本则返回新版本的信息如果查询不到新版本或出现错误则返回错误消息 * @return 返回新版本的信息或错误消息如果成功查询到新版本则返回新版本的信息如果查询不到新版本或出现错误则返回错误消息
*/ */
@GetMapping("/check") @GetMapping("/check")
public AjaxResult check(String currentVersion) { public AjaxResult check(String currentVersion) {
// 验证传入的当前版本号是否为空或格式不正确 // 验证传入的当前版本号是否为空或格式不正确
if (currentVersion == null || currentVersion.isEmpty() || !currentVersion.matches("\\d+\\.\\d+\\.\\d+")) { if (currentVersion == null || currentVersion.isEmpty() || !currentVersion.matches("\\d+\\.\\d+\\.\\d+")) {
return AjaxResult.error("当前版本格式不正确或不能为空"); return AjaxResult.error("当前版本格式不正确或不能为空");
}
// 构建查询条件查询比当前版本号大的且标记为需要更新的最新版本
LambdaQueryWrapper<AppVersion> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(AppVersion::getNewVersion, currentVersion);
queryWrapper.eq(AppVersion::getIsUpdate, "Y");
queryWrapper.orderByDesc(AppVersion::getId);
queryWrapper.last("limit 1");
try {
AppVersion appVersion = appVersionService.getOne(queryWrapper);
// 判断是否查询到新版本若查询到则返回新版本信息否则返回当前已是最新版本的消息
if (appVersion != null) {
return AjaxResult.success(appVersion);
} else {
return AjaxResult.success("当前已经是最新版本");
}
} catch (Exception e) {
// 捕获查询过程中的异常返回查询失败的消息
return AjaxResult.error("查询最新版本信息失败,请稍后重试");
}
} }
// 构建查询条件查询比当前版本号大的且标记为需要更新的最新版本
LambdaQueryWrapper<AppVersion> queryWrapper = new LambdaQueryWrapper<>(); @GetMapping("/checkLastVersion")
queryWrapper.gt(AppVersion::getNewVersion, currentVersion); public String checkLastVersion() throws UnknownHostException {
queryWrapper.eq(AppVersion::getIsUpdate, "Y"); // 构建查询条件查询比当前版本号大的且标记为需要更新的最新版本
queryWrapper.orderByDesc(AppVersion::getId); LambdaQueryWrapper<AppVersion> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.last("limit 1"); queryWrapper.eq(AppVersion::getIsUpdate, "Y");
try { queryWrapper.orderByDesc(AppVersion::getId);
queryWrapper.last("limit 1");
AppVersion appVersion = appVersionService.getOne(queryWrapper); AppVersion appVersion = appVersionService.getOne(queryWrapper);
// 判断是否查询到新版本若查询到则返回新版本信息否则返回当前已是最新版本的消息 // 判断是否查询到新版本若查询到则返回新版本信息否则返回当前已是最新版本的消息
if (appVersion != null) { return StrFormatter.format("http://116.63.157.3:8069/prod-api{}", appVersion.getApkUrl());
return AjaxResult.success(appVersion);
} else {
return AjaxResult.success("当前已经是最新版本");
}
} catch (Exception e) {
// 捕获查询过程中的异常返回查询失败的消息
return AjaxResult.error("查询最新版本信息失败,请稍后重试");
} }
}
@GetMapping("/checkLastVersion2")
public void checkLastVersion2(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 构建查询条件查询比当前版本号大的且标记为需要更新的最新版本
LambdaQueryWrapper<AppVersion> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(AppVersion::getIsUpdate, "Y");
queryWrapper.orderByDesc(AppVersion::getId);
queryWrapper.last("limit 1");
AppVersion appVersion = appVersionService.getOne(queryWrapper);
resourceDownload(appVersion.getApkUrl(), request, response);
}
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
if (!FileUtils.checkAllowDownload(resource)) {
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = RuoYiConfig.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(downloadPath, response.getOutputStream());
} catch (Exception e) {
log.error("下载文件失败", e);
}
}
} }

View File

@ -2,7 +2,9 @@ package com.ruoyi.cxxm.domain;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
@ -83,5 +85,11 @@ public class TaskCheck extends BaseEntity {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "巡查时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") @Excel(name = "巡查时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date xcsj; private Date xcsj;
/**
* 任务类型
*/
@TableField(exist = false)
private String rwlx;
} }

View File

@ -1,6 +1,7 @@
package com.ruoyi.cxxm.mapper; package com.ruoyi.cxxm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.ruoyi.cxxm.domain.TaskCheck; import com.ruoyi.cxxm.domain.TaskCheck;
/** /**
@ -9,7 +10,7 @@ import com.ruoyi.cxxm.domain.TaskCheck;
* @author ruoyi * @author ruoyi
* @date 2024-03-28 * @date 2024-03-28
*/ */
public interface TaskCheckMapper extends BaseMapper<TaskCheck> { public interface TaskCheckMapper extends MPJBaseMapper<TaskCheck> {
} }

View File

@ -2,6 +2,7 @@ package com.ruoyi.cxxm.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.yulichang.base.MPJBaseMapper;
import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.cxxm.domain.Task; import com.ruoyi.cxxm.domain.Task;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -15,7 +16,7 @@ import java.util.List;
* @author ruoyi * @author ruoyi
* @date 2024-03-28 * @date 2024-03-28
*/ */
public interface TaskMapper extends BaseMapper<Task> { public interface TaskMapper extends MPJBaseMapper<Task> {
/** /**
* 查询任务列表--保留数据权限 * 查询任务列表--保留数据权限
* @param queryWrapper * @param queryWrapper

View File

@ -340,6 +340,9 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
TaskCheckSubmitVo taskCheckSubmitVo = new TaskCheckSubmitVo(); TaskCheckSubmitVo taskCheckSubmitVo = new TaskCheckSubmitVo();
// 通过ID获取任务检查信息并将其属性复制到任务检查提交Vo中 // 通过ID获取任务检查信息并将其属性复制到任务检查提交Vo中
TaskCheck taskCheck = taskCheckService.getById(tcId); TaskCheck taskCheck = taskCheckService.getById(tcId);
if(Objects.isNull(taskCheck)){
return null;
}
BeanUtils.copyProperties(taskCheck, taskCheckSubmitVo); BeanUtils.copyProperties(taskCheck, taskCheckSubmitVo);
// 判断当前用户是否为任务创建者 // 判断当前用户是否为任务创建者
@ -431,9 +434,9 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
/** /**
* 获取填报统计信息 * 获取填报统计信息
* *
* @param task 任务信息 * @param task 任务信息
* @param taskCheck 任务检查信息 * @param taskCheck 任务检查信息
* @param taskCheckAudit 任务检查审核信息 * @param taskCheckAudit 任务检查审核信息
* @param taskCheckStatistics 任务检查统计信息 * @param taskCheckStatistics 任务检查统计信息
* @return 返回填充好的任务检查统计信息 * @return 返回填充好的任务检查统计信息
*/ */
@ -472,7 +475,6 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
} }
/** /**
* 上报任务巡查信息 * 上报任务巡查信息
* 对指定的任务巡查记录进行上报处理更新任务巡查表和任务表的相关信息 * 对指定的任务巡查记录进行上报处理更新任务巡查表和任务表的相关信息
@ -487,9 +489,8 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
TaskCheck taskCheck = taskCheckService.getById(tcId); TaskCheck taskCheck = taskCheckService.getById(tcId);
// 如果该任务已经上报则直接返回true // 如果该任务已经上报则直接返回true
if (Objects.equals(taskCheck.getSfsb(), SFSB.YSB.getValue())) { if (Objects.equals(taskCheck.getSfsb(), SFSB.YSB.getValue())) {
return true; throw new RuntimeException("该任务已经上报,不能重复上报!");
} }
// 更新任务巡查表标记为已上报 // 更新任务巡查表标记为已上报
taskCheck.setId(tcId); taskCheck.setId(tcId);
taskCheck.setSfsb(SFSB.YSB.getValue()); taskCheck.setSfsb(SFSB.YSB.getValue());
@ -536,15 +537,18 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
@Override @Override
@Transactional @Transactional
public boolean cancelReportTaskCheckInfo(Long tcId) { public boolean cancelReportTaskCheckInfo(Long tcId) {
// 判断任务审核情况
if (Objects.equals(taskCheckAuditService.getById(tcId).getShjg(), SHJG.TRUE.getValue())) {
throw new RuntimeException("该任务已审核,不能取消上报!");
}
// 根据ID获取任务检查信息 // 根据ID获取任务检查信息
TaskCheck taskCheck = taskCheckService.getById(tcId); TaskCheck taskCheck = taskCheckService.getById(tcId);
// 如果任务检查状态为未上报则直接返回true // 如果任务检查状态为未上报则直接返回true
if (Objects.equals(taskCheck.getSfsb(), SFSB.WSB.getValue())) { if (Objects.equals(taskCheck.getSfsb(), SFSB.WSB.getValue())) {
return true; throw new RuntimeException("该任务未上报,无法取消上报!");
}
// 判断任务审核情况
TaskCheckAudit tcCheckAudit = taskCheckAuditService.getOne(new LambdaQueryWrapper<TaskCheckAudit>().eq(TaskCheckAudit::getTcId, tcId));
if (Objects.nonNull(tcCheckAudit)) {
if (Objects.equals(tcCheckAudit.getShjg(), SHJG.TRUE.getValue()) || Objects.equals(tcCheckAudit.getShjg(), SHJG.FALSE.getValue())) {
throw new RuntimeException("该任务已审核,无法取消上报!");
}
} }
// 更新任务检查信息为已上报 // 更新任务检查信息为已上报
taskCheck.setId(tcId); taskCheck.setId(tcId);
@ -581,7 +585,6 @@ public class TaskCheckServiceImpl extends ServiceImpl<TaskCheckMapper, TaskCheck
taskMapper.setLastTcInfoFieldToNullById(taskCheck.getTaskId()); taskMapper.setLastTcInfoFieldToNullById(taskCheck.getTaskId());
} }
taskService.saveOrUpdate(task); taskService.saveOrUpdate(task);
return true; return true;
} }

View File

@ -74,7 +74,7 @@ spring:
# 数据库索引 # 数据库索引
database: 0 database: 0
# 密码 # 密码
password: password: 123456
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
lettuce: lettuce:
@ -95,7 +95,7 @@ token:
# 令牌密钥 # 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟 # 令牌有效期默认30分钟
expireTime: 30 expireTime: 4320
# MyBatis Plus配置 # MyBatis Plus配置
mybatis-plus: mybatis-plus:

View File

@ -10,10 +10,10 @@ import com.ruoyi.common.utils.StringUtils;
public class PageDomain public class PageDomain
{ {
/** 当前记录起始索引 */ /** 当前记录起始索引 */
private Integer pageNum; private Integer pageNum = 1;
/** 每页显示记录数 */ /** 每页显示记录数 */
private Integer pageSize; private Integer pageSize = 10;
/** 排序列 */ /** 排序列 */
private String orderByColumn; private String orderByColumn;

View File

@ -115,7 +115,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 静态资源可匿名访问 // 静态资源可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
.antMatchers("/cxxm/version/check").permitAll() .antMatchers("/cxxm/version/check**").permitAll()
// 除上面外的所有请求全部需要鉴权认证 // 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated() .anyRequest().authenticated()
.and() .and()

View File

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 楚雄外业调查管理系统 VUE_APP_TITLE = 楚雄州自然资源综合执法监管外业工作辅助平台V1.0
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'

View File

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 楚雄外业调查管理系统 VUE_APP_TITLE = 楚雄州自然资源综合执法监管外业工作辅助平台V1.0
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 235 KiB

View File

@ -3,11 +3,11 @@
<transition name="sidebarLogoFade"> <transition name="sidebarLogoFade">
<router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/"> <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" /> <img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> <!-- <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>-->
</router-link> </router-link>
<router-link v-else key="expand" class="sidebar-logo-link" to="/"> <router-link v-else key="expand" class="sidebar-logo-link" to="/">
<img v-if="logo" :src="logo" class="sidebar-logo" /> <img v-if="logo" :src="logo" class="sidebar-logo" />
<h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> <!-- <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>-->
</router-link> </router-link>
</transition> </transition>
</div> </div>
@ -78,7 +78,7 @@ export default {
color: #fff; color: #fff;
font-weight: 600; font-weight: 600;
line-height: 50px; line-height: 50px;
font-size: 14px; font-size: 15px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle; vertical-align: middle;
} }

View File

@ -27,10 +27,10 @@
<el-descriptions-item label="未整改"> <el-descriptions-item label="未整改">
<el-tag type="danger" effect="dark">{{ form.taskCheckStatistics.wzgcs }}</el-tag> <el-tag type="danger" effect="dark">{{ form.taskCheckStatistics.wzgcs }}</el-tag>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="整改到位"> <el-descriptions-item label="整改到位">
<el-tag type="warning" effect="dark">{{ form.taskCheckStatistics.wzgdwcs }}</el-tag> <el-tag type="warning" effect="dark">{{ form.taskCheckStatistics.wzgdwcs }}</el-tag>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="整改"> <el-descriptions-item label="整改到位">
<el-tag type="success" effect="dark">{{ form.taskCheckStatistics.yzgcs }}</el-tag> <el-tag type="success" effect="dark">{{ form.taskCheckStatistics.yzgcs }}</el-tag>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="审核不通过"> <el-descriptions-item label="审核不通过">

View File

@ -76,16 +76,16 @@
<dict-tag :options="dict.type.task_lx" :value="scope.row.rwlx"/> <dict-tag :options="dict.type.task_lx" :value="scope.row.rwlx"/>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="图斑所在县" align="center" prop="tbszx"/> <el-table-column label="图斑所在县" align="center" prop="tbszx" min-width="90"/>
<!-- <el-table-column label="下发时间" align="center" prop="xfsj" width="180">--> <!-- <el-table-column label="下发时间" align="center" prop="xfsj" width="180">-->
<!-- <template slot-scope="scope">--> <!-- <template slot-scope="scope">-->
<!-- <span>{{ parseTime(scope.row.xfsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>--> <!-- <span>{{ parseTime(scope.row.xfsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>-->
<!-- </template>--> <!-- </template>-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column label="需巡查次数" align="center" prop="xxccs"/> <el-table-column label="需巡查次数" align="center" prop="xxccs" min-width="90"/>
<el-table-column label="已巡查次数" align="center" prop="yxccs"/> <el-table-column label="已巡查次数" align="center" prop="yxccs" min-width="90"/>
<el-table-column label="州巡查次数" align="center" prop="zjxccs"/> <el-table-column label="州巡查次数" align="center" prop="zjxccs" min-width="90"/>
<el-table-column label="县巡查次数" align="center" prop="xjxccs"/> <el-table-column label="县巡查次数" align="center" prop="xjxccs" min-width="90"/>
<el-table-column label="最后巡查时间" align="center" prop="xcsj" width="150"> <el-table-column label="最后巡查时间" align="center" prop="xcsj" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.xcsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.xcsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>

View File

@ -203,7 +203,13 @@
<TianDiTuMap2 style="width: 96%;height:500px" v-bind:mapInfo="this.mapInfo"></TianDiTuMap2> <TianDiTuMap2 style="width: 96%;height:500px" v-bind:mapInfo="this.mapInfo"></TianDiTuMap2>
</div> </div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务信息" name="2"> <el-collapse-item title="更多图斑信息" name="2">
<el-descriptions column="2" v-if="form.tbxx!=null" border :contentStyle="content_style"
:labelStyle="label_style">
<el-descriptions-item v-for="(value,key) in tbxxInfo" :label="key">{{ value }}</el-descriptions-item>
</el-descriptions>
</el-collapse-item>
<el-collapse-item title="任务信息" name="3">
<el-descriptions column="2" border :contentStyle="content_style" :labelStyle="label_style"> <el-descriptions column="2" border :contentStyle="content_style" :labelStyle="label_style">
<el-descriptions-item label="导入人员">{{ form.createBy }}</el-descriptions-item> <el-descriptions-item label="导入人员">{{ form.createBy }}</el-descriptions-item>
<el-descriptions-item label="导入时间">{{ <el-descriptions-item label="导入时间">{{
@ -214,18 +220,18 @@
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="下发时间">{{ form.xfsj }}</el-descriptions-item> <el-descriptions-item label="下发时间">{{ form.xfsj }}</el-descriptions-item>
<el-descriptions-item label="已巡查次数">{{ form.yxccs }}</el-descriptions-item> <el-descriptions-item label="已巡查次数">{{ form.yxccs }}</el-descriptions-item>
<el-descriptions-item label="是否归档">{{ <el-descriptions-item label="任务状态">
this.selectDictLabel(this.dict.type.sf, form.sfgd) <el-tag type="success" v-if="form.sfgd=='0'">启用</el-tag>
}} <el-tag type="warning" v-if="form.sfgd=='1'">结束</el-tag>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务周期" name="3"> <el-collapse-item title="任务周期" name="4">
<el-form-item label="需巡查次数" prop="xxccs"> <el-form-item label="需巡查次数" prop="xxccs">
<el-input-number v-model="form.xxccs" placeholder="请输入需巡查次数" :min="1"/> <el-input-number v-model="form.xxccs" placeholder="请输入需巡查次数" :min="1"/>
<el-tag type="info" style="margin-left: 10px"></el-tag> <el-tag type="info" style="margin-left: 10px"></el-tag>
</el-form-item> </el-form-item>
<el-form-item label="巡查周期选项" prop="xczqxx" v-if="form.xxccs>1"> <el-form-item label="巡查周期选项" prop="xczqxx" v-if="form.xxccs>1" style="display: none">
<el-radio-group v-model="form.xczqxx"> <el-radio-group v-model="form.xczqxx">
<el-radio <el-radio
v-for="dict in dict.type.task_xczqxx" v-for="dict in dict.type.task_xczqxx"
@ -235,7 +241,7 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="巡查周期" prop="xczq" v-if="form.xxccs>1 && form.xczqxx==3"> <el-form-item label="巡查周期" prop="xczq" v-if="form.xxccs>1 && form.xczqxx==3" style="display: none">
<el-input-number v-model="form.xczq" placeholder="请输入巡查周期" :min="1"/> <el-input-number v-model="form.xczq" placeholder="请输入巡查周期" :min="1"/>
<el-tag type="info" style="margin-left: 10px">/</el-tag> <el-tag type="info" style="margin-left: 10px">/</el-tag>
</el-form-item> </el-form-item>
@ -295,7 +301,7 @@ export default {
// //
open: false, open: false,
// //
activeNames: ['1', '2', '3'], activeNames: ['1', '2', '3', '4'],
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
@ -459,7 +465,7 @@ export default {
this.tbxxInfo = JSON.parse(response.data.tbxx.info); this.tbxxInfo = JSON.parse(response.data.tbxx.info);
this.mapInfo.centerPoint = {x:response.data.x,y:response.data.y} this.mapInfo.centerPoint = {x: response.data.x, y: response.data.y}
this.mapInfo.gis = response.data.tbxx.gis this.mapInfo.gis = response.data.tbxx.gis
this.open = true; this.open = true;

View File

@ -96,7 +96,7 @@
<span>{{ parseTime(scope.row.drsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span> <span>{{ parseTime(scope.row.drsj, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" min-width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
@ -185,10 +185,14 @@
<div style="height:500px;margin-top: 20px"> <div style="height:500px;margin-top: 20px">
<TianDiTuMap2 style="width: 96%;height:500px" v-bind:mapInfo="this.mapInfo"></TianDiTuMap2> <TianDiTuMap2 style="width: 96%;height:500px" v-bind:mapInfo="this.mapInfo"></TianDiTuMap2>
</div> </div>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务信息" name="2"> <el-collapse-item title="更多图斑信息" name="2">
<el-descriptions column="2" v-if="form.tbxx!=null" border :contentStyle="content_style"
:labelStyle="label_style">
<el-descriptions-item v-for="(value,key) in tbxxInfo" :label="key">{{ value }}</el-descriptions-item>
</el-descriptions>
</el-collapse-item>
<el-collapse-item title="任务信息" name="3">
<el-descriptions column="2" border :contentStyle="content_style" :labelStyle="label_style"> <el-descriptions column="2" border :contentStyle="content_style" :labelStyle="label_style">
<el-descriptions-item label="导入人员">{{ form.createBy }}</el-descriptions-item> <el-descriptions-item label="导入人员">{{ form.createBy }}</el-descriptions-item>
<el-descriptions-item label="导入时间">{{ <el-descriptions-item label="导入时间">{{
@ -205,12 +209,12 @@
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="任务周期" name="3"> <el-collapse-item title="任务周期" name="4">
<el-form-item label="需巡查次数" prop="xxccs"> <el-form-item label="需巡查次数" prop="xxccs">
<el-input-number v-model="form.xxccs" placeholder="请输入需巡查次数" :min="1"/> <el-input-number v-model="form.xxccs" placeholder="请输入需巡查次数" :min="1"/>
<el-tag type="info" style="margin-left: 10px"></el-tag> <el-tag type="info" style="margin-left: 10px"></el-tag>
</el-form-item> </el-form-item>
<el-form-item label="巡查周期选项" prop="xczqxx" v-if="form.xxccs>1"> <el-form-item label="巡查周期选项" prop="xczqxx" v-if="form.xxccs>1" style="display: none">
<el-radio-group v-model="form.xczqxx"> <el-radio-group v-model="form.xczqxx">
<el-radio <el-radio
v-for="dict in dict.type.task_xczqxx" v-for="dict in dict.type.task_xczqxx"
@ -220,7 +224,7 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="巡查周期" prop="xczq" v-if="form.xxccs>1 && form.xczqxx==3"> <el-form-item label="巡查周期" prop="xczq" v-if="form.xxccs>1 && form.xczqxx==3" style="display: none">
<el-input-number v-model="form.xczq" placeholder="请输入巡查周期" :min="1"/> <el-input-number v-model="form.xczq" placeholder="请输入巡查周期" :min="1"/>
<el-tag type="info" style="margin-left: 10px">/</el-tag> <el-tag type="info" style="margin-left: 10px">/</el-tag>
</el-form-item> </el-form-item>
@ -345,7 +349,7 @@ export default {
// //
rules: {}, rules: {},
// //
activeNames: ['1', '2', '3'], activeNames: ['1', '2', '3', '4'],
// //
pickerOptions: { pickerOptions: {
shortcuts: [{ shortcuts: [{
@ -469,6 +473,9 @@ export default {
getTask(id).then(response => { getTask(id).then(response => {
this.form = response.data; this.form = response.data;
this.tbxxInfo = JSON.parse(response.data.tbxx.info); this.tbxxInfo = JSON.parse(response.data.tbxx.info);
this.mapInfo.centerPoint = {x: response.data.x, y: response.data.y}
this.mapInfo.gis = response.data.tbxx.gis
this.open = true; this.open = true;
this.title = "修改任务"; this.title = "修改任务";
}); });
@ -578,7 +585,7 @@ export default {
this.form = response.data; this.form = response.data;
this.tbxxInfo = JSON.parse(response.data.tbxx.info); this.tbxxInfo = JSON.parse(response.data.tbxx.info);
this.mapInfo.centerPoint = {x:response.data.x,y:response.data.y} this.mapInfo.centerPoint = {x: response.data.x, y: response.data.y}
this.mapInfo.gis = response.data.tbxx.gis this.mapInfo.gis = response.data.tbxx.gis
this.open = true; this.open = true;

View File

@ -128,7 +128,8 @@
<file-upload v-model="form.apkUrl" @change="handleFile" :fileSize="500" :fileType="['apk']" :limit="1"/> <file-upload v-model="form.apkUrl" @change="handleFile" :fileSize="500" :fileType="['apk']" :limit="1"/>
</el-form-item> </el-form-item>
<el-form-item label="更新描述" prop="updateDescription"> <el-form-item label="更新描述" prop="updateDescription">
<editor v-model="form.updateDescription" :height="200"></editor> <!-- <editor v-model="form.updateDescription" :height="200"></editor>-->
<el-input v-model="form.updateDescription" type="textarea" placeholder="请输入更新描述" :autosize="{ minRows: 8}"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="是否更新" prop="isUpdate"> <el-form-item label="是否更新" prop="isUpdate">
<el-radio-group v-model="form.isUpdate"> <el-radio-group v-model="form.isUpdate">

View File

@ -119,15 +119,6 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20" style="margin-bottom: 10px"> <el-row :gutter="20" style="margin-bottom: 10px">
<el-col :span="4">
<div>
<el-statistic
group-separator=","
:value="statisticsData.yzg"
title="已整改">
</el-statistic>
</div>
</el-col>
<el-col :span="4"> <el-col :span="4">
<div> <div>
<el-statistic <el-statistic
@ -142,7 +133,16 @@
<el-statistic <el-statistic
group-separator="," group-separator=","
:value="statisticsData.wzgdw" :value="statisticsData.wzgdw"
title="未整改到位"> title="整改未到位">
</el-statistic>
</div>
</el-col>
<el-col :span="4">
<div>
<el-statistic
group-separator=","
:value="statisticsData.yzg"
title="整改到位">
</el-statistic> </el-statistic>
</div> </div>
</el-col> </el-col>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="login"> <div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">若依后台管理系统</h3> <h3 class="title">楚雄州自然资源综合执法监管外业工作辅助平台V1.0</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
v-model="loginForm.username" v-model="loginForm.username"
@ -173,7 +173,7 @@ export default {
.login-form { .login-form {
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
width: 400px; width: 450px;
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
.el-input { .el-input {
height: 38px; height: 38px;

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">若依后台管理系统</h3> <h3 class="title">楚雄州自然资源综合执法监管外业工作辅助平台V1.0</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
@ -61,7 +61,7 @@
</el-form> </el-form>
<!-- 底部 --> <!-- 底部 -->
<div class="el-register-footer"> <div class="el-register-footer">
<span>Copyright © 2018-2024 ruoyi.vip All Rights Reserved.</span> <!-- <span>Copyright © 2018-2024 ruoyi.vip All Rights Reserved.</span>-->
</div> </div>
</div> </div>
</template> </template>
@ -164,7 +164,7 @@ export default {
.register-form { .register-form {
border-radius: 6px; border-radius: 6px;
background: #ffffff; background: #ffffff;
width: 400px; width: 450px;
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
.el-input { .el-input {
height: 38px; height: 38px;