diff --git a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Fence.java b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Fence.java index 8cb4ca9..6669d68 100644 --- a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Fence.java +++ b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Fence.java @@ -22,19 +22,15 @@ public class Fence { /** * 围栏类型 */ - private String fenceType; - /** - * 半径 - */ - private Double radius; + private String fenceType = "多边形"; /** * 驶入驶出 */ - private String eventType; + private String eventType = "N"; /** * 围栏状态 */ - private String staut; + private String staut = "Y"; /** *坐标 */ diff --git a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Path.java b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Path.java index 2d3f2c7..824ffee 100644 --- a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Path.java +++ b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/domain/Path.java @@ -12,6 +12,4 @@ import lombok.ToString; public class Path { private String lat; private String lng; - - } diff --git a/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/psvm/Pences.java b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/psvm/Pences.java new file mode 100644 index 0000000..35b66c6 --- /dev/null +++ b/muyu-modules/muyu-business/muyu-business-common/src/main/java/com/business/common/psvm/Pences.java @@ -0,0 +1,16 @@ +package com.business.common.psvm; + +import com.business.common.domain.Path; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class Pences { + private Long groupsId; + private List list; +} diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/controller/MapController.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/controller/MapController.java index 603336c..6af3e7b 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/controller/MapController.java +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/controller/MapController.java @@ -3,10 +3,12 @@ package com.muyu.goods.controller; import com.business.common.domain.Fence; import com.business.common.domain.FenceGroups; import com.business.common.domain.Path; +import com.business.common.psvm.Pences; import com.muyu.common.core.domain.Result; import com.muyu.common.core.web.controller.BaseController; import com.muyu.goods.service.IMapService; import com.muyu.goods.service.impl.MapService; +import org.apache.commons.codec.language.bm.Rule; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -48,17 +50,42 @@ public class MapController extends BaseController { } /** - * 查看 + * 获取电子围栏 * @param list * @return */ @PostMapping("getSel") - public Result getSel(@RequestBody List list){ + public Result getSel(@RequestBody Pences list){ return success(iMapService.getSel(list)); } - @PostMapping("setSel") - public String setSel(Object r){ - return iMapService.setSel(r); + /** + * 电子围栏 + * @param fenceId + * @return + */ + @PostMapping("deleteFence/{fenceId}") + public Result deleteFence(@PathVariable Long fenceId){ + return success(iMapService.deleteFence(fenceId)); + } + + /** + * 查看详情 + * @param fenceId + * @return + */ + @PostMapping("queryFence/{fenceId}") + public Result queryFence(@PathVariable Long fenceId){ + return success(iMapService.queryFence(fenceId)); + } + + /** + * 修改状态 + * @param fenceId + * @return + */ + @PostMapping("updateFence/{fenceId}") + public Result updateFence(@PathVariable Long fenceId) { + return success(iMapService.updateFence(fenceId)); } } diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/mapper/MapMapper.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/mapper/MapMapper.java index aa76b5f..7dea062 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/mapper/MapMapper.java +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/mapper/MapMapper.java @@ -12,4 +12,12 @@ public interface MapMapper { List selectFenceGroups(); List selectFence(); + + int indexFence(Fence fence); + + int deleteFence(@Param("fenceId") Long fenceId); + + Fence queryFence(@Param("fenceId") Long fenceId); + + int updateFence(@Param("fenceId") Long fenceId, @Param("status") String status); } diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/IMapService.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/IMapService.java index 637193d..213ee49 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/IMapService.java +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/IMapService.java @@ -3,7 +3,9 @@ package com.muyu.goods.service; import com.business.common.domain.Fence; import com.business.common.domain.FenceGroups; import com.business.common.domain.Path; +import com.business.common.psvm.Pences; import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -15,7 +17,11 @@ public interface IMapService { FenceGroups selectFenceGroupsById(Long carId); - List getSel(List list); + String getSel(Pences list); - String setSel(Object r); + String deleteFence(Long fenceId); + + Fence queryFence(Long fenceId); + + String updateFence(Long fenceId); } diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/CarServiceImpl.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/CarServiceImpl.java index 641e4c0..cb7651f 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/CarServiceImpl.java +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/CarServiceImpl.java @@ -79,6 +79,7 @@ public class CarServiceImpl implements ICarService int i = carMapper.insertCar(car); if (i>0) { Car car1 = carMapper.carByCar(); + System.out.println(car1); mapMapper.indexFenceGroups(car1.getCarId(),"car"+car1.getCarId()); } return i; diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/MapService.java b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/MapService.java index 36e9e77..765116c 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/MapService.java +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/java/com/muyu/goods/service/impl/MapService.java @@ -1,15 +1,18 @@ package com.muyu.goods.service.impl; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.business.common.domain.Fence; import com.business.common.domain.FenceGroups; import com.business.common.domain.Path; +import com.business.common.psvm.Pences; import com.muyu.goods.mapper.MapMapper; import com.muyu.goods.service.IMapService; import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; import java.util.stream.Collectors; @@ -29,7 +32,6 @@ public class MapService implements IMapService { List fenceList = selectFence().stream().filter(fa -> fa.getGroupId() == fenceGroups.getGroupsId()).collect(Collectors.toList()); fenceGroups.setFenceList(fenceList); } - System.out.println(fenceGroupsList); return fenceGroupsList; } @@ -46,10 +48,52 @@ public class MapService implements IMapService { } @Override - public List getSel(List list) { - System.out.println(list); - String jsonString = JSONObject.toJSONString(list); - Path path = JSONObject.parseObject(jsonString, Path.class); - return null; + public String getSel(Pences pences) { + System.out.println(pences); + if (pences.getGroupsId() == null){ + return "数据不全"; + } + FenceGroups fenceGroups = selectFenceGroups().stream().filter(g -> g.getGroupsId() == pences.getGroupsId()).collect(Collectors.toList()).get(0); + Fence fence = new Fence(); + fence.setGroupId(pences.getGroupsId()); + List list = pences.getList(); + String jsonString = JSONArray.toJSONString(list); + fence.setPolygonPoints(jsonString); + List paths = JSONArray.parseArray(jsonString, Path.class); + fence.setFenceName("围栏"+ (fenceGroups.getFenceList().size()+1)); + int i = mapMapper.indexFence(fence); + if (i> 0) { + return "传入电子围栏"; + } + return "传入电子围栏失败"; + } + + @Override + public String deleteFence(Long fenceId) { + int i = mapMapper.deleteFence(fenceId); + if (i>0){ + return "完成"; + } + return "无效"; + } + + @Override + public Fence queryFence(Long fenceId) { + return mapMapper.queryFence(fenceId); + } + + @Override + public String updateFence(Long fenceId) { + Fence fence = queryFence(fenceId); + int i = 0; + if (fence.getStaut().equals("Y")){ + i = mapMapper.updateFence(fenceId,"N"); + }else { + i = mapMapper.updateFence(fenceId,"Y"); + } + if (i>0){ + return "成功"; + } + return "失败"; } } diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/bootstrap.yml b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/bootstrap.yml index 7e2ed04..5806aa5 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/bootstrap.yml +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/bootstrap.yml @@ -25,4 +25,4 @@ spring: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} logging: level: - com.muyu.system.mapper: DEBUG + com.muyu.rule.mapper: DEBUG diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/CarMapper.xml b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/CarMapper.xml index 201687f..c56e94a 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/CarMapper.xml +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/CarMapper.xml @@ -44,7 +44,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/MapMapper.xml b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/MapMapper.xml index ee0005a..415302f 100644 --- a/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/MapMapper.xml +++ b/muyu-modules/muyu-business/muyu-business-server/src/main/resources/mapper/rule/MapMapper.xml @@ -15,9 +15,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + @@ -26,18 +25,51 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select fence_id, group_id, fence_name, fence_type, radius, event_type, staut, polygon_points from fence + select fence_id, group_id, fence_name, fence_type, event_type, staut, polygon_points from fence insert into fence_groups ( groups_id, car_id, groups_name ) values (0,#{carId},#{groupsName}); + + insert into fence + + group_id, + fence_name, + fence_type, + event_type, + staut, + polygon_points, + + + #{groupId}, + #{fenceName}, + #{fenceType}, + #{eventType}, + #{staut}, + #{polygonPoints}, + + + + update fence + set staut = #{status} + where fence_id = #{fenceId}; + + + delete + from fence + where fence_id = #{fenceId}; + + diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-common/src/main/java/com/muyu/goods/domain/Sources.java b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-common/src/main/java/com/muyu/goods/domain/Sources.java new file mode 100644 index 0000000..da52bdd --- /dev/null +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-common/src/main/java/com/muyu/goods/domain/Sources.java @@ -0,0 +1,47 @@ +package com.muyu.goods.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@SuperBuilder +public class Sources { + /** + * 主键 + */ + private Long id; + /** + * 名称 + */ + private String name; + /** + * 连接库 + */ + private String url = "ry_goods"; + /** + * ip + */ + private String ip; + /** + * 用户名 + */ + private String username = "root"; + /** + * 密码 + */ + private String password = "Qq4152637"; + + public static Sources index(String name,String ip) { + return builder() + .name(name) + .url("ry_goods") + .ip(ip) + .username("root") + .password("Qq4152637") + .build(); + } +} diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/controller/EnterpriseController.java b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/controller/EnterpriseController.java index e0c38d4..f347c77 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/controller/EnterpriseController.java +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/controller/EnterpriseController.java @@ -148,4 +148,9 @@ public class EnterpriseController extends BaseController return success(enterpriseService.getLevel(id,serviceLevel)); } + @PostMapping("bu/{id}") + public Result bu(@PathVariable Long id){ + return success(enterpriseService.bu(id)); + } + } diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/mapper/EnterpriseMapper.java b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/mapper/EnterpriseMapper.java index 5ff9096..8825be4 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/mapper/EnterpriseMapper.java +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/mapper/EnterpriseMapper.java @@ -2,6 +2,7 @@ package com.muyu.goods.mapper; import java.util.List; import com.muyu.goods.domain.Enterprise; +import com.muyu.goods.domain.Sources; import org.apache.ibatis.annotations.Param; /** @@ -69,4 +70,5 @@ public interface EnterpriseMapper int getLevel(@Param("id") Long id, @Param("serviceLevel") Integer serviceLevel); + void indexSources(Sources sources); } diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/IEnterpriseService.java b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/IEnterpriseService.java index 10b403c..b9db36c 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/IEnterpriseService.java +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/IEnterpriseService.java @@ -77,4 +77,6 @@ public interface IEnterpriseService List lists(); String getLevel(Long id, Integer serviceLevel); + + String bu(Long id); } diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/impl/EnterpriseServiceImpl.java b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/impl/EnterpriseServiceImpl.java index c7b070d..7e605ba 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/impl/EnterpriseServiceImpl.java +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/java/com/muyu/goods/service/impl/EnterpriseServiceImpl.java @@ -8,6 +8,7 @@ import com.muyu.common.core.utils.DateUtils; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.system.domain.LoginUser; import com.muyu.common.system.domain.SysUser; +import com.muyu.goods.domain.Sources; import com.muyu.goods.pojo.HttpClient; import com.muyu.system.remote.RemoteSystemManageService; import muyu.goods.enterprise.client.config.EnterpriseConfig; @@ -77,6 +78,9 @@ public class EnterpriseServiceImpl implements IEnterpriseService enterpriseConfig.index(enterprise1); //新建的企业绑定mysql服务 HttpClient.http(enterprise1); + Sources sources = Sources.index("enterprise" + enterprise1.getId(), String.valueOf((int) (enterprise.getId() + 3306))); + System.out.println(sources); + enterpriseMapper.indexSources(sources); } return i; } @@ -106,7 +110,6 @@ public class EnterpriseServiceImpl implements IEnterpriseService Enterprise enterprise = new Enterprise(); enterprise.setId(id); enterprise.setAuthenticationDate(DateUtils.getNowDate()); - return enterpriseMapper.authentication(enterprise); } @@ -178,4 +181,18 @@ public class EnterpriseServiceImpl implements IEnterpriseService } } + @Override + public String bu(Long id) { + Enterprise enterprise = selectEnterpriseById(id); + //补充企业绑定mysql服务 + try { + HttpClient.http(enterprise); + } catch (IOException e) { + throw new RuntimeException(e); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + return "成功"; + } + } diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/bootstrap.yml b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/bootstrap.yml index 7e513f3..ea8a99e 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/bootstrap.yml +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/bootstrap.yml @@ -25,4 +25,4 @@ spring: - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} logging: level: - com.muyu.system.mapper: DEBUG + com.muyu.goods.mapper: DEBUG diff --git a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/mapper/goods/EnterpriseMapper.xml b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/mapper/goods/EnterpriseMapper.xml index 4064e89..46be8f3 100644 --- a/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/mapper/goods/EnterpriseMapper.xml +++ b/muyu-modules/muyu-goods-enterprise/muyu-goods-enterprise-server/src/main/resources/mapper/goods/EnterpriseMapper.xml @@ -91,6 +91,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 0, + + insert into sources + + name, + url, + ip, + username, + password, + + + #{name}, + #{url}, + #{ip}, + #{username}, + #{password}, + + update enterprise diff --git a/muyu-modules/muyu-moudels-many-datasource/pom.xml b/muyu-modules/muyu-moudels-many-datasource/pom.xml new file mode 100644 index 0000000..0d31dbf --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/pom.xml @@ -0,0 +1,112 @@ + + + 4.0.0 + + com.muyu + muyu + 3.6.3 + ../../pom.xml + + + muyu-moudels-many-datasource + + 多数据源 + + + 17 + 17 + UTF-8 + + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-datasource + + + + + com.muyu + muyu-common-datascope + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + + diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/CloudManyDataSourceApplication.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/CloudManyDataSourceApplication.java new file mode 100644 index 0000000..f8057b6 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/CloudManyDataSourceApplication.java @@ -0,0 +1,22 @@ +package com.muyu.cloud; + +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration; +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import com.muyu.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +/** + * 多数据源启动类 + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication(exclude = {DynamicDataSourceAutoConfiguration.class, DataSourceAutoConfiguration.class}) +public class CloudManyDataSourceApplication { + public static void main(String[] args) { + SpringApplication.run(CloudManyDataSourceApplication.class,args); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/common/CloudController.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/common/CloudController.java new file mode 100644 index 0000000..8df37aa --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/common/CloudController.java @@ -0,0 +1,39 @@ +package com.muyu.cloud.common; + +import com.muyu.cloud.datasource.DataSourceInfo; +import com.muyu.cloud.datasource.util.DataSourceService; +import com.muyu.cloud.service.CloudService; +import com.muyu.common.core.domain.Result; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Log4j2 +@RestController +@RequestMapping("cloud") +public class CloudController { + @Autowired + private CloudService cloudService; + @Autowired + private DataSourceService dataSourceService; + + @PostMapping("source") + public Result selSource() { + Object clout = cloudService.selSource(); + return Result.success(clout); + } + + /** + * 新增数据源 + * @param ip + * @return + */ + @PostMapping("/{ip}") + public Result selectIp(@PathVariable String ip){ + dataSourceService.addDataSourceIp(DataSourceInfo.dataIpBuild(ip)); + return null; + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DataSourceInfo.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DataSourceInfo.java new file mode 100644 index 0000000..7744df2 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DataSourceInfo.java @@ -0,0 +1,51 @@ +package com.muyu.cloud.datasource; + +import com.muyu.common.core.utils.StringUtils; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import static com.muyu.cloud.datasource.contents.DatasourceContent.*; + + +/** + * @author DongZl + * @description: 数据源实体类 + * @Date 2023-8-1 上午 11:15 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class DataSourceInfo { + + private String key; + + private String ip; + + private String url; + + private String userName; + + private String password; + + + public static DataSourceInfo databaseNameBuild(String databaseName){ + return DataSourceInfo.builder() + .key(databaseName) + .url(StringUtils.format(DATASOURCE_URL, databaseName)) + .password(PASSWORD) + .userName(USER_NAME) + .build(); + } + + public static DataSourceInfo dataIpBuild(String ip) { + return DataSourceInfo.builder() + .ip(ip) + .url(StringUtils.format(DATASOURCE_URL,ip)) + .password(PASSWORD) + .userName(USER_NAME) + .build(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DynamicDataSourceHolder.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DynamicDataSourceHolder.java new file mode 100644 index 0000000..0d5a933 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/DynamicDataSourceHolder.java @@ -0,0 +1,51 @@ +package com.muyu.cloud.datasource; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; + +/** + * 数据源切换处理 + * + * @author Dongzl + */ +@Slf4j +public class DynamicDataSourceHolder { + /** + * 保存动态数据源名称 + */ + private static final ThreadLocal DYNAMIC_DATASOURCE_KEY = new ThreadLocal<>(); + + /** + * 设置/切换数据源,决定当前线程使用哪个数据源 + */ + public static void setDynamicDataSourceKey(String key){ + log.info("数据源切换为:{}",key); + DYNAMIC_DATASOURCE_KEY.set(key); + } + + /** + * 获取动态数据源名称,默认使用mater数据源 + */ + public static String getDynamicDataSourceKey(){ + String key = DYNAMIC_DATASOURCE_KEY.get(); + Assert.notNull(key, "请携带数据标识"); + return key; + } + + /** + * 获取动态数据源名称,默认使用ip数据源 + */ + public static String getDynamicDataSourceIp(){ + String ip = DYNAMIC_DATASOURCE_KEY.get(); + Assert.notNull(ip, "请携带数据标识"); + return ip; + } + + /** + * 移除当前数据源 + */ + public static void removeDynamicDataSourceKey(){ + log.info("移除数据源:{}",DYNAMIC_DATASOURCE_KEY.get()); + DYNAMIC_DATASOURCE_KEY.remove(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DataSourceAsp.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DataSourceAsp.java new file mode 100644 index 0000000..294451a --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DataSourceAsp.java @@ -0,0 +1,46 @@ +package com.muyu.cloud.datasource.config; + +import com.muyu.cloud.datasource.DynamicDataSourceHolder; +import com.muyu.common.security.utils.SecurityUtils; +import org.aspectj.lang.annotation.After; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.stereotype.Component; + +/** + * @author DongZl + * @description: 数据源切面 + * @Date 2023-8-2 下午 08:26 + */ +@Aspect +@Component +public class DataSourceAsp { + /** + * 调用表示层 + */ + @Pointcut("execution(public * com.muyu.cloud.common.*Controller.*(..))") + public void pointcut () { + } + + + /** + * 的每一個方法執行之前 執行的處理 + */ + @Before("pointcut()") + public void beforeMethod() { +// Long storeId = SecurityUtils.getLoginUser().getSysUser().getUserId(); +// DynamicDataSourceHolder.setDynamicDataSourceKey("test_"+storeId); + } + + + /** + * 的每一個方法執行之后 執行的處理 + * 无论正常还是异常终了 + * 不能接受到返回值 + */ + @After("pointcut()") + public void afterMethod() { + DynamicDataSourceHolder.removeDynamicDataSourceKey(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DruidConfig.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DruidConfig.java new file mode 100644 index 0000000..8f3ddb0 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DruidConfig.java @@ -0,0 +1,74 @@ +package com.muyu.cloud.datasource.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.cloud.datasource.DataSourceInfo; +import lombok.extern.log4j.Log4j2; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author DongZl + * @description: 数据源配置 + * @Date 2023-8-1 上午 11:05 + */ +@Log4j2 +@Configuration +public class DruidConfig { + + /** + * + * @return + */ + private List getDataSourceInfoList(){ + List databaseNameList = new ArrayList<>(){{ + add("3310"); + add("3311"); + }}; + return databaseNameList.stream().map(DataSourceInfo::dataIpBuild).toList(); + } + + /** + * @Description: 根据传递的数据源信息测试数据库连接 + * @Author Dongzl + */ + public DruidDataSource createDataSourceConnection(DataSourceInfo dataSourceInfo) { + DruidDataSource druidDataSource = new DruidDataSource();//配置连接池 + druidDataSource.setUrl(dataSourceInfo.getUrl());//配置数据库的连接url + druidDataSource.setUsername(dataSourceInfo.getUserName());//配置用户名 + druidDataSource.setPassword(dataSourceInfo.getPassword());//配置密码 + druidDataSource.setBreakAfterAcquireFailure(true);//配置 + druidDataSource.setConnectionErrorRetryAttempts(0);//配置 + try { + druidDataSource.getConnection(2000); + log.info("{} -> 数据源连接成功", dataSourceInfo.getIp()); + return druidDataSource; + } catch (SQLException throwables) { + log.error("数据源 {} 连接失败,用户名:{},密码 {}",dataSourceInfo.getUrl(),dataSourceInfo.getUserName(),dataSourceInfo.getPassword()); + return null; + } + } + + @Bean + @Primary + public DynamicDataSource dynamicDataSource() { + + Map dataSourceMap = new HashMap<>(); + getDataSourceInfoList().forEach(dataSourceInfo -> { + dataSourceMap.put(dataSourceInfo.getKey(), createDataSourceConnection(dataSourceInfo)); + }); + //设置动态数据源 + DynamicDataSource dynamicDataSource = new DynamicDataSource(); +// dynamicDataSource.setDefaultTargetDataSource(masterDataSource()); + dynamicDataSource.setTargetDataSources(dataSourceMap); + //将数据源信息备份在defineTargetDataSources中 + dynamicDataSource.setDefineTargetDataSources(dataSourceMap); + return dynamicDataSource; + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DynamicDataSource.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DynamicDataSource.java new file mode 100644 index 0000000..a4dbc55 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/DynamicDataSource.java @@ -0,0 +1,33 @@ +package com.muyu.cloud.datasource.config; + +import com.muyu.cloud.datasource.DynamicDataSourceHolder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import java.util.Map; + +/** + * 动态数据源 + * 调用AddDefineDataSource组件的addDefineDynamicDataSource()方法,获取原来targetdatasources的map,并将新的数据源信息添加到map中,并替换targetdatasources中的map + * 切换数据源时可以使用@DataSource(value = "数据源名称"),或者DynamicDataSourceContextHolder.setContextKey("数据源名称") + * @author Dongzl + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DynamicDataSource extends AbstractRoutingDataSource { + //备份所有数据源信息,备份是指针 + private Map defineTargetDataSources; + + /** + * 决定当前线程使用哪个数据源 + */ + @Override + protected Object determineCurrentLookupKey() { + return DynamicDataSourceHolder.getDynamicDataSourceKey(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/factory/DruidDataSourceFactory.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/factory/DruidDataSourceFactory.java new file mode 100644 index 0000000..6985eb7 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/factory/DruidDataSourceFactory.java @@ -0,0 +1,12 @@ +package com.muyu.cloud.datasource.config.factory; + +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +/** + * + */ +@Component +@Log4j2 +public class DruidDataSourceFactory { +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/holder/DynamicDataSourceHolder.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/holder/DynamicDataSourceHolder.java new file mode 100644 index 0000000..d3a25ea --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/holder/DynamicDataSourceHolder.java @@ -0,0 +1,51 @@ +package com.muyu.cloud.datasource.config.holder; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.Assert; + +/** + * 数据源切换处理 + * + * @author Dongzl + */ +@Slf4j +public class DynamicDataSourceHolder { + /** + * 保存动态数据源名称 + */ + private static final ThreadLocal DYNAMIC_DATASOURCE_KEY = new ThreadLocal<>(); + + /** + * 设置/切换数据源,决定当前线程使用哪个数据源 + */ + public static void setDynamicDataSourceKey(String key){ + log.info("数据源切换为:{}",key); + DYNAMIC_DATASOURCE_KEY.set(key); + } + + /** + * 获取动态数据源名称,默认使用mater数据源 + */ + public static String getDynamicDataSourceKey(){ + String key = DYNAMIC_DATASOURCE_KEY.get(); + Assert.notNull(key, "请携带数据标识"); + return key; + } + + /** + * 获取动态数据源名称,默认使用ip数据源 + */ + public static String getDynamicDataSourceIp(){ + String ip = DYNAMIC_DATASOURCE_KEY.get(); + Assert.notNull(ip, "请携带数据标识"); + return ip; + } + + /** + * 移除当前数据源 + */ + public static void removeDynamicDataSourceKey(){ + log.info("移除数据源:{}",DYNAMIC_DATASOURCE_KEY.get()); + DYNAMIC_DATASOURCE_KEY.remove(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/role/DynamicDataSource.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/role/DynamicDataSource.java new file mode 100644 index 0000000..caef7f4 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/config/role/DynamicDataSource.java @@ -0,0 +1,33 @@ +package com.muyu.cloud.datasource.config.role; + +import com.muyu.cloud.datasource.DynamicDataSourceHolder; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import java.util.Map; + +/** + * 动态数据源 + * 调用AddDefineDataSource组件的addDefineDynamicDataSource()方法,获取原来targetdatasources的map,并将新的数据源信息添加到map中,并替换targetdatasources中的map + * 切换数据源时可以使用@DataSource(value = "数据源名称"),或者DynamicDataSourceContextHolder.setContextKey("数据源名称") + * @author Dongzl + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DynamicDataSource extends AbstractRoutingDataSource { + //备份所有数据源信息,备份是指针 + private Map defineTargetDataSources; + + /** + * 决定当前线程使用哪个数据源 + */ + @Override + protected Object determineCurrentLookupKey() { + return DynamicDataSourceHolder.getDynamicDataSourceKey(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/CommonConstant.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/CommonConstant.java new file mode 100644 index 0000000..be01917 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/CommonConstant.java @@ -0,0 +1,18 @@ +package com.muyu.cloud.datasource.contents; + +/** + * @Description: 动态数据源常量类 + * @Author Dongzl + * @Date 2022/8/18 16:33 + * + */ +public class CommonConstant { + /** + * 默认数据源标识 + */ + public static final String MASTER = "master"; + /** + * 从数据源标识 + */ + public static final String SLAVE = "slave"; +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/DatasourceContent.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/DatasourceContent.java new file mode 100644 index 0000000..d258d08 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/contents/DatasourceContent.java @@ -0,0 +1,15 @@ +package com.muyu.cloud.datasource.contents; + +/** + * @author DongZl + * @description: 数据源常量 + * @Date 2023-8-1 上午 11:02 + */ +public class DatasourceContent { + + public final static String DATASOURCE_URL = "jdbc:mysql://129.211.23.219:{}/ry_goods?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"; + + public final static String USER_NAME = "root"; + + public final static String PASSWORD = "Qq4152637"; +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/util/DataSourceService.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/util/DataSourceService.java new file mode 100644 index 0000000..f3f71a8 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/datasource/util/DataSourceService.java @@ -0,0 +1,58 @@ +package com.muyu.cloud.datasource.util; + +import com.alibaba.druid.pool.DruidDataSource; +import com.muyu.cloud.datasource.DataSourceInfo; +import com.muyu.cloud.datasource.config.DruidConfig; +import com.muyu.cloud.datasource.config.DynamicDataSource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @Description: 数据源工具类 + * @Author Dongzl + * @Date 2022/8/18 17:20 + * + */ +@Slf4j +@Component +public class DataSourceService { + + @Autowired + private DruidConfig druidConfig; + + @Resource + private DynamicDataSource dynamicDataSource; + + /** + * 新增数据源 + * @param dataSourceInfo + */ + public void addDataSource(DataSourceInfo dataSourceInfo){ + //获取数据源连接请求 + addDefineDynamicDataSource(druidConfig.createDataSourceConnection(dataSourceInfo), dataSourceInfo.getKey()); + } + + /** + * 新增数据源 + * @param dataSourceInfo + */ + public void addDataSourceIp(DataSourceInfo dataSourceInfo){ + //获取数据源连接请求 + addDefineDynamicDataSource(druidConfig.createDataSourceConnection(dataSourceInfo), dataSourceInfo.getIp()); + } + + /** + * @Description: 将新增的数据源加入到备份数据源map中 + * @Author Dongzl + */ + public void addDefineDynamicDataSource(DruidDataSource druidDataSource, String dataSourceName){ + Map defineTargetDataSources = dynamicDataSource.getDefineTargetDataSources(); + defineTargetDataSources.put(dataSourceName, druidDataSource); + dynamicDataSource.setTargetDataSources(defineTargetDataSources); + dynamicDataSource.afterPropertiesSet(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/mapper/CloudMapper.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/mapper/CloudMapper.java new file mode 100644 index 0000000..9f17d59 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/mapper/CloudMapper.java @@ -0,0 +1,8 @@ +package com.muyu.cloud.mapper; + +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface CloudMapper { + Object selSource(); +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/CloudService.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/CloudService.java new file mode 100644 index 0000000..663a2a1 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/CloudService.java @@ -0,0 +1,5 @@ +package com.muyu.cloud.service; + +public interface CloudService { + Object selSource(); +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/impl/CloudServiceImpl.java b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/impl/CloudServiceImpl.java new file mode 100644 index 0000000..0405433 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/java/com/muyu/cloud/service/impl/CloudServiceImpl.java @@ -0,0 +1,16 @@ +package com.muyu.cloud.service.impl; + +import com.muyu.cloud.mapper.CloudMapper; +import com.muyu.cloud.service.CloudService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CloudServiceImpl implements CloudService { + @Autowired + private CloudMapper cloudMapper; + @Override + public Object selSource() { + return cloudMapper.selSource(); + } +} diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..e69de29 diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/resources/bootstrap.yml b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..34b0881 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/bootstrap.yml @@ -0,0 +1,28 @@ +# Tomcat +server: + port: 9209 + +# Spring +spring: + application: + # 应用名称 + name: muyu-range + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 129.211.23.219:8848 + config: + # 配置中心地址 + server-addr: 129.211.23.219:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.cloud.mapper: DEBUG diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/resources/logback.xml b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/logback.xml new file mode 100644 index 0000000..5b3a578 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/muyu-modules/muyu-moudels-many-datasource/src/main/resources/mapper/EnterpriseMapper.xml b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/mapper/EnterpriseMapper.xml new file mode 100644 index 0000000..d3d4354 --- /dev/null +++ b/muyu-modules/muyu-moudels-many-datasource/src/main/resources/mapper/EnterpriseMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/pom.xml b/pom.xml index 16c4db9..13e7880 100644 --- a/pom.xml +++ b/pom.xml @@ -217,6 +217,7 @@ muyu-common muyu-modules/muyu-goods-enterprise muyu-modules/muyu-business + muyu-modules/muyu-moudels-many-datasource pom