1,获取前天日期
Date d = new Date(System.currentTimeMillis() - 2 * 1000 * 60 * 60 * 24); SimpleDateFormat sp = new SimpleDateFormat("yyyyMMdd"); pbProductMapper.deleteProduct(sp.format(d));
2,判断单双号,周几,在原来日期基础上加一天
/** * 判断星期是否可收货 * * @param data * @param planDeliveryDate */ private String checkWeek(LocationDeliveryCycle data, String planDeliveryDate) { String newDay = planDeliveryDate; // 原来到货日期是星期几 Date date = DateUtils.strToDate(planDeliveryDate, DateUtils.yyyyMMdd); int weekDate = getWeekOfDate(date); if (StringUtils.isEmpty(data.getOrderingCycleW())) { return newDay; } else { if (!BizConstant.DELIVERY_WEEK.equals(data.getOrderingCycleW().substring(weekDate, weekDate + 1))) { newDay = addOneDay(planDeliveryDate); //场景到货日期是周日,不作业, 周一三五收食品 周二四六收用品,当前是用品,这时推一天,周一,但是用品二四六收,要再推一天 //先判断当前是不是周日,再判断周,是否符合规则;不用管是不是周日,再判断一次 Date sunDate = DateUtils.strToDate(newDay, DateUtils.yyyyMMdd); int sunday = getWeekOfDate(sunDate); if (!BizConstant.DELIVERY_WEEK.equals(data.getOrderingCycleW().substring(sunday, sunday + 1))) { newDay = addOneDay(newDay); } } } return newDay; } /** * 单双号逻辑处理 * @param cycle * @param planDeliveryDate * @return */ private String checkDate(LocationDeliveryCycle cycle, String planDeliveryDate) { String newDay = planDeliveryDate; String orderingCycleT = cycle.getOrderingCycleT(); // 未维护或每天 if (StringUtils.isEmpty(orderingCycleT) || orderingCycleT.equals(OrderingCycleEnum.DURING_FLAG_T_E.getValue())) { return newDay; } //单号/双号 newDay = dealDoubleAndSingle(orderingCycleT, planDeliveryDate); return newDay; } /** * 休息日 * @param cycle * @param planDeliveryDate */ private String checkHolidayDate(LocationDeliveryCycle cycle, String planDeliveryDate) { String newDay = planDeliveryDate; String orderingCycleH = cycle.getOrderingCycleH(); // 未维护 if (StringUtils.isEmpty(orderingCycleH)) { return newDay; } List<String> list = Arrays.asList(orderingCycleH.split(",")); String day = planDeliveryDate.substring(6, planDeliveryDate.length()); if (list.get(0).equals(day)) { newDay = addOneDay(planDeliveryDate); } return newDay; } /** * 在原来日期基础上加一天 * * @param day */ public String addOneDay(String day) { Date date = DateUtils.strToDate(day, DateUtils.yyyyMMdd); day = DateUtils.dateToStr(DateUtil.calculateDate(date, Calendar.DATE, 1), DateUtils.yyyyMMdd); return day; } /** * 处理日期单双号配置 * * @param cycleType * @param day */ private String dealDoubleAndSingle(String cycleType, String day) { String planDeliveryDate = day; if (StringUtil.isEmpty(day)) { return day; } //双号 if (cycleType.equals(OrderingCycleEnum.DURING_FLAG_T_S.getValue())) { if (Integer.valueOf(day) % 2 == 0) { return day; } else { //获取当天第二天日期 planDeliveryDate = addOneDay(day); //特殊场景:当前是31号,食品/食品双号收,推一天,1号,还是不收,解决:如果双号收,且是31号,直接推两天 if (BizConstant.IS_31.equals(day.substring(6, day.length()))) { Date date = DateUtils.strToDate(day, DateUtils.yyyyMMdd); planDeliveryDate = DateUtils.dateToStr(DateUtil.calculateDate(date, Calendar.DATE, 2), DateUtils.yyyyMMdd); } return planDeliveryDate; } } //单号 if (cycleType.equals(OrderingCycleEnum.DURING_FLAG_T_D.getValue())) { if (Integer.valueOf(day) % 2 != 0) { return day; } else { //获取当天第二天日期 planDeliveryDate = addOneDay(day); return planDeliveryDate; } } return day; } /** * 获取当前日期是星期几<br> * * @param date * @return 当前日期是星期几 */ public static int getWeekOfDate(Date date) { int[] weekDays = {6, 0, 1, 2, 3, 4, 5}; Calendar cal = Calendar.getInstance(); cal.setTime(date); int day = cal.get(Calendar.DAY_OF_WEEK) - 1; if (day < 0) { day = 0; } return weekDays[day]; }