瀏覽代碼

Merge commit '1635443be210fe223c19fc201b91fff96c173bb4'

lihao16 4 月之前
父節點
當前提交
fd41a8566e

+ 3 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/mapper/SmsbDeviceGroupRelMapper.java

@@ -2,6 +2,7 @@ package com.inspur.device.mapper;
 
 import com.inspur.device.domain.SmsbDeviceGroupRel;
 import com.inspur.device.domain.vo.SmsbDeviceGroupRelVo;
+import org.apache.ibatis.annotations.Param;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
 import java.util.List;
@@ -17,4 +18,6 @@ public interface SmsbDeviceGroupRelMapper extends BaseMapperPlus<SmsbDeviceGroup
     List<SmsbDeviceGroupRelVo> queryGroupRelVoListByIdentifier(String identifier);
 
     List<SmsbDeviceGroupRelVo> queryGroupRelVoListByGoupId(Long groupId);
+
+    List<SmsbDeviceGroupRelVo> getRelListByIdentifier(@Param("deviceIdentifier") String deviceIdentifier);
 }

+ 12 - 1
smsb-modules/smsb-device/src/main/resources/mapper/device/SmsbDeviceGroupRelMapper.xml

@@ -21,4 +21,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ORDER BY scene_sort
     </select>
 
-</mapper>
+    <select id="getRelListByIdentifier" parameterType="String" resultType="com.inspur.device.domain.vo.SmsbDeviceGroupRelVo">
+        SELECT
+            *
+        FROM
+            smsb_device_group_rel
+        WHERE
+            device_group_id = (SELECT device_group_id FROM smsb_device_group_rel WHERE device_identifier = #{deviceIdentifier})
+        ORDER BY
+            scene_sort ASC
+    </select>
+
+</mapper>

+ 23 - 26
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/controller/SmsbAppointmentInfoController.java

@@ -1,31 +1,30 @@
 package com.inspur.digital.controller;
 
-import java.util.List;
-
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaIgnore;
-import com.inspur.device.domain.vo.SmsbDeviceChatKeyVo;
-import com.inspur.device.service.ISmsbDeviceChatKeyService;
+import com.inspur.digital.domain.bo.SmsbAppointmentInfoBo;
 import com.inspur.digital.domain.bo.SmsbStartInfoBo;
-import com.inspur.digital.domain.vo.SmsbStartInfoVo;
-import lombok.RequiredArgsConstructor;
+import com.inspur.digital.domain.vo.SmsbAppointmentInfoVo;
+import com.inspur.digital.domain.vo.SmsbScStartInfoVo;
+import com.inspur.digital.service.ISmsbAppointmentInfoService;
 import jakarta.servlet.http.HttpServletResponse;
-import jakarta.validation.constraints.*;
-import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.validation.annotation.Validated;
-import org.dromara.common.idempotent.annotation.RepeatSubmit;
-import org.dromara.common.log.annotation.Log;
-import org.dromara.common.web.core.BaseController;
-import org.dromara.common.mybatis.core.page.PageQuery;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
-import org.dromara.common.log.enums.BusinessType;
 import org.dromara.common.excel.utils.ExcelUtil;
-import com.inspur.digital.domain.vo.SmsbAppointmentInfoVo;
-import com.inspur.digital.domain.bo.SmsbAppointmentInfoBo;
-import com.inspur.digital.service.ISmsbAppointmentInfoService;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.web.core.BaseController;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 预约信息
@@ -74,28 +73,26 @@ public class SmsbAppointmentInfoController extends BaseController {
     }
 
     /**
-     * 前端获取欢迎语
+     * 数促项目
+     * 摄像头扫码,获取欢迎语
+     * 查询预约企业,实时切换知识库内容
      *
      * @param smsbStartInfoBo 预约信息对象
      */
     @SaIgnore
     @PostMapping("/getStartInfo")
-    public R<List<SmsbStartInfoVo>> getStartInfo(@RequestBody SmsbStartInfoBo smsbStartInfoBo) {
-        // 通过groupId查组内设备的identifier,再关联查出语音api和智能体api;
-//        欢迎语的放到智能体的流中
-        return smsbAppointmentInfoService.getStartInfo(smsbStartInfoBo);
+    public R<SmsbScStartInfoVo> getScStartInfo(@RequestBody SmsbStartInfoBo smsbStartInfoBo) {
+        return smsbAppointmentInfoService.getSmsbScStartInfoVo(smsbStartInfoBo);
     }
 
     /**
      * 新增预约信息
+     * 对外部平台开发接口
      */
-    // @SaCheckPermission("digital:appointmentInfo:add")
-    // @Log(title = "预约信息", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @SaIgnore
     @PostMapping()
     public R<Void> add(@Validated(AddGroup.class) @RequestBody SmsbAppointmentInfoBo bo) {
-        // return toAjax(smsbAppointmentInfoService.insertByBo(bo));
         return toAjax(smsbAppointmentInfoService.insertByBoV2(bo));
     }
 

+ 5 - 65
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/domain/bo/SmsbStartInfoBo.java

@@ -1,91 +1,31 @@
 package com.inspur.digital.domain.bo;
 
-import com.inspur.digital.domain.SmsbAppointmentInfo;
-import io.github.linpeilie.annotations.AutoMapper;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.dromara.common.core.validate.AddGroup;
-import org.dromara.common.core.validate.EditGroup;
-import org.dromara.common.mybatis.core.domain.BaseEntity;
-
-import java.util.Date;
 
 /**
- * 预约信息业务对象 smsb_appointment_info
+ * 数促项目
+ * 前端扫码 查询预约数据 返回欢迎词
  *
  * @author ZhiCheng Fan
  * @date 2025-06-27
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = SmsbAppointmentInfo.class, reverseConvertGenerate = false)
-public class SmsbStartInfoBo extends BaseEntity {
-
-    /**
-     * 预约id
-     */
-    private Long id;
-
-    /**
-     * 设备组id
-     */
-    private Long deviceGroupId;
+public class SmsbStartInfoBo {
 
     /**
      * 企业
      */
     private String enterprise;
 
-    /**
-     * 地区
-     */
-    private String region;
-
-    /**
-     * 行业
-     */
-    private String industry;
-
-    /**
-     * 大小
-     */
-    private String size;
-
-    /**
-     * 金额
-     */
-    private String money;
-
-    /**
-     * 类型
-     */
-    private String type;
-
-    /**
-     * 层次
-     */
-    private String gradation;
-
     /**
      * 电话
      */
     private String phone;
 
     /**
-     * 预约时间
+     * 设备唯一标识
      */
-    private String appointmentTime;
+    private String identifier;
 
-    /**
-     * 人数
-     */
-    private Integer peopleNum;
-
-    /**
-     * 备注
-     */
-    private String remark;
 
 }

+ 35 - 0
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/domain/vo/SmsbScDeviceStartInfoVo.java

@@ -0,0 +1,35 @@
+package com.inspur.digital.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 数促项目
+ * 前端扫码 查询预约数据 返回欢迎词
+ *
+ * @author ZhiCheng Fan
+ * @date 2025-06-27
+ */
+@Data
+public class SmsbScDeviceStartInfoVo {
+
+    /**
+     * 设备唯一标识
+     */
+    private String identifier;
+
+    /**
+     * 场景名称
+     */
+    private String sceneName;
+
+    /**
+     * 场景排序
+     */
+    private Long sceneSort;
+
+    /**
+     * 欢迎词
+     */
+    private String helloWorld;
+
+}

+ 43 - 0
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/domain/vo/SmsbScStartInfoVo.java

@@ -0,0 +1,43 @@
+package com.inspur.digital.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Fan
+ */
+@Data
+public class SmsbScStartInfoVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 预约ID
+     */
+    private Long appointmentId;
+
+    /**
+     * 预约企业
+     */
+    private String enterprise;
+
+    /**
+     * 预约手机哈
+     */
+    private String phone;
+
+    /**
+     * 设备对应 欢迎词
+     */
+    private List<SmsbScDeviceStartInfoVo> deviceStartInfoList;
+
+    /**
+     * 默认欢迎词
+     */
+    private String baseHelloWorld;
+
+}

+ 0 - 80
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/domain/vo/SmsbStartInfoVo.java

@@ -1,80 +0,0 @@
-package com.inspur.digital.domain.vo;
-
-import com.alibaba.excel.annotation.ExcelProperty;
-import com.inspur.device.domain.vo.SmsbDeviceChatKeyVo;
-import com.inspur.device.domain.vo.SmsbDeviceXfApiVo;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-/**
- * @author Fan
- */
-public class SmsbStartInfoVo implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 设备ID
-     */
-    @ExcelProperty(value = "设备ID")
-    private Long deviceId;
-
-    /**
-     * 设备identifier
-     */
-    @ExcelProperty(value = "设备identifier")
-    private String deviceIdentifier;
-
-    /**
-     * 设备语音api
-     */
-    @ExcelProperty(value = "设备语音api")
-    private SmsbDeviceXfApiVo smsbDeviceXfApiVo;
-
-    /**
-     * 设备智能体api
-     */
-    @ExcelProperty(value = "设备智能体api")
-    private SmsbDeviceChatKeyVo smsbDeviceChatKeyVo;
-
-    /**
-     * 欢迎语  这个要塞到流里
-     */
-//    @ExcelProperty(value = "欢迎语")
-//    private String welcomeMessage;
-
-
-    public Long getDeviceId() {
-        return deviceId;
-    }
-
-    public void setDeviceId(Long deviceId) {
-        this.deviceId = deviceId;
-    }
-
-    public String getDeviceIdentifier() {
-        return deviceIdentifier;
-    }
-
-    public void setDeviceIdentifier(String deviceIdentifier) {
-        this.deviceIdentifier = deviceIdentifier;
-    }
-
-    public SmsbDeviceXfApiVo getSmsbDeviceXfApiVo() {
-        return smsbDeviceXfApiVo;
-    }
-
-    public void setSmsbDeviceXfApiVo(SmsbDeviceXfApiVo smsbDeviceXfApiVo) {
-        this.smsbDeviceXfApiVo = smsbDeviceXfApiVo;
-    }
-
-    public SmsbDeviceChatKeyVo getSmsbDeviceChatKeyVo() {
-        return smsbDeviceChatKeyVo;
-    }
-
-    public void setSmsbDeviceChatKeyVo(SmsbDeviceChatKeyVo smsbDeviceChatKeyVo) {
-        this.smsbDeviceChatKeyVo = smsbDeviceChatKeyVo;
-    }
-}

+ 9 - 2
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/service/ISmsbAppointmentInfoService.java

@@ -3,7 +3,7 @@ package com.inspur.digital.service;
 import com.inspur.digital.domain.bo.SmsbStartInfoBo;
 import com.inspur.digital.domain.vo.SmsbAppointmentInfoVo;
 import com.inspur.digital.domain.bo.SmsbAppointmentInfoBo;
-import com.inspur.digital.domain.vo.SmsbStartInfoVo;
+import com.inspur.digital.domain.vo.SmsbScStartInfoVo;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -77,5 +77,12 @@ public interface ISmsbAppointmentInfoService {
      */
     Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
-    R<List<SmsbStartInfoVo>> getStartInfo(SmsbStartInfoBo smsbStartInfoBo);
+    /**
+     * 数促项目
+     * 摄像头扫码,获取欢迎语
+     * 查询预约企业,实时切换知识库内容
+     * @param smsbStartInfoBo
+     * @return
+     */
+    R<SmsbScStartInfoVo> getSmsbScStartInfoVo(SmsbStartInfoBo smsbStartInfoBo);
 }

+ 67 - 27
smsb-modules/smsb-digital-promotion/src/main/java/com/inspur/digital/service/impl/SmsbAppointmentInfoServiceImpl.java

@@ -10,19 +10,16 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.JsonObject;
-import com.inspur.device.domain.vo.SmsbDeviceChatKeyVo;
 import com.inspur.device.domain.vo.SmsbDeviceGroupRelVo;
-import com.inspur.device.domain.vo.SmsbDeviceXfApiVo;
-import com.inspur.device.mapper.SmsbDeviceChatKeyMapper;
 import com.inspur.device.mapper.SmsbDeviceGroupRelMapper;
-import com.inspur.device.mapper.SmsbDeviceMapper;
-import com.inspur.device.mapper.SmsbDeviceXfApiMapper;
 import com.inspur.digital.domain.SmsbAppointmentInfo;
 import com.inspur.digital.domain.SmsbDeviceChatScReport;
 import com.inspur.digital.domain.bo.SmsbAppointmentInfoBo;
 import com.inspur.digital.domain.bo.SmsbStartInfoBo;
 import com.inspur.digital.domain.vo.SmsbAppointmentInfoVo;
-import com.inspur.digital.domain.vo.SmsbStartInfoVo;
+import com.inspur.digital.domain.vo.SmsbDeviceChatScReportVo;
+import com.inspur.digital.domain.vo.SmsbScDeviceStartInfoVo;
+import com.inspur.digital.domain.vo.SmsbScStartInfoVo;
 import com.inspur.digital.mapper.SmsbAppointmentInfoMapper;
 import com.inspur.digital.mapper.SmsbDeviceChatScReportMapper;
 import com.inspur.digital.service.ISmsbAppointmentInfoService;
@@ -58,10 +55,7 @@ import java.util.Map;
 public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoService {
 
     private final SmsbAppointmentInfoMapper baseMapper;
-    private final SmsbDeviceGroupRelMapper groupRelMapper;
-    private final SmsbDeviceXfApiMapper xfApiMapper;
-    private final SmsbDeviceChatKeyMapper chatKeyMapper;
-    private final SmsbDeviceMapper deviceMapper;
+    private final SmsbDeviceGroupRelMapper smsbDeviceGroupRelMapper;
     private final SmsbDeviceChatScReportMapper smsbDeviceChatScReportMapper;
     @Autowired
     private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@@ -77,9 +71,24 @@ public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoServi
     private String scApiAppId;
     @Value("${dify.url}")
     private String difyBaseUrl;
-
     @Value("${dify.sc_agent.apiKey}")
     private String difyScAgentApiKey;
+    /**
+     * 默认场景序号 诊断评估
+     */
+    private static final Long DEFAULT_SCENE_SORT_1 = 1L;
+    /**
+     * 默认场景序号 看样学样
+     */
+    private static final Long DEFAULT_SCENE_SORT_2 = 2L;
+    /**
+     * 默认场景序号 场景体验
+     */
+    private static final Long DEFAULT_SCENE_SORT_3 = 3L;
+    /**
+     * 默认场景序号 套餐推荐
+     */
+    private static final Long DEFAULT_SCENE_SORT_4 = 4L;
 
     /**
      * 查询预约信息
@@ -360,21 +369,52 @@ public class SmsbAppointmentInfoServiceImpl implements ISmsbAppointmentInfoServi
     }
 
     @Override
-    public R<List<SmsbStartInfoVo>> getStartInfo(SmsbStartInfoBo smsbStartInfoBo) {
-        ArrayList<SmsbStartInfoVo> smsbStartInfoVos = new ArrayList<>();
-        List<SmsbDeviceGroupRelVo> smsbDeviceGroupRelVos = groupRelMapper.queryGroupRelVoListByGoupId(smsbStartInfoBo.getDeviceGroupId());
-        smsbDeviceGroupRelVos.forEach(smsbDeviceGroupRelVo -> {
-            SmsbStartInfoVo smsbStartInfoVo = new SmsbStartInfoVo();
-            String identifier = smsbDeviceGroupRelVo.getDeviceIdentifier();
-            Long id = deviceMapper.getDeviceVoByIdentifier(identifier).getId();
-            SmsbDeviceXfApiVo xfApiVo = xfApiMapper.selectVoById(1922207254116798466L);
-            SmsbDeviceChatKeyVo chatKeyVo = chatKeyMapper.selectVoByDeviceId(id);
-            smsbStartInfoVo.setDeviceId(id);
-            smsbStartInfoVo.setDeviceIdentifier(identifier);
-            smsbStartInfoVo.setSmsbDeviceXfApiVo(xfApiVo);
-            smsbStartInfoVo.setSmsbDeviceChatKeyVo(chatKeyVo);
-            smsbStartInfoVos.add(smsbStartInfoVo);
-        });
-        return R.ok(smsbStartInfoVos);
+    public R<SmsbScStartInfoVo> getSmsbScStartInfoVo(SmsbStartInfoBo smsbStartInfoBo) {
+        SmsbScStartInfoVo result = new SmsbScStartInfoVo();
+        // 根据前端传递的企业名称和手机号查询预约信息
+        String enterprise = smsbStartInfoBo.getEnterprise();
+        String phone = smsbStartInfoBo.getPhone();
+        SmsbAppointmentInfo appointmentInfo = baseMapper.selectOne(new LambdaQueryWrapper<SmsbAppointmentInfo>()
+            .eq(SmsbAppointmentInfo::getEnterprise, enterprise)
+            .eq(SmsbAppointmentInfo::getPhone, phone).orderByDesc(SmsbAppointmentInfo::getId).last("limit 1"));
+        // 未查询到预约信息 返回
+        if (appointmentInfo == null) {
+            result.setBaseHelloWorld("你好,我是小数智能分析助手,有什么可以帮你?");
+            // TODO  同步下发所有的公共知识库内容
+            return R.ok(result);
+        }
+        // 存在预约
+        result.setPhone(appointmentInfo.getPhone());
+        result.setEnterprise(appointmentInfo.getEnterprise());
+        result.setAppointmentId(appointmentInfo.getId());
+        // 通过设备标识查询出关联的设备组所有设备信息
+        List<SmsbDeviceGroupRelVo> deviceGroupRelList = smsbDeviceGroupRelMapper.getRelListByIdentifier(smsbStartInfoBo.getIdentifier());
+        if (CollectionUtils.isEmpty(deviceGroupRelList)) {
+            return R.ok(result);
+        }
+        List<SmsbScDeviceStartInfoVo> deviceStartInfoList = new ArrayList<>();
+        for (SmsbDeviceGroupRelVo deviceGroupRel : deviceGroupRelList) {
+            SmsbScDeviceStartInfoVo deviceStartInfo = new SmsbScDeviceStartInfoVo();
+            deviceStartInfo.setIdentifier(deviceGroupRel.getDeviceIdentifier());
+            deviceStartInfo.setSceneName(deviceGroupRel.getSceneName());
+            deviceStartInfo.setSceneSort(deviceGroupRel.getSceneSort());
+            if (deviceGroupRel.getSceneSort().equals(DEFAULT_SCENE_SORT_1)) {
+                SmsbDeviceChatScReportVo report = smsbDeviceChatScReportMapper.selectVoOne(new LambdaQueryWrapper<SmsbDeviceChatScReport>()
+                    .eq(SmsbDeviceChatScReport::getAppointmentId, appointmentInfo.getId())
+                    .eq(SmsbDeviceChatScReport::getType, 1)
+                    .orderByDesc(SmsbDeviceChatScReport::getAppointmentId).last("limit 1"));
+                deviceStartInfo.setHelloWorld(report.getContent());
+            } else if (deviceGroupRel.getSceneSort().equals(DEFAULT_SCENE_SORT_2)) {
+
+            } else if (deviceGroupRel.getSceneSort().equals(DEFAULT_SCENE_SORT_3)) {
+
+            } else if (deviceGroupRel.getSceneSort().equals(DEFAULT_SCENE_SORT_4)) {
+
+            }
+            deviceStartInfoList.add(deviceStartInfo);
+        }
+        result.setDeviceStartInfoList(deviceStartInfoList);
+        // TODO 异步现场启动 更新知识库
+        return R.ok(result);
     }
 }