關於店鋪營業時間顯示問題(週一~週五)
阿新 • • 發佈:2018-11-21
需求:
工作中遇到了一個常見的一個需求,就是商戶平臺給商鋪新增營業時間。商戶多選營業日期,儲存後在商戶資訊出顯示週一至週日。
如圖:
注:圖片來源大眾點評。
問題:如何在使用者選擇後既容易商戶後期修改,又易於前端顯示。
思考:
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); } }