自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 收藏
  • 关注

原创 easyexcel生成动态模板(模板支持下拉框),动态字段导出excel表格,常规字段导出excel表格

备注:动态字段导出主要是用了反射的原理,跟excel需要导出的字段一一映射。话不多说,直接上代码;1.生成的动态模板如图:如上图,如果下拉框里不是选择的值,会给用户提示,下拉框用来限制用户导入只能选择下拉框中的值先放controller层调用@RestController@RequestMapping("/test")@Slf4j@RequiredArgsConstructorpublic class TestExcelController { ...

2022-05-12 17:00:21 9505 9

原创 easyExcel导出合并指定的单元格

项目中需要导出并合并指定的单元格,直接上代码:/** * 项目列表导出 */@GetMapping("v1/export_excel.do")@ApiOperation(value = "项目导出", httpMethod = "GET")@CrossOriginpublic void excel(@RequestParam("id") String id, HttpServletResponse response) throws IOException { //查询需要导

2021-07-12 21:52:13 3156 2

原创 java双层递归,并结合javascript 求多层循环嵌套,并解析成数学公式

@Slf4jpublic class RuleCalcUtils { public static String json = "{\"id\":1,\"parentId\":0,\"rules\":0,\"map\":[{\"id\":0.21713562278031895,\"parentId\":1,\"rules\":2,\"map\":[{\"userLevelParam\":\"职级\",\"range\":\"实时数据\",\"relation\":\"不属于\",\"userLe.

2021-06-15 15:45:29 420 2

原创 swagger-ui导出word接口文档

开发时用的swagger-ui API接口开发,项目交付时客户需要word形式的接口文档,几百个接口,不可能一个一个写噻,直接通过下面的微springboot项目生成word文档快捷方便代码分享链接:https://pan.baidu.com/s/1dRdmRWBEm5ufTttUpyFr8Q 提取码:fht2下载代码并运行1、修改 application.yml 文件的swagger.url为Swagger Json资源的url地址。2、服务启动后:浏览器访问 htt...

2020-09-04 16:09:21 16641 38

原创 定位当前位置(坐标点)到 附近多个位置(坐标点)最短路径动态规划(汉密尔顿回路算法整合百度地图API)

最近项目中需要实现这样一个功能:从当前位置,规划一条最优线路到附近多个工厂的最优线路。必须要有详细的路径坐标点信息。 思路:1.首先 使用汉密尔顿回路算法,求解出当前位置坐标点到附近工厂最短线路的路径。2.借助百度地图API,实现2点间坐标点的详细路径。话不多说,直接整代码:项目使用的框架是springboot: 参数path格式为:40.465,116.314|40....

2020-04-08 10:16:36 5479 1

原创 高并发下,websocket的安全推送,避免websocket推送太频繁挂掉问题

最近项目中遇见一个问题,2个kafka主题需要大批量接收实时的GPS坐标,然后用websocket推送给前端。由于消费十分频繁,websocket经常出现与前端断开连接导致推送失败挂掉。package com.ncse.zhhygis.collect;import java.io.IOException;import java.util.concurrent.CopyOnWriteArr...

2019-12-06 15:08:29 15406 5

原创 easyExcel动态导出,合并指定单元格

List<String> head3 = Arrays.asList("旷工", "病事", "婚产护丧","探亲","年休","加班","夜班","出勤天数","其中|高铁线作业天数");如上图所示,需要使用easyExcel动态导出上述表格并指定合并其中的单元格,日期是动态的,每个月不相同,直接上实现代码,以demo形式展现,更好理解。List<String> head1 = Arrays.asList("序号", "姓名", "职名或岗位");.head(head).sheet("考勤记录列表")

2023-04-25 15:34:55 1919 1

原创 oracle使用mybatis批量新增数据,批量更新数据

oracle使用mybatis批量新增数据,批量更新数据

2023-04-25 15:20:11 1238

原创 oracle批量新增数据,如果有指定字段相同的数据,则更新

oracle批量新增数据,如果有指定字段相同的数据,则更新

2023-01-17 10:50:00 1643

原创 mybatis使用双层<foreach> 循环嵌套

有个需求,要用到mybatis的双层循环嵌套插入数据,当然,可以使用单层,在业务代码层面循环插入,那样会多出很多次IO数据库,如果并发量高了,性能将会很低;

2022-09-29 09:54:33 4744

原创 分布式系统异步线程池工具类(基于阿里开源的TTL)

分布式系统异步线程池工具类(基于阿里开源的TTL)

2022-09-26 15:56:17 1707

原创 mysql拷贝表中指定字段的数据生成新数据

其中:crisps_hr_time_shift_time是表名;所有#{}字段都是集合动态传入的要替换的字段;#{item.id}主键ID肯定要从新生成并传入替换,不然会报主键冲突;#{item.superId} 这个字段是条件,此处是查询表中指定ID的数据进行拷贝生成新数据。比如:现在有个需求,需要把表中某些行数据拷贝一份,生成新数据,新数据的主键ID和其他某些指定行是接口传入的,其余的字段和拷贝的行的字段数据一致。

2022-09-22 10:44:12 571

原创 sql判断时间段是否重叠

话不多说,直接上SQL:

2022-08-17 16:13:28 1214

原创 规则引擎QLExpress表达式计算数学公式

规则引擎QLExpress表达式计算数学公式

2022-07-05 17:49:08 2547

原创 使用IDEA将本地已有的新项目完整提交到gitlab上

使用IDEA将本地已有的新项目完整提交到gitlab上

2022-06-15 16:10:02 5067 1

原创 数字工具类NumberUtil实现数字精确计算,避免精度丢失,四舍五入,保留小数等等

import cn.hutool.core.util.NumberUtil;数字工具针对数学运算做工具性封装。1 加减乘除四种运算都会将double转为BigDecimal后计算,解决float和double类型无法进行精确计算的问题。这些方法常用于商业计算。 //针对数字类型做加法 NumberUtil.add(1,2);//3 // 针对数字类型做减法 NumberUtil.sub(1,1);//0 //针对数...

2022-05-31 17:36:46 10728

原创 springboot项目打包报错:Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0

原因是打包插件plugins标签里面缺少maven-resources-plugin依赖,添加上即可解决。完整的依赖为:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId&g...

2022-05-31 17:19:12 2066 2

原创 手动分页工具类(特殊场景没法使用数据库分页情况下使用)

有些情况下,我们需要聚合查询的结果,然后再分页,这种情况下没法使用数据库分页的,这时候手动分页就派上了用处。下面是一个分页工具类,只需传入聚合查询出的结果集,和起始页,每页尺寸,就可以手动分页。使用时直接调用ManualPageUtils.setPage(list,start,length)即可返回分页结果。import org.apache.poi.ss.formula.functions.T;import java.util.ArrayList;import java.util.Linke.

2022-05-13 16:45:13 477

原创 在GitHub上传自己的项目

1.在电脑磁盘中找到你的项目,右击选择git Base Here,进入命令行操作2.输入git init,git init在当前项目的目录中生成本地的git管理(会发现在当前目录下多了一个.git文件夹)3.输入git add .git add .这个是将项目上所有的文件添加到本地仓库中的意思,如果想添加某个特定的文件,只需把.换成这个特定的文件名即可。4. 用git status 可以查看当前仓库的提交状态(这一步可以忽略,只是查看提交到本地的代码是否成功);git s..

2022-04-13 16:56:27 238

原创 sql条件控制主表和辅助表

select e.id,e.merchant_id as merchantId,e.head_url as headUrl,e.name,e.work_code as workCode,e.phone,e.dept_id as deptId,d.dept_name as deptName,d.dept_full_path as deptFullPath,e.post_name as postName,e.leader_id as leaderId,e.user_id as userId,if(l.w.

2022-02-25 17:20:38 427

原创 Java递归组装树结构

1.先查询出需要组装的所有数据集合:前提是 id 和 parentId结构符合树结构存储,即每个id对应的都有一个parentId,最顶层parentId默认设置成1,表示指定他为最顶层

2022-01-24 16:03:18 1583

原创 mybatis使用case when进行批量更新

/** * 更新员工表 * @method: updateEmp * @param list * @return {@link } * @Author: zwx * @Date: 2021/3/11 19:53 */void updateEmp(@Param("list") List<String> list);mapper.xml层<update id="updateEmp" parameterType="java.util.List"> UPD.

2022-01-24 15:58:09 1445

原创 mybatis批量插入

实体类:EmpFileData@Data@TableName("hr_emp_file_data")@Accessors(chain = true)public class EmpFileData implements Serializable { /** * 主键ID */ private Long id; /** * 身份证 */ private String idCard; /** * 文件标志位 0

2022-01-24 15:51:48 260

原创 mybatis批量修改2种方式

一种:根据ID集合批量修改属性列如:mapper层/** * 批量删除员工 * @param param 入参 */void batchEmpStatus(DeleteEmpParam param);mapper.xml层<update id="batchEmpStatus" parameterType="net.sharing.backstage.oa.param.emp.DeleteEmpParam"> update oa_emp set del_flag

2022-01-24 15:43:22 21418

原创 java在interface中定义常量和在class中定义常量的区别

package com.example;public final class Constants { private Constants() {} public static final int A = 100; public static final int B = 100; public static final int C = 100; public static final int D = 100;}package com.example;pu...

2022-01-21 10:09:56 2264 6

原创 异步线程池和自定义2种线程池

@Configuration@EnableAsyncpublic class ThreadAsyncConfigurer implements AsyncConfigurer { private final static Logger log = LoggerFactory.getLogger(ThreadAsyncConfigurer.class); @Bean @Override public Executor getAsyncExecutor() { .

2021-12-30 13:40:57 381

原创 aop全局操作日志记录

/** * @program: crisps-hr * @Description: 全局日志记录切面,只记录增删改 * @Author: zwx * @Date: 2021/4/28 14:52 */@Aspect@Componentpublic class GlobalLogAspect { /** * 自定义一种IO密集型任务的线程池 */ private static final ThreadPoolExecutor EXECUTOR = new.

2021-12-30 13:37:16 437

原创 AES的加密和解密工具类

import org.apache.commons.codec.binary.Base64;import org.apache.commons.lang3.StringUtils;import sun.misc.BASE64Decoder;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.spec.SecretKeySpec;import java.nio.charset.Stand.

2021-12-30 13:31:21 663

原创 httpUtil工具类

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ConnectException;import java.net.SocketTimeoutException;import java.net.URL;import java.

2021-12-30 13:30:03 203

原创 easyExcel导入文本类型的时间校验以及格式转换

首先日期格式避免转换,接收时直接用文本格式接收:excel中输入日期默认保存的格式:2021/1/3package net.dgg.hr.modules.emp.entity;import com.alibaba.excel.annotation.ExcelProperty;import lombok.Data;import java.io.Serializable;/** * @program: hr-service * @Description: 转正信息 * @Autho

2021-07-26 14:40:57 6438 2

原创 二倍均值算法实现公平抢红包

假设剩余红包金额为m元,剩余人数为n,那么有如下公式。每次抢到的金额 = 随机区间 [0.01,m /n × 2 - 0.01]元 这个公式,保证了每次随机金额的平均值是相等的,不会因为抢红包的先后顺 序而造成不公平。举个例子如下。 假设有5个人,红包总额100元。 100÷5×2 = 40,所以第1个人抢到的金额随机范围是[0.01,39.99]元,在正常 情况下,平均可以抢到20元。 假设第1个人随机抢到了20元,那么剩余金额是80元。 80÷4×2 = 40,所以第2个人抢到的...

2021-07-19 16:44:07 1237

原创 web跨站脚本攻击(XSS)与sql注入攻击 实例

免责申明:对于此内容仅是提供参考,用于开发人员针对黑客攻击做好安全防范XSS攻击:跨站脚本在英文中称为Cross-Site Scripting,缩写为CSS。但是,由于层叠样式表 (Cascading Style Sheets)的缩写也为CSS,为不与其混淆,特将跨站脚本缩写为XSS。跨站脚本,顾名思义,就是恶意攻击者利用网站漏洞往Web页面里插入恶意代码,一般需要以下几个条件:客户端访问的网站是一个有漏洞的网站,但是他没有意识到;在这个网站中通过一些手段放入一段可以执行的代码,吸引客户

2021-07-02 14:53:51 3043

原创 SQL Server数据库定时自动备份

sqlserver 可以通过微软工具SQL Server Management Studio 进行数据库定时自动备份,具体步骤如下:1,打开SQL Server Management Studio (本例以sqlserver2008 r2为例),打开 作业2,“作业”文件夹右键点击,出现右键菜单,点击“新建任务”3,在“新建任务”对话框,常规区域,输入名称(自定义),并选择相关...

2021-07-02 14:53:31 3265

原创 mybatis中大于小于的写法

第一种写法(1):原符号 < <= > >= & ' "替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;例如:sql如下:create_date_time &gt;= #{startTime} and create_dat.

2021-07-02 14:52:10 12338

原创 java将list集合中具有相同属性的对象放入到一个新的list中

List<List<User>> result = new ArrayList<>();Map<Integer,List<User>> map = new HashMap<>();//userList是要操作的list集合for (User user : userList) { Integer age = user.getAge(); List<User > lstUser; if (map.c...

2021-07-01 18:00:46 4525 1

原创 java集合中元素两两互相比较

if (levelNames.size() > 1) { for (int i = 0; i < levelNames.size(); i++) { for (int j = levelNames.size() - 1; j > i; j--) { List<List<Long>> lists = new ArrayList<>(); List<Long> o1 = (.

2021-06-11 16:17:29 4104

原创 java字符串集合转换成数字类型集合

List<String> strings = Arrays.asList(infos.split(","));//List<String>转List<Long>List<Long> ids = strings.stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());

2021-06-11 16:14:19 2643 1

原创 mysql传入一个参数(一个输入框),模糊匹配多个字段查询

select id,name,user_out_work_no as workCode,user_level_name as userLevelNamefrom crisps_mch_user_infowhere mch_detail_id = #{mchUserParam.mchDetailId}<if test="mchUserParam.nameWork != null and mchUserParam.nameWork != '' "> AND CONCAT( IFNUL.

2021-05-21 15:17:51 2667

原创 java.math.BigDecimal处理金额、利率、利息相关

java小数点处理BigDecimal.setScale使用Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处 理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用 java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运 算,而必须调

2021-03-30 14:32:52 655

原创 mysql在指定列后面添加多列

ALTER TABLE hr_att_abnormal ADD COLUMN `push_flag` INT (1) NOT NULL DEFAULT '1' COMMENT '考勤异常推送标志:1未推送,2已推送,3推送失败' AFTER `name`, ADD COLUMN `push_time` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '推送时间' AFTER `push_flag`, ADD C...

2021-03-17 11:30:16 3684

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除