出入库报表统计怎么做 入库出库库存自动计算库存方法
原创

出入库报表统计怎么做 入库出库库存自动计算库存方法

好文
试试语音读文章

本头条号主要是java常用关键技术点。通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新。欢迎码友关注点赞收藏转发!

关注多的话。后面会录制一些视频教程。图文和视频结合。比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱。码友们冲啊

正文

在java开发中。几乎所有系统都有报表统计的功能。而报表统计的其中一个参数就是时间段。有环比同比时间段统计。有时间段统计。有周统计。有趋势图统计等。所以封装了该工具类。避免在每个统计方法中重复的计算这样那样的日期。

照旧先上工具类使用栗子:

System.out.println("201909环比日期="+ReportDateUtil.getHbMonth("201909"));System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909"));System.out.println("201901-201909相隔月数="+ReportDateUtil.getPeriodAmount("20190101","20190901",ReportDateUtil.MONTH));//用于趋势图中显示日期。当统计值为0时也是要显示的哦System.out.println("201901-201909之间的日期列表="+ReportDateUtil.getPeriodDateList("20190101","20190901",ReportDateUtil.MONTH));ReportDateUtil.getMonthWeekGroupList("201909").forEach((k,v)->{//计算9月份共有多少周。每周的日期System.out.println("201909第"+k+"周:"+v.toString());});System.out.println("201909中的自然周为="+ReportDateUtil.getMonthWeekList("201909"));

上面使用例子打印如下

201909环比日期=201908201909同比日期=201809201901-201909相隔月数=8201901-201909之间的日期列表=[201901,201902,201903,201904,201905,201906,201907,201908,201909]201909第1周:[2019-09-01,2019-09-02,2019-09-03,2019-09-04,2019-09-05,2019-09-06,2019-09-07]201909第2周:[2019-09-08,2019-09-09,2019-09-10,2019-09-11,2019-09-12,2019-09-13,2019-09-14]201909第3周:[2019-09-15,2019-09-16,2019-09-17,2019-09-18,2019-09-19,2019-09-20,2019-09-21]201909第4周:[2019-09-22,2019-09-23,2019-09-24,2019-09-25,2019-09-26,2019-09-27,2019-09-28]201909第5周:[2019-09-29,2019-09-30]201909中的自然周为=[201939,201936,201938,201937,201940]

下面给出完整的工具类。这是我项目中在报表统计时经常用到的。有需要的码友可以先收藏。说不定哪天就用到了。

importjava.time.DayOfWeek;importjava.time.LocalDate;importjava.time.Period;importjava.time.YearMonth;importjava.time.format.DateTimeFormatter;importjava.time.temporal.ChronoUnit;importjava.time.temporal.TemporalAdjusters;importjava.time.temporal.WeekFields;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjava.util.stream.Collectors;importjava.util.stream.Stream;/***报表日期工具类**@authorliang-liangxn*@date2019/9/1910:17*/publicclassReportDateUtil{privatestaticfinalDateTimeFormatterDTF_YYYYMMDD=DateTimeFormatter.ofPattern("yyyyMMdd");privatestaticfinalDateTimeFormatterDTF_YYYYMM=DateTimeFormatter.ofPattern("yyyyMM");privatestaticfinalDateTimeFormatterDTF_YYYY=DateTimeFormatter.ofPattern("yyyy");privatestaticfinalStringPATTERN_WEEK="yyyyw";publicstaticfinalintYEAR=1;publicstaticfinalintMONTH=2;publicstaticfinalintDAY=3;publicstaticvoidmain(String[]args){System.out.println("201909环比日期="+ReportDateUtil.getHbMonth("201909"));System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909"));System.out.println("201901-201909相隔月数="+ReportDateUtil.getPeriodAmount("20190101","20190901",ReportDateUtil.MONTH));System.out.println("201901-201909之间的日期列表="+ReportDateUtil.getPeriodDateList("20190101","20190901",ReportDateUtil.MONTH));ReportDateUtil.getMonthWeekGroupList("201909").forEach((k,v)->{System.out.println("201909第"+k+"周:"+v.toString());});System.out.println("201909中的自然周为="+ReportDateUtil.getMonthWeekList("201909"));}/***获取月的第一天**@paramcurrMonth当前日期字符串。格式yyyyMM*@return*/publicstaticStringgetFirstOfMonth(StringcurrMonth){currMonth=currMonth+"01";LocalDated=LocalDate.parse(currMonth,DTF_YYYYMMDD);returnDTF_YYYYMMDD.format(d.with(TemporalAdjusters.firstDayOfMonth()));}/***获取月的最后一天**@paramcurrMonth当前日期字符串。格式yyyyMM*@return*/publicstaticStringgetLastOfMonth(StringcurrMonth){currMonth=currMonth+"01";LocalDated=LocalDate.parse(currMonth,DTF_YYYYMMDD);returnDTF_YYYYMMDD.format(d.with(TemporalAdjusters.lastDayOfMonth()));}/***获取年的第一天**@paramcurrYear当前日期字符串。格式yyyy*@return*/publicstaticStringgetFirstOfYear(StringcurrYear){currYear=currYear+"0101";LocalDated=LocalDate.parse(currYear,DTF_YYYYMMDD);returnDTF_YYYYMMDD.format(d.with(TemporalAdjusters.firstDayOfYear()));}/***获取年的最后一天**@paramcurrYear当前日期字符串。格式yyyy*@return*/publicstaticStringgetLastOfYear(StringcurrYear){currYear=currYear+"0101";LocalDated=LocalDate.parse(currYear,DTF_YYYYMMDD);returnDTF_YYYYMMDD.format(d.with(TemporalAdjusters.lastDayOfYear()));}/***计算环比月**@paramcurrMonth当前日期字符串。格式yyyyMM*@return*/publicstaticStringgetHbMonth(StringcurrMonth){currMonth=currMonth+"01";LocalDated=LocalDate.parse(currMonth,DTF_YYYYMMDD);returnDTF_YYYYMM.format(d.minusMonths(1L));}/***计算同比月**@paramcurrMonth当前日期字符串。格式yyyyMM*@return*/publicstaticStringgetTbMonth(StringcurrMonth){currMonth=currMonth+"01";LocalDated=LocalDate.parse(currMonth,DTF_YYYYMMDD);returnDTF_YYYYMM.format(d.minusYears(1L));}/***计算两个日期之间的年(或月或日)的集合**@paramstartDate开始的日期yyyyMMdd*@paramendDate结束的日期yyyyMMdd*@paramunit年(或月或日)的标识。默认日*@return*/publicstaticList<String>getPeriodDateList(StringstartDate,StringendDate,intunit){List<String>l=newArrayList<>();LocalDatestart=LocalDate.parse(startDate,DTF_YYYYMMDD);LocalDateend=LocalDate.parse(endDate,DTF_YYYYMMDD);Periodp=Period.between(start,end);if(ReportDateUtil.YEAR==unit){for(inti=0;i<=p.getYears();i++){l.add(DTF_YYYY.format(start.plusYears(i)));}}elseif(ReportDateUtil.MONTH==unit){for(inti=0;i<=p.getMonths();i++){l.add(DTF_YYYYMM.format(start.plusMonths(i)));}}elseif(ReportDateUtil.DAY==unit){for(inti=0;i<=p.getDays();i++){l.add(DTF_YYYYMMDD.format(start.plusDays(i)));}}returnl;}/***计算两个日期之间的年(或月或日)的集合**@paramstartDate开始的日期yyyyMMdd*@paramendDate结束的日期yyyyMMdd*@paramunit年(或月或日)的标识。默认日*@return*/publicstaticList<String>getPeriodDateList(StringstartDate,StringendDate,intunit,Stringpattern){DateTimeFormatterdtf=DateTimeFormatter.ofPattern(pattern);List<String>l=newArrayList<>();LocalDatestart=LocalDate.parse(startDate,DTF_YYYYMMDD);LocalDateend=LocalDate.parse(endDate,DTF_YYYYMMDD);Periodp=Period.between(start,end);if(ReportDateUtil.YEAR==unit){for(inti=0;i<=p.getYears();i++){l.add(dtf.format(start.plusYears(i)));}}elseif(ReportDateUtil.MONTH==unit){for(inti=0;i<=p.getMonths();i++){l.add(dtf.format(start.plusMonths(i)));}}elseif(ReportDateUtil.DAY==unit){for(inti=0;i<=p.getDays();i++){l.add(dtf.format(start.plusDays(i)));}}returnl;}/***计算某个月的的每一周在一年中属于第几周的集合。如2019年9月有6周(周一为一周开始)。则返回结果为:[201934,201935,201936,201937,201938,201939]**@paramcurrMonth年月字符串yyyyMM*@return*/publicstaticList<String>getMonthWeekList(StringcurrMonth){returngetMonthWeekList(currMonth,PATTERN_WEEK);}/***计算某个月的的每一周在一年中属于第几周的集合。如2019年9月有6周(周一为一周开始)。则返回结果为:[201934,201935,201936,201937,201938,201939]**@paramcurrMonth年月字符串yyyyMM*@return*/publicstaticList<String>getMonthWeekList(StringcurrMonth,Stringpattern){finalDateTimeFormatterDTF_WEEK=DateTimeFormatter.ofPattern(pattern);YearMonthyearMonth=YearMonth.parse(currMonth,DTF_YYYYMM);LocalDatestart=LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth());LocalDateend=LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth());if(end.isAfter(LocalDate.now())){end=LocalDate.now();}//按周分组。设置一周的开始日期为星期天Map<String,List<LocalDate>>collect=Stream.iterate(start,localDate->localDate.plusDays(1L)).limit(ChronoUnit.DAYS.between(start,end)+1).collect(Collectors.groupingBy(localDate->DTF_WEEK.format(localDate)));List<String>l=newArrayList<>();collect.forEach((k,v)->l.add(k));returnl;}/***计算某个月的自然周数的集合。按周分组。并列出每周的天日期。例如201909月有5周。每周的日期如下:*第1周:[2019-09-01,2019-09-02,2019-09-03,2019-09-04,2019-09-05,2019-09-06,2019-09-07]*第2周:[2019-09-08,2019-09-09,2019-09-10,2019-09-11,2019-09-12,2019-09-13,2019-09-14]*第3周:[2019-09-15,2019-09-16,2019-09-17,2019-09-18,2019-09-19,2019-09-20,2019-09-21]*第4周:[2019-09-22,2019-09-23,2019-09-24,2019-09-25,2019-09-26,2019-09-27,2019-09-28]*第5周:[2019-09-29,2019-09-30]**@paramcurrMonth年月字符串yyyyMM*@return*/publicstaticMap<Integer,List<LocalDate>>getMonthWeekGroupList(StringcurrMonth){YearMonthyearMonth=YearMonth.parse(currMonth,DTF_YYYYMM);LocalDatestart=LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth());LocalDateend=LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth());//按周分组。设置一周的开始日期为星期天returnStream.iterate(start,localDate->localDate.plusDays(1L)).limit(ChronoUnit.DAYS.between(start,end)+1).collect(Collectors.groupingBy(localDate->localDate.get(WeekFields.of(DayOfWeek.SUNDAY,1).weekOfMonth())));}/***计算两个日期相隔多少年(或月或日)**@paramstartDate开始的日期yyyyMMdd*@paramendDate结束的日期yyyyMMdd*@paramunit计算年(或月或日)的标识。默认日*@return*/publicstaticintgetPeriodAmount(StringstartDate,StringendDate,intunit){LocalDatestart=LocalDate.parse(startDate,DTF_YYYYMMDD);LocalDateend=LocalDate.parse(endDate,DTF_YYYYMMDD);Periodp=Period.between(start,end);if(ReportDateUtil.YEAR==unit){returnp.getYears();}elseif(ReportDateUtil.MONTH==unit){returnp.getMonths();}returnp.getDays();}}

大部分系统都是有图表统计的。有图表统计的话基本都能使用到这个工具类。这也是我在多个项目中都用到。所以封装了这个工具类。

您还感兴趣的文章推荐

以上就是由互联网推广工程师 网创网 整理编辑的,如果觉得有帮助欢迎收藏转发~

分享到 :
相关推荐

发表评论

您的电子邮箱地址不会被公开。

评论(2)

  • 迎客心 永久VIP 2022年12月14日 02:01:13

    出入库报表统计怎么做 入库出库库存自动计算库存方法 这篇解答确实也是太好了

  • 陌清茗 永久VIP 2022年12月14日 02:01:13

    日期,字符串,工具,格式,环比,报表,时间段,自然,系统,标识

  • 小新卖蜡笔 永久VIP 2022年12月14日 02:01:13

    本头条号主要是java常用关键技术点。通用工具类的分享;以及springboot+springcloud+Mybatis