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.model.outdto.DistinctionDTO; import com.poteviohealth.cgp.statistics.service.IDistinctionService; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.util.Date; import java.util.List; /** * 图片处理 * @author Qin */ @Service @Log4j2 public class DistinctionServiceImpl extends BaseServiceImpl implements IDistinctionService { @Resource private PartnerFeignClient partnerFeignClient; @Resource private CacheService cacheService; @Value("${sync.dbName}") private String dbName; @Override public DistinctionDTO checkImg(File file, Long orderId, List uidList) throws IOException { DistinctionDTO dto = new DistinctionDTO(); String uid = ImageUtils.readImagePix(file); dto.setUid(uid); if("0".equals(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_CHECK))){ return dto; } Integer day = Integer.parseInt(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_DAY)); Double threshold = Double.parseDouble(orderCacheVal(CgpTool.CACHE_ORDER_PHOTO_THRESHOLD)); int count = ImageUtils.different(threshold); boolean isCheck = false; for (String s : uidList) { if(ImageUtils.similarity(s,uid)<=count){ isCheck = true; break; } } if(isCheck){ dto.setOrderId(orderId); }else{ DistinctionDTO dis = baseMapper.checkDis(TokenContext.cureOperatorId(),dbName,uid,count, DateFormatUtils.format(DateUtils.caculDays(new Date(), -day),"yyyy-MM-dd HH:mm:ss")); if(dis != null){ dto.setOrderId(dis.getOrderId()); dto.setRurl(dis.getRurl()); } } return dto; } 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 vaultsResponse = partnerFeignClient.getOperatorParamByCode(params); return vaultsResponse.getData().getParamValue(); } }