- 博客(80)
- 收藏
- 关注
原创 SpringBoot整合WebSocket实现消息推送或聊天功能示例
springboot整合websocket服务,处理nginx配置和gateway通知转发消息问题
2024-09-14 18:07:09 847
原创 MySQL根据日期统计时没有数据的日期也需要返回0
我们经常会碰需要根据日期统计数据的问题,正常情况 GROUP BY 日期就可以得到我们想要的数据,但是有些时候某些日期没有数据可是我们又想它能返回一个0,这个时候 GROUP BY 就不行了。从上面的结果可以看出除了有数据的日期,没有数据的日期也会返回一个0.00,这里要注意 WITH RECURSIVE 是 MySQL8.0 才有的。现在我们希望在没有数据的日期也返回该日期和对应的 0 值,这里可以通过创建一个日期序列来实现。先看 GROUP BY 查询。
2024-09-12 15:19:45 333
原创 Java根据经纬度计算两个坐标之间的距离(含SQL计算)
最近接到两个需求,一个是通过小程序扫码开门的,我这边主要就是根据用户定位判断用户离扫码店铺距离小于多少米的时候才可以调远程调开门接口,另外一个就是获取用户周围有哪些店铺。主要就是根据定位获取的经度维度计算两个点之间的球面距离,这里我们主要采用Haversine公式来计算,据说这是目前比较精确用来计算地球上两个点之间距离的算法
2024-08-30 18:12:44 559
原创 MySQL将数据库所有表格和列编码格式从utf8mb3换成utf8mb4
MYSQL将数据库所有表格字段字符集从 utf8mb3 换成 utf8mb4
2024-08-30 09:28:27 1043
原创 Java微信小程序获取openId和用户手机号示例
用户扫码进入小程序时,前端以静默的方式调用一次 wx.login() 方法拿到 code 再调后端接口去获取用户 openId 和 unionId(绑定开放平台后会返回),后台拿到 openId 后就可以给用户返回登录成功信息,信息里面可以有一个手机号标识,然后前端再根据这个标识判断,如果没有手机号,前端再调小程序微信授权手机号的按钮,这个必须用户手动确定,前端拿到手机号授权 code 再送给后端获取手机号并更新到用户信息,完成绑定。
2024-08-23 18:49:34 641 1
原创 Java企业微信服务商代开发获取AccessToken示例
最后就是应用的 suite_id 和 suite_secret 还需要一个 suite_ticket ,前面两个在应用信息里面就可以看到,suite_ticket 这个也是需要通过回调获取 ,具体参考官方文档。然后是企业的 corpid 和企业的永久授权码 permanent_code ,这两个是需要在企业授权的的时候通过回调获取的,具体请参考官方文档。可以看到里面大致有三种token,一个是服务商的token,一个是企业授权token,还有一个是应用的token。还有企业微信的两个基本配置类。
2024-07-24 15:47:49 429
原创 Java XML转JSON工具类
最近对接微信发现很多接口数据用的还是XML格式,所以为了方便使用我们给它转成JSON格式的,这里特别处理了一下多层嵌套的问题。
2024-07-23 16:33:08 235
原创 MYSQL审批流程判断同一层级审批人是否全部通过审批
我们再看一下apply_id 为1 serial_no 为1的,因为都审核通过了所以返回的就是1了。在做流程审批的时候,通常会出现某一层有多个审批人的情况,这个时候需要所有人都通过才会进入到下一步。可以看到 apply_id 为1 serial_no 为2的因为还有一个人没有审核完成返回的是0。serial_no相同的代表是同一层级审批人。approval_status是审核状态。每一个审批申请对应一个apply_id。下面我们可以用一个SQL来进行这个判断。数据结构如下图表格所示。
2024-07-11 17:41:34 295
原创 MYSQL查询审批流程最新的一条记录示例
普通用户查询没什么好说的,我们只需要在业务层判断当前用户不是管理员,那么 user_id 等于当前登录用户ID就可以,这里重点要处理的是管理员查看所有的审批记录问题,因为作为管理员肯定每个申请只需要看到一条,而且看到的这条应该是最新的一条才行。接下来我们来处理管理员本身也是审批人的问题,这个时候他需要看到的就不是最新的那条记录,而是应该获取自己审批的那条,所以当登录用户是管理员的时候,我们就需要先判断当前申请审批记录里面有没有他的记录,有的话就查自己的,没有的话就查最新的。数据结构如下图表格所示。
2024-07-11 17:06:21 402
原创 Java启动jar包设置内存分配详细说明
调整堆内存大小:根据应用程序的实际内存需求,调整 -Xms 和 -Xmx的值。通常,初始堆大小(-Xms)和最大堆大小(-Xmx)应该设置为相同,以避免 JVM在运行过程中调整堆大小带来的开销。可以根据应用程序的特点选择合适的垃圾回收器。新生代内存调整:新生代(-Xmn)的大小应该根据应用程序对象的生命周期进行调整。JVM 会选择默认的垃圾回收器,这通常是并行垃圾回收器(Parallel GC),具体取决于 JVM 的版本。新生代大小(-Xmn):默认情况下,新生代的大小会根据堆大小动态调整。
2024-06-20 19:30:08 2733
原创 Java AES加密工具类
在做AES加密的时候一定要注意private static final String DEFAULT_CIPHER_ALGORITHM = “AES/ECB/PKCS5Padding” 这个参数,很多时候前后端加密解密不一致都是这里配置不一致导致的。如果明文数据不是 16 字节的倍数,就需要进行填充。缺点是相同的明文块会被加密成相同的密文块,容易受到模式分析攻击,因此不适合加密大数据或高安全性需求的场景。举例来说,如果你加密的文本有很多重复的模式,使用 ECB 模式会暴露这些重复模式的信息,降低安全性。
2024-06-20 17:07:11 497
原创 Java实现自动定时任务配置并判断当天是否需要执行示例
最近接到一个需求,就是用户要能配置一个定时循环的任务,就是和手机闹钟循环差不多,设置好比如周一、周二、周三,那么在这几天内这个任务就需要自动执行。需求不复杂,首先我需要判断当前是周几,当然用户说了让我看手机闹钟的循环规则,我看了下还有法定工作日和法定节假日这些。所以我们先写个工具类来判断当前日期是否需要执行。剩下的就好说了,我们只需要加一个定时器就可以了。显示今天不是需要重复的一天,因为今天星期四。
2024-06-20 16:33:31 348
原创 Java设计模式之建造者模式
建造者模式是一种创建型设计模式,它允许你创建复杂对象的过程与该对象的表示分离,使得同样的构建过程可以创建不同的表示。
2024-03-30 13:59:52 475
原创 Java多线程实现主线程等待异步结果示例
通常为了加快程序运行速度,我们可以在程序中开启异步线程任务,在异步任务执行期间,主线程可以继续执行其他任务,最后我们还需要主线程等待异步线程完成后一起结束,下面是用CompletableFuture实现的一个示例
2024-03-30 11:35:18 341
原创 Java设计模式之观察者模式
观察者模式是一种行为设计模式,它允许一个对象(称为主题或可观察者)维护一系列依赖于它的对象(称为观察者),当主题的状态发生变化时,它会自动通知所有的观察者。这种模式被广泛应用于实现对象之间的松耦合,其中主题和观察者之间的关系是动态的。
2024-03-30 11:20:17 829
原创 Java设计模式之代理模式
代理模式是一种结构型设计模式,其目的是在不改变原始类(被代理类)的前提下,通过引入代理类来间接访问原始类,并且可以在代理类中添加额外的逻辑或控制访问原始类的方式。
2024-03-28 16:33:12 1106 1
原创 Java设计模式之装饰器模式
装饰器模式是一种结构型设计模式,它允许动态地将责任附加到对象上。装饰器模式是通过创建一个包装对象,也就是装饰器,来包裹真实对象,从而实现对真实对象的功能增强。装饰器模式可以在不修改原有对象的情况下,动态地添加功能。
2024-03-28 11:35:37 1119
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人