关于店铺营业时间显示问题(周一~周五)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37625860/article/details/82983055

需求:

        工作中遇到了一个常见的一个需求,就是商户平台给商铺添加营业时间。商户多选营业日期,保存后在商户信息出显示周一至周日。

 如图:

  注:图片来源大众点评。

问题:如何在用户选择后既容易商户后期修改,又易于前端显示。

思考:

         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);
    }
}

猜你喜欢

转载自blog.csdn.net/m0_37625860/article/details/82983055