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;
ALTER TABLE tem_replenishment MODIFY COLUMN suggest_quantity INT DEFAULT0COMMENT'建议量';
解析
- 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()