Browse Source

feat:"添加证照识别功能"

soobin 4 months ago
parent
commit
a8bd7c070f

+ 7 - 2
pom.xml

@@ -300,13 +300,18 @@
 <!--            <artifactId>aws-java-sdk</artifactId>-->
 <!--            <version>1.10.77</version>-->
 <!--        </dependency>-->
-
+        <!-- MQTT相关配置 -->
         <dependency>
             <groupId>org.eclipse.paho</groupId>
             <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
             <version>1.2.5</version>
         </dependency>
-        <!-- MQTT相关配置 -->
+        <!-- 证照识别 -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>alibabacloud-ocr_api20210707</artifactId>
+            <version>3.0.3</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 65 - 0
src/main/java/com/szwl/controller/PurseController.java

@@ -7,16 +7,21 @@ import com.szwl.model.bo.BalanceBo;
 import com.szwl.model.bo.R;
 import com.szwl.model.bo.ResponseModel;
 import com.szwl.model.bo.SettlementRecordBo;
+import com.szwl.model.dto.LicenseDTO;
 import com.szwl.model.entity.*;
 import com.szwl.service.TAdminService;
 import com.szwl.service.THuifuMchService;
 import com.szwl.service.TJoinpayMchService;
+import com.szwl.service.UserLicenseService;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -40,6 +45,9 @@ public class PurseController {
     @Autowired
     private THuifuMchService tHuifuMchService;
 
+    @Autowired
+    private UserLicenseService userLicenseService;
+
     @ApiOperation("余额查询")
     @GetMapping("/balance")
     public ResponseModel<?> balance(Long adminId) {
@@ -114,4 +122,61 @@ public class PurseController {
         }
         return R.fail(result);
     }
+
+    @ApiOperation("证照识别")
+    @PostMapping("/ocrImage")
+    public ResponseModel<?> ocrImage(MultipartFile file, Long adminId, String imageType) {
+        LicenseDTO licenseDTO = new LicenseDTO();
+        try {
+            byte[] fileBytes = file.getBytes();
+            boolean isHas = true;
+            UserLicense userLicense = userLicenseService.getById(adminId);
+            if (userLicense == null) {
+                isHas = false;
+                userLicense = new UserLicense();
+                userLicense.setId(adminId);
+                userLicense.setCreateDate(new Date());
+            }
+            switch (imageType) {
+                case "idCardFront":
+                    // 身份证正面
+                    userLicense.setIdCardFront(fileBytes);
+                    break;
+                case "idCardBack":
+                    userLicense.setIdCardBack(fileBytes);
+                    break;
+                case "bankCard":
+                    userLicense.setBankCard(fileBytes);
+                    break;
+                case "businessLicense":
+                    userLicense.setBusinessLicense(fileBytes);
+                    break;
+                case "accountLicense":
+                    userLicense.setAccountLicense(fileBytes);
+                    break;
+                default:
+                    return R.fail("图片类型错误");
+            }
+            if (isHas) {
+                userLicenseService.updateById(userLicense);
+            } else {
+                userLicenseService.save(userLicense);
+            }
+            if (!imageType.equals("accountLicense")) {
+                licenseDTO = userLicenseService.recognize(imageType, file);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return R.ok(licenseDTO);
+    }
+
+//    @ApiOperation("查询用户证照")
+//    @GetMapping("/userLicense")
+//    public ResponseModel<?> userLicense(Long adminId) {
+//        UserLicense userLicense = userLicenseService.getById(adminId);
+//        byte[] businessLicense = userLicense.getIdCardBack();
+//        String string = "data:image/jpeg;base64,"+ Base64.getEncoder().encodeToString(businessLicense);
+//        return R.ok(string);
+//    }
 }

+ 2 - 2
src/main/java/com/szwl/controller/TSugarDoController.java

@@ -110,10 +110,10 @@ public class TSugarDoController {
             JSONObject kindData = new JSONObject();
             if (StringUtils.isNotEmpty(machineType) && machineType.equals("2")) {
                 // 如果是冰淇淋
+                makeCodes = "[" + makeCodes + "]";
                 kindData.put("makeCodes", makeCodes);
                 kindData.put("no", sugarDo.getNo());
-                makeCodes = "[" + makeCodes + "]";
-                tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("dosugar", makeCodes).toString());
+                tEquipmentService.sentMessage(equipment.getClientId(), PushUtils.buildJson("dosugar", kindData.toString()).toString());
             } else {
                 LambdaQueryWrapper<TProduct> queryWrapper = Wrappers.lambdaQuery();
                 queryWrapper.eq(TProduct::getEquipmentId, equipmentId);

+ 16 - 0
src/main/java/com/szwl/mapper/UserLicenseMapper.java

@@ -0,0 +1,16 @@
+package com.szwl.mapper;
+
+import com.szwl.model.entity.UserLicense;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-08
+ */
+public interface UserLicenseMapper extends BaseMapper<UserLicense> {
+
+}

+ 21 - 0
src/main/java/com/szwl/mapper/xml/UserLicenseMapper.xml

@@ -0,0 +1,21 @@
+<?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.szwl.mapper.UserLicenseMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.szwl.model.entity.UserLicense">
+        <id column="id" property="id" />
+        <result column="create_date" property="createDate" />
+        <result column="id_card_front" property="idCardFront" />
+        <result column="id_card_back" property="idCardBack" />
+        <result column="bank_card" property="bankCard" />
+        <result column="business_license" property="businessLicense" />
+        <result column="account_license" property="accountLicense" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, create_date, id_card_front, id_card_back, bank_card, business_license, account_license
+    </sql>
+
+</mapper>

+ 44 - 0
src/main/java/com/szwl/model/dto/LicenseDTO.java

@@ -0,0 +1,44 @@
+package com.szwl.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class LicenseDTO {
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "身份证号")
+    private String idCard;
+
+    @ApiModelProperty(value = "身份证有效开始日期")
+    private String idCardStartDate;
+
+    @ApiModelProperty(value = "身份证有效结束日期")
+    private String idCardEndDate;
+
+    @ApiModelProperty(value = "银行卡类型")
+    private String bankCardType;
+
+    @ApiModelProperty(value = "银行卡名称")
+    private String bankCardName;
+
+    @ApiModelProperty(value = "银行卡号")
+    private String bankCardNo;
+
+    @ApiModelProperty(value = "银行卡有效日期")
+    private String bankCardValidDate;
+
+    @ApiModelProperty(value = "营业执照编号")
+    private String businessLicenseNo;
+
+    @ApiModelProperty(value = "营业执照名称")
+    private String businessLicenseName;
+
+    @ApiModelProperty(value = "营业执照有效期")
+    private String businessLicenseValidDate;
+
+    @ApiModelProperty(value = "营业执照地址")
+    private String businessLicenseAddress;
+}

+ 64 - 0
src/main/java/com/szwl/model/entity/UserLicense.java

@@ -0,0 +1,64 @@
+package com.szwl.model.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.sql.Blob;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.persistence.Column;
+import javax.persistence.Lob;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="UserLicense对象", description="")
+public class UserLicense implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "用户唯一ID")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+    private Date createDate;
+
+    @ApiModelProperty(value = "身份证正面")
+    @Lob
+    @Column(columnDefinition = "LONGBLOB")
+    private byte[] idCardFront;
+
+    @ApiModelProperty(value = "身份证反面")
+    @Lob
+    @Column(columnDefinition = "LONGBLOB")
+    private byte[] idCardBack;
+
+    @ApiModelProperty(value = "银行卡")
+    @Lob
+    @Column(columnDefinition = "LONGBLOB")
+    private byte[] bankCard;
+
+    @ApiModelProperty(value = "营业执照")
+    @Lob
+    @Column(columnDefinition = "LONGBLOB")
+    private byte[] businessLicense;
+
+    @ApiModelProperty(value = "开户许可证")
+    @Lob
+    @Column(columnDefinition = "LONGBLOB")
+    private byte[] accountLicense;
+
+
+}

File diff suppressed because it is too large
+ 168 - 0
src/main/java/com/szwl/model/utils/OcrUtil.java


+ 25 - 0
src/main/java/com/szwl/service/UserLicenseService.java

@@ -0,0 +1,25 @@
+package com.szwl.service;
+
+import com.szwl.model.dto.LicenseDTO;
+import com.szwl.model.entity.UserLicense;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-08
+ */
+public interface UserLicenseService extends IService<UserLicense> {
+
+    /**
+     * 识别证照
+     * @param imageType 图片类型
+     * @param file 图片二进制
+     * @return
+     */
+    LicenseDTO recognize(String imageType, MultipartFile file);
+}

+ 50 - 0
src/main/java/com/szwl/service/impl/UserLicenseServiceImpl.java

@@ -0,0 +1,50 @@
+package com.szwl.service.impl;
+
+import com.szwl.model.bo.R;
+import com.szwl.model.dto.LicenseDTO;
+import com.szwl.model.entity.UserLicense;
+import com.szwl.mapper.UserLicenseMapper;
+import com.szwl.model.utils.OcrUtil;
+import com.szwl.service.UserLicenseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wuhs
+ * @since 2025-04-08
+ */
+@Service
+public class UserLicenseServiceImpl extends ServiceImpl<UserLicenseMapper, UserLicense> implements UserLicenseService {
+
+    @Override
+    public LicenseDTO recognize(String imageType, MultipartFile file) {
+        LicenseDTO licenseDTO = new LicenseDTO();
+        try {
+            switch (imageType) {
+                case "idCardFront":
+                    // 身份证正面
+                    licenseDTO = OcrUtil.getIdCardInfo(file);
+                    break;
+                case "idCardBack":
+                    licenseDTO = OcrUtil.getIdCardInfo(file);
+                    break;
+                case "bankCard":
+                    licenseDTO = OcrUtil.getBankCardInfo(file);
+                    break;
+                case "businessLicense":
+                    licenseDTO = OcrUtil.getBusinessLicense(file);
+                    break;
+                default:
+                    break;
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+        return licenseDTO;
+    }
+}