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.metadata.data.ImageData;
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
import com.alibaba.excel.util.FileUtils;
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
|
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.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.IOException;
|
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));
|
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("UTF-8");
|
try {
|
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
|
String fileName = URLEncoder.encode("原材料检测信息导出", "UTF-8");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
|
|
// 创建 ExcelWriter
|
ServletOutputStream outputStream = response.getOutputStream();
|
ExcelWriter excelWriter = EasyExcel.write(outputStream).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
|
|
// 获取 sheet0 对象
|
WriteSheet mainSheet = EasyExcel.writerSheet(0, "标准查新导出").head(ProcessMethodSearchNewDto.class).build();
|
|
// 图片对象
|
ImageData imageData = new ImageData();
|
ImageData imageData1 = new ImageData();
|
// 设置图片数据
|
imageData.setImage(FileUtils.readFileToByteArray(new File(writeUserUrl))); // 设置编制人图片的文件路径
|
imageData1.setImage(FileUtils.readFileToByteArray(new File(ratifyUserUrl))); // 设置批准人图片的文件路径
|
|
// 设置编制人图片位置
|
imageData.setRelativeFirstRowIndex(1);
|
imageData.setRelativeFirstColumnIndex(2);
|
imageData.setRelativeLastRowIndex(1);
|
imageData.setRelativeLastColumnIndex(2);
|
// 设置批准人图片位置
|
imageData1.setRelativeFirstRowIndex(1);
|
imageData1.setRelativeFirstColumnIndex(4);
|
imageData1.setRelativeLastRowIndex(1);
|
imageData1.setRelativeLastColumnIndex(4);
|
|
|
List<ImageData> list = new ArrayList<>();
|
// 放入列表中
|
list.add(imageData);
|
list.add(imageData1);
|
|
// // 设置额外的文字(可选)
|
// WriteCellData<Void> writeCellData = new WriteCellData<>();
|
//// imageDemoData.setWriteCellDataFile(writeCellData);
|
// // 这里可以设置为 EMPTY 则代表不需要其他数据了
|
// writeCellData.setType(CellDataTypeEnum.STRING);
|
// writeCellData.setStringValue("额外的放一些文字");
|
|
|
// 将图片数据设置到单元格中
|
WriteCellData<ImageData> writeCellData = new WriteCellData<>();
|
writeCellData.setImageDataList(list);
|
|
// 创建数据列表
|
List<List<WriteCellData>> dataList = new ArrayList<>();
|
List<WriteCellData> rowData = new ArrayList<>();
|
rowData.add(writeCellData); // 把图片放入一行
|
dataList.add(rowData);
|
|
|
// 向 sheet0 写入数据(传入空list这样只导出表头)
|
excelWriter.write(methodSearchNews, mainSheet);
|
// 写入 图片
|
excelWriter.write(dataList,mainSheet);
|
|
//关闭流
|
excelWriter.finish();
|
|
} catch (IOException e) {
|
throw new RuntimeException("导出失败");
|
}
|
}
|
|
|
|
|
|
|
|
/**
|
* 导入标准查新
|
* @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;
|
}
|
}
|