Skip to content

服务器托管,北京服务器托管,服务器租用-价格及机房咨询

Menu
  • 首页
  • 关于我们
  • 新闻资讯
  • 数据中心
  • 服务器托管
  • 服务器租用
  • 机房租用
  • 支持中心
  • 解决方案
  • 联系我们
Menu

数据库小技能:字段处理(BigDecimal 元转分,与0比较大小,bigDecimal格式化注解)

Posted on 2023年5月6日 by hackdl

引言

数据库小技能

I 字段前处理:检测

@JsonFormat注解:主要是后台到前台的时间格式的转换

@DataFormat注解:主要是前后到后台的时间格式的转换

@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date blog_date;// 博客发布日期

1.1 格式校验

多个代理商编号时,请用英文逗号,分隔

try {
            facilitatorIds4input= Arrays.asList(input.getFacilitatorIds().split(","))
                    .stream().map(s -> Long.parseLong(s)).collect(Collectors.toList());
        } catch (Exception e) {
            throw CommonException.create(ServerResponse.createByError("代理商id,多个代理商编号时,请用英文逗号,分隔"));
        }

使用注解进行格式校验

public class ApiPubSigPayRequest extends ApiBaseRequest{
    @NotBlank(message = "订单日期不能为空")
    @Pattern(regexp = "(^[0-9]*$)",message = "订单日期格式有误")
    private String orderDate;//订单日期 yyyyMMddHHmmss

    @DecimalMin(value = "1" , message = "订单金额必须大于1分")
    private Long payAmt;//订单金额 分

    @DecimalMin(value = "1" , message = "订单金额必须大于1分")
    private Long totAmt;//总金额 分

    @NotBlank(message = "交易码不能为空")
    private String transCode;//交易码

    @NotBlank(message = "微信/支付宝小程序appId不能为空")
    private String subAppid;

    @NotBlank(message = "微信/支付宝用户id不能为空")
    private String subOpenid;

    private String subject;//订单标题

}

1.2 检测唯一性

如果唯一性的其中一个字段时可选的,统一保存””空串,便于比较。

if(position.getEquipmentSn() ==null){// 统一保存""空串,便于比较
            position.setEquipmentSn("");
        }
        if (!(position.getMerchantId().equals(input.getMerchantId()) && position.getEquipmentSn().equals(input.getEquipmentSn()))) {
            // 检测唯一性
            if (getPosition(input.getMerchantId(), input.getEquipmentSn()) != null) {
                throw CommonException.create(ServerResponse.createByError("规则已经存在"));
            }
        }

1.3 日期范围查询

请求参数LocalDate

@ApiModelProperty(value = "开始时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate startTime;

    @ApiModelProperty(value = "结束时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate endTime;

LocalDate 转LocalDateTime

if (input.getStartTime() != null) {
            lambda.apply("create_time > {0}",input.getStartTime().atStartOfDay());
        }
        if (input.getEndTime() != null) {
            lambda.apply("create_time 

II 字段后处理

2.1 List转换成用逗号分割的字符串

String exidsStr = exFacilitator.stream().map(i->i.getFacilitatorId().toString()).collect(Collectors.joining(","));

2.2 按照枚举分组数据

List rates = new ArrayList();
        // 按照结算周期枚举分组
        List cycles = Arrays.asList(ESettlementCycle.class.getEnumConstants());
        cycles.forEach(item -> {
            RiskFacilitatorNetLimitRateDto dto = new RiskFacilitatorNetLimitRateDto();
            dto.setSettlementCycle(item);
            dto.setRateList(rateList.stream().filter(i -> i.getSettlementCycle() == item).collect(Collectors.toList()));
            rates.add(dto);
        });
        return rates;

III BigDecimal处理

3.1 BigDecimal与0比较大小

如果0表示不限制 ,推微信总上限。

if(activity.getMaxAmountByDay().compareTo(BigDecimal.ZERO)==0){//BigDecimal与0比较大小 -1 小于0,1 大于0
            stockUseRule.setMaxAmountByDay(stockUseRule.getMaxAmount());
        }else{
            stockUseRule.setMaxAmountByDay(activity.getMaxAmountByDay().multiply(new BigDecimal(100)).longValue());
        }

3.2 BigDecimal 元转分

stockUseRule.setMaxAmount((activity.getMaxAmount().multiply(new BigDecimal(100)).longValue()));//乘以100(单位:分)

3.3 自定义DecimalFormat注解

新增bigDecimal格式化注解CustomDecimalFormat,默认格式#.###,可用于费率字段。

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
//Jackson的注解继承注解
 @JacksonAnnotationsInside
// 为该注解指定一个自定义的json序列化解析器
@JsonSerialize(using = DecimalFormatSerialize.class)
public @interface CustomDecimalFormat {
    //0 整数或小数部分少位数补0
    //# 开头的0和末尾的0不显示,只要有可能就把数字拉上这个位置。
//    % 乘100然后加%
//     .小数分隔符
//     ,:整数分隔符

    String value() default "#.###";
    boolean showDecimalSeparator() default true;
    boolean zeroDisplay() default false;
}

服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net

Related posts:

  1. 租用服务器机柜价格一般多少
  2. “高效稳定的勐勐云服务器托管服务”
  3. 06.一文看懂并发编程中的锁
  4. 河南省云主机托管商:高效稳定的服务器解决方案
  5. 企业云服务器托管的益处

服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用

服务器托管

咨询:董先生

电话13051898268 QQ/微信93663045!

上一篇: 【学习笔记】摄影测量学部分知识回顾 单幅影像解析基础 双像立体测图 解析空中三角测量 数字摄影测量基础 数字高程模型及地形分析
下一篇: 第168期:后端骂前端:你他喵的下班太早了

最新更新

  • R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模|附代码数据
  • mosn基于延迟负载均衡算法 — 走得更快,期待走得更稳 | 京东云技术团队
  • C++之虚函数原理 虚函数表
  • etcd:增加30%的写入性能
  • 为什么要安装虚拟机–Linux系统,我的虚拟机安装过程记录—14版本虚拟机

随机推荐

  • 腾讯云香港服务器租用方便快捷
  • Matlab常用图像处理命令108例(三)
  • 台湾服务器托管推荐优选:选择最佳托管服务商
  • 无锡电信托管机房
  • 服务器托管服务规范

客服咨询

  • 董先生
  • 微信/QQ:93663045
  • 电话:13051898268
  • 邮箱:dongli@hhisp.com
  • 地址:北京市石景山区重聚园甲18号2层

友情链接

  • 服务器托管
  • 服务器租用
  • 机房租用托管
  • 服务器租用托管
©2023 服务器托管,北京服务器托管,服务器租用-价格及机房咨询 京ICP备13047091号-8