qin 1 سال پیش
والد
کامیت
27129fd104

+ 11 - 0
src/main/java/com/poteviohealth/cgp/statistics/controller/OrderController.java

@@ -20,6 +20,7 @@ import com.poteviohealth.cgp.statistics.model.indto.*;
 import com.poteviohealth.cgp.statistics.model.outdto.DishesOrderWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderCostWebOutDTO;
 import com.poteviohealth.cgp.statistics.model.outdto.OrderExcelDTO;
+import com.poteviohealth.cgp.statistics.service.IDistinctionService;
 import com.poteviohealth.cgp.statistics.service.IOrderService;
 import com.poteviohealth.cgp.statistics.service.IWatermarkImgService;
 import com.poteviohealth.cgp.statistics.utils.ExcelUtils2;
@@ -34,6 +35,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
@@ -57,6 +59,8 @@ public class OrderController extends BaseWebController {
     private OssUtils ossUtils;
     @Resource
     private IWatermarkImgService watermarkImgService;
+    @Resource
+    private IDistinctionService distinctionService;
 
     @PostMapping(value = "/orderServiceExport")
     @ApiOperation(httpMethod = "POST", value = "工单Excel导出")
@@ -202,6 +206,13 @@ public class OrderController extends BaseWebController {
     @ResponseBody
     public VaultsResponse<String> uploadArrayFile(@RequestParam("file") MultipartFile file,@RequestParam("orderId") Long orderId){
         log.info(orderId);
+        //图片检查
+
+        try {
+           Long repeatId = distinctionService.checkImg(file.getInputStream());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         VaultsResponse<String> vaultsResponse = ossUtils.uploadOneFile(file,orderId);
         log.info(vaultsResponse.getData());
        /* if(vaultsResponse.validate()){

+ 20 - 0
src/main/java/com/poteviohealth/cgp/statistics/mapper/DistinctionMapper.java

@@ -0,0 +1,20 @@
+package com.poteviohealth.cgp.statistics.mapper;
+
+import com.baomidou.mybatisplus.annotation.SqlParser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.poteviohealth.cgp.statistics.model.Distinction;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+
+/**
+ * 图片处理
+ * @author Qin
+ */
+@Mapper
+public interface DistinctionMapper extends BaseMapper<Distinction>{
+
+    @SqlParser(filter = true)
+    Long checkDis(@Param("operatorId")Integer operatorId, @Param("dbName") String dbName, @Param("uid") String uid, @Param("dCount") Integer dCount, @Param("date") Date date);
+}

+ 33 - 0
src/main/java/com/poteviohealth/cgp/statistics/model/Distinction.java

@@ -0,0 +1,33 @@
+package com.poteviohealth.cgp.statistics.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.poteviohealth.cgp.common.model.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * 照片比对
+ * @author Qin
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("f_distinction_img")
+public class Distinction extends BaseEntity {
+    @ApiModelProperty(value = "平台Id")
+    private Integer operatorId;
+    @ApiModelProperty(value = "区域Id")
+    private Integer supplierId;
+    @ApiModelProperty(value = "服务站Id")
+    private Integer stationId;
+    @ApiModelProperty(value = "工单Id")
+    private Long orderId;
+    @ApiModelProperty(value = "上传时间")
+    private Date uploadDate;
+    @ApiModelProperty(value = "图片标识")
+    private Long uid;
+}

+ 15 - 0
src/main/java/com/poteviohealth/cgp/statistics/service/IDistinctionService.java

@@ -0,0 +1,15 @@
+package com.poteviohealth.cgp.statistics.service;
+
+import com.poteviohealth.cgp.common.service.IBaseService;
+import com.poteviohealth.cgp.statistics.model.Distinction;
+
+import java.io.InputStream;
+
+/**
+ * 图片处理
+ * @author Qin
+ */
+public interface IDistinctionService extends IBaseService<Distinction> {
+
+    Long checkImg(InputStream inputStream);
+}

+ 76 - 0
src/main/java/com/poteviohealth/cgp/statistics/service/impl/DistinctionServiceImpl.java

@@ -0,0 +1,76 @@
+package com.poteviohealth.cgp.statistics.service.impl;
+
+import com.poteviohealth.cgp.common.facade.cache.CacheService;
+import com.poteviohealth.cgp.common.filter.TokenContext;
+import com.poteviohealth.cgp.common.integrated.OperatorIdParams;
+import com.poteviohealth.cgp.common.integrated.partner.PartnerFeignClient;
+import com.poteviohealth.cgp.common.integrated.partner.model.OperatorParamDTO;
+import com.poteviohealth.cgp.common.model.VaultsResponse;
+import com.poteviohealth.cgp.common.service.impl.BaseServiceImpl;
+import com.poteviohealth.cgp.common.utils.CgpTool;
+import com.poteviohealth.cgp.common.utils.DateUtils;
+import com.poteviohealth.cgp.common.utils.ImageUtils;
+import com.poteviohealth.cgp.statistics.mapper.DistinctionMapper;
+import com.poteviohealth.cgp.statistics.model.Distinction;
+import com.poteviohealth.cgp.statistics.service.IDistinctionService;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.util.Date;
+
+/**
+ * 图片处理
+ * @author Qin
+ */
+@Service
+@Log4j2
+public class DistinctionServiceImpl extends BaseServiceImpl<DistinctionMapper, Distinction> implements IDistinctionService {
+
+    @Resource
+    private PartnerFeignClient partnerFeignClient;
+    @Resource
+    private CacheService cacheService;
+    @Value("${sync.dbName}")
+    private String dbName;
+
+    @Override
+    public Long checkImg(InputStream inputStream) {
+
+        if("0".equals(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_CHECK))){
+            return 0L;
+        }
+
+        Integer day = Integer.parseInt(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_DAY));
+        Double threshold = Double.parseDouble(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_THRESHOLD));
+
+        String uid = ImageUtils.readImagePix(inputStream);
+       Long orderId = baseMapper.checkDis(TokenContext.cureOperatorId(),dbName,uid,ImageUtils.different(threshold),DateUtils.caculDays(new Date(), -day));
+       log.info("orderId==="+orderId);
+       return orderId;
+    }
+
+
+    private String orderCacheVal(String key){
+        Integer operatorId = TokenContext.cureOperatorId();
+        String val = cacheService.hget(key+":"+operatorId,operatorId.toString());
+        if(StringUtils.isEmpty(val)){
+            val = this.getParamValue(key);
+            cacheService.hset(key+":"+operatorId,operatorId.toString(),val);
+        }
+        return val;
+    }
+
+    private String getParamValue(String key){
+        OperatorIdParams params = new OperatorIdParams();
+        params.setOperatorId(TokenContext.cureOperatorId());
+        params.setCode(key);
+        VaultsResponse<OperatorParamDTO> vaultsResponse = partnerFeignClient.getOperatorParamByCode(params);
+        return vaultsResponse.getData().getParamValue();
+    }
+
+
+}

+ 26 - 0
src/main/java/com/poteviohealth/cgp/statistics/utils/OssUtils.java

@@ -39,6 +39,7 @@ public class OssUtils {
     @Value("${aliyun.oss.dir}")
     private String dir;
 
+
     public VaultsResponse<String> uploadOneFile(MultipartFile dto,Long orderId) {
         // 创建OSSClient实例。
 
@@ -135,4 +136,29 @@ public class OssUtils {
         return null;
     }
 
+    /**
+     * 获取指定的视频文件后进行封面截图为jpg
+     */
+    public File generateCover(File inputFile) {
+        try {
+            // 截图保存位置
+            String outName = "out"+CgpTool.generateUUID()+".jpg";
+            String command = "ffmpeg -i " + inputFile.getAbsolutePath() + "  -ss  00:00:02  -vframes  1"+ outName;
+            log.info("封面截图方式==="+command);
+            ProcessBuilder  pb = new ProcessBuilder("ffmpeg","-i",inputFile.getAbsolutePath(),"-ss","00:00:02","-vframes","1",outName);
+            pb.redirectErrorStream(true);
+            pb.redirectOutput(ProcessBuilder.Redirect.INHERIT);
+            Process process = pb.start();
+            process.waitFor();
+            log.info("封面截图完成===");
+            return new File(outName);
+        } catch (IOException e) {
+            e.printStackTrace();
+        } catch (InterruptedException e){
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
 }

+ 11 - 0
src/main/resources/mapper/statistics/DistinctionMapper.xml

@@ -0,0 +1,11 @@
+<?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.poteviohealth.cgp.statistics.mapper.DistinctionMapper">
+    <select id="checkDis" resultType="java.lang.Long">
+        select order_id from ${dbName}_face.f_distinction_img
+        where
+        operator_id = ${operatorId}
+        and upload_date >= ${date}
+        and BIT_COUNT(uid ^ 0b${uid} )&gt;=${dCount} LIMIT 1
+    </select>
+</mapper>