第五章 企業(yè)級(jí)微信點(diǎn)餐項(xiàng)目(買(mǎi)家商品api)

買(mǎi)家商品api

標(biāo)簽(空格分隔): java springboot wechat


Dao層設(shè)計(jì)與開(kāi)發(fā)

  • 實(shí)體類(lèi)創(chuàng)建,與類(lèi)目表一致,字段與數(shù)據(jù)庫(kù)對(duì)應(yīng)。
  • 創(chuàng)建對(duì)應(yīng)的映射類(lèi)。這里我們會(huì)根據(jù)其中狀態(tài)進(jìn)行查詢(xún)。
/** 根據(jù)狀態(tài)查詢(xún). */
List<ProductInfo> findByProductStatus(Integer productStatus);

Service層設(shè)計(jì)與開(kāi)發(fā)

  • 關(guān)于業(yè)務(wù)層,這里就要考慮賣(mài)家和買(mǎi)家的業(yè)務(wù)了,其中買(mǎi)家可以看到上架的商品,訂單庫(kù)存增刪,買(mǎi)家后臺(tái)管理中分頁(yè)查詢(xún)所有數(shù)據(jù),商品信息添加。
  • 狀態(tài)查詢(xún)我們用‘0’代表上架和‘1’代表下架。這里采用枚舉的方式:
@Getter
public enum ProductInfoEnum {
    UP(0,"上架"),
    DOWN(1,"下架")
    ;

    private Integer code;

    private String name;

    ProductInfoEnum(Integer code, String name) {
        this.code = code;
        this.name = name;
    }
}
  • 其中關(guān)于分頁(yè)查詢(xún),采用Page<>類(lèi)。其中傳值為Pageable,具體通過(guò)PageRequest(第幾頁(yè),每頁(yè)顯示數(shù));
public Page<ProductInfo> findAll(Pageable pageable) {
        return repository.findAll(pageable);
}
    
@Test
public void findAll() throws Exception {
    PageRequest request = new PageRequest(0,2);
    Page<ProductInfo> result = productInfoService.findAll(request);
    log.info("total={}",result.getTotalElements());
    Assert.assertNotEquals(0,result.getTotalElements());
}

Controller層設(shè)計(jì)與開(kāi)發(fā)

  • 買(mǎi)家商品Api,Api大家肯定都知道封裝數(shù)據(jù)。這里我們采用封裝成Jason格式。
{ 
    code: 0 ,
    msg :"success",
    data:[
        {
            name:"熱銷(xiāo)榜",
            type:0,
            foods:[
                {
                    id:"123456",
                    name:"手抓餅",
                    price:8,
                    description:"手抓餅原名蔥抓餅,抓起就吃。",
                    icon:"http://xxxxx.jpg"
                },
                {
                    id:"123457",
                    name:"酸梅汁",
                    price:5,
                    description:"開(kāi)胃飲料",
                    icon:"http://xxxxx.jpg"
                }
            ]
        },
        {
            name:"男生最?lèi)?ài)",
            type:1,
            foods:[
                {
                    id:"123458",
                    name:"小黃魚(yú)",
                    price:10,
                    description:"精炸小黃魚(yú),香脆爽口",
                    icon:"http://xxxxx.jpg"
                }
            ]
        }
    ]
}
  • 這里只是示例,具體按公司要求來(lái),封裝數(shù)據(jù)這塊是前后臺(tái)交互,前端與后端人員需先意見(jiàn)一致。
  • 買(mǎi)家端商品頁(yè)面展示,這里邏輯實(shí)現(xiàn):
@RequestMapping(value="/list")
public ResultVo list(){

    //查詢(xún)上架商品(數(shù)據(jù)庫(kù)查詢(xún)采用一次性查詢(xún))
    List<ProductInfo> productInfoList = productInfoService.findUpAll();
    //查詢(xún)類(lèi)目
    //傳統(tǒng)方法

//        List<Integer> categoryList = new ArrayList<>();
//        for(ProductInfo productInfo:productInfoList){
//            categoryList.add(productInfo.getCategoryType());
//        }
    //java8 lambda
    List<Integer> categoryList = productInfoList.stream().
    map(e -> e.getCategoryType()).collect(Collectors.toList());
    List<ProductCategory> ProductCategoryList = 
    productCategoryService.findByCategoryTypeIn(categoryList);
    //數(shù)據(jù)拼裝
    List<ProductVO> productVOoList = new ArrayList<>();
    //類(lèi)目 封裝
    for(ProductCategory productCategory : ProductCategoryList){
        ProductVO productVo = new ProductVO();
        productVo.setCategoryType(productCategory.getCategoryType());
        productVo.setCategryName(productCategory.getCategoryName());
        //商品信息封裝
        List<ProductInfoVO> productInfoVOList = new ArrayList<>();
        for(ProductInfo productInfo : productInfoList){
            if(productVo.getCategoryType().equals(productInfo.getCategoryType())){
                ProductInfoVO productInfoVO = new ProductInfoVO();
                BeanUtils.copyProperties(productInfo,productInfoVO);
                productInfoVOList.add(productInfoVO);
            }
        }
        productVo.setProductInfoVOList(productInfoVOList);
        productVOoList.add(productVo);
    }

    return ResultVOUtil.success(productVOoList);
}
  • 提示:
  1. 數(shù)據(jù)封裝只封裝Api中需要的值,所以這里我們需要建立新的實(shí)體類(lèi)。
  2. 數(shù)據(jù)查詢(xún),我們遵循一次查詢(xún)內(nèi)容,后做循環(huán)處理結(jié)果,保證程序高效性。
  3. java8特性中的lambda公式。深入鉆研java8新特性點(diǎn)擊這里。
  4. chrome中添加JSONview插件獲取與安裝點(diǎn)擊這里
  • 前端交互,訪問(wèn)虛擬機(jī)的ip地址,此時(shí)會(huì)彈出請(qǐng)微信端訪問(wèn),這里我們通過(guò)添加修改緩存方式訪問(wèn)頁(yè)面過(guò)濾。
/** url:虛擬機(jī)IP/#/order */
/** F12開(kāi)發(fā)者模式,在console中輸入*/
document.cookie='openid=abc123';
/** 此時(shí)在輸入虛擬機(jī)地址直接可以訪問(wèn) */
  • 接下來(lái)就是虛擬機(jī)了(前后端數(shù)據(jù)對(duì)接),原視頻UP主雖然所有的虛擬機(jī)設(shè)置都弄好了,但對(duì)于我這個(gè)虛擬機(jī)小白來(lái)說(shuō),基本的命令都不知道。這里各種坑,自己一點(diǎn)點(diǎn)給填上了,關(guān)于centos中dos基礎(chǔ)入門(mén),點(diǎn)擊這里。
vim /usr/local/nginx/conf/nginx.conf
/** 按I右下角會(huì)出現(xiàn)Insert,此時(shí)開(kāi)啟編輯狀態(tài) */
/** 更改proy_pass 127.0.0.1為項(xiàng)目運(yùn)行的IP地址(本機(jī)IP) */
/** 反向代理nginx后期講解 */
/** 按esc退出編輯狀態(tài) */
/** 輸入:wq 保存并退出*/
nginx -s reload
/** 重啟nginx */
  • 網(wǎng)頁(yè)訪問(wèn)虛擬機(jī)地址,會(huì)返現(xiàn)數(shù)據(jù)對(duì)接上,這里又是一個(gè)坑,504錯(cuò)誤,找來(lái)找去,最后是防火強(qiáng)未關(guān),請(qǐng)求不到本機(jī)。
  • 最后一個(gè)就是關(guān)于微信官方采用域名對(duì)接,虛擬機(jī)中修改nginx中設(shè)置域名。
vim /usr/local/nginx/conf/nginx.conf
/** 按I右下角會(huì)出現(xiàn)Insert,此時(shí)開(kāi)啟編輯狀態(tài) */
/** 更改server_name 127.0.0.1為sell.com */
/** 按esc退出編輯狀態(tài) */
/** 輸入:wq 保存并退出*/
nginx -s reload
/** 重啟nginx */
  • 本機(jī)設(shè)置輸入指定sell.com會(huì)跳轉(zhuǎn)虛擬機(jī)的ip地址。訪問(wèn)路徑C:\WINDOWS\system32\drivers\etc 管理員權(quán)限在最后一行添加 虛擬機(jī)IP sell.com 保存。詳細(xì)教程點(diǎn)擊這里。

  • 原視頻UP主慕課網(wǎng)(SpringBoot企業(yè)級(jí)微信點(diǎn)餐項(xiàng)目)
  • 本博客撰寫(xiě)人: XiaoJinZi 轉(zhuǎn)載請(qǐng)注明出處
  • 學(xué)生能力有限 附上郵箱: 986209501@qq.com 不足以及誤處請(qǐng)大佬指責(zé)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容