/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

// 该类所属的包名，表明其位于商城相关的Java Bean的参数（param）包下，主要用于封装与店铺详情相关的参数信息，这些参数通常是前端传递给后端，以便后端进行店铺详情相关的业务处理操作，例如店铺信息的新增、修改等功能。
package com.yami.shop.bean.param;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;

/**
 * ShopDetailParam类是一个Java Bean，用于封装店铺详情相关的各种参数信息，通过使用Jakarta Validation框架的相关注解对各个参数进行约束验证，确保传入的参数符合业务要求，
 * 同时提供了对应的Getter和Setter方法方便对这些参数进行获取和设置操作，以便在店铺详情相关的业务逻辑中使用这些参数信息。
 *
 * @author lanhai
 */
public class ShopDetailParam {

    // 店铺的唯一标识符，在整个系统中用于区分不同的店铺，在涉及店铺相关的数据库操作（如查询、更新、删除等）以及业务逻辑处理时，依靠这个ID来精准定位到具体的店铺实体。
    private Long shopId;

    /**
     * 店铺名称，用于展示店铺的对外称呼，其取值规则限定为可包含数字、中文、英文（可混合，但不可有特殊字符），并且该字段是必填项（通过@NotBlank注解约束），
     * 同时规定了长度限制（通过@Size注解约束，最大长度为50个字符），名称可根据实际情况进行修改，在系统中不要求唯一，不同店铺可以有相同的名称。
     */
    @NotBlank(message = "店铺名称不能为空")
    @Size(max = 50, message = "商品名称长度应该小于{max}")
    private String shopName;

    /**
     * 店铺简介，用于简要描述店铺的经营特色、主营产品等相关信息，是可修改的内容，并且通过@Size注解限定了其最大长度为200个字符，以保证简介内容的简洁性和合理性。
     */
    @Size(max = 200, message = "店铺简介长度应该小于{max}")
    private String intro;

    /**
     * 店铺公告，通常用于向顾客展示店铺的重要通知、活动信息等内容，同样是可修改的，并且有长度限制，通过@Size注解规定其最大长度为50个字符，方便顾客快速浏览重要公告信息。
     */
    @Size(max = 50, message = "店铺公告长度应该小于{max}")
    private String shopNotice;

    /**
     * 店铺联系电话，是顾客联系店铺的重要途径，所以该字段不能为空（通过@NotBlank注解约束），同时通过@Size注解限制其最大长度为20个字符，确保电话号码格式的合理性，方便后续的电话沟通相关业务操作。
     */
    @NotBlank(message = "店铺联系电话不能为空")
    @Size(max = 20, message = "店铺公告长度应该小于{max}")
    private String tel;

    /**
     * 店铺详细地址，明确店铺所在的具体地理位置，是必填项（@NotBlank注解约束），并通过@Size注解限定最大长度为100个字符，方便准确记录和展示店铺的详细位置信息，便于顾客查找店铺以及物流配送等相关业务操作。
     */
    @NotBlank(message = "店铺详细地址不能为空")
    @Size(max = 100, message = "店铺公告长度应该小于{max}")
    private String shopAddress;

    /**
     * 店铺所在省份（描述），用于明确店铺所在的省级行政区域，不能为空（@NotBlank注解约束），且限定最大长度为10个字符，以合适的长度来描述省份信息，方便在系统中进行省市区相关的业务逻辑处理和展示。
     */
    @NotBlank(message = "店铺所在省份不能为空")
    @Size(max = 10, message = "店铺所在省份长度应该小于{max}")
    private String province;

    /**
     * 店铺所在城市（描述），指明店铺位于的市级行政区域，同样是必填项（@NotBlank注解约束），并规定最大长度为10个字符，用于准确表示城市信息，在涉及店铺地理位置定位、同城业务等场景中会用到该信息。
     */
    @NotBlank(message = "店铺所在城市不能为空")
    @Size(max = 10, message = "店铺所在城市长度应该小于{max}")
    private String city;

    /**
     * 店铺所在区域（描述），用于更精确地定位店铺所在的具体城区等细分区域，也是必填项（@NotBlank注解约束），通过@Size注解限制其最大长度为10个字符，便于细化店铺的地理位置信息，有助于更精准的业务操作，比如本地配送范围界定等。
     */
    @NotBlank(message = "店铺所在区域不能为空")
    @Size(max = 10, message = "店铺所在省份区域长度应该小于{max}")
    private String area;

    /**
     * 店铺省市区代码，用于在需要回显省市区相关信息时使用，例如在前端页面展示店铺地址选择框等场景下，依靠这个代码来准确显示对应的省市区信息，该字段不能为空（@NotBlank注解约束），且最大长度为20个字符（@Size注解约束）。
     */
    @NotBlank(message = "店铺省市区代码不能为空")
    @Size(max = 20, message = "店铺省市区代码长度应该小于{max}")
    private String pcaCode;

    /**
     * 店铺logo，用于展示店铺的品牌形象，是店铺在系统界面中重要的视觉标识，不能为空（@NotBlank注解约束），并通过@Size注解限制其最大长度为200个字符，具体格式可能根据系统实际存储方式而定（比如图片路径、Base64编码等），且该logo是可修改的。
     */
    @NotBlank(message = "店铺logo不能为空")
    @Size(max = 200, message = "店铺logo长度应该小于{max}")
    private String shopLogo;

    /**
     * 店铺相册，用于存放店铺的多张图片信息（可能是店铺环境、商品展示等相关图片），通过@Size注解限定其最大长度为1000个字符，具体存储格式可能是图片路径列表等形式，方便在店铺详情页面展示更多店铺相关的视觉内容。
     */
    @Size(max = 1000, message = "店铺相册长度应该小于{max}")
    private String shopPhotos;

    /**
     * 每天营业时间段，明确店铺每天的营业时间范围，是顾客了解店铺营业规律的重要信息，不能为空（@NotBlank注解约束），且通过@Size注解限制其最大长度为100个字符，用于合理规范营业时间段的填写格式，便于后续业务逻辑中对营业时间的判断和处理。
     */
    @NotBlank(message = "每天营业时间段不能为空")
    @Size(max = 100, message = "每天营业时间段长度应该小于{max}")
    private String openTime;

    /**
     * 店铺状态，用于标识店铺当前的营业情况，取值范围限定为 -1（表示未开通）、0（表示停业中）、1（表示营业中），并且该字段是可修改的，方便在店铺运营过程中根据实际情况更新店铺的状态信息，以反映店铺的真实经营状态。
     */
    private Integer shopStatus;

    /**
     * 获取店铺名称的Getter方法，方便在其他类中获取该对象中封装的店铺名称信息，用于在店铺详情展示、业务逻辑判断（如根据名称搜索店铺等）等场景中使用。
     */
    public String getShopName() {
        return shopName;
    }

    /**
     * 设置店铺名称的Setter方法，用于在外部给该对象的shopName字段赋值，例如在接收前端传递的店铺名称参数并封装到该对象时，通过这个方法将名称设置到对象中，以便后续业务逻辑使用该准确的店铺名称信息。
     */
    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    /**
     * 获取店铺简介的Getter方法，供其他类获取该对象中封装的店铺简介信息，在店铺详情页面展示、更新店铺简介等相关业务操作中会用到该方法来获取当前的店铺简介内容。
     */
    public String getIntro() {
        return intro;
    }

    /**
     * 设置店铺简介的Setter方法，用于外部将店铺简介内容赋值给该对象的intro字段，例如在前端修改店铺简介后，后端通过这个方法接收并更新对象中的简介信息，以便后续保存到数据库等相关业务逻辑使用。
     */
    public void setIntro(String intro) {
        this.intro = intro;
    }

    /**
     * 获取店铺公告的Getter方法，方便获取该对象中封装的店铺公告信息，在展示店铺最新通知、判断公告内容是否符合要求等业务场景中会用到该方法来获取公告内容。
     */
    public String getShopNotice() {
        return shopNotice;
    }

    /**
     * 设置店铺公告的Setter方法，用于外部给该对象的shopNotice字段赋值，比如在前端发布新的店铺公告后，后端通过这个方法接收并更新对象中的公告信息，以便后续在店铺详情页面展示等业务逻辑使用。
     */
    public void setShopNotice(String shopNotice) {
        this.shopNotice = shopNotice;
    }

    /**
     * 获取店铺联系电话的Getter方法，供其他类获取该对象中封装的店铺联系电话信息，在需要联系店铺、进行电话验证等与电话沟通相关的业务场景中会用到该电话号码信息。
     */
    public String getTel() {
        return tel;
    }

    /**
     * 设置店铺联系电话的Setter方法，用于外部将店铺联系电话赋值给该对象的tel字段，例如在前端更新店铺联系电话后，后端通过这个方法接收并更新对象中的电话信息，以便后续业务逻辑使用该准确的电话号码。
     */
    public void setTel(String tel) {
        this.tel = tel;
    }

    /**
     * 获取店铺详细地址的Getter方法，方便获取该对象中封装的店铺详细地址信息，在展示店铺位置、物流配送地址确认等业务场景中会用到该详细地址内容。
     */
    public String getShopAddress() {
        return shopAddress;
    }

    /**
     * 设置店铺详细地址的Setter方法，用于外部将店铺详细地址赋值给该对象的shopAddress字段，例如在前端修改店铺地址后，后端通过这个方法接收并更新对象中的地址信息，以便后续保存到数据库等业务逻辑使用。
     */
    public void setShopAddress(String shopAddress) {
        this.shopAddress = shopAddress;
    }

    /**
     * 获取店铺所在省份（描述）的Getter方法，供其他类获取该对象中封装的省份信息，在省市区相关的业务逻辑处理、地址展示等场景中会用到该省份描述内容。
     */
    public String getProvince() {
        return province;
    }

    /**
     * 设置店铺所在省份（描述）的Setter方法，用于外部将省份信息赋值给该对象的province字段，例如在前端修改店铺所在省份后，后端通过这个方法接收并更新对象中的省份信息，以便后续业务逻辑使用该准确的省份描述。
     */
    public void setProvince(String province) {
        this.province = province;
    }

    /**
     * 获取店铺所在城市（描述）的Getter方法，方便获取该对象中封装的城市信息，在涉及城市相关的业务逻辑（如同城业务判断、城市筛选等）以及地址展示等场景中会用到该城市描述内容。
     */
    public String getCity() {
        return city;
    }

    /**
     * 设置店铺所在城市（描述）的Setter方法，用于外部将城市信息赋值给该对象的city字段，例如在前端修改店铺所在城市后，后端通过这个方法接收并更新对象中的城市信息，以便后续业务逻辑使用该准确的城市描述。
     */
    public void setCity(String city) {
        this.city = city;
    }

    /**
     * 获取店铺所在区域（描述）的Getter方法，供其他类获取该对象中封装的区域信息，在更精细的地理位置相关业务逻辑（如本地配送范围判断、区域筛选等）以及地址展示等场景中会用到该区域描述内容。
     */
    public String getArea() {
        return area;
    }

    /**
     * 设置店铺所在区域（描述）的Setter方法，用于外部将区域信息赋值给该对象的area字段，例如在前端修改店铺所在区域后，后端通过这个方法接收并更新对象中的区域信息，以便后续业务逻辑使用该准确的区域描述。
     */
    public void setArea(String area) {
        this.area = area;
    }

    /**
     * 获取店铺省市区代码的Getter方法，方便获取该对象中封装的省市区代码信息，在需要回显省市区相关信息、与地址代码相关的业务逻辑处理等场景中会用到该代码内容。
     */
    public String getPcaCode() {
        return pcaCode;
    }

    /**
     * 设置店铺省市区代码的Setter方法，用于外部将省市区代码赋值给该对象的pcaCode字段，例如在前端修改省市区代码后，后端通过这个方法接收并更新对象中的代码信息，以便后续业务逻辑使用该准确的代码。
     */
    public void setPcaCode(String pcaCode) {
        this.pcaCode = pcaCode;
    }

    /**
     * 获取店铺logo的Getter方法，供其他类获取该对象中封装的店铺logo信息，在店铺详情页面展示店铺品牌形象、更新logo等业务场景中会用到该logo内容。
     */
    public String getShopLogo() {
        return shopLogo;
    }

    /**
     * 设置店铺logo的Setter方法，用于外部将店铺logo赋值给该对象的shopLogo字段，例如在前端更新店铺logo后，后端通过这个方法接收并更新对象中的logo信息，以便后续保存到数据库等业务逻辑使用。
     */
    public void setShopLogo(String shopLogo) {
        this.shopLogo = shopLogo;
    }

    /**
     * 获取店铺相册的Getter方法，方便获取该对象中封装的店铺相册信息，在店铺详情页面展示店铺相关图片、更新相册内容等业务场景中会用到该相册信息。
     */
    public String getShopPhotos() {
        return shopPhotos;
    }

    /**
     * 设置店铺相册的Setter方法，用于外部将店铺相册内容赋值给该对象的shopPhotos字段，例如在前端添加或修改店铺相册图片后，后端通过这个方法接收并更新对象中的相册信息，以便后续业务逻辑使用该准确的相册内容。
     */
    public void setShopPhotos(String shopPhotos) {
        this.shopPhotos = shopPhotos;
    }

    /**
     * 获取每天营业时间段的Getter方法，供其他类获取该对象中封装的营业时间段信息，在展示店铺营业时间、判断当前时间是否在营业范围内等业务场景中会用到该营业时间段内容。
     */
    public String getOpenTime() {
        return openTime;
    }

    /**
     * 设置每天营业时间段的Setter方法，用于外部将营业时间段赋值给该对象的openTime字段，例如在前端修改店铺营业时间后，后端通过这个方法接收并更新对象中的营业时间段信息，以便后续业务逻辑使用该准确的营业时间段。
     */
    public void setOpenTime(String openTime) {
        this.openTime = openTime;
    }

    /**
     * 获取店铺状态的Getter方法，方便获取该对象中封装的店铺状态信息，在展示店铺当前经营情况、根据状态进行业务逻辑判断（如只展示营业中的店铺等）等场景中会用到该店铺状态值。
     */
    public Integer getShopStatus() {
        return shopStatus;
    }

    /**
     * 设置店铺状态的Setter方法，用于外部将店铺状态赋值给该对象的shopStatus字段，例如在店铺运营人员修改店铺状态后，后端通过这个方法接收并更新对象中的状态信息，以便后续业务逻辑根据新的状态进行相应处理。
     */
    public void setShopStatus(Integer shopStatus) {
        this.shopStatus = shopStatus;
    }

    /**
     * 获取店铺ID的Getter方法，供其他类获取该对象中封装的店铺唯一标识符信息，在涉及店铺相关的数据库操作、业务逻辑关联等诸多方面，都依靠这个ID来精准定位到具体的店铺，例如查询店铺详情、更新店铺信息等操作都需要用到店铺ID。
     */
    public Long getShopId() {
        return shopId;
    }

    /**
     * 设置店铺ID的Setter方法，用于外部将店铺ID赋值给该对象的shopId字段，例如在某些特定业务场景下（如创建新店铺后获取并设置其ID等情况），通过这个方法将店铺ID设置到对象中，以便后续业务逻辑使用该准确的店铺标识符。
     */
    public void setShopId(Long shopId) {
        this.shopId = shop