Commit e63219cf by wangweidong

hmhj系统功能优化

parent 3dc34d70
package com.patzn.cloud.service.lims.hmhj.common;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
public class LabreOfficeUtil {
private static final Logger logger = LoggerFactory.getLogger(LabreOfficeUtil.class);
public static void main(String[] args) {
convertOffice2PDF("D:/program/libreoffice",new File("D:/二氧化碳.xlsx"));
}
public static File inputStream2File (InputStream is) {
File file = null;
try {
file = File.createTempFile("original",".xlsx");
} catch (IOException e) {
e.printStackTrace();
}
OutputStream os = null;
try {
try {
os = new FileOutputStream(file);
int len = 0;
byte[] buffer = new byte[8192];
while ((len = is.read(buffer)) != -1) {
os.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} finally {
try {
if (null!=os)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (null!=is)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
public static synchronized File convertOffice2PDF(String url,File inputFile){
long start = System.currentTimeMillis();
boolean flag;
String parent= inputFile.getParent();
String pdfFile = parent+"/"+(inputFile.getName().replace(".xlsx",".pdf"));
// String osName = System.getProperty("os.name");
// if (osName.contains("Windows")) {
// }else {
// command = "libreoffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
// }
String osName = System.getProperty("os.name");
String command="";
if(osName.contains("win")||osName.contains("Win")){
command = "cmd /c soffice --headless --invisible --convert-to pdf " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command,url);
}else{
command = "libreoffice6.2 --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command);
}
long end = System.currentTimeMillis();
logger.debug("用时:{} ms", end - start);
if (true){
return new File(pdfFile);
}
return null;
}
public static synchronized File convertOfficeWord2PDF(String url,File inputFile){
long start = System.currentTimeMillis();
boolean flag;
String parent= inputFile.getParent();
String pdfFile = parent+"/"+(inputFile.getName().replace(".docx",".pdf"));
// String osName = System.getProperty("os.name");
// if (osName.contains("Windows")) {
// }else {
// command = "libreoffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
// }
String osName = System.getProperty("os.name");
String command="";
if(osName.contains("win")||osName.contains("Win")){
command = "cmd /c soffice --headless --invisible --convert-to pdf " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command,url);
}else{
command = "libreoffice6.2 --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile.getPath() + " --outdir " + parent;
flag = executeLibreOfficeCommand(command);
}
long end = System.currentTimeMillis();
logger.debug("用时:{} ms", end - start);
if (true){
return new File(pdfFile);
}
return null;
}
/**
* 执行command指令
* @param command
* @return
*/
public static boolean executeLibreOfficeCommand(String command,String url) {
logger.info("开始进行转化.......");
Process process;// Process可以控制该子进程的执行或获取该子进程的信息
try {
logger.debug("convertOffice2PDF cmd : {}", command);
process = Runtime.getRuntime().exec(command,null,new File(url+"/program"));// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
// 下面两个可以获取输入输出流
// InputStream errorStream = process.getErrorStream();
// InputStream inputStream = process.getInputStream();
} catch (IOException e) {
logger.error(" convertOffice2PDF {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
// 第二种接受返回值的方法
int i = process.exitValue(); // 接收执行完毕的返回值
logger.debug("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException convertOffice2PDF {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
} else {
logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
}
process.destroy(); // 销毁子进程
logger.info("转化结束.......");
return true;
}
public static boolean executeLibreOfficeCommand(String command) {
logger.info("开始进行转化.......");
Process process;// Process可以控制该子进程的执行或获取该子进程的信息
try {
logger.debug("convertOffice2PDF cmd : {}", command);
process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
// 下面两个可以获取输入输出流
// InputStream errorStream = process.getErrorStream();
// InputStream inputStream = process.getInputStream();
} catch (IOException e) {
logger.error(" convertOffice2PDF {} error", command, e);
return false;
}
int exitStatus = 0;
try {
exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
// 第二种接受返回值的方法
int i = process.exitValue(); // 接收执行完毕的返回值
logger.debug("i----" + i);
} catch (InterruptedException e) {
logger.error("InterruptedException convertOffice2PDF {}", command, e);
return false;
}
if (exitStatus != 0) {
logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
} else {
logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
}
process.destroy(); // 销毁子进程
logger.info("转化结束.......");
return true;
}
}
......@@ -332,7 +332,7 @@ public class EntrustController extends ServiceController {
public RestResult<Page<EntrustVO>> getPageEntrustSampleReceive(EntrustVO entrust) {
entrust.setPrepareStatus(EntrustSamplePrepareStatusEnum.RECEIVE);
// 设置用户编组
//entrust.setGroupNameList(userInfoService.getCurGroupNameList());
entrust.setGroupNameList(userInfoService.getCurGroupNameList());
return success(entrustService.pageEntrustSampleReceive(getPage(), entrust));
}
......@@ -364,7 +364,7 @@ public class EntrustController extends ServiceController {
public RestResult<Page<EntrustVO>> getPageTaskAllot(EntrustVO entrust) {
entrust.setItemStatus(EntrustSampleItemStatusEnum.ALLOT);
// 获取当前用户分组
//entrust.setGroupNameList(userInfoService.getCurGroupNameList());
entrust.setGroupNameList(userInfoService.getCurGroupNameList());
return success(entrustService.pageEntrustByItem(getPage(), entrust));
}
......
......@@ -6,6 +6,8 @@ import com.patzn.cloud.service.hmhj.entity.ItemDeviate;
import com.patzn.cloud.service.hmhj.entity.OriginalRecord;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -578,4 +580,18 @@ public class EntrustSampleItemController extends ServiceController {
return success(entrustSampleItemService.updateQualityJudge(ids, getAccount()));
}
@ApiOperation(value = "分页列表", notes = "分页查询数据列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataType = "int"),
@ApiImplicitParam(name = RestConstants.PAGE_SIDX, value = "排序字段", paramType = "query", dataType = "String"),
@ApiImplicitParam(name = RestConstants.PAGE_SORD, value = "排序方式", paramType = "query", dataType = "String"),
})
@PostMapping("/page_group_user")
public RestResult<Page<LmsUserRelGroupVO>> getPageGroupUser(LmsUserRelGroup soilExperiment) {
return success(entrustSampleItemService.pageGroupUser(getPage(), soilExperiment));
}
}
package com.patzn.cloud.service.lims.hmhj.controller;
import com.patzn.cloud.service.hmhj.entity.OriginalRecordVersion;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.api.RestConstants;
import com.patzn.cloud.commons.api.RestResult;
import com.patzn.cloud.commons.controller.ServiceController;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalRecordVersionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* ${table.comment} 前端控制器
*
* @author wwd
* @since 2021-07-08
*/
@Api(tags = "${table.comment}")
@RestController
@RequestMapping("/v1/record_version")
public class OriginalRecordVersionController extends ServiceController {
@Autowired
private IOriginalRecordVersionService originalRecordVersionService;
@ApiOperation("分页列表")
@ApiImplicitParams({
@ApiImplicitParam(name = RestConstants.PAGE_PAGE, value = "请求数据的页码", required = true, paramType = "query", dataTypeClass = Integer.class),
@ApiImplicitParam(name = RestConstants.PAGE_ROWS, value = "每页条数", required = true, paramType = "query", dataTypeClass = Integer.class),
})
@PostMapping("/page")
public RestResult<Page<OriginalRecordVersion>> getPage(OriginalRecordVersion originalRecordVersion) {
return success(originalRecordVersionService.page(getPage(), originalRecordVersion));
}
@ApiOperation("查询 id 信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@GetMapping("/{id}")
public RestResult<OriginalRecordVersion> get(@PathVariable("id") Long id) {
return success(originalRecordVersionService.getById(id));
}
@ApiOperation("根据 id 修改信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键", required = true, paramType = "path", dataTypeClass = Long.class),
})
@PutMapping("/{id}")
public RestResult<Boolean> edit(@PathVariable("id") Long id, OriginalRecordVersion originalRecordVersion) {
originalRecordVersion.setId(id);
return success(originalRecordVersionService.updateById(originalRecordVersion));
}
@ApiOperation("添加")
@PostMapping("/")
public RestResult<Boolean> add(OriginalRecordVersion originalRecordVersion) {
return success(originalRecordVersionService.save(originalRecordVersion));
}
@ApiOperation("根据 ids 删除")
@ApiImplicitParams({
@ApiImplicitParam(name = "ids", value = "主键列表", required = true, paramType = "query", allowMultiple = true, dataTypeClass = Long.class),
})
@DeleteMapping("/")
public RestResult<Boolean> delete(@RequestParam("ids") List<Long> ids) {
return success(originalRecordVersionService.removeByIds(ids));
}
}
package com.patzn.cloud.service.lims.hmhj.mapper;
import com.patzn.cloud.commons.mapper.BatchMapper;
import com.patzn.cloud.service.hmhj.entity.OriginalRecordVersion;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wwd
* @since 2021-07-08
*/
public interface OriginalRecordVersionMapper extends BatchMapper<OriginalRecordVersion> {
}
......@@ -7,6 +7,8 @@ import com.patzn.cloud.service.hmhj.entity.EntrustSampleItem;
import com.patzn.cloud.service.hmhj.entity.ItemDeviate;
import com.patzn.cloud.service.hmhj.entity.OriginalRecord;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import java.util.List;
......@@ -69,4 +71,7 @@ public interface IEntrustSampleItemService extends IBaseService<EntrustSampleIte
List<EntrustSampleItemVO> listMinStatusBySampleIds(List<Long> entrustIds);
public boolean isAllocatedByEntrustId(Long entrustId);
Page<LmsUserRelGroupVO> pageGroupUser(Page<LmsUserRelGroupVO> page, LmsUserRelGroup soilExperiment);
}
package com.patzn.cloud.service.lims.hmhj.service;
import com.baomidou.mybatisplus.plugins.Page;
import com.patzn.cloud.commons.service.IBaseService;
import com.patzn.cloud.service.hmhj.entity.OriginalRecordVersion;
import java.util.List;
/**
* 服务类
*
* @author wwd
* @since 2021-07-08
*/
public interface IOriginalRecordVersionService extends IBaseService<OriginalRecordVersion> {
Page<OriginalRecordVersion> page(Page<OriginalRecordVersion> page, OriginalRecordVersion originalRecordVersion);
boolean removeByIds(List<Long> ids);
}
......@@ -7,6 +7,7 @@ import com.google.common.collect.Lists;
import com.patzn.cloud.commons.api.RestAssert;
import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.commons.toolkit.FileUtils;
import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.hmhj.entity.Entrust;
......@@ -17,6 +18,7 @@ import com.patzn.cloud.service.hmhj.enums.EntrustFlowEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustReportStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleStatusEnum;
import com.patzn.cloud.service.lims.hmhj.common.LabreOfficeUtil;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustReportMapper;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustReportRelSampleService;
import com.patzn.cloud.service.lims.hmhj.service.IEntrustReportService;
......@@ -26,6 +28,7 @@ import com.patzn.cloud.service.lims.hmhj.service.IEntrustService;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
......@@ -33,10 +36,12 @@ import com.baomidou.mybatisplus.plugins.Page;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
......@@ -56,7 +61,11 @@ public class EntrustReportServiceImpl extends BaseServiceImpl<EntrustReportMappe
private IEntrustSampleService entrustSampleService;
@Autowired
private IEntrustService entrustService;
@Autowired
private Executor executor1;
@Value("${libreOffice.url}")
private String libreOfficeUrl;
@Override
public Page<EntrustReport> page(Page<EntrustReport> page, EntrustReport entrustReport) {
......@@ -143,9 +152,47 @@ public class EntrustReportServiceImpl extends BaseServiceImpl<EntrustReportMappe
// 存在的状态路径时,方可进入处理操作
executeSubmitOperation(getByReportId(ids[0]), account);
//转化PDF
executor1.execute(new Runnable() {
@Override
public void run() {
changeExcelReportToPdf(ids);
}
});
return super.update(report, Condition.create().in("id", ids));
}
private void changeExcelReportToPdf(Long[] ids) {
List<EntrustReport> reportList = list(Condition.create().in("id",ids).isNotNull("object_key"));
if (CollectionUtils.isEmpty(reportList)){
return;
}
List<File> deleteFileList = new ArrayList<>();
List<EntrustReport> updateReportList = new ArrayList<>();
for (EntrustReport report : reportList) {
InputStream io= ossClient.download(report.getObjectKey());
if (null == io)
continue;
File file = LabreOfficeUtil.inputStream2File(io);
File filePdf =LabreOfficeUtil.convertOffice2PDF(libreOfficeUrl,file);
deleteFileList.add(file);
deleteFileList.add(filePdf);
OssFileResult fileResult = ossClient.upload(filePdf);
EntrustReport u = new EntrustReport();
u.setPdfObjectKey(fileResult.getObjectKey());
u.setId(report.getId());
updateReportList.add(u);
}
if (CollectionUtils.isNotEmpty(updateReportList)){
updateBatchById(updateReportList);
}
FileUtils.deleteFiles(deleteFileList);
}
private Entrust getByReportId(Long reportId) {
EntrustReport report = getById(reportId);
if (null == report) {
......
......@@ -8,16 +8,21 @@ import com.patzn.cloud.commons.controller.Account;
import com.patzn.cloud.commons.controller.LoginHelper;
import com.patzn.cloud.commons.toolkit.DateUtils;
import com.patzn.cloud.commons.toolkit.FileUtils;
import com.patzn.cloud.feign.lims.base.client.LmsUserRelGroupClient;
import com.patzn.cloud.oss.starter.OssClient;
import com.patzn.cloud.oss.starter.OssFileResult;
import com.patzn.cloud.service.hmhj.entity.*;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleItemStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustSampleStatusEnum;
import com.patzn.cloud.service.hmhj.enums.EntrustStatusEnum;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleItemVO;
import com.patzn.cloud.service.hmhj.vo.EntrustSampleVO;
import com.patzn.cloud.service.lims.base.entity.LmsUserRelGroup;
import com.patzn.cloud.service.lims.base.vo.LmsUserRelGroupVO;
import com.patzn.cloud.service.lims.common.CompareUtils;
import com.patzn.cloud.service.lims.hmhj.common.EntrustFlowUtils;
import com.patzn.cloud.service.lims.hmhj.common.HSSFWorkbookUtil;
import com.patzn.cloud.service.lims.hmhj.common.LabreOfficeUtil;
import com.patzn.cloud.service.lims.hmhj.mapper.EntrustSampleItemMapper;
import com.patzn.cloud.service.lims.hmhj.original.*;
import com.patzn.cloud.service.lims.hmhj.service.*;
......@@ -26,19 +31,18 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
......@@ -78,6 +82,11 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
@Autowired
private IItemDeviateService itemDeviateService;
@Autowired
private IItemRelOriginalRecordService itemRelOriginalRecordService;
@Autowired
private IGradingStandardService gradingStandardService;
......@@ -90,6 +99,17 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
@Autowired
private OssClient ossClient;
@Autowired
private Executor executor1;
@Autowired
private LmsUserRelGroupClient lmsUserRelGroupClient;
@Value("${libreOffice.url}")
private String libreOfficeUrl;
@Override
public Page<EntrustSampleItem> page(Page<EntrustSampleItem> page, EntrustSampleItem entrustSampleItem) {
Wrapper wrapper = new EntityWrapper<>(entrustSampleItem);
......@@ -250,9 +270,62 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
// 添加委托日志
entrustRecordService.record(new Long[]{entrustId}, EntrustStatusEnum.TEST.getDisplay(), EntrustStatusEnum.TEST.getDisplay(), 0, account, "提交至报告编制");
//执行转PDF操作
executor1.execute(new Runnable() {
@Override
public void run() {
changeExcelToPdf(ids,list);
}
});
return true;
}
public void changeExcelToPdf(Long[] ids,List<EntrustSampleItem> list){
List<ItemRelOriginalRecord> recordList = itemRelOriginalRecordService.list(Condition.create().setSqlSelect("record_id").in("item_id",ids).isNotNull("record_id").groupBy("record_id"));
if (CollectionUtils.isEmpty(recordList))
return;
List<Long> recordsList= recordList.stream().map(r->{
return r.getRecordId();
}).collect(Collectors.toList());
List<OriginalRecord> originalRecordList = originalRecordService.list(Condition.create().in("id",recordList).isNull("pdf_object_key"));
if (CollectionUtils.isEmpty(originalRecordList))
return;
excelToPdf(originalRecordList);
}
private void excelToPdf(List<OriginalRecord> originalRecordList) {
List<OriginalRecord> updateList = new ArrayList<>();
List<File> deleteFileList = new ArrayList<>();
for (OriginalRecord record : originalRecordList) {
InputStream io = ossClient.download(record.getObjectKey());
File file = LabreOfficeUtil.inputStream2File(io);
File filePdf= LabreOfficeUtil.convertOffice2PDF(libreOfficeUrl,file);
OssFileResult fileResult = ossClient.upload(filePdf);
OriginalRecord u = new OriginalRecord();
u.setId(record.getId());
u.setPdfObjectKey(fileResult.getObjectKey());
updateList.add(u);
deleteFileList.add(file);
deleteFileList.add(filePdf);
}
if (CollectionUtils.isNotEmpty(updateList)){
originalRecordService.updateBatchById(updateList);
}
FileUtils.deleteFiles(deleteFileList);
}
@Transactional(rollbackFor = Exception.class)
@Override
public boolean submitCheck(Long[] ids, Account account) {
......@@ -742,4 +815,40 @@ public class EntrustSampleItemServiceImpl extends BaseServiceImpl<EntrustSampleI
private boolean isConfigureStatusPath(Entrust entrust){
return StringUtils.isBlank(entrust.getStatusPath()) ? false : true;
}
@Override
public Page<LmsUserRelGroupVO> pageGroupUser(Page<LmsUserRelGroupVO> page, LmsUserRelGroup userRelGroup) {
Page<LmsUserRelGroup> relGroupPage = lmsUserRelGroupClient.getPageUser(userRelGroup).serviceData();
List<LmsUserRelGroup> groupList = relGroupPage.getRecords();
if (CollectionUtils.isEmpty(groupList)){
return page;
}
List<Long> userIdsList = groupList.stream().map(r->{
return r.getUserId();
}).collect(Collectors.toList());
List<EntrustSampleItem> experimentList = super.list(Condition.create().in("tester_id",userIdsList).eq("status",EntrustSampleItemStatusEnum.TEST));
List<LmsUserRelGroupVO> groupVOS = new ArrayList<>();
for (LmsUserRelGroup group:groupList) {
LmsUserRelGroupVO vo = group.convert(LmsUserRelGroupVO.class);
int num = 0;
for (EntrustSampleItem experiment:experimentList) {
if (experiment.getTesterId().equals(group.getUserId())){
num++;
}
}
vo.setTotal(num);
groupVOS.add(vo);
}
page.setRecords(groupVOS);
page.setCurrent(relGroupPage.getCurrent());
page.setSize(relGroupPage.getSize());
page.setTotal(relGroupPage.getTotal());
return page;
}
}
......@@ -76,14 +76,29 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp
List<Long> sampleIdsList = new ArrayList<>();
List<EntrustSampleBackup> saveBackupList = new ArrayList<>();
for (EntrustSampleVO vo : sampleVOList) {
EntrustSamplePrepare prepare = vo.convert(EntrustSamplePrepare.class);
prepare.setEntrustSampleId(vo.getEntrustSampleId());
prepare.setStatus(EntrustSamplePrepareStatusEnum.RECEIVE);
prepare.setProgress(EntrustSamplePrepareStatusEnum.RECEIVE);
prepare.setId(null);
savePrepare.add(prepare);
sampleIdsList.add(vo.getEntrustSampleId());
if ("送检样".equalsIgnoreCase(vo.getMakeType())){
EntrustSamplePrepare prepare = vo.convert(EntrustSamplePrepare.class);
prepare.setEntrustSampleId(vo.getEntrustSampleId());
prepare.setStatus(EntrustSamplePrepareStatusEnum.RECEIVE);
prepare.setProgress(EntrustSamplePrepareStatusEnum.RECEIVE);
prepare.setId(null);
savePrepare.add(prepare);
sampleIdsList.add(vo.getEntrustSampleId());
}else if ("备样".equalsIgnoreCase(vo.getMakeType())){
EntrustSampleBackup backup = new EntrustSampleBackup();
backup.setEntrustId(vo.getEntrustId());
backup.setSampleId(vo.getId());
backup.setStatus(EntrustSampleBackupStatusEnum.BACKUP_ING);
backup.setProgress(EntrustSampleBackupStatusEnum.BACKUP_ING);
backup.setReceiveTime(new Date());
// 添加类型,区分样品管理
// 类型:备样
backup.setType("BY");
saveBackupList.add(backup);
}
}
......@@ -98,11 +113,13 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp
}).collect(Collectors.toList());
List<EntrustSampleBackup> saveBackupList = new ArrayList<>();
for (EntrustSample sample : sampleList) {
if (haveSampleIds.contains(sample.getId())) {
continue;
}
//由制备的时候选择备样
EntrustSampleBackup backup = new EntrustSampleBackup();
backup.setEntrustId(sample.getEntrustId());
backup.setSampleId(sample.getId());
......@@ -112,7 +129,12 @@ public class EntrustSamplePrepareServiceImpl extends BaseServiceImpl<EntrustSamp
// 添加类型,区分样品管理
// 类型:备样
backup.setType("BY");
saveBackupList.add(backup);
//由制备的时候选择备样
// saveBackupList.add(backup);
// 添加样品管理数据
EntrustSampleBackup manage = new EntrustSampleBackup();
BeanUtils.copyProperties(backup, manage);
......
......@@ -502,6 +502,7 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
sampleVO.setId(null);
sampleVO.setGroupId(g.getKey());
sampleVO.setGroupName(g.getValue());
sampleVO.setMakeType("送检样");
Set<String> itemNameSet = new HashSet<>();
for (EntrustSampleItem item : itemList) {
......@@ -513,6 +514,12 @@ public class EntrustSampleServiceImpl extends BaseServiceImpl<EntrustSampleMappe
sampleVO.setEntrustSampleId(sample.getId());
list.add(sampleVO);
}
//备样
EntrustSampleVO sampleVO = sample.convert(EntrustSampleVO.class);
sampleVO.setMakeType("备样");
list.add(sampleVO);
}
return list;
}
......
......@@ -32,7 +32,9 @@ import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
......@@ -74,6 +76,10 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
@Autowired
private SysOrgClient sysOrgClient;
@Autowired
private Executor executor1;
@Autowired
private LmsChemicalCategoryClient lmsChemicalCategoryClient;
......@@ -202,7 +208,10 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
flowStatus = entrust.getStatusPath().split("->")[0];
}
entrust.setFlowStatus(flowStatus);
if (saveEntrust(entrust)) {
BigDecimal totalFee = BigDecimal.ZERO;
entrust.setId(IdWorker.getId());
if (CollectionUtils.isNotEmpty(sampleDTOList)) {
List<EntrustSample> saveSampleList = new ArrayList<>();
......@@ -220,22 +229,26 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
continue;
}
for (EntrustSampleItem sampleItem : experiments) {
if (null != sampleItem.getPrice()){
totalFee = totalFee.add(sampleItem.getPrice());
}
sampleItem.setEntrustSampleId(sample.getId());
saveEntrustSampleItemList.add(sampleItem);
}
}
if (CollectionUtils.isNotEmpty(saveSampleList)) {
entrustSampleService.saveBatch(saveSampleList);
}
if (CollectionUtils.isNotEmpty(saveEntrustSampleItemList)) {
entrustSampleItemService.saveBatch(saveEntrustSampleItemList);
//计算费用
entrust.setTotalFee(totalFee);
if (saveEntrust(entrust)){
if (CollectionUtils.isNotEmpty(saveSampleList)) {
entrustSampleService.saveBatch(saveSampleList);
}
if (CollectionUtils.isNotEmpty(saveEntrustSampleItemList)) {
entrustSampleItemService.saveBatch(saveEntrustSampleItemList);
}
}
}
}
return true;
}
......@@ -414,10 +427,41 @@ public class EntrustServiceImpl extends BaseServiceImpl<EntrustMapper, Entrust>
entrustSampleItemService.saveBatch(saveItemList);
}
}
executor1.execute(new Runnable() {
@Override
public void run() {
calTotalFee(entrust.getId());
}
});
return true;
}
public void calTotalFee(Long id){
//计算委托费用
List<EntrustSample> entrustSamples = entrustSampleService.list(Condition.create().setSqlSelect("id").eq("entrust_id",id));
if (CollectionUtils.isEmpty(entrustSamples)){
return ;
}
List<Long> sampleIdList = entrustSamples.stream().map(e->{
return e.getId();
}).collect(Collectors.toList());
List<EntrustSampleItem> itemList = entrustSampleItemService.list(Condition.create().in("entrust_sample_id",sampleIdList).isNotNull("price"));
BigDecimal totalFee=BigDecimal.ZERO;
for (EntrustSampleItem item : itemList) {
totalFee = totalFee.add(item.getPrice());
}
Entrust entrust = new Entrust();
entrust.setId(id);
entrust.setTotalFee(totalFee);
updateById(entrust);
}
@Override
public EntrustDTO getDTOById(Long id) {
Entrust entrust = getById(id);
......
package com.patzn.cloud.service.lims.hmhj.service.impl;
import com.patzn.cloud.service.hmhj.entity.OriginalRecordVersion;
import com.patzn.cloud.service.lims.hmhj.mapper.OriginalRecordVersionMapper;
import com.patzn.cloud.service.lims.hmhj.service.IOriginalRecordVersionService;
import com.patzn.cloud.commons.service.impl.BaseServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import java.util.List;
/**
* 服务实现类
*
* @author wwd
* @since 2021-07-08
*/
@Service
public class OriginalRecordVersionServiceImpl extends BaseServiceImpl<OriginalRecordVersionMapper, OriginalRecordVersion> implements IOriginalRecordVersionService {
@Override
public Page<OriginalRecordVersion> page(Page<OriginalRecordVersion> page, OriginalRecordVersion originalRecordVersion) {
Wrapper wrapper = new EntityWrapper<>(originalRecordVersion);
return this.page(page, wrapper);
}
@Override
public boolean removeByIds(List<Long> ids) {
return baseMapper.deleteBatchIds(ids) > 0;
}
}
......@@ -56,6 +56,11 @@ public class OriginalTemplateServiceImpl extends BaseServiceImpl<OriginalTemplat
@Autowired
private IEntrustSampleItemService entrustSampleItemService;
@Autowired
private IOriginalRecordVersionService originalRecordVersionService;
@Autowired
private IOriginalTemplateConfigService originalTemplateConfigService;
......@@ -227,6 +232,14 @@ public class OriginalTemplateServiceImpl extends BaseServiceImpl<OriginalTemplat
return true;
}
public void addVersionRecord( OriginalRecord report){
OriginalRecordVersion recordVersion =report.convert(OriginalRecordVersion.class);
recordVersion.setId(null);
recordVersion.setOriginalRecordId(report.getId());
originalRecordVersionService.save(recordVersion);
}
@Override
public boolean editOriginal(String someParam, OssFileResult obsFileResult) {
RestAssert.fail(StringUtils.isBlank(someParam), "业务ID不能为空");
......@@ -243,6 +256,7 @@ public class OriginalTemplateServiceImpl extends BaseServiceImpl<OriginalTemplat
if (null == report) {
RestAssert.fail("数据有误");
}
addVersionRecord(report);
OriginalRecord originalRecord = new OriginalRecord();
originalRecord.setId(businessId);
originalRecord.setObjectKey(obsFileResult.getObjectKey());
......
package com.patzn.cloud.service.lims.hmhj.threadpool;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
@EnableAsync
public class ExecutorConfig {
@Bean
public Executor executor1() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setThreadNamePrefix("executor1-thread-");
executor.setMaxPoolSize(20);
executor.setCorePoolSize(15);
executor.setQueueCapacity(0);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return executor;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.patzn.cloud.service.lims.hmhj.mapper.OriginalRecordVersionMapper">
</mapper>
CREATE TABLE "public"."original_record_version" (
CREATE TABLE "public"."original_record_version" (
"id" int8 NOT NULL,
"original_record_id" int8,
"entrust_id" int8,
"template_id" int8,
"title" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"company_id" int8,
"uid" int8,
"ctime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"lid" int8,
"ltime" timestamp(6) DEFAULT NULL::timestamp without time zone,
"deleted" int2 DEFAULT 0,
"uname" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"remark" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"object_key" varchar(255) COLLATE "pg_catalog"."default" DEFAULT NULL::character varying,
"version" int2
)
;
COMMENT ON COLUMN "public"."original_record_version"."id" IS '主键';
COMMENT ON COLUMN "public"."original_record_version"."original_record_id" IS '原始记录ID';
COMMENT ON COLUMN "public"."original_record_version"."entrust_id" IS '试验委托单ID';
COMMENT ON COLUMN "public"."original_record_version"."template_id" IS '原始记录模板ID';
COMMENT ON COLUMN "public"."original_record_version"."title" IS '标题';
COMMENT ON COLUMN "public"."original_record_version"."company_id" IS '企业ID';
COMMENT ON COLUMN "public"."original_record_version"."uid" IS '创建人';
COMMENT ON COLUMN "public"."original_record_version"."ctime" IS '创建时间';
COMMENT ON COLUMN "public"."original_record_version"."lid" IS '最后修改时间';
COMMENT ON COLUMN "public"."original_record_version"."ltime" IS '最后修改人ID';
COMMENT ON COLUMN "public"."original_record_version"."deleted" IS '是否删除';
COMMENT ON COLUMN "public"."original_record_version"."object_key" IS '原始记录key';
COMMENT ON COLUMN "public"."original_record_version"."version" IS '版本';
-- ----------------------------
-- Primary Key structure for table original_record_version
-- ----------------------------
ALTER TABLE "public"."original_record_version" ADD CONSTRAINT "original_record_version_pkey" PRIMARY KEY ("id");
ALTER TABLE "public"."original_record"
ADD COLUMN "pdf_object_key" varchar(255);
COMMENT ON COLUMN "public"."original_record"."pdf_object_key" IS 'PDF原始记录key';
ALTER TABLE "public"."original_record_version"
ADD COLUMN "pdf_object_key" varchar(255) COLLATE "pg_catalog"."default";
COMMENT ON COLUMN "public"."original_record_version"."pdf_object_key" IS 'PDF原始记录key';
ALTER TABLE "public"."qualification"
ALTER TABLE "public"."qualification"
ADD COLUMN "price" decimal(10,1);
COMMENT ON COLUMN "public"."qualification"."price" IS '单价';
ALTER TABLE "public"."material_item"
ADD COLUMN "price" decimal(10,1);
COMMENT ON COLUMN "public"."material_item"."price" IS '单价';
ALTER TABLE "public"."entrust_sample_item"
ADD COLUMN "price" decimal(10,1);
COMMENT ON COLUMN "public"."entrust_sample_item"."price" IS '单价';
ALTER TABLE "public"."entrust"
ADD COLUMN "total_fee" decimal(10,1);
COMMENT ON COLUMN "public"."entrust"."total_fee" IS '委托费用';
\ No newline at end of file
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