云快充1.5.0 初始化

This commit is contained in:
3god
2024-10-08 09:38:54 +08:00
parent dea6774942
commit cb19b45919
297 changed files with 18020 additions and 28 deletions

View File

@@ -0,0 +1,27 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp;
import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.TestMethodOrder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
/**
* @author baigod
*/
@ActiveProfiles("test")
@SpringBootTest(classes = JCPPServerApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AbstractTestBase {
static {
System.setProperty("spring.config.name", "app-service");
}
protected final Logger log = LoggerFactory.getLogger(this.getClass());
}

View File

@@ -0,0 +1,72 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.app.dal.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import sanbing.jcpp.AbstractTestBase;
import sanbing.jcpp.app.dal.config.ibatis.enums.GunOptStatusEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.GunRunStatusEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.OwnerTypeEnum;
import sanbing.jcpp.app.dal.entity.Gun;
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
import java.time.LocalDateTime;
import java.util.UUID;
import static sanbing.jcpp.app.dal.mapper.PileMapperTest.NORMAL_PILE_ID;
import static sanbing.jcpp.app.dal.mapper.StationMapperTest.NORMAL_STATION_ID;
import static sanbing.jcpp.app.dal.mapper.UserMapperTest.NORMAL_USER_ID;
/**
* @author baigod
*/
public class GunMapperTest extends AbstractTestBase {
static final UUID[] NORMAL_GUN_ID = new UUID[]{
UUID.fromString("8f1ffb5b-e536-4f2b-8cd0-31f7d0348a44"),
UUID.fromString("ae256617-b747-4110-b27a-00773e03bed1"),
UUID.fromString("d15dbb29-ea2f-4094-b448-dff853e9275f"),
UUID.fromString("b4a2de24-d7ff-4828-a0d8-2429a6253f9c"),
UUID.fromString("f505f7e2-9e1c-4251-8f7f-9a8eae84372a"),
UUID.fromString("0c5bab7b-786b-4e05-ab26-618c3f5a6086"),
UUID.fromString("2db4ad92-e353-4ac2-a2b0-942cb778eca6"),
UUID.fromString("203833e7-0a44-4f1c-935e-cd43e6dbbf46"),
UUID.fromString("3f3a61e9-de55-4177-9b4e-3a1d8c529890"),
UUID.fromString("cf1a8970-5aa9-4636-a76e-d6bcf98b4a07")
};
@Resource
GunMapper gunMapper;
@Test
void curdTest() {
gunMapper.delete(Wrappers.lambdaQuery());
for (int i = 0; i < NORMAL_PILE_ID.length; i++) {
UUID pileId = NORMAL_PILE_ID[i];
UUID gunId = NORMAL_GUN_ID[i];
Gun gun = Gun.builder()
.id(gunId)
.createdTime(LocalDateTime.now())
.additionalInfo(JacksonUtil.newObjectNode())
.gunNo("01")
.gunName("三丙的1号枪")
.gunCode("20231212000001-" + (i + 1))
.stationId(NORMAL_STATION_ID)
.pileId(pileId)
.ownerId(NORMAL_USER_ID)
.ownerType(OwnerTypeEnum.C)
.runStatus(GunRunStatusEnum.IDLE)
.runStatusUpdatedTime(LocalDateTime.now())
.optStatus(GunOptStatusEnum.AVAILABLE)
.build();
gunMapper.insertOrUpdate(gun);
log.info("{}", gunMapper.selectById(gunId));
}
}
}

View File

@@ -0,0 +1,66 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.app.dal.mapper;
import cn.hutool.core.math.Money;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.apache.commons.lang3.RandomStringUtils;
import org.junit.jupiter.api.Test;
import sanbing.jcpp.AbstractTestBase;
import sanbing.jcpp.app.dal.config.ibatis.enums.OrderStatusEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.OrderTypeEnum;
import sanbing.jcpp.app.dal.entity.Order;
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.UUID;
import static sanbing.jcpp.app.dal.mapper.GunMapperTest.NORMAL_GUN_ID;
import static sanbing.jcpp.app.dal.mapper.PileMapperTest.NORMAL_PILE_ID;
import static sanbing.jcpp.app.dal.mapper.StationMapperTest.NORMAL_STATION_ID;
import static sanbing.jcpp.app.dal.mapper.UserMapperTest.NORMAL_USER_ID;
/**
* @author baigod
*/
public class OrderMapperTest extends AbstractTestBase {
@Resource
OrderMapper orderMapper;
@Test
void testOrderMapper() {
orderMapper.delete(Wrappers.lambdaQuery());
Order order = Order.builder()
.id(UUID.randomUUID())
.internalOrderNo(IdUtil.getSnowflake(1, 1).nextIdStr())
.externalOrderNo(IdUtil.getSnowflake(1, 1).nextIdStr())
.pileOrderNo(RandomStringUtils.randomNumeric(16))
.createdTime(LocalDateTime.now())
.additionalInfo(JacksonUtil.newObjectNode())
.updatedTime(LocalDateTime.now())
.cancelledTime(null)
.status(OrderStatusEnum.IN_CHARGING)
.type(OrderTypeEnum.CHARGE)
.creatorId(NORMAL_USER_ID)
.stationId(NORMAL_STATION_ID)
.pileId(NORMAL_PILE_ID[0])
.gunId(NORMAL_GUN_ID[0])
.plateNo("浙A88888")
.settlementAmount(new Money(100D).getCent())
.settlementDetails(JacksonUtil.newObjectNode())
.electricityQuantity(new BigDecimal("100"))
.build();
orderMapper.insertOrUpdate(order);
log.info("{}", orderMapper.selectById(order.getId()));
}
}

View File

@@ -0,0 +1,74 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.app.dal.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import sanbing.jcpp.AbstractTestBase;
import sanbing.jcpp.app.dal.config.ibatis.enums.OwnerTypeEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.PileStatusEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.PileTypeEnum;
import sanbing.jcpp.app.dal.entity.Pile;
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.util.UUID;
import static sanbing.jcpp.app.dal.mapper.StationMapperTest.NORMAL_STATION_ID;
import static sanbing.jcpp.app.dal.mapper.UserMapperTest.NORMAL_USER_ID;
/**
* @author baigod
*/
public class PileMapperTest extends AbstractTestBase {
static final UUID[] NORMAL_PILE_ID = new UUID[]{
UUID.fromString("fd7b3f60-db6c-4347-bff3-3c922985b95c"),
UUID.fromString("fa621927-6458-4e09-9666-99c52230db2b"),
UUID.fromString("afec0b0a-ad82-4923-97da-70e4a5d5e2c6"),
UUID.fromString("3e45ae30-2848-4d5a-a7b8-bd8504a6713d"),
UUID.fromString("349ff65e-ce8e-435a-928b-52fdef2828f2"),
UUID.fromString("e60d5b2d-8014-4f8f-b828-e207e6cf4a8f"),
UUID.fromString("8f010829-b505-4e57-8b93-6bdf981ac4e1"),
UUID.fromString("081842e2-9e74-4abb-aeab-b2cbfeb7a335"),
UUID.fromString("f04cf40a-0fbe-40f7-a07c-5b663ad68e98"),
UUID.fromString("ec522751-e1d3-4117-a887-3bdae7892369")
};
@Resource
PileMapper pileMapper;
@Test
void curdTest() {
pileMapper.delete(Wrappers.lambdaQuery());
for (int i = 0; i < 10; i++) {
UUID pileId = NORMAL_PILE_ID[i];
Pile pile = Pile.builder()
.id(pileId)
.createdTime(LocalDateTime.now())
.additionalInfo(JacksonUtil.newObjectNode())
.pileName(String.format("三丙家的%d号充电桩", i + 1))
.pileCode("202312120000" + new DecimalFormat("00").format(i + 1))
.protocol("yunkuaichongV150")
.stationId(NORMAL_STATION_ID)
.ownerId(NORMAL_USER_ID)
.ownerType(OwnerTypeEnum.C)
.brand("星星")
.model("10A")
.manufacturer("星星")
.status(PileStatusEnum.IDLE)
.type(PileTypeEnum.AC)
.build();
pileMapper.insertOrUpdate(pile);
log.info("{}", pileMapper.selectById(pileId));
}
}
}

View File

@@ -0,0 +1,55 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.app.dal.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import sanbing.jcpp.AbstractTestBase;
import sanbing.jcpp.app.dal.config.ibatis.enums.OwnerTypeEnum;
import sanbing.jcpp.app.dal.config.ibatis.enums.StationStatusEnum;
import sanbing.jcpp.app.dal.entity.Station;
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
import java.time.LocalDateTime;
import java.util.UUID;
import static sanbing.jcpp.app.dal.mapper.UserMapperTest.NORMAL_USER_ID;
/**
* @author baigod
*/
class StationMapperTest extends AbstractTestBase {
static final UUID NORMAL_STATION_ID = UUID.fromString("07d80c81-fe99-4a1f-a6aa-dc4d798b5626");
@Resource
StationMapper stationMapper;
@Test
void curdTest() {
stationMapper.delete(Wrappers.lambdaQuery());
Station station = Station.builder()
.id(NORMAL_STATION_ID)
.createdTime(LocalDateTime.now())
.additionalInfo(JacksonUtil.newObjectNode())
.stationName("三丙家专属充电站")
.stationCode("S20241001001")
.ownerId(NORMAL_USER_ID)
.longitude(120.107936F)
.latitude(30.267014F)
.ownerType(OwnerTypeEnum.C)
.province("浙江省")
.city("杭州市")
.county("西湖区")
.address("西溪路552-1号")
.status(StationStatusEnum.OPERATIONAL)
.build();
stationMapper.insertOrUpdate(station);
log.info("{}", stationMapper.selectById(NORMAL_STATION_ID));
}
}

View File

@@ -0,0 +1,44 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.app.dal.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import sanbing.jcpp.AbstractTestBase;
import sanbing.jcpp.app.dal.config.ibatis.enums.UserStatusEnum;
import sanbing.jcpp.app.dal.entity.User;
import sanbing.jcpp.infrastructure.util.jackson.JacksonUtil;
import java.time.LocalDateTime;
import java.util.UUID;
/**
* @author baigod
*/
class UserMapperTest extends AbstractTestBase {
static final UUID NORMAL_USER_ID = UUID.fromString("21cbf909-a23a-4396-840a-f34061f59f95");
@Resource
private UserMapper userMapper;
@Test
void curdTest() {
userMapper.delete(Wrappers.lambdaQuery());
User user = User.builder()
.id(NORMAL_USER_ID)
.createdTime(LocalDateTime.now())
.additionalInfo(JacksonUtil.newObjectNode())
.status(UserStatusEnum.ENABLE)
.userName("sanbing")
.userCredentials(JacksonUtil.newObjectNode())
.build();
userMapper.insertOrUpdate(user);
log.info("{}", userMapper.selectById(NORMAL_USER_ID));
}
}

View File

@@ -0,0 +1,98 @@
/**
* 抖音关注:程序员三丙
* 知识星球https://t.zsxq.com/j9b21
*/
package sanbing.jcpp.infrastructure.cache;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.data.redis.core.*;
import sanbing.jcpp.AbstractTestBase;
import java.time.Duration;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.stream.IntStream;
class RedisCacheConfigurationTest extends AbstractTestBase {
@Resource
RedisTemplate<String, Object> redisTemplate;
@Resource
ReactiveRedisTemplate<String, Object> reactiveRedisTemplate;
final static int testTimes = 10_000;
final static String hashKey = "hashKey";
@Test
@Order(1)
void kvTest() {
ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue();
IntStream.range(0, testTimes).forEach(i -> {
String key = "field:" + i;
String value = "value:" + i;
valueOperations.set(key, value, Duration.ofMinutes(1));
});
Object o = valueOperations.get("field:1000");
System.out.println(Objects.requireNonNull(o).getClass() + " : " + o);
}
@Test
@Order(2)
void hashTest() {
HashOperations<String, Object, Object> hashOperations = redisTemplate.opsForHash();
IntStream.range(0, testTimes).forEach(i -> {
String key = "field:" + i;
String value = "value:" + i;
hashOperations.put(hashKey, key, value);
});
redisTemplate.expire(hashKey, Duration.ofMinutes(1));
Map<Object, Object> slowKey = hashOperations.entries(hashKey);
System.out.println("map size:" + slowKey.size());
}
@Test
@Order(3)
void reactiveKVTest() {
ReactiveValueOperations<String, Object> valueOperations = reactiveRedisTemplate.opsForValue();
IntStream.range(0, testTimes).forEach(i -> {
String key = "field:" + i;
String value = "value:" + i;
valueOperations.set(key, value, Duration.ofMinutes(1)).block();
});
Object o = valueOperations.get("field:1000").block();
System.out.println(Objects.requireNonNull(o).getClass() + " : " + o);
}
@Test
@Order(4)
void reactiveHashTest() throws InterruptedException {
ReactiveHashOperations<String, Object, Object> hashOperations = reactiveRedisTemplate.opsForHash();
IntStream.range(0, testTimes).forEach(i -> {
String key = "field:" + i;
String value = "value:" + i;
hashOperations.put(hashKey, key, value).block();
});
redisTemplate.expire(hashKey, Duration.ofMinutes(1));
CountDownLatch latch = new CountDownLatch(1);
hashOperations.entries(hashKey).collectList().subscribe(entries -> {
System.out.println("size:" + entries.size());
latch.countDown();
});
latch.await();
}
}

View File

@@ -0,0 +1,2 @@
redis.connection.type=cluster
redis.cluster.nodes=10.102.12.101:30700,10.102.12.101:32027,10.102.12.101:30767,10.102.12.101:30250,10.102.12.101:30612,10.102.12.101:32303