【同步】BOOT 和 CLOUD 的功能
parent
ffb4e8c158
commit
3020c6cdb0
|
|
@ -40,11 +40,6 @@
|
||||||
<artifactId>javax.servlet-api</artifactId>
|
<artifactId>javax.servlet-api</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>javax.servlet</groupId>
|
|
||||||
<artifactId>javax.servlet-api</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.xiaoymin</groupId> <!-- 接口文档 -->
|
<groupId>com.github.xiaoymin</groupId> <!-- 接口文档 -->
|
||||||
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
|
<artifactId>knife4j-gateway-spring-boot-starter</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -150,25 +150,4 @@ public class IotMessageBusAutoConfiguration {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== RabbitMQ 实现 ====================
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@ConditionalOnProperty(prefix = "yudao.iot.message-bus", name = "type", havingValue = "rabbitmq")
|
|
||||||
@ConditionalOnClass(RabbitTemplate.class)
|
|
||||||
public static class IotRabbitMQMessageBusConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@ConditionalOnMissingBean
|
|
||||||
public RabbitAdmin rabbitAdmin(RabbitTemplate rabbitTemplate) {
|
|
||||||
return new RabbitAdmin(rabbitTemplate);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public IotRabbitMQMessageBus iotRabbitMQMessageBus(RabbitTemplate rabbitTemplate, RabbitAdmin rabbitAdmin) {
|
|
||||||
log.info("[iotRabbitMQMessageBus][创建 IoT RabbitMQ 消息总线]");
|
|
||||||
return new IotRabbitMQMessageBus(rabbitTemplate, rabbitAdmin);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,9 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
||||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
||||||
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.IotSceneRuleMatcherHelper;
|
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.IotSceneRuleMatcherHelper;
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,10 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.rule.IotSceneRuleDO;
|
||||||
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
import cn.iocoder.yudao.module.iot.enums.rule.IotSceneRuleTriggerTypeEnum;
|
||||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
import cn.iocoder.yudao.module.iot.service.device.IotDeviceService;
|
||||||
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.IotSceneRuleMatcherHelper;
|
import cn.iocoder.yudao.module.iot.service.rule.scene.matcher.IotSceneRuleMatcherHelper;
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设备状态更新触发器匹配器:处理设备上下线状态变更的触发器匹配逻辑
|
* 设备状态更新触发器匹配器:处理设备上下线状态变更的触发器匹配逻辑
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import cn.iocoder.yudao.module.iot.enums.thingmodel.IotDataSpecsDataTypeEnum;
|
||||||
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
import cn.iocoder.yudao.module.iot.framework.tdengine.core.TDengineTableField;
|
||||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceModbusPointService;
|
import cn.iocoder.yudao.module.iot.service.device.IotDeviceModbusPointService;
|
||||||
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.cache.annotation.CacheEvict;
|
import org.springframework.cache.annotation.CacheEvict;
|
||||||
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
|
@ -37,6 +36,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,11 @@ import cn.iocoder.yudao.module.iot.dal.dataobject.thingmodel.model.dataType.Thin
|
||||||
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotDataSpecsDataTypeEnum;
|
import cn.iocoder.yudao.module.iot.enums.thingmodel.IotDataSpecsDataTypeEnum;
|
||||||
import cn.iocoder.yudao.module.iot.service.device.IotDeviceModbusPointService;
|
import cn.iocoder.yudao.module.iot.service.device.IotDeviceModbusPointService;
|
||||||
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
import cn.iocoder.yudao.module.iot.service.product.IotProductService;
|
||||||
import jakarta.annotation.Resource;
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.test.context.bean.override.mockito.MockitoBean;
|
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
@ -33,9 +33,9 @@ public class IotThingModelServiceImplTest extends BaseDbUnitTest {
|
||||||
@Resource
|
@Resource
|
||||||
private IotThingModelServiceImpl thingModelService;
|
private IotThingModelServiceImpl thingModelService;
|
||||||
|
|
||||||
@MockitoBean
|
@MockBean
|
||||||
private IotProductService productService;
|
private IotProductService productService;
|
||||||
@MockitoBean
|
@MockBean
|
||||||
private IotDeviceModbusPointService deviceModbusPointService;
|
private IotDeviceModbusPointService deviceModbusPointService;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
|
||||||
throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS);
|
throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
// 4.2 校验 sku 是否存在
|
// 4.2 校验 sku 是否存在
|
||||||
ProductSkuRespDTO sku = productSkuApi.getSku(skuId);
|
ProductSkuRespDTO sku = productSkuApi.getSku(skuId).getCheckedData();
|
||||||
if (sku == null) {
|
if (sku == null) {
|
||||||
throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS);
|
throw exception(COMBINATION_JOIN_ACTIVITY_PRODUCT_NOT_EXISTS);
|
||||||
}
|
}
|
||||||
|
|
@ -170,9 +170,9 @@ public class CombinationRecordServiceImpl implements CombinationRecordService {
|
||||||
reqDTO.getActivityId(), reqDTO.getHeadId(), reqDTO.getSkuId(), reqDTO.getCount());
|
reqDTO.getActivityId(), reqDTO.getHeadId(), reqDTO.getSkuId(), reqDTO.getCount());
|
||||||
|
|
||||||
// 2. 组合数据创建拼团记录
|
// 2. 组合数据创建拼团记录
|
||||||
MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId());
|
MemberUserRespDTO user = memberUserApi.getUser(reqDTO.getUserId()).getCheckedData();
|
||||||
ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId());
|
ProductSpuRespDTO spu = productSpuApi.getSpu(reqDTO.getSpuId()).getCheckedData();
|
||||||
ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId());
|
ProductSkuRespDTO sku = productSkuApi.getSku(reqDTO.getSkuId()).getCheckedData();
|
||||||
CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO, keyValue.getKey(), user, spu, sku);
|
CombinationRecordDO record = CombinationActivityConvert.INSTANCE.convert(reqDTO, keyValue.getKey(), user, spu, sku);
|
||||||
// 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP
|
// 2.1. 如果是团长需要设置 headId 为 CombinationRecordDO#HEAD_ID_GROUP
|
||||||
if (!isJoinCombination(record.getHeadId())) {
|
if (!isJoinCombination(record.getHeadId())) {
|
||||||
|
|
|
||||||
|
|
@ -333,13 +333,13 @@ public class BrokerageRecordServiceImpl implements BrokerageRecordService {
|
||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
// 2.3 校验商品是否存在
|
// 2.3 校验商品是否存在
|
||||||
ProductSpuRespDTO spu = productSpuApi.getSpu(spuId);
|
ProductSpuRespDTO spu = productSpuApi.getSpu(spuId).getCheckedData();
|
||||||
if (spu == null) {
|
if (spu == null) {
|
||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3.1 获取商品 SKU 列表
|
// 3.1 获取商品 SKU 列表
|
||||||
List<ProductSkuRespDTO> skuList = productSkuApi.getSkuListBySpuId(ListUtil.of(spuId));
|
List<ProductSkuRespDTO> skuList = productSkuApi.getSkuListBySpuId(ListUtil.of(spuId)).getCheckedData();
|
||||||
if (BooleanUtil.isTrue(spu.getSubCommissionType())) {
|
if (BooleanUtil.isTrue(spu.getSubCommissionType())) {
|
||||||
// 3.2.1 商品独立分销模式:直接取 SKU 固定佣金
|
// 3.2.1 商品独立分销模式:直接取 SKU 固定佣金
|
||||||
// 注意:固定佣金允许为 0,表示商家主动设为零佣金;为空时,也按 0 处理
|
// 注意:固定佣金允许为 0,表示商家主动设为零佣金;为空时,也按 0 处理
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@ import lombok.Data;
|
||||||
import org.hibernate.validator.constraints.URL;
|
import org.hibernate.validator.constraints.URL;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
import jakarta.validation.constraints.Email;
|
import javax.validation.constraints.Email;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import jakarta.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package cn.iocoder.yudao.module.member.controller.app.user.vo;
|
package cn.iocoder.yudao.module.member.controller.app.user.vo;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import jakarta.validation.constraints.Email;
|
|
||||||
import jakarta.validation.constraints.Size;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import org.hibernate.validator.constraints.URL;
|
import org.hibernate.validator.constraints.URL;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||||
public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) {
|
public void updateUserMobileByWeixin(Long userId, AppMemberUserUpdateMobileByWeixinReqVO reqVO) {
|
||||||
// 1.1 获得对应的手机号信息
|
// 1.1 获得对应的手机号信息
|
||||||
SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
|
SocialWxPhoneNumberInfoRespDTO phoneNumberInfo = socialClientApi.getWxMaPhoneNumberInfo(
|
||||||
UserTypeEnum.MEMBER.getValue(), reqVO.getCode());
|
UserTypeEnum.MEMBER.getValue(), reqVO.getCode()).getCheckedData();
|
||||||
Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
|
Assert.notNull(phoneNumberInfo, "获得手机信息失败,结果为空");
|
||||||
// 1.2 校验新手机是否已经被绑定
|
// 1.2 校验新手机是否已经被绑定
|
||||||
validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber());
|
validateMobileUnique(userId, phoneNumberInfo.getPhoneNumber());
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,19 @@
|
||||||
package cn.iocoder.yudao.module.system.api.permission;
|
package cn.iocoder.yudao.module.system.api.permission;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
|
import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO;
|
||||||
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
import cn.iocoder.yudao.module.system.enums.ApiConstants;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.cloud.openfeign.FeignClient;
|
import org.springframework.cloud.openfeign.FeignClient;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
|
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿:fallbackFactory =
|
||||||
@Tag(name = "RPC 服务 - 角色")
|
@Tag(name = "RPC 服务 - 角色")
|
||||||
|
|
@ -22,4 +26,18 @@ public interface RoleApi {
|
||||||
@Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true)
|
@Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true)
|
||||||
CommonResult<Boolean> validRoleList(@RequestParam("ids") Collection<Long> ids);
|
CommonResult<Boolean> validRoleList(@RequestParam("ids") Collection<Long> ids);
|
||||||
|
|
||||||
}
|
@GetMapping(PREFIX + "/get")
|
||||||
|
@Operation(summary = "获得角色")
|
||||||
|
@Parameter(name = "id", description = "角色编号", example = "1", required = true)
|
||||||
|
CommonResult<RoleRespDTO> getRole(@RequestParam("id") Long id);
|
||||||
|
|
||||||
|
@GetMapping(PREFIX + "/list")
|
||||||
|
@Operation(summary = "获得角色列表")
|
||||||
|
@Parameter(name = "ids", description = "角色编号数组", example = "1,2", required = true)
|
||||||
|
CommonResult<List<RoleRespDTO>> getRoleList(@RequestParam("ids") Collection<Long> ids);
|
||||||
|
|
||||||
|
default Map<Long, RoleRespDTO> getRoleMap(Collection<Long> ids) {
|
||||||
|
return CollectionUtils.convertMap(getRoleList(ids).getCheckedData(), RoleRespDTO::getId);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package cn.iocoder.yudao.module.system.api.permission.dto;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色 Response DTO
|
||||||
|
*
|
||||||
|
* @author 芋道源码
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class RoleRespDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色编号
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 角色名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 角色编码
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
/**
|
||||||
|
* 显示顺序
|
||||||
|
*/
|
||||||
|
private Integer sort;
|
||||||
|
/**
|
||||||
|
* 角色状态
|
||||||
|
*
|
||||||
|
* 枚举 {@link CommonStatusEnum}
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
package cn.iocoder.yudao.module.system.api.permission;
|
package cn.iocoder.yudao.module.system.api.permission;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
import cn.iocoder.yudao.module.system.api.permission.dto.RoleRespDTO;
|
||||||
|
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||||
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
|
@ -22,4 +26,17 @@ public class RoleApiImpl implements RoleApi {
|
||||||
roleService.validateRoleList(ids);
|
roleService.validateRoleList(ids);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<RoleRespDTO> getRole(Long id) {
|
||||||
|
RoleDO role = roleService.getRole(id);
|
||||||
|
return success(BeanUtils.toBean(role, RoleRespDTO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<List<RoleRespDTO>> getRoleList(Collection<Long> ids) {
|
||||||
|
List<RoleDO> list = roleService.getRoleList(ids);
|
||||||
|
return success(BeanUtils.toBean(list, RoleRespDTO.class));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue