package com.ltkj.web.controller.app;
|
|
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.io.FileUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.ltkj.common.core.controller.BaseController;
|
import com.ltkj.common.core.domain.AjaxResult;
|
import com.ltkj.common.core.page.TableDataInfo;
|
import com.ltkj.common.utils.SecurityUtils;
|
import com.ltkj.common.utils.StringUtils;
|
import com.ltkj.framework.config.UserHoder;
|
import com.ltkj.hosp.domain.*;
|
import com.ltkj.hosp.service.*;
|
import com.ltkj.mall.mallOrderUtils.TjConstants;
|
import com.ltkj.web.config.pdfutils.PDFBinaryUtil;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiParam;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.ibatis.annotations.One;
|
import org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTJcImpl;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.server.session.InMemoryWebSessionStore;
|
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.*;
|
import java.net.URL;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
/**
|
* @Author: 西安路泰科技有限公司/lige
|
* @Date: 2023/1/10 15:42
|
*/
|
|
@RestController
|
@RequestMapping("/cus/getReport")
|
@Api(tags = "小程序查看体检报告")
|
@Slf4j
|
public class ReportController extends BaseController {
|
|
@Resource
|
private ITjReportService reportService;
|
|
@Resource
|
private ITjCustomerService customerService;
|
@Autowired
|
private ITjOrderService orderService;
|
|
@Autowired
|
private ITjOrderDetailService detailService;
|
|
@Resource
|
private ITjProjectService projectService;
|
|
@Resource
|
private ITjOrderRemarkService remarkService;
|
|
@Resource
|
private ITjStandardService standardService;
|
|
@Resource
|
private ITjAdviceService adviceService;
|
|
@Resource
|
private IDictCompService compService;
|
|
@Resource
|
private ITjReportTemplateService reportTemplateService;
|
|
@Value("${path.filePath}")
|
private String value;
|
|
/**
|
* 小程序查询体检报告列表
|
*/
|
@GetMapping("/getReportList")
|
@ApiOperation(value = "小程序-体检报告列表")
|
public AjaxResult getReportList(String cusPhone) {
|
// Wxuser wxuser = UserHoder.getWxuser();
|
if (cusPhone==null){
|
return AjaxResult.error("请绑定手机号!");
|
}
|
List<Object> result = new ArrayList<>();
|
LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjCustomer::getCusPhone, cusPhone);
|
List<TjCustomer> list1 = customerService.list(wq1);
|
if (list1.size() != 0) {
|
for (TjCustomer tjCustomer : list1) {
|
Map<String, Object> map = new HashMap<>();
|
QueryWrapper<TjOrder> wq2 = new QueryWrapper<>();
|
wq2.eq("user_id", tjCustomer.getCusId());
|
wq2.eq("check_status", 1);
|
wq2.isNotNull("finish_time");
|
wq2.orderByDesc("finish_time");
|
List<TjOrder> list = orderService.list(wq2);
|
if (null != list && list.size() > 0) {
|
TjOrder tjOrder = orderService.list(wq2).get(0);
|
map.put("report", tjOrder);
|
map.put("customer", tjCustomer);
|
result.add(map);
|
}
|
}
|
return AjaxResult.success(result);
|
}
|
return AjaxResult.error("您还没有体检记录!");
|
}
|
|
|
/**
|
* 小程序查询体检报告列表
|
*/
|
@GetMapping("/getRelativeReportList")
|
@ApiOperation(value = "小程序-查询亲友最新报告")
|
public AjaxResult getRelativeReportList(@RequestParam @ApiParam(value = "姓名") String cusName,
|
@RequestParam @ApiParam(value = "身份证号") String cusIdcard) {
|
LambdaQueryWrapper<TjCustomer> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjCustomer::getCusName, cusName);
|
wq1.eq(TjCustomer::getCusIdcard, cusIdcard);
|
TjCustomer customer = customerService.getOne(wq1);
|
if (null != customer) {
|
Map<String, Object> map = new HashMap<>();
|
QueryWrapper<TjOrder> wq2 = new QueryWrapper<>();
|
wq2.eq("user_id", customer.getCusId());
|
wq2.eq("check_status", 1);
|
wq2.isNotNull("finish_time");
|
wq2.orderByDesc("finish_time");
|
List<TjOrder> list = orderService.list(wq2);
|
if (null != list && list.size() > 0) {
|
TjOrder tjOrder = orderService.list(wq2).get(0);
|
map.put("report", tjOrder);
|
map.put("customer", customer);
|
return AjaxResult.success(map);
|
}
|
return AjaxResult.success("体检报告暂未生成");
|
}
|
return AjaxResult.success("暂时没有体检记录!");
|
}
|
|
/**
|
* 小程序点击体检报告查询详情
|
*/
|
@GetMapping("/getReportByTjNumber")
|
@ApiOperation(value = "小程序-体检报告查询详情")
|
public AjaxResult getReportByTjNumber(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
|
Map<String, Object> objectMap = new HashMap<>();
|
List<Map<String, Object>> list = new ArrayList<>();
|
LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjOrder::getTjNumber, tjNumber);
|
wq1.eq(TjOrder::getCheckStatus, 1);
|
TjOrder one = orderService.getOne(wq1);
|
if (one == null) {
|
return AjaxResult.success("体检暂未完成!!");
|
}
|
LambdaQueryWrapper<TjCustomer> wq22 = new LambdaQueryWrapper<>();
|
wq22.eq(TjCustomer::getCusId, one.getUserId());
|
TjCustomer customer = customerService.getOne(wq22);
|
LambdaQueryWrapper<TjOrderRemark> wqm = new LambdaQueryWrapper<>();
|
wqm.eq(TjOrderRemark::getTjNumber, tjNumber);
|
List<TjOrderRemark> remarkList = remarkService.list(wqm);
|
List<Map<String, Object>> abnormalList = new ArrayList<>();
|
if (null != remarkList && remarkList.size() > 0) {
|
for (TjOrderRemark remark : remarkList) {
|
Map<String, Object> parent = new HashMap<>();
|
Map<String, Object> parent1 = new HashMap<>();
|
TjProject tjProject = projectService.getById(remark.getProId());
|
if (null != tjProject) {
|
parent.put("parent", tjProject.getProName());
|
parent1.put("parent", tjProject.getProName());
|
} else {
|
parent.put("parent", null);
|
parent1.put("parent", null);
|
}
|
LambdaQueryWrapper<TjProject> wq2 = new LambdaQueryWrapper<>();
|
wq2.eq(TjProject::getProParentId, remark.getProId());
|
List<Long> sonsTjProjectList = null;
|
if (null != projectService.list(wq2) && projectService.list(wq2).size() > 0) {
|
sonsTjProjectList = projectService.list(wq2).stream().map(TjProject::getProId).collect(Collectors.toList());
|
}
|
if (sonsTjProjectList == null) {
|
log.info("我报空指针了::::::::::::" + remark.toString());
|
continue;
|
}
|
LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq.in(TjOrderDetail::getProId, sonsTjProjectList);
|
List<TjOrderDetail> tjOrderDetails = detailService.list(wq);
|
if (null != tjOrderDetails && tjOrderDetails.size() > 0) {
|
List<TjOrderDetail> abnormals = new ArrayList<>();
|
for (TjOrderDetail tjOrderDetail : tjOrderDetails) {
|
if (tjOrderDetail.getExceptionDesc() == 1) {
|
abnormals.add(tjOrderDetail);
|
parent1.put("abnormalList", abnormals);
|
abnormalList.add(parent1);
|
}
|
LambdaQueryWrapper<TjProject> wqqqq = new LambdaQueryWrapper<>();
|
wqqqq.eq(TjProject::getProId, tjOrderDetail.getProId());
|
tjOrderDetail.setProject(projectService.getOne(wqqqq));
|
LambdaQueryWrapper<TjStandard> wq6 = new LambdaQueryWrapper<>();
|
wq6.eq(TjStandard::getProId, tjOrderDetail.getProId());
|
List<TjStandard> list2 = standardService.list(wq6);
|
if (list2.size() == 0) {
|
tjOrderDetail.setStandard(null);
|
} else if (list2.size() == 1) {
|
tjOrderDetail.setStandard(list2.get(0));
|
} else {
|
for (TjStandard tjStandard : list2) {
|
LambdaQueryWrapper<TjStandard> wq8 = new LambdaQueryWrapper<>();
|
if (tjStandard.getTjSex() != null) {
|
wq8.eq(TjStandard::getTjSex, customer.getCusSex());
|
}
|
if (tjStandard.getTjType() != null) {
|
wq8.eq(TjStandard::getTjType, StringUtils.getAgeType(DateUtil.ageOfNow(customer.getCusBrithday())));
|
}
|
tjOrderDetail.setStandard(standardService.getOne(wq8));
|
}
|
}
|
}
|
LambdaQueryWrapper<TjAdvice> wq3 = new LambdaQueryWrapper<>();
|
wq3.eq(TjAdvice::getProId, remark.getProId());
|
parent.put("sons", tjOrderDetails);
|
parent.put("parentAdvice", adviceService.list(wq3));
|
parent.put("advice", remark.getSummary());
|
list.add(parent);
|
} else {
|
return AjaxResult.success("该客户在没有体检项目数据");
|
}
|
}
|
objectMap.put("list", list);
|
objectMap.put("inspectionAdvice", one.getCheckAdvice());
|
objectMap.put("tjAbnormal", abnormalList);
|
objectMap.put("customter", customer);
|
return AjaxResult.success(objectMap);
|
}
|
return AjaxResult.success("该客户在没有体检项目数据!");
|
}
|
|
|
|
/**
|
* 小程序点击体检报告查询详情,显示身高体重体重指数收缩压舒张压
|
*/
|
@GetMapping("/getShenGaoTiZhong")
|
@ApiOperation(value = "小程序-体检报告查询详情")
|
public AjaxResult getShenGaoTiZhong(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
|
Map<String, Object> objectMap = new HashMap<>();
|
List<Map<String, Object>> list = new ArrayList<>();
|
LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjOrder::getTjNumber, tjNumber);
|
wq1.eq(TjOrder::getCheckStatus, 1);
|
TjOrder one = orderService.getOne(wq1);
|
if (one == null) {
|
return AjaxResult.success("体检暂未完成!!");
|
}
|
|
LambdaQueryWrapper<TjOrderDetail> wq = new LambdaQueryWrapper<>();
|
wq.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq.in(TjOrderDetail::getProId, "1633660948860522524");
|
final TjOrderDetail one1 = detailService.getOne(wq);
|
if (one1== null){
|
objectMap.put("shenggao", "无");
|
}else {
|
objectMap.put("shenggao", one1.getProResult());
|
}
|
|
|
LambdaQueryWrapper<TjOrderDetail> wq2 = new LambdaQueryWrapper<>();
|
wq2.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq2.in(TjOrderDetail::getProId, "1633660948860522525");
|
final TjOrderDetail one2 = detailService.getOne(wq2);
|
if (one2==null){
|
objectMap.put("tizhong", "无");
|
}else {
|
objectMap.put("tizhong", one2.getProResult());
|
}
|
|
|
LambdaQueryWrapper<TjOrderDetail> wq3 = new LambdaQueryWrapper<>();
|
wq3.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq3.in(TjOrderDetail::getProId, "1633660948860522526");
|
final TjOrderDetail one3 = detailService.getOne(wq3);
|
if (one3==null){
|
objectMap.put("tizhongzhishu", "无");
|
}else {
|
objectMap.put("tizhongzhishu", one3.getProResult());
|
}
|
|
|
|
LambdaQueryWrapper<TjOrderDetail> wq4 = new LambdaQueryWrapper<>();
|
wq4.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq4.in(TjOrderDetail::getProId, "1633660948860522527");
|
final TjOrderDetail one4 = detailService.getOne(wq4);
|
if (one4==null){
|
objectMap.put("shousuoya", "无");
|
}else {
|
objectMap.put("shousuoya", one4.getProResult());
|
}
|
|
|
|
LambdaQueryWrapper<TjOrderDetail> wq5 = new LambdaQueryWrapper<>();
|
wq5.eq(TjOrderDetail::getOrderId, one.getOrderId());
|
wq5.in(TjOrderDetail::getProId, "1633660948860522528");
|
final TjOrderDetail one5 = detailService.getOne(wq5);
|
if (one5==null){
|
objectMap.put("shuzhangya","无");
|
}else {
|
objectMap.put("shuzhangya", one5.getProResult());
|
}
|
|
|
return AjaxResult.success(objectMap);
|
|
}
|
|
|
|
|
|
/**
|
* 小程序点击下载报告
|
*/
|
@GetMapping("/downloadReport")
|
@ApiOperation(value = "小程序-下载报告")
|
public AjaxResult downloadReport(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
|
Map<String,String> res=new HashMap<>();
|
LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>();
|
we.eq(TjReport::getTjNumber, tjNumber);
|
we.eq(TjReport::getType, "体检报告");
|
TjReport one = reportService.getOne(we);
|
if ("pdf".equals(one.getPrint())){
|
res.put("flag","0");
|
res.put("url",one.getPath());
|
return AjaxResult.success(res);
|
}else if ("报表".equals(one.getPrint())){
|
res.put("flag","1");
|
res.put("url",one.getPath());
|
return AjaxResult.success(res);
|
}else {
|
return AjaxResult.error("暂无体检报告");
|
}
|
}
|
|
|
|
@GetMapping("/preview/{flag}/{TjNumber}")
|
@ApiOperation(value = "下载体检报告")
|
public void preview(HttpServletResponse response, @PathVariable("flag") boolean flag, @PathVariable("TjNumber") String tjNumber) {
|
//修改order表中的下载报告时间为当前时间
|
// LambdaUpdateWrapper<TjOrder> updateWrapper = new LambdaUpdateWrapper<>();
|
// updateWrapper.eq(TjOrder::getTjNumber, tjNumber);
|
// updateWrapper.set(TjOrder::getPrintLastTime, new Date());
|
// updateWrapper.set(TjOrder::getDownloadLastTime, new Date());
|
// updateWrapper.set(TjOrder::getStatus, TjConstants.TJ_END);
|
// orderService.update(updateWrapper);
|
|
|
LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>();
|
wq1.eq(TjOrder::getTjNumber, tjNumber);
|
TjOrder tjOrder = orderService.getOne(wq1);
|
|
|
LambdaQueryWrapper<TjCustomer> wq2 = new LambdaQueryWrapper<>();
|
wq2.eq(TjCustomer::getCusId, tjOrder.getUserId());
|
TjCustomer tjCustomer = customerService.getOne(wq2);
|
|
|
LambdaQueryWrapper<TjReport> we = new LambdaQueryWrapper<>();
|
we.eq(TjReport::getTjNumber, tjNumber);
|
we.eq(TjReport::getType, "体检报告");
|
TjReport one = reportService.getOne(we);
|
if (one == null) {
|
return;
|
}
|
final UUID uuid = UUID.randomUUID();
|
final String substring = uuid.toString().substring(0, 5);
|
|
// String userId = SecurityUtils.getLoginUser().getUsername();
|
PDFBinaryUtil.base64StringToPDF(one.getReport(), FileUtil.mkdir(value).getPath() + "\\" +substring+ tjNumber + tjCustomer.getCusName() + "_体检报告.pdf");
|
//String filePath = one.getPath();
|
String filePath = value + "\\" +substring + tjNumber + tjCustomer.getCusName() + "_体检报告.pdf";
|
File f = new File(filePath);
|
if (filePath.isEmpty()) {
|
System.out.println("文件不存在!");
|
return;
|
}
|
BufferedInputStream br = null;
|
OutputStream out = null;
|
FileInputStream fileInputStream = null;
|
try {
|
fileInputStream = new FileInputStream(f);
|
br = new BufferedInputStream(fileInputStream);
|
byte[] bs = new byte[1024];
|
int len = 0;
|
response.reset(); // 非常重要
|
if (flag) {
|
// 在线打开方式
|
URL u = new URL("file:///" + filePath);
|
//System.out.println(u);
|
String contentType = u.openConnection().getContentType();
|
response.setContentType(contentType);
|
response.setHeader("Content-Disposition", "inline;filename="
|
+substring+ tjNumber + ".pdf");
|
} else {
|
// 纯下载方式
|
response.setContentType("application/x-msdownload");
|
response.setContentType("application/pdf;charset=utf-8");
|
response.setHeader("Content-Disposition", "attachment;filename="
|
+substring+ tjNumber + ".pdf");
|
}
|
out = response.getOutputStream();
|
while ((len = br.read(bs)) > 0) {
|
out.write(bs, 0, len);
|
}
|
out.flush();
|
out.close();
|
br.close();
|
fileInputStream.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
//System.out.println("pdf处理文件异常" + e);
|
} finally {
|
if (out != null) {
|
try {
|
out.close();
|
br.close();
|
fileInputStream.close();
|
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
|
|
/**
|
* 小程序查询体检历史报告列表
|
*/
|
@GetMapping("/getHistryReportList")
|
@ApiOperation(value = "小程序-体检历史报告列表")
|
public AjaxResult getHistryReportList(@RequestParam @ApiParam(value = "手机号") String cusPhone) {
|
List<Object> result = new ArrayList<>();
|
QueryWrapper<TjCustomer> wq1 = new QueryWrapper<>();
|
wq1.eq("cus_phone", cusPhone);
|
List<TjCustomer> list1 = customerService.list(wq1);
|
if (list1.size() != 0) {
|
for (TjCustomer tjCustomer : list1) {
|
Map<String, Object> map = new HashMap<>();
|
QueryWrapper<TjOrder> wq2 = new QueryWrapper<>();
|
wq2.eq("user_id", tjCustomer.getCusId());
|
wq2.eq("check_status", 1);
|
wq2.isNotNull("finish_time");
|
wq2.orderByDesc("finish_time");
|
List<TjOrder> list = orderService.list(wq2);
|
if (null != list && list.size() > 0) {
|
map.put("report", list);
|
map.put("customer", tjCustomer);
|
result.add(map);
|
}
|
}
|
return AjaxResult.success(result);
|
}
|
return AjaxResult.success("您还没有体检记录!");
|
}
|
}
|