From bf73241bf4239de0cb285dbfd15e7aa37a9a03e4 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 5 Dec 2024 14:33:27 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/mapper/pc/ScenicAccountMapper.java | 15 ++++++ .../model/pc/broker/entity/BrokerEntity.java | 5 ++ .../model/pc/broker/req/BrokerReqQuery.java | 2 + .../pc/scenic/entity/ScenicAccountEntity.java | 19 +++++++ .../pc/scenic/req/ScenicAddOrUpdateReq.java | 10 ++++ .../model/pc/scenic/resp/ScenicRespVO.java | 10 ++++ .../impl/pc/RenderWorkerServiceImpl.java | 5 ++ .../service/impl/pc/ScenicServiceImpl.java | 41 +++++++++++++++ src/main/resources/mapper/pc/BrokerMapper.xml | 10 +++- .../mapper/pc/ScenicAccountMapper.xml | 52 +++++++++++++++++++ src/main/resources/mapper/pc/ScenicMapper.xml | 15 ++++-- 11 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/mapper/pc/ScenicAccountMapper.java create mode 100644 src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicAccountEntity.java create mode 100644 src/main/resources/mapper/pc/ScenicAccountMapper.xml diff --git a/src/main/java/com/ycwl/basic/mapper/pc/ScenicAccountMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/ScenicAccountMapper.java new file mode 100644 index 0000000..ca5901b --- /dev/null +++ b/src/main/java/com/ycwl/basic/mapper/pc/ScenicAccountMapper.java @@ -0,0 +1,15 @@ +package com.ycwl.basic.mapper.pc; + +import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface ScenicAccountMapper { + ScenicAccountEntity getByAccount(String account); + int add(ScenicAccountEntity scenicAccount); + ScenicAccountEntity getSuperAccountOfScenic(Long scenicId); + int update(ScenicAccountEntity scenicAccount); + int deleteById(Long id); + int updateStatus(Long id); + int deleteByScenicId(Long scenicId); +} diff --git a/src/main/java/com/ycwl/basic/model/pc/broker/entity/BrokerEntity.java b/src/main/java/com/ycwl/basic/model/pc/broker/entity/BrokerEntity.java index d195acc..04418c7 100644 --- a/src/main/java/com/ycwl/basic/model/pc/broker/entity/BrokerEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/broker/entity/BrokerEntity.java @@ -20,6 +20,7 @@ public class BrokerEntity { * 推客名称 */ private String name; + private String phone; /** * 专属优惠码,新建时生成 */ @@ -30,4 +31,8 @@ public class BrokerEntity { private Integer status; private Date createAt; private Date updateAt; + private Integer brokerOrderCount; + private Integer brokerOrderAmount; + private Date firstBrokerDate; + private Date lastBrokerDate; } diff --git a/src/main/java/com/ycwl/basic/model/pc/broker/req/BrokerReqQuery.java b/src/main/java/com/ycwl/basic/model/pc/broker/req/BrokerReqQuery.java index c3ff059..9775b67 100644 --- a/src/main/java/com/ycwl/basic/model/pc/broker/req/BrokerReqQuery.java +++ b/src/main/java/com/ycwl/basic/model/pc/broker/req/BrokerReqQuery.java @@ -18,6 +18,8 @@ public class BrokerReqQuery extends BaseQueryParameterReq { private Long id; @ApiModelProperty("推客名称") private String name; + @ApiModelProperty("手机号") + private String phone; @ApiModelProperty("专属优惠码") private String promoCode; @ApiModelProperty("状态,0禁用,1启用") diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicAccountEntity.java b/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicAccountEntity.java new file mode 100644 index 0000000..8c8c3ee --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/entity/ScenicAccountEntity.java @@ -0,0 +1,19 @@ +package com.ycwl.basic.model.pc.scenic.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("scenic_account") +public class ScenicAccountEntity { + private Long id; + private Long scenicId; + private Integer isSuper; + private String name; + private String account; + private String password; + private Date createTime; + private Date updateTime; +} diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java b/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java index 224946d..eb74a15 100644 --- a/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/req/ScenicAddOrUpdateReq.java @@ -22,6 +22,11 @@ public class ScenicAddOrUpdateReq { */ @ApiModelProperty("景区名称") private String name; + /** + * 景区电话 + */ + @ApiModelProperty("联系电话") + private String phone; /** * 景区介绍 */ @@ -75,4 +80,9 @@ public class ScenicAddOrUpdateReq { private ScenicConfigEntity scenicConfig; @ApiModelProperty("景区源素材价格,元") private BigDecimal price; + + @ApiModelProperty("账号") + private String account; + @ApiModelProperty("密码") + private String password; } diff --git a/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java b/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java index 2685313..87d7b7e 100644 --- a/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/scenic/resp/ScenicRespVO.java @@ -23,6 +23,16 @@ public class ScenicRespVO { */ @ApiModelProperty("景区名称") private String name; + /** + * 账号 + */ + @ApiModelProperty("账号") + private String account; + /** + * 联系电话 + */ + @ApiModelProperty("联系电话") + private String phone; /** * 景区介绍 */ diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/RenderWorkerServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/RenderWorkerServiceImpl.java index 8ce6fb5..3dfe1a8 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/RenderWorkerServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/RenderWorkerServiceImpl.java @@ -8,6 +8,7 @@ import com.ycwl.basic.model.pc.renderWorker.req.RenderWorkerReqQuery; import com.ycwl.basic.service.pc.RenderWorkerService; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -44,6 +45,10 @@ public class RenderWorkerServiceImpl implements RenderWorkerService { @Override public ApiResponse add(RenderWorkerEntity renderWorker) { renderWorker.setId(SnowFlakeUtil.getLongId()); + if (StringUtils.isEmpty(renderWorker.getAccessKey())) { + renderWorker.setAccessKey(SnowFlakeUtil.getId()); + } + renderWorker.setStatus(0); int add = renderWorkerMapper.add(renderWorker); if (add == 0) { return ApiResponse.fail("渲染机添加失败"); diff --git a/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java index 731bb16..954a504 100644 --- a/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/pc/ScenicServiceImpl.java @@ -2,7 +2,9 @@ package com.ycwl.basic.service.impl.pc; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; +import com.ycwl.basic.mapper.pc.ScenicAccountMapper; import com.ycwl.basic.mapper.pc.ScenicMapper; +import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity; import com.ycwl.basic.model.pc.scenic.entity.ScenicConfigEntity; import com.ycwl.basic.model.pc.scenic.req.ScenicAddOrUpdateReq; import com.ycwl.basic.model.pc.scenic.req.ScenicReqQuery; @@ -10,6 +12,7 @@ import com.ycwl.basic.model.pc.scenic.resp.ScenicRespVO; import com.ycwl.basic.service.pc.ScenicService; import com.ycwl.basic.utils.ApiResponse; import com.ycwl.basic.utils.SnowFlakeUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -24,6 +27,8 @@ import java.util.List; public class ScenicServiceImpl implements ScenicService { @Autowired private ScenicMapper scenicMapper; + @Autowired + private ScenicAccountMapper scenicAccountMapper; @Override public ApiResponse> pageQuery(ScenicReqQuery scenicReqQuery) { @@ -46,9 +51,21 @@ public class ScenicServiceImpl implements ScenicService { @Override @Transactional(rollbackFor = Exception.class) public ApiResponse add(ScenicAddOrUpdateReq scenicAddReq) { + ScenicAccountEntity scenicAccount = scenicAccountMapper.getByAccount(scenicAddReq.getAccount()); + if (scenicAccount != null) { + return ApiResponse.fail("账号已存在"); + } Long scenicId = SnowFlakeUtil.getLongId(); scenicAddReq.setId(scenicId); int add = scenicMapper.add(scenicAddReq); + ScenicAccountEntity account = new ScenicAccountEntity(); + account.setId(SnowFlakeUtil.getLongId()); + account.setScenicId(scenicId); + account.setName(scenicAddReq.getName() + "管理员"); + account.setAccount(scenicAddReq.getAccount()); + account.setPassword(scenicAddReq.getPassword()); + account.setIsSuper(1); + scenicAccountMapper.add(account); if (add > 0) { return ApiResponse.success(true); }else { @@ -62,6 +79,7 @@ public class ScenicServiceImpl implements ScenicService { int i = scenicMapper.deleteById(id); if (i > 0) { scenicMapper.deleteConfigByscenicId(id); + scenicAccountMapper.deleteByScenicId(id); return ApiResponse.success(true); }else { return ApiResponse.fail("景区删除失败"); @@ -70,6 +88,29 @@ public class ScenicServiceImpl implements ScenicService { @Override public ApiResponse update(ScenicAddOrUpdateReq scenicUpdateReq) { + if (StringUtils.isNotBlank(scenicUpdateReq.getAccount()) && StringUtils.isNotBlank(scenicUpdateReq.getPassword())) { + ScenicAccountEntity scenicAccount = scenicAccountMapper.getByAccount(scenicUpdateReq.getAccount()); + if (scenicAccount != null) { + if (!scenicAccount.getScenicId().equals(scenicUpdateReq.getId())) { + return ApiResponse.fail("账号已存在"); + } + } + ScenicAccountEntity account = scenicAccountMapper.getSuperAccountOfScenic(scenicUpdateReq.getId()); + if (account != null) { + account.setAccount(scenicUpdateReq.getAccount()); + account.setPassword(scenicUpdateReq.getPassword()); + scenicAccountMapper.update(account); + } else { + account = new ScenicAccountEntity(); + account.setId(SnowFlakeUtil.getLongId()); + account.setScenicId(scenicUpdateReq.getId()); + account.setName(scenicUpdateReq.getName() + "管理员"); + account.setAccount(scenicUpdateReq.getAccount()); + account.setPassword(scenicUpdateReq.getPassword()); + account.setIsSuper(1); + scenicAccountMapper.add(account); + } + } int i = scenicMapper.update(scenicUpdateReq); if (i > 0) { return ApiResponse.success(true); diff --git a/src/main/resources/mapper/pc/BrokerMapper.xml b/src/main/resources/mapper/pc/BrokerMapper.xml index a498c76..d2a6700 100644 --- a/src/main/resources/mapper/pc/BrokerMapper.xml +++ b/src/main/resources/mapper/pc/BrokerMapper.xml @@ -23,12 +23,20 @@ delete from broker where id = #{id} + select id, scenic_id, is_super, name, account, password, create_time, update_time + from scenic_account + where scenic_id = #{scenicId} and is_super = 1 + + + \ No newline at end of file diff --git a/src/main/resources/mapper/pc/ScenicMapper.xml b/src/main/resources/mapper/pc/ScenicMapper.xml index 68149e5..cb3e504 100644 --- a/src/main/resources/mapper/pc/ScenicMapper.xml +++ b/src/main/resources/mapper/pc/ScenicMapper.xml @@ -16,6 +16,9 @@ `name`=#{name}, + + `phone`=#{phone}, + introduction=#{introduction}, @@ -77,8 +80,10 @@ delete from scenic_config where scenic_id = #{scenicId} - + + + From 3f3c239627f2cd99cdb28adf8bc99dfd3a0face3 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 5 Dec 2024 17:42:32 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E4=BA=BA=E8=84=B8=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ycwl/basic/mapper/pc/DeviceMapper.java | 2 + .../model/pc/face/entity/FaceEntity.java | 4 + .../faceSample/entity/FaceSampleEntity.java | 9 ++ .../pc/faceSample/req/FaceSampleReqQuery.java | 5 + .../pc/faceSample/resp/FaceSampleRespVO.java | 5 + .../basic/model/task/resp/AddFaceRespVo.java | 8 + .../model/task/resp/SearchFaceRespVo.java | 8 + .../impl/task/TaskFaceServiceImpl.java | 146 ++++++++++++++++++ .../basic/service/task/TaskFaceService.java | 13 ++ src/main/resources/mapper/pc/DeviceMapper.xml | 5 + src/main/resources/mapper/pc/FaceMapper.xml | 7 +- .../resources/mapper/pc/FaceSampleMapper.xml | 7 +- 12 files changed, 215 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java create mode 100644 src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java create mode 100644 src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java create mode 100644 src/main/java/com/ycwl/basic/service/task/TaskFaceService.java diff --git a/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java b/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java index 569a22e..00e2aaa 100644 --- a/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java +++ b/src/main/java/com/ycwl/basic/mapper/pc/DeviceMapper.java @@ -21,4 +21,6 @@ public interface DeviceMapper { int deleteById(Long id); int update(DeviceAddOrUpdateReq deviceReqQuery); int updateStatus(Long id); + + List listByScenicId(Long scenicId); } diff --git a/src/main/java/com/ycwl/basic/model/pc/face/entity/FaceEntity.java b/src/main/java/com/ycwl/basic/model/pc/face/entity/FaceEntity.java index f428caa..9db8b04 100644 --- a/src/main/java/com/ycwl/basic/model/pc/face/entity/FaceEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/face/entity/FaceEntity.java @@ -16,6 +16,10 @@ import java.util.Date; public class FaceEntity { @TableId private Long id; + /** + * 人脸得分 + */ + private float score; /** * 会员id */ diff --git a/src/main/java/com/ycwl/basic/model/pc/faceSample/entity/FaceSampleEntity.java b/src/main/java/com/ycwl/basic/model/pc/faceSample/entity/FaceSampleEntity.java index 7f8dc23..25ac0b9 100644 --- a/src/main/java/com/ycwl/basic/model/pc/faceSample/entity/FaceSampleEntity.java +++ b/src/main/java/com/ycwl/basic/model/pc/faceSample/entity/FaceSampleEntity.java @@ -15,10 +15,19 @@ import java.util.Date; public class FaceSampleEntity { @TableId private Long id; + /** + * 景区ID + */ + private Long scenicId; /** * 来源设备 */ private Long deviceId; + /** + * 样本ID + */ + private Long sourceId; + private float score; /** * 人脸照片 */ diff --git a/src/main/java/com/ycwl/basic/model/pc/faceSample/req/FaceSampleReqQuery.java b/src/main/java/com/ycwl/basic/model/pc/faceSample/req/FaceSampleReqQuery.java index 6ab0884..0dd67c9 100644 --- a/src/main/java/com/ycwl/basic/model/pc/faceSample/req/FaceSampleReqQuery.java +++ b/src/main/java/com/ycwl/basic/model/pc/faceSample/req/FaceSampleReqQuery.java @@ -16,6 +16,11 @@ import java.util.Date; @Data @ApiModel("人脸样本查询参数") public class FaceSampleReqQuery extends BaseQueryParameterReq { + /** + * 景区ID + */ + @ApiModelProperty("景区ID") + private Long scenicId; /** * 来源设备 */ diff --git a/src/main/java/com/ycwl/basic/model/pc/faceSample/resp/FaceSampleRespVO.java b/src/main/java/com/ycwl/basic/model/pc/faceSample/resp/FaceSampleRespVO.java index 69f48d8..b3d7ea1 100644 --- a/src/main/java/com/ycwl/basic/model/pc/faceSample/resp/FaceSampleRespVO.java +++ b/src/main/java/com/ycwl/basic/model/pc/faceSample/resp/FaceSampleRespVO.java @@ -16,6 +16,11 @@ import java.util.Date; @ApiModel("人脸样本响应参数") public class FaceSampleRespVO { private Long id; + /** + * 景区ID + */ + @ApiModelProperty("景区ID") + private Long scenicId; /** * 来源设备 */ diff --git a/src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java b/src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java new file mode 100644 index 0000000..6afc14e --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/task/resp/AddFaceRespVo.java @@ -0,0 +1,8 @@ +package com.ycwl.basic.model.task.resp; + +import lombok.Data; + +@Data +public class AddFaceRespVo { + private float score; +} diff --git a/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java new file mode 100644 index 0000000..e9302ed --- /dev/null +++ b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java @@ -0,0 +1,8 @@ +package com.ycwl.basic.model.task.resp; + +import lombok.Data; + +@Data +public class SearchFaceRespVo { + private float score; +} diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java new file mode 100644 index 0000000..d665c4a --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java @@ -0,0 +1,146 @@ +package com.ycwl.basic.service.impl.task; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.facebody.model.v20191230.AddFaceEntityRequest; +import com.aliyuncs.facebody.model.v20191230.AddFaceRequest; +import com.aliyuncs.facebody.model.v20191230.AddFaceResponse; +import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest; +import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; +import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse; +import com.ycwl.basic.mapper.pc.DeviceMapper; +import com.ycwl.basic.mapper.pc.FaceMapper; +import com.ycwl.basic.mapper.pc.FaceSampleMapper; +import com.ycwl.basic.mapper.pc.ScenicMapper; +import com.ycwl.basic.model.pc.face.entity.FaceEntity; +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.req.FaceSampleReqQuery; +import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; +import com.ycwl.basic.model.task.resp.AddFaceRespVo; +import com.ycwl.basic.model.task.resp.SearchFaceRespVo; +import com.ycwl.basic.service.task.TaskFaceService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.profile.DefaultProfile; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class TaskFaceServiceImpl implements TaskFaceService { + @Autowired + private FaceMapper faceMapper; + @Autowired + private FaceSampleMapper faceSampleMapper; + @Autowired + private ScenicMapper scenicMapper; + private static final String DATE_FORMAT="yyyyMMddHHmmssSSS"; + @Autowired + private DeviceMapper deviceMapper; + + private IAcsClient getClient() { + DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai","LTAIDySvOV8yC7VZ","RgO5bwRnHrsyDak0IaLEF6iTRo7469"); + IAcsClient client = new DefaultAcsClient(profile); + return client; + } + @Override + public SearchFaceRespVo searchFace(Long scenicId, Long faceId) { + FaceRespVO faceRespVO = faceMapper.getById(faceId); + IAcsClient client = getClient(); + SearchFaceRequest request = new SearchFaceRequest(); + request.setDbName(scenicId.toString()); + request.setImageUrl(faceRespVO.getFaceUrl()); + request.setLimit(100); + request.setQualityScoreThreshold(80F); + try { + SearchFaceResponse response = client.getAcsResponse(request); + List matchList = response.getData().getMatchList(); + if (matchList.isEmpty()) { + return null; + } + SearchFaceRespVo respVo = new SearchFaceRespVo(); + FaceEntity faceEntity = new FaceEntity(); + faceEntity.setId(faceId); + faceEntity.setMatchResult(JSON.toJSONString(matchList)); + faceEntity.setScore(matchList.get(0).getQualitieScore()); + List faceItems = matchList.get(0).getFaceItems().stream() + .filter(faceItemsItem -> faceItemsItem.getConfidence() > 50).collect(Collectors.toList()); + faceEntity.setMatchSampleIds( + faceItems.stream() + .map(SearchFaceResponse.Data.MatchListItem.FaceItemsItem::getExtraData) + .collect(Collectors.joining(",")) + ); + faceMapper.update(faceEntity); + respVo.setScore(matchList.get(0).getQualitieScore()); + return respVo; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public AddFaceRespVo addFaceSample(Long faceSampleId) { + FaceSampleRespVO faceSampleRespVO = faceSampleMapper.getById(faceSampleId); + AddFaceEntityRequest request = new AddFaceEntityRequest(); + request.setDbName(faceSampleRespVO.getScenicId().toString()); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + String entityId = faceSampleRespVO.getDeviceId().toString() + "_" + sdf.format(faceSampleRespVO.getCreateAt()); + request.setEntityId(entityId); + IAcsClient client = getClient(); + try { + client.getAcsResponse(request); + } catch (ClientException e) { + return null; + } + AddFaceRequest addFaceRequest = new AddFaceRequest(); + addFaceRequest.setDbName(faceSampleRespVO.getScenicId().toString()); + addFaceRequest.setEntityId(entityId); + addFaceRequest.setImageUrl(faceSampleRespVO.getFaceUrl()); + addFaceRequest.setExtraData(faceSampleId.toString()); + AddFaceRespVo respVo = new AddFaceRespVo(); + try { + AddFaceResponse acsResponse = client.getAcsResponse(addFaceRequest); + FaceSampleEntity faceSampleEntity = new FaceSampleEntity(); + faceSampleEntity.setId(faceSampleId); + faceSampleEntity.setScore(acsResponse.getData().getQualitieScore()); + faceSampleEntity.setUpdateAt(new Date()); + faceSampleMapper.update(faceSampleEntity); + respVo.setScore(acsResponse.getData().getQualitieScore()); + } catch (ClientException e) { + return null; + } + return respVo; + } + + @Override + public void batchDeleteFace(Long scenicId) { + FaceSampleReqQuery query = new FaceSampleReqQuery(); + query.setDeviceId(scenicId); + faceSampleMapper.list(query); + Date thatDay = DateUtil.offsetDay(new Date(), -3); + Date dayStart = DateUtil.beginOfDay(thatDay); + Date dayEnd = DateUtil.endOfDay(thatDay); + query.setStartTime(dayStart); + query.setEndTime(dayEnd); + IAcsClient client = getClient(); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + faceSampleMapper.list(query).forEach(faceSampleEntity -> { + String entityId = faceSampleEntity.getDeviceId().toString() + "_" + sdf.format(faceSampleEntity.getCreateAt()); + DeleteFaceEntityRequest request = new DeleteFaceEntityRequest(); + request.setDbName(scenicId.toString()); + request.setEntityId(entityId); + try { + client.getAcsResponse(request); + } catch (ClientException e) { + return; + } + }); + } +} diff --git a/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java new file mode 100644 index 0000000..76a2eaf --- /dev/null +++ b/src/main/java/com/ycwl/basic/service/task/TaskFaceService.java @@ -0,0 +1,13 @@ +package com.ycwl.basic.service.task; + +import com.ycwl.basic.model.task.resp.AddFaceRespVo; +import com.ycwl.basic.model.task.resp.SearchFaceRespVo; + +public interface TaskFaceService { + + SearchFaceRespVo searchFace(Long scenicId, Long faceId); + + AddFaceRespVo addFaceSample(Long faceSampleId); + + void batchDeleteFace(Long scenicId); +} diff --git a/src/main/resources/mapper/pc/DeviceMapper.xml b/src/main/resources/mapper/pc/DeviceMapper.xml index f0ffd5d..9be8f4e 100644 --- a/src/main/resources/mapper/pc/DeviceMapper.xml +++ b/src/main/resources/mapper/pc/DeviceMapper.xml @@ -53,4 +53,9 @@ left join scenic s on d.scenic_id = s.id where d.id = #{id} + \ No newline at end of file diff --git a/src/main/resources/mapper/pc/FaceMapper.xml b/src/main/resources/mapper/pc/FaceMapper.xml index 3e273d4..9fc6cb3 100644 --- a/src/main/resources/mapper/pc/FaceMapper.xml +++ b/src/main/resources/mapper/pc/FaceMapper.xml @@ -2,8 +2,8 @@ - insert into face(id, member_id, face_url, match_sample_ids, first_match_rate, match_result) - values (#{id}, #{memberId}, #{faceUrl}, #{matchSampleIds}, #{firstMatchRate}, #{matchResult}) + insert into face(id, score, member_id, face_url, match_sample_ids, first_match_rate, match_result) + values (#{id}, #{score}, #{memberId}, #{faceUrl}, #{matchSampleIds}, #{firstMatchRate}, #{matchResult}) update face @@ -11,6 +11,9 @@ member_id = #{memberId}, + + score = #{score}, + face_url = #{faceUrl}, diff --git a/src/main/resources/mapper/pc/FaceSampleMapper.xml b/src/main/resources/mapper/pc/FaceSampleMapper.xml index 3ad9cb7..7315c6a 100644 --- a/src/main/resources/mapper/pc/FaceSampleMapper.xml +++ b/src/main/resources/mapper/pc/FaceSampleMapper.xml @@ -42,9 +42,12 @@ From aaa29c36d8ff7a987eed6bd4d617efa5071ad3da Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 5 Dec 2024 18:37:55 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E5=AF=B9?= =?UTF-8?q?=E8=B1=A1=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1366e7f..86673b0 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -88,10 +88,10 @@ wx: #阿里云OSS aliYunOss: - endpoint: "https://oss-cn-chengdu.aliyuncs.com" - accessKeyId: "LTAI5t5cydpGpHfYqf31mEJA" - accessKeySecret: "xdFzlwzmE8QPPstbcZY82tU3xj7G0R" - bucketName: "scwzzn-file" - objectName: "image/" - url: "https://scwzzn-file.oss-cn-chengdu.aliyuncs.com/" - region: "cn-hangzhou" \ No newline at end of file + endpoint: "https://oss-cn-shanghai.aliyuncs.com" + accessKeyId: "LTAI5tCa641QdNHH9Ybg9u7V" + accessKeySecret: "RRVIgekoqx96Fgm2Gs7eQshMShcEpk" + bucketName: "frametour-assets" + objectName: "user-faces/" + url: "https://frametour-assets.oss-cn-shanghai.aliyuncs.com/" + region: "cn-shanghai" \ No newline at end of file From 1915d45d20a09452fe9d14ff038591a1890e4e82 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Thu, 5 Dec 2024 18:41:09 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E4=BA=BA?= =?UTF-8?q?=E8=84=B8=E6=A3=80=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/task/TaskFaceServiceImpl.java | 18 ++++++++++++------ src/main/resources/application.yml | 5 +++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java index d665c4a..bc79db3 100644 --- a/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/impl/task/TaskFaceServiceImpl.java @@ -9,6 +9,7 @@ import com.aliyuncs.facebody.model.v20191230.AddFaceResponse; import com.aliyuncs.facebody.model.v20191230.DeleteFaceEntityRequest; import com.aliyuncs.facebody.model.v20191230.SearchFaceRequest; import com.aliyuncs.facebody.model.v20191230.SearchFaceResponse; +import com.ycwl.basic.config.FaceDetectConfig; import com.ycwl.basic.mapper.pc.DeviceMapper; import com.ycwl.basic.mapper.pc.FaceMapper; import com.ycwl.basic.mapper.pc.FaceSampleMapper; @@ -21,6 +22,7 @@ import com.ycwl.basic.model.pc.faceSample.resp.FaceSampleRespVO; import com.ycwl.basic.model.task.resp.AddFaceRespVo; import com.ycwl.basic.model.task.resp.SearchFaceRespVo; import com.ycwl.basic.service.task.TaskFaceService; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.aliyuncs.DefaultAcsClient; @@ -43,9 +45,12 @@ public class TaskFaceServiceImpl implements TaskFaceService { private static final String DATE_FORMAT="yyyyMMddHHmmssSSS"; @Autowired private DeviceMapper deviceMapper; + @Autowired + private FaceDetectConfig faceDetectConfig; private IAcsClient getClient() { - DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai","LTAIDySvOV8yC7VZ","RgO5bwRnHrsyDak0IaLEF6iTRo7469"); + DefaultProfile profile = DefaultProfile.getProfile( + faceDetectConfig.getRegion(),faceDetectConfig.getAccessKeyId(), faceDetectConfig.getAccessKeySecret()); IAcsClient client = new DefaultAcsClient(profile); return client; } @@ -71,12 +76,13 @@ public class TaskFaceServiceImpl implements TaskFaceService { faceEntity.setScore(matchList.get(0).getQualitieScore()); List faceItems = matchList.get(0).getFaceItems().stream() .filter(faceItemsItem -> faceItemsItem.getConfidence() > 50).collect(Collectors.toList()); - faceEntity.setMatchSampleIds( - faceItems.stream() - .map(SearchFaceResponse.Data.MatchListItem.FaceItemsItem::getExtraData) - .collect(Collectors.joining(",")) - ); + List faceSampleIds = faceItems.stream() + .map(SearchFaceResponse.Data.MatchListItem.FaceItemsItem::getExtraData) + .map(Long::parseLong) + .collect(Collectors.toList()); + faceEntity.setMatchSampleIds(StringUtils.joinWith(",", faceSampleIds)); faceMapper.update(faceEntity); + respVo.setSampleListIds(faceSampleIds); respVo.setScore(matchList.get(0).getQualitieScore()); return respVo; } catch (Exception e) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 86673b0..f1c98eb 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -94,4 +94,9 @@ aliYunOss: bucketName: "frametour-assets" objectName: "user-faces/" url: "https://frametour-assets.oss-cn-shanghai.aliyuncs.com/" + region: "cn-shanghai" +#阿里云人脸检测 +aliYunFace: + accessKeyId: "LTAI5tMwrmxVcUEKoH5QzLHx" + accessKeySecret: "ZCIP8aKx1jwX1wkeYIPQEDZ8fPtN1c" region: "cn-shanghai" \ No newline at end of file From 19fcebf32cd1698b9190c91762490d0c90b383e7 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 6 Dec 2024 09:21:56 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E4=BA=BA?= =?UTF-8?q?=E8=84=B8=E6=A3=80=E6=B5=8B=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ycwl/basic/config/FaceDetectConfig.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/com/ycwl/basic/config/FaceDetectConfig.java diff --git a/src/main/java/com/ycwl/basic/config/FaceDetectConfig.java b/src/main/java/com/ycwl/basic/config/FaceDetectConfig.java new file mode 100644 index 0000000..b1f7dd3 --- /dev/null +++ b/src/main/java/com/ycwl/basic/config/FaceDetectConfig.java @@ -0,0 +1,21 @@ +package com.ycwl.basic.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 阿里云OSS配置 + * + * @author songmingsong + **/ +@Data +@Component +public class FaceDetectConfig { + @Value("${aliYunFace.accessKeyId}") + private String accessKeyId; + @Value("${aliYunFace.accessKeySecret}") + private String accessKeySecret; + @Value("${aliYunFace.region}") + private String region; +} From 66e43f3c90a7ad3beb941ca0175182a1c66cdb69 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Fri, 6 Dec 2024 09:22:47 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E4=BA=BA?= =?UTF-8?q?=E8=84=B8=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java index e9302ed..99dc3cf 100644 --- a/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java +++ b/src/main/java/com/ycwl/basic/model/task/resp/SearchFaceRespVo.java @@ -2,7 +2,10 @@ package com.ycwl.basic.model.task.resp; import lombok.Data; +import java.util.List; + @Data public class SearchFaceRespVo { private float score; + private List sampleListIds; }