|
@@ -13,6 +13,7 @@ import com.lowagie.text.pdf.PdfWriter;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.apache.commons.lang.time.DateUtils;
|
|
|
+import org.springblade.business.dto.TrialMaterialMobilizationDTO;
|
|
|
import org.springblade.business.entity.TrialMaterialMobilization;
|
|
|
import org.springblade.business.entity.TrialSampleInfo;
|
|
|
import org.springblade.business.entity.TrialSamplingRecord;
|
|
@@ -26,33 +27,58 @@ import org.springblade.business.utils.SystemUtils;
|
|
|
import org.springblade.business.vo.TrialMaterialMobilizationVO;
|
|
|
import org.springblade.business.vo.TrialSamplingRecordVO;
|
|
|
import org.springblade.business.wrapper.TrialMaterialMobilizationWarpper;
|
|
|
+import org.springblade.common.utils.CommonUtil;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
+import org.springblade.core.excel.util.ExcelUtil;
|
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
+import org.springblade.core.oss.model.BladeFile;
|
|
|
import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
-import org.springblade.core.tool.utils.BeanUtil;
|
|
|
-import org.springblade.core.tool.utils.DateUtil;
|
|
|
-import org.springblade.core.tool.utils.Func;
|
|
|
-import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
+import org.springblade.core.tool.utils.*;
|
|
|
+import org.springblade.resource.feign.NewIOSSClient;
|
|
|
+import org.springblade.system.entity.Dict;
|
|
|
+import org.springblade.system.feign.IDictClient;
|
|
|
import org.springblade.system.user.entity.User;
|
|
|
import org.springblade.system.user.feign.IUserClient;
|
|
|
+import org.springframework.mock.web.MockMultipartFile;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import javax.servlet.ServletOutputStream;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.*;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialMaterialMobilizationMapper, TrialMaterialMobilization> implements ITrialMaterialMobilizationService {
|
|
|
|
|
|
private final IUserClient iUserClient;
|
|
|
+ private final IDictClient iDictClient;
|
|
|
private final TrialSampleInfoMapper trialSampleInfoMapper;
|
|
|
private final TrialSamplingRecordMapper trialSamplingRecordMapper;
|
|
|
+ private final NewIOSSClient newIOSSClient;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean mobilizationVerification(String number, String id) {
|
|
|
+ List<TrialMaterialMobilization> list = baseMapper.selectList(Wrappers.<TrialMaterialMobilization>query().lambda());
|
|
|
+ if (StringUtils.isEmpty(id)) {
|
|
|
+ TrialMaterialMobilization trialMaterialMobilization1 = list.stream().filter(f -> f.getMaterialNumber().equals(number)).findAny().orElse(null);
|
|
|
+ return trialMaterialMobilization1 != null;
|
|
|
+ } else {
|
|
|
+ TrialMaterialMobilization trialMaterialMobilization = list.stream().filter(f -> f.getId().equals(Long.parseLong(id))).findAny().orElse(null);
|
|
|
+ assert trialMaterialMobilization != null;
|
|
|
+ if (!trialMaterialMobilization.getMaterialNumber().equals(number)) {
|
|
|
+ TrialMaterialMobilization trialMaterialMobilization1 = list.stream().filter(f -> f.getMaterialNumber().equals(number)).findAny().orElse(null);
|
|
|
+ return trialMaterialMobilization1 != null;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public boolean mobilizationSubmit(TrialMaterialMobilization obj) {
|
|
@@ -69,12 +95,17 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean mobilizationCopy(String ids) {
|
|
|
- List<TrialMaterialMobilization> trialMaterialMobilizations = baseMapper.selectBatchIds(Func.toLongList(ids));
|
|
|
- for (TrialMaterialMobilization obj : trialMaterialMobilizations) {
|
|
|
- obj.setId(SnowFlakeUtil.getId());
|
|
|
+ public boolean mobilizationCopy(List<TrialMaterialMobilizationDTO> dto) throws ServiceException {
|
|
|
+ long count = dto.stream().map(TrialMaterialMobilizationDTO::getMaterialNumber).distinct().count();
|
|
|
+ if (count < dto.size()) {
|
|
|
+ throw new ServiceException("当前有数据的编号重复,请重新填写");
|
|
|
+ }
|
|
|
+ List<TrialMaterialMobilization> list = new ArrayList<>();
|
|
|
+ for (TrialMaterialMobilizationDTO trialMaterialMobilizationDTO : dto) {
|
|
|
+ trialMaterialMobilizationDTO.setId(SnowFlakeUtil.getId());
|
|
|
+ list.add(trialMaterialMobilizationDTO);
|
|
|
}
|
|
|
- return this.saveBatch(trialMaterialMobilizations);
|
|
|
+ return this.saveBatch(list);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -91,11 +122,16 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
if (ObjectUtil.isNotEmpty(obj.getQueryValue())) {
|
|
|
queryWrapper.lambda().like(TrialMaterialMobilization::getMaterialName, obj.getQueryValue());
|
|
|
queryWrapper.lambda().or().like(TrialMaterialMobilization::getSpecificationModel, obj.getQueryValue());
|
|
|
- queryWrapper.lambda().or().like(TrialMaterialMobilization::getSpecificationNumber, obj.getQueryValue());
|
|
|
+ queryWrapper.lambda().or().like(TrialMaterialMobilization::getMaterialNumber, obj.getQueryValue());
|
|
|
}
|
|
|
IPage<TrialMaterialMobilization> pages = this.page(page, queryWrapper.lambda().orderBy(true, true, TrialMaterialMobilization::getCreateTime));
|
|
|
+
|
|
|
IPage<TrialMaterialMobilizationVO> trialMaterialMobilizationVOIPage = TrialMaterialMobilizationWarpper.build().pageVO(pages);
|
|
|
List<TrialMaterialMobilizationVO> records = trialMaterialMobilizationVOIPage.getRecords();
|
|
|
+ for (TrialMaterialMobilizationVO record : records) {
|
|
|
+ R<User> userR = iUserClient.userInfoById(record.getUserId());
|
|
|
+ record.setUserName(userR.getData().getName());
|
|
|
+ }
|
|
|
return trialMaterialMobilizationVOIPage.setRecords(records);
|
|
|
}
|
|
|
|
|
@@ -105,7 +141,7 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void importMobilization(List<TrialMaterialMobilizationExcel> data, Boolean isCovered) {
|
|
|
+ public void importMobilization(List<TrialMaterialMobilizationExcel> data, Boolean isCovered, Long contractId) {
|
|
|
List<TrialMaterialMobilization> list = new ArrayList<>();
|
|
|
if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
|
|
|
throw new ServiceException("获取用户信息失败");
|
|
@@ -114,6 +150,7 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
TrialMaterialMobilization trialMaterialMobilization = BeanUtil.copyProperties(excel, TrialMaterialMobilization.class);
|
|
|
assert trialMaterialMobilization != null;
|
|
|
trialMaterialMobilization.setUserId(SecureUtil.getUserId());
|
|
|
+ trialMaterialMobilization.setContractId(contractId);
|
|
|
list.add(trialMaterialMobilization);
|
|
|
});
|
|
|
if (isCovered) {
|
|
@@ -124,45 +161,74 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void mobilizationExportPdf(String ids, HttpServletResponse response) {
|
|
|
+ public String mobilizationExportPdf(String ids, HttpServletResponse response) {
|
|
|
try {
|
|
|
String fileName = java.net.URLEncoder.encode(DateUtil.time() + ".pdf", "UTF-8");
|
|
|
response.reset();
|
|
|
- response.setContentType("application/pdf; name=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
|
|
|
response.setHeader("Content-Disposition", "inline; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
|
|
|
- //构建字节输出流
|
|
|
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
|
|
|
|
//构造数据
|
|
|
List<TrialMaterialMobilization> list = baseMapper.selectBatchIds(Func.toLongList(ids));
|
|
|
- List<TrialMaterialMobilizationExcel> pdfData = new ArrayList<>();
|
|
|
+
|
|
|
+ //材料类型
|
|
|
+ R<List<Dict>> typeList = iDictClient.getList("material_type");
|
|
|
+
|
|
|
+ //获取所有用户信息
|
|
|
+ List<User> userList = iUserClient.selectUserAll();
|
|
|
+
|
|
|
+ //删除旧PDF
|
|
|
+ List<String> pdfUrls = list.stream().map(TrialMaterialMobilization::getPdfUrl).distinct().collect(Collectors.toList());
|
|
|
+ for (String pdfUrl : pdfUrls) {
|
|
|
+ //格式 https: //xxx.com//upload/20221101/xxx.pdf
|
|
|
+ String pdfName = pdfUrl.split("//")[2].split("/")[2];
|
|
|
+ newIOSSClient.removeFile(pdfName);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TrialMaterialMobilizationVO> pdfData = new ArrayList<>();
|
|
|
for (TrialMaterialMobilization trialMaterialMobilization : list) {
|
|
|
- R<User> userR = iUserClient.userInfoById(trialMaterialMobilization.getUserId());
|
|
|
- TrialMaterialMobilizationExcel trialMaterialMobilizationExcel = BeanUtil.copyProperties(trialMaterialMobilization, TrialMaterialMobilizationExcel.class);
|
|
|
- assert trialMaterialMobilizationExcel != null;
|
|
|
- trialMaterialMobilizationExcel.setUserName(userR.getData().getName());
|
|
|
- pdfData.add(trialMaterialMobilizationExcel);
|
|
|
+
|
|
|
+ for (User user : userList) {
|
|
|
+ if (trialMaterialMobilization.getUserId().equals(user.getId())) {
|
|
|
+ TrialMaterialMobilizationVO trialMaterialMobilizationVO = BeanUtil.copyProperties(trialMaterialMobilization, TrialMaterialMobilizationVO.class);
|
|
|
+ assert trialMaterialMobilizationVO != null;
|
|
|
+ trialMaterialMobilizationVO.setUserName(user.getName());
|
|
|
+ pdfData.add(trialMaterialMobilizationVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//创建文档,设置页面大小、左右上下边距
|
|
|
Document document = new Document();
|
|
|
BaseFont bfChinese = null;
|
|
|
+ String pdfUrl = null;
|
|
|
//处理中文显示问题,使用资源字体
|
|
|
if (SystemUtils.isWindows()) {
|
|
|
//windows
|
|
|
+ pdfUrl = "C:\\pdfFiles\\";
|
|
|
+ File file = new File(pdfUrl);
|
|
|
+ if (!file.exists()) {
|
|
|
+ file.mkdirs();
|
|
|
+ }
|
|
|
bfChinese = BaseFont.createFont("C:/WINDOWS/Fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
|
|
|
}
|
|
|
if (SystemUtils.isLinux()) {
|
|
|
//linux
|
|
|
+ pdfUrl = "/home/pdfFiles";
|
|
|
+ File file = new File(pdfUrl);
|
|
|
+ if (!file.exists()) {
|
|
|
+ file.mkdirs();
|
|
|
+ }
|
|
|
bfChinese = BaseFont.createFont("/usr/share/fonts/my-fonts/SIMYOU.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
|
|
|
}
|
|
|
|
|
|
+ FileOutputStream fileOutputStream = new FileOutputStream(pdfUrl + fileName);
|
|
|
+
|
|
|
//Font dateTitle = new Font(bfChinese, 7, Font.NORMAL);
|
|
|
//Font title = new Font(bfChinese, 12, Font.BOLD);//文字加粗
|
|
|
Font textFont = new Font(bfChinese, 7, Font.NORMAL);//文字正常
|
|
|
|
|
|
//设置分页
|
|
|
- PdfWriter.getInstance(document, byteArrayOutputStream);
|
|
|
+ PdfWriter.getInstance(document, fileOutputStream);
|
|
|
|
|
|
//打开文档
|
|
|
document.open();
|
|
@@ -198,15 +264,22 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
document.add(tableTitle);
|
|
|
document.add(new Paragraph("\n"));
|
|
|
|
|
|
- String[] array = {"材料编号", "进场日期", "材料名称", "材料类型", "规格型号", "供应商单位", "材料单价", "材料数量", "计算单位", "生产批号", "上产地/厂家", "拟用部位", "记录人"};
|
|
|
+ String[] array = {"材料编号", "进场日期", "材料名称", "材料类型", "规格型号", "供应商单位", "材料单价", "材料数量",
|
|
|
+ "计算单位", "生产批号", "上产地/厂家", "拟用部位", "记录人"};
|
|
|
for (String s : array) {
|
|
|
PDFUtil.createTableCell(s, textFont, table, lineHeight, colSpan);
|
|
|
}
|
|
|
- for (TrialMaterialMobilizationExcel pdfDatum : pdfData) {
|
|
|
- PDFUtil.createTableCell(pdfDatum.getId().toString(), textFont, table, lineHeight, colSpan);
|
|
|
+ for (TrialMaterialMobilizationVO pdfDatum : pdfData) {
|
|
|
+ PDFUtil.createTableCell(pdfDatum.getMaterialNumber(), textFont, table, lineHeight, colSpan);
|
|
|
PDFUtil.createTableCell(DateUtil.formatDate(pdfDatum.getMobilizationDate()), textFont, table, lineHeight, colSpan);
|
|
|
PDFUtil.createTableCell(pdfDatum.getMaterialName(), textFont, table, lineHeight, colSpan);
|
|
|
- PDFUtil.createTableCell(pdfDatum.getMaterialType().toString(), textFont, table, lineHeight, colSpan);
|
|
|
+
|
|
|
+ for (Dict type : typeList.getData()) {
|
|
|
+ if (type.getDictKey().equals(pdfDatum.getMaterialType().toString())) {
|
|
|
+ PDFUtil.createTableCell(type.getDictValue(), textFont, table, lineHeight, colSpan);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
PDFUtil.createTableCell(pdfDatum.getSpecificationModel(), textFont, table, lineHeight, colSpan);
|
|
|
PDFUtil.createTableCell(pdfDatum.getSupplierUnit(), textFont, table, lineHeight, colSpan);
|
|
|
PDFUtil.createTableCell(pdfDatum.getMaterialPrice().toString(), textFont, table, lineHeight, colSpan);
|
|
@@ -218,20 +291,39 @@ public class TrialMaterialMobilizationServiceImpl extends BaseServiceImpl<TrialM
|
|
|
PDFUtil.createTableCell(pdfDatum.getUserName(), textFont, table, lineHeight, colSpan);
|
|
|
}
|
|
|
document.add(table);
|
|
|
- document.close();
|
|
|
+
|
|
|
+ BladeFile bladeFile;
|
|
|
try {
|
|
|
- byteArrayOutputStream.close();
|
|
|
- } catch (IOException e) {
|
|
|
+ document.close();
|
|
|
+ fileOutputStream.close();
|
|
|
+
|
|
|
+ //存储OSS
|
|
|
+ File file = new File(pdfUrl + fileName);
|
|
|
+ String canonicalPath = file.getCanonicalPath();
|
|
|
+ String name = file.getName();
|
|
|
+ bladeFile = newIOSSClient.uploadFile(name, canonicalPath);
|
|
|
+
|
|
|
+ //修改URL
|
|
|
+ for (TrialMaterialMobilization trialMaterialMobilization : list) {
|
|
|
+ trialMaterialMobilization.setPdfUrl(bladeFile.getLink());
|
|
|
+ }
|
|
|
+ this.updateBatchById(list);
|
|
|
+
|
|
|
+ //删除本地缓存
|
|
|
+ if (file.exists()) {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+
|
|
|
+ return bladeFile.getLink();
|
|
|
+
|
|
|
+ } catch (ClassCastException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
- //输出
|
|
|
- ServletOutputStream os = response.getOutputStream();
|
|
|
- os.write(byteArrayOutputStream.toByteArray());
|
|
|
-
|
|
|
} catch (DocumentException | IOException e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
@Override
|