From fae62ab7c28c1697ee41e212816f5c3417550d0b Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Tue, 17 Jun 2025 14:12:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=84=E7=A7=8Dsql=E3=80=81=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/pc/FaceSampleController.java | 23 ------ .../basic/controller/viid/ViidController.java | 4 +- .../ycwl/basic/mapper/FaceSampleMapper.java | 2 + .../model/task/req/ClientStatusReqVo.java | 2 + .../repository/RenderWorkerRepository.java | 75 +++++++++++++++++++ .../mobile/impl/AppMemberServiceImpl.java | 23 +----- .../basic/service/pc/FaceSampleService.java | 3 - .../pc/impl/FaceSampleServiceImpl.java | 27 ------- .../pc/impl/RenderWorkerServiceImpl.java | 64 +++++++++++++++- .../task/impl/TaskTaskServiceImpl.java | 28 +------ .../resources/mapper/FaceSampleMapper.xml | 5 ++ 11 files changed, 155 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/repository/RenderWorkerRepository.java diff --git a/src/main/java/com/ycwl/basic/controller/pc/FaceSampleController.java b/src/main/java/com/ycwl/basic/controller/pc/FaceSampleController.java index 0ba5213..d62f318 100644 --- a/src/main/java/com/ycwl/basic/controller/pc/FaceSampleController.java +++ b/src/main/java/com/ycwl/basic/controller/pc/FaceSampleController.java @@ -40,28 +40,5 @@ public class FaceSampleController { public ApiResponse getDetail(@PathVariable("id") Long id) { return FaceSampleService.getById(id); } - @ApiOperation("添加人脸样本") - @PostMapping("/add") - public ApiResponse add(@RequestBody FaceSampleEntity FaceSample) { - return FaceSampleService.add(FaceSample); - } - @ApiOperation("删除人脸样本") - @PostMapping("/deleteById/{id}") - public ApiResponse deleteById(@PathVariable Long id) { - return FaceSampleService.deleteById(id); - } - @ApiOperation("批量删除人脸样本") - @PostMapping("/deleteByIds") - public ApiResponse deleteByIds(@RequestBody List ids) { - return FaceSampleService.deleteByIds(ids); - } - @ApiOperation("修改人脸样本信息") - @PostMapping("/update") - public ApiResponse update(@RequestBody FaceSampleEntity FaceSample) { - return FaceSampleService.update(FaceSample); - } - - - } diff --git a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java index 6447712..93f5611 100644 --- a/src/main/java/com/ycwl/basic/controller/viid/ViidController.java +++ b/src/main/java/com/ycwl/basic/controller/viid/ViidController.java @@ -315,7 +315,7 @@ public class ViidController { AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), faceSample.getId().toString(), url, newFaceSampleId.toString()); if (addFaceResp != null) { faceSample.setScore(addFaceResp.getScore()); - faceSampleMapper.update(faceSample); + faceSampleMapper.updateScore(faceSample.getId(), addFaceResp.getScore()); } } if (deviceConfig != null && Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) { @@ -377,7 +377,7 @@ public class ViidController { AddFaceResp addFaceResp = faceBodyAdapter.addFace(scenicId.toString(), faceSample.getId().toString(), url, newFaceSampleId.toString()); if (addFaceResp != null) { faceSample.setScore(addFaceResp.getScore()); - faceSampleMapper.update(faceSample); + faceSampleMapper.updateScore(faceSample.getId(), addFaceResp.getScore()); } } if (Integer.valueOf(1).equals(deviceConfig.getEnablePreBook())) { diff --git a/src/main/java/com/ycwl/basic/mapper/FaceSampleMapper.java b/src/main/java/com/ycwl/basic/mapper/FaceSampleMapper.java index bf7bc17..8e0edd1 100644 --- a/src/main/java/com/ycwl/basic/mapper/FaceSampleMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/FaceSampleMapper.java @@ -27,4 +27,6 @@ public interface FaceSampleMapper { FaceSampleEntity getEntity(Long faceSampleId); List listEntityBeforeDate(Long scenicId, Date endDate); + + void updateScore(Long id, Float score); } diff --git a/src/main/java/com/ycwl/basic/model/task/req/ClientStatusReqVo.java b/src/main/java/com/ycwl/basic/model/task/req/ClientStatusReqVo.java index dfd0019..c1c7b0e 100644 --- a/src/main/java/com/ycwl/basic/model/task/req/ClientStatusReqVo.java +++ b/src/main/java/com/ycwl/basic/model/task/req/ClientStatusReqVo.java @@ -3,6 +3,7 @@ package com.ycwl.basic.model.task.req; import lombok.Data; import java.math.BigDecimal; +import java.util.Date; import java.util.List; @Data @@ -15,4 +16,5 @@ public class ClientStatusReqVo { private BigDecimal memory_total; private BigDecimal memory_available; private List support_feature; + private Date updateAt; } diff --git a/src/main/java/com/ycwl/basic/repository/RenderWorkerRepository.java b/src/main/java/com/ycwl/basic/repository/RenderWorkerRepository.java new file mode 100644 index 0000000..f4adbce --- /dev/null +++ b/src/main/java/com/ycwl/basic/repository/RenderWorkerRepository.java @@ -0,0 +1,75 @@ +package com.ycwl.basic.repository; + +import com.alibaba.fastjson.JSONObject; +import com.ycwl.basic.mapper.RenderWorkerMapper; +import com.ycwl.basic.model.pc.renderWorker.entity.RenderWorkerEntity; +import com.ycwl.basic.model.task.req.ClientStatusReqVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + +@Component +public class RenderWorkerRepository { + @Autowired + private RedisTemplate redisTemplate; + public static final String RENDER_WORKER_CACHE_KEY = "render_worker:%s"; + public static final String RENDER_WORKER_STATUS_CACHE_KEY = "render_worker:host_status:%s"; + @Autowired + private RenderWorkerMapper mapper; + + public RenderWorkerEntity getWorkerByAccessKey(String accessKey) { + String key = String.format(RENDER_WORKER_CACHE_KEY, accessKey); + if (redisTemplate.hasKey(key)) { + return JSONObject.parseObject(redisTemplate.opsForValue().get(key), RenderWorkerEntity.class); + } + RenderWorkerEntity renderWorker = mapper.findByAccessKey(accessKey); + if (renderWorker != null) { + redisTemplate.opsForValue().set(key, JSONObject.toJSONString(renderWorker), 1, TimeUnit.HOURS); + redisTemplate.opsForValue().set(String.format(RENDER_WORKER_CACHE_KEY, renderWorker.getId()), JSONObject.toJSONString(renderWorker), 1, TimeUnit.HOURS); + } + return renderWorker; + } + + public RenderWorkerEntity getWorker(Long id) { + String key = String.format(RENDER_WORKER_CACHE_KEY, id); + if (redisTemplate.hasKey(key)) { + return JSONObject.parseObject(redisTemplate.opsForValue().get(key), RenderWorkerEntity.class); + } + RenderWorkerEntity renderWorker = mapper.getById(id); + if (renderWorker != null) { + redisTemplate.opsForValue().set(key, JSONObject.toJSONString(renderWorker), 1, TimeUnit.HOURS); + redisTemplate.opsForValue().set(String.format(RENDER_WORKER_CACHE_KEY, renderWorker.getAccessKey()), JSONObject.toJSONString(renderWorker), 1, TimeUnit.HOURS); + } + return renderWorker; + } + + public void setWorkerHostStatus(Long id, ClientStatusReqVo status) { + String key = String.format(RENDER_WORKER_STATUS_CACHE_KEY, id); + if (status == null) { + return; + } + status.setUpdateAt(new Date()); + redisTemplate.opsForValue().set(key, JSONObject.toJSONString(status), 1, TimeUnit.HOURS); + } + + public ClientStatusReqVo getWorkerHostStatus(Long id) { + String key = String.format(RENDER_WORKER_STATUS_CACHE_KEY, id); + if (redisTemplate.hasKey(key)) { + String status = redisTemplate.opsForValue().get(key); + return JSONObject.parseObject(status, ClientStatusReqVo.class); + } + return null; + } + + public void clearCache(Long id) { + RenderWorkerEntity worker = getWorker(id); + redisTemplate.delete(String.format(RENDER_WORKER_CACHE_KEY, id)); + if (worker != null) { + redisTemplate.delete(String.format(RENDER_WORKER_CACHE_KEY, worker.getAccessKey())); + } + redisTemplate.delete(String.format(RENDER_WORKER_STATUS_CACHE_KEY, id)); + } +} diff --git a/src/main/java/com/ycwl/basic/service/mobile/impl/AppMemberServiceImpl.java b/src/main/java/com/ycwl/basic/service/mobile/impl/AppMemberServiceImpl.java index a8a13cd..5bdb1e0 100644 --- a/src/main/java/com/ycwl/basic/service/mobile/impl/AppMemberServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/mobile/impl/AppMemberServiceImpl.java @@ -2,7 +2,6 @@ package com.ycwl.basic.service.mobile.impl; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.ObjectMapper; import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.constant.NumberConstant; import com.ycwl.basic.enums.BizCodeEnum; @@ -13,7 +12,6 @@ import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoDTO; import com.ycwl.basic.model.mobile.weChat.DTO.WeChatUserInfoUpdateDTO; import com.ycwl.basic.model.pc.member.entity.MemberEntity; -import com.ycwl.basic.model.pc.member.req.MemberReqQuery; import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.model.pc.mp.MpConfigEntity; import com.ycwl.basic.repository.ScenicRepository; @@ -88,13 +86,9 @@ public class AppMemberServiceImpl implements AppMemberService { throw new AppException(BizCodeEnum.SERVER_UNKONWN_ERROR, "未获取到当前用户openId"); } - MemberRespVO memberRespVO = new MemberRespVO(); JwtInfo jwtInfo = new JwtInfo(); - // 根据返回的openId,判断用户是否是新用户,是的话,将用户信息存到数据库; - MemberReqQuery memberReqQuery = new MemberReqQuery(); - memberReqQuery.setOpenId(openId.toString()); - List list = memberMapper.list(memberReqQuery); - if (list.isEmpty()) { + MemberRespVO memberRespVO = memberMapper.getByOpenId(openId.toString()); + if (memberRespVO == null) { MemberEntity memberEntity = new MemberEntity(); memberEntity.setId(SnowFlakeUtil.getLongId()); memberEntity.setScenicId(scenicId); @@ -107,6 +101,7 @@ public class AppMemberServiceImpl implements AppMemberService { memberEntity.setProvince(userInfoDTO.getProvince()); memberEntity.setCity(userInfoDTO.getCity()); memberMapper.add(memberEntity); + memberRespVO = new MemberRespVO(); memberRespVO.setId(memberEntity.getId()); memberRespVO.setOpenId(memberEntity.getOpenId()); memberRespVO.setNickname(memberEntity.getNickname()); @@ -117,18 +112,6 @@ public class AppMemberServiceImpl implements AppMemberService { memberRespVO.setProvince(memberEntity.getProvince()); memberRespVO.setCity(memberEntity.getCity()); memberRespVO.setScenicId(memberEntity.getScenicId()); - } else { - MemberRespVO temp = list.getFirst(); - memberRespVO.setId(temp.getId()); - memberRespVO.setOpenId(temp.getOpenId()); - memberRespVO.setNickname(temp.getNickname()); - memberRespVO.setAvatarUrl(temp.getAvatarUrl()); - memberRespVO.setAgreement(1); - memberRespVO.setPhone(temp.getPhone()); - memberRespVO.setCountry(temp.getCountry()); - memberRespVO.setProvince(temp.getProvince()); - memberRespVO.setCity(temp.getCity()); - memberRespVO.setScenicId(temp.getScenicId()); } jwtInfo.setUserId(memberRespVO.getId()); jwtInfo.setName(memberRespVO.getNickname()); diff --git a/src/main/java/com/ycwl/basic/service/pc/FaceSampleService.java b/src/main/java/com/ycwl/basic/service/pc/FaceSampleService.java index c0093ed..f09ff89 100644 --- a/src/main/java/com/ycwl/basic/service/pc/FaceSampleService.java +++ b/src/main/java/com/ycwl/basic/service/pc/FaceSampleService.java @@ -20,8 +20,5 @@ public interface FaceSampleService { ApiResponse> list(FaceSampleReqQuery faceSampleReqQuery); ApiResponse getById(Long id); ApiResponse add(FaceSampleEntity face); - ApiResponse deleteById(Long id); - ApiResponse deleteByIds(List ids); - ApiResponse update(FaceSampleEntity face); } diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/FaceSampleServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/FaceSampleServiceImpl.java index 5d3a7f1..a603afd 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/FaceSampleServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/FaceSampleServiceImpl.java @@ -50,31 +50,4 @@ public class FaceSampleServiceImpl implements FaceSampleService { } return ApiResponse.success(i); } - - @Override - public ApiResponse deleteById(Long id) { - int i = faceSampleMapper.deleteById(id); - if (i == 0) { - return ApiResponse.fail("删除失败"); - } - return ApiResponse.success(i); - } - - @Override - public ApiResponse deleteByIds(List ids) { - int i = faceSampleMapper.deleteByIds(ids); - if (i == 0) { - return ApiResponse.fail("删除失败"); - } - return ApiResponse.success(i); - } - - @Override - public ApiResponse update(FaceSampleEntity faceSample) { - int i = faceSampleMapper.update(faceSample); - if (i == 0) { - return ApiResponse.fail("修改失败"); - } - return ApiResponse.success(i); - } } diff --git a/src/main/java/com/ycwl/basic/service/pc/impl/RenderWorkerServiceImpl.java b/src/main/java/com/ycwl/basic/service/pc/impl/RenderWorkerServiceImpl.java index 0365798..322b948 100644 --- a/src/main/java/com/ycwl/basic/service/pc/impl/RenderWorkerServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/pc/impl/RenderWorkerServiceImpl.java @@ -5,6 +5,8 @@ import com.github.pagehelper.PageInfo; import com.ycwl.basic.mapper.RenderWorkerMapper; import com.ycwl.basic.model.pc.renderWorker.entity.RenderWorkerEntity; import com.ycwl.basic.model.pc.renderWorker.req.RenderWorkerReqQuery; +import com.ycwl.basic.model.task.req.ClientStatusReqVo; +import com.ycwl.basic.repository.RenderWorkerRepository; import com.ycwl.basic.service.pc.RenderWorkerService; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.SnowFlakeUtil; @@ -12,6 +14,8 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; /** @@ -23,23 +27,76 @@ public class RenderWorkerServiceImpl implements RenderWorkerService { @Autowired private RenderWorkerMapper renderWorkerMapper; + @Autowired + private RenderWorkerRepository renderWorkerRepository; @Override public ApiResponse> pageQuery(RenderWorkerReqQuery renderWorkerReqQuery) { PageHelper.startPage(renderWorkerReqQuery.getPageNum(), renderWorkerReqQuery.getPageSize()); List list = renderWorkerMapper.list(renderWorkerReqQuery); + list.forEach(worker -> { + ClientStatusReqVo clientStatus = renderWorkerRepository.getWorkerHostStatus(worker.getId()); + if (clientStatus == null) { + return; + } + worker.setCpuCount(clientStatus.getCpu_count()); + worker.setCpuUsage(clientStatus.getCpu_usage()); + // 上报的是字节,存储的是兆 + worker.setMemoryAvailable(clientStatus.getMemory_available().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + worker.setMemoryTotal(clientStatus.getMemory_total().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + + worker.setPlatform(clientStatus.getPlatform()); + worker.setRuntimeVersion(clientStatus.getRuntime_version()); + worker.setSupportFeature(String.join(",", clientStatus.getSupport_feature())); + worker.setVersion(clientStatus.getVersion()); + worker.setUpdateAt(clientStatus.getUpdateAt()); + }); PageInfo pageInfo = new PageInfo<>(list); return ApiResponse.success(pageInfo); } @Override public ApiResponse> list(RenderWorkerReqQuery renderWorkerReqQuery) { - return ApiResponse.success(renderWorkerMapper.list(renderWorkerReqQuery)); + List list = renderWorkerMapper.list(renderWorkerReqQuery); + list.forEach(worker -> { + ClientStatusReqVo clientStatus = renderWorkerRepository.getWorkerHostStatus(worker.getId()); + if (clientStatus == null) { + return; + } + worker.setCpuCount(clientStatus.getCpu_count()); + worker.setCpuUsage(clientStatus.getCpu_usage()); + // 上报的是字节,存储的是兆 + worker.setMemoryAvailable(clientStatus.getMemory_available().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + worker.setMemoryTotal(clientStatus.getMemory_total().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + + worker.setPlatform(clientStatus.getPlatform()); + worker.setRuntimeVersion(clientStatus.getRuntime_version()); + worker.setSupportFeature(String.join(",", clientStatus.getSupport_feature())); + worker.setVersion(clientStatus.getVersion()); + worker.setUpdateAt(clientStatus.getUpdateAt()); + }); + return ApiResponse.success(list); } @Override public ApiResponse detail(Long id) { - return ApiResponse.success(renderWorkerMapper.getById(id)); + RenderWorkerEntity worker = renderWorkerMapper.getById(id); + + ClientStatusReqVo clientStatus = renderWorkerRepository.getWorkerHostStatus(worker.getId()); + if (clientStatus != null) { + worker.setCpuCount(clientStatus.getCpu_count()); + worker.setCpuUsage(clientStatus.getCpu_usage()); + // 上报的是字节,存储的是兆 + worker.setMemoryAvailable(clientStatus.getMemory_available().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + worker.setMemoryTotal(clientStatus.getMemory_total().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); + + worker.setPlatform(clientStatus.getPlatform()); + worker.setRuntimeVersion(clientStatus.getRuntime_version()); + worker.setSupportFeature(String.join(",", clientStatus.getSupport_feature())); + worker.setVersion(clientStatus.getVersion()); + worker.setUpdateAt(clientStatus.getUpdateAt()); + } + return ApiResponse.success(worker); } @Override @@ -59,11 +116,13 @@ public class RenderWorkerServiceImpl implements RenderWorkerService { @Override public ApiResponse deleteById(Long id) { + renderWorkerRepository.clearCache(id); return ApiResponse.success(renderWorkerMapper.deleteById(id)); } @Override public ApiResponse update(RenderWorkerEntity renderWorker) { + renderWorkerRepository.clearCache(renderWorker.getId()); int update = renderWorkerMapper.update(renderWorker); if (update == 0) { return ApiResponse.fail("渲染机修改失败"); @@ -74,6 +133,7 @@ public class RenderWorkerServiceImpl implements RenderWorkerService { @Override public ApiResponse updateStatus(Long id) { + renderWorkerRepository.clearCache(id); return ApiResponse.success(renderWorkerMapper.updateStatus(id)); } } diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index c976c33..9b8659f 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -45,6 +45,7 @@ import com.ycwl.basic.notify.entity.NotifyContent; import com.ycwl.basic.notify.enums.NotifyType; import com.ycwl.basic.repository.DeviceRepository; import com.ycwl.basic.repository.FaceRepository; +import com.ycwl.basic.repository.RenderWorkerRepository; import com.ycwl.basic.repository.ScenicRepository; import com.ycwl.basic.repository.VideoRepository; import com.ycwl.basic.repository.VideoTaskRepository; @@ -81,14 +82,10 @@ import java.util.stream.Collectors; @Slf4j @Service public class TaskTaskServiceImpl implements TaskService { - @Autowired - private TemplateMapper templateMapper; - @Autowired - private RenderWorkerMapper renderWorkerMapper; @Autowired private TaskMapper taskMapper; @Autowired - private RedisTemplate redisTemplate; + private RenderWorkerRepository repository; @Autowired private FaceMapper faceMapper; @Autowired @@ -124,13 +121,12 @@ public class TaskTaskServiceImpl implements TaskService { @Autowired private VideoReUploader videoReUploader; - private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { String accessKey = req.getAccessKey(); if (accessKey == null) { return null; } - return renderWorkerMapper.findByAccessKey(accessKey); + return repository.getWorkerByAccessKey(accessKey); } @Override @@ -144,23 +140,7 @@ public class TaskTaskServiceImpl implements TaskService { worker.setStatus(null); // get status ClientStatusReqVo clientStatus = req.getClientStatus(); - if (clientStatus != null) { - // 临时这么用下 - worker.setCpuCount(clientStatus.getCpu_count()); - worker.setCpuUsage(clientStatus.getCpu_usage()); - // 上报的是字节,存储的是兆 - worker.setMemoryAvailable(clientStatus.getMemory_available().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); - worker.setMemoryTotal(clientStatus.getMemory_total().divide(BigDecimal.valueOf(1024 * 1024), RoundingMode.CEILING)); - - worker.setPlatform(clientStatus.getPlatform()); - worker.setRuntimeVersion(clientStatus.getRuntime_version()); - worker.setSupportFeature(String.join(",", clientStatus.getSupport_feature())); - worker.setVersion(clientStatus.getVersion()); - - worker.setUpdateAt(new Date()); - redisTemplate.opsForValue().set(TaskConstant.TASK_ONLINE_WORKER_KEY_PFX + worker.getId(), JSON.toJSONString(clientStatus), 60, TimeUnit.SECONDS); - } - renderWorkerMapper.update(worker); + repository.setWorkerHostStatus(worker.getId(), clientStatus); TaskSyncRespVo resp = new TaskSyncRespVo(); // Template List updTemplateList; diff --git a/src/main/resources/mapper/FaceSampleMapper.xml b/src/main/resources/mapper/FaceSampleMapper.xml index 730b735..7b23788 100644 --- a/src/main/resources/mapper/FaceSampleMapper.xml +++ b/src/main/resources/mapper/FaceSampleMapper.xml @@ -36,6 +36,11 @@ where id = #{id} + + update face_sample + set score = #{score} + where id = #{id} + delete from face_sample where id = #{id}