lige
2024-03-05 247493f0980f703d163620ccc139b25927c28f8f
文件服务器
4个文件已修改
186 ■■■■■ 已修改文件
ltkj-admin/src/main/java/com/ltkj/web/controller/app/ReportController.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/app/WxloginController.java 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/resources/application.yml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ltkj-admin/src/main/java/com/ltkj/web/controller/app/ReportController.java
@@ -2,15 +2,20 @@
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;
@@ -21,13 +26,13 @@
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.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
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;
@@ -236,6 +241,8 @@
        return AjaxResult.success("该客户在没有体检项目数据!");
    }
    /**
     * 小程序点击体检报告查询详情,显示身高体重体重指数收缩压舒张压
     */
@@ -314,17 +321,127 @@
    }
    /**
     * 小程序点击下载报告
     */
    @GetMapping("/downloadReport")
    @ApiOperation(value = "小程序-下载报告")
    public AjaxResult downloadReport(@RequestParam @ApiParam(value = "体检号") String tjNumber) {
        Map<String, Object> map = new HashMap<>();
        return AjaxResult.success(map);
        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();
                }
            }
        }
    }
    /**
     * 小程序查询体检历史报告列表
     */
ltkj-admin/src/main/java/com/ltkj/web/controller/app/WxloginController.java
@@ -1,5 +1,6 @@
package com.ltkj.web.controller.app;
import cn.hutool.core.date.DateTime;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -25,6 +26,7 @@
import org.aspectj.bridge.MessageWriter;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import sun.misc.BASE64Decoder;
@@ -71,6 +73,7 @@
    /**
     * 小程序登录
     *
     * @param code 小程序wx.login返回的临时凭证
     * @return
     */
@@ -110,7 +113,7 @@
                wxuser.setCreateTime(new Date());
                wxuser.setWxMiniOpenId(openId);
                wxuserService.save(wxuser);
                map.put("wxuser",wxuser);
                map.put("wxuser", wxuser);
            }
            // 生成令牌
            String token = JwtUtils.getToken(map);
@@ -130,11 +133,12 @@
    @ApiOperation(value = "小程序获取用户详情信息接口")
    public AjaxResult getWxInfo() {
        Wxuser wxuser = UserHoder.getWxuser();
        LambdaQueryWrapper<Wxuser>wq=new LambdaQueryWrapper<>();
        wq.eq(Wxuser::getOpenid,wxuser.getOpenid());
        LambdaQueryWrapper<Wxuser> wq = new LambdaQueryWrapper<>();
        wq.eq(Wxuser::getOpenid, wxuser.getOpenid());
        Wxuser one = wxuserService.getOne(wq);
        return AjaxResult.success(one);
    }
    /**
     * 微信手机号码绑定
     */
@@ -156,7 +160,7 @@
                byte[] raw = decoder.decodeBuffer(sessionKey);
                SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
                IvParameterSpec iv1 = new IvParameterSpec(decoder.decodeBuffer(iv));
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding","BC");
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
                cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv1);
                OkHttpClient client = new OkHttpClient();
                Request okrequest = new Request.Builder()
@@ -191,6 +195,7 @@
    /**
     * 发送请求用code换取sessionKey和相关信息
     *
     * @param code
     * @return
     */
@@ -226,7 +231,7 @@
        byte[] ivByte = Base64.decode(iv);
        try {
        // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
            // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
@@ -235,7 +240,7 @@
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
        // 初始化
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            /**
             * 解决java不支持AES/CBC/PKCS7Padding模式解密
@@ -257,7 +262,6 @@
        }
        return null;
    }
    /**
@@ -346,5 +350,27 @@
        return response;
    }
    @PostMapping("/wx/wxbindphone")
    @ApiOperation("手动绑定手机号接口")
    @Transactional
    public AjaxResult wxbindphone(@RequestParam @ApiParam(value = "openId") String openId,
                                  @RequestParam @ApiParam(value = "phone") String phone) {
        LambdaQueryWrapper<Wxuser> wq = new LambdaQueryWrapper<>();
        wq.eq(Wxuser::getOpenid, openId);
        Wxuser one = wxuserService.getOne(wq);
        if (one!=null){
            one.setPhone(phone);
            one.setUpdateTime(new DateTime());
            final boolean b = wxuserService.updateById(one);
            if (b){
                return AjaxResult.success("绑定成功!");
            }
        }
        return AjaxResult.error("绑定失败!");
    }
}
ltkj-admin/src/main/java/com/ltkj/web/controller/system/TjReportController.java
@@ -77,6 +77,8 @@
    private ITjReportTemplateService reportTemplateService;
    @Value("${path.filePath}")
    private String value;
    @Value("${path.reportServer}")
    private String urlValue;
    @Resource
    private ISysUserService userService;
    @Resource
@@ -702,7 +704,7 @@
                    TjReport tjReport = new TjReport();
                    tjReport.setTjNumber(String.valueOf(tjNumber));
                    tjReport.setPath(outputPath1 + outputFileName1);
                    tjReport.setPath(urlValue + outputFileName1);
                    String pdfBinary = getPDFBinary(outputPath1 + outputFileName1);
                    tjReport.setReport(pdfBinary);
                    tjReport.setType("体检报告");
ltkj-admin/src/main/resources/application.yml
@@ -11,8 +11,8 @@
  # 文件路径 示例( Windows配置D:/ltkj/uploadPath,Linux配置 /home/ltkj/uploadPath)
  # 用户换头像后的图片存储地址  测试:D:\ltkj\uploadPath\avatar\2022\12\14
  #profile: D:/ltkj/uploadPath
#  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
  profile: http://192.168.0.5:5502/uploadPath
  profile: https://ltpeis.xaltjdkj.cn:5502/uploadPath
#  profile: http://192.168.0.5:5502/uploadPath
  # 获取ip地址开关
  addressEnabled: true
@@ -176,12 +176,17 @@
#  体检报告模板和报告临时生成存储的文件夹路径
path:
  filePath: D:\Tjreport
  # nginx图片服务器
  reportServer: https://ltpeis.xaltjdkj.cn:5516/
#  体检套餐和轮播图存储路径
photoPath: D:\AppPhoto\uploadPath\
# nginx图片服务器
#photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
photoServer: http://192.168.0.5:5502/uploadPath/
photoServer: https://ltpeis.xaltjdkj.cn:5502/uploadPath/
#photoServer: http://192.168.0.5:5502/uploadPath/
# 微信小程序appid secret
xcx: