Jelajahi Sumber

Merge remote-tracking branch 'origin/test' into test

ligang134 3 tahun lalu
induk
melakukan
589a36cb18
36 mengubah file dengan 858 tambahan dan 280 penghapusan
  1. 1 4
      src/main/java/com/ydtech/aop/GlobalExceptionHandler.java
  2. 1 1
      src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java
  3. 20 0
      src/main/java/com/ydtech/constants/enums/FileType.java
  4. 9 0
      src/main/java/com/ydtech/core/page/BaseController.java
  5. 2 16
      src/main/java/com/ydtech/modules/ins/service/impl/YongAnServiceImpl.java
  6. 22 56
      src/main/java/com/ydtech/modules/order/controller/IdentifyController.java
  7. 27 6
      src/main/java/com/ydtech/modules/order/controller/OrderTaskImageController.java
  8. 0 1
      src/main/java/com/ydtech/modules/order/controller/YongChengOrderController.java
  9. 0 5
      src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java
  10. 26 0
      src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java
  11. 24 8
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/QuotedPriceRequest.java
  12. 32 9
      src/main/java/com/ydtech/modules/order/entity/api/zm/request/UploadImageRequest.java
  13. 46 0
      src/main/java/com/ydtech/modules/order/entity/dto/InsTaskImagesDto.java
  14. 46 0
      src/main/java/com/ydtech/modules/order/entity/dto/InsUploadImagesDto.java
  15. 66 0
      src/main/java/com/ydtech/modules/order/entity/po/InsTaskImages.java
  16. 33 0
      src/main/java/com/ydtech/modules/order/entity/po/InsTaskImagesBase64.java
  17. 2 2
      src/main/java/com/ydtech/modules/order/entity/vo/AccidentalDrivingVo.java
  18. 33 0
      src/main/java/com/ydtech/modules/order/entity/vo/InsTaskImagesVo.java
  19. 15 0
      src/main/java/com/ydtech/modules/order/service/IdentifyService.java
  20. 29 0
      src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java
  21. 2 2
      src/main/java/com/ydtech/modules/order/service/impl/CarModelServiceImpl.java
  22. 97 0
      src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java
  23. 1 12
      src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java
  24. 88 0
      src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java
  25. 22 13
      src/main/java/com/ydtech/modules/order/service/impl/InsUploadFilesServiceImpl.java
  26. 30 65
      src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java
  27. 9 7
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java
  28. 2 2
      src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderServiceImpl.java
  29. 2 1
      src/main/java/com/ydtech/modules/report/service/impl/ReportServiceImpl.java
  30. 55 3
      src/main/java/com/ydtech/utils/ImageCompressionUtils.java
  31. 25 17
      src/main/java/com/ydtech/utils/baidu/Idcard.java
  32. 47 47
      src/main/java/com/ydtech/utils/baidu/MultiObjectDetect.java
  33. 1 1
      src/main/java/com/ydtech/utils/idgen/IdGenerate.java
  34. 1 1
      src/main/resources/application-prod.yml
  35. 1 1
      src/main/resources/application-test.yml
  36. 41 0
      src/main/resources/mapper/modules/ins/InsTaskImagesMapper.xml

+ 1 - 4
src/main/java/com/ydtech/aop/GlobalExceptionHandler.java

@@ -6,15 +6,12 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.core.annotation.Order;
-import org.springframework.validation.BindException;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.ObjectError;
 import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ControllerAdvice;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
 
 import java.util.List;
 
@@ -39,7 +36,7 @@ public class GlobalExceptionHandler {
                     element.getClassName(),
                     element.getFileName(),
                     element.getMethodName(),
-                    element.getLineNumber() + ""
+                    String.valueOf(element.getLineNumber())
             );
 
             return HttpResult.error(-9999, errorInfo.toString());

+ 1 - 1
src/main/java/com/ydtech/components/ZhongmeiRequestApiComponents.java

@@ -48,7 +48,7 @@ public class ZhongmeiRequestApiComponents {
 
         String body = response.getBody();
         log.info("---------> 响应参数:{}", body);
-        T t = JSONObject.parseObject(body, tClass);
+        T t = JSON.parseObject(body, tClass);
 
         if (ObjectUtils.isEmpty(t)) {
             throw new SystemException("请求失败");

+ 20 - 0
src/main/java/com/ydtech/constants/enums/FileType.java

@@ -0,0 +1,20 @@
+package com.ydtech.constants.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 文件类型枚举
+ * @date 2023/5/6 14:38
+ */
+@Getter
+@AllArgsConstructor
+public enum FileType {
+
+    IMAGE("image");
+
+    private final String type;
+
+}

+ 9 - 0
src/main/java/com/ydtech/core/page/BaseController.java

@@ -65,5 +65,14 @@ public class BaseController {
         return JwtTokenUtils.getUserIdFromRequest(request);
     }
 
+    /**
+     * 获取用户名
+     *
+     * @param request
+     * @return
+     */
+    public String getJwtUserName(HttpServletRequest request) {
+        return JwtTokenUtils.getUsernameFromRequest(request);
+    }
 
 }

+ 2 - 16
src/main/java/com/ydtech/modules/ins/service/impl/YongAnServiceImpl.java

@@ -1,9 +1,7 @@
 package com.ydtech.modules.ins.service.impl;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.MapperFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 import com.ydtech.components.OrderComponents;
@@ -27,10 +25,8 @@ import com.ydtech.modules.ins.vo.*;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
-import com.ydtech.nai.httpvo.*;
 import com.ydtech.utils.HMAC256Uitil;
 import com.ydtech.utils.HttpXmlUtil;
-import com.ydtech.utils.HttpsPostUtil;
 import com.ydtech.utils.idgen.IdGenerate;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -39,22 +35,14 @@ import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
-import sun.misc.BASE64Decoder;
 
 import javax.crypto.Mac;
 import javax.crypto.spec.SecretKeySpec;
-import javax.servlet.http.HttpServletRequest;
-import java.io.FileOutputStream;
-import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.nio.charset.StandardCharsets;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.function.Function;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -1097,7 +1085,6 @@ public class YongAnServiceImpl implements YongAnService {
         //保存订单信息
 
         if (responseDataC2.getResponseHead().getStatus() != null && responseDataC2.getResponseHead().getStatus().equals("0")) {
-
             //报价成功更新险种信息
             ResponseBodyC2 responseBody = responseDataC2.getResponseBody();
             System.out.println("JSONObject.toJSONString(responseBody) ---" + JSONObject.toJSONString(responseBody));
@@ -1150,10 +1137,9 @@ public class YongAnServiceImpl implements YongAnService {
         List<EsmRetail> list = esmRetailService.selectList(" where deptid = ? and status=?", new Object[]{deptid, "1"});
         //2、根据userid查询三级推荐人
         List<SysUser> users = esmUserInternalService.getSuperior(userid);
-
         if (list != null && list.size() > 0 && users.size() > 0 && !"0".equals(list.get(0).getRetailtype())) {
             EsmRetail retail = list.get(0);
-            List<Double> rateList = new ArrayList<Double>();
+            List<Double> rateList = new ArrayList<>();
             rateList.add(retail.getDisrate1());
             rateList.add(retail.getDisrate2());
             rateList.add(retail.getDisrate3());
@@ -1161,7 +1147,7 @@ public class YongAnServiceImpl implements YongAnService {
             if ("1".equals(retail.getRetailtype())) {//一级分销
                 retailRate += rateList.get(0);
             } else if ("2".equals(retail.getRetailtype())) {//二级分销
-                int num = users.size() > 2 ? 2 : users.size();
+                int num = Math.min(users.size(), 2);
                 for (int i = 0; i < num; i++) {
                     retailRate += rateList.get(i);
                 }

+ 22 - 56
src/main/java/com/ydtech/modules/order/controller/IdentifyController.java

@@ -7,89 +7,55 @@ import com.ydtech.modules.ins.model.CardUserInfo;
 import com.ydtech.modules.ins.model.CustomerInfoVO;
 import com.ydtech.modules.ins.model.ImgInfo;
 import com.ydtech.modules.order.entity.vo.ImgInfoVo;
+import com.ydtech.modules.order.service.IdentifyService;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.baidu.Idcard;
 import com.ydtech.utils.baidu.MultiObjectDetect;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
 @RestController
 @RequestMapping("/order/identify")
 @Api(tags = "识别")
+@Slf4j
 public class IdentifyController {
 
+    private final IdentifyService identifyService;
+
+    public IdentifyController(IdentifyService identifyService) {
+        this.identifyService = identifyService;
+    }
+
     @PostMapping("/idCard")
     @ApiOperation(value = "身份证正反面识别")
-    public HttpResult idCard(@RequestBody ImgInfoVo imgInfo) {
-        Map<String, Object> map = new HashMap<>();
-        CustomerInfoVO customerInfoVO = new CustomerInfoVO();
-        if (!StringUtils.isNullOrEmpty(imgInfo.getImage1()) && StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            customerInfoVO = Idcard.getIdCardFront(imgInfo.getImage1());
-        } else if (StringUtils.isNullOrEmpty(imgInfo.getImage1()) && !StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            customerInfoVO = Idcard.getIdCardBack(imgInfo.getImage2());
-        } else if (!StringUtils.isNullOrEmpty(imgInfo.getImage1()) && !StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            CustomerInfoVO idCardFront = Idcard.getIdCardFront(imgInfo.getImage1());
-            if (!ObjectUtils.isEmpty(idCardFront)) {
-                customerInfoVO.setName(idCardFront.getName());
-                customerInfoVO.setIdentifyNumber(idCardFront.getIdentifyNumber());
-                customerInfoVO.setAddr(idCardFront.getAddr());
-                customerInfoVO.setIdentifyType(idCardFront.getIdentifyType());
-                customerInfoVO.setIdentifyIssuedCom(idCardFront.getIdentifyIssuedCom());
-            }
-            CustomerInfoVO idCardBack = Idcard.getIdCardBack(imgInfo.getImage2());
-            if (!ObjectUtils.isEmpty(idCardBack)) {
-                customerInfoVO.setIdentifyValidDate(idCardBack.getIdentifyValidDate());
-                customerInfoVO.setIdentifyValidEndDate(idCardBack.getIdentifyValidEndDate());
-            }
-        } else {
-            throw new SystemException("身份证没有此类型");
+    public HttpResult idCard(MultipartFile image1, MultipartFile image2) {
+        try {
+            return identifyService.idCard(image1, image2);
+        }catch (IOException e){
+            throw new SystemException("图片压缩异常请重试.......");
         }
-        map.put("customerInfo", customerInfoVO);
-        return HttpResult.ok("success", map);
     }
 
     @PostMapping("/drivingPermit")
     @ApiOperation(value = "行驶证正反面识别")
-    public HttpResult drivingPermit(@RequestBody ImgInfoVo imgInfo) {
-        Map<String, Object> map = new HashMap<>();
-        CardUserInfo cardUserInfo = new CardUserInfo();
-        if (!StringUtils.isNullOrEmpty(imgInfo.getImage1()) && StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            cardUserInfo = MultiObjectDetect.drivingPermitFront(imgInfo.getImage1());
-        } else if (StringUtils.isNullOrEmpty(imgInfo.getImage1()) && !StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            cardUserInfo = MultiObjectDetect.drivingPermitBack(imgInfo.getImage2());
-        } else if (!StringUtils.isNullOrEmpty(imgInfo.getImage1()) && !StringUtils.isNullOrEmpty(imgInfo.getImage2())) {
-            CardUserInfo drivingPermitFront = MultiObjectDetect.drivingPermitFront(imgInfo.getImage1());
-            if (!ObjectUtils.isEmpty(drivingPermitFront)) {
-                cardUserInfo.setvIN(drivingPermitFront.getvIN());
-                cardUserInfo.setIssueDate(drivingPermitFront.getIssueDate());
-                cardUserInfo.setPlateType(drivingPermitFront.getPlateType());
-                cardUserInfo.setMotorUsageTypeCode(drivingPermitFront.getMotorUsageTypeCode());
-                cardUserInfo.setMotorTypeCode(drivingPermitFront.getMotorTypeCode());
-                cardUserInfo.setRegisterDate(drivingPermitFront.getRegisterDate());
-                cardUserInfo.setEngine(drivingPermitFront.getEngine());
-                cardUserInfo.setPlateNo(drivingPermitFront.getPlateNo());
-                cardUserInfo.setBackOcrID(drivingPermitFront.getBackOcrID());
-            }
-            CardUserInfo drivingPermitBack = MultiObjectDetect.drivingPermitBack(imgInfo.getImage2());
-            if (!ObjectUtils.isEmpty(drivingPermitBack)) {
-                cardUserInfo.setGrossMass(drivingPermitBack.getGrossMass());
-                cardUserInfo.setApprovedPassengersCapacity(drivingPermitBack.getApprovedPassengersCapacity());
-                cardUserInfo.setUnladenMass(drivingPermitBack.getUnladenMass());
-            }
-        } else {
-            throw new SystemException("行驶证没有此类型");
+    public HttpResult drivingPermit(MultipartFile image1, MultipartFile image2) {
+        try {
+            return identifyService.drivingPermit(image1, image2);
+        }catch (IOException e){
+            throw new SystemException("图片压缩异常请重试.......");
         }
-        map.put("carInfo", cardUserInfo);
-        return HttpResult.ok("success", map);
-
     }
 
 }

+ 27 - 6
src/main/java/com/ydtech/modules/order/controller/OrderTaskImageController.java

@@ -5,9 +5,11 @@ import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.esm.model.InsTaskImage;
 import com.ydtech.modules.esm.service.InsTaskImageService;
-import com.ydtech.modules.ins.service.impl.YongAnServiceImpl;
 import com.ydtech.modules.order.convert.InsTaskImageConvert;
+import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.entity.vo.InsTaskImageVo;
+import com.ydtech.modules.order.entity.vo.InsTaskImagesVo;
+import com.ydtech.modules.order.service.InsTaskImagesService;
 import com.ydtech.modules.order.service.InsUploadFilesService;
 import com.ydtech.utils.ImageCompressionUtils;
 import com.ydtech.utils.StringUtils;
@@ -15,14 +17,18 @@ import com.ydtech.utils.idgen.IdGenerate;
 import com.ydtech.validation.annotation.CheckObjectNotNull;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.constraints.NotBlank;
 import java.io.IOException;
 import java.util.Base64;
 import java.util.Date;
 import java.util.List;
 
+
 @Api(tags = "影像")
 @RequestMapping("/ins/taskImage")
 @RestController
@@ -32,6 +38,9 @@ public class OrderTaskImageController extends BaseController {
 
     private final InsUploadFilesService insUploadFilesService;
 
+    @Autowired
+    private InsTaskImagesService insTaskImagesService;
+
     public OrderTaskImageController(InsTaskImageService insTaskImageService, InsUploadFilesService insUploadFilesService) {
         this.insTaskImageService = insTaskImageService;
         this.insUploadFilesService = insUploadFilesService;
@@ -39,7 +48,7 @@ public class OrderTaskImageController extends BaseController {
 
     @PostMapping(value = "/uploadImage")
     @ApiOperation(value = "上传影像")
-    public HttpResult UploadImage(@RequestBody InsTaskImageVo insTaskImageVo) {
+    public HttpResult uploadImage(@RequestBody InsTaskImageVo insTaskImageVo) {
         InsTaskImage record = InsTaskImageConvert.INSTANCE.toInsTaskImage(insTaskImageVo);
         // 将数据存入数据库
         if (record.getTaskid() == null || record.getTaskid().equalsIgnoreCase("")) {
@@ -60,7 +69,7 @@ public class OrderTaskImageController extends BaseController {
                 continue;
             }
             record.setId(IdGenerate.nextId());
-            record.setCreator(YongAnServiceImpl.getUserName());
+            record.setCreator(getUserName());
             record.setCreatetime(new Date());
             record.setImage(image);
             this.insTaskImageService.insert(record);
@@ -68,6 +77,13 @@ public class OrderTaskImageController extends BaseController {
         return HttpResult.ok();
     }
 
+    @PostMapping(value = "/uploadImages")
+    @ApiOperation(value = "新上传影像")
+    public HttpResult uploadImages(@RequestBody InsTaskImagesVo insTaskImagesVo, HttpServletRequest request) {
+        return insTaskImagesService.uploadImages(insTaskImagesVo, getJwtUserName(request));
+    }
+
+
     @GetMapping(value = "/findById")
     @ApiOperation(value = "根据任务号查询")
     public HttpResult findById(@RequestParam String taskid, String imgtype) {
@@ -83,6 +99,11 @@ public class OrderTaskImageController extends BaseController {
         return HttpResult.ok(selectList);
     }
 
+    @GetMapping(value = "/findByQuoteNo")
+    @ApiOperation(value = "根据报价号查询")
+    public HttpResult findByQuoteNo(@RequestParam @NotBlank(message = "报价号ID不能为空") String quoteNo) {
+        return this.insTaskImagesService.findByQuoteNo(quoteNo);
+    }
 
     @PostMapping("/imageCompression")
     @ApiOperation(value = "图片压缩")
@@ -100,9 +121,9 @@ public class OrderTaskImageController extends BaseController {
 
     @PostMapping("/uploadFile")
     @ApiOperation(value = "文件上传")
-    public HttpResult uploadFile(@CheckObjectNotNull(message = "上传文件不能为空") MultipartFile multipartFile, String type) throws IOException {
-        return HttpResult.ok(insUploadFilesService.uploadFile(multipartFile, getUserName(), type));
+    public HttpResult uploadFile(@CheckObjectNotNull(message = "上传文件不能为空") MultipartFile multipartFile, String type, HttpServletRequest request) throws IOException {
+        InsUploadFiles insUploadFiles = insUploadFilesService.uploadFile(multipartFile, getJwtUserName(request), type);
+        return HttpResult.ok(insUploadFiles);
     }
 
-
 }

+ 0 - 1
src/main/java/com/ydtech/modules/order/controller/YongChengOrderController.java

@@ -10,7 +10,6 @@ import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.service.YongChengOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;

+ 0 - 5
src/main/java/com/ydtech/modules/order/controller/ZhongMeiOrderApiController.java

@@ -2,9 +2,7 @@ package com.ydtech.modules.order.controller;
 
 
 import com.ydtech.aop.request.RequestSingleParam;
-import com.ydtech.config.properties.ZmApiConfigurationProperties;
 import com.ydtech.core.page.HttpResult;
-import com.ydtech.modules.esm.model.InsTaskImage;
 import com.ydtech.modules.order.components.InsOrdersComponents;
 import com.ydtech.modules.order.entity.api.zm.request.ApprovedRequest;
 import com.ydtech.modules.order.entity.api.zm.request.CoverageRequest;
@@ -12,7 +10,6 @@ import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
-import com.ydtech.modules.order.service.InsOrdersService;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -22,8 +19,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
 
 @Api(tags = "中煤财险 API ")
 @RestController

+ 26 - 0
src/main/java/com/ydtech/modules/order/dao/InsTaskImagesMapper.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ydtech.modules.order.entity.dto.InsTaskImagesDto;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.po.InsTaskImages;
+
+import java.util.List;
+
+/**
+ * @author wenks
+ * @description 针对表【ins_task_images(影像)】的数据库操作Mapper
+ * @createDate 2023-05-05 16:27:19
+ * @Entity generator.domain.InsTaskImages
+ */
+public interface InsTaskImagesMapper extends BaseMapper<InsTaskImages> {
+
+    List<InsTaskImagesDto> getByQuoteNoInsTaskImagesDtoList(String quoteNo);
+
+    List<InsUploadImagesDto> getByOrderNoInsUploadImagesDtoList(String orderNo);
+
+}
+
+
+
+

+ 24 - 8
src/main/java/com/ydtech/modules/order/entity/api/zm/request/QuotedPriceRequest.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.order.entity.api.zm.request;
 
 import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ydtech.modules.ins.vo.CarInfoVo;
 import com.ydtech.modules.ins.vo.CustomerInfoVo;
@@ -13,6 +14,7 @@ import com.ydtech.modules.order.entity.api.zm.constants.TimeConstants;
 import com.ydtech.modules.order.entity.api.zm.constants.TransCode;
 import com.ydtech.modules.order.entity.api.zm.constants.enums.ContractEnum;
 import com.ydtech.modules.order.entity.api.zm.response.ModelsQueryResponse;
+import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.utils.StringUtils;
 import lombok.AllArgsConstructor;
@@ -42,13 +44,11 @@ public class QuotedPriceRequest extends BaseRequest {
 
     private static final long serialVersionUID = 751466864923522868L;
 
-
-
     @JsonProperty("businessData")
     private BusinessDataDTO businessData;
 
-    public QuotedPriceRequest(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO) {
-        this.businessData = new BusinessDataDTO(baseQuoteInfoVo, simpleStadarCarDTO);
+    public QuotedPriceRequest(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo) {
+        this.businessData = new BusinessDataDTO(baseQuoteInfoVo, simpleStadarCarDTO, accidentalDrivingVo);
     }
 
     @Override
@@ -80,9 +80,9 @@ public class QuotedPriceRequest extends BaseRequest {
 
         // 驾意险
         @JsonProperty("accident")
-        private List<Object> accident;
+        private List<AccidentDTO> accident;
 
-        public BusinessDataDTO(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO) {
+        public BusinessDataDTO(BaseQuoteInfoVo baseQuoteInfoVo, ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO, AccidentalDrivingVo accidentalDrivingVo) {
             CarInfoVo carInfo = baseQuoteInfoVo.getCarInfo();
             List<RiskInfoVo> riskList = baseQuoteInfoVo.getRiskList();
             List<KindInfoVo> kindList = baseQuoteInfoVo.getKindList();
@@ -98,7 +98,23 @@ public class QuotedPriceRequest extends BaseRequest {
             this.contract = new ContractDTO().getContract(riskList, kindList, i - 1);
             // 客户信息
             this.customer = new CustomerDTO().getCustomers(ownerInfo, policyHolderInfo, insuredPersonInfo);
+            // 驾意险
+            if(!StringUtils.isEmpty(accidentalDrivingVo.getRideRiskCode())){
+                this.accident = Collections.singletonList(new AccidentDTO(accidentalDrivingVo.getRideRiskCode(), accidentalDrivingVo.getQuantity()));
+            }
+
+        }
 
+        @AllArgsConstructor
+        @NoArgsConstructor
+        @Data
+        public static class AccidentDTO {
+            // 方案代码
+            @JsonProperty("rideRiskCode")
+            private String rideRiskCode;
+            // 投保份数
+            @JsonProperty("quantity")
+            private int quantity;
         }
 
 
@@ -280,7 +296,7 @@ public class QuotedPriceRequest extends BaseRequest {
                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                 LocalDate localDate = LocalDate.parse(startDate, formatter);
                 LocalDate nextYears = localDate.plus(1, ChronoUnit.YEARS);
-                if (startDate.indexOf(TimeConstants.START_TIME) > 0) {
+                if (startDate.contains(TimeConstants.START_TIME)) {
                     LocalDate expiryDate = nextYears.minus(1, ChronoUnit.DAYS);
                     this.validDate = riskInfoVo.getStartDate();
                     this.expiryDate = expiryDate + " " + TimeConstants.END_TIME;
@@ -290,7 +306,7 @@ public class QuotedPriceRequest extends BaseRequest {
                     LocalDateTime localDateTime = LocalDateTime.parse(startDate, formatter);
                     LocalDateTime expiryDateTime = localDateTime.plus(1, ChronoUnit.YEARS);
                     this.validDate = startDate;
-                    this.expiryDate = expiryDateTime.toString();
+                    this.expiryDate = expiryDateTime.format(formatter);
                     this.reinsuranceFlag = "1";
                 }
 

+ 32 - 9
src/main/java/com/ydtech/modules/order/entity/api/zm/request/UploadImageRequest.java

@@ -8,6 +8,7 @@ import com.ydtech.modules.order.entity.api.zm.BaseRequestHead;
 import com.ydtech.modules.order.entity.api.zm.constants.InsuranceTypeCorrespondence;
 import com.ydtech.modules.order.entity.api.zm.constants.TransCode;
 import com.ydtech.modules.order.entity.api.zm.constants.enums.ImageTypeEnum;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -45,14 +46,14 @@ public class UploadImageRequest extends BaseRequest {
         super.getHead().setTransCode(TransCode.UPLOAD_IMAGE);
     }
 
-    public UploadImageRequest(List<InsTaskImage> insTaskImages, String contractNo) {
+    public UploadImageRequest(List<InsTaskImagesBase64> insTaskImages, String contractNo) {
         this.contractNo = contractNo;
         List<NodeBeanlistDTO> nodeBeanlist = new ArrayList<>();
         String[] strings = {"UW_0301", "UW_0302", "UW_0305"};
         for (String string : strings) {
             ImageTypeEnum imageTypeEnum = Enum.valueOf(ImageTypeEnum.class, string);
-            List<InsTaskImage> collect = insTaskImages.stream().filter(insTaskImage -> ArrayUtil.indexOf(imageTypeEnum.getImagesType(), insTaskImage.getImgtype()) >= 0).collect(Collectors.toList());
-            if (collect.size() > 0) {
+            List<InsTaskImagesBase64> collect = insTaskImages.stream().filter(insTaskImage -> ArrayUtil.indexOf(imageTypeEnum.getImagesType(), insTaskImage.getImageType()) >= 0).collect(Collectors.toList());
+            if (!collect.isEmpty()) {
                 NodeBeanlistDTO nodeBeanlistDTO = new NodeBeanlistDTO(collect, string);
                 nodeBeanlist.add(nodeBeanlistDTO);
             }
@@ -72,16 +73,38 @@ public class UploadImageRequest extends BaseRequest {
         @JsonProperty("imageBeanList")
         private List<ImageBeanListDTO> imageBeanList;
 
-        public NodeBeanlistDTO(List<InsTaskImage> insTaskImages, String id) {
+        public NodeBeanlistDTO(List<InsTaskImagesBase64> insTaskImages, String id) {
             this.id = id;
             List<ImageBeanListDTO> imageBeanListDTOS = new ArrayList<>();
-            insTaskImages.forEach(x -> {
+            for (int i = 0; i < insTaskImages.size(); i++) {
                 ImageBeanListDTO imageBeanListDTO = new ImageBeanListDTO();
-                imageBeanListDTO.setFileName(UUID.randomUUID() + ".png");
-                String[] split = x.getImage().split("base64,");
-                imageBeanListDTO.setImage(split[1]);
+                InsTaskImagesBase64 insTaskImagesBase64 = insTaskImages.get(i);
+
+                String fileName = insTaskImagesBase64.getFileName();
+                String suffix = fileName.substring(fileName.lastIndexOf("."));
+                switch (insTaskImagesBase64.getImageType()) {
+                    case "C01":
+                        fileName = "车辆影像" + i + suffix;
+                        break;
+                    case "C02":
+                        fileName = "车主身份证" + i + suffix;
+                        break;
+                    case "C03":
+                        fileName = "投保人身份证" + i + suffix;
+                        break;
+                    case "C04":
+                        fileName = "被保人身份证" + i + suffix;
+                        break;
+                    case "C05":
+                        fileName = "验车照" + i + suffix;
+                        break;
+                }
+
+                imageBeanListDTO.setFileName(fileName);
+                imageBeanListDTO.setImage(insTaskImagesBase64.getBase64String());
                 imageBeanListDTOS.add(imageBeanListDTO);
-            });
+            }
+
             this.imageBeanList = imageBeanListDTOS;
         }
 

+ 46 - 0
src/main/java/com/ydtech/modules/order/entity/dto/InsTaskImagesDto.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.order.entity.dto;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 影像查询结果返回
+ * @date 2023/5/5 17:06
+ */
+@Data
+@ApiModel("影像查询结果")
+public class InsTaskImagesDto implements Serializable {
+
+    private static final long serialVersionUID = -5629610345858205592L;
+    /**
+     * id
+     */
+    @TableId
+    private String id;
+    /**
+     * 任务号
+     */
+    @ApiModelProperty("任务号")
+    private String quoteNo;
+    /**
+     * 文件存储ID
+     */
+    @ApiModelProperty("文件存储ID")
+    private String imageId;
+    /**
+     * 图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)
+     */
+    @ApiModelProperty("图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)")
+    private String imageType;
+    /**
+     * 文件访问路劲
+     */
+    @ApiModelProperty("文件访问路劲")
+    private String url;
+}

+ 46 - 0
src/main/java/com/ydtech/modules/order/entity/dto/InsUploadImagesDto.java

@@ -0,0 +1,46 @@
+package com.ydtech.modules.order.entity.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 影像上传实体类
+ * @date 2023/5/5 17:38
+ */
+@Data
+@ApiModel(value = "影像上传实体类")
+public class InsUploadImagesDto implements Serializable {
+
+    private static final long serialVersionUID = 3269943163000890218L;
+    /**
+     * 报价号
+     */
+    @ApiModelProperty("报价号")
+    private String quoteNo;
+    /**
+     * 图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)
+     */
+    @ApiModelProperty("图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)")
+    private String imageType;
+    /**
+     * 文件名称
+     */
+    @ApiModelProperty("文件名称")
+    private String fileName;
+    /**
+     * 文件路劲
+     */
+    @ApiModelProperty("文件路劲")
+    private String filePath;
+    /**
+     * 文件存储ID
+     */
+    @ApiModelProperty("文件存储ID")
+    private String imageId;
+
+}

+ 66 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsTaskImages.java

@@ -0,0 +1,66 @@
+package com.ydtech.modules.order.entity.po;
+
+import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.ydtech.modules.order.entity.vo.InsTaskImagesVo;
+import com.ydtech.utils.idgen.IdGenerate;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 影像
+ * @TableName ins_task_images
+ */
+@TableName(value ="ins_task_images")
+@Data
+@NoArgsConstructor
+public class InsTaskImages implements Serializable {
+    /**
+     * id
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 任务号
+     */
+    private String quoteNo;
+
+    /**
+     * 图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)
+     */
+    @TableField
+    private String imageType;
+
+    /**
+     * 文件存储ID
+     */
+    private String imageId;
+
+    /**
+     * 创建人
+     */
+    private String creator;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    public InsTaskImages(InsTaskImagesVo insTaskImagesVo, String username, String imageId) {
+        this.id = IdGenerate.nextId();
+        this.quoteNo = insTaskImagesVo.getQuoteNo();
+        this.imageType = insTaskImagesVo.getImageType();
+        this.imageId = imageId;
+        this.creator = username;
+        this.createTime = DateTime.now();
+    }
+}

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/po/InsTaskImagesBase64.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.po;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 文件路劲转base64
+ * @date 2023/5/5 18:19
+ */
+@Data
+@NoArgsConstructor
+public class InsTaskImagesBase64 {
+
+
+    private String quoteNo;
+    /**
+     * 图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)
+     */
+    private String imageType;
+    /**
+     * 文件名称
+     */
+    private String fileName;
+    /**
+     * 图片转base64 文件
+     */
+    private String base64String;
+
+
+
+}

+ 2 - 2
src/main/java/com/ydtech/modules/order/entity/vo/AccidentalDrivingVo.java

@@ -1,6 +1,5 @@
 package com.ydtech.modules.order.entity.vo;
 
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -14,8 +13,9 @@ public class AccidentalDrivingVo implements Serializable {
     private static final long serialVersionUID = -3043423126789961661L;
 
     private Integer id;
+
     @ApiModelProperty(value = "驾意险编号")
-    private Integer rideRiskCode;
+    private String rideRiskCode;
 
     @ApiModelProperty(value = "驾意险名称")
     private String rideRiskName;

+ 33 - 0
src/main/java/com/ydtech/modules/order/entity/vo/InsTaskImagesVo.java

@@ -0,0 +1,33 @@
+package com.ydtech.modules.order.entity.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 影像上传类
+ * @date 2023/5/5 16:34
+ */
+@Data
+@ApiModel(value = "影像上传类")
+public class InsTaskImagesVo {
+
+    @ApiModelProperty(value = "任务号")
+    @NotBlank(message = "报价号不能为空")
+    private String quoteNo;
+
+    @ApiModelProperty(value = "图片类型(C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照)")
+    @NotBlank(message = "文件类型不能为空")
+    private String imageType;
+
+    @ApiModelProperty(value = "文件存储ID")
+    @NotEmpty(message = "文件存储不能为空")
+    private List<String> imageIdList;
+
+}

+ 15 - 0
src/main/java/com/ydtech/modules/order/service/IdentifyService.java

@@ -0,0 +1,15 @@
+package com.ydtech.modules.order.service;
+
+import com.ydtech.core.page.HttpResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+public interface IdentifyService {
+
+
+    HttpResult idCard(MultipartFile image1, MultipartFile image2) throws IOException;
+
+    HttpResult drivingPermit(MultipartFile image1, MultipartFile image2) throws IOException;
+
+}

+ 29 - 0
src/main/java/com/ydtech/modules/order/service/InsTaskImagesService.java

@@ -0,0 +1,29 @@
+package com.ydtech.modules.order.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.entity.po.InsTaskImages;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
+import com.ydtech.modules.order.entity.vo.InsTaskImagesVo;
+
+import java.util.List;
+
+/**
+* @author wenks
+* @description 针对表【ins_task_images(影像)】的数据库操作Service
+* @createDate 2023-05-05 16:27:19
+*/
+public interface InsTaskImagesService extends IService<InsTaskImages> {
+
+    HttpResult uploadImages(InsTaskImagesVo insTaskImagesVo, String username);
+
+    HttpResult findByQuoteNo(String quoteNo);
+
+    /**
+     * 获取文件的 文件的Base64 编码
+     * @param orderNo
+     * @return
+     */
+    List<InsTaskImagesBase64> findByOrderNo(String orderNo);
+
+}

+ 2 - 2
src/main/java/com/ydtech/modules/order/service/impl/CarModelServiceImpl.java

@@ -33,11 +33,11 @@ public class CarModelServiceImpl implements CarModelService {
             return HttpResult.ok(carModelDTOS);
         }
         List<CarModelDTO> carModelDTOS1 = zhongMeiOrderService.vinSearch(frameNo);
-        if(carModelDTOS1.isEmpty()){
+        if(!carModelDTOS1.isEmpty()){
             return HttpResult.ok(carModelDTOS1);
         }
         List<CarModelDTO> carModelDTOS2 = yongAnOrderService.vinSearch(frameNo);
-        if(carModelDTOS2.isEmpty()){
+        if(!carModelDTOS2.isEmpty()){
             return HttpResult.ok(carModelDTOS2);
         }
         return new HttpResult();

+ 97 - 0
src/main/java/com/ydtech/modules/order/service/impl/IdentifyServiceImpl.java

@@ -0,0 +1,97 @@
+package com.ydtech.modules.order.service.impl;
+
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.exception.SystemException;
+import com.ydtech.modules.ins.model.CardUserInfo;
+import com.ydtech.modules.ins.model.CustomerInfoVO;
+import com.ydtech.modules.order.service.IdentifyService;
+import com.ydtech.utils.ImageCompressionUtils;
+import com.ydtech.utils.StringUtils;
+import com.ydtech.utils.baidu.Idcard;
+import com.ydtech.utils.baidu.MultiObjectDetect;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author wenks
+ * @version 0.0.2
+ * @description 识别
+ * @date 2023/5/6 15:54
+ */
+@Service
+public class IdentifyServiceImpl implements IdentifyService {
+
+    @Override
+    public HttpResult idCard(MultipartFile image1, MultipartFile image2) throws IOException {
+        Map<String, Object> map = new HashMap<>();
+        CustomerInfoVO customerInfoVO = new CustomerInfoVO();
+
+        String s1 = byteToBase64(image1);
+        CustomerInfoVO idCardFront = Idcard.getIdCardFront(s1);
+        if (!ObjectUtils.isEmpty(idCardFront)) {
+            customerInfoVO.setName(idCardFront.getName());
+            customerInfoVO.setIdentifyNumber(idCardFront.getIdentifyNumber());
+            customerInfoVO.setAddr(idCardFront.getAddr());
+            customerInfoVO.setIdentifyType(idCardFront.getIdentifyType());
+            customerInfoVO.setIdentifyIssuedCom(idCardFront.getIdentifyIssuedCom());
+        }
+
+        String s2 = byteToBase64(image2);
+        CustomerInfoVO idCardBack = Idcard.getIdCardBack(s2);
+        if (!ObjectUtils.isEmpty(idCardBack)) {
+            customerInfoVO.setIdentifyValidDate(idCardBack.getIdentifyValidDate());
+            customerInfoVO.setIdentifyValidEndDate(idCardBack.getIdentifyValidEndDate());
+        }
+
+        map.put("customerInfo", customerInfoVO);
+        return HttpResult.ok("success", map);
+    }
+
+    @Override
+    public HttpResult drivingPermit(MultipartFile image1, MultipartFile image2) throws IOException {
+        Map<String, Object> map = new HashMap<>();
+        CardUserInfo cardUserInfo = new CardUserInfo();
+
+        String s1 = byteToBase64(image1);
+        CardUserInfo drivingPermitFront = MultiObjectDetect.drivingPermitFront(s1);
+        if (!ObjectUtils.isEmpty(drivingPermitFront)) {
+            cardUserInfo.setvIN(drivingPermitFront.getvIN());
+            cardUserInfo.setIssueDate(drivingPermitFront.getIssueDate());
+            cardUserInfo.setPlateType(drivingPermitFront.getPlateType());
+            cardUserInfo.setMotorUsageTypeCode(drivingPermitFront.getMotorUsageTypeCode());
+            cardUserInfo.setMotorTypeCode(drivingPermitFront.getMotorTypeCode());
+            cardUserInfo.setRegisterDate(drivingPermitFront.getRegisterDate());
+            cardUserInfo.setEngine(drivingPermitFront.getEngine());
+            cardUserInfo.setPlateNo(drivingPermitFront.getPlateNo());
+            cardUserInfo.setBackOcrID(drivingPermitFront.getBackOcrID());
+        }
+
+        String s2 = byteToBase64(image2);
+        CardUserInfo drivingPermitBack = MultiObjectDetect.drivingPermitBack(s2);
+        if (!ObjectUtils.isEmpty(drivingPermitBack)) {
+            cardUserInfo.setGrossMass(drivingPermitBack.getGrossMass());
+            cardUserInfo.setApprovedPassengersCapacity(drivingPermitBack.getApprovedPassengersCapacity());
+            cardUserInfo.setUnladenMass(drivingPermitBack.getUnladenMass());
+        }
+
+
+        map.put("carInfo", cardUserInfo);
+        return HttpResult.ok("success", map);
+    }
+
+
+    private String byteToBase64(MultipartFile file) throws IOException {
+        if(ObjectUtils.isEmpty(file)){
+            return "";
+        }        // 转换后的图片
+        byte[] bytes_bytes = ImageCompressionUtils.compressPicForScale(file.getBytes(), 2048);
+        return Base64.getEncoder().encodeToString(bytes_bytes);
+    }
+
+}

+ 1 - 12
src/main/java/com/ydtech/modules/order/service/impl/InsOrdersServiceImpl.java

@@ -232,21 +232,10 @@ public class InsOrdersServiceImpl extends ServiceImpl<InsOrdersMapper, InsOrders
         if ("admin".equals(orderQueryVo.getUserId())) {
             orderQueryVo.setUserId("");
         }
-        // 1. 查询订单信息
-//        Page<InsOrders> page = query()
-//                .eq(StringUtils.isNotEmpty(orderQueryVo.getUserId()), "userid", orderQueryVo.getUserId())
-//                .eq(StringUtils.isNotEmpty(orderQueryVo.getOrderStatus()), "orderstatus", orderQueryVo.getOrderStatus())
-//                .like(StringUtils.isNotEmpty(orderQueryVo.getFrameNo()), "frameno", orderQueryVo.getFrameNo())
-//                .like(StringUtils.isNotEmpty(orderQueryVo.getLicenseNo()), "licenseno", orderQueryVo.getLicenseNo())
-//                .like(StringUtils.isNotEmpty(orderQueryVo.getInsuredName()), "insuredname", orderQueryVo.getInsuredName())
-//                .between(!ObjectUtils.isEmpty(orderQueryVo.getStartDate()) && !ObjectUtils.isEmpty(orderQueryVo.getEndDate()), "createtime", orderQueryVo.getStartDate(), orderQueryVo.getEndDate())
-//                .orderByDesc("createtime")
-//                .page(new Page<>(orderQueryVo.getPageNum(), orderQueryVo.getPageSize()));
-//        List<InsOrders> records = page.getRecords();
         PageHelper.startPage(orderQueryVo.getPageNum(), orderQueryVo.getPageSize());
         List<InsOrders> order = baseMapper.getOrder(orderQueryVo);
 
-        if (order.size() == 0) {
+        if (order.isEmpty()) {
             return new BasePageResult<>();
         }
         PageInfo<InsOrders> pageInfo = new PageInfo<>(order);

+ 88 - 0
src/main/java/com/ydtech/modules/order/service/impl/InsTaskImagesServiceImpl.java

@@ -0,0 +1,88 @@
+package com.ydtech.modules.order.service.impl;
+
+import cn.hutool.core.io.FileUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.order.dao.InsTaskImagesMapper;
+import com.ydtech.modules.order.entity.dto.InsTaskImagesDto;
+import com.ydtech.modules.order.entity.dto.InsUploadImagesDto;
+import com.ydtech.modules.order.entity.po.InsTaskImages;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
+import com.ydtech.modules.order.entity.vo.InsTaskImagesVo;
+import com.ydtech.modules.order.service.InsTaskImagesService;
+import com.ydtech.utils.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Base64Utils;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author wenks
+ * @description 针对表【ins_task_images(影像)】的数据库操作Service实现
+ * @createDate 2023-05-05 16:27:19
+ */
+@Service
+public class InsTaskImagesServiceImpl extends ServiceImpl<InsTaskImagesMapper, InsTaskImages>
+        implements InsTaskImagesService {
+
+    @Override
+    @Transactional
+    public HttpResult uploadImages(InsTaskImagesVo insTaskImagesVo, String username) {
+        // 删除之前的文件
+        baseMapper.delete(new LambdaQueryWrapper<InsTaskImages>()
+                .eq(InsTaskImages::getImageType, insTaskImagesVo.getImageType())
+                .eq(InsTaskImages::getQuoteNo, insTaskImagesVo.getQuoteNo())
+        );
+
+        // 将新文件存入
+        List<InsTaskImages> insTaskImagesList = new ArrayList<>();
+        for (String s : insTaskImagesVo.getImageIdList()) {
+            InsTaskImages insTaskImages = new InsTaskImages(insTaskImagesVo, username, s);
+            insTaskImagesList.add(insTaskImages);
+        }
+        boolean b = saveBatch(insTaskImagesList);
+        return HttpResult.error(b ? 200 : 400, b ? "上传成功" : "上传失败");
+    }
+
+    @Override
+    public HttpResult findByQuoteNo(String quoteNo) {
+        List<InsTaskImagesDto> insTaskImagesDtos = baseMapper.getByQuoteNoInsTaskImagesDtoList(quoteNo);
+        Map<String, List<InsTaskImagesDto>> collect = insTaskImagesDtos.stream().collect(Collectors.groupingBy(InsTaskImagesDto::getImageType));
+        return HttpResult.ok(collect);
+    }
+
+    @Override
+    public List<InsTaskImagesBase64> findByOrderNo(String orderNo) {
+        List<InsUploadImagesDto> insUploadImagesDtos = baseMapper.getByOrderNoInsUploadImagesDtoList(orderNo);
+        // 使用 imagesId 去重
+        List<InsUploadImagesDto> deduplication = insUploadImagesDtos.stream().collect(
+                Collectors.collectingAndThen(
+                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(InsUploadImagesDto::getImageId))), ArrayList::new));
+
+        // 图片路劲转base64
+        Map<String, String> map = new HashMap<>();
+        deduplication.forEach(target -> {
+                    String base64B = Base64Utils.encodeToString(FileUtil.readBytes(target.getFilePath()));
+                    map.put(target.getImageId(), base64B);
+                }
+        );
+
+        List<InsTaskImagesBase64> list = new ArrayList<>();
+        for (InsUploadImagesDto insUploadImagesDto : insUploadImagesDtos) {
+            InsTaskImagesBase64 insTaskImagesBase64 = new InsTaskImagesBase64();
+            insTaskImagesBase64.setFileName(insUploadImagesDto.getFileName());
+            insTaskImagesBase64.setImageType(insUploadImagesDto.getImageType());
+            insTaskImagesBase64.setQuoteNo(insUploadImagesDto.getQuoteNo());
+            insTaskImagesBase64.setBase64String(map.get(insUploadImagesDto.getImageId()));
+            list.add(insTaskImagesBase64);
+        }
+        return list;
+    }
+}
+
+
+
+

+ 22 - 13
src/main/java/com/ydtech/modules/order/service/impl/InsUploadFilesServiceImpl.java

@@ -5,11 +5,13 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.constants.enums.FileType;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.exception.SystemException;
 import com.ydtech.modules.order.dao.InsUploadFilesMapper;
 import com.ydtech.modules.order.entity.po.InsUploadFiles;
 import com.ydtech.modules.order.service.InsUploadFilesService;
+import com.ydtech.utils.ImageCompressionUtils;
 import com.ydtech.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -18,8 +20,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.IOException;
+import java.io.*;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
@@ -41,24 +42,25 @@ public class InsUploadFilesServiceImpl extends ServiceImpl<InsUploadFilesMapper,
 
     @Override
     public InsUploadFiles uploadFile(MultipartFile multipartFile, String username, String type) throws IOException {
-        InsUploadFiles insUploadFiles = new InsUploadFiles();
         String fileMD5 = DigestUtils.md5Hex(multipartFile.getBytes());
-
         InsUploadFiles uploadFiles = getById(fileMD5);
         if (ObjectUtil.isNotEmpty(uploadFiles)) {
             return uploadFiles;
         }
 
+        // 文件上传实体
+        InsUploadFiles insUploadFiles = new InsUploadFiles();
         insUploadFiles.setId(fileMD5);
         insUploadFiles.setFileName(multipartFile.getOriginalFilename());
         insUploadFiles.setUsername(username);
-        insUploadFiles.setFileType("图片");
+        insUploadFiles.setFileType(type);
         insUploadFiles.setUpdateTime(DateTime.now());
 
-
+        // 目录上传组装
         String datePath = getFileFolder(type, true, true, true);
         String filename = insUploadFiles.getFileName();
-        String objectName = fileMD5 + FileNameUtil.extName(filename);
+        String suffix = filename.substring(filename.lastIndexOf("."));
+        String objectName = fileMD5 + suffix;
         String uploadPath = uploadFilePath + datePath;
         File folder = new File(uploadPath);
         // 路劲不存在创建目录
@@ -68,12 +70,19 @@ public class InsUploadFilesServiceImpl extends ServiceImpl<InsUploadFilesMapper,
 
         String accessPath = uploadFileUrl + datePath + objectName;
         insUploadFiles.setUrl(accessPath);
-
-        try {
-            // 存储路劲
-            String storagePath = uploadPath + objectName;
-            multipartFile.transferTo(new File(storagePath));
-            insUploadFiles.setFilePath(storagePath);
+        // 存储路劲
+        String storagePath = uploadPath + objectName;
+        File file = new File(storagePath);
+        try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
+            if (FileType.IMAGE.getType().equals(type)){
+                // 图片格式需要压缩
+                byte[] compressPicByte = ImageCompressionUtils.compressPic(multipartFile.getInputStream(), suffix, uploadFilePath);
+                byte[] bytes = ImageCompressionUtils.compressPicForScale(compressPicByte, 100);
+                fileOutputStream.write(bytes);
+                insUploadFiles.setFilePath(storagePath);
+            }else {
+                multipartFile.transferTo(file);
+            }
             save(insUploadFiles);
             return insUploadFiles;
         } catch (Exception e) {

+ 30 - 65
src/main/java/com/ydtech/modules/order/service/impl/YongAnOrderServiceImpl.java

@@ -20,12 +20,15 @@ import com.ydtech.modules.order.convert.MapToYaExtendInfoDto;
 import com.ydtech.modules.order.entity.InsAreaCompany;
 import com.ydtech.modules.order.entity.InsOrders;
 import com.ydtech.modules.order.entity.TaxArrears;
+import com.ydtech.modules.order.entity.po.InsTaskImages;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.ya.YaExtendInfoDto;
 import com.ydtech.modules.order.entity.vo.ya.YaPayUrlVo;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.order.service.InsTaskImagesService;
 import com.ydtech.modules.order.service.YongAnOrderService;
 import com.ydtech.utils.HMAC256Uitil;
 import com.ydtech.utils.HttpXmlUtil;
@@ -73,17 +76,15 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
 
     private final InsOrdersService insOrdersService;
 
-    private final InsTaskImageService insTaskImageService;
+    private final InsTaskImagesService insTaskImagesService;
 
-    @Autowired
-    private YongAnService yongAnService;
-    @Autowired
-    private EsmInsCompanyService esmInsCompanyService;
+    private final EsmInsCompanyService esmInsCompanyService;
 
-    public YongAnOrderServiceImpl(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsTaskImageService insTaskImageService) {
+    public YongAnOrderServiceImpl(InsAreaCompanyService insAreaCompanyService, InsOrdersService insOrdersService, InsTaskImagesService insTaskImagesService, EsmInsCompanyService esmInsCompanyService) {
         this.insAreaCompanyService = insAreaCompanyService;
         this.insOrdersService = insOrdersService;
-        this.insTaskImageService = insTaskImageService;
+        this.insTaskImagesService = insTaskImagesService;
+        this.esmInsCompanyService = esmInsCompanyService;
     }
 
     @Override
@@ -98,7 +99,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
             }
         } catch (Exception ignored) {
         }
-        return null;
+        return Collections.emptyList();
     }
 
     @Override
@@ -113,7 +114,6 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         ObjectMapper mapper = new XmlMapper();
         mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
         try {
-//            PrivyDTO[] privys =new PrivyDTO[2];
             List<PrivyDTO> privys = new ArrayList<>();
             //2.1投保人信息
             CustomerInfoVo policyHolderInfo = quoteInfoVo.getPolicyHolderInfo();
@@ -414,48 +414,13 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
                 insAreaCompany.setPaymentLink(payUrl);
                 insAreaCompany.setOrderstatus(orderstatus);
 
-//                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-//                insAreaCompany.setSubmittime(sdf.format(new Date()));
                 insAreaCompany.setJqapplyno(jqApplyno == null ? "" : jqApplyno);
                 insAreaCompany.setSyapplyno(syApplyno == null ? "" : syApplyno);
                 insAreaCompany.setJqappoint(""); //交强特别约定
                 insAreaCompany.setSyappoint(""); //商业特别约定
                 insAreaCompanyService.updateById(insAreaCompany);
                 insOrdersService.updateByOrderStatus(orders.getOrderno(), orderstatus);
-                //插入轨迹表
-//                if (orderstatus.equals("5")) {
-//                    InsTaskHistory history = new InsTaskHistory();
-//                    history.setId(String.valueOf(new Date().getTime()));
-//                    history.setCompany(order.getInscompany());
-//                    history.setTaskid(order.getOrderno());
-//                    history.setOperatorid(order.getUserid());
-//                    history.setOperator(order.getUsername());
-//                    history.setCreatetime(sdf.format(new Date()));
-//                    history.setStatus("2");
-//                    history.setRemark("已核保");
-//                    insTaskHistoryService.insert(history);
-//
-//                    history.setId(String.valueOf(new Date().getTime() + 1000));
-//                    history.setCompany(order.getInscompany());
-//                    history.setTaskid(order.getOrderno());
-//                    history.setOperatorid(order.getUserid());
-//                    history.setOperator(order.getUsername());
-//                    history.setCreatetime(sdf.format(new Date()));
-//                    history.setStatus(order.getOrderstatus());
-//                    history.setRemark("已核保待缴费");
-//                    insTaskHistoryService.insert(history);
-//                } else {
-//                    InsTaskHistory history = new InsTaskHistory();
-//                    history.setId(String.valueOf(new Date().getTime()));
-//                    history.setCompany(order.getInscompany());
-//                    history.setTaskid(order.getOrderno());
-//                    history.setOperatorid(order.getUserid());
-//                    history.setOperator(order.getUsername());
-//                    history.setCreatetime(sdf.format(new Date()));
-//                    history.setStatus("4");
-//                    history.setRemark("核保不通过");
-//                    insTaskHistoryService.insert(history);
-//                }
+
             }
             log.info("===永安--核保成功===");
             log.info("===永安--影像上传成功成功===");
@@ -480,8 +445,8 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         try {
             InsAreaCompany insAreaCompany = insAreaCompanyService.getById(companyId);
             InsOrders insOrders = insOrdersService.existOrder(insAreaCompany.getOrderno());
-            List<InsTaskImage> insTaskImages = insTaskImageService.selectByTaskId(insOrders.getQuoteno());
-            if (insTaskImages == null || insTaskImages.size() == 0) {
+            List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
+            if (insTaskImagesBase64s.isEmpty()) {
                 throw new SystemException("请检查影像是否上传了");
             }
 
@@ -491,28 +456,31 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
             ObjectMapper mapper = new XmlMapper();
             mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
 
-            for (int i = 0; i < insTaskImages.size(); i++) {
+            for (int i = 0; i < insTaskImagesBase64s.size(); i++) {
                 //------------------永安影像上传----------------------
                 //1.组装RequestBody
-                InsTaskImage record = insTaskImages.get(i);
-                String image = record.getImage();
+                InsTaskImagesBase64 insTaskImagesBase64 = insTaskImagesBase64s.get(i);
+
+                String image = insTaskImagesBase64.getBase64String();
                 requestBodyB25.setBussNo("yx" + insAreaCompany.getId());
                 requestBodyB25.setUserCode(userCode);
                 requestBodyB25.setComCode(comCode);
-                image = image.replace("data:image/jpeg;base64,", "");
                 requestBodyB25.setFile(image);
                 String fileName = "";
+                String fileName1 = insTaskImagesBase64s.get(i).getFileName();
+                String suffix = fileName1.substring(fileName1.lastIndexOf("."));
+
                 //C01车辆影像,C02车主身份证,C03投保人身份证,C04被保人身份证,C05验车照
-                if (record.getImgtype() != null && record.getImgtype().equals("C01")) {
-                    fileName = "车辆影像" + i + ".jpg";
-                } else if (record.getImgtype() != null && record.getImgtype().equals("C02")) {
-                    fileName = "车主身份证" + i + ".jpg";
-                } else if (record.getImgtype() != null && record.getImgtype().equals("C03")) {
-                    fileName = "投保人身份证" + i + ".jpg";
-                } else if (record.getImgtype() != null && record.getImgtype().equals("C04")) {
-                    fileName = "被保人身份证" + i + ".jpg";
-                } else if (record.getImgtype() != null && record.getImgtype().equals("C05")) {
-                    fileName = "验车照" + i + ".jpg";
+                if (insTaskImagesBase64.getImageType() != null && insTaskImagesBase64.getImageType().equals("C01")) {
+                    fileName = "车辆影像" + i + suffix;
+                } else if (insTaskImagesBase64.getImageType() != null && insTaskImagesBase64.getImageType().equals("C02")) {
+                    fileName = "车主身份证" + i + suffix;
+                } else if (insTaskImagesBase64.getImageType() != null && insTaskImagesBase64.getImageType().equals("C03")) {
+                    fileName = "投保人身份证" + i + suffix;
+                } else if (insTaskImagesBase64.getImageType() != null && insTaskImagesBase64.getImageType().equals("C04")) {
+                    fileName = "被保人身份证" + i + suffix;
+                } else if (insTaskImagesBase64.getImageType() != null && insTaskImagesBase64.getImageType().equals("C05")) {
+                    fileName = "验车照" + i + suffix;
                 }
                 requestBodyB25.setFileName(fileName);
                 //2 接口请求
@@ -944,7 +912,7 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
             riskList1.add(risk);
         }
         if (syPremium != 0) {
-            QuoteRiskRespVo risk = new QuoteRiskRespVo();
+            QuoteRiskRespVo risk;
             risk = new QuoteRiskRespVo();
             risk.setRiskCode("0510");
             risk.setRiskName("机动车商业保险");
@@ -1086,7 +1054,6 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
         }
 
         List<ExtendInfoDto> extendInfo = responseBodyC2.getExtendInfo();
-//        Map<String, String> maps = extendInfo.stream().collect(Collectors.toMap(ExtendInfoDto::getKey,ExtendInfoDto::getValue , (key1, key2) -> key2));
         Map<String, String> maps = extendInfo.stream().collect(LinkedHashMap::new, (m, v) -> m.put(v.getKey(), v.getValue()), LinkedHashMap::putAll);
         String relationType = maps.get("relationType");
         quoteRespVo.setIszdj("0");
@@ -1116,12 +1083,10 @@ public class YongAnOrderServiceImpl implements YongAnOrderService {
             insAreaCompany.setJqpremium(BigDecimal.valueOf(jq_falg ? responseBody.getCiPremium() : 0));
             insAreaCompany.setSypremium(BigDecimal.valueOf(responseBody.getBiPremium()));
             insAreaCompany.setTaxamount(BigDecimal.valueOf(jq_falg ? responseBody.getCarTax().getSumPayment() : 0));
-//            insOrder.setSumpremium(responseBody.getSumPremium()+insOrder.getTaxamount());
             insAreaCompany.setSumpremium(BigDecimal.valueOf(quoteRespVo.getSumPermium()));
             insAreaCompany.setOrderstatus(InsOrderStatus.S_0.getCode()); // 1
             insAreaCompany.setReqtxt(JSON.parseObject(JSON.toJSONString(requestData)));
             insAreaCompany.setReptxt(JSON.parseObject(JSON.toJSONString(responseDataC2)));
-//            insAreaCompany.setPolicytype(quoteRespVo.getIszdj());
             insAreaCompany.setInscompany(esmInsCompany.getId());
             insAreaCompany.setInscompany(esmInsCompany.getNamesimple());
             insAreaCompany.setTaxArrears(JSON.parseArray(JSON.toJSONString(quoteRespVo.getTaxArrears())));

+ 9 - 7
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderApiServiceImpl.java

@@ -24,12 +24,14 @@ import com.ydtech.modules.order.entity.api.zm.constants.enums.PaymentStatusEnum;
 import com.ydtech.modules.order.entity.api.zm.request.*;
 
 import com.ydtech.modules.order.entity.api.zm.response.*;
+import com.ydtech.modules.order.entity.po.InsTaskImagesBase64;
 import com.ydtech.modules.order.entity.vo.AccidentalDrivingVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
 import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
 import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
 import com.ydtech.modules.order.service.InsAreaCompanyService;
 import com.ydtech.modules.order.service.InsOrdersService;
+import com.ydtech.modules.order.service.InsTaskImagesService;
 import com.ydtech.modules.order.service.ZhongMeiOrderApiService;
 import com.ydtech.utils.CalculateUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -48,16 +50,16 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
     private final InsAreaCompanyService insAreaCompanyService;
 
-    private final InsTaskImageService insTaskImageService;
+    private final InsTaskImagesService insTaskImagesService;
 
     private final ZhongmeiRequestApiComponents zhongmeiRequestApiComponents;
 
     private final EsmInsCompanyService esmInsCompanyService;
 
-    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImageService insTaskImageService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, EsmInsCompanyService esmInsCompanyService) {
+    public ZhongMeiOrderApiServiceImpl(InsOrdersService insOrdersService, InsAreaCompanyService insAreaCompanyService, InsTaskImagesService insTaskImagesService, ZhongmeiRequestApiComponents zhongmeiRequestApiComponents, EsmInsCompanyService esmInsCompanyService) {
         this.insOrdersService = insOrdersService;
         this.insAreaCompanyService = insAreaCompanyService;
-        this.insTaskImageService = insTaskImageService;
+        this.insTaskImagesService = insTaskImagesService;
         this.zhongmeiRequestApiComponents = zhongmeiRequestApiComponents;
         this.esmInsCompanyService = esmInsCompanyService;
     }
@@ -90,7 +92,7 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
 
         ModelsQueryResponse.SimpleStadarCarDTO simpleStadarCarDTO = simpleStadarCarDTOS.get(0);
         // 组装参数
-        QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO);
+        QuotedPriceRequest quotedPriceRequest = new QuotedPriceRequest(quoteInfo, simpleStadarCarDTO, zmQuoteVo.getAccidentalDrivingVo());
         QuotedPriceResponse quotedPriceResponse = zhongmeiRequestApiComponents.quotedPrice(quotedPriceRequest, QuotedPriceResponse.class);
 
         QuoteRespVo quoteRespVo = getQuoteRespVo(quotedPriceResponse, quoteInfo);
@@ -136,11 +138,11 @@ public class ZhongMeiOrderApiServiceImpl implements ZhongMeiOrderApiService {
         InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
         // 投保单号(总)
         String insOrderNo = insAreaCompany.getInsOrderNo();
-        List<InsTaskImage> insTaskImages = insTaskImageService.selectByTaskId(insOrders.getQuoteno());
-        if (insTaskImages.isEmpty()) {
+        List<InsTaskImagesBase64> insTaskImagesBase64s = insTaskImagesService.findByOrderNo(insOrders.getOrderno());
+        if (insTaskImagesBase64s.isEmpty()) {
             throw new SystemException("请检查影像是否上传了");
         }
-        UploadImageRequest request = new UploadImageRequest(insTaskImages, insOrderNo);
+        UploadImageRequest request = new UploadImageRequest(insTaskImagesBase64s, insOrderNo);
         zhongmeiRequestApiComponents.uploadImage(request, UploadImageResponse.class);
         return HttpResult.ok("上传文件成功");
     }

+ 2 - 2
src/main/java/com/ydtech/modules/order/service/impl/ZhongMeiOrderServiceImpl.java

@@ -91,10 +91,10 @@ public class ZhongMeiOrderServiceImpl implements ZhongMeiOrderService {
         Response<List<ZmCarModel>> model = zhongmeiRequestComponents.vinSearch(map, new ParameterizedTypeReference<Response<List<ZmCarModel>>>() {
         });
         List<ZmCarModel> data = model.getData();
-        if (data.size() > 0) {
+        if (!data.isEmpty()) {
             return ZhongmeiCarModelConvert.INSTANCE.map(data);
         }
-        return null;
+        return Collections.emptyList();
     }
 
 

+ 2 - 1
src/main/java/com/ydtech/modules/report/service/impl/ReportServiceImpl.java

@@ -52,8 +52,10 @@ public class ReportServiceImpl implements ReportService {
 
     @Autowired
     private ReportAgentStateMapper reportAgentStateMapper;
+
     @Autowired
     private ReportAgentProfitMapper reportAgentProfitMapper;
+
     @Autowired
     private ReportAgentBalanceSheetMapper reportAgentBalanceSheetMapper;
 
@@ -66,7 +68,6 @@ public class ReportServiceImpl implements ReportService {
     @Transactional
     @Override
     public HttpResult importReportAgentState(MultipartFile file) throws IOException {
-
         String msg = "导入成功";
 
         List<ReportAgentState> reportAgentStateList = ExcelUtils2.importExcel(file, 1, 1, ReportAgentState.class);

+ 55 - 3
src/main/java/com/ydtech/utils/ImageCompressionUtils.java

@@ -1,5 +1,8 @@
 package com.ydtech.utils;
 
+import cn.hutool.core.io.IoUtil;
+import com.sun.image.codec.jpeg.JPEGCodec;
+import com.sun.image.codec.jpeg.JPEGImageEncoder;
 import com.ydtech.exception.SystemException;
 import lombok.extern.slf4j.Slf4j;
 import net.coobird.thumbnailator.Thumbnails;
@@ -7,9 +10,8 @@ import net.coobird.thumbnailator.Thumbnails;
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
+import java.io.*;
+import java.nio.file.Files;
 
 /**
  * @author wenks
@@ -20,6 +22,10 @@ import java.io.IOException;
 @Slf4j
 public class ImageCompressionUtils {
 
+    private ImageCompressionUtils() {
+        throw new IllegalStateException("Utility class");
+    }
+
     private static final Integer ZERO = 0;
     private static final Integer ONE_ZERO_TWO_FOUR = 1024;
     private static final Integer NINE_ZERO_ZERO = 900;
@@ -30,6 +36,52 @@ public class ImageCompressionUtils {
     private static final Double ZERO_FOUR_FOUR = 0.44;
     private static final Double ZERO_FOUR = 0.4;
 
+    /**
+     * 压缩大小不变
+     *
+     * @param inputStream 输入流
+     * @param suffix      文件后缀名
+     * @param path        路劲
+     * @return 字节
+     */
+    public static byte[] compressPic(InputStream inputStream, String suffix, String path) throws IOException {
+        File temp = File.createTempFile("temp", suffix, new File(path));
+        try (FileOutputStream os = new FileOutputStream(temp);) {
+            BufferedImage image = ImageIO.read(inputStream);
+            int width = image.getWidth();
+            int height = image.getHeight();
+            BufferedImage bfImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+            bfImage.getGraphics().drawImage(image.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);
+            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
+            encoder.encode(bfImage);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        byte[] bytesByFile = getBytesByFile(temp);
+        Files.delete(temp.getAbsoluteFile().toPath());
+        return bytesByFile;
+    }
+
+    /**
+     * 文件转字节
+     *
+     * @param file 文件
+     * @return 字节
+     */
+    public static byte[] getBytesByFile(File file) {
+        try (FileInputStream fis = new FileInputStream(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(1000)) {
+            byte[] b = new byte[1000];
+            int n;
+            while ((n = fis.read(b)) != -1) {
+                bos.write(b, 0, n);
+            }
+            return bos.toByteArray();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return new byte[0];
+    }
+
     /**
      * 根据指定大小压缩图片
      *

+ 25 - 17
src/main/java/com/ydtech/utils/baidu/Idcard.java

@@ -1,11 +1,11 @@
 package com.ydtech.utils.baidu;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.CustomerInfoVO;
-import com.ydtech.utils.baidu.AuthService;
-import com.ydtech.utils.baidu.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
 
 import java.net.URLEncoder;
 import java.util.HashMap;
@@ -38,20 +38,20 @@ public class Idcard {
             ;
 
             String result = HttpUtil.post(url, accessToken, param);
-            JSONObject ja = JSONObject.parseObject(result);
+            JSONObject ja = JSON.parseObject(result);
             System.out.println(ja);
 
             String words_result = ja.getString("words_result");
 
 
             CustomerInfoVO customerInfo = new CustomerInfoVO();
-            JSONObject jb = JSONObject.parseObject(words_result);
-            customerInfo.setName(JSONObject.parseObject(jb.getString("姓名")).getString("words").toString());
-            customerInfo.setIdentifyNumber(JSONObject.parseObject(jb.getString("公民身份号码")).getString("words").toString());
-            customerInfo.setAddr(JSONObject.parseObject(jb.getString("住址")).getString("words").toString());
+            JSONObject jb = JSON.parseObject(words_result);
+            customerInfo.setName(JSON.parseObject(jb.getString("姓名")).getString("words").toString());
+            customerInfo.setIdentifyNumber(JSON.parseObject(jb.getString("公民身份号码")).getString("words").toString());
+            customerInfo.setAddr(JSON.parseObject(jb.getString("住址")).getString("words").toString());
             customerInfo.setIdentifyType("01");
-            customerInfo.setIdentifyValidDate(JSONObject.parseObject(jb.getString("出生")).getString("words"));
-            customerInfo.setIdentifyIssuedCom(JSONObject.parseObject(jb.getString("性别")).getString("words"));
+            customerInfo.setIdentifyValidDate(JSON.parseObject(jb.getString("出生")).getString("words"));
+            customerInfo.setIdentifyIssuedCom(JSON.parseObject(jb.getString("性别")).getString("words"));
             ma.put("customerInfo", customerInfo);
             return HttpResult.ok("200", ma);
         } catch (Exception e) {
@@ -78,7 +78,7 @@ public class Idcard {
         }catch (Exception e){
             e.printStackTrace();
         }
-        return null;
+        return new JSONObject();
     }
 
 
@@ -88,28 +88,36 @@ public class Idcard {
      * @return
      */
     public static CustomerInfoVO getIdCardFront(String images) {
+        if(StringUtils.isEmpty(images)){
+            return null;
+        }
+
         CustomerInfoVO customerInfo = new CustomerInfoVO();
         try {
             JSONObject jb = request(images, "front");
-            customerInfo.setName(JSONObject.parseObject(jb.getString("姓名")).getString("words"));
-            customerInfo.setIdentifyNumber(JSONObject.parseObject(jb.getString("公民身份号码")).getString("words"));
-            customerInfo.setAddr(JSONObject.parseObject(jb.getString("住址")).getString("words"));
+            customerInfo.setName(JSON.parseObject(jb.getString("姓名")).getString("words"));
+            customerInfo.setIdentifyNumber(JSON.parseObject(jb.getString("公民身份号码")).getString("words"));
+            customerInfo.setAddr(JSON.parseObject(jb.getString("住址")).getString("words"));
             customerInfo.setIdentifyType("01");
-            customerInfo.setIdentifyIssuedCom(JSONObject.parseObject(jb.getString("性别")).getString("words"));
+            customerInfo.setIdentifyIssuedCom(JSON.parseObject(jb.getString("性别")).getString("words"));
             return customerInfo;
         } catch (Exception e) {
             e.printStackTrace();
         }
+
         return null;
     }
 
     public static  CustomerInfoVO getIdCardBack(String images){
-        Map<String, Object> ma = new HashMap<>();
+        if(StringUtils.isEmpty(images)){
+            return null;
+        }
+
         try {
             CustomerInfoVO customerInfo = new CustomerInfoVO();
             JSONObject jb = request(images, "back");
-            customerInfo.setIdentifyValidDate(JSONObject.parseObject(jb.getString("签发日期")).getString("words"));
-            customerInfo.setIdentifyValidEndDate(JSONObject.parseObject(jb.getString("失效日期")).getString("words"));
+            customerInfo.setIdentifyValidDate(JSON.parseObject(jb.getString("签发日期")).getString("words"));
+            customerInfo.setIdentifyValidEndDate(JSON.parseObject(jb.getString("失效日期")).getString("words"));
             return customerInfo;
         } catch (Exception e) {
             e.printStackTrace();

+ 47 - 47
src/main/java/com/ydtech/utils/baidu/MultiObjectDetect.java

@@ -1,12 +1,11 @@
 package com.ydtech.utils.baidu;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.modules.ins.model.CardUserInfo;
-import com.ydtech.utils.StringUtils;
-import com.ydtech.utils.baidu.AuthService;
-
+import org.apache.commons.lang3.StringUtils;
 
 import java.net.URLEncoder;
 import java.util.HashMap;
@@ -28,27 +27,24 @@ public class MultiObjectDetect {
         String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license";
         try {
             // 本地文件路径
-            String filePath = "[本地文件路径]";
             imgData = imgData.substring(imgData.indexOf(",") + 1);
-            byte[] bytes = imgData.getBytes();
-            String imgStr = Base64Util.encode(bytes);
+
             String imgParam = URLEncoder.encode(imgData, "UTF-8");
 
             String param = "image=" + imgParam;
-
             // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
             String accessToken = AuthService.getAuth();
 
             String result = HttpUtil.post(url, accessToken, param);
-            JSONObject ja = JSONObject.parseObject(result);
-            System.out.println(ja);
-            String words_result = ja.getString("words_result");
+            JSONObject ja = JSON.parseObject(result);
+
+            String wordsResult = ja.getString("words_result");
 
             CardUserInfo cardUserInfo = new CardUserInfo();
-            JSONObject jb = JSONObject.parseObject(words_result);
-            cardUserInfo.setvIN(JSONObject.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
-            cardUserInfo.setIssueDate(JSONObject.parseObject(jb.getString("发证日期")).getString("words"));
-            String hpzl = JSONObject.parseObject(jb.getString("车辆类型")).getString("words");
+            JSONObject jb = JSON.parseObject(wordsResult);
+            cardUserInfo.setvIN(JSON.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
+            cardUserInfo.setIssueDate(JSON.parseObject(jb.getString("发证日期")).getString("words"));
+            String hpzl = JSON.parseObject(jb.getString("车辆类型")).getString("words");
             if (hpzl != null && hpzl.equals("小型轿车")) {
                 cardUserInfo.setPlateType("02");
             } else {
@@ -57,19 +53,19 @@ public class MultiObjectDetect {
             }
             cardUserInfo.setMotorUsageTypeCode("8A");
             cardUserInfo.setMotorTypeCode("A0");
-            if(!StringUtils.isNullOrEmpty(jb.getString("注册日期"))){
-                cardUserInfo.setRegisterDate(JSONObject.parseObject(jb.getString("注册日期")).getString("words"));
+            if(!StringUtils.isEmpty(jb.getString("注册日期"))){
+                cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册日期")).getString("words"));
             }
-            else if(!StringUtils.isNullOrEmpty(jb.getString("注册登记日期"))){
-                cardUserInfo.setRegisterDate(JSONObject.parseObject(jb.getString("注册登记日期")).getString("words"));
+            else if(!StringUtils.isEmpty(jb.getString("注册登记日期"))){
+                cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册登记日期")).getString("words"));
             }
 
-            cardUserInfo.setEngine(JSONObject.parseObject(jb.getString("发动机号码")).getString("words"));
-            cardUserInfo.setPlateNo(JSONObject.parseObject(jb.getString("号牌号码")).getString("words"));
-            cardUserInfo.setBackOcrID(JSONObject.parseObject(jb.getString("品牌型号")).getString("words"));
+            cardUserInfo.setEngine(JSON.parseObject(jb.getString("发动机号码")).getString("words"));
+            cardUserInfo.setPlateNo(JSON.parseObject(jb.getString("号牌号码")).getString("words"));
+            cardUserInfo.setBackOcrID(JSON.parseObject(jb.getString("品牌型号")).getString("words"));
 
             ma.put("carInfo", cardUserInfo);
-            System.out.println(result);
+
             return HttpResult.ok("200", ma);
         } catch (Exception e) {
             e.printStackTrace();
@@ -78,41 +74,40 @@ public class MultiObjectDetect {
     }
 
 
-    public static JSONObject request(String images, String vehicle_license_side){
+    public static JSONObject request(String images, String vehicleLicenseSide){
         // 请求url
         String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vehicle_license";
         try {
-            // 本地文件路径
-            String filePath = "[本地文件路径]";
+
             images = images.substring(images.indexOf(",") + 1);
-            byte[] bytes = images.getBytes();
-            String imgStr = Base64Util.encode(bytes);
             String imgParam = URLEncoder.encode(images, "UTF-8");
-            String param = "image=" + imgParam + "&vehicle_license_side=" + vehicle_license_side;
+            String param = "image=" + imgParam + "&vehicle_license_side=" + vehicleLicenseSide;
 
             // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
             String accessToken = AuthService.getAuth();
 
             String result = HttpUtil.post(url, accessToken, param);
-            JSONObject ja = JSONObject.parseObject(result);
-            System.out.println(ja);
-            String words_result = ja.getString("words_result");
+            JSONObject ja = JSON.parseObject(result);
+            String wordsResult = ja.getString("words_result");
 
-            JSONObject jb = JSONObject.parseObject(words_result);
-            return jb;
+            return JSON.parseObject(wordsResult);
         }catch (Exception e){
             e.printStackTrace();
         }
-        return null;
+        return new JSONObject();
     }
 
     public static CardUserInfo drivingPermitFront(String images) {
+        if(StringUtils.isEmpty(images)){
+            return null;
+        }
+
         CardUserInfo cardUserInfo = new CardUserInfo();
         try {
             JSONObject jb = request(images, "front");
-            cardUserInfo.setvIN(JSONObject.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
-            cardUserInfo.setIssueDate(JSONObject.parseObject(jb.getString("发证日期")).getString("words"));
-            String hpzl = JSONObject.parseObject(jb.getString("车辆类型")).getString("words");
+            cardUserInfo.setvIN(JSON.parseObject(jb.getString("车辆识别代号")).getString("words").toString());
+            cardUserInfo.setIssueDate(JSON.parseObject(jb.getString("发证日期")).getString("words"));
+            String hpzl = JSON.parseObject(jb.getString("车辆类型")).getString("words");
             if (hpzl != null && hpzl.equals("小型轿车")) {
                 cardUserInfo.setPlateType("02");
             } else {
@@ -121,16 +116,16 @@ public class MultiObjectDetect {
             }
             cardUserInfo.setMotorUsageTypeCode("8A");
             cardUserInfo.setMotorTypeCode("A0");
-            if(!StringUtils.isNullOrEmpty(jb.getString("注册日期"))){
-                cardUserInfo.setRegisterDate(JSONObject.parseObject(jb.getString("注册日期")).getString("words"));
+            if(!StringUtils.isEmpty(jb.getString("注册日期"))){
+                cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册日期")).getString("words"));
             }
-            else if(!StringUtils.isNullOrEmpty(jb.getString("注册登记日期"))){
-                cardUserInfo.setRegisterDate(JSONObject.parseObject(jb.getString("注册登记日期")).getString("words"));
+            else if(!StringUtils.isEmpty(jb.getString("注册登记日期"))){
+                cardUserInfo.setRegisterDate(JSON.parseObject(jb.getString("注册登记日期")).getString("words"));
             }
 
-            cardUserInfo.setEngine(JSONObject.parseObject(jb.getString("发动机号码")).getString("words"));
-            cardUserInfo.setPlateNo(JSONObject.parseObject(jb.getString("号牌号码")).getString("words"));
-            cardUserInfo.setBackOcrID(JSONObject.parseObject(jb.getString("品牌型号")).getString("words"));
+            cardUserInfo.setEngine(JSON.parseObject(jb.getString("发动机号码")).getString("words"));
+            cardUserInfo.setPlateNo(JSON.parseObject(jb.getString("号牌号码")).getString("words"));
+            cardUserInfo.setBackOcrID(JSON.parseObject(jb.getString("品牌型号")).getString("words"));
             return cardUserInfo;
         } catch (Exception e) {
             e.printStackTrace();
@@ -145,16 +140,21 @@ public class MultiObjectDetect {
      * @return
      */
     public static CardUserInfo drivingPermitBack(String images){
+        if(StringUtils.isEmpty(images)){
+            return null;
+        }
+
         CardUserInfo cardUserInfo = new CardUserInfo();
         try {
             JSONObject jb = request(images, "back");
-            cardUserInfo.setGrossMass(JSONObject.parseObject(jb.getString("总质量")).getString("words").replace("kg", ""));
-            cardUserInfo.setApprovedPassengersCapacity(JSONObject.parseObject(jb.getString("核定载人数")).getString("words").replace("人", ""));
-            cardUserInfo.setUnladenMass(JSONObject.parseObject(jb.getString("整备质量")).getString("words").replace("kg", ""));
+            cardUserInfo.setGrossMass(JSON.parseObject(jb.getString("总质量")).getString("words").replace("kg", ""));
+            cardUserInfo.setApprovedPassengersCapacity(JSON.parseObject(jb.getString("核定载人数")).getString("words").replace("人", ""));
+            cardUserInfo.setUnladenMass(JSON.parseObject(jb.getString("整备质量")).getString("words").replace("kg", ""));
             return cardUserInfo;
         } catch (Exception e) {
             e.printStackTrace();
         }
+
         return null;
     }
 }

+ 1 - 1
src/main/java/com/ydtech/utils/idgen/IdGenerate.java

@@ -47,7 +47,7 @@ public class IdGenerate {
      * 来自于twitter项目snowflake的id产生方案,全局唯一,时间有序。
      * 64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))
      */
-    public static String nextId() {
+        public static String nextId() {
         return String.valueOf(idWorker.nextId());
     }
 

+ 1 - 1
src/main/resources/application-prod.yml

@@ -161,7 +161,7 @@ spring:
 upload:
   basepath: ${filePath}
   file:
-    path: D:/upload/
+    path: /nasData/
     url: /upload/
   host: ''
   password: ''

+ 1 - 1
src/main/resources/application-test.yml

@@ -207,7 +207,7 @@ upload:
   # 路径带上前后斜杆
   basepath: ${filePath}
   file:
-    path: D:/upload/
+    path: /usr/local/java/upload/
     url: /upload/
   host: ''
   password: ''

+ 41 - 0
src/main/resources/mapper/modules/ins/InsTaskImagesMapper.xml

@@ -0,0 +1,41 @@
+<?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.ydtech.modules.order.dao.InsTaskImagesMapper">
+
+    <resultMap id="BaseResultMap" type="com.ydtech.modules.order.entity.po.InsTaskImages">
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="quoteNo" column="quote_no" jdbcType="VARCHAR"/>
+        <result property="imageType" column="image_type" jdbcType="VARCHAR"/>
+        <result property="imageId" column="image_id" jdbcType="VARCHAR"/>
+        <result property="creator" column="creator" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id
+        ,task_id,image_type,
+        image_id,creator,create_time
+    </sql>
+
+    <select id="getByQuoteNoInsTaskImagesDtoList"
+            resultType="com.ydtech.modules.order.entity.dto.InsTaskImagesDto">
+        select i.id, i.quote_no,i.image_id, i.image_type, f.url
+        from ins_task_images as i
+                 left join ins_upload_files as f
+                           on i.image_id = f.id
+        where i.quote_no = #{quoteNo};
+    </select>
+
+    <select id="getByOrderNoInsUploadImagesDtoList"
+            resultType="com.ydtech.modules.order.entity.dto.InsUploadImagesDto">
+        select i.quote_no, i.image_type, i.image_id, f.file_name, f.file_path
+        from ins_task_images as i
+                 left join ins_upload_files as f
+                           on i.image_id = f.id
+        where i.quote_no =
+              (select quoteno from ins_orders where orderno = #{orderNo})
+    </select>
+
+</mapper>