财务中的预提业务,根据起始月份生成相应的预提期间

方法一:
依赖:
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.9</version> </dependency>
 
Date startTime = new SimpleDateFormat("yyyy-MM").parse("2018-11");// 起始日期
 Date endTime = new SimpleDateFormat("yyyy-MM").parse("2019-01");// 结束日期
 if (startTime.after(endTime)) {
     throw new WebRuntimeException("摊销开始时间大于摊销结束时间!");
 }
 Calendar startCalendar = Calendar.getInstance();// 定义日期实例
 startCalendar.setTime(startTime);// 设置日期起始时间

 Calendar endCalendar = Calendar.getInstance();
 endCalendar.setTime(endTime);
 DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM");
 DateTime start = formatter.parseDateTime("2018-11");
 DateTime end = formatter.parseDateTime("2019-01");

 int months = Math.abs(Months.monthsBetween(start, end).getMonths())+1;
 logger.info(months+"期");

 for (; startCalendar.getTime().compareTo(endCalendar.getTime()) <= 0;) { //dayc1在dayc2之前就循环
     logger.info(startCalendar.get(Calendar.MONTH)+1+"月");
     startCalendar.add(Calendar.MONTH, 1);

 }
方法二:
try {
    Date startTime = new SimpleDateFormat("yyyy-MM").parse(vo.getStartTime());// 起始日期
    Date endTime = new SimpleDateFormat("yyyy-MM").parse(vo.getEndTime());// 结束日期
    if(startTime.after(endTime)){
        throw new WebRuntimeException("预提开始时间大于预提结束时间);
    }
    Calendar startCalendar = Calendar.getInstance();// 定义日期实例
    startCalendar.setTime(startTime);// 设置日期起始时间

    Calendar endCalendar = Calendar.getInstance();
    endCalendar.setTime(endTime);

    Calendar AccruedCalendar = Calendar.getInstance();
    AccruedCalendar.setTime(startTime);
    List accruedPeriodList = new ArrayList();
    BigDecimal sum = new BigDecimal("0");
    while (!(AccruedCalendar.get(Calendar.MONTH) == endCalendar.get(Calendar.MONTH) && AccruedCalendar.get(Calendar.YEAR) == endCalendar.get(Calendar.YEAR))) {
        //保存一个预提期间
        //1-12月用Calendar直接获取的结果是0-11

        AccruedPeriodVO periodVO = new AccruedPeriodVO();
        periodVO.setTenantId(vo.getTenantId());
        periodVO.setContractCode(vo.getContractCode());
        int month = AccruedCalendar.get(Calendar.MONTH) + 1;
        periodVO.setAccruedPeriod(String.valueOf(AccruedCalendar.get(Calendar.YEAR)) + "-" + (month < 10 ? "0" + month : month));
        
        accruedPeriodList.add(periodVO);
      /*  if(AccruedCalendar.get(Calendar.MONTH)==11){
            AccruedCalendar.add(Calendar.YEAR, 1);
        }*/
        //下一预提期间加一个月
        AccruedCalendar.add(Calendar.MONTH, 1);

    }
    AccruedPeriodVO periodVO = new AccruedPeriodVO();
    periodVO.setContractCode(vo.getContractCode());
    int month = AccruedCalendar.get(Calendar.MONTH) + 1;
    periodVO.setAccruedPeriod(String.valueOf(AccruedCalendar.get(Calendar.YEAR)) + "-" + (month < 10 ? "0" + month : month));
  
    accruedPeriodList.add(periodVO);
    accruedPeriodVOService.batchInsert(accruedPeriodList);
    logger.info("预提期间批量保存结束,开始修改主表状态");


} catch (ParseException e) {
    e.printStackTrace();
    throw new WebRuntimeException(e);
}

比如起始时间是,2018-01,2018-12,那么生成的预提期间是如下图

如果有更好的思路欢迎探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值