优化是否能生成判断逻辑

This commit is contained in:
Jerry Yan 2025-01-11 16:13:19 +08:00
parent ad9e91cd7a
commit 0d2c92e8e1
18 changed files with 150 additions and 77 deletions

View File

@ -0,0 +1,42 @@
package com.ycwl.basic.biz;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity;
import com.ycwl.basic.repository.FaceRepository;
import com.ycwl.basic.repository.TemplateRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
@Component
public class TemplateBiz {
@Autowired
private TemplateRepository templateRepository;
@Autowired
private FaceRepository faceRepository;
public boolean determineTemplateCanGenerate(Long templateId, Long faceId) {
List<String> placeholderList = templateRepository.getTemplatePlaceholder(templateId);
TemplateConfigEntity templateConfig = templateRepository.getTemplateConfig(templateId);
int minimalPlaceholderFill = 1;
if (null != templateConfig) {
if (null != templateConfig.getMinimalPlaceholderFill()) {
minimalPlaceholderFill = templateConfig.getMinimalPlaceholderFill();
}
}
if (minimalPlaceholderFill <= 0) {
return true;
}
List<FaceSampleEntity> faceSampleList = faceRepository.getFaceSampleList(faceId);
long count = faceSampleList.stream().map(FaceSampleEntity::getDeviceId).filter(deviceId -> placeholderList.contains(deviceId.toString())).count();
return count >= minimalPlaceholderFill;
}
}

View File

@ -0,0 +1,21 @@
package com.ycwl.basic.controller.wvp;
import com.ycwl.basic.annotation.IgnoreLogReq;
import com.ycwl.basic.annotation.IgnoreToken;
import com.ycwl.basic.utils.ApiResponse;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@IgnoreToken
@RestController
@Api(tags = "WVP对接接口")
@RequestMapping("/wvp/v1/")
public class WvpController {
@IgnoreLogReq
@PostMapping("/sync")
public ApiResponse sync() {
return ApiResponse.success("success");
}
}

View File

@ -74,8 +74,7 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
// 解析 token & 验证 token 有效期 // 解析 token & 验证 token 有效期
JwtInfo jwtInfo; JwtInfo jwtInfo;
try { try {
jwtInfo = jwtTokenUtil.parsingToken(token); jwtInfo = JwtTokenUtil.parsingToken(token);
log.info("用户信息:" + jwtInfo.toString());
LocalDateTime expireTime = jwtInfo.getExpireTime(); LocalDateTime expireTime = jwtInfo.getExpireTime();
if (LocalDateTime.now(ZoneId.systemDefault()).isAfter(expireTime)) { if (LocalDateTime.now(ZoneId.systemDefault()).isAfter(expireTime)) {
throw new TokenExpireException("token过期"); throw new TokenExpireException("token过期");

View File

@ -18,6 +18,7 @@ public interface FaceMapper {
List<FaceRespVO> list(FaceReqQuery faceReqQuery); List<FaceRespVO> list(FaceReqQuery faceReqQuery);
List<FaceRespVO> listByScenicIdAndNotFinished(Long scenicId); List<FaceRespVO> listByScenicIdAndNotFinished(Long scenicId);
FaceRespVO getById(Long id); FaceRespVO getById(Long id);
FaceEntity get(Long id);
int add(FaceEntity face); int add(FaceEntity face);
int deleteById(Long id); int deleteById(Long id);
int deleteByIds(@Param("list") List<Long> ids); int deleteByIds(@Param("list") List<Long> ids);

View File

@ -22,5 +22,5 @@ public interface FaceSampleMapper {
int deleteByIds(@Param("list") List<Long> ids); int deleteByIds(@Param("list") List<Long> ids);
int update(FaceSampleEntity faceSample); int update(FaceSampleEntity faceSample);
List<FaceSampleRespVO> listByIds(List<Long> list); List<FaceSampleEntity> listByIds(List<Long> list);
} }

View File

@ -2,10 +2,19 @@ package com.ycwl.basic.repository;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.model.pc.face.entity.FaceEntity;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Component @Component
public class FaceRepository { public class FaceRepository {
@Autowired @Autowired
@ -14,4 +23,15 @@ public class FaceRepository {
private FaceMapper faceMapper; private FaceMapper faceMapper;
@Autowired @Autowired
private FaceSampleMapper faceSampleMapper; private FaceSampleMapper faceSampleMapper;
public List<FaceSampleEntity> getFaceSampleList(Long faceId) {
FaceEntity face = faceMapper.get(faceId);
if (face == null) {
return Collections.emptyList();
}
if (StringUtils.isBlank(face.getMatchSampleIds())) {
return Collections.emptyList();
}
return faceSampleMapper.listByIds(Arrays.stream(face.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
}
} }

View File

@ -4,8 +4,6 @@ import com.alibaba.fastjson.JSONObject;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.TemplateMapper; import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity; import com.ycwl.basic.model.pc.template.entity.TemplateConfigEntity;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO; import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.utils.SnowFlakeUtil; import com.ycwl.basic.utils.SnowFlakeUtil;
@ -13,11 +11,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service // 临时这么用 @Service // 临时这么用
@ -35,29 +30,13 @@ public class TemplateRepository {
public static final String TEMPLATE_CONFIG_CACHE_KEY = "template:%s:config"; public static final String TEMPLATE_CONFIG_CACHE_KEY = "template:%s:config";
public boolean determineTemplateCanGenerate(Long templateId, Long faceId) { public List<String> getTemplatePlaceholder(Long templateId) {
TemplateRespVO template = getTemplate(templateId); TemplateRespVO template = getTemplate(templateId);
Map<String, Boolean> map = new HashMap<>(); return template.getChildren().stream()
for (TemplateRespVO child : template.getChildren()) { .filter(item -> item.getIsPlaceholder() == 1)
if (child.getIsPlaceholder() == 1) { .map(TemplateRespVO::getSourceUrl)
map.put(child.getSourceUrl(), false); .distinct()
} .collect(Collectors.toList());
}
TemplateConfigEntity templateConfig = templateMapper.getConfig(templateId);
if (0 == templateConfig.getMinimalPlaceholderFill()) {
return true;
}
FaceRespVO face = faceMapper.getById(faceId);
if (face.getMatchSampleIds() == null) {
return false;
}
List<FaceSampleRespVO> faceSample = faceSampleMapper.listByIds(Arrays.stream(face.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
faceSample.stream().collect(Collectors.groupingBy(FaceSampleRespVO::getDeviceId)).forEach((deviceId, value) -> {
if (map.containsKey(deviceId.toString())) {
map.put(deviceId.toString(), true);
}
});
return map.values().stream().filter(item -> item).count() >= templateConfig.getMinimalPlaceholderFill();
} }
public List<TemplateRespVO> getTemplateListByScenicId(Long scenicId) { public List<TemplateRespVO> getTemplateListByScenicId(Long scenicId) {

View File

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.biz.TemplateBiz;
import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.mapper.*; import com.ycwl.basic.mapper.*;
import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.jwt.JwtInfo;
@ -75,6 +76,8 @@ public class AppScenicServiceImpl implements AppScenicService {
private OrderBiz orderBiz; private OrderBiz orderBiz;
@Autowired @Autowired
private ScenicRepository scenicRepository; private ScenicRepository scenicRepository;
@Autowired
private TemplateBiz templateBiz;
@Override @Override
public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(ScenicReqQuery scenicReqQuery) { public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(ScenicReqQuery scenicReqQuery) {
@ -126,7 +129,7 @@ public class AppScenicServiceImpl implements AppScenicService {
contentPageVO.setLockType(-1); contentPageVO.setLockType(-1);
} else { } else {
contentPageVO.setContentType(0); contentPageVO.setContentType(0);
boolean canGenerate = templateRepository.determineTemplateCanGenerate(contentPageVO.getTemplateId(), faceId); boolean canGenerate = templateBiz.determineTemplateCanGenerate(contentPageVO.getTemplateId(), faceId);
if (canGenerate) { if (canGenerate) {
contentPageVO.setLockType(0); contentPageVO.setLockType(0);
} else { } else {

View File

@ -232,7 +232,11 @@ public class GoodsServiceImpl implements GoodsService {
if (paramJson == null) { if (paramJson == null) {
deviceCount = 1; deviceCount = 1;
} else { } else {
deviceCount = paramJson.keySet().stream().filter(StringUtils::isNumeric).count(); List<String> templatePlaceholder = templateRepository.getTemplatePlaceholder(task.getTemplateId());
deviceCount = paramJson.keySet().stream()
.filter(StringUtils::isNumeric)
.filter(templatePlaceholder::contains)
.count();
} }
goodsDetailVO.setLensNum((int) deviceCount); goodsDetailVO.setLensNum((int) deviceCount);
return ApiResponse.success(goodsDetailVO); return ApiResponse.success(goodsDetailVO);

View File

@ -1,4 +1,4 @@
package com.ycwl.basic.service.impl.task; package com.ycwl.basic.service.task.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;

View File

@ -1,10 +1,11 @@
package com.ycwl.basic.service.impl.task; package com.ycwl.basic.service.task.impl;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.ycwl.basic.biz.OrderBiz; import com.ycwl.basic.biz.OrderBiz;
import com.ycwl.basic.biz.TemplateBiz;
import com.ycwl.basic.constant.TaskConstant; import com.ycwl.basic.constant.TaskConstant;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
@ -16,6 +17,7 @@ import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.mapper.VideoMapper; import com.ycwl.basic.mapper.VideoMapper;
import com.ycwl.basic.model.mobile.order.PriceObj; import com.ycwl.basic.model.mobile.order.PriceObj;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
import com.ycwl.basic.model.pc.mp.MpConfigEntity; import com.ycwl.basic.model.pc.mp.MpConfigEntity;
@ -96,6 +98,8 @@ public class TaskTaskServiceImpl implements TaskService {
private MemberMapper memberMapper; private MemberMapper memberMapper;
@Autowired @Autowired
private ScenicRepository scenicRepository; private ScenicRepository scenicRepository;
@Autowired
private TemplateBiz templateBiz;
private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) {
String accessKey = req.getAccessKey(); String accessKey = req.getAccessKey();
@ -152,7 +156,7 @@ public class TaskTaskServiceImpl implements TaskService {
if (faceId == null) { if (faceId == null) {
return; return;
} }
boolean canGenerate = templateRepository.determineTemplateCanGenerate(templateId, faceId); boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId);
if (!canGenerate) { if (!canGenerate) {
return; return;
} }
@ -221,7 +225,7 @@ public class TaskTaskServiceImpl implements TaskService {
if (!StringUtils.isNotBlank(faceRespVO.getMatchSampleIds())) { if (!StringUtils.isNotBlank(faceRespVO.getMatchSampleIds())) {
return; return;
} }
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList())); List<FaceSampleEntity> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
if (faceSampleList.isEmpty()) { if (faceSampleList.isEmpty()) {
return; return;
} }
@ -247,11 +251,11 @@ public class TaskTaskServiceImpl implements TaskService {
public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) { public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
FaceRespVO faceRespVO = faceMapper.getById(faceId); FaceRespVO faceRespVO = faceMapper.getById(faceId);
ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(faceRespVO.getScenicId()); ScenicConfigEntity scenicConfig = scenicRepository.getScenicConfig(faceRespVO.getScenicId());
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList())); List<FaceSampleEntity> faceSampleList = faceSampleMapper.listByIds(Arrays.stream(faceRespVO.getMatchSampleIds().split(",")).map(Long::valueOf).collect(Collectors.toList()));
if (faceSampleList.isEmpty()) { if (faceSampleList.isEmpty()) {
return; return;
} }
List<Long> faceSampleIds = faceSampleList.stream().map(FaceSampleRespVO::getId).collect(Collectors.toList()); List<Long> faceSampleIds = faceSampleList.stream().map(FaceSampleEntity::getId).collect(Collectors.toList());
List<SourceEntity> sourceList = sourceMapper.listBySampleIds(faceSampleIds); List<SourceEntity> sourceList = sourceMapper.listBySampleIds(faceSampleIds);
if (sourceList.isEmpty()) { if (sourceList.isEmpty()) {
return; return;
@ -294,7 +298,7 @@ public class TaskTaskServiceImpl implements TaskService {
task.faceSampleIds = faceSampleIds; task.faceSampleIds = faceSampleIds;
task.memberId = faceRespVO.getMemberId(); task.memberId = faceRespVO.getMemberId();
task.callback = () -> { task.callback = () -> {
boolean canGenerate = templateRepository.determineTemplateCanGenerate(templateId, faceId); boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId);
if (!canGenerate) { if (!canGenerate) {
return; return;
} }

View File

@ -1,4 +1,4 @@
package com.ycwl.basic.service.impl.task; package com.ycwl.basic.service.task.impl;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.ycwl.basic.mapper.TemplateMapper; import com.ycwl.basic.mapper.TemplateMapper;

View File

@ -0,0 +1,4 @@
package com.ycwl.basic.service.wvp;
public interface WvpService {
}

View File

@ -0,0 +1,18 @@
package com.ycwl.basic.service.wvp.impl;
import com.ycwl.basic.device.repository.DeviceRepository;
import com.ycwl.basic.repository.ScenicRepository;
import com.ycwl.basic.service.wvp.WvpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
@Service
public class WvpServiceImpl implements WvpService {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Autowired
private DeviceRepository deviceRepository;
@Autowired
private ScenicRepository scenicRepository;
}

View File

@ -1,11 +1,13 @@
package com.ycwl.basic.task; package com.ycwl.basic.task;
import com.ycwl.basic.biz.TemplateBiz;
import com.ycwl.basic.mapper.DeviceMapper; import com.ycwl.basic.mapper.DeviceMapper;
import com.ycwl.basic.mapper.FaceMapper; import com.ycwl.basic.mapper.FaceMapper;
import com.ycwl.basic.mapper.FaceSampleMapper; import com.ycwl.basic.mapper.FaceSampleMapper;
import com.ycwl.basic.mapper.ScenicMapper; import com.ycwl.basic.mapper.ScenicMapper;
import com.ycwl.basic.mapper.TemplateMapper; import com.ycwl.basic.mapper.TemplateMapper;
import com.ycwl.basic.model.pc.face.resp.FaceRespVO; import com.ycwl.basic.model.pc.face.resp.FaceRespVO;
import com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity;
import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO;
import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity;
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
@ -45,6 +47,8 @@ public class DynamicTaskGenerator {
private TaskService taskService; private TaskService taskService;
@Autowired @Autowired
private DeviceMapper deviceMapper; private DeviceMapper deviceMapper;
@Autowired
private TemplateBiz templateBiz;
@Scheduled(cron = "0 0 * * * ?") @Scheduled(cron = "0 0 * * * ?")
public void dynamicTask() { public void dynamicTask() {
@ -77,27 +81,6 @@ public class DynamicTaskGenerator {
continue; continue;
} }
} }
Integer minimalPlaceholderFill = templateConfig.getMinimalPlaceholderFill();
int maxPlaceholder = 0;
List<String> placeholderList = new ArrayList<>();
if (minimalPlaceholderFill == null) {
minimalPlaceholderFill = 0;
}
List<TemplateRespVO> subTemplateList = templateMapper.getByPid(template.getId());
for (TemplateRespVO subTemplate : subTemplateList) {
if (subTemplate.getIsPlaceholder() == 1) {
placeholderList.add(subTemplate.getSourceUrl());
}
}
if (minimalPlaceholderFill == 0) {
for (TemplateRespVO subTemplate : subTemplateList) {
maxPlaceholder += 1;
if (subTemplate.getIsPlaceholder() == 1) {
minimalPlaceholderFill += 1;
}
}
}
log.info("当前模板{}启用默认,最小占位素材:{}", template.getName(), minimalPlaceholderFill);
// 查找人脸样本 // 查找人脸样本
List<FaceRespVO> list = faceMapper.listByScenicIdAndNotFinished(scenic.getId()); List<FaceRespVO> list = faceMapper.listByScenicIdAndNotFinished(scenic.getId());
for (FaceRespVO face : list) { for (FaceRespVO face : list) {
@ -122,23 +105,12 @@ public class DynamicTaskGenerator {
continue; continue;
} }
} }
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(searchFace.getSampleListIds()); if (templateBiz.determineTemplateCanGenerate(template.getId(), face.getId())) {
int matchedPlaceholder = 0; log.info("当前人脸样本{}已超过最小占位素材,自动创建任务", face.getFaceUrl());
for (FaceSampleRespVO faceSample : faceSampleList) {
if (placeholderList.contains(faceSample.getDeviceId().toString())) {
matchedPlaceholder += 1;
}
}
if (matchedPlaceholder >= maxPlaceholder) {
log.info("当前人脸样本{}已超过最大占位素材{},自动创建任务", face.getFaceUrl(), maxPlaceholder);
taskService.createRenderTask(scenic.getId(), template.getId(), face.getId());
faceMapper.finishedJourney(face.getId());
} else if (matchedPlaceholder >= minimalPlaceholderFill) {
log.info("当前人脸样本{}已超过最小占位素材{},自动创建任务", face.getFaceUrl(), minimalPlaceholderFill);
taskService.createRenderTask(scenic.getId(), template.getId(), face.getId()); taskService.createRenderTask(scenic.getId(), template.getId(), face.getId());
faceMapper.finishedJourney(face.getId()); faceMapper.finishedJourney(face.getId());
} else { } else {
log.info("当前人脸样本{}未超过最小占位素材{},未达到自动生成条件", face.getFaceUrl(), minimalPlaceholderFill); log.info("当前人脸样本{}未超过最小占位素材,未达到自动生成条件", face.getFaceUrl());
} }
} }
} }

View File

@ -89,4 +89,9 @@
order by update_at desc order by update_at desc
limit 1 limit 1
</select> </select>
<select id="get" resultType="com.ycwl.basic.model.pc.face.entity.FaceEntity">
select *
from face
where id = #{id}
</select>
</mapper> </mapper>

View File

@ -86,8 +86,8 @@
from face_sample from face_sample
where id = #{id} where id = #{id}
</select> </select>
<select id="listByIds" resultType="com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO"> <select id="listByIds" resultType="com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity">
select id, scenic_id, device_id, face_url, match_sample_ids, first_match_rate, source_id, match_result,`status`, create_at select *
from face_sample from face_sample
where id in ( where id in (
<foreach collection="list" item="id" separator=","> <foreach collection="list" item="id" separator=",">

View File

@ -93,6 +93,7 @@
<foreach collection="list" item="item" open="(" separator="," close=")"> <foreach collection="list" item="item" open="(" separator="," close=")">
#{item} #{item}
</foreach> </foreach>
order by create_time desc
</select> </select>
<select id="listVideoBySampleIds" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity"> <select id="listVideoBySampleIds" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity">
select * select *