|  | @@ -544,54 +544,58 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
 | 
											
												
													
														|  |          String remark = "";
 |  |          String remark = "";
 | 
											
												
													
														|  |          // 计费区间  月日-月日X钱
 |  |          // 计费区间  月日-月日X钱
 | 
											
												
													
														|  |          String billingInterval = "";
 |  |          String billingInterval = "";
 | 
											
												
													
														|  | 
 |  | +        // 已计费天数
 | 
											
												
													
														|  | 
 |  | +        Long earlySumDays = storageFeesDto.getEarlySumDays();
 | 
											
												
													
														|  | 
 |  | +        // 计费天数
 | 
											
												
													
														|  | 
 |  | +        Long days = storageFeesDto.getDays();
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |          for (TWarehouseAgreementitems tWarehouseAgreementitems : itemList) {
 |  |          for (TWarehouseAgreementitems tWarehouseAgreementitems : itemList) {
 | 
											
												
													
														|  | 
 |  | +            feeId = tWarehouseAgreementitems.getfFeeid();
 | 
											
												
													
														|  |              // 如果要计费天数不足一天,不予计算
 |  |              // 如果要计费天数不足一天,不予计算
 | 
											
												
													
														|  | -            if (storageFeesDto.getDays() < 1) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if (days < 1) {
 | 
											
												
													
														|  |                  break;
 |  |                  break;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |              dayLength = tWarehouseAgreementitems.getfEndays() - tWarehouseAgreementitems.getfFromdays() + 1L;
 |  |              dayLength = tWarehouseAgreementitems.getfEndays() - tWarehouseAgreementitems.getfFromdays() + 1L;
 | 
											
												
													
														|  |              // 如果已计费天数超出本阶层,则进入下一层规则,并剪掉当前层天数
 |  |              // 如果已计费天数超出本阶层,则进入下一层规则,并剪掉当前层天数
 | 
											
												
													
														|  | -            if (storageFeesDto.getEarlySumDays() >= dayLength) {
 |  | 
 | 
											
												
													
														|  | -                storageFeesDto.setEarlySumDays(storageFeesDto.getEarlySumDays() - dayLength);
 |  | 
 | 
											
												
													
														|  | -                continue; //将已算账的天数 与 计费规则的 最后一天作比较如果 已算10天 > 规则结束  不算帐
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if (earlySumDays >= dayLength) {
 | 
											
												
													
														|  | 
 |  | +                earlySumDays -= dayLength;
 | 
											
												
													
														|  | 
 |  | +                continue;
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  | -            // 如果计费日期超过本层天数
 |  | 
 | 
											
												
													
														|  | -            if (storageFeesDto.getDays() >= dayLength) {
 |  | 
 | 
											
												
													
														|  | -                // 天数剪掉 剩余已计费库存天数
 |  | 
 | 
											
												
													
														|  | -                dayLength -= storageFeesDto.getEarlySumDays();
 |  | 
 | 
											
												
													
														|  | -                storageFeesDto.setEarlySumDays(0L);
 |  | 
 | 
											
												
													
														|  | -                feeId = tWarehouseAgreementitems.getfFeeid();
 |  | 
 | 
											
												
													
														|  | -                // 获取最终金额:数量 * 单价 * 天数
 |  | 
 | 
											
												
													
														|  | -                BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), dayLength);
 |  | 
 | 
											
												
													
														|  | -                money = money.add(calculate);
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -                storageFeesDto.setDays(storageFeesDto.getDays() - dayLength);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            if (earlySumDays + days > dayLength) {
 | 
											
												
													
														|  | 
 |  | +                // 当前层需要计算的天数
 | 
											
												
													
														|  | 
 |  | +                Long tempDays = dayLength - earlySumDays;
 | 
											
												
													
														|  | 
 |  | +                earlySumDays = 0L;
 | 
											
												
													
														|  | 
 |  | +                days -= tempDays;
 | 
											
												
													
														|  | 
 |  | +                // 计算最终金额:数量 * 单价 * 天数
 | 
											
												
													
														|  | 
 |  | +                BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), tempDays);
 | 
											
												
													
														|  | 
 |  | +                money = money.add(calculate);
 | 
											
												
													
														|  |                  // 组装运费明细记录
 |  |                  // 组装运费明细记录
 | 
											
												
													
														|  |                  String details = assemblyBillingDetails(StorageFeeRangeDTO.builder()
 |  |                  String details = assemblyBillingDetails(StorageFeeRangeDTO.builder()
 | 
											
												
													
														|  | -                        .dayNum(dayLength).price(tWarehouseAgreementitems.getfPrice()).qty(qty).amt(calculate)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        .dayNum(tempDays).price(tWarehouseAgreementitems.getfPrice()).qty(qty).amt(calculate)
 | 
											
												
													
														|  |                          .build());
 |  |                          .build());
 | 
											
												
													
														|  |                  remark = StringUtils.isEmpty(remark) ? details : remark + "," + details;
 |  |                  remark = StringUtils.isEmpty(remark) ? details : remark + "," + details;
 | 
											
												
													
														|  | -                // 计算区间费用信息
 |  | 
 | 
											
												
													
														|  | -                String costRange = assemblyBillingInterval(StorageFeeRangeDTO.builder()
 |  | 
 | 
											
												
													
														|  | -                        .startTime(storageFeesDto.getStartTime()).dayNum(dayLength).price(tWarehouseAgreementitems.getfPrice())
 |  | 
 | 
											
												
													
														|  | 
 |  | +                // 计算区间的费用信息
 | 
											
												
													
														|  | 
 |  | +                String interval = assemblyBillingInterval(StorageFeeRangeDTO.builder()
 | 
											
												
													
														|  | 
 |  | +                        .startTime(storageFeesDto.getStartTime()).dayNum(tempDays).price(tWarehouseAgreementitems.getfPrice())
 | 
											
												
													
														|  |                          .qty(qty).unit(agreementitems.getfFeeunitid())
 |  |                          .qty(qty).unit(agreementitems.getfFeeunitid())
 | 
											
												
													
														|  |                          .build());
 |  |                          .build());
 | 
											
												
													
														|  | -                billingInterval = StringUtils.isEmpty(billingInterval) ? costRange : billingInterval + "," + costRange;
 |  | 
 | 
											
												
													
														|  | 
 |  | +                billingInterval = StringUtils.isEmpty(billingInterval) ? interval : billingInterval + "," + interval;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -                storageFeesDto.setStartTime(DateUtils.dateAdd(storageFeesDto.getStartTime(), dayLength.intValue()));
 |  | 
 | 
											
												
													
														|  | 
 |  | +                // 下一个区间的开始时间调整
 | 
											
												
													
														|  | 
 |  | +                storageFeesDto.setStartTime(DateUtils.dateAdd(storageFeesDto.getStartTime(), tempDays.intValue()));
 | 
											
												
													
														|  |              } else {
 |  |              } else {
 | 
											
												
													
														|  | -                // 最后一次计算天数
 |  | 
 | 
											
												
													
														|  | -                feeId = tWarehouseAgreementitems.getfFeeid();
 |  | 
 | 
											
												
													
														|  | -                BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), storageFeesDto.getDays());
 |  | 
 | 
											
												
													
														|  | 
 |  | +                BigDecimal calculate = this.getCalculate(qty, tWarehouseAgreementitems.getfPrice(), days);
 | 
											
												
													
														|  |                  money = money.add(calculate);
 |  |                  money = money.add(calculate);
 | 
											
												
													
														|  |                  // 计算费用明细
 |  |                  // 计算费用明细
 | 
											
												
													
														|  |                  String details = assemblyBillingDetails(StorageFeeRangeDTO.builder()
 |  |                  String details = assemblyBillingDetails(StorageFeeRangeDTO.builder()
 | 
											
												
													
														|  | -                        .dayNum(storageFeesDto.getDays()).price(tWarehouseAgreementitems.getfPrice()).qty(qty).amt(calculate)
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        .dayNum(days).price(tWarehouseAgreementitems.getfPrice()).qty(qty).amt(calculate)
 | 
											
												
													
														|  |                          .build());
 |  |                          .build());
 | 
											
												
													
														|  |                  remark = StringUtils.isEmpty(remark) ? details : remark + "," + details;
 |  |                  remark = StringUtils.isEmpty(remark) ? details : remark + "," + details;
 | 
											
												
													
														|  | -                // 计算区间费用信息
 |  | 
 | 
											
												
													
														|  | 
 |  | +                // 计算区间的费用信息
 | 
											
												
													
														|  |                  String interval = assemblyBillingInterval(StorageFeeRangeDTO.builder()
 |  |                  String interval = assemblyBillingInterval(StorageFeeRangeDTO.builder()
 | 
											
												
													
														|  | -                        .startTime(storageFeesDto.getStartTime()).dayNum(storageFeesDto.getDays())
 |  | 
 | 
											
												
													
														|  | 
 |  | +                        .startTime(storageFeesDto.getStartTime()).dayNum(days)
 | 
											
												
													
														|  |                          .price(tWarehouseAgreementitems.getfPrice())
 |  |                          .price(tWarehouseAgreementitems.getfPrice())
 | 
											
												
													
														|  |                          .qty(qty).unit(agreementitems.getfFeeunitid())
 |  |                          .qty(qty).unit(agreementitems.getfFeeunitid())
 | 
											
												
													
														|  |                          .build());
 |  |                          .build());
 | 
											
										
											
												
													
														|  | @@ -668,10 +672,8 @@ public class TWarehouseAgreementServiceImpl implements ITWarehouseAgreementServi
 | 
											
												
													
														|  |       * @return
 |  |       * @return
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      public BigDecimal getCalculate(BigDecimal itemNumsBig, BigDecimal unitPrice, Long dateLength) {
 |  |      public BigDecimal getCalculate(BigDecimal itemNumsBig, BigDecimal unitPrice, Long dateLength) {
 | 
											
												
													
														|  | -        BigDecimal money;
 |  | 
 | 
											
												
													
														|  |          BigDecimal bigDaysBig = new BigDecimal(dateLength);
 |  |          BigDecimal bigDaysBig = new BigDecimal(dateLength);
 | 
											
												
													
														|  | -        money = itemNumsBig.multiply(unitPrice).multiply(bigDaysBig);
 |  | 
 | 
											
												
													
														|  | -        return money;
 |  | 
 | 
											
												
													
														|  | 
 |  | +        return itemNumsBig.multiply(unitPrice).multiply(bigDaysBig);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 |