Java基本快捷方法
1、SQL默认建表3要素
复制代码
ALTER TABLE test
ADD COLUMN is_delete tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态 0:未删除 1:已删除',
ADD COLUMN create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
ADD COLUMN update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
ADD COLUMN `create_user_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '创建者',
ADD COLUMN `update_user_id` bigint(20) unsigned NOT NULL DEFAULT 0 COMMENT '更新者';
1.1:DDL增加语句
复制代码
ALTER TABLE test
ADD COLUMN is_delete tinyint(1) NOT NULL DEFAULT '0' COMMENT '删除状态 0:未删除 1:已删除',
ADD COLUMN create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
ADD COLUMN update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间';
1.2:DDL增加语句+修改字段顺序
复制代码
ALTER TABLE `tem_hot_sales`
MODIFY COLUMN `org_id` bigint UNSIGNED NOT NULL DEFAULT 10002 COMMENT '组织id' AFTER `id`;
解析
ALTER TABLE tem_hot_sales
表示修改名为 tem_hot_sales 的表结构。
MODIFY COLUMN org_id bigint UNSIGNED NOT NULL DEFAULT 10002 COMMENT '组织id'
表示修改 表中 org_id 列的定义:
- 数据类型修改为
bigint UNSIGNED(无符号的 64 位整数)
- 该字段不允许为 NULL (
NOT NULL)
- 默认值为
10002 (DEFAULT 10002)
- 添加字段注释为
'组织id'
AFTER id
表示把 org_id 这个列放到表中 id 列的后面,调整字段顺序。
1.3:DDL重置主键自增长值
复制代码
TRUNCATE TABLE `tem_order_spider`;
ALTER TABLE `tem_order_spider` AUTO_INCREMENT = 1;
java
复制代码
ALTER TABLE tem_replenishment
MODIFY COLUMN suggest_quantity INT DEFAULT 0 COMMENT '建议量';
解析
- ALTER TABLE tem_replenishment
说明需要修改名为 tem_replenishment 的表。
- MODIFY COLUMN suggest_quantity
说明对表中的 suggest_quantity 列进行修改。
- INT DEFAULT 0
把 suggest_quantity 字段的数据类型设置为 INT(整数),并且默认值为 0。
------也就是说,如果插入数据时没有为 suggest_quantity 指定值,系统会自动填入 0。
- COMMENT '建议量'
为该字段添加注释说明,内容为"建议量"。
2、出参格式化时间
复制代码
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime ;
@ApiModelProperty(value = "修改时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime ;
3、添加索引
复制代码
ALTER TABLE `org_organize_application` ADD INDEX `idx_app_id` (`app_id`);
4、非空判断
复制代码
List<OrganizeApplicationBaseRes> applicationBaseAll = this.getApplicationBaseAll();
return Optional.ofNullable(applicationBaseAll)
.orElseGet(Collections::emptyList)
.stream()
.filter(ObjectUtil::isNotEmpty)
.filter(item -> type.equals(item.getType()))
.collect(Collectors.toList());
5、重试
复制代码
//接单排除网络影响 进行3次重试
int retry = 0;
while (true) {
boolean eleConfirmed = eleConfirmed(platformOrderId, orderCreateDto, appInfo);
if (eleConfirmed) {
log.info("饿了么成功确认订单,platFormOrderId: {}", platformOrderId);
//修改订单状态 --> 订单正在确认中
orderRepo.changeInStatus(platformOrderId, OrderStatus.CONFIRMING);
orderUtil.saveOrderLog(ThirdType.ELE.getType(), orderId, "order.confirm", JSON.toJSONString(true));
return;
} else {
log.error("饿了么确认订单失败 platFormOrderId: {}; retry: {}", platformOrderId, ++retry);
if (retry > 3) {
return;
}
ThreadUtil.sleep(1000);
}
}
//最大等待时间(秒)
long maxWaitTime = 120;
//等待间隔(毫秒)
int retryInterval = 100;
long startTime = System.currentTimeMillis();
boolean eleConfirmed = false;
while (true) {
try {
eleConfirmed = eleConfirmed(platformOrderId, orderCreateDto, appInfo);
if (eleConfirmed) {
log.info("饿了么成功确认订单,platFormOrderId:{},orderId:{}", platformOrderId, orderId);
// 修改订单状态 --> 订单正在确认中
orderRepo.changeInStatus(platformOrderId, OrderStatus.CONFIRMING);
orderUtil.saveOrderLog(ThirdType.ELE.getType(), orderId, "order.confirm", JSON.toJSONString(true));
return;
}
} catch (Exception e) {
log.error("饿了么确认订单过程中发生异常,platFormOrderId:{},错误信息:{}", platformOrderId, e.getMessage(), e);
}
//检查是否超过最大等待时间
if (System.currentTimeMillis() - startTime >= TimeUnit.SECONDS.toMillis(maxWaitTime)) {
log.error("饿了么确认订单失败,超过最大等待时间未确认订单,platFormOrderId:{}, orderId:{}", platformOrderId, orderId);
return;
}
ThreadUtil.sleep(retryInterval);
}
6、redis锁
复制代码
String lockKey = Constants.ORDER_PUSH_KEY;
RLock lockStock = redissonClient.getLock(lockKey);
boolean hasLock = false;
try {
hasLock = lockStock.tryLock(5, 30, TimeUnit.SECONDS);
if (!hasLock) {
throw new ServiceException("系统繁忙,请稍后重试");
}
} catch (Exception e) {
log.error("--, 异常信息: {}", e.getMessage(), e);
} finally {
if (hasLock && lockStock.isHeldByCurrentThread()) {
lockStock.unlock();
}
}
7、默认填充
复制代码
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
8、getOne删除多余
复制代码
public TemOrder getByChannelOrderId(String channelOrderId) {
List<TemOrder> list = this.list(Wrappers.<TemOrder>lambdaQuery().eq(TemOrder::getChannelOrderId, channelOrderId));
if (ObjectUtil.isNotEmpty(list)) {
if (list.size() > 1) {
TemOrder maxIdRecord = list.stream().max(Comparator.comparing(TemOrder::getId)).orElse(null);
Long maxId = maxIdRecord.getId();
List<Long> idsToDelete = list.stream().filter(record -> !record.getId().equals(maxId)).map(TemOrder::getId).collect(Collectors.toList());
if (!idsToDelete.isEmpty()) {
this.removeByIds(idsToDelete);
}
return maxIdRecord;
} else {
return list.get(0);
}
}
return null;
}
9、保存2位小数
复制代码
BigDecimal.valueOf(Double.valueOf(strDeliveryFee)).setScale(2, RoundingMode.HALF_UP).doubleValue()