| @@ -1,6 +1,7 @@ | |||
| sonar.projectKey=digimeta-MultiSaas | |||
| sonar.projectName=digimeta-MultiSaas | |||
| sonar.sourceEncoding=UTF-8 | |||
| sonar.projectVersion=0.8 | |||
| @@ -12,5 +13,5 @@ sonar.java.binaries=. | |||
| sonar.java.source=1.8 | |||
| sonar.java.target=1.8 | |||
| sonar.modules=xueyi-system,xueyi-message #?????????? | |||
| sonar.sourceEncoding=UTF-8 | |||
| @@ -8,6 +8,7 @@ import com.xueyi.system.api.digitalmans.domain.po.DmDigitalmanExtPo; | |||
| import com.xueyi.system.api.organize.feign.factory.RemoteUserFallbackFactory; | |||
| import org.springframework.cloud.openfeign.FeignClient; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestHeader; | |||
| import org.springframework.web.bind.annotation.RequestParam; | |||
| @@ -34,4 +35,6 @@ public interface RemoteDigitalmanService { | |||
| public R<Integer> initInner(@RequestParam(value = "snCode") String snCode, | |||
| @RequestHeader(SecurityConstants.ENTERPRISE_ID) Long enterpriseId, @RequestHeader(SecurityConstants.SOURCE_NAME) String sourceName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
| @PostMapping("/man/inner/sync") | |||
| public R<Boolean> sync(@RequestHeader(SecurityConstants.ENTERPRISE_ID) Long enterpriseId, @RequestHeader(SecurityConstants.SOURCE_NAME) String sourceName, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
| } | |||
| @@ -4,12 +4,17 @@ import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.constant.basic.ServiceConstants; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
| import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo; | |||
| import com.xueyi.tenant.api.tenant.feign.factory.RemoteTenantFallbackFactory; | |||
| import org.springframework.cloud.openfeign.FeignClient; | |||
| import org.springframework.web.bind.annotation.GetMapping; | |||
| import org.springframework.web.bind.annotation.PostMapping; | |||
| import org.springframework.web.bind.annotation.RequestBody; | |||
| import org.springframework.web.bind.annotation.RequestHeader; | |||
| import java.util.List; | |||
| /** | |||
| * 租户服务 | |||
| * | |||
| @@ -27,4 +32,8 @@ public interface RemoteTenantService { | |||
| */ | |||
| @PostMapping("/tenant/register") | |||
| R<Boolean> registerTenantInfo(@RequestBody JSONObject register, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); | |||
| @GetMapping("/tenant/tenant_list") | |||
| R<List<TeTenantDto>> tenantList(); | |||
| } | |||
| @@ -2,11 +2,14 @@ package com.xueyi.tenant.api.tenant.feign.factory; | |||
| import com.alibaba.fastjson2.JSONObject; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
| import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| import org.springframework.cloud.openfeign.FallbackFactory; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.List; | |||
| /** | |||
| * 租户服务降级处理 | |||
| @@ -26,6 +29,11 @@ public class RemoteTenantFallbackFactory implements FallbackFactory<RemoteTenant | |||
| { | |||
| return R.fail("注册租户失败:" + throwable.getMessage()); | |||
| } | |||
| @Override | |||
| public R<List<TeTenantDto>> tenantList() { | |||
| return null; | |||
| } | |||
| }; | |||
| } | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| package com.xueyi.job.task; | |||
| import com.xueyi.common.cache.utils.SourceUtil; | |||
| import com.xueyi.common.core.utils.core.StrUtil; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.system.api.model.Source; | |||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
| import com.xueyi.tenant.api.tenant.feign.RemoteTenantService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.List; | |||
| /** | |||
| * 定时任务调度测试 | |||
| * | |||
| * @author xueyi | |||
| */ | |||
| @Component("dgmanTask") | |||
| public class DgmanTask { | |||
| @Autowired | |||
| RemoteTenantService tenantService; | |||
| public void ryParams(String params) { | |||
| System.out.println(StrUtil.format("执行有参方法:参数{}", params)); | |||
| } | |||
| public void dgmanMonitor() { | |||
| R<List<TeTenantDto>> listR = tenantService.tenantList(); | |||
| if (listR.isFail()) { | |||
| System.out.println("租户列表获取失败"); | |||
| return; | |||
| } | |||
| listR.getData().forEach(item->{ | |||
| // 获取数据源 | |||
| Source source = SourceUtil.getSourceCache(item.getStrategyId()); | |||
| // 更新租户内数字人信息 | |||
| }); | |||
| System.out.println("监控心跳执行完成"); | |||
| } | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.xueyi.system.digitalmans.controller; | |||
| import com.xueyi.common.core.constant.basic.BaseConstants; | |||
| import com.xueyi.common.core.constant.basic.SecurityConstants; | |||
| import com.xueyi.common.core.constant.digitalman.InitConstants; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| @@ -74,6 +75,18 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm | |||
| return R.ok(super.baseService.selectExt(devId)); | |||
| } | |||
| @PostMapping("/inner/sync") | |||
| public R<Boolean> sync() { | |||
| // 获取账号绑定的设备号 | |||
| List<String> devices = super.baseService.selectRegisteredDevices(); | |||
| devices.forEach(item->{ | |||
| // 获取并更新在线状态 | |||
| super.baseService.syncRegisteredDevice(item); | |||
| // 数字人预警机制 | |||
| }); | |||
| return null; | |||
| } | |||
| /** | |||
| * 同步数字人信息 | 内部调用 | |||
| */ | |||
| @@ -139,7 +152,7 @@ public class DmDigitalmanController extends BaseController<DmDigitalmanQuery, Dm | |||
| * 数字人工作时间修改 | |||
| */ | |||
| @PutMapping(value = "/worktime") | |||
| @Log(title = "数字人基础管理", businessType = BusinessType.UPDATE) | |||
| @Log(title = "数字人基础管理-工作时间", businessType = BusinessType.UPDATE) | |||
| public AjaxResult worktimeEdit(@Validated({V_E.class}) @RequestBody DmDigitalmanWorktimeDto customMadeDto) { | |||
| customMadeDto.initOperate(BaseConstants.Operate.EDIT); | |||
| return toAjax(baseService.worktimeUpdate(customMadeDto)); | |||
| @@ -82,6 +82,7 @@ public class DmModelController extends BaseController<DmModelQuery, DmModelDto, | |||
| * 上传资源修改 | |||
| */ | |||
| @PostMapping(value = "/upload_resource") | |||
| @Log(title = "资源管理", businessType = BusinessType.OTHER) | |||
| public AjaxResult uploadResource(@Validated({V_A.class}) @RequestBody DmModelUploadDto modelUploadDto) { | |||
| return toAjax(modelService.uploadResource(modelUploadDto)); | |||
| @@ -105,12 +105,12 @@ public class DmSkillController extends BaseController<DmSkillQuery, DmSkillDto, | |||
| } | |||
| /** | |||
| * 访客新增 | |||
| * 技能新增 | |||
| */ | |||
| @Override | |||
| @PostMapping | |||
| @RequiresPermissions(Auth.DM_SKILL_ADD) | |||
| @Log(title = "访客管理", businessType = BusinessType.INSERT) | |||
| @Log(title = "技能管理", businessType = BusinessType.INSERT) | |||
| public AjaxResult add(@Validated({V_A.class}) @RequestBody DmSkillDto dmVisitors) { | |||
| return super.add(dmVisitors); | |||
| } | |||
| @@ -130,18 +130,18 @@ public class DmSkillController extends BaseController<DmSkillQuery, DmSkillDto, | |||
| @Override | |||
| @PutMapping | |||
| @RequiresPermissions(Auth.DM_SKILL_EDIT) | |||
| @Log(title = "访客管理", businessType = BusinessType.UPDATE) | |||
| @Log(title = "技能管理", businessType = BusinessType.UPDATE) | |||
| public AjaxResult edit(@Validated({V_E.class}) @RequestBody DmSkillDto dmVisitors) { | |||
| return super.edit(dmVisitors); | |||
| } | |||
| /** | |||
| * 访客批量删除 | |||
| * 技能批量删除 | |||
| */ | |||
| @Override | |||
| @DeleteMapping("/batch/{idList}") | |||
| @RequiresPermissions(Auth.DM_SKILL_DEL) | |||
| @Log(title = "访客管理", businessType = BusinessType.DELETE) | |||
| @Log(title = "技能管理", businessType = BusinessType.DELETE) | |||
| public AjaxResult batchRemove(@PathVariable List<Long> idList) { | |||
| return super.batchRemove(idList); | |||
| } | |||
| @@ -8,6 +8,7 @@ import com.xueyi.system.digitalmans.domain.dto.DmDigitalmanDto; | |||
| import com.xueyi.system.digitalmans.domain.query.DmDigitalmanQuery; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| /** | |||
| * 数字人基础管理 服务层 | |||
| @@ -27,4 +28,8 @@ public interface IDmDigitalmanService extends IBaseService<DmDigitalmanQuery, Dm | |||
| int initDigitalman(String snCode); | |||
| DmDigitalmanExtPo selectExt(String devId); | |||
| List<String> selectRegisteredDevices(); | |||
| boolean syncRegisteredDevice(String deviceId); | |||
| } | |||
| @@ -41,6 +41,7 @@ import org.springframework.stereotype.Service; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| import java.util.Objects; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| @@ -299,8 +300,6 @@ public class DmDigitalmanServiceImpl extends BaseServiceImpl<DmDigitalmanQuery, | |||
| dmSkillService.batchInitInsert(digitalmanDto); | |||
| // 添加展示页 | |||
| DmModelDto modelDto = new DmModelDto(); | |||
| modelDto.setName(digitalmanDto.getName()); | |||
| @@ -384,4 +383,26 @@ public class DmDigitalmanServiceImpl extends BaseServiceImpl<DmDigitalmanQuery, | |||
| this.worktimeUpdate(worktimeDto); | |||
| return 0; | |||
| } | |||
| @Override | |||
| public List<String> selectRegisteredDevices() { | |||
| List<DmDigitalmanExtPo> dmDigitalmanPoList = dmDigitalmanExtMapper.selectList(Wrappers.<DmDigitalmanExtPo>query().lambda() | |||
| .isNotNull(DmDigitalmanExtPo::getDeviceId)); | |||
| return dmDigitalmanPoList.stream().map(DmDigitalmanExtPo::getDeviceId) | |||
| .filter(Objects::nonNull) | |||
| .filter(str->!str.isEmpty()) | |||
| .collect(Collectors.toList()); | |||
| } | |||
| @Override | |||
| public boolean syncRegisteredDevice(String deviceId) { | |||
| DmDigitalmanExtPo po = dmDigitalmanExtMapper.selectOne(Wrappers.<DmDigitalmanExtPo>query().lambda() | |||
| .eq(DmDigitalmanExtPo::getDeviceId,deviceId)); | |||
| if (po != null) { | |||
| po.setIsOnline(Integer.parseInt(transferService.getDeviceOnlineStatus(deviceId).get("msg").toString())); | |||
| dmDigitalmanExtMapper.updateById(po); | |||
| return true; | |||
| } | |||
| return false; | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| package com.xueyi.system.digitalmans.service.impl; | |||
| import com.github.pagehelper.Page; | |||
| import com.xueyi.common.core.constant.digitalman.InitConstants; | |||
| import com.xueyi.common.core.constant.digitalman.MessageConstants; | |||
| import com.xueyi.common.core.utils.core.IdUtil; | |||
| @@ -15,6 +16,7 @@ import com.xueyi.system.digitalmans.domain.query.DmManDeviceQuery; | |||
| import com.xueyi.system.digitalmans.manager.IDmManDeviceManager; | |||
| import com.xueyi.system.digitalmans.mapper.DmManDeviceMapper; | |||
| import com.xueyi.system.digitalmans.service.IDmManDeviceService; | |||
| import com.xueyi.system.resource.service.IDmResourcesService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.data.redis.core.RedisTemplate; | |||
| import org.springframework.stereotype.Service; | |||
| @@ -43,6 +45,8 @@ public class DmManDeviceServiceImpl extends BaseServiceImpl<DmManDeviceQuery, Dm | |||
| @Autowired | |||
| RedisTemplate<String, Serializable> manDeviceDtoRedisTemplate; | |||
| /** | |||
| * 查询数字人设备管理对象列表 | 数据权限 | |||
| * | |||
| @@ -63,6 +67,7 @@ public class DmManDeviceServiceImpl extends BaseServiceImpl<DmManDeviceQuery, Dm | |||
| item.setOnlineStatus(InitConstants.DEVICE_ACTIVATE_STATUS_NOT_ACTIVATE); | |||
| } | |||
| }); | |||
| return list; | |||
| } | |||
| @@ -5,6 +5,7 @@ import com.xueyi.common.core.constant.system.OrganizeConstants; | |||
| import com.xueyi.common.core.utils.core.CollUtil; | |||
| import com.xueyi.common.core.utils.core.StrUtil; | |||
| import com.xueyi.common.core.web.result.AjaxResult; | |||
| import com.xueyi.common.core.web.result.R; | |||
| import com.xueyi.common.core.web.validate.V_A; | |||
| import com.xueyi.common.core.web.validate.V_E; | |||
| import com.xueyi.common.log.annotation.Log; | |||
| @@ -15,6 +16,7 @@ import com.xueyi.common.security.annotation.RequiresPermissions; | |||
| import com.xueyi.common.security.auth.Auth; | |||
| import com.xueyi.common.web.entity.controller.BaseController; | |||
| import com.xueyi.tenant.api.tenant.domain.dto.TeTenantDto; | |||
| import com.xueyi.tenant.api.tenant.domain.po.TeTenantPo; | |||
| import com.xueyi.tenant.api.tenant.domain.query.TeTenantQuery; | |||
| import com.xueyi.tenant.tenant.domain.model.TeTenantRegister; | |||
| import com.xueyi.tenant.tenant.service.ITeTenantService; | |||
| @@ -51,6 +53,10 @@ public class TeTenantController extends BaseController<TeTenantQuery, TeTenantDt | |||
| return add(tenantRegister); | |||
| } | |||
| @GetMapping("/tenant_list") | |||
| R<List<TeTenantDto>> tenantList() { | |||
| return R.ok(super.baseService.selectList(new TeTenantQuery())); | |||
| } | |||
| /** | |||
| * 查询租户列表 | |||
| */ | |||