Переглянути джерело

fix: 消费系统
1.人脸消费机生成特征库

luoyb 1 рік тому
батько
коміт
94dfdffcda

+ 18 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/controller/self/TraineeController.java

@@ -1,6 +1,7 @@
 package org.dromara.backstage.controller.self;
 
 import cn.hutool.core.codec.Base64;
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
@@ -11,15 +12,19 @@ import org.dromara.backstage.domain.vo.yc.YcLockCardVo;
 import org.dromara.backstage.domain.vo.yc.YcTraineeVo;
 import org.dromara.common.core.api.ResponseResult;
 import org.dromara.common.core.api.ReturnResult;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
 import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.hotel.api.domain.vo.RemoteOrderVo;
 import org.dromara.system.api.domain.vo.RemoteDeptVo;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
 
 /**
  * @ClassName TraineeController
@@ -111,6 +116,19 @@ public class TraineeController {
      */
     @PostMapping("/api/v1/lock/room")
     public ReturnResult lockRoomTest() {
+
+        //String redisKey = CacheNames.CLASS_ROOM + "_1891391372207443970;
+        ////清除已有的缓存数据
+        //if (ObjectUtil.isNotEmpty(RedisUtils.getCacheObject(redisKey))) {
+        //    RedisUtils.deleteObject(redisKey);
+        //}
+        //List<RemoteOrderVo> orderVos = this.selectTeamLockRoom(p.getId());
+        //if (CollectionUtil.isNotEmpty(orderVos)) {
+        //    LinkedBlockingQueue<String> concurrentLinkedQueue = new LinkedBlockingQueue<>();
+        //    orderVos.forEach(k -> concurrentLinkedQueue.add(k.getRoomCode()));
+        //    //重新设置锁房的缓存
+        //    RedisUtils.setCacheObject(redisKey, concurrentLinkedQueue);
+        //}
         // List<RemoteOrderVo> vos= traineeBusiness.selectTeamLockRoom(1858315769720258561L);
 
         R<Void> result = traineeBusiness.setDoingClassLockRoom(DateUtil.date());

+ 17 - 9
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/ArcFaceBusiness.java

@@ -15,6 +15,7 @@ import org.dromara.server.consume.service.FaceEngineService;
 import org.dromara.server.consume.service.IPtArcFaceFeatureService;
 import org.dromara.server.consume.service.IPtArcFaceKeyService;
 import org.dromara.server.consume.service.IPtTermFaceVersionService;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
@@ -36,6 +37,11 @@ import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
 @RequiredArgsConstructor
 @Service
 public class ArcFaceBusiness {
+    @Value("${upload.upload-path}/")    // 文件上传路径
+    private String uploadPath;
+    @Value("${upload.image.user}/")     // 用户头像路径
+    private String userPath;
+
     private final IPtTermFaceVersionService termFaceVersionService;
     private final IPtArcFaceFeatureService arcFaceFeatureService;
     private final IPtArcFaceKeyService arcFaceKeyService;
@@ -82,31 +88,32 @@ public class ArcFaceBusiness {
         PtArcFaceFeatureVo vo = arcFaceFeatureService.getOneFeatureDataUser(userId);
         // 人脸照片
         ImageInfo imageInfo = null;
+        String featureData = "";
         // 获取人员照片地址
         RemoteUserAccountVo accountVo = remoteUserAccountService.getUserAccountVoById(userId);
         String photoUrl = ObjectUtil.isEmpty(accountVo.getPhoto()) ? "" : accountVo.getPhoto();
 
         // 如果不存在或者已更新,则重新生成特征码
         if (ObjectUtil.isEmpty(vo) || ObjectUtil.notEqual(photoUrl, vo.getPhotoUrl())) {
-            String fileUrl = photoUrl;
+            String fileUrl = uploadPath + userPath +photoUrl;
             File imageFile = new File(fileUrl);
             if (!imageFile.exists()) {
                 return null;
             }
             imageInfo = getRGBData(imageFile);
-        }
-        if (imageInfo == null) {
-            return null;
+            if (imageInfo == null) {
+                return null;
+            }
+            featureData = faceEngineService.createFeatureData(imageInfo);
+            if (ObjectUtil.isEmpty(featureData)) {
+                return null;
+            }
         }
         // 生成特征码数据
-        String featureData = faceEngineService.createFeatureData(imageInfo);
-        if (ObjectUtil.isEmpty(featureData)) {
-            return null;
-        }
         if (ObjectUtil.isEmpty(vo)) {
             PtArcFaceFeatureBo bo = new PtArcFaceFeatureBo();
             bo.setUserId(userId);
-            bo.setPhoto(photoUrl);
+            bo.setPhotoUrl(photoUrl);
             bo.setFeatureData(featureData);
             arcFaceFeatureService.insertByBo(bo);
         } else if (ObjectUtil.notEqual(photoUrl, vo.getPhotoUrl())) {
@@ -114,6 +121,7 @@ public class ArcFaceBusiness {
         }
         // 重新从数据中获取数据
         vo = arcFaceFeatureService.getOneFeatureDataUser(userId);
+        vo.setUserNo(accountVo.getUserNo().toString());
         return MapstructUtils.convert(vo, YcFaceFeatureVo.class);
     }
 

+ 5 - 2
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/controller/v1/ConsumeController.java

@@ -25,6 +25,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.Objects;
 import java.util.concurrent.ScheduledExecutorService;
 
@@ -103,10 +104,11 @@ public class ConsumeController {
     @PostMapping("/Consume")
     public Object uploadRecord(@RequestBody Object record, @RequestParam(name = "mac", required = false) java.lang.String mac) {
         log.info("[上传交易记录]-[{}]",JSONUtil.parseObj(record));
+        String consumeMoney = JSONUtil.parseObj(record).get("consumeValue").toString();
         Object object = doRecordData(record, "uploadRecord", mac, "");
         JSONObject jsonObject = JSONUtil.parseObj(object);
 
-        sendConsumeToCloud(jsonObject, record);
+        sendConsumeToCloud(jsonObject, record,consumeMoney);
 
         return object;
     }
@@ -184,12 +186,13 @@ public class ConsumeController {
         return recordConvertStrategy.reConvert(bo, "YC");
     }
 
-    private void sendConsumeToCloud(JSONObject jsonObject, Object record) {
+    private void sendConsumeToCloud(JSONObject jsonObject, Object record,String consumeMoney) {
         if(ObjectUtil.isEmpty(jsonObject.get("body"))){
             //发送消息
             if (ObjectUtil.equals(defaultConfig.getLocationFlag(), DefaultConstants.LOCAL_FLAG)) {
                 ConsumptionBo bo = recordConvertStrategy.convert(record, "YC");
                 bo.setConsumeDate(jsonObject.getDate("consumeDate"));
+                bo.setConsumeMoney(new BigDecimal(consumeMoney));
                 ThreadUtil.execAsync(() -> baseBusiness.sendCloudConsume(bo));
             }
         }

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/domain/PtArcFaceFeature.java

@@ -40,7 +40,7 @@ public class PtArcFaceFeature extends TenantEntity {
     /**
      * 人员照片地址
      */
-    private String photo;
+    private String photoUrl;
 
     /**
      * 人脸特征数据

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/domain/bo/PtArcFaceFeatureBo.java

@@ -39,7 +39,7 @@ public class PtArcFaceFeatureBo extends BaseEntity {
      * 人员照片地址
      */
     @NotBlank(message = "人员照片地址不能为空", groups = { AddGroup.class, EditGroup.class })
-    private String photo;
+    private String photoUrl;
 
     /**
      * 人脸特征数据

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/PtArcFaceFeatureServiceImpl.java

@@ -74,7 +74,7 @@ public class PtArcFaceFeatureServiceImpl implements IPtArcFaceFeatureService {
     public Integer updateFeatureDataByUserId(Long userId, String featureData, String photoUrl) {
         LambdaUpdateWrapper<PtArcFaceFeature> luw = new LambdaUpdateWrapper<PtArcFaceFeature>()
                                                         .set(PtArcFaceFeature::getFeatureData, featureData)
-                                                        .set(PtArcFaceFeature::getPhoto, photoUrl)
+                                                        .set(PtArcFaceFeature::getPhotoUrl, photoUrl)
                                                         .eq(PtArcFaceFeature::getUserId, userId);
         return baseMapper.update(null, luw);
     }

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/resources/mapper/consume/PtArcFaceFeatureMapper.xml

@@ -8,7 +8,7 @@
         <result property="featureId"    column="feature_id"    />
         <result property="tenantId"    column="tenant_id"    />
         <result property="userId"    column="user_id"    />
-        <result property="photo"    column="photo"    />
+        <result property="photoUrl"    column="photo_url"    />
         <result property="featureData"    column="feature_data"    />
         <result property="createDept"    column="create_dept"    />
         <result property="createBy"    column="create_by"    />