1. 程式人生 > >關於店鋪營業時間顯示問題(週一~週五)

關於店鋪營業時間顯示問題(週一~週五)

需求:

        工作中遇到了一個常見的一個需求,就是商戶平臺給商鋪新增營業時間。商戶多選營業日期,儲存後在商戶資訊出顯示週一至週日。

 如圖:

  注:圖片來源大眾點評。

問題:如何在使用者選擇後既容易商戶後期修改,又易於前端顯示。

思考:

         1. 商戶選擇後直接儲存週一至周X。

         2. 商戶選擇後儲存週一,週二,...週日。

         3. 商戶選擇後儲存1,2,..7。

結論:

        方案一不便於修改,pass

        方案二不便於前端顯示,pass

        方案三修改方便,但前端顯示時需要計算,資料量大時對效能有影響。

解決方案:

  選擇方案三結合在資料庫新建一個欄位用於儲存計算後的資料(周X至周X)。做到快速查詢,易於修改。

演算法程式碼:

package cn.szhtwl.action.modelsupport;

import cn.szhtwl.core.utils.StringUtil;

import java.util.Arrays;

/**
 * Created by wh on 2018/9/7.
 */
public class WeekUtil {

    //日期字典
    private static String[] DATES = {"","週一","週二","週三","週四","週五","週六","週日"};

    public static void main(String[] args) {
        String s = convertWeek("1,2,4,5,7");
        System.out.println(s);
    }

    /**
     * 將數字轉換為週數
     *
     * @author wh
     * @date 2018/9/10 15:30
     * @param numbers 字串數字 ["1","2",...]
     * @return 字串 "週一至週二"
    */
    public static String convertWeek(String numbers){
        String[] data = numbers.split(",");
        int[] ints = new int[data.length];
        //轉換為int
        for (int i=0;i<data.length;i++) {
            ints[i] = StringUtil.parseInt(data[i]);
        }
        //1.先正序排序
        Arrays.sort(ints);
        String s = "";
        //儲存開始日期
        int tempBegin = -1;
        //儲存結束日期
        int tempEnd = -1;
        //判斷是否連續
        for (int i=1;i<=ints.length;i++) {
            //判斷是否為最後一位
            if (i == ints.length) {
                //判斷是否有連續的
                if (-1 != tempBegin && -1 != tempEnd) {
                    s += DATES[tempBegin]+"至"+DATES[tempEnd]+",";
                    break;
                }
                s += DATES[ints[i-1]]+",";
                break;
            }
            // 1+1 = 2  代表連續
            if (ints[i] == ints[i-1] + 1) {
                if (-1 == tempBegin) {
                    tempBegin = ints[i-1];
                }
                tempEnd = ints[i];
            } else {
                if (-1 != tempBegin && -1!= tempEnd) {
                    s += DATES[tempBegin]+"至"+DATES[tempEnd]+",";
                    tempBegin = -1;
                    tempEnd = -1;
                    continue;
                }
                s += DATES[ints[i-1]]+",";
            }
        }
        return s.substring(0,s.length()-1);
    }
}