yucheng 3 lat temu
rodzic
commit
8f9441f465
14 zmienionych plików z 569 dodań i 20 usunięć
  1. 1 1
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/config/ProjectMessageConfig.java
  2. 87 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectDigitalController.java
  3. 87 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectRelationController.java
  4. 12 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/dao/ObjectDigitalMapper.java
  5. 12 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/dao/ObjectRelationMapper.java
  6. 4 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/entity/ObjectDigital.java
  7. 37 2
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageHandler.java
  8. 35 13
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageVO.java
  9. 57 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/IObjectDigitalService.java
  10. 50 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/IObjectRelationService.java
  11. 105 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/impl/ObjectDigitalServiceImpl.java
  12. 54 0
      dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/impl/ObjectRelationServiceImpl.java
  13. 9 4
      dc-common/src/main/java/com/persagy/dc/common/handler/AppContextHandler.java
  14. 19 0
      dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/helper/DynamicDataSourceHelper.java

+ 1 - 1
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/config/ProjectMessageConfig.java

@@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration;
  */
  */
 @Slf4j
 @Slf4j
 @Configuration
 @Configuration
-public class ProjectMessageConfig {
+public class DigitalRabbitConfig {
 
 
     /** 项目消息 - Exchange */
     /** 项目消息 - Exchange */
     public static final String PROJECT_EXCHANGE = "saas.common.topic";
     public static final String PROJECT_EXCHANGE = "saas.common.topic";

+ 87 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectDigitalController.java

@@ -0,0 +1,87 @@
+package com.persagy.dc.digital.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.basic.model.QueryCriteria;
+import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.common.constant.ResponseCode;
+import com.persagy.dc.common.exception.BusinessException;
+import com.persagy.dc.common.model.response.CommonResult;
+import com.persagy.dc.common.model.response.PageList;
+import com.persagy.dc.common.utils.ResultHelper;
+import com.persagy.dc.digital.entity.ObjectDigital;
+import com.persagy.dc.digital.service.IObjectDigitalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 对象数据 Controller
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+@RestController
+@RequestMapping("/object/digital")
+public class ObjectDigitalController {
+
+    @Autowired
+    private IObjectDigitalService service;
+
+    @PostMapping("query")
+    public CommonResult<PageList<ObjectDigital>> query(@RequestBody QueryCriteria criteria) {
+        if(criteria == null) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        QueryWrapper<ObjectDigital> wrapper = new QueryWrapper<>();
+        // 添加所属项目条件
+        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        // 转换查询条件
+        criteria.toWrapper(wrapper);
+        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        return ResultHelper.multi(page.getRecords());
+    }
+
+    @PostMapping("/create")
+    public CommonResult<ObjectDigital> create(@Valid @RequestBody ObjectDigital vo){
+        List<ObjectDigital> voList = CollUtil.newArrayList(vo);
+        service.insert(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/createBatch")
+    public CommonResult<PageList<ObjectDigital>> createBatch(@Valid @RequestBody List<ObjectDigital> voList){
+        voList = service.insert(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/update")
+    public CommonResult<ObjectDigital> update(@Valid @RequestBody ObjectDigital vo){
+        List<ObjectDigital> voList = CollUtil.newArrayList(vo);
+        service.update(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/updateBatch")
+    public CommonResult<PageList<ObjectDigital>> updateBatch(@Valid @RequestBody List<ObjectDigital> voList){
+        voList = service.update(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/delete")
+    public CommonResult delete(@RequestBody String id){
+        service.delete(CollUtil.newArrayList(id));
+        return ResultHelper.success();
+    }
+
+    @PostMapping("/deleteBatch")
+    public CommonResult deleteBatch(@RequestBody List<String> id){
+        service.delete(id);
+        return ResultHelper.success();
+    }
+}

+ 87 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/controller/ObjectRelationController.java

@@ -0,0 +1,87 @@
+package com.persagy.dc.digital.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.basic.model.QueryCriteria;
+import com.persagy.dc.basic.utils.DigitalCommonUtils;
+import com.persagy.dc.common.constant.ResponseCode;
+import com.persagy.dc.common.exception.BusinessException;
+import com.persagy.dc.common.model.response.CommonResult;
+import com.persagy.dc.common.model.response.PageList;
+import com.persagy.dc.common.utils.ResultHelper;
+import com.persagy.dc.digital.entity.ObjectRelation;
+import com.persagy.dc.digital.service.IObjectRelationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 关系数据 Controller
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+@RestController
+@RequestMapping("/object/relation")
+public class ObjectRelationController {
+
+    @Autowired
+    private IObjectRelationService service;
+
+    @PostMapping("query")
+    public CommonResult<PageList<ObjectRelation>> query(@RequestBody QueryCriteria criteria) {
+        if(criteria == null) {
+            throw new BusinessException(ResponseCode.A0400.getCode(), ResponseCode.A0400.getDesc());
+        }
+        QueryWrapper<ObjectRelation> wrapper = new QueryWrapper<>();
+        // 添加所属项目条件
+        DigitalCommonUtils.ensureProjectCriteria(wrapper);
+        // 转换查询条件
+        criteria.toWrapper(wrapper);
+        Page page = service.queryByCondition(criteria.toPage(), wrapper);
+        return ResultHelper.multi(page.getRecords());
+    }
+
+    @PostMapping("/create")
+    public CommonResult<ObjectRelation> create(@Valid @RequestBody ObjectRelation vo){
+        List<ObjectRelation> voList = CollUtil.newArrayList(vo);
+        service.insert(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/createBatch")
+    public CommonResult<PageList<ObjectRelation>> createBatch(@Valid @RequestBody List<ObjectRelation> voList){
+        voList = service.insert(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/update")
+    public CommonResult<ObjectRelation> update(@Valid @RequestBody ObjectRelation vo){
+        List<ObjectRelation> voList = CollUtil.newArrayList(vo);
+        service.update(voList);
+        return ResultHelper.single(vo);
+    }
+
+    @PostMapping("/updateBatch")
+    public CommonResult<PageList<ObjectRelation>> updateBatch(@Valid @RequestBody List<ObjectRelation> voList){
+        voList = service.update(voList);
+        return ResultHelper.multi(voList);
+    }
+
+    @PostMapping("/delete")
+    public CommonResult delete(@RequestBody String id){
+        service.delete(CollUtil.newArrayList(id));
+        return ResultHelper.success();
+    }
+
+    @PostMapping("/deleteBatch")
+    public CommonResult deleteBatch(@RequestBody List<String> id){
+        service.delete(id);
+        return ResultHelper.success();
+    }
+}

+ 12 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/dao/ObjectDigitalMapper.java

@@ -0,0 +1,12 @@
+package com.persagy.dc.digital.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dc.digital.entity.ObjectDigital;
+
+/**
+ * 对象数据 DAO
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+public interface ObjectDigitalMapper extends BaseMapper<ObjectDigital> {
+}

+ 12 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/dao/ObjectRelationMapper.java

@@ -0,0 +1,12 @@
+package com.persagy.dc.digital.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.persagy.dc.digital.entity.ObjectRelation;
+
+/**
+ * 关系数据 DAO
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+public interface ObjectRelationMapper extends BaseMapper<ObjectRelation> {
+}

+ 4 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/entity/ObjectDigital.java

@@ -1,6 +1,8 @@
 package com.persagy.dc.digital.entity;
 package com.persagy.dc.digital.entity;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.persagy.dc.common.model.entity.AuditableEntity;
 import com.persagy.dc.common.model.entity.AuditableEntity;
 import lombok.Data;
 import lombok.Data;
@@ -30,8 +32,10 @@ public class ObjectDigital extends AuditableEntity {
     /** 组标识 */
     /** 组标识 */
     private Integer grouping;
     private Integer grouping;
     /** 边类型编码 */
     /** 边类型编码 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
     private ObjectNode infos;
     private ObjectNode infos;
     /** 虚点清单 */
     /** 虚点清单 */
+    @TableField(typeHandler = JacksonTypeHandler.class)
     private List<String> virtualCodes;
     private List<String> virtualCodes;
     /** 创建应用 */
     /** 创建应用 */
     private String createApp;
     private String createApp;

+ 37 - 2
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageHandler.java

@@ -1,15 +1,22 @@
 package com.persagy.dc.digital.handler;
 package com.persagy.dc.digital.handler;
 
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.persagy.dc.amqp.handler.AbstractRabbitHandlerTemplate;
 import com.persagy.dc.amqp.handler.AbstractRabbitHandlerTemplate;
+import com.persagy.dc.common.constant.CommonConstant;
+import com.persagy.dc.common.context.AppContext;
 import com.persagy.dc.common.exception.BusinessException;
 import com.persagy.dc.common.exception.BusinessException;
-import com.persagy.dc.digital.config.ProjectMessageConfig;
+import com.persagy.dc.digital.config.DigitalRabbitConfig;
 import com.persagy.dc.digital.entity.ObjectDigital;
 import com.persagy.dc.digital.entity.ObjectDigital;
+import com.persagy.dc.digital.service.IObjectDigitalService;
+import com.persagy.dc.mybatis.helper.DynamicDataSourceHelper;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
@@ -19,11 +26,14 @@ import java.io.IOException;
  * @date 2021-06-25
  * @date 2021-06-25
  */
  */
 @Slf4j
 @Slf4j
-@RabbitListener(queues = ProjectMessageConfig.PROJECT_QUEUE)
+@Component
+@RabbitListener(queues = DigitalRabbitConfig.PROJECT_QUEUE)
 public class ProjectMessageHandler extends AbstractRabbitHandlerTemplate {
 public class ProjectMessageHandler extends AbstractRabbitHandlerTemplate {
 
 
     @Autowired
     @Autowired
     private ObjectMapper objectMapper;
     private ObjectMapper objectMapper;
+    @Autowired
+    private IObjectDigitalService digitalService;
 
 
     /**
     /**
      * 消费
      * 消费
@@ -35,10 +45,35 @@ public class ProjectMessageHandler extends AbstractRabbitHandlerTemplate {
     protected void handler(String message, Channel channel, Message vo) {
     protected void handler(String message, Channel channel, Message vo) {
         try {
         try {
             ProjectMessageVO msgVO = objectMapper.readValue(message, ProjectMessageVO.class);
             ProjectMessageVO msgVO = objectMapper.readValue(message, ProjectMessageVO.class);
+            initContextInfo(msgVO);
             ObjectDigital project = msgVO.toObjectDigital();
             ObjectDigital project = msgVO.toObjectDigital();
+            // 幂等处理 - 检查是否已经存在
+            ObjectDigital dbVO = digitalService.load(project.getId());
+            if(dbVO == null) {
+                digitalService.insert(CollUtil.newArrayList(project));
+            } else {
+                digitalService.update(CollUtil.newArrayList(project));
+            }
         } catch (IOException e) {
         } catch (IOException e) {
             log.error(e.getMessage(), e);
             log.error(e.getMessage(), e);
             throw new BusinessException(e.getMessage(), e);
             throw new BusinessException(e.getMessage(), e);
         }
         }
     }
     }
+
+    /**
+     * 初始化上下文,切换数据源
+     * @param vo
+     */
+    private void initContextInfo(ProjectMessageVO vo) {
+        AppContext.getContext().setGroupCode(vo.getGroupCode());
+        AppContext.getContext().setProjectId(vo.getProjectId());
+        AppContext.getContext().setAppId("BOSS");
+        String userId = vo.getUpdateUser();
+        // 无用户时,默认为默认系统用户
+        if(StrUtil.isBlank(userId)) {
+            userId = CommonConstant.DEFAULT_ID;
+        }
+        AppContext.getContext().setAccountId(userId);
+        DynamicDataSourceHelper.loadDataSource();
+    }
 }
 }

+ 35 - 13
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/handler/ProjectMessageVO.java

@@ -1,8 +1,10 @@
 package com.persagy.dc.digital.handler;
 package com.persagy.dc.digital.handler;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.JsonNodeFactory;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.persagy.dc.common.context.AppContext;
 import com.persagy.dc.common.lang.PsDateTime;
 import com.persagy.dc.common.lang.PsDateTime;
 import com.persagy.dc.digital.entity.ObjectDigital;
 import com.persagy.dc.digital.entity.ObjectDigital;
 import lombok.Data;
 import lombok.Data;
@@ -107,9 +109,9 @@ public class ProjectMessageVO {
         project.setVirtualCodes(Collections.emptyList());
         project.setVirtualCodes(Collections.emptyList());
         project.setValid(valid);
         project.setValid(valid);
         if("create".equalsIgnoreCase(type)) {
         if("create".equalsIgnoreCase(type)) {
-            project.setCreateApp("bmp");
+            project.setCreateApp(AppContext.getContext().getAppId());
         } else {
         } else {
-            project.setUpdateApp("bmp");
+            project.setUpdateApp(AppContext.getContext().getAppId());
         }
         }
         project.setInfos(toObjectInfos());
         project.setInfos(toObjectInfos());
         return project;
         return project;
@@ -120,18 +122,38 @@ public class ProjectMessageVO {
      * @return
      * @return
      */
      */
     public ObjectNode toObjectInfos() {
     public ObjectNode toObjectInfos() {
-        // 构建infos
+        // 构建infos - 为空不写入
         ObjectNode infos = JsonNodeFactory.instance.objectNode();
         ObjectNode infos = JsonNodeFactory.instance.objectNode();
-        infos.put("province", provinceCode);
-        infos.put("city", cityCode);
-        infos.put("urbanZone", zoneCode);
-        infos.put("longitude", longitude);
-        infos.put("latitude", latitude);
-        infos.put("address", location);
-        infos.put("businessOpeningTime", openTime.toString("yyyyMMdd"));
-        infos.put("projFuncType", projectFun);
-        infos.put("climateZone", projectWeather);
-        infos.put("groupManageZone", manageZone);
+        if(StrUtil.isNotBlank(provinceCode)) {
+            infos.put("province", provinceCode);
+        }
+        if(StrUtil.isNotBlank(cityCode)) {
+            infos.put("city", cityCode);
+        }
+        if(StrUtil.isNotBlank(zoneCode)) {
+            infos.put("urbanZone", zoneCode);
+        }
+        if(longitude != null) {
+            infos.put("longitude", longitude);
+        }
+        if(latitude != null) {
+            infos.put("latitude", latitude);
+        }
+        if(StrUtil.isNotBlank(location)) {
+            infos.put("address", location);
+        }
+        if(openTime != null) {
+            infos.put("businessOpeningTime", openTime.toString("yyyyMMdd"));
+        }
+        if(StrUtil.isNotBlank(projectFun)) {
+            infos.put("projFuncType", projectFun);
+        }
+        if(StrUtil.isNotBlank(projectWeather)) {
+            infos.put("climateZone", projectWeather);
+        }
+        if(StrUtil.isNotBlank(manageZone)) {
+            infos.put("groupManageZone", manageZone);
+        }
         // 添加图片
         // 添加图片
         if(CollUtil.isNotEmpty(projectImage)) {
         if(CollUtil.isNotEmpty(projectImage)) {
             projectImage.forEach(p -> infos.withArray("projPic").addPOJO(p));
             projectImage.forEach(p -> infos.withArray("projPic").addPOJO(p));

+ 57 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/IObjectDigitalService.java

@@ -0,0 +1,57 @@
+package com.persagy.dc.digital.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.digital.entity.ObjectDigital;
+
+import java.util.List;
+
+/**
+ * 对象数据 接口
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+public interface IObjectDigitalService {
+
+    /**
+     * 通过ID查询
+     * @param id 主键
+     * @return
+     */
+    ObjectDigital load(String id);
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectDigital> queryByCondition(Wrapper<ObjectDigital> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectDigital> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectDigital> insert(List<ObjectDigital> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectDigital> update(List<ObjectDigital> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 50 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/IObjectRelationService.java

@@ -0,0 +1,50 @@
+package com.persagy.dc.digital.service;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.digital.entity.ObjectRelation;
+
+import java.util.List;
+
+/**
+ * 关系数据 接口
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+public interface IObjectRelationService {
+
+    /**
+     * 按条件查询
+     * @param queryWrapper 查询条件
+     * @return 列表
+     */
+    List<ObjectRelation> queryByCondition(Wrapper<ObjectRelation> queryWrapper);
+
+    /**
+     * 按条件查询
+     * @param page 分页条件
+     * @param queryWrapper 查询条件
+     * @return 分页结果
+     */
+    Page queryByCondition(Page page, Wrapper<ObjectRelation> queryWrapper);
+
+    /**
+     * 新增
+     * @param voList 待新增数据
+     * @return 新增后数据
+     */
+    List<ObjectRelation> insert(List<ObjectRelation> voList);
+
+    /**
+     * 修改
+     * @param voList 待修改数据
+     * @return 修改后数据
+     */
+    List<ObjectRelation> update(List<ObjectRelation> voList);
+
+    /**
+     * 删除
+     * @param idList 主键
+     */
+    void delete(List<String> idList);
+}

+ 105 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/impl/ObjectDigitalServiceImpl.java

@@ -0,0 +1,105 @@
+package com.persagy.dc.digital.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.basic.utils.DigitalMessageHelper;
+import com.persagy.dc.common.constant.ValidEnum;
+import com.persagy.dc.common.model.entity.BaseEntity;
+import com.persagy.dc.digital.dao.ObjectDigitalMapper;
+import com.persagy.dc.digital.entity.ObjectDigital;
+import com.persagy.dc.digital.service.IObjectDigitalService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 对象数据 实现类
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ObjectDigitalServiceImpl implements IObjectDigitalService {
+
+    @Resource
+    private ObjectDigitalMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public ObjectDigital load(String id) {
+        return dao.selectById(id);
+    }
+
+    @Override
+    public List<ObjectDigital> queryByCondition(Wrapper<ObjectDigital> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectDigital> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectDigital> insert(List<ObjectDigital> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+//        validateOnSave(voList, false);
+        voList.forEach(vo -> {
+            // 新增
+            dao.insert(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public List<ObjectDigital> update(List<ObjectDigital> voList) {
+        if(CollUtil.isEmpty(voList)) {
+            return null;
+        }
+//        validateOnSave(voList, true);
+        List<String> idList = CollUtil.getFieldValues(voList, BaseEntity.PROP_ID, String.class);
+        List<ObjectDigital> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectDigital> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        voList.forEach(vo -> {
+            ObjectDigital dbVO = MapUtil.get(dbMap, vo.getId(), ObjectDigital.class);
+            // 容错处理
+            if(dbVO == null) {
+                return;
+            }
+            // 修改
+            dao.updateById(vo);
+        });
+        return voList;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+        if(CollUtil.isEmpty(idList)) {
+            return;
+        }
+        List<ObjectDigital> dbList = dao.selectBatchIds(idList);
+        Map<String, ObjectDigital> dbMap = CollectionUtil.fieldValueMap(dbList, BaseEntity.PROP_ID);
+        idList.forEach(id -> {
+            ObjectDigital dbVO = MapUtil.get(dbMap, id, ObjectDigital.class);
+            // 容错处理
+            if(dbVO == null) {
+                return;
+            }
+            // 删除
+            ObjectDigital vo = new ObjectDigital();
+            vo.setId(id);
+            vo.setValid(ValidEnum.FALSE.getType());
+            dao.updateById(vo);
+        });
+    }
+}

+ 54 - 0
dc-business/dc-digital/src/main/java/com/persagy/dc/digital/service/impl/ObjectRelationServiceImpl.java

@@ -0,0 +1,54 @@
+package com.persagy.dc.digital.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.persagy.dc.basic.utils.DigitalMessageHelper;
+import com.persagy.dc.digital.dao.ObjectRelationMapper;
+import com.persagy.dc.digital.entity.ObjectRelation;
+import com.persagy.dc.digital.service.IObjectRelationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 关系数据 实现类
+ * @author Charlie Yu
+ * @date 2021-07-08
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class ObjectRelationServiceImpl implements IObjectRelationService {
+
+    @Resource
+    private ObjectRelationMapper dao;
+    @Autowired
+    private DigitalMessageHelper messageSender;
+
+    @Override
+    public List<ObjectRelation> queryByCondition(Wrapper<ObjectRelation> queryWrapper) {
+        return dao.selectList(queryWrapper);
+    }
+
+    @Override
+    public Page queryByCondition(Page page, Wrapper<ObjectRelation> queryWrapper) {
+        return dao.selectPage(page, queryWrapper);
+    }
+
+    @Override
+    public List<ObjectRelation> insert(List<ObjectRelation> voList) {
+        return null;
+    }
+
+    @Override
+    public List<ObjectRelation> update(List<ObjectRelation> voList) {
+        return null;
+    }
+
+    @Override
+    public void delete(List<String> idList) {
+
+    }
+}

+ 9 - 4
dc-common/src/main/java/com/persagy/dc/common/handler/AppContextHandler.java

@@ -2,6 +2,7 @@ package com.persagy.dc.common.handler;
 
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONObject;
+import com.persagy.dc.common.constant.CommonConstant;
 import com.persagy.dc.common.context.AppContext;
 import com.persagy.dc.common.context.AppContext;
 import com.persagy.dc.common.helper.SpringHelper;
 import com.persagy.dc.common.helper.SpringHelper;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
@@ -31,7 +32,6 @@ public class AppContextHandler extends HandlerInterceptorAdapter {
             accessTokenInfo(request.getHeader("token"));
             accessTokenInfo(request.getHeader("token"));
         } else if(StrUtil.isNotBlank(request.getParameter("groupCode"))) {
         } else if(StrUtil.isNotBlank(request.getParameter("groupCode"))) {
             // 请求参数中包含groupCode,由于没有标识位,暂时用这种方式判断吧
             // 请求参数中包含groupCode,由于没有标识位,暂时用这种方式判断吧
-            // TODO 需要系统用户ID
             accessRequestInfo(request);
             accessRequestInfo(request);
         } else {
         } else {
             // 其他情况,按现有系统默认不验证的逻辑,其他情况就是默认放行,不必处理。最好是抛401
             // 其他情况,按现有系统默认不验证的逻辑,其他情况就是默认放行,不必处理。最好是抛401
@@ -58,12 +58,12 @@ public class AppContextHandler extends HandlerInterceptorAdapter {
 //            throw new AESDecryptException("token解析异常");
 //            throw new AESDecryptException("token解析异常");
 //        }
 //        }
         // 获取值
         // 获取值
-        String accountId = tokenObj.getStr("accountId");
         String groupCode = tokenObj.getStr("groupCode");
         String groupCode = tokenObj.getStr("groupCode");
         String appId = tokenObj.getStr("appId");
         String appId = tokenObj.getStr("appId");
-        AppContext.getContext().setAccountId(accountId);
+        String accountId = tokenObj.getStr("accountId");
         AppContext.getContext().setGroupCode(groupCode);
         AppContext.getContext().setGroupCode(groupCode);
         AppContext.getContext().setAppId(appId);
         AppContext.getContext().setAppId(appId);
+        AppContext.getContext().setAccountId(accountId);
     }
     }
 
 
     /**
     /**
@@ -74,7 +74,12 @@ public class AppContextHandler extends HandlerInterceptorAdapter {
         AppContext.getContext().setGroupCode(request.getParameter("groupCode"));
         AppContext.getContext().setGroupCode(request.getParameter("groupCode"));
         AppContext.getContext().setProjectId(request.getParameter("projectId"));
         AppContext.getContext().setProjectId(request.getParameter("projectId"));
         AppContext.getContext().setAppId(request.getParameter("appId"));
         AppContext.getContext().setAppId(request.getParameter("appId"));
-        AppContext.getContext().setAccountId(request.getParameter("userId"));
+        String userId = request.getParameter("userId");
+        // 无用户时,默认为默认系统用户
+        if(StrUtil.isBlank(userId)) {
+            userId = CommonConstant.DEFAULT_ID;
+        }
+        AppContext.getContext().setAccountId(userId);
     }
     }
 
 
     @Override
     @Override

+ 19 - 0
dc-comp/dc-mybatis/src/main/java/com/persagy/dc/mybatis/helper/DynamicDataSourceHelper.java

@@ -0,0 +1,19 @@
+package com.persagy.dc.mybatis.helper;
+
+import com.persagy.dc.common.helper.SpringHelper;
+import com.persagy.dc.mybatis.handler.DynamicDataSourceHandler;
+
+/**
+ * 动态数据源 助手
+ * @author Charlie Yu
+ * @date 2021-07-09
+ */
+public class DynamicDataSourceHelper {
+
+    /**
+     * 切换数据源
+     */
+    public static void loadDataSource() {
+        SpringHelper.getBean(DynamicDataSourceHandler.class).resetDataSource();
+    }
+}