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(
value = "version",
update = "%s+1",
fill = FieldFill.INSERT_UPDATE
)
// @TableField(
// value = "version",
// update = "%s+1",
// fill = FieldFill.INSERT_UPDATE
// )
protected long version;
/**

View File

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

View File

@ -33,7 +33,7 @@ import java.util.Objects;
*/
@Slf4j
@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> {
@Resource
RemoteTaskService remoteTaskService;

View File

@ -156,11 +156,24 @@ public class WrkProjectController {
* 项目数据 展示
*/
@GetMapping(value = "/project/data")
// @RequiresPermissions("inspection:project:info")
@RequiresPermissions("inspection:project:info")
public AjaxResult projectData(ProjectQuery 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;
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.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.constant.SecurityConstants;
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.page.CommonParam;
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.vo.CountVO;
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.TerminalService;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
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.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 org.springframework.stereotype.Service;
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 javax.annotation.Resource;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@ -55,6 +70,10 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
WrkInfoService wrkInfoService;
@Resource
RemoteDeptService remoteDeptService;
@Resource
RemoteTaskService remoteTaskService;
@Resource
RemoteOssService ossService;
@DataScope
public PageResult pageList(WrkProject project, CommonParam commonParam) {
@ -263,6 +282,70 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
);
List<WrkProject> recordList = page.getRecords();
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());
Map<Long, String> deptNameMap
= remoteDeptService.getDeptNameByIds(deptIds, SecurityConstants.INNER);
@ -288,6 +371,5 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
p.setTotalStore(totalStoreMap.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.excel.utils.ExcelUtils;
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.service.PollingTaskService;
import com.chushang.inspection.terminal.po.FiveStore;
@ -76,7 +77,11 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
page.getCurrent());
}
/**
* 在此处获取 dataScope
*/
@Override
@DataScope(deptAlias = "t")
public void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) {
remoteTaskService.createTask(CreateTaskDTO.builder()
.params(JSON.toJSONString(query))
@ -91,6 +96,12 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
.build(), SecurityConstants.INNER);
}
/**
* todo 使用后台任务时, 可能导致无法获取对应dataScope数据
* 参考 com.chushang.inspection.project.service.WrkProjectService#projectDataExport
* @param params
* @return
*/
public Result<String> export(String params){
FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class);
List<FiveStoreVO> listFiveStores = baseMapper.pageList(query, null);

View File

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

View File

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

View File

@ -1,6 +1,8 @@
package com.chushang.task.remote;
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.mq.produce.MqProduceService;
import com.chushang.task.entity.TaskInfo;
@ -13,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
* @auther: zhao
@ -62,8 +65,11 @@ public class RemoteTaskController implements RemoteTaskService {
.lastRunResult(task.getLastRunResult())
.lastRunTime(task.getLastRunTime())
.remark(task.getRemark())
.lastRunTime(task.getLastRunTime())
.lastRunResult(task.getLastRunResult())
.build();
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){
mqProduceService.send(taskInfo.getApplicationName() + 1, taskInfo);
mqProduceService.send(taskInfo.getApplicationName(), taskInfo);
taskInfo.setTaskStatus(TaskStatusEnum.DISPATCH.getCode());
updateById(taskInfo);