1. 去除version 字段修改导致 修改失败

2. 项目数据导出
3. oss 无法序列化问题
This commit is contained in:
ant 2024-07-29 11:18:49 +08:00
parent 3f82ff3ff1
commit ab9146e0f0
10 changed files with 158 additions and 14 deletions

View File

@ -53,12 +53,11 @@ public class BaseEntity implements Serializable {
/** /**
* 版本号 * 版本号
*/ */
@Version // @TableField(
@TableField( // value = "version",
value = "version", // update = "%s+1",
update = "%s+1", // fill = FieldFill.INSERT_UPDATE
fill = FieldFill.INSERT_UPDATE // )
)
protected long version; protected long version;
/** /**

View File

@ -1,8 +1,11 @@
package com.chushang.inspection.project.vo; package com.chushang.inspection.project.vo;
import cn.hutool.core.date.DatePattern;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.chushang.common.dict.annotation.DictFormat; import com.chushang.common.dict.annotation.DictFormat;
import com.chushang.common.mybatis.annotation.Condition; import com.chushang.common.mybatis.annotation.Condition;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -13,57 +16,70 @@ import java.time.LocalDateTime;
@Data @Data
public class ProjectVO { public class ProjectVO {
@ExcelProperty(value = "项目id")
private Long projectId; private Long projectId;
@ExcelProperty(value = "项目名称")
private String projectName; private String projectName;
/** /**
* 项目联系人 * 项目联系人
* 查询条件 项目联系人 * 查询条件 项目联系人
*/ */
@ExcelProperty(value = "项目联系人")
private String projectConcat; private String projectConcat;
/** /**
* 项目联系人电话 * 项目联系人电话
* 查询条件 项目联系人电话 * 查询条件 项目联系人电话
*/ */
@ExcelProperty(value = "项目联系电话")
private String projectPhone; private String projectPhone;
/** /**
* 项目所属部门id * 项目所属部门id
* 查询条件 项目所属部门id 单id * 查询条件 项目所属部门id 单id
*/ */
@ExcelProperty(value = "项目所属部门id")
private Long deptId; private Long deptId;
/** /**
* 部门名称 * 部门名称
*/ */
@ExcelProperty(value = "项目所属部门")
private String deptName; private String deptName;
/** /**
* 创建时间 * 创建时间
*/ */
@ExcelProperty(value = "项目创建时间")
@JsonFormat(pattern = DatePattern.NORM_DATETIME_PATTERN)
private LocalDateTime createTime; private LocalDateTime createTime;
/** /**
* 项目状态 * 项目状态
*/ */
@DictFormat(dictType = "project_effect") @DictFormat(dictType = "project_effect")
@ExcelProperty(value = "项目状态")
private Integer projectEffect; private Integer projectEffect;
/** /**
* 总任务数 * 总任务数
*/ */
@ExcelProperty(value = "项目总任务数量")
private Integer totalTask; private Integer totalTask;
/** /**
* 总商户数 * 总商户数
*/ */
@ExcelProperty(value = "项目总商户数量")
private Integer totalStore; private Integer totalStore;
/** /**
* 总终端数 * 总终端数
*/ */
@ExcelProperty(value = "项目总终端数量")
private Integer totalTerminal; private Integer totalTerminal;
/** /**
* 总工单数 * 总工单数
*/ */
@ExcelProperty(value = "项目总工单数量")
private Integer totalWrk; private Integer totalWrk;
/** /**
* 总巡检数 * 总巡检数
*/ */
@ExcelProperty(value = "项目总巡检数量")
private Integer totalIns; private Integer totalIns;

View File

@ -33,7 +33,7 @@ import java.util.Objects;
*/ */
@Slf4j @Slf4j
@Component @Component
@RocketMQMessageListener(topic = ServiceConstant.INSPECTION + 1, consumerGroup = ServiceConstant.INSPECTION_CONSUMER_GROUP) @RocketMQMessageListener(topic = ServiceConstant.INSPECTION, consumerGroup = ServiceConstant.INSPECTION_CONSUMER_GROUP)
public class InspectionConsumerService implements RocketMQListener<TaskInfo> { public class InspectionConsumerService implements RocketMQListener<TaskInfo> {
@Resource @Resource
RemoteTaskService remoteTaskService; RemoteTaskService remoteTaskService;

View File

@ -156,11 +156,24 @@ public class WrkProjectController {
* 项目数据 展示 * 项目数据 展示
*/ */
@GetMapping(value = "/project/data") @GetMapping(value = "/project/data")
// @RequiresPermissions("inspection:project:info") @RequiresPermissions("inspection:project:info")
public AjaxResult projectData(ProjectQuery projectQuery) public AjaxResult projectData(ProjectQuery projectQuery)
{ {
return AjaxResult.success(projectService.projectData(projectQuery)); return AjaxResult.success(projectService.projectData(projectQuery));
} }
/**
* 项目数据导出
* @param projectQuery 查询条件
*/
@SysLog(value = "项目数据", businessType = BusinessType.EXPORT)
@GetMapping(value = "/project/data/export")
// @RequiresPermissions("inspection:project:export")
public AjaxResult projectDataExport(ProjectQuery projectQuery)
{
return AjaxResult.success("项目数据导出成功, 请在后台任务中查看, 任务id: ["+ projectService.projectDataExport(projectQuery) +"]");
}
} }

View File

@ -1,11 +1,15 @@
package com.chushang.inspection.project.service; package com.chushang.inspection.project.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.constant.SecurityConstants; import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.exception.utils.AssertUtil; import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mybatis.enums.Operator; import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
@ -17,11 +21,20 @@ import com.chushang.inspection.project.po.WrkProjectContract;
import com.chushang.inspection.project.query.ProjectQuery; import com.chushang.inspection.project.query.ProjectQuery;
import com.chushang.inspection.project.vo.CountVO; import com.chushang.inspection.project.vo.CountVO;
import com.chushang.inspection.project.vo.ProjectVO; import com.chushang.inspection.project.vo.ProjectVO;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import com.chushang.inspection.terminal.service.StoreService; import com.chushang.inspection.terminal.service.StoreService;
import com.chushang.inspection.terminal.service.TerminalService; import com.chushang.inspection.terminal.service.TerminalService;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
import com.chushang.inspection.work.service.WrkInfoService; import com.chushang.inspection.work.service.WrkInfoService;
import com.chushang.oss.entity.dto.UploadBytesDTO;
import com.chushang.oss.entity.vo.FileSourceVo;
import com.chushang.oss.feign.RemoteOssService;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.feign.RemoteDeptService; import com.chushang.system.feign.RemoteDeptService;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -30,6 +43,8 @@ import com.chushang.inspection.project.mapper.WrkProjectMapper;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -55,6 +70,10 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
WrkInfoService wrkInfoService; WrkInfoService wrkInfoService;
@Resource @Resource
RemoteDeptService remoteDeptService; RemoteDeptService remoteDeptService;
@Resource
RemoteTaskService remoteTaskService;
@Resource
RemoteOssService ossService;
@DataScope @DataScope
public PageResult pageList(WrkProject project, CommonParam commonParam) { public PageResult pageList(WrkProject project, CommonParam commonParam) {
@ -263,6 +282,70 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
); );
List<WrkProject> recordList = page.getRecords(); List<WrkProject> recordList = page.getRecords();
List<ProjectVO> list = BeanUtil.copyToList(recordList, ProjectVO.class); List<ProjectVO> list = BeanUtil.copyToList(recordList, ProjectVO.class);
if (CollectionUtil.isNotEmpty(list)){
covertProjectData(list);
}
return new PageResult(list,page.getTotal(),page.getSize(),page.getCurrent());
}
@DataScope
public Long projectDataExport(ProjectQuery projectQuery) {
LambdaQueryWrapper<WrkProject> sql = WrapperUtils.builder(projectQuery, CommonParam.buildAllRequest());
long recordList = this.count(
sql
);
AssertUtil.invalidate (recordList <= 0, "导出数据为空");
return remoteTaskService.createTask(CreateTaskDTO.builder()
.params(JSON.toJSONString(projectQuery))
.taskName("项目数据导出")
.applicationName(ServiceEnum.INSPECTION)
.methodName("export")
.className(this.getClass().getName())
.deptId(SecurityUtils.getDeptId())
.taskType(TaskTypeEnum.DOWN)
.remark("五统一商户明细导出")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER).getData();
}
public Result<String> export(String params){
ProjectQuery projectQuery = JSON.parseObject(params, ProjectQuery.class);
LambdaQueryWrapper<WrkProject> sql = WrapperUtils.builder(projectQuery, CommonParam.buildAllRequest());
List<WrkProject> recordList = this.list(
sql
);
List<ProjectVO> list = BeanUtil.copyToList(recordList, ProjectVO.class);
if (CollectionUtil.isNotEmpty(list)){
covertProjectData(list);
}
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){
// 如果为空时 创建一个空excel
if (CollectionUtil.isEmpty(list)){
}else {
ExcelUtils.exportList(outputStream, ProjectVO.class, list, "商户数据");
}
// 上传到oss fileStore 是五统一的商户文件
Result<List<FileSourceVo>> listResult = ossService.uploadBytes(UploadBytesDTO.builder()
.bytes(outputStream.toByteArray()).build(), "商户数据导出.xlsx", false, "", "projectData", SecurityConstants.INNER);
if (listResult.isSuccess() && CollectionUtil.isNotEmpty(listResult.getData())){
List<FileSourceVo> data = listResult.getData();
FileSourceVo fileSourceVo = data.get(0);
String filePath = fileSourceVo.getFilePath();
return Result.ok(filePath);
}else {
log.error("生成文件异常, {}, {}", listResult.getCode(), listResult.getMsg());
return Result.failed(listResult.getCode(), listResult.getMsg());
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private void covertProjectData(List<ProjectVO> list) {
Set<Long> deptIds = list.stream().map(ProjectVO::getDeptId).collect(Collectors.toSet()); Set<Long> deptIds = list.stream().map(ProjectVO::getDeptId).collect(Collectors.toSet());
Map<Long, String> deptNameMap Map<Long, String> deptNameMap
= remoteDeptService.getDeptNameByIds(deptIds, SecurityConstants.INNER); = remoteDeptService.getDeptNameByIds(deptIds, SecurityConstants.INNER);
@ -288,6 +371,5 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
p.setTotalStore(totalStoreMap.getOrDefault(projectId, 0)); p.setTotalStore(totalStoreMap.getOrDefault(projectId, 0));
p.setTotalTask(totalTaskMap.getOrDefault(projectId, 0)); p.setTotalTask(totalTaskMap.getOrDefault(projectId, 0));
}); });
return new PageResult(list,page.getTotal(),page.getSize(),page.getCurrent());
} }
} }

View File

@ -8,6 +8,7 @@ import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.web.Result; import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils; import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.project.po.PollingTask; import com.chushang.inspection.project.po.PollingTask;
import com.chushang.inspection.project.service.PollingTaskService; import com.chushang.inspection.project.service.PollingTaskService;
import com.chushang.inspection.terminal.po.FiveStore; import com.chushang.inspection.terminal.po.FiveStore;
@ -76,7 +77,11 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
page.getCurrent()); page.getCurrent());
} }
/**
* 在此处获取 dataScope
*/
@Override @Override
@DataScope(deptAlias = "t")
public void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) { public void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) {
remoteTaskService.createTask(CreateTaskDTO.builder() remoteTaskService.createTask(CreateTaskDTO.builder()
.params(JSON.toJSONString(query)) .params(JSON.toJSONString(query))
@ -91,6 +96,12 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
.build(), SecurityConstants.INNER); .build(), SecurityConstants.INNER);
} }
/**
* todo 使用后台任务时, 可能导致无法获取对应dataScope数据
* 参考 com.chushang.inspection.project.service.WrkProjectService#projectDataExport
* @param params
* @return
*/
public Result<String> export(String params){ public Result<String> export(String params){
FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class); FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class);
List<FiveStoreVO> listFiveStores = baseMapper.pageList(query, null); List<FiveStoreVO> listFiveStores = baseMapper.pageList(query, null);

View File

@ -1,7 +1,12 @@
package com.chushang.oss.entity.dto; package com.chushang.oss.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/** /**
* @auther: zhao * @auther: zhao
@ -9,7 +14,11 @@ import lombok.Data;
*/ */
@Data @Data
@Builder @Builder
public class UploadBytesDTO { @AllArgsConstructor
@NoArgsConstructor
public class UploadBytesDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private byte[] bytes; private byte[] bytes;

View File

@ -1,10 +1,14 @@
package com.chushang.oss.entity.dto; package com.chushang.oss.entity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream; import java.io.InputStream;
import java.io.Serial;
import java.io.Serializable;
/** /**
* 流文件上传 * 流文件上传
@ -13,7 +17,11 @@ import java.io.InputStream;
*/ */
@Data @Data
@Builder @Builder
public class UploadStreamDTO { @AllArgsConstructor
@NoArgsConstructor
public class UploadStreamDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
private InputStream is; private InputStream is;

View File

@ -1,6 +1,8 @@
package com.chushang.task.remote; package com.chushang.task.remote;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.chushang.common.core.web.Result; import com.chushang.common.core.web.Result;
import com.chushang.common.mq.produce.MqProduceService; import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.task.entity.TaskInfo; import com.chushang.task.entity.TaskInfo;
@ -13,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
/** /**
* @auther: zhao * @auther: zhao
@ -62,8 +65,11 @@ public class RemoteTaskController implements RemoteTaskService {
.lastRunResult(task.getLastRunResult()) .lastRunResult(task.getLastRunResult())
.lastRunTime(task.getLastRunTime()) .lastRunTime(task.getLastRunTime())
.remark(task.getRemark()) .remark(task.getRemark())
.lastRunTime(task.getLastRunTime())
.lastRunResult(task.getLastRunResult())
.build(); .build();
taskInfo.setUpdateBy("system"); taskInfo.setUpdateBy("system");
return Result.ok(taskInfoService.updateById(taskInfo)); return Result.ok(taskInfoService.update(taskInfo, new LambdaUpdateWrapper<TaskInfo>()
.eq(TaskInfo::getTaskId, taskId)));
} }
} }

View File

@ -54,7 +54,7 @@ public class TaskInfoService extends ServiceImpl<TaskInfoMapper, TaskInfo> imple
} }
public void joinQueue(TaskInfo taskInfo){ public void joinQueue(TaskInfo taskInfo){
mqProduceService.send(taskInfo.getApplicationName() + 1, taskInfo); mqProduceService.send(taskInfo.getApplicationName(), taskInfo);
taskInfo.setTaskStatus(TaskStatusEnum.DISPATCH.getCode()); taskInfo.setTaskStatus(TaskStatusEnum.DISPATCH.getCode());
updateById(taskInfo); updateById(taskInfo);