上下架功能提供
后臺(tái)寵物列表實(shí)現(xiàn)
后端:拷貝product模塊,替換大小寫字母,調(diào)整字段名,時(shí)間顯示格式等,
后臺(tái):拷貝資源中的pet.vue,配置路由,調(diào)整變量名,
前臺(tái)展示
前臺(tái)寵物列表和詳情展示
前臺(tái)拷貝product.html為pet.html,替換大小寫字母,首頁(yè)跳轉(zhuǎn)過(guò)來(lái),pet能跳轉(zhuǎn)其他,
前臺(tái)拷貝productDetail.html為petDetail.html,替換大小寫字母,改預(yù)定須知為領(lǐng)養(yǎng)須知,
修改后端loadById查詳情sql,前端取店名展示
<resultMap id="petMap" type="Pet">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="resources" column="resources"></result>
<result property="saleprice" column="saleprice"></result>
<result property="costprice" column="costprice"></result>
<result property="offsaletime" column="offsaletime"></result>
<result property="onsaletime" column="onsaletime"></result>
<result property="state" column="state"></result>
<result property="createtime" column="createtime"></result>
<!--private PetDetail detail = new PetDetail();-->
<association property="detail" javaType="PetDetail">
<id property="id" column="pdid"></id>
<result property="intro" column="intro"></result>
<result property="adoptNotice" column="adoptNotice"></result>
</association>
<association property="shop" javaType="Shop">
<id property="id" column="sid"></id>
<result property="name" column="sname"></result>
</association>
</resultMap>
<select id="loadById" parameterType="long" resultMap="petMap">
select
p.*,
pd.id pdid,pd.intro,pd.adoptNotice,
s.id sid,s.name sname
from t_pet p
LEFT JOIN t_pet_detail pd on p.id = pd.pet_id
LEFT join t_shop s on p.shop_id = s.id
where p.id = #{id}
</select>
<!--名稱-->
<div class="tb-detail-hd">
<h1>
【{{pet.shop.name}}】 {{pet.name}}
</h1>
</div>
店鋪展示
petDetail頁(yè)面的大包裝右邊展示店鋪名稱
通過(guò):href="shopUrl"攜帶shopid跳往shop頁(yè)面
<li class="qc last"><a :href="shopUrl" style="color: green">{{pet.shop.name}}</a></li>
shopUrl:"",
mounted(){
let petId = parseUrlParams2Obj(location.href).petId;
this.$http.get("/pet/"+petId)
.then(result=>{
this.pet = result.data;
if(this.pet.resources){
this.resources = this.pet.resources.split(',');
}
this.shopUrl = "shop.html?shopId="+this.pet.shop.id;
})
.catch(result=>{
console.log(result);
alert("系統(tǒng)錯(cuò)誤");
})
}
拷貝success頁(yè)面為shop頁(yè)面,替換引入路徑,修改標(biāo)題,引入vue和Axios,
寫個(gè)div把body以內(nèi)全包起來(lái),發(fā)請(qǐng)求拿shop數(shù)據(jù)過(guò)來(lái)展示,
<script type="text/javascript">
new Vue({
el:"#myShop",
data:{
shop:{}
},
methods:{
getShop(){
let shopId = parseUrlParams2Obj(location.href).shopId;
this.$http.get("/shop/"+shopId)
.then(result=>{
this.shop = result.data;
$("#myTitle").html(this.shop.name);//自己去yyy
})
.catch(result=>{
console.log(result);
alert("系統(tǒng)錯(cuò)誤");
})
}
},
mounted(){
this.getShop();
}
})
</script>
領(lǐng)養(yǎng)
分析
領(lǐng)養(yǎng)即購(gòu)買,立即領(lǐng)養(yǎng)進(jìn)入領(lǐng)養(yǎng)流程,購(gòu)物車可通過(guò)加一個(gè)表實(shí)現(xiàn)(包含userid和寵物信息),
點(diǎn)擊立即購(gòu)買后流程:
傳入寵物信息,修改為下架,綁定購(gòu)買者userid,生成訂單和支付(這兩個(gè)放到后面)
前臺(tái)
petDetail頁(yè)面把立即購(gòu)買包進(jìn)div里,
立即購(gòu)買超鏈接綁定事件,發(fā)請(qǐng)求到后端進(jìn)入處理流程,(擴(kuò)展:處理完后進(jìn)入個(gè)人中心-我的領(lǐng)養(yǎng) 展示寵物表中userId是自己的)
<a id="LikBuy" title="點(diǎn)此按鈕到下一步確認(rèn)購(gòu)買信息" href="javascript:;" @click="adopt">立即購(gòu)買</a>
adopt(){
let petId = this.pet.id;
let flag = window.confirm("你確認(rèn)領(lǐng)養(yǎng)嗎?")
if(flag){
this.$http.get("/pet/adopt/"+petId)
.then(result=>{
result = result.data;
if(result.success){
alert("領(lǐng)養(yǎng)成功!");
//本來(lái)應(yīng)該跳轉(zhuǎn)到個(gè)人中心,查案?jìng)€(gè)人領(lǐng)養(yǎng)寵物信息
//這里我們就跳轉(zhuǎn)到首頁(yè)
location.href="index.html";
}else{
alert(result.message);
}
})
.catch(result=>{
alert("系統(tǒng)錯(cuò)誤");
})
}
//location.href="adoptOrder.html?petId="+this.pet.id;
}
后端
PetController
/**
* 領(lǐng)養(yǎng)寵物
*/
@GetMapping("/adopt/{petId}")
public AjaxResult adopt(@PathVariable("petId") Long petId, HttpServletRequest request){
try {
Logininfo loginIn = LoginContext.getLoginIn(request);
petService.adopt(petId,loginIn.getId());
return AjaxResult.me();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.me().setMessage("領(lǐng)養(yǎng)失??!"+e.getMessage());
}
}
PetServiceImpl
@Override
public void adopt(Long petId, Long loginInfoId) {
//1.修改狀態(tài) 下架
Pet pet = petMapper.loadById(petId);
pet.setState(0);
pet.setOffsaletime(new Date());
//2.綁定用戶
User user = userMapper.loadByloginInfoId(loginInfoId);
pet.setUser(user);
pet.setUser_id(user.getId());
pet.setShop_id(pet.getShop().getId());
//3.保存
petMapper.update(pet);
//@TODO 生成領(lǐng)養(yǎng)訂單 + 支付
System.out.println("領(lǐng)養(yǎng)成功!");
}
訂單
需求分析
可能產(chǎn)生訂單的模塊
1.寵物收購(gòu)訂單-店家給用戶錢
墊付:用戶立馬就能獲取到錢,員工定時(shí)報(bào)賬。
余額支付:付款余額,用戶可以提現(xiàn)。 平臺(tái)相當(dāng)于給了用戶錢,店家用給平臺(tái)錢。
銀行轉(zhuǎn)賬:銀行轉(zhuǎn)賬,店家財(cái)務(wù)依次給用戶轉(zhuǎn)賬。
2.服務(wù)訂單(多次消費(fèi))-用戶給店家錢
3.領(lǐng)養(yǎng)訂單(一次)-用戶給店家錢
4.充值訂單(一次)-用戶充值平臺(tái),用戶消費(fèi)后,平臺(tái)要給店鋪打錢。
5.商品訂單(多次)-用戶給店家錢
特別說(shuō)明一下:
大平臺(tái)一般錢先到平臺(tái),用戶確認(rèn)后,平臺(tái)才劃賬到店家。如果用戶長(zhǎng)時(shí)間不確認(rèn),自動(dòng)確認(rèn)。
我們小平臺(tái)直接到店家,我們沒有支付牌照。
每一類型的訂單都要有獨(dú)立的表來(lái)存
訂單模塊額外功能
1.系統(tǒng)報(bào)表、財(cái)務(wù)報(bào)表等
2.商家的賬單下載(easyPOI的導(dǎo)入與導(dǎo)出)
3.系統(tǒng)對(duì)賬服務(wù)(退款,支付異常等)
4.30分鐘未支付取消訂單(定時(shí)器)
訂單設(shè)計(jì)
表設(shè)計(jì)
九張: 用戶地址 訂單地址 收購(gòu)訂單 領(lǐng)養(yǎng)訂單 充值訂單 商品訂單 商品訂單詳情 服務(wù)訂單 服務(wù)訂單詳情
我們需要關(guān)心的五張表:
t_user_address:用戶地址,
t_order_address:訂單地址,下單時(shí)的用戶地址,綁定某個(gè)訂單
t_order_pet_acquisition:收購(gòu)訂單,一次性,不需要存詳情
t_order_adopt:領(lǐng)養(yǎng)訂單,一次性,不需要存詳情
t_order_product:服務(wù)訂單,可多次消費(fèi),需要存詳情
流程設(shè)計(jì)
用戶付錢給商家,兩個(gè)定時(shí)任務(wù)
商家付款給用戶(收購(gòu)訂單)
工作人員上門,應(yīng)該帶一個(gè)手提電腦,處理完并下單。以后需要商家版App,可以在上面操作,不需要手提電腦。
集成基礎(chǔ)代碼
拷貝資源
收購(gòu)訂單
創(chuàng)建訂單
前端
待處理消息處理窗口增加支付選項(xiàng)下拉框
后端
SearchMasterMsgController文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-611628.html
/**
* 處理消息
*/
@PutMapping("/handle")
public AjaxResult handle(@RequestBody Pet pet,HttpServletRequest request){
try {
Logininfo loginIn = LoginContext.getLoginIn(request);
seachMasterMsgService.handle(pet,loginIn.getId());
return AjaxResult.me();
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.me().setMessage("處理失敗!"+e.getMessage());
}
}
SearchMasterMsgServiceImpl文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-611628.html
/**
* 處理消息
*/
@Override
public void handle(Pet pet,Long loginInfoId) {
//1.改狀態(tài) --已處理
searchMasterMsgMapper.updateStateForProcessed(pet.getSearch_master_msg_id());
//2.生成寵物基本信息
petMapper.save(pet);
//3.寵物詳情
PetDetail detail = pet.getDetail();
if(detail != null){
detail.setPet_id(pet.getId());
petDetailMapper.save(detail);
}
//4.生成訂單
Employee employee = employeeMapper.loadByLoginInfoId(loginInfoId);
SearchMasterMsg searchMasterMsg = searchMasterMsgMapper.loadById(pet.getSearch_master_msg_id());
PetAcquisitionOrder order = pet2order(pet, searchMasterMsg, employee.getId());
petAcquisitionOrderMapper.save(order);
//5.生成支付@TODO
}
private PetAcquisitionOrder pet2order(Pet pet, SearchMasterMsg adopt,Long employeeId) {
PetAcquisitionOrder order = new PetAcquisitionOrder();
order.setDigest("[摘要]對(duì)"+pet.getName()+"收購(gòu)訂單!");
order.setState(0);//待支付
order.setPrice(pet.getCostprice());
order.setAddress(adopt.getAddress());
String orderSn = CodeGenerateUtils.generateOrderSn(adopt.getUser_id());
order.setOrderSn(orderSn);
order.setPet_id(pet.getId());
order.setUser_id(adopt.getUser_id());
order.setPaytype(0);
order.setShop_id(pet.getShop_id());
order.setEmp_id(employeeId);
return order;
}
到了這里,關(guān)于B076-項(xiàng)目實(shí)戰(zhàn)--寵物上下架 展示 領(lǐng)養(yǎng) 收購(gòu)訂單的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!