当前位置:网站首页>設置默認收貨地址【項目 商城】

設置默認收貨地址【項目 商城】

2022-06-11 11:10:00 日星月雲

設置默認收貨地址

在這裏插入圖片描述

1. 持久層

1.1 規劃SQL語句

修改 AddressService | getByUid

			//address.setAid(null);
            //address.setUid(null);

AddressService–Aid&Uid


1.檢測當前用戶想設置為默認地址的這條數據是否存在。

select * from t_address aid=?

2.在修改用戶的收貨默認地址之前,先將所有的收貨地址設置為非默認。

update t_address set is_default=0 where uid=?

3.將用戶當前選中的這條記錄設置為默認收貨地址。

update t_address set is_default=1 modified_user=?,modified_time=? where aid=?

1.2 設計抽象方法

在AddressMapper接口中來進行定義和聲明。

 /** * 根據aid的查詢收貨地址數據 * @param aid 收貨地址id * @return 收貨地址數據,如果沒有返回null */
    Address findByAid(Integer aid);

    /** * 根據用戶的uid值來修改用戶的收貨地址設置為非默認 * @param uid 用戶id * @return 受影響的行數 */
    Integer updateNonDefault(Integer uid);

    
    Integer updateDefaultByAid(@Param("aid") Integer aid, 
                               @Param("modifiedUser") String modifiedUser, 
                               @Param("modifiedTime") Date modifiedTime);
    

1.3 配置SQL映射

AddressMapper.xml文件中進行配置。

	<update id="updateNonDefault">
        UPDATE t_address
        SEt is_default=0
        WHERE uid=#{uid}
    </update>
    
    <update id="updateDefaultByAid">
        UPDATE t_address
        SET is_default=1,
        modified_user=#{modifiedUser},
        modified_time=#{modifiedTime}
        WHERE aid=#{aid}
    </update>
    
    <select id="findByAid" resultMap="AddressEntityMap">
        SELECT  * FROM t_address WHERE aid=#{aid}
    </select>

AddressMapper–findByAid

測試

在單元測試方法中進行測試。

 @Test
    public void findByAid(){
    
        Address address = addressMapper.findByAid(5);
        System.out.println(address);
    }

    @Test
    public void updateNonDefault(){
    
        Integer rows = addressMapper.updateNonDefault(8);
        System.out.println(rows);
    }

    @Test
    public void updateDefaultByAid(){
    
        Integer rows = addressMapper.updateDefaultByAid(5,"管理員",new Date());
        System.out.println(rows);
    }

AddressMapperTests–updateDefaultByAid


2.業務層

2.1 异常規劃

1.在執行更新時產生未知的UpdateException异常。已經創建無需重複創建。
2.訪問的數據不是當前登錄用戶的收貨地址數據,非法訪問:AccessDeniedException异常。
3.收貨地址有可能不存在:AddressNotFoundException异常。
在這裏插入圖片描述

默認收貨地址–ex


2.2 抽象方法

在接口IAddressService中編寫抽象方法的定義。

/** * 修改某個用戶的某條數據為默認收貨地址 * @param aid 收貨地址的id * @param uid 用戶的id * @param username 錶示修改執行的人 */
    void setDefault(Integer aid,Integer uid,String username);

2.3 實現抽象方法

在AddressServiceImpl類中進行開發和業務設計。

	@Override
    public void setDefault(Integer aid, Integer uid, String username) {
    
        // 根據參數aid,調用addressMapper中的findByAid()查詢收貨地址數據
        Address result = addressMapper.findByAid(aid);
        // 判斷查詢結果是否為null
        if (result == null) {
    
            // 是:拋出AddressNotFoundException
            throw new AddressNotFoundException("嘗試訪問的收貨地址數據不存在");
        }

        // 判斷查詢結果中的uid與參數uid是否不一致(使用equals()判斷)
        if (!result.getUid().equals(uid)) {
    
            // 是:拋出AccessDeniedException
            throw new AccessDeniedException("非法訪問的异常");
        }

        // 調用addressMapper的updateNonDefaultByUid()將該用戶的所有收貨地址全部設置為非默認,並獲取返回受影響的行數
        Integer rows = addressMapper.updateNonDefault(uid);
        // 判斷受影響的行數是否小於1(不大於0)
        if (rows < 1) {
    
            // 是:拋出UpdateException
            throw new UpdateException("設置默認收貨地址時出現未知錯誤[1]");
        }

        // 調用addressMapper的updateDefaultByAid()將指定aid的收貨地址設置為默認,並獲取返回的受影響的行數
        rows = addressMapper.updateDefaultByAid(aid, username, new Date());
        // 判斷受影響的行數是否不為1
        if (rows != 1) {
    
            // 是:拋出UpdateException
            throw new UpdateException("設置默認收貨地址時出現未知錯誤[2]");
        }
    }

AddressService–setDefault


測試

在單元測試類中進行測試。

  	@Test
    public void setDefault(){
    
        addressService.setDefault(4,8,"管理員");
    }

AddressServiceTests–setDefault


3 控制層

3.1 處理异常

在BaseController中處理异常。

		else if (e instanceof AccessDeniedException){
    
            result.setState(4005);
            result.setMessage("收貨地址數據非法訪問的异常");
        }else if (e instanceof InsertException){
    
            result.setState(5000);
            result.setMessage("插入數據時產生未知的异常");
        }

BaseController–ex–setDefault


3.2 設計請求

/address/{aid}/set_default
@PathVariable("aid") Integer aid,HttpSession session
GET
JsonResult<Void>

3.3 完成請求方法

在AddressController類中編寫請求處理方法。

	//RestFul風格的請求編寫
    @RequestMapping("{aid}/set_default")
    public JsonResult<Void> setDefault(@PathVariable("aid") Integer aid,HttpSession session){
    
        addressService.setDefault(
                aid,
                getuidFromSession(session),
                getUsernameFromSession(session));
        return new JsonResult<>(OK);
    }

AddressController–setDefault


測試

打開瀏覽器登錄在去訪問請求路徑/address/{aid}/set_default
http://localhost:8080/address/5/set_default
在這裏插入圖片描述

4. 前端頁面

address.html頁面點擊“設置默認”按鈕,來發送ajax請求。
1.給設置默認收貨按鈕添加一個onclick屬性,指向一個方法的調用,在這個方法中來完成ajax請求的方法。
address.html | showAddressList方法中修改

+ '<td><a οnclick="setDefault(#{aid})" class="btn btn-xs add-def btn-default">設為默認</a></td>'

完成setDefault方法的定義

		// <!--setDefault-->
			function setDefault(aid) {
    
				$.ajax({
    
					url: "/address/" + aid + "/set_default",
					type: "POST",
					dataType: "JSON",
					success: function(json) {
    
						if (json.state == 200) {
    
							showAddressList();
						} else {
    
							alert("設置默認收貨地址失敗!" + json.message);
						}
					},
					error: function(xhr) {
    
						alert("您的登錄信息已經過期,請重新登錄!HTTP響應碼:" + xhr.status);
						location.href = "login.html";
					}
				});
			}
			// <!--setDefault-->

address.html–setDefault


測試

先登錄再訪問addAddress.html頁面進行測試。
在這裏插入圖片描述

修改路徑address–>addresses


README–設置默認收貨地址


原网站

版权声明
本文为[日星月雲]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/162/202206111058066855.html