ソースを参照

生成支付二维码

785834757 2 年 前
コミット
7f5e4f044f

+ 19 - 0
pom.xml

@@ -23,6 +23,7 @@
         <fastjson.version>1.2.58</fastjson.version>
         <kaptcha.version>0.0.9</kaptcha.version>
         <mapstruct.version>1.5.4.Final</mapstruct.version>
+        <zxing.version>3.5.1</zxing.version>
     </properties>
 
     <dependencies>
@@ -523,6 +524,24 @@
         <!--            <artifactId>spring-boot-starter-amqp</artifactId>-->
         <!--        </dependency>-->
 
+        <!--  二维码解析 -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>${zxing.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>${zxing.version}</version>
+        </dependency>
+
+        <!-- thymeleaf 模版类 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-thymeleaf</artifactId>
+        </dependency>
+
     </dependencies>
 
 

+ 7 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -54,6 +54,13 @@ public class TokenInterceptor {
         notMatchList.add("/swagger-resources");
         notMatchList.add("/v2/**");
 
+        // 支付二维码地址
+        notMatchList.add("/order/qrCode/index**");
+        notMatchList.add("/order/qrCode/error");
+        notMatchList.add("/order/qrCode/getQrCode**");
+        notMatchList.add("/order/qrCode/destructionQrCode**");
+
+
         return new SaInterceptor(handler -> {
             // 指定一条 match 规则
             SaRouter

+ 137 - 0
src/main/java/com/ydtech/modules/order/controller/QrCodeController.java

@@ -0,0 +1,137 @@
+package com.ydtech.modules.order.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrderQrCode;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.OrderVo;
+import com.ydtech.modules.order.entity.vo.QrCodeVo;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrderQrCodeService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.view.json.MappingJackson2JsonView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Objects;
+
+@Api(tags = "订单二维码管理")
+@Controller
+@RequestMapping(value = "/order/qrCode")
+public class QrCodeController {
+    @Resource
+    private InsOrderQrCodeService insOrderQrCodeService;
+
+    @Resource
+    private InsAreaCompanyService insAreaCompanyService;
+
+    @Resource
+    private InsOrdersService insOrdersService;
+
+    //二维码生成地址
+    @Value("${qrcode.genAddress}")
+    private String qrCodeGenAddress;
+
+    /**
+     * 获取二维码
+     * @return
+     */
+    @GetMapping(value = "/getQrCode")
+    public ModelAndView getQrCode(String areaCompanyId){
+        InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOneOrSave(areaCompanyId);
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getById(areaCompanyId);
+
+        ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
+        if(!Objects.isNull(insOrderQrCode)){
+            InsOrders insOrders = insOrdersService.getById(insOrderQrCode.getOrderno());
+
+            JSONObject result = new JSONObject();
+            QrCodeVo qrCodeVo = new QrCodeVo();
+            String qrCodeUrl = qrCodeGenAddress + "?areaCompanyId=" + areaCompanyId;
+            qrCodeVo.setQrCodeUrl(qrCodeUrl);
+            qrCodeVo.setInscompany(insAreaCompany.getInscompany());//保险公司
+            qrCodeVo.setSumpremium(insAreaCompany.getSumpremium());//总保费
+            qrCodeVo.setSypremium(insAreaCompany.getSypremium());//商业险
+            qrCodeVo.setJqpremium(insAreaCompany.getJqpremium());//交强险
+            qrCodeVo.setTaxamount(insAreaCompany.getTaxamount());//车船税
+            qrCodeVo.setJypremium(insAreaCompany.getJypremium());//驾驭险
+            qrCodeVo.setCInsuredNme(insOrders.getInsuredname());//投保人
+            qrCodeVo.setCPlateNo(insOrders.getLicenseno());//车牌号
+            qrCodeVo.setJqStartDate(insAreaCompany.getJqStartDate());//交强开始时间
+            qrCodeVo.setJqEndDate(insAreaCompany.getJqEndDate());//交强结束时间
+            qrCodeVo.setSyStartDate(insAreaCompany.getSyStartDate());
+            qrCodeVo.setSysEndDate(insAreaCompany.getSyEndDate());
+
+            modelAndView.addObject("code", 200);
+            modelAndView.addObject("data", qrCodeVo);
+            modelAndView.addObject("msg","");
+        }else{
+            modelAndView.addObject("code", 500);
+            modelAndView.addObject("data","");
+            modelAndView.addObject("msg","二维码不存在");
+
+        }
+        return modelAndView;
+    }
+
+    /**
+     * 销毁二维码
+     * @param areaCompanyId
+     * @return
+     */
+    @PostMapping(value = "/destructionQrCode")
+    public ModelAndView destructionQrCode(String areaCompanyId){
+        boolean b = insOrderQrCodeService.updateQrCode(areaCompanyId,0);
+        ModelAndView modelAndView = new ModelAndView(new MappingJackson2JsonView());
+        if(b){
+            modelAndView.addObject("code", 200);
+            modelAndView.addObject("data", "");
+            modelAndView.addObject("msg","二维码销毁成功");
+        }else{
+            modelAndView.addObject("code", 500);
+            modelAndView.addObject("data", "");
+            modelAndView.addObject("msg","二维码销毁失败");
+        }
+        return modelAndView;
+    }
+
+    /**
+     * 扫描二维码地址
+     * @param areaCompanyId
+     * @return
+     * @throws IOException
+     */
+    @RequestMapping(value = "/index")
+    public String index(String areaCompanyId) throws IOException {
+        InsOrderQrCode insOrderQrCode = insOrderQrCodeService.getOne(areaCompanyId);
+        if (insOrderQrCode != null) {
+            //更新二维码扫描时间
+            insOrderQrCode.setScanCodeTime(new Date());
+            insOrderQrCodeService.updateById(insOrderQrCode);
+            //直接重定向到jumlurl
+            return "redirect:" + insOrderQrCode.getJumpUrl();
+        }
+        //重定向到错误页面中
+        return "redirect:/order/qrCode/error";
+    }
+
+    /**
+     * 错误页面显示
+     * @return
+     */
+    @RequestMapping(value = "/error")
+    public String error(){
+        return "qrcode_error";
+    }
+}

+ 21 - 0
src/main/java/com/ydtech/modules/order/dao/InsOrderQrCodeMapper.java

@@ -0,0 +1,21 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.order.entity.InsOrderQrCode;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.vo.OrderQueryVo;
+import com.ydtech.modules.order.entity.vo.OrderVo;
+import com.ydtech.modules.order.entity.vo.VerifyOrdersVo;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_order_qrcode(订单二维码表)】的数据库操作Mapper
+ * @createDate 2023-01-31 15:44:29
+ * @Entity generator.domain.InsOrderQrCode
+ */
+public interface InsOrderQrCodeMapper extends BaseMapper<InsOrderQrCode> {
+
+
+}

+ 117 - 0
src/main/java/com/ydtech/modules/order/entity/InsOrderQrCode.java

@@ -0,0 +1,117 @@
+package com.ydtech.modules.order.entity;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.ydtech.constants.enums.InsuranceRisk;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
+import com.ydtech.constants.enums.dict.agreement.ProductsType;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.ins.model.vo.KindInfoVo;
+import com.ydtech.modules.ins.model.vo.RiskInfoVo;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.utils.idgen.IdGenerate;
+import lombok.*;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Base64;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 保险订单二维码表
+ *
+ * @TableName ins_order_qrcode
+ */
+@EqualsAndHashCode
+@ToString
+@TableName(value = "ins_order_qrcode", autoResultMap = true)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InsOrderQrCode implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    @TableId(value = "id")
+    private String id;
+    /**
+     * 订单号
+     */
+    @TableField(value = "orderno")
+    private String orderno;
+
+    /**
+     * 报价id
+     */
+    @TableField(value = "area_company_id")
+    private String areaCompanyId;
+
+    /**
+     * 二维码状态
+     */
+    @TableField(value = "qrcode_status")
+    private Integer qrcodeStatus;
+
+    /**
+     * 二维码跳转的url地址
+     */
+    @TableField(value = "jump_url")
+    private String jumpUrl;
+
+    /**
+     * 二维码扫码时间
+     */
+    @TableField(value = "scan_code_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date scanCodeTime;
+
+    /**
+     * 二维码扫码时间
+     */
+    @TableField(value = "destruction_code_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date destructionCodeTime;
+
+    /**
+     * 创建时间
+     */
+    @TableField(value = "createtime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createtime;
+
+    /**
+     * 获取二维码
+     * @return 返回base64
+     */
+    public String genQrCode(String id){
+        QRCodeWriter qcWrite = new QRCodeWriter();
+
+        try {
+            BitMatrix bm = qcWrite.encode(id, BarcodeFormat.QR_CODE, 500, 500);
+            BufferedImage image = MatrixToImageWriter.toBufferedImage(bm);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            ImageIO.write(image, "PNG", baos);
+            byte[] imageBytes = baos.toByteArray();
+            return Base64.getEncoder().encodeToString(imageBytes);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+}

+ 86 - 0
src/main/java/com/ydtech/modules/order/entity/vo/QrCodeVo.java

@@ -0,0 +1,86 @@
+package com.ydtech.modules.order.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 二维码实体Vo
+ */
+@Data
+public class QrCodeVo implements Serializable {
+
+
+    private static final long serialVersionUID = -4906378446672825846L;
+
+    /**
+     * 二维码地址
+     */
+    @JsonProperty("qrCodeUrl")
+    private String qrCodeUrl;
+
+    /**
+     * 保险公司
+     */
+    @JsonProperty("inscompany")
+    private String inscompany;
+    /**
+     * 总保费
+     */
+    @JsonProperty("sumpremium")
+    private BigDecimal sumpremium;
+
+    /**
+     * 交强险
+     */
+    @JsonProperty("jqpremium")
+    private BigDecimal jqpremium;
+    /**
+     * 商业险
+     */
+    @JsonProperty("sypremium")
+    private BigDecimal sypremium;
+    /**
+     * 车船税
+     */
+    @JsonProperty("taxamount")
+    private BigDecimal taxamount;
+    /**
+     * 驾驭险
+     */
+    @JsonProperty("jypremium")
+    private BigDecimal jypremium;
+    /**
+     * 投保人
+     */
+    @JsonProperty("cInsuredNme")
+    private String cInsuredNme;
+    /**
+     * 车牌号
+     */
+    @JsonProperty("cPlateNo")
+    private String cPlateNo;
+    /**
+     * 交强开始时间
+     */
+    @JsonProperty("jqStartDate")
+    private String jqStartDate;
+    /**
+     * 交强结束时间
+     */
+    @JsonProperty("jqEndDate")
+    private String jqEndDate;
+    /**
+     * 商业开始时间
+     */
+    @JsonProperty("syStartDate")
+    private String syStartDate;
+    /**
+     * 商业结束时间
+     */
+    @JsonProperty("sysEndDate")
+    private String sysEndDate;
+
+}

+ 40 - 0
src/main/java/com/ydtech/modules/order/service/InsOrderQrCodeService.java

@@ -0,0 +1,40 @@
+package com.ydtech.modules.order.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.ins.model.ya.CarModelDTO;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsOrderQrCode;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
+import com.ydtech.modules.order.entity.vo.OrderQueryVo;
+import com.ydtech.modules.order.entity.vo.OrderVo;
+import com.ydtech.modules.order.entity.vo.VerifyOrdersVo;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.utils.idgen.IdGenerate;
+
+import java.util.List;
+
+/**
+ * @author Administrator
+ * @description 针对表【ins_order_order(订单二维码表)】的数据库操作Service
+ * @createDate 2023-01-31 15:44:29
+ */
+public interface InsOrderQrCodeService extends IService<InsOrderQrCode> {
+
+    //获取二维码对象
+    InsOrderQrCode getOne(String companyId);
+
+    InsOrderQrCode getOneOrSave(String companyId);
+
+    //base64字符串 提取二维码链接
+    String getQrCodeUrl(String base64);
+
+    //存储二维码对象
+    boolean save(String orderno,String companyId,String jumlUrl);
+
+    //修改二维码状态
+    boolean updateQrCode(String id,Integer status);
+}

+ 226 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsOrderQrCodeServiceImpl.java

@@ -0,0 +1,226 @@
+package com.ydtech.modules.order.service.impl;
+
+import cn.hutool.extra.qrcode.BufferedImageLuminanceSource;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageInfo;
+import com.github.pagehelper.page.PageMethod;
+import com.google.zxing.*;
+import com.google.zxing.client.j2se.MatrixToImageConfig;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.common.HybridBinarizer;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.ydtech.components.OrderComponents;
+import com.ydtech.constants.InsuranceEnum;
+import com.ydtech.constants.enums.dict.InsOrderStatusEnum;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.admin.model.SysDept;
+import com.ydtech.modules.admin.model.SysUser;
+import com.ydtech.modules.admin.service.SysDeptService;
+import com.ydtech.modules.admin.service.SysUserService;
+import com.ydtech.modules.fee.service.impl.FeeRuleSchemeServiceImpl;
+import com.ydtech.modules.ins.model.vo.CarInfoVo;
+import com.ydtech.modules.ins.model.ya.CarModelDTO;
+import com.ydtech.modules.ins.model.ya.ExtendInfoDto;
+import com.ydtech.modules.ins.model.ya.ResponseDataC2;
+import com.ydtech.modules.order.convert.CarModelDTOConvert;
+import com.ydtech.modules.order.convert.MapToYaExtendInfoDto;
+import com.ydtech.modules.order.dao.InsOrderQrCodeMapper;
+import com.ydtech.modules.order.dao.InsOrdersMapper;
+import com.ydtech.modules.order.entity.BasePageResult;
+import com.ydtech.modules.order.entity.InsAreaCompany;
+import com.ydtech.modules.order.entity.InsOrderQrCode;
+import com.ydtech.modules.order.entity.InsOrders;
+import com.ydtech.modules.order.entity.bo.UnderwritingRulesBo;
+import com.ydtech.modules.order.entity.dto.InsAreaCompanyQueryDto;
+import com.ydtech.modules.order.entity.vo.*;
+import com.ydtech.modules.order.entity.vo.ya.YaExtendInfoDto;
+import com.ydtech.modules.order.service.InsAreaCompanyService;
+import com.ydtech.modules.order.service.InsOrderQrCodeService;
+import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
+import com.ydtech.modules.protocol.service.PtlAgreementService;
+import com.ydtech.utils.idgen.IdGenerate;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import javax.imageio.ImageIO;
+import javax.validation.constraints.NotBlank;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.file.Paths;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import static com.ydtech.modules.order.constants.OrderCacheConstant.*;
+
+/**
+ * @author wenkaisen
+ * @description 针对表【ins_orders(保险订单表)】的数据库操作Service实现
+ * @createDate 2023-01-31 15:44:29
+ */
+@Service
+public class InsOrderQrCodeServiceImpl extends ServiceImpl<InsOrderQrCodeMapper, InsOrderQrCode> implements InsOrderQrCodeService {
+
+    @Value("${upload.file.path}")
+    private String uploadFilePath;
+
+    @Value("${qrcode.genAddress}")
+    private String qrCodeGenAddress;
+
+    @Autowired
+    private InsAreaCompanyService insAreaCompanyService;
+
+
+    @Override
+    public InsOrderQrCode getOneOrSave(String companyId) {
+        //查询 ins_area_company数据
+        InsAreaCompany insAreaCompany = insAreaCompanyService.getOne(new LambdaQueryWrapper<InsAreaCompany>().eq(InsAreaCompany::getId, companyId));
+        //查询 是否有数据存在
+        InsOrderQrCode insOrderQrCode = baseMapper.selectOne(new LambdaQueryWrapper<InsOrderQrCode>()
+                .eq(InsOrderQrCode::getAreaCompanyId, companyId)
+                .eq(InsOrderQrCode::getQrcodeStatus, 1));
+        if(Objects.isNull(insOrderQrCode))
+        {
+            //如果订单状态等于 待缴费 或 撤销二维码
+            if(insAreaCompany.getOrderstatus().equals(InsOrderStatusEnum.WAIT_PAY.getCode())){
+                if(Objects.isNull(insAreaCompany.getPaymentLink())){
+                    throw new SystemException("该订单没有缴费链接");
+                }
+                boolean save = save(insAreaCompany.getOrderno(), insAreaCompany.getId(), insAreaCompany.getPaymentLink());
+                insOrderQrCode = baseMapper.selectOne(new LambdaQueryWrapper<InsOrderQrCode>()
+                        .eq(InsOrderQrCode::getAreaCompanyId, companyId)
+                        .eq(InsOrderQrCode::getQrcodeStatus, 1));
+            }else{
+                throw new SystemException("该订单不是待缴费状态");
+            }
+
+        }
+        return insOrderQrCode;
+    }
+
+    @Override
+    public InsOrderQrCode getOne(String companyId) {
+        //查询 ins_area_company数据
+//        InsAreaCompany insAreaCompany = insAreaCompanyService.getOne(new LambdaQueryWrapper<InsAreaCompany>().eq(InsAreaCompany::getId, companyId));
+        //查询 是否有数据存在
+        InsOrderQrCode insOrderQrCode = baseMapper.selectOne(new LambdaQueryWrapper<InsOrderQrCode>()
+                .eq(InsOrderQrCode::getAreaCompanyId, companyId)
+                .eq(InsOrderQrCode::getQrcodeStatus, 1));
+        return insOrderQrCode;
+    }
+
+    private BufferedImage base64ToBufferedImage(String base64){
+        try {
+            byte[] bytes = Base64.getDecoder().decode(base64);
+            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+            BufferedImage bi1 = ImageIO.read(bais);
+            return bi1;
+        }catch (Exception e){
+            throw new SystemException("base64转BufferedImage失败");
+        }
+    }
+
+    //获取二维码地址
+    @Override
+    public String getQrCodeUrl(String base64) {
+
+        //base64字符串 提取二维码链接
+        BufferedImage bufferedImage = base64ToBufferedImage(base64);
+        BufferedImageLuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
+        BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
+        Hashtable hints = new Hashtable();
+        hints.put(com.google.zxing.DecodeHintType.CHARACTER_SET, "UTF-8");
+        hints.put(com.google.zxing.DecodeHintType.TRY_HARDER, Boolean.TRUE);
+        hints.put(com.google.zxing.DecodeHintType.PURE_BARCODE, Boolean.TRUE);
+        try {
+            Result decode = new MultiFormatReader().decode(binaryBitmap, hints);
+            return decode.getText();
+        } catch (NotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private boolean isHttpUrl(String urls) {
+        try
+        {
+            URL url = new URL(urls);
+            return true;
+        }catch (java.net.MalformedURLException e){
+            return false;
+        }
+    }
+
+
+    /**
+     * 保存二维码
+     * @param orderno
+     * @param companyId
+     * @param jumlUrl
+     * @return
+     */
+    @Override
+    public boolean save(String orderno, String companyId, String jumlUrl) {
+        try {
+            InsOrderQrCode insOrderQrCode = new InsOrderQrCode();
+
+            String id = IdGenerate.nextId();
+            insOrderQrCode.setId(id);
+            insOrderQrCode.setOrderno(orderno);
+            insOrderQrCode.setAreaCompanyId(companyId);
+            //判断jumlUrl是base64 还是 url
+            if(isHttpUrl(jumlUrl)){
+                insOrderQrCode.setJumpUrl(jumlUrl);
+            }else{
+                //base64 二维码图片
+                String qrCodeUrl = getQrCodeUrl(jumlUrl);
+                insOrderQrCode.setJumpUrl(qrCodeUrl);
+            }
+            insOrderQrCode.setQrcodeStatus(1);
+            insOrderQrCode.setCreatetime(new Date());
+            return this.save(insOrderQrCode);
+        }catch(Exception e){
+            throw new SystemException("查询二维码失败");
+        }
+    }
+
+    /**
+     * 更新二维码状态
+     * @param id
+     * @param status
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean updateQrCode(String id, Integer status) {
+        try {
+            InsOrderQrCode insOrderQrCode = new InsOrderQrCode();
+            insOrderQrCode.setQrcodeStatus(status);
+            insOrderQrCode.setDestructionCodeTime(new Date());
+            this.update(insOrderQrCode,new LambdaQueryWrapper<InsOrderQrCode>().eq(InsOrderQrCode::getAreaCompanyId,id));
+            //设置订单状态为撤销二维码
+            InsAreaCompany insAreaCompany = new InsAreaCompany();
+            insAreaCompany.setId(id);
+            insAreaCompany.setOrderstatus(InsOrderStatusEnum.QUOTE_ING.getCode());
+            insAreaCompanyService.updateCompanyAndOrders(insAreaCompany);
+            return true;
+        }catch(Exception e){
+            throw new SystemException("撤销二维码失败");
+        }
+    }
+}

+ 7 - 2
src/main/resources/application-prod.yml

@@ -112,7 +112,7 @@ spring:
       pool-prepared-statements: true                      # 否启用预编译语句池
       max-pool-prepared-statement-per-connection-size: 20 # 表示每个连接最多可以缓存20个预编译语句对象。
       # 连接池监控配置
-      stat-view-servlet:
+      stat-view-servlet:enabled
         enabled: true                                # 启用 Druid 的监控页面
         url-pattern: /druid/*
         login-username: admin
@@ -258,4 +258,9 @@ guoren:
     channelCode: TQDL
     interfaceUserCode: TQDL
     interfacePwd: $2a$04$r4neihDJh420OyWEji5w5OMbiyHqYEZHJGLZP0FHFEjXmr7nVW7te
-    iftest: N
+    iftest: N
+
+
+
+qrcode:
+  genAddress: http://sxzgkj.baoxianzhanggui.com/web-api/order/qrCode/index