Commit 300d7b67 by wangweidong

霍煤鸿骏报告生成增加重复项目 自选项目生成报告

parent e6889dc1
......@@ -302,6 +302,15 @@ public class EntrustSampleController extends ServiceController {
@ApiOperation("选择检测项目生成样品报告")
@PostMapping("/make_single_report")
public RestResult<Boolean> makeReport(@RequestParam("sampleId")Long sampleId, @RequestParam("itemIds")Long[] itemIds,@RequestParam("templateId")Long templateId) {
return success(entrustSampleService.makeSingleReport(sampleId,itemIds,templateId,getAccount()));
}
@ApiOperation("质量判定样品分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
......
......@@ -33,6 +33,8 @@ public interface EntrustSampleItemMapper extends BatchMapper<EntrustSampleItem>
List<EntrustSampleItemVO> selectVOListBySampleIds(@Param("ids")Long[] ids);
List<EntrustSampleItemVO> selectVOListBySampleIdsAndIds(@Param("sampleIds")Long[] sampleIds,@Param("ids")Long[] ids);
List<EntrustSampleItemVO> selectVOListByIds(@Param("ids")Long[] ids);
List<EntrustSampleItemVO> selectByEntrustSampleId(@Param("sampleId")Long sampleId);
......
......@@ -51,6 +51,8 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
List<EntrustSampleItemVO> listBySampleIds(Long[] ids);
List<EntrustSampleItemVO> listBySampleIdsAndIds(Long[] ids,Long [] itemIds);
OriginalRecord saveExcelOriginalRecord(Long[] ids, Long templateId, Account account);
......
......@@ -81,4 +81,6 @@ public interface IEntrustSampleService extends IBaseService<EntrustSample> {
boolean updateSample(EntrustSample entrustSample, String source, Account account);
boolean addTestItemInInput(EntrustSampleADDDTO dto, Account account);
boolean makeSingleReport(Long sampleId, Long[] itemIds, Long templateId, Account account);
}
......@@ -452,6 +452,12 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
}
@Override
public List<EntrustSampleItemVO> listBySampleIdsAndIds(Long[] sampleIds,Long[] ids) {
return baseMapper.selectVOListBySampleIdsAndIds(sampleIds,ids);
}
@Override
public OriginalRecord saveExcelOriginalRecord(Long[] ids, Long templateId, Account account) {
RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择试验项目!");
RestAssert.fail(null == templateId, "请选择原始记录模板");
......
......@@ -123,20 +123,44 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
return s.getId();
}).collect(Collectors.toList());
List<EntrustSampleItem> itemList = entrustSampleItemService.list(Condition.create().setSqlSelect("id","entrust_sample_id","name").isNotNull("name").in("entrust_sample_id",sampleIdsList));
Map<Long,Set<String>> itemMap = new HashMap<>();
Map<Long,List<String>> itemMap = new HashMap<>();
Map<Long,Set<String>> itemSetMap = new HashMap<>();
for (EntrustSampleItem item : itemList) {
if (itemMap.containsKey(item.getEntrustSampleId())){
Set<String> set = itemMap.get(item.getEntrustSampleId());
List<String> list = itemMap.get(item.getEntrustSampleId());
list.add(item.getName());
itemMap.put(item.getEntrustSampleId(),list);
Set<String> set = itemSetMap.get(item.getEntrustSampleId());
set.add(item.getName());
itemMap.put(item.getEntrustSampleId(),set);
itemSetMap.put(item.getEntrustSampleId(),set);
}else {
List<String> list = new ArrayList<>();
list.add(item.getName());
itemMap.put(item.getEntrustSampleId(),list);
Set<String> set = new HashSet<>();
set.add(item.getName());
itemMap.put(item.getEntrustSampleId(),set);
itemSetMap.put(item.getEntrustSampleId(),set);
}
}
for (EntrustSampleVO vo : sampleVOList) {
vo.setItemNames(StringHandleUtils.join(itemMap.get(vo.getId())));
List<String> nameList = itemMap.get(vo.getId());
if (CollectionUtils.isEmpty(nameList)){
vo.setItemRepeat(false);
}else {
String itemNames = StringHandleUtils.join(nameList);
vo.setItemNames(itemNames);
if (nameList.size()!=itemSetMap.get(vo.getId()).size()){
vo.setItemRepeat(true);
}else{
vo.setItemRepeat(false);
}
}
}
return page.setRecords(sampleVOList);
}
......@@ -963,6 +987,316 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
return true;
}
@Override
public boolean makeSingleReport(Long sampleId, Long[] itemIds, Long templateId, Account account) {
Long[] ids = new Long[]{sampleId};
RestAssert.fail(ArrayUtils.isEmpty(ids), "请选择要生成报告的样品");
RestAssert.fail(ArrayUtils.isEmpty(itemIds), "请选择检测项目");
RestAssert.fail(null == templateId, "请选择报告模板!");
List<EntrustReportRelSample> relSamples = entrustReportRelSampleService.list(Condition.create().in("sample_id", ids));
if (CollectionUtils.isNotEmpty(relSamples)) {
RestAssert.fail("您选择的样品含有已经生成过报告的,请确认");
}
List<EntrustSample> sampleList = super.list(Condition.create().in("id", ids));
RestAssert.fail(CollectionUtils.isEmpty(sampleList), "样品不存在请确认!");
Long entrustId = sampleList.get(0).getEntrustId();
Entrust entrust = entrustService.getById(entrustId);
EntrustReportTemplate sysFileTemplate = entrustReportTemplateService.getById(templateId);
Set<String> sampleNameSet = new HashSet<>();
for (EntrustSample sample : sampleList) {
sampleNameSet.add(sample.getName());
}
String sampleName = StringHandleUtils.join(sampleNameSet);
if (sysFileTemplate.getObjectKey().contains(".docx")) {
RestAssert.fail(null == sysFileTemplate, "选择的报告模板不存在");
String sampleShape = sampleList.get(0).getSampleShape();
Map<String, Object> contractMap = new HashMap<>();
contractMap.put("s", entrust);
contractMap.put("sampleName", sampleName);
contractMap.put("sampleShape", sampleShape);
InputStream io = ossClient.download(sysFileTemplate.getObjectKey());
XWPFTemplate xwpfTemplate = null;
try {
xwpfTemplate = XWPFTemplate.compile(io).setDefaultValue("/").render(contractMap);
} catch (Exception e) {
logger.error("生成报告失败", e);
RestAssert.fail("报告生成失败:" + e.getMessage());
}
XWPFDocument baseDoc = xwpfTemplate.getXWPFDocument();
List<EntrustSampleItemVO> sampleItemVOList = entrustSampleItemService.listBySampleIdsAndIds(ids,itemIds);
List<XWPFTable> tableList = baseDoc.getTables();
for (XWPFTable xwpfTable : tableList) {
String text = xwpfTable.getText();
if (com.patzn.cloud.commons.toolkit.StringHandleUtils.containsString(text, "{name}", "{sampleCode}", "{agreedValue}", "{testValue}")) {
//检测内容
reportMakeTestContent(xwpfTable, sampleItemVOList.size(), 1, sampleItemVOList);
}
}
String generated = entrust.getCode();
FileOutputStream os = null;
File file = null;
try {
file = File.createTempFile(generated, ".docx");
os = new FileOutputStream(file);
baseDoc.write(os);
os.flush();
entrustReportService.uploadReportGenerateDocx(entrust, ids, account, StringHandleUtils.join(sampleNameSet), "报告生成", file);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
baseDoc.close();
io.close();
FileUtils.deleteFiles(file);
} catch (Exception e) {
e.printStackTrace();
}
}
} else if (sysFileTemplate.getObjectKey().contains(".xlsx")) {
List<EntrustSampleItemVO> sampleItemVOList = entrustSampleItemService.listBySampleIdsAndIds(ids,itemIds);
List<EntrustSampleVO> sampleVOList = new ArrayList<>();
for (EntrustSample sample : sampleList) {
EntrustSampleVO vo = sample.convert(EntrustSampleVO.class);
List<EntrustSampleItemVO> sampleItemList = new ArrayList<>();
for (EntrustSampleItemVO itemVO : sampleItemVOList) {
if (sample.getId().equals(itemVO.getEntrustSampleId())) {
sampleItemList.add(itemVO);
}
}
vo.setItemVOList(sampleItemList);
sampleVOList.add(vo);
}
InputStream io = ossClient.download(sysFileTemplate.getObjectKey());
XSSFWorkbook xssfWorkbook = null;
try {
xssfWorkbook = new XSSFWorkbook(io);
} catch (IOException e) {
e.printStackTrace();
}
List<EntrustReportTemplateConfig> configList = entrustReportTemplateConfigService.list(Condition.create().eq("template_id", templateId));
OriginalUtil.doReplace(xssfWorkbook, entrust);
Map<String, String> mapReplace = new HashMap<>();
mapReplace.put("#{nowDate}", DateUtils.toYearMonthDay(new Date()));
mapReplace.put("#{sampleNum}", countByEntrustId(entrust.getId()) + "");
HSSFWorkbookUtil.replaceModel(mapReplace, xssfWorkbook, 0);
XSSFSheet sheetOne = xssfWorkbook.getSheetAt(0);
String sheetName = sheetOne.getSheetName();
System.out.println(sheetName);
sheetOne.setForceFormulaRecalculation(true);
int sampleMergerNum = sysFileTemplate.getSampleMergerNum();
int templateSampleNum = sysFileTemplate.getTemplateSampleNum();
if (templateSampleNum >= sampleVOList.size()) {
Integer beginRow = sysFileTemplate.getSampleBeginRow();
for (EntrustSampleVO vo : sampleVOList) {
List<EntrustSampleItemIndex> indexList = entrustSampleItemIndexService.listBySampleId(vo.getId());
vo.setIndexList(indexList);
XSSFRow xssfRow = sheetOne.getRow(beginRow);
for (EntrustReportTemplateConfig config : configList) {
XSSFCell cell = xssfRow.getCell(config.getColumnPlace());
if ("sn".equals(config.getDataAttribute())) {
continue;
}
if (StringUtils.isBlank(config.getDataAttribute())) {
continue;
}
String value = StringHandleUtils.getFieldValue(config.getDataAttribute(), vo);
cell.setCellValue(value);
}
beginRow += sampleMergerNum;
}
String generated = entrust.getCode();
FileOutputStream os = null;
File file = null;
try {
file = File.createTempFile(generated, ".xlsx");
os = new FileOutputStream(file);
xssfWorkbook.write(os);
os.flush();
entrustReportService.uploadReportGenerateDocx(entrust, ids, account, StringHandleUtils.join(sampleNameSet), "报告生成", file);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
xssfWorkbook.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
io.close();
} catch (IOException e) {
e.printStackTrace();
}
FileUtils.deleteFiles(file);
}
} else {
if (null != sysFileTemplate.getMoreSheet() && sysFileTemplate.getMoreSheet() == 1) {
int total = sampleVOList.size();
int totalSheetSize = (total + templateSampleNum - 1) / templateSampleNum;
List<List<EntrustSampleVO>> listList = Lists.partition(sampleVOList, templateSampleNum);
for (int i = 1; i < totalSheetSize; i++) {
xssfWorkbook.cloneSheet(0, sheetOne.getSheetName() + (i + 1));
}
for (int k = 0; k < listList.size(); k++) {
Integer beginRow = sysFileTemplate.getSampleBeginRow();
List<EntrustSampleVO> sampleVOListIndex = listList.get(k);
for (EntrustSampleVO vo : sampleVOListIndex) {
List<EntrustSampleItemIndex> indexList = entrustSampleItemIndexService.listBySampleId(vo.getId());
vo.setIndexList(indexList);
XSSFSheet sheetOneIndex = xssfWorkbook.getSheetAt(k);
XSSFRow xssfRow = sheetOneIndex.getRow(beginRow);
for (EntrustReportTemplateConfig config : configList) {
XSSFCell cell = xssfRow.getCell(config.getColumnPlace());
if ("sn".equals(config.getDataAttribute())) {
continue;
}
if (StringUtils.isBlank(config.getDataAttribute())) {
continue;
}
String value = StringHandleUtils.getFieldValue(config.getDataAttribute(), vo);
cell.setCellValue(value);
}
beginRow += sampleMergerNum;
}
}
} else {
Integer beginRow = sysFileTemplate.getSampleBeginRow();
int insertRow = beginRow + sampleMergerNum * templateSampleNum;
XSSFRow zeroRow = sheetOne.getRow(beginRow);
XSSFCellStyle cellStyle = zeroRow.getCell(0).getCellStyle();
int lastCellNum = zeroRow.getLastCellNum();
int insertCount = sampleVOList.size() - templateSampleNum;
for (int m = 0; m < insertCount; m++) {
for (int i = 0; i < sampleMergerNum; i++) {
sheetOne.shiftRows(insertRow, sheetOne.getLastRowNum(), 1, true, false);
XSSFRow row = sheetOne.createRow(insertRow);
row.setHeight(zeroRow.getHeight());
for (int j = 0; j < lastCellNum; j++) {
XSSFCell xssfCell = row.createCell(j);
xssfCell.setCellStyle(cellStyle);
}
insertRow++;
}
}
int sn = 1;
for (EntrustSampleVO vo : sampleVOList) {
XSSFRow xssfRow = sheetOne.getRow(beginRow);
List<EntrustSampleItemIndex> indexList = entrustSampleItemIndexService.listBySampleId(vo.getId());
vo.setIndexList(indexList);
for (EntrustReportTemplateConfig config : configList) {
if (null == config.getColumnPlace()) {
continue;
}
XSSFCell cell = xssfRow.getCell(config.getColumnPlace());
if ("sn".equals(config.getDataAttribute())) {
cell.setCellValue(sn);
} else {
cell.setCellValue(StringHandleUtils.getFieldValue(config.getDataAttribute(), vo));
}
}
beginRow += sampleMergerNum;
sn++;
}
for (EntrustReportTemplateConfig config : configList) {
if (null == config.getMergeRowNum()) {
config.setMergeRowNum(1);
}
if (null == config.getMergeBegin()) {
continue;
}
if (null == config.getMergeEnd()) {
continue;
}
int step = config.getMergeRowNum();
if (step == 1 && config.getMergeEnd() == config.getMergeBegin()) {
continue;
}
if (null != config.getColumnPlace() && null != config.getMergeRowNum()) {
Integer sampleBgMum = sysFileTemplate.getSampleBeginRow() + templateSampleNum * sampleMergerNum;
Integer sampleEnMum = sysFileTemplate.getSampleBeginRow() + sampleVOList.size() * sampleMergerNum - 1;
while (sampleBgMum <= sampleEnMum) {
sheetOne.addMergedRegion(new CellRangeAddress(sampleBgMum, sampleBgMum + step - 1, config.getMergeBegin(), config.getMergeEnd()));
sampleBgMum = sampleBgMum + step;
}
}
}
}
}
String generated = entrust.getCode();
FileOutputStream os = null;
File file = null;
try {
file = File.createTempFile(generated, ".xlsx");
os = new FileOutputStream(file);
xssfWorkbook.write(os);
os.flush();
entrustReportService.uploadReportGenerateDocx(entrust, ids, account, StringHandleUtils.join(sampleNameSet), "报告生成", file);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
xssfWorkbook.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
io.close();
} catch (IOException e) {
e.printStackTrace();
}
FileUtils.deleteFiles(file);
}
}
return true;
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean submitJudgeRegister(Long[] ids, Account account) {
......@@ -1221,4 +1555,6 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
}
return false;
}
}
\ No newline at end of file
......@@ -189,6 +189,27 @@
ORDER BY s.code , i.name
</select>
<select id="selectVOListBySampleIdsAndIds" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO">
SELECT i.id,i.name,i.agreed_value,i.test_value,i.entrust_sample_id,i.standard,s.code AS "sampleCode"
FROM
entrust_sample_item i
JOIN entrust_sample s ON i.entrust_sample_id = s.ID
WHERE i.deleted = 0 AND s.deleted = 0
AND i.entrust_sample_id IN
<foreach collection="sampleIds" index="index" item="sampleId" open="(" separator="," close=")">
#{sampleId}
</foreach>
AND i.id IN
<foreach collection="ids" index="index" item="id" open="(" separator="," close=")">
#{id}
</foreach>
ORDER BY s.code , i.name
</select>
<select id="selectByItemDeviate" resultType="com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO">
SELECT i.id,i.name,i.agreed_value,i.test_value,i.standard,COALESCE(s.third_code,s.code) AS "sampleCode",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment