优化是否能生成判断逻辑
This commit is contained in:
parent
ad9e91cd7a
commit
0d2c92e8e1
42
src/main/java/com/ycwl/basic/biz/TemplateBiz.java
Normal file
42
src/main/java/com/ycwl/basic/biz/TemplateBiz.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
@ -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");
|
||||
}
|
||||
}
|
@ -74,8 +74,7 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
|
||||
// 解析 token & 验证 token 有效期
|
||||
JwtInfo jwtInfo;
|
||||
try {
|
||||
jwtInfo = jwtTokenUtil.parsingToken(token);
|
||||
log.info("用户信息:" + jwtInfo.toString());
|
||||
jwtInfo = JwtTokenUtil.parsingToken(token);
|
||||
LocalDateTime expireTime = jwtInfo.getExpireTime();
|
||||
if (LocalDateTime.now(ZoneId.systemDefault()).isAfter(expireTime)) {
|
||||
throw new TokenExpireException("token过期");
|
||||
|
@ -18,6 +18,7 @@ public interface FaceMapper {
|
||||
List<FaceRespVO> list(FaceReqQuery faceReqQuery);
|
||||
List<FaceRespVO> listByScenicIdAndNotFinished(Long scenicId);
|
||||
FaceRespVO getById(Long id);
|
||||
FaceEntity get(Long id);
|
||||
int add(FaceEntity face);
|
||||
int deleteById(Long id);
|
||||
int deleteByIds(@Param("list") List<Long> ids);
|
||||
|
@ -22,5 +22,5 @@ public interface FaceSampleMapper {
|
||||
int deleteByIds(@Param("list") List<Long> ids);
|
||||
int update(FaceSampleEntity faceSample);
|
||||
|
||||
List<FaceSampleRespVO> listByIds(List<Long> list);
|
||||
List<FaceSampleEntity> listByIds(List<Long> list);
|
||||
}
|
||||
|
@ -2,10 +2,19 @@ package com.ycwl.basic.repository;
|
||||
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
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.data.redis.core.RedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Component
|
||||
public class FaceRepository {
|
||||
@Autowired
|
||||
@ -14,4 +23,15 @@ public class FaceRepository {
|
||||
private FaceMapper faceMapper;
|
||||
@Autowired
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
@ -4,8 +4,6 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
import com.ycwl.basic.mapper.FaceSampleMapper;
|
||||
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.resp.TemplateRespVO;
|
||||
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.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service // 临时这么用
|
||||
@ -35,29 +30,13 @@ public class TemplateRepository {
|
||||
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);
|
||||
Map<String, Boolean> map = new HashMap<>();
|
||||
for (TemplateRespVO child : template.getChildren()) {
|
||||
if (child.getIsPlaceholder() == 1) {
|
||||
map.put(child.getSourceUrl(), false);
|
||||
}
|
||||
}
|
||||
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();
|
||||
return template.getChildren().stream()
|
||||
.filter(item -> item.getIsPlaceholder() == 1)
|
||||
.map(TemplateRespVO::getSourceUrl)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<TemplateRespVO> getTemplateListByScenicId(Long scenicId) {
|
||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.ycwl.basic.biz.OrderBiz;
|
||||
import com.ycwl.basic.biz.TemplateBiz;
|
||||
import com.ycwl.basic.constant.BaseContextHandler;
|
||||
import com.ycwl.basic.mapper.*;
|
||||
import com.ycwl.basic.model.jwt.JwtInfo;
|
||||
@ -75,6 +76,8 @@ public class AppScenicServiceImpl implements AppScenicService {
|
||||
private OrderBiz orderBiz;
|
||||
@Autowired
|
||||
private ScenicRepository scenicRepository;
|
||||
@Autowired
|
||||
private TemplateBiz templateBiz;
|
||||
|
||||
@Override
|
||||
public ApiResponse<PageInfo<ScenicAppVO>> pageQuery(ScenicReqQuery scenicReqQuery) {
|
||||
@ -126,7 +129,7 @@ public class AppScenicServiceImpl implements AppScenicService {
|
||||
contentPageVO.setLockType(-1);
|
||||
} else {
|
||||
contentPageVO.setContentType(0);
|
||||
boolean canGenerate = templateRepository.determineTemplateCanGenerate(contentPageVO.getTemplateId(), faceId);
|
||||
boolean canGenerate = templateBiz.determineTemplateCanGenerate(contentPageVO.getTemplateId(), faceId);
|
||||
if (canGenerate) {
|
||||
contentPageVO.setLockType(0);
|
||||
} else {
|
||||
|
@ -232,7 +232,11 @@ public class GoodsServiceImpl implements GoodsService {
|
||||
if (paramJson == null) {
|
||||
deviceCount = 1;
|
||||
} 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);
|
||||
return ApiResponse.success(goodsDetailVO);
|
||||
|
@ -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 com.alibaba.fastjson.JSON;
|
@ -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 com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ycwl.basic.biz.OrderBiz;
|
||||
import com.ycwl.basic.biz.TemplateBiz;
|
||||
import com.ycwl.basic.constant.TaskConstant;
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
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.model.mobile.order.PriceObj;
|
||||
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.member.resp.MemberRespVO;
|
||||
import com.ycwl.basic.model.pc.mp.MpConfigEntity;
|
||||
@ -96,6 +98,8 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
private MemberMapper memberMapper;
|
||||
@Autowired
|
||||
private ScenicRepository scenicRepository;
|
||||
@Autowired
|
||||
private TemplateBiz templateBiz;
|
||||
|
||||
private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) {
|
||||
String accessKey = req.getAccessKey();
|
||||
@ -152,7 +156,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
if (faceId == null) {
|
||||
return;
|
||||
}
|
||||
boolean canGenerate = templateRepository.determineTemplateCanGenerate(templateId, faceId);
|
||||
boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId);
|
||||
if (!canGenerate) {
|
||||
return;
|
||||
}
|
||||
@ -221,7 +225,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
if (!StringUtils.isNotBlank(faceRespVO.getMatchSampleIds())) {
|
||||
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()) {
|
||||
return;
|
||||
}
|
||||
@ -247,11 +251,11 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
public void createTaskByFaceIdAndTempalteId(Long faceId, Long templateId, int automatic) {
|
||||
FaceRespVO faceRespVO = faceMapper.getById(faceId);
|
||||
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()) {
|
||||
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);
|
||||
if (sourceList.isEmpty()) {
|
||||
return;
|
||||
@ -294,7 +298,7 @@ public class TaskTaskServiceImpl implements TaskService {
|
||||
task.faceSampleIds = faceSampleIds;
|
||||
task.memberId = faceRespVO.getMemberId();
|
||||
task.callback = () -> {
|
||||
boolean canGenerate = templateRepository.determineTemplateCanGenerate(templateId, faceId);
|
||||
boolean canGenerate = templateBiz.determineTemplateCanGenerate(templateId, faceId);
|
||||
if (!canGenerate) {
|
||||
return;
|
||||
}
|
@ -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.ycwl.basic.mapper.TemplateMapper;
|
4
src/main/java/com/ycwl/basic/service/wvp/WvpService.java
Normal file
4
src/main/java/com/ycwl/basic/service/wvp/WvpService.java
Normal file
@ -0,0 +1,4 @@
|
||||
package com.ycwl.basic.service.wvp;
|
||||
|
||||
public interface WvpService {
|
||||
}
|
@ -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;
|
||||
}
|
@ -1,11 +1,13 @@
|
||||
package com.ycwl.basic.task;
|
||||
|
||||
import com.ycwl.basic.biz.TemplateBiz;
|
||||
import com.ycwl.basic.mapper.DeviceMapper;
|
||||
import com.ycwl.basic.mapper.FaceMapper;
|
||||
import com.ycwl.basic.mapper.FaceSampleMapper;
|
||||
import com.ycwl.basic.mapper.ScenicMapper;
|
||||
import com.ycwl.basic.mapper.TemplateMapper;
|
||||
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.scenic.entity.ScenicConfigEntity;
|
||||
import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery;
|
||||
@ -45,6 +47,8 @@ public class DynamicTaskGenerator {
|
||||
private TaskService taskService;
|
||||
@Autowired
|
||||
private DeviceMapper deviceMapper;
|
||||
@Autowired
|
||||
private TemplateBiz templateBiz;
|
||||
|
||||
@Scheduled(cron = "0 0 * * * ?")
|
||||
public void dynamicTask() {
|
||||
@ -77,27 +81,6 @@ public class DynamicTaskGenerator {
|
||||
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());
|
||||
for (FaceRespVO face : list) {
|
||||
@ -122,23 +105,12 @@ public class DynamicTaskGenerator {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
List<FaceSampleRespVO> faceSampleList = faceSampleMapper.listByIds(searchFace.getSampleListIds());
|
||||
int matchedPlaceholder = 0;
|
||||
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);
|
||||
if (templateBiz.determineTemplateCanGenerate(template.getId(), face.getId())) {
|
||||
log.info("当前人脸样本{}已超过最小占位素材,自动创建任务", face.getFaceUrl());
|
||||
taskService.createRenderTask(scenic.getId(), template.getId(), face.getId());
|
||||
faceMapper.finishedJourney(face.getId());
|
||||
} else {
|
||||
log.info("当前人脸样本{}未超过最小占位素材{},未达到自动生成条件", face.getFaceUrl(), minimalPlaceholderFill);
|
||||
log.info("当前人脸样本{}未超过最小占位素材,未达到自动生成条件", face.getFaceUrl());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -89,4 +89,9 @@
|
||||
order by update_at desc
|
||||
limit 1
|
||||
</select>
|
||||
<select id="get" resultType="com.ycwl.basic.model.pc.face.entity.FaceEntity">
|
||||
select *
|
||||
from face
|
||||
where id = #{id}
|
||||
</select>
|
||||
</mapper>
|
||||
|
@ -86,8 +86,8 @@
|
||||
from face_sample
|
||||
where id = #{id}
|
||||
</select>
|
||||
<select id="listByIds" resultType="com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO">
|
||||
select id, scenic_id, device_id, face_url, match_sample_ids, first_match_rate, source_id, match_result,`status`, create_at
|
||||
<select id="listByIds" resultType="com.ycwl.basic.model.pc.faceSample.entity.FaceSampleEntity">
|
||||
select *
|
||||
from face_sample
|
||||
where id in (
|
||||
<foreach collection="list" item="id" separator=",">
|
||||
|
@ -93,6 +93,7 @@
|
||||
<foreach collection="list" item="item" open="(" separator="," close=")">
|
||||
#{item}
|
||||
</foreach>
|
||||
order by create_time desc
|
||||
</select>
|
||||
<select id="listVideoBySampleIds" resultType="com.ycwl.basic.model.pc.source.entity.SourceEntity">
|
||||
select *
|
||||
|
Loading…
x
Reference in New Issue
Block a user