package com.yuanchu.mom.service.impl;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.ExcelWriter;
|
import com.alibaba.excel.context.AnalysisContext;
|
import com.alibaba.excel.event.AnalysisEventListener;
|
import com.alibaba.excel.util.FileUtils;
|
import com.alibaba.excel.util.ListUtils;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.yuanchu.mom.dto.ProcessMethodSearchNewDto;
|
import com.yuanchu.mom.mapper.ProcessMethodSearchNewMapper;
|
import com.yuanchu.mom.pojo.ProcessMethodSearchNew;
|
import com.yuanchu.mom.service.ProcessMethodSearchNewService;
|
import com.yuanchu.mom.utils.QueryWrappers;
|
import com.yuanchu.mom.utils.UserUtils;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.URLEncoder;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 标准查新
|
*
|
* @author zhuo
|
* @since 2024-11-04
|
*/
|
@Service
|
public class ProcessMethodSearchNewServiceImpl extends ServiceImpl<ProcessMethodSearchNewMapper, ProcessMethodSearchNew> implements ProcessMethodSearchNewService {
|
|
/**
|
* 新增标准查新
|
*
|
* @param processMethodSearchNewList
|
* @return
|
*/
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean addMethodSearchNew(List<ProcessMethodSearchNew> processMethodSearchNewList) {
|
for (ProcessMethodSearchNew processMethodSearchNew : processMethodSearchNewList) {
|
processMethodSearchNew.setIsNewStandard(1);
|
}
|
// 修改之前所有没有变新的
|
List<ProcessMethodSearchNew> processMethodSearchNews = baseMapper.selectList(Wrappers.<ProcessMethodSearchNew>lambdaQuery()
|
.eq(ProcessMethodSearchNew::getIsNewStandard, 1));
|
for (ProcessMethodSearchNew processMethodSearchNew : processMethodSearchNews) {
|
baseMapper.update(null, Wrappers.<ProcessMethodSearchNew>lambdaUpdate()
|
.set(ProcessMethodSearchNew::getMethodName, processMethodSearchNew.getNewMethodName())
|
.set(ProcessMethodSearchNew::getStandardNo, processMethodSearchNew.getNewStandardNo())
|
.set(ProcessMethodSearchNew::getFileNo, processMethodSearchNew.getNewStandardNo())
|
.set(ProcessMethodSearchNew::getIsNewStandard, 0)
|
.set(ProcessMethodSearchNew::getNewMethodName, null)
|
.set(ProcessMethodSearchNew::getNewStandardNo, null)
|
.eq(ProcessMethodSearchNew::getMethodSearchNewId, processMethodSearchNew.getMethodSearchNewId()));
|
}
|
// 新增
|
this.saveBatch(processMethodSearchNewList);
|
return true;
|
}
|
|
/**
|
* 标准查新列表
|
* @param processMethodSearchNew
|
* @return
|
*/
|
@Override
|
public IPage<ProcessMethodSearchNew> pageMethodSearchNew(Page page, ProcessMethodSearchNewDto processMethodSearchNew) {
|
String beginDate = processMethodSearchNew.getBeginDate();
|
String endDate = processMethodSearchNew.getEndDate();
|
processMethodSearchNew.setBeginDate(null);
|
processMethodSearchNew.setEndDate(null);
|
return baseMapper.pageMethodSearchNew(page, QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
|
}
|
|
/**
|
* 标准查新导出
|
* @param processMethodSearchNew
|
* @param response
|
*/
|
@Override
|
public void exportMethodSearchNew(ProcessMethodSearchNewDto processMethodSearchNew, HttpServletResponse response) {
|
// 查询标准查新
|
String beginDate = processMethodSearchNew.getBeginDate();
|
String endDate = processMethodSearchNew.getEndDate();
|
String writeUserId = processMethodSearchNew.getWriteUserId().toString();
|
String ratifyUserId = processMethodSearchNew.getRatifyUserId().toString();
|
processMethodSearchNew.setBeginDate(null);
|
processMethodSearchNew.setEndDate(null);
|
processMethodSearchNew.setWriteUserId(null);
|
processMethodSearchNew.setRatifyUserId(null);
|
List<ProcessMethodSearchNewDto> methodSearchNews = baseMapper.selectMethodSearchNew(QueryWrappers.queryWrappers(processMethodSearchNew), beginDate, endDate);
|
|
int index = 1;
|
// 格式化参数
|
for (ProcessMethodSearchNewDto methodSearchNew : methodSearchNews) {
|
// 是否是跟新标准
|
if (methodSearchNew.getIsNewStandard().equals(1)) {
|
methodSearchNew.setIsNewStandardString("是");
|
} else {
|
methodSearchNew.setIsNewStandardString("否");
|
}
|
|
// 备注
|
if (methodSearchNew.getRemark() != null) {
|
if (methodSearchNew.getRemark().equals(1)) {
|
methodSearchNew.setIsNewStandardString("替换");
|
} else {
|
methodSearchNew.setIsNewStandardString("作废");
|
}
|
}
|
|
if (methodSearchNew.getRemark() != null) {
|
if (methodSearchNew.getRemark().equals(1)) {
|
methodSearchNew.setRemarkString("替换");
|
} else {
|
methodSearchNew.setRemarkString("作废");
|
}
|
}
|
|
switch (methodSearchNew.getSearchNewSource()) {
|
case 0:
|
methodSearchNew.setStandardNet("√");
|
break;
|
case 1:
|
methodSearchNew.setInformationOffices("√");
|
break;
|
case 2:
|
methodSearchNew.setStandardBookstore("√");
|
break;
|
case 3:
|
methodSearchNew.setOther("√");
|
break;
|
}
|
methodSearchNew.setIndex(index);
|
index++;
|
|
}
|
// 查询签名地址
|
String writeUserUrl = UserUtils.getUserSignatureUrl(Integer.valueOf(writeUserId));
|
String ratifyUserUrl = UserUtils.getUserSignatureUrl(Integer.valueOf(ratifyUserId));
|
|
//创建ExcelWriter 可以自动关流但还是手动关一次
|
ExcelWriter excelWriter = null;
|
|
try {
|
// outputStream:要导出的文件的输出流
|
OutputStream outputStream = response.getOutputStream();
|
// 获取模版文件
|
ClassPathResource classPathResource = new ClassPathResource("/static/excel/check-records.xlsx");
|
// 使用模版文件的两种方式:
|
// 1、文件路径:.withTemplate(templateFileName)
|
// 2、输入流:.withTemplate(inputStream)
|
// String templateFileName = classPathResource.getFile().getPath();
|
InputStream inputStream = classPathResource.getInputStream();
|
// 创建ExcelWriter
|
excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
|
// 获取第一个sheet页
|
WriteSheet writeSheet = EasyExcel.writerSheet(0, "标准查新导出").build();
|
//excelWriter.fill() 这地方就是填充属性。
|
// excelWriter.fill(methodSearchNews, fillConfig, writeSheet);
|
excelWriter.fill(methodSearchNews, writeSheet);
|
|
// 这里easy excel模板导出问题 会删除后面内容再进行进行填充
|
// 所以list 后面还有数据 想办法手动写入
|
// 手动创建一个list 存放数据 然后再进行填充
|
// 这里List<Object>可以用对象代替 偷懒用list
|
List<List<Object>> totalListList = ListUtils.newArrayList();
|
List<Object> totalList = ListUtils.newArrayList();
|
totalListList.add(totalList);
|
// 第一列
|
totalList.add("查新人:");
|
// 第二列 设置签名
|
totalList.add(FileUtils.readFileToByteArray(new File(writeUserUrl)));
|
// 第三列
|
totalList.add("日期:");
|
// 第五列
|
totalList.add("2024-12-23"); // 日期写死
|
// 第六列
|
totalList.add("审核:");
|
// 第七列
|
totalList.add(FileUtils.readFileToByteArray(new File(ratifyUserUrl)));
|
// 第八列
|
totalList.add("日期:");
|
// 第九列
|
totalList.add("2024-12-23"); // 日期写死
|
// 这里是write 别和fill 搞错了
|
excelWriter.write(totalListList, writeSheet);
|
|
// 设置输出流格式以及文件名:
|
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
|
response.setCharacterEncoding("utf-8");
|
String fileName = URLEncoder.encode(
|
"原材料检测信息导出", "UTF-8");
|
response.setHeader("Content-disposition",
|
"attachment;filename=" + fileName + ".xlsx");
|
} catch (Exception e) {
|
throw new RuntimeException(e);
|
} finally {
|
// 千万别忘记close关闭流
|
if (excelWriter != null) {
|
excelWriter.close();
|
|
}
|
}
|
}
|
|
|
|
|
|
|
|
/**
|
* 导入标准查新
|
* @param file
|
* @return
|
*/
|
@Override
|
public boolean importMethodSearchNew(MultipartFile file) {
|
|
List<ProcessMethodSearchNewDto> searchNewDtoList = new ArrayList<>();
|
|
try {
|
// excel解析
|
EasyExcel.read(file.getInputStream(), ProcessMethodSearchNewDto.class, new AnalysisEventListener<ProcessMethodSearchNewDto>() {
|
@Override
|
public void invoke(ProcessMethodSearchNewDto searchNewDto, AnalysisContext analysisContext) {
|
searchNewDtoList.add(searchNewDto);
|
}
|
|
@Override
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
|
|
}
|
}).sheet().doRead();
|
// 格式化查新对象
|
List<ProcessMethodSearchNew> collect = searchNewDtoList.stream().map(searchNewDto -> {
|
ProcessMethodSearchNew searchNew = new ProcessMethodSearchNew();
|
BeanUtils.copyProperties(searchNewDto, searchNew);
|
// 是否是更新
|
if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
|
if (searchNewDto.getIsNewStandardString().equals("是")) {
|
searchNew.setIsNewStandard(1);
|
} else {
|
searchNew.setIsNewStandard(0);
|
}
|
}
|
// 查新记录
|
if (StringUtils.isNotBlank(searchNewDto.getStandardNet())) {
|
searchNew.setSearchNewSource(0);
|
} else if (StringUtils.isNotBlank(searchNewDto.getInformationOffices())) {
|
searchNew.setSearchNewSource(1);
|
} else if (StringUtils.isNotBlank(searchNewDto.getIsNewStandardString())) {
|
searchNew.setSearchNewSource(2);
|
} else if (StringUtils.isNotBlank(searchNewDto.getOther())) {
|
searchNew.setSearchNewSource(3);
|
}
|
|
// 备注
|
if (StringUtils.isNotBlank(searchNewDto.getRemarkString())) {
|
if (searchNewDto.getRemarkString().equals("替换")) {
|
searchNew.setRemark(1);
|
} else if (searchNewDto.getRemarkString().equals("作废")) {
|
searchNew.setRemark(0);
|
}
|
}
|
|
return searchNew;
|
}).collect(Collectors.toList());
|
this.saveBatch(collect);
|
|
} catch (IOException e) {
|
throw new RuntimeException(e);
|
}
|
return true;
|
}
|
}
|