提交 b42aeac1 authored 作者: YunaiV's avatar YunaiV

Merge remote-tracking branch 'origin/master'

import request from "../config/request";
export function getOrderPage(params) {
return request({
url: '/order-api/users/order/order_page',
method: 'get',
params: {
...params,
}
});
}
export function cancelOrder(id) {
return request({
url: '/product-api/users/spu/info',
method: 'get',
params: {
id,
}
});
}
export function createOrder(params) {
return request({
headers: {
'Content-Type': 'application/json',
},
url: '/order-api/users/order/create_order',
method: 'post',
data: {
...params,
},
});
}
...@@ -2,7 +2,7 @@ import request from "../config/request"; ...@@ -2,7 +2,7 @@ import request from "../config/request";
export function getProductCategoryList(pid) { export function getProductCategoryList(pid) {
return request({ return request({
url: 'product-api/users/category/list', url: '/product-api/users/category/list',
method: 'get', method: 'get',
params: { params: {
pid pid
...@@ -12,7 +12,7 @@ export function getProductCategoryList(pid) { ...@@ -12,7 +12,7 @@ export function getProductCategoryList(pid) {
export function getProductSpuPage(cid, pageNo, pageSize) { export function getProductSpuPage(cid, pageNo, pageSize) {
return request({ return request({
url: 'product-api/users/spu/page', url: '/product-api/users/spu/page',
method: 'get', method: 'get',
params: { params: {
cid, cid,
...@@ -24,7 +24,7 @@ export function getProductSpuPage(cid, pageNo, pageSize) { ...@@ -24,7 +24,7 @@ export function getProductSpuPage(cid, pageNo, pageSize) {
export function getProductSpuInfo(id) { export function getProductSpuInfo(id) {
return request({ return request({
url: 'product-api/users/spu/info', url: '/product-api/users/spu/info',
method: 'get', method: 'get',
params: { params: {
id, id,
......
...@@ -15,6 +15,9 @@ export function getProductRecommendList() { ...@@ -15,6 +15,9 @@ export function getProductRecommendList() {
return request({ return request({
url: '/promotion-api/users/product_recommend/list', url: '/promotion-api/users/product_recommend/list',
method: 'get', method: 'get',
params: {
id,
}
}); });
} }
...@@ -40,6 +43,7 @@ export function doAddCouponCard(templateId) { ...@@ -40,6 +43,7 @@ export function doAddCouponCard(templateId) {
}); });
} }
// Coupon Card // Coupon Card
export function getCouponPage(status, pageNo, pageSize) { export function getCouponPage(status, pageNo, pageSize) {
......
...@@ -74,7 +74,7 @@ export function ExchangeCoupon(code){ ...@@ -74,7 +74,7 @@ export function ExchangeCoupon(code){
export function getUserInfo() { export function getUserInfo() {
return request({ return request({
url: 'user-api/users/user/info', url: '/user-api/users/user/info',
method: 'get', method: 'get',
}); });
} }
......
<template> <template>
<div> <div>
<ul :class="'cap-goods-list__container cap-goods-list__container--'+data.classname+' cap-goods-list__container--'+data.ParameterDictionary.showtype+' '+(data.ParameterDictionary.type=='6'?'nowrap':'')" > <ul
:class="'cap-goods-list__container cap-goods-list__container--'+data.classname+' cap-goods-list__container--'+data.ParameterDictionary.showtype+' '+(data.ParameterDictionary.type=='6'?'nowrap':'')">
<li v-if="productlist.length==0" style="width:100%;height:150px;border:0px;"> <li v-if="productlist.length==0" style="width:100%;height:150px;border:0px;">
<div style="width:100%;height:150px;"></div> <div style="width:100%;height:150px;"></div>
</li> </li>
<li v-for="(item,index) in productlist" :key="index" :class="'cap-goods-list__wrapper '+(data.ParameterDictionary.type=='3'?(index%3==0?'cap-goods-list__wrapper--hybrid-big ':'cap-goods-list__wrapper--hybrid-small '):'')"> <li v-for="(item,index) in productlist" :key="index"
<router-link :class="'cap-goods-list__item cap-goods-list__item--'+data.classname+' '+data.ParameterDictionary.showtype+' '+data.aclass" :to="'/product/'+item.id"> :class="'cap-goods-list__wrapper '+(data.ParameterDictionary.type=='3'?(index%3==0?'cap-goods-list__wrapper--hybrid-big ':'cap-goods-list__wrapper--hybrid-small '):'')">
<router-link
:class="'cap-goods-list__item cap-goods-list__item--'+data.classname+' '+data.ParameterDictionary.showtype+' '+data.aclass"
:to="'/product/'+item.id">
<div class="cap-goods-list__photo"> <div class="cap-goods-list__photo">
<img class="cap-goods-list__img lazy lazyload" v-lazy="item.imageURL+'?w='+((data.ParameterDictionary.type=='1'||data.ParameterDictionary.type=='3')?'750':'375')" /> <img class="cap-goods-list__img lazy lazyload"
v-lazy="item.imageURL+'?w='+((data.ParameterDictionary.type=='1'||data.ParameterDictionary.type=='3')?'750':'375')"/>
</div> </div>
<div :class="'cap-goods-list__info has-title has-price '+(data.ParameterDictionary.showtype == 'card'?'has-btn':'')"> <div
:class="'cap-goods-list__info has-title has-price '+(data.ParameterDictionary.showtype == 'card'?'has-btn':'')">
<h3 class="title">{{item.title}}</h3> <h3 class="title">{{item.title}}</h3>
<p class="sale-info"> <p class="sale-info">
<span class="sale-price">¥ {{item.price}}</span> <span class="sale-price">¥ {{item.price}}</span>
</p> </p>
</div> </div>
<div v-if="data.ParameterDictionary.showtype == 'card'" class="cap-goods-list__buy-btn-wrapper cap-goods-list__buy-btn-wrapper--4"> <div v-if="data.ParameterDictionary.showtype == 'card'"
<button class="cap-goods-list__buy-btn-4 van-button van-button--default van-button--small">{{data.ParameterDictionary.buttonvalue}}</button> class="cap-goods-list__buy-btn-wrapper cap-goods-list__buy-btn-wrapper--4">
<button
class="cap-goods-list__buy-btn-4 van-button van-button--default van-button--small">
{{data.ParameterDictionary.buttonvalue}}
</button>
</div> </div>
</router-link> </router-link>
</li> </li>
...@@ -26,21 +36,21 @@ ...@@ -26,21 +36,21 @@
</template> </template>
<script> <script>
import {getProduct} from "../../api/page.js"; import {getProduct} from "../../api/page.js";
export default { export default {
name:'product', name: 'product',
data () { data() {
return { return {
productlist: [] productlist: []
} }
}, },
props:{ props: {
data:Object data: Object
}, },
created:function(){ created: function () {
var id=this.data.PageSectionId; var id = this.data.PageSectionId;
var data=this.data; var data = this.data;
var classname = "big"; var classname = "big";
var aclass = ""; var aclass = "";
switch (data.ParameterDictionary.type) { switch (data.ParameterDictionary.type) {
...@@ -67,13 +77,13 @@ export default { ...@@ -67,13 +77,13 @@ export default {
classname = "three"; classname = "three";
break; break;
} }
data.classname=classname; data.classname = classname;
data.aclass=aclass; data.aclass = aclass;
getProduct(id).then(response => { getProduct(id).then(response => {
this.productlist=response; this.productlist = response;
}) })
} }
} }
</script> </script>
<style> <style>
......
...@@ -15,9 +15,13 @@ const serviceRouter = function(requestUrl) { ...@@ -15,9 +15,13 @@ const serviceRouter = function(requestUrl) {
prefix: '/user-api', prefix: '/user-api',
target: 'http://127.0.0.1:18082/user-api', target: 'http://127.0.0.1:18082/user-api',
}, },
'/product-api': {
prefix: '/product-api',
target: 'http://127.0.0.1:18081/product-api',
},
'/promotion-api': { '/promotion-api': {
prefix: '/promotion-api', prefix: '/promotion-api',
target: 'http://127.0.0.1:18085/promotion-api', target: 'http://127.0.0.1:18085//promotion-api',
}, },
}; };
...@@ -30,9 +34,13 @@ const serviceRouter = function(requestUrl) { ...@@ -30,9 +34,13 @@ const serviceRouter = function(requestUrl) {
prefix: '/user-api', prefix: '/user-api',
target: 'http://127.0.0.1:18082/user-api', target: 'http://127.0.0.1:18082/user-api',
}, },
'/product-api': {
prefix: '/product-api',
target: 'http://127.0.0.1:18081/product-api',
},
'/promotion-api': { '/promotion-api': {
prefix: '/promotion-api', prefix: '/promotion-api',
target: 'http://127.0.0.1:18085/promotion-api', target: 'http://127.0.0.1:18085//promotion-api',
}, },
}; };
...@@ -65,7 +73,9 @@ const serviceRouter = function(requestUrl) { ...@@ -65,7 +73,9 @@ const serviceRouter = function(requestUrl) {
const indexOf = requestUrl.indexOf("/", 1); const indexOf = requestUrl.indexOf("/", 1);
const _urlPrefix = requestUrl.substring(0, indexOf); const _urlPrefix = requestUrl.substring(0, indexOf);
if (!config[_urlPrefix]) { if (!config[_urlPrefix]) {
throw new Error(`服务路由,未找到可用服务! ${requestUrl}`); // throw new Error(`服务路由,未找到可用服务! ${requestUrl}`);
console.error(`服务路由,未找到可用服务! ${requestUrl}`)
return ''
} }
// if (!createServer[_urlPrefix]) { // if (!createServer[_urlPrefix]) {
// throw new Error("服务路由,未找到可用服务!"); // throw new Error("服务路由,未找到可用服务!");
......
...@@ -181,6 +181,13 @@ const routes = [ ...@@ -181,6 +181,13 @@ const routes = [
title: '确认订单' title: '确认订单'
} }
}, },
{
path: '/order/success',
component: () => import('../page/shipping/order-success'),
meta: {
title: '确认订单'
}
},
{ {
name: 'category', name: 'category',
component: () => import('../page/category/index'), component: () => import('../page/category/index'),
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<headerNav title="商品详情"/> <headerNav title="商品详情"/>
<van-swipe class="goods-swipe" :autoplay="3000"> <van-swipe class="goods-swipe" :autoplay="3000">
<van-swipe-item v-for="thumb in spu.picUrls" :key="thumb"> <van-swipe-item v-for="thumb in spu.picUrls" :key="thumb">
<img :src="thumb" > <img :src="thumb">
</van-swipe-item> </van-swipe-item>
</van-swipe> </van-swipe>
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
<!--</van-cell-group>--> <!--</van-cell-group>-->
<van-cell-group class="goods-cell-group"> <van-cell-group class="goods-cell-group">
<van-cell is-link @click="showSku" > <van-cell is-link @click="showSku">
<template slot="title"> <template slot="title">
<span style="margin-right: 10px;">已选</span> <span style="margin-right: 10px;">已选</span>
<span>{{ formatSkuText(initialSku) }}</span> <span>{{ formatSkuText(initialSku) }}</span>
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
</van-cell-group> </van-cell-group>
<div class="goods-info"> <div class="goods-info">
<p class="goods-info-title" >图文详情</p> <p class="goods-info-title">图文详情</p>
<div v-html="spu.description"></div> <div v-html="spu.description"></div>
</div> </div>
<van-goods-action> <van-goods-action>
...@@ -165,12 +165,11 @@ ...@@ -165,12 +165,11 @@
</template> </template>
<script> <script>
// import skuData from '../../data/sku'; // import skuData from '../../data/sku';
import { getProductSpuInfo } from '../../api/product'; import {getProductSpuInfo} from '../../api/product';
export default { export default {
components: { components: {},
},
data() { data() {
// this.skuData = skuData; // this.skuData = skuData;
return { return {
...@@ -248,16 +247,25 @@ export default { ...@@ -248,16 +247,25 @@ export default {
Toast('暂无后续逻辑~'); Toast('暂无后续逻辑~');
}, },
showPromotion() { showPromotion() {
this.show=true; this.show = true;
}, },
showSku() { // 展示 sku 选择 showSku() { // 展示 sku 选择
this.showBase=true; this.showBase = true;
}, },
onClickShowTag(){ onClickShowTag() {
this.showTag=true; this.showTag = true;
}, },
onBuyClicked(data) { onBuyClicked(data) {
this.$toast(JSON.stringify(data)); const { selectedNum, goodsId } = data;
console.log(data);
// this.$toast(JSON.stringify(data));
this.$router.push({
path:'/order',
query:{
skuId: goodsId,
quantity: selectedNum,
}
});
}, },
onAddCartClicked(data) { onAddCartClicked(data) {
this.$toast(JSON.stringify(data)); this.$toast(JSON.stringify(data));
...@@ -284,7 +292,7 @@ export default { ...@@ -284,7 +292,7 @@ export default {
}; };
for (let j = 0; j < sku.attrs.length; j++) { for (let j = 0; j < sku.attrs.length; j++) {
let attr = sku.attrs[j]; let attr = sku.attrs[j];
skuVO['attr_' + attr.attrId] =attr.attrValueId; skuVO['attr_' + attr.attrId] = attr.attrValueId;
} }
vanSku.list.push(skuVO); vanSku.list.push(skuVO);
// tree 规格 // tree 规格
...@@ -330,12 +338,13 @@ export default { ...@@ -330,12 +338,13 @@ export default {
this.initialSku.quantity = 1; this.initialSku.quantity = 1;
}); });
} }
}; };
</script> </script>
<style lang="less"> <style lang="less">
.goods { .goods {
padding-bottom: 50px; padding-bottom: 50px;
&-swipe { &-swipe {
img { img {
width: 7.5rem; width: 7.5rem;
...@@ -343,22 +352,27 @@ export default { ...@@ -343,22 +352,27 @@ export default {
display: block; display: block;
} }
} }
&-tag{
&-tag {
font-size: 12px; font-size: 12px;
border-top: 1px solid #e5e5e5; border-top: 1px solid #e5e5e5;
span{
span {
margin-right: 10px; margin-right: 10px;
} }
i{
i {
color: red; color: red;
margin-right: 3px; margin-right: 3px;
} }
img{
img {
width: 12px; width: 12px;
margin-right: 3px; margin-right: 3px;
margin-top: 6px; margin-top: 6px;
} }
} }
&-title { &-title {
line-height: 18px; line-height: 18px;
padding-top: 10px; padding-top: 10px;
...@@ -368,38 +382,53 @@ export default { ...@@ -368,38 +382,53 @@ export default {
font-weight: 700; font-weight: 700;
border-top: 1px solid #f0f0f0; border-top: 1px solid #f0f0f0;
} }
&-subtit{
&-subtit {
font-size: 13px; font-size: 13px;
color: #333; color: #333;
line-height: 21px; line-height: 21px;
} }
&-price { &-price {
color: #f44;font-size: 20px; color: #f44;
font-size: 20px;
} }
&-market-price { &-market-price {
text-decoration: line-through; text-decoration: line-through;
margin-left: 8px; margin-left: 8px;
font-size: 13px; font-size: 13px;
color: #999; color: #999;
} }
&-cell-group { &-cell-group {
margin: 15px 0; margin: 15px 0;
.van-cell__value { .van-cell__value {
color: #999; color: #999;
} }
} }
&-info-title{
height: 44px;line-height: 44px;text-align: center;font-size: 14px;font-weight: 700;margin: 10px;border-top: 1px solid #e5e5e5; &-info-title {
height: 44px;
line-height: 44px;
text-align: center;
font-size: 14px;
font-weight: 700;
margin: 10px;
border-top: 1px solid #e5e5e5;
} }
&-info p{
&-info p {
margin: 0; margin: 0;
padding: 0; padding: 0;
margin-block-end: 0; margin-block-end: 0;
margin-block-start: 0; margin-block-start: 0;
display: grid; display: grid;
} }
&-info img{
&-info img {
width: 100%; width: 100%;
} }
} }
</style> </style>
<template>
<div class="order-success">
<headerNav title="提交成功"/>
<sapn>TODO 支付成功</sapn>
<router-link :to="'/user/order'">
<van-button size="small" type="danger">订单列表</van-button>
</router-link>
</div>
</template>
<script>
import {createOrder} from '../../api/order';
export default {
data() {
return {
}
},
methods: {
},
activated() {
},
};
</script>
<style lang="less">
.order-success {
text-align: center;
}
</style>
...@@ -13,12 +13,12 @@ ...@@ -13,12 +13,12 @@
</template> </template>
<template v-else> <template v-else>
<strong>张三 138****6520</strong> <strong>张三 138****6520</strong>
<div>广东省深圳市南山区科技园 </div> <div>广东省深圳市南山区科技园</div>
</template> </template>
</van-cell> </van-cell>
<div style="height:15px;"></div> <div style="height:15px;"></div>
<div class="card" v-for="(product,i) in products" :key="i"> <div class="card" v-for="(product,i) in products" :key="i">
<product-card :product='product' /> <product-card :product='product'/>
</div> </div>
<div style="height:15px;"></div> <div style="height:15px;"></div>
<van-cell-group> <van-cell-group>
...@@ -32,15 +32,15 @@ ...@@ -32,15 +32,15 @@
</van-cell-group> </van-cell-group>
<div style="height:15px;"></div> <div style="height:15px;"></div>
<van-cell-group class="total"> <van-cell-group class="total">
<van-cell title="优惠券" is-link value="抵扣¥5.00" /> <van-cell title="优惠券" is-link value="抵扣¥5.00"/>
</van-cell-group> </van-cell-group>
<div style="height:15px;"></div> <div style="height:15px;"></div>
<van-cell-group class="total"> <van-cell-group class="total">
<van-cell title="商品总额" value="9.99" /> <van-cell title="商品总额" value="9.99"/>
<van-cell title="运费" value="+ 0.00" /> <van-cell title="运费" value="+ 0.00"/>
<van-cell title="折扣" value="- 5.00" /> <van-cell title="折扣" value="- 5.00"/>
<van-cell title="实付金额" value="4.99" style="font-weight: 700;" /> <van-cell title="实付金额" value="4.99" style="font-weight: 700;"/>
</van-cell-group> </van-cell-group>
<div style="height:50px;"></div> <div style="height:50px;"></div>
...@@ -55,7 +55,10 @@ ...@@ -55,7 +55,10 @@
</template> </template>
<script> <script>
export default {
import {createOrder} from '../../api/order';
export default {
data() { data() {
return { return {
type: "add1", type: "add1",
...@@ -100,22 +103,39 @@ export default { ...@@ -100,22 +103,39 @@ export default {
methods: { methods: {
onSubmit() { onSubmit() {
this.$toast("点击按钮"); this.$toast("点击按钮");
const { skuId, quantity } = this.$route.query;
const userAddressId = 1;
const remark = '';
const orderItems = [{
skuId,
quantity,
}];
createOrder({
orderItems,
userAddressId,
remark,
})
}, },
}, },
activated(){
activated() {
//根据key名获取传递回来的参数,data就是map //根据key名获取传递回来的参数,data就是map
this.$on('selectAddress', function(data){ this.$on('selectAddress', function (data) {
//赋值给首页的附近医院数据模型 //赋值给首页的附近医院数据模型
console.log(1); console.log(1);
}.bind(this)); }.bind(this));
}, },
}; };
</script> </script>
<style lang="less"> <style lang="less">
.order { .order {
font-size: 14px; font-size: 14px;
background: #f7f7f7; background: #f7f7f7;
.contact-card::before { .contact-card::before {
content: ""; content: "";
left: 0; left: 0;
...@@ -147,6 +167,7 @@ export default { ...@@ -147,6 +167,7 @@ export default {
); );
background-size: 80px; background-size: 80px;
} }
.total { .total {
.van-cell__value { .van-cell__value {
color: red; color: red;
...@@ -156,17 +177,20 @@ export default { ...@@ -156,17 +177,20 @@ export default {
.van-submit-bar__bar { .van-submit-bar__bar {
border-top: 1px solid #f7f7f7; border-top: 1px solid #f7f7f7;
} }
.additional { .additional {
.van-cell { .van-cell {
padding: 0 15px; padding: 0 15px;
font-size: 12px; font-size: 12px;
} }
.van-cell__title { .van-cell__title {
flex: 11; flex: 11;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.van-tag { .van-tag {
line-height: 12px; line-height: 12px;
margin-right: 5px; margin-right: 5px;
...@@ -175,10 +199,11 @@ export default { ...@@ -175,10 +199,11 @@ export default {
.price { .price {
color: #e93b3d; color: #e93b3d;
font-size: 10px; font-size: 10px;
span { span {
font-size: 16px; font-size: 16px;
} }
} }
} }
} }
</style> </style>
<template> <template>
<div> <div>
<headerNav title="我的订单"/> <headerNav title="我的订单"/>
<van-tabs v-model="active"> <van-tabs v-model="active" @change="onTabChange">
<van-tab title="全部"> <van-tab title="全部"></van-tab>
<van-tab title="待付款"></van-tab>
<van-tab title="待收货"></van-tab>
<van-tab title="已完成"></van-tab>
<van-tab title="已取消"></van-tab>
</van-tabs>
<div v-for="(item,index) in list" :key="index"> <div v-for="(item,index) in list" :key="index">
<van-cell-group class="order-item" > <van-cell-group class="order-item">
<van-panel :title="'订单:'+item.ordercode" :status="item.state" > <van-panel :title="'订单:'+item.ordercode" :status="item.state">
<div slot="header"> <div slot="header">
<van-cell class="title" :title="'订单:'+item.ordercode" :value="item.state" :to="'/user/order/info/'+item.orderid"/> <van-cell class="title" :title="'订单:'+item.ordercode" :value="item.state"
:to="'/user/order/info/'+item.orderid"/>
</div> </div>
<div> <div>
<router-link :to="'/user/order/info/'+item.orderid"> <router-link :to="'/user/order/info/'+item.orderid">
<div v-if="item.products.length==1" v-for="(product,i) in item.products" :key="i"> <div v-if="item.products.length==1" v-for="(product,i) in item.products" :key="i">
<product-card :product='product' /> <product-card :product='product'/>
</div> </div>
<div v-if="item.products.length>1" class="more" > <div v-if="item.products.length > 0" class="more">
<div class="item" v-for="(product,i) in item.products" :key="i"> <div class="item" v-for="(product,i) in item.products" :key="i">
<div > <div>
<img :src="product.imageURL"/> <img :src="product.imageURL"/>
</div> </div>
</div> </div>
...@@ -25,126 +31,182 @@ ...@@ -25,126 +31,182 @@
</router-link> </router-link>
</div> </div>
<div slot="footer"> <div slot="footer">
<span class="total">总价:¥8154898.89</span> <span class="total">总价:{{item.payAmount / 100}}</span>
<van-button size="small">确认收货</van-button> <van-button size="small">确认收货</van-button>
<van-button size="small" type="danger">支付</van-button> <van-button size="small" type="danger">支付</van-button>
</div> </div>
</van-panel> </van-panel>
</van-cell-group> </van-cell-group>
</div> </div>
</div>
</van-tab>
<van-tab title="待付款">内容 2</van-tab>
<van-tab title="待收货">内容 3</van-tab>
<van-tab title="已完成">内容 4</van-tab>
<van-tab title="已取消">内容 5</van-tab>
</van-tabs>
</div>
</template> </template>
<script> <script>
export default {
components:{
},
data(){
return{
active:0,
list:[ import {getOrderPage} from '../../../api/order';
export default {
components: {},
data() {
return {
active: 0,
list: [
{ {
orderid:1, orderid: 1,
ordercode:'4511248234235', ordercode: '4511248234235',
state:'待付款', state: '待付款',
products:[ products: [
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
}, },
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:1 quantity: 1
}, },
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
}, },
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
}, },
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
}, },
] ]
}, },
{ {
orderid:2, orderid: 2,
ordercode:'4511248234235', ordercode: '4511248234235',
state:'待收货', state: '待收货',
products:[ products: [
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
} }
] ]
}, },
{ {
orderid:3, orderid: 3,
ordercode:'4511248234235', ordercode: '4511248234235',
state:'已完成', state: '已完成',
products:[ products: [
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
} }
] ]
}, },
{ {
orderid:4, orderid: 4,
ordercode:'4511248234235', ordercode: '4511248234235',
state:'已取消', state: '已取消',
products:[ products: [
{ {
imageURL:'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712', imageURL: 'https://pop.nosdn.127.net/19e33c9b-6c22-4a4b-96da-1cb7afb32712',
title:'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套', title: 'BEYOND博洋家纺 床上套件 秋冬保暖纯棉床单被套 双人被罩 磨毛全棉印花床品四件套',
price:'499', price: '499',
quantity:2 quantity: 2
} }
] ]
}, },
] ]
} }
},
methods: {
onTabChange(index) {
console.log('onTabChange', index)
// status 和 tab index 对应的关系
const statusArray = [null, 1, 3, 4, 5];
// if (index === 0) {
// // 全部
// } else if (index === 1) {
// // 待付款 1
// } else if (index === 2) {
// // 待收货 3
// } else if (index === 3) {
// // 已完成 4
// } else if (index === 4) {
// // 取消 5
// }
this.queryOrderPage({
status: statusArray[index],
})
},
queryOrderPage(params) {
getOrderPage({
pageNo: 0,
pageSize: 10,
...params,
}).then(data => {
const {orders} = data;
const list = orders.map(order => {
const {orderItems} = order;
const products = orderItems.map(order => {
return {
imageURL: order.skuImage,
title: order.skuName,
price: order.price,
quantity: order.quantity,
};
});
return {
orderid: order.id,
ordercode: order.orderNo,
state: `${order.status}`,
products,
payAmount: order.payAmount,
};
});
this.list = list;
// console.log('list', list)
});
},
},
mounted() {
this.queryOrderPage()
},
} }
}
</script> </script>
<style lang="less"> <style lang="less">
.order-item{ .order-item {
margin-bottom: 10px; margin-bottom: 10px;
font-size: 12px; font-size: 12px;
.title{
.title {
border-bottom: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5;
.van-cell__title{ .van-cell__title {
flex: 2; flex: 2;
} }
.van-cell__value{
.van-cell__value {
color: red; color: red;
} }
} }
...@@ -154,23 +216,34 @@ export default { ...@@ -154,23 +216,34 @@ export default {
text-align: right; text-align: right;
border-bottom: 1px solid #e5e5e5; border-bottom: 1px solid #e5e5e5;
} }
.van-button { .van-button {
margin-left: 5px; margin-left: 5px;
} }
.total{
.total {
position: absolute; position: absolute;
top: 17px; top: 17px;
left: 15px; left: 15px;
font-size: 13px; font-size: 13px;
} }
.more{
overflow-x: scroll;white-space: nowrap; -webkit-overflow-scrolling: touch; margin: 5px 0 5px 15px; .more {
.item{ overflow-x: scroll;
width: 90px; height:90px; margin-right: 10px;display: inline-block; white-space: nowrap;
img{ -webkit-overflow-scrolling: touch;
margin: 5px 0 5px 15px;
.item {
width: 90px;
height: 90px;
margin-right: 10px;
display: inline-block;
img {
width: 100%; width: 100%;
} }
} }
} }
} }
</style> </style>
...@@ -109,29 +109,13 @@ ...@@ -109,29 +109,13 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source> <!-- or higher, depending on your project -->
<target>1.8</target> <!-- or higher, depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin> </plugin>
<!-- 打包 --> <!-- 打包 -->
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
......
...@@ -33,4 +33,12 @@ public class MVCConfiguration implements WebMvcConfigurer { ...@@ -33,4 +33,12 @@ public class MVCConfiguration implements WebMvcConfigurer {
registry.addResourceHandler("webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); registry.addResourceHandler("webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
} }
// TODO 芋艿,允许跨域
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*");
}
} }
\ No newline at end of file
...@@ -8,10 +8,10 @@ import cn.iocoder.mall.order.api.bo.OrderRecipientBO; ...@@ -8,10 +8,10 @@ import cn.iocoder.mall.order.api.bo.OrderRecipientBO;
import cn.iocoder.mall.order.api.dto.*; import cn.iocoder.mall.order.api.dto.*;
import cn.iocoder.mall.order.application.convert.OrderConvertAPP; import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
import cn.iocoder.mall.order.application.convert.OrderDeliveryConvert; import cn.iocoder.mall.order.application.convert.OrderDeliveryConvert;
import cn.iocoder.mall.order.application.po.OrderDeliverPO; import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO;
import cn.iocoder.mall.order.application.po.OrderItemUpdatePO; import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO;
import cn.iocoder.mall.order.application.po.OrderLogisticsPO; import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO;
import cn.iocoder.mall.order.application.po.OrderPageQueryPO; import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -37,7 +37,7 @@ public class AdminsOrderController { ...@@ -37,7 +37,7 @@ public class AdminsOrderController {
@GetMapping("page") @GetMapping("page")
@ApiOperation("订单列表") @ApiOperation("订单列表")
public CommonResult<OrderPageBO> getOrderPage(@Validated OrderPageQueryPO orderPageQueryVO) { public CommonResult<OrderPageBO> getOrderPage(@Validated OrderPageQueryPO orderPageQueryVO) {
OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convertPageBO(orderPageQueryVO); OrderQueryDTO orderQueryDTO = OrderConvertAPP.INSTANCE.convert(orderPageQueryVO);
return orderService.getOrderPage(orderQueryDTO); return orderService.getOrderPage(orderQueryDTO);
} }
...@@ -86,14 +86,14 @@ public class AdminsOrderController { ...@@ -86,14 +86,14 @@ public class AdminsOrderController {
@PutMapping("order_item/update") @PutMapping("order_item/update")
@ApiOperation("更新-订单item") @ApiOperation("更新-订单item")
public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdatePO orderItemUpdateVO) { public CommonResult updateOrderItem(@RequestBody @Validated OrderItemUpdatePO orderItemUpdateVO) {
OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderItemUpdateVO); OrderItemUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderItemUpdateVO);
return orderService.updateOrderItem(dto); return orderService.updateOrderItem(dto);
} }
@PutMapping("logistics/update") @PutMapping("logistics/update")
@ApiOperation("更新-订单物流") @ApiOperation("更新-订单物流")
public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsPO orderLogisticsVO) { public CommonResult updateLogistics(@RequestBody @Validated OrderLogisticsPO orderLogisticsVO) {
OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convertPageBO(orderLogisticsVO); OrderLogisticsUpdateDTO dto = OrderConvertAPP.INSTANCE.convert(orderLogisticsVO);
return orderService.updateLogistics(dto); return orderService.updateLogistics(dto);
} }
} }
package cn.iocoder.mall.order.application.controller.users; package cn.iocoder.mall.order.application.controller.users;
import org.springframework.web.bind.annotation.RequestMapping; import cn.iocoder.common.framework.vo.CommonResult;
import org.springframework.web.bind.annotation.RestController; import cn.iocoder.mall.order.api.OrderService;
import cn.iocoder.mall.order.api.bo.OrderCreateBO;
import cn.iocoder.mall.order.api.bo.OrderPageBO;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.api.dto.OrderQueryDTO;
import cn.iocoder.mall.order.api.dto.OrderUserPageDTO;
import cn.iocoder.mall.order.application.convert.OrderConvertAPP;
import cn.iocoder.mall.order.application.po.user.OrderCreatePO;
import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/** /**
* 订单API(users) * 订单API(users)
...@@ -12,4 +23,22 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -12,4 +23,22 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("users/order") @RequestMapping("users/order")
public class UsersOrderController { public class UsersOrderController {
@Autowired
private OrderService orderService;
@GetMapping("order_page")
public CommonResult<OrderPageBO> getOrderPage(@Validated OrderQueryDTO orderQueryDTO) {
Integer userId = UserSecurityContextHolder.getContext().getUserId();
orderQueryDTO.setUserId(userId);
return orderService.getOrderPage(orderQueryDTO);
}
@PostMapping("create_order")
public CommonResult<OrderCreateBO> createOrder(@RequestBody @Validated OrderCreatePO orderCreatePO) {
Integer userId = UserSecurityContextHolder.getContext().getUserId();
OrderCreateDTO orderCreateDTO = OrderConvertAPP.INSTANCE.convert(orderCreatePO);
orderCreateDTO.setUserId(1);
return orderService.createOrder(orderCreateDTO);
}
} }
package cn.iocoder.mall.order.application.convert; package cn.iocoder.mall.order.application.convert;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO; import cn.iocoder.mall.order.api.dto.OrderItemUpdateDTO;
import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO; import cn.iocoder.mall.order.api.dto.OrderLogisticsUpdateDTO;
import cn.iocoder.mall.order.api.dto.OrderQueryDTO; import cn.iocoder.mall.order.api.dto.OrderQueryDTO;
import cn.iocoder.mall.order.application.po.OrderItemUpdatePO; import cn.iocoder.mall.order.application.po.admin.OrderItemUpdatePO;
import cn.iocoder.mall.order.application.po.OrderPageQueryPO; import cn.iocoder.mall.order.application.po.admin.OrderLogisticsPO;
import cn.iocoder.mall.order.application.po.OrderLogisticsPO; import cn.iocoder.mall.order.application.po.admin.OrderPageQueryPO;
import cn.iocoder.mall.order.application.po.user.OrderCreatePO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
...@@ -24,11 +26,14 @@ public interface OrderConvertAPP { ...@@ -24,11 +26,14 @@ public interface OrderConvertAPP {
OrderConvertAPP INSTANCE = Mappers.getMapper(OrderConvertAPP.class); OrderConvertAPP INSTANCE = Mappers.getMapper(OrderConvertAPP.class);
@Mappings({}) @Mappings({})
OrderQueryDTO convertPageBO(OrderPageQueryPO orderPageQueryVO); OrderQueryDTO convert(OrderPageQueryPO orderPageQueryVO);
@Mappings({}) @Mappings({})
OrderLogisticsUpdateDTO convertPageBO(OrderLogisticsPO orderLogisticsVO); OrderLogisticsUpdateDTO convert(OrderLogisticsPO orderLogisticsVO);
@Mappings({}) @Mappings({})
OrderItemUpdateDTO convertPageBO(OrderItemUpdatePO orderItemUpdateVO); OrderItemUpdateDTO convert(OrderItemUpdatePO orderItemUpdateVO);
@Mappings({})
OrderCreateDTO convert(OrderCreatePO orderCreatePO);
} }
package cn.iocoder.mall.order.application.convert; package cn.iocoder.mall.order.application.convert;
import cn.iocoder.mall.order.api.dto.OrderDeliveryDTO; import cn.iocoder.mall.order.api.dto.OrderDeliveryDTO;
import cn.iocoder.mall.order.application.po.OrderDeliverPO; import cn.iocoder.mall.order.application.po.admin.OrderDeliverPO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
......
package cn.iocoder.mall.order.application.po; package cn.iocoder.mall.order.application.po.admin;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package cn.iocoder.mall.order.application.po; package cn.iocoder.mall.order.application.po.admin;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package cn.iocoder.mall.order.application.po; package cn.iocoder.mall.order.application.po.admin;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package cn.iocoder.mall.order.application.po; package cn.iocoder.mall.order.application.po.admin;
import cn.iocoder.mall.order.api.bo.OrderBO; import cn.iocoder.mall.order.api.bo.OrderBO;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
......
package cn.iocoder.mall.order.application.po; package cn.iocoder.mall.order.application.po.admin;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
package cn.iocoder.mall.order.application.po.user;
import cn.iocoder.mall.order.api.dto.OrderCreateItemDTO;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* 订单创建
*
* @author Sin
* @time 2019-03-16 14:42
*/
@Data
@Accessors(chain = true)
public class OrderCreatePO implements Serializable {
/**
* 收件手机号
*/
@NotNull(message = "用户地址id不能为空!")
private Integer userAddressId;
/**
* 备注
*/
private String remark;
///
/// order item
@NotNull()
@Size(max = 1000, min = 1, message = "用户订单中没有商品!")
private List<OrderCreateItemDTO> orderItems;
}
...@@ -11,10 +11,6 @@ ...@@ -11,10 +11,6 @@
<artifactId>order-service-api</artifactId> <artifactId>order-service-api</artifactId>
<properties>
<org.projectlombok.version>1.16.14</org.projectlombok.version>
</properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>cn.iocoder.mall</groupId> <groupId>cn.iocoder.mall</groupId>
...@@ -26,10 +22,17 @@ ...@@ -26,10 +22,17 @@
<groupId>javax.validation</groupId> <groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId> <artifactId>validation-api</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</dependency> </dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
...@@ -44,11 +44,10 @@ public interface OrderService { ...@@ -44,11 +44,10 @@ public interface OrderService {
/** /**
* 订单 - 创建 * 订单 - 创建
* *
* @param userId
* @param orderCreateDTO * @param orderCreateDTO
* @return * @return
*/ */
CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO); CommonResult<OrderCreateBO> createOrder(OrderCreateDTO orderCreateDTO);
/** /**
* 订单item - 更新 * 订单item - 更新
......
package cn.iocoder.mall.order.api.bo;
import java.io.Serializable;
/**
* 订单支付信息返回
*
* @author Sin
* @time 2019-04-08 19:39
*/
public class OrderPayBO implements Serializable {
}
...@@ -17,9 +17,16 @@ public enum OrderErrorCodeEnum { ...@@ -17,9 +17,16 @@ public enum OrderErrorCodeEnum {
ORDER_PAY_AMOUNT_NOT_NEGATIVE(1008000003, "支付金额不能为负数!"), ORDER_PAY_AMOUNT_NOT_NEGATIVE(1008000003, "支付金额不能为负数!"),
ORDER_STATUS_NOT_CANCEL(1008000004, "订单状态不能取消!"), ORDER_STATUS_NOT_CANCEL(1008000004, "订单状态不能取消!"),
ORDER_DELIVERY_INCORRECT_DATA(1008000005, "订单发货数据不正确!"), ORDER_DELIVERY_INCORRECT_DATA(1008000005, "订单发货数据不正确!"),
ORDER_INSUFFICIENT_INVENTORY(1008000006, "库存不足!"),
ORDER_GOODS_AMOUNT_INCORRECT(1008000007, "商品金额非法!"),
ORDER_GET_GOODS_INFO_INCORRECT(1008000008, "获取额商品信息不正确!"),
ORDER_GET_USER_ADDRESS_FAIL(1008000009, "获取用户地址失败!"),
ORDER_GET_PAY_FAIL(1008000009, "调用pay失败!"),
// order item // order item
ORDER_ITEM_ONLY_ONE(1008000004, "订单Item只有一个!"), ORDER_ITEM_ONLY_ONE(1008000004, "订单Item只有一个!"),
; ;
private final int code; private final int code;
......
...@@ -6,7 +6,7 @@ package cn.iocoder.mall.order.api.constant; ...@@ -6,7 +6,7 @@ package cn.iocoder.mall.order.api.constant;
* @author Sin * @author Sin
* @time 2019-03-16 14:32 * @time 2019-03-16 14:32
*/ */
public enum OrderPayStatusEnum { public enum OrderPayStatus {
WAITING_PAYMENT(0, "等待支付"), WAITING_PAYMENT(0, "等待支付"),
SUCCESSFUL_PAYMENT(1, "支付成功"), SUCCESSFUL_PAYMENT(1, "支付成功"),
...@@ -19,7 +19,7 @@ public enum OrderPayStatusEnum { ...@@ -19,7 +19,7 @@ public enum OrderPayStatusEnum {
private final String name; private final String name;
OrderPayStatusEnum(int value, String name) { OrderPayStatus(int value, String name) {
this.value = value; this.value = value;
this.name = name; this.name = name;
} }
......
package cn.iocoder.mall.order.api.constant;
/**
* 支付 AppId
*
* @author Sin
* @time 2019-04-08 19:54
*/
public class PayAppId {
/**
* 电商
*/
public static final String APP_ID_1024 = "1024";
}
...@@ -3,8 +3,6 @@ package cn.iocoder.mall.order.api.dto; ...@@ -3,8 +3,6 @@ package cn.iocoder.mall.order.api.dto;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
...@@ -23,34 +21,20 @@ public class OrderCreateDTO implements Serializable { ...@@ -23,34 +21,20 @@ public class OrderCreateDTO implements Serializable {
*/ */
private Integer userId; private Integer userId;
/** /**
* 收件区域编号 * 用户地址
*/ */
@NotNull private Integer userAddressId;
private String areaNo;
/**
* 收件人名称
*/
@NotNull
private String name;
/**
* 收件手机号
*/
@NotNull
private String mobile;
/**
* 收件详细地址
*/
@NotNull
private String address;
/** /**
* 备注 * 备注
*/ */
private String remark; private String remark;
/**
* ip信息
*/
private String ip;
/// ///
/// order item /// order item
@NotNull
@Size(max = 1000, min = 1)
private List<OrderCreateItemDTO> orderItems; private List<OrderCreateItemDTO> orderItems;
} }
package cn.iocoder.mall.order.api.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
/**
* 用户订单 page
*
* @author Sin
* @time 2019-04-08 17:50
*/
@Data
@Accessors(chain = true)
public class OrderUserPageDTO implements Serializable {
/**
* id
*/
private Integer id;
/**
* 订单号
*/
private String orderNo;
/**
* 用户 id
*/
private Integer userId;
/**
* 付款时间(待发货)
*/
private Date startPaymentTime;
private Date endPaymentTime;
/**
* 创建时间
*/
private Date startCreateTime;
private Date endCreateTime;
/**
* 状态
*/
private Integer status;
}
...@@ -11,11 +11,6 @@ ...@@ -11,11 +11,6 @@
<artifactId>order-service-impl</artifactId> <artifactId>order-service-impl</artifactId>
<properties>
<org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
<org.projectlombok.version>1.16.14</org.projectlombok.version>
</properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>cn.iocoder.mall</groupId> <groupId>cn.iocoder.mall</groupId>
...@@ -28,6 +23,19 @@ ...@@ -28,6 +23,19 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>pay-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>user-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba</groupId> <groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId> <artifactId>dubbo</artifactId>
...@@ -47,43 +55,27 @@ ...@@ -47,43 +55,27 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId> <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId> <groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId> <artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version> <version>2.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>27.0.1-jre</version> <version>27.0.1-jre</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>Pingplusplus</groupId> <groupId>Pingplusplus</groupId>
<artifactId>pingpp-java</artifactId> <artifactId>pingpp-java</artifactId>
<version>2.2.4</version> <version>2.2.4</version>
<type>jar</type> <type>jar</type>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.xuxueli</groupId> <groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId> <artifactId>xxl-job-core</artifactId>
<version>2.0.1</version> <version>2.0.1</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.rocketmq</groupId> <groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId> <artifactId>rocketmq-spring-boot-starter</artifactId>
...@@ -108,6 +100,12 @@ ...@@ -108,6 +100,12 @@
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>pay-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
...@@ -116,23 +114,6 @@ ...@@ -116,23 +114,6 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source> <!-- or higher, depending on your project -->
<target>1.8</target> <!-- or higher, depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
......
...@@ -3,6 +3,7 @@ package cn.iocoder.mall.order.biz.convert; ...@@ -3,6 +3,7 @@ package cn.iocoder.mall.order.biz.convert;
import cn.iocoder.mall.order.api.bo.OrderRecipientBO; import cn.iocoder.mall.order.api.bo.OrderRecipientBO;
import cn.iocoder.mall.order.api.dto.OrderCreateDTO; import cn.iocoder.mall.order.api.dto.OrderCreateDTO;
import cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO; import cn.iocoder.mall.order.biz.dataobject.OrderRecipientDO;
import cn.iocoder.mall.user.api.bo.UserAddressBO;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mappings; import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
...@@ -23,6 +24,9 @@ public interface OrderRecipientConvert { ...@@ -23,6 +24,9 @@ public interface OrderRecipientConvert {
@Mappings({}) @Mappings({})
OrderRecipientDO convert(OrderCreateDTO orderCreateDTO); OrderRecipientDO convert(OrderCreateDTO orderCreateDTO);
@Mappings({})
OrderRecipientDO convert(UserAddressBO userAddressBO);
@Mappings({}) @Mappings({})
OrderRecipientBO convert(OrderRecipientDO orderRecipientDO); OrderRecipientBO convert(OrderRecipientDO orderRecipientDO);
......
...@@ -32,6 +32,10 @@ public class OrderItemDO extends DeletableDO { ...@@ -32,6 +32,10 @@ public class OrderItemDO extends DeletableDO {
* 商品编号 * 商品编号
*/ */
private Integer skuId; private Integer skuId;
/**
* 物流id
*/
private Integer orderLogisticsId;
/** /**
* 商品名称 * 商品名称
*/ */
...@@ -52,10 +56,6 @@ public class OrderItemDO extends DeletableDO { ...@@ -52,10 +56,6 @@ public class OrderItemDO extends DeletableDO {
* 支付金额(实付金额) * 支付金额(实付金额)
*/ */
private Integer payAmount; private Integer payAmount;
/**
* 物流id
*/
private Integer orderLogisticsId;
/// ///
/// 时间信息 /// 时间信息
......
package cn.iocoder.mall.order.biz.service; package cn.iocoder.mall.order.biz.service;
import cn.iocoder.common.framework.constant.DeletedStatusEnum; import cn.iocoder.common.framework.constant.DeletedStatusEnum;
import cn.iocoder.common.framework.util.DateUtil;
import cn.iocoder.common.framework.util.ServiceExceptionUtil; import cn.iocoder.common.framework.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.vo.CommonResult; import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.order.api.OrderService; import cn.iocoder.mall.order.api.OrderService;
...@@ -8,6 +9,7 @@ import cn.iocoder.mall.order.api.bo.*; ...@@ -8,6 +9,7 @@ import cn.iocoder.mall.order.api.bo.*;
import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum; import cn.iocoder.mall.order.api.constant.OrderErrorCodeEnum;
import cn.iocoder.mall.order.api.constant.OrderHasReturnExchangeEnum; import cn.iocoder.mall.order.api.constant.OrderHasReturnExchangeEnum;
import cn.iocoder.mall.order.api.constant.OrderStatusEnum; import cn.iocoder.mall.order.api.constant.OrderStatusEnum;
import cn.iocoder.mall.order.api.constant.PayAppId;
import cn.iocoder.mall.order.api.dto.*; import cn.iocoder.mall.order.api.dto.*;
import cn.iocoder.mall.order.biz.OrderCommon; import cn.iocoder.mall.order.biz.OrderCommon;
import cn.iocoder.mall.order.biz.constants.OrderDeliveryTypeEnum; import cn.iocoder.mall.order.biz.constants.OrderDeliveryTypeEnum;
...@@ -18,10 +20,18 @@ import cn.iocoder.mall.order.biz.convert.OrderLogisticsConvert; ...@@ -18,10 +20,18 @@ import cn.iocoder.mall.order.biz.convert.OrderLogisticsConvert;
import cn.iocoder.mall.order.biz.convert.OrderRecipientConvert; import cn.iocoder.mall.order.biz.convert.OrderRecipientConvert;
import cn.iocoder.mall.order.biz.dao.*; import cn.iocoder.mall.order.biz.dao.*;
import cn.iocoder.mall.order.biz.dataobject.*; import cn.iocoder.mall.order.biz.dataobject.*;
import cn.iocoder.mall.pay.api.PayTransactionService;
import cn.iocoder.mall.pay.api.dto.PayTransactionCreateDTO;
import cn.iocoder.mall.product.api.ProductSpuService;
import cn.iocoder.mall.product.api.bo.ProductSpuBO;
import cn.iocoder.mall.user.api.UserAddressService;
import cn.iocoder.mall.user.api.bo.UserAddressBO;
import com.alibaba.dubbo.config.annotation.Reference;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.*; import java.util.*;
...@@ -37,6 +47,11 @@ import java.util.stream.Collectors; ...@@ -37,6 +47,11 @@ import java.util.stream.Collectors;
@com.alibaba.dubbo.config.annotation.Service(validation = "true") @com.alibaba.dubbo.config.annotation.Service(validation = "true")
public class OrderServiceImpl implements OrderService { public class OrderServiceImpl implements OrderService {
/**
* 支付过期时间 15 分钟
*/
public static final int PAY_EXPIRE_TIME = 15;
@Autowired @Autowired
private OrderMapper orderMapper; private OrderMapper orderMapper;
@Autowired @Autowired
...@@ -50,6 +65,13 @@ public class OrderServiceImpl implements OrderService { ...@@ -50,6 +65,13 @@ public class OrderServiceImpl implements OrderService {
@Autowired @Autowired
private OrderCommon orderCommon; private OrderCommon orderCommon;
@Reference
private ProductSpuService productSpuService;
@Reference
private UserAddressService userAddressService;
@Reference
private PayTransactionService payTransactionService;
@Override @Override
public CommonResult<OrderPageBO> getOrderPage(OrderQueryDTO orderQueryDTO) { public CommonResult<OrderPageBO> getOrderPage(OrderQueryDTO orderQueryDTO) {
...@@ -61,6 +83,10 @@ public class OrderServiceImpl implements OrderService { ...@@ -61,6 +83,10 @@ public class OrderServiceImpl implements OrderService {
// 获取订单数据 // 获取订单数据
List<OrderDO> orderDOList = orderMapper.selectPage(orderQueryDTO); List<OrderDO> orderDOList = orderMapper.selectPage(orderQueryDTO);
if (CollectionUtils.isEmpty(orderDOList)) {
return CommonResult.success(new OrderPageBO().setOrders(Collections.EMPTY_LIST).setTotal(totalCount));
}
// 获取订单 id // 获取订单 id
Set<Integer> orderIds = orderDOList.stream() Set<Integer> orderIds = orderDOList.stream()
.map(orderDO -> orderDO.getId()) .map(orderDO -> orderDO.getId())
...@@ -133,33 +159,59 @@ public class OrderServiceImpl implements OrderService { ...@@ -133,33 +159,59 @@ public class OrderServiceImpl implements OrderService {
@Override @Override
@Transactional @Transactional
public CommonResult<OrderCreateBO> createOrder(Integer userId, OrderCreateDTO orderCreateDTO) { public CommonResult<OrderCreateBO> createOrder(OrderCreateDTO orderCreateDTO) {
Integer userId = orderCreateDTO.getUserId();
List<OrderCreateItemDTO> orderItemDTOList = orderCreateDTO.getOrderItems(); List<OrderCreateItemDTO> orderItemDTOList = orderCreateDTO.getOrderItems();
OrderRecipientDO orderRecipientDO = OrderRecipientConvert.INSTANCE.convert(orderCreateDTO);
List<OrderItemDO> orderItemDOList = OrderItemConvert.INSTANCE.convert(orderItemDTOList); List<OrderItemDO> orderItemDOList = OrderItemConvert.INSTANCE.convert(orderItemDTOList);
// TODO: 2019-03-24 sin 校验商品是否存在 // 获取商品信息
// for (OrderItemDO orderItemDO : orderItemDOList) { Set<Integer> skuIds = orderItemDOList.stream()
// CommonResult<ProductSpuDetailBO> result = productSpuService.getProductSpu(orderItemDO.getSkuId()); .map(orderItemDO -> orderItemDO.getSkuId()).collect(Collectors.toSet());
//
// // 有任何商品获取失败,或者为 null,都直接返回失败。 CommonResult<List<ProductSpuBO>> result = productSpuService.getProductSpuList(skuIds);
// if (result.isError()) {
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_FAIL.getCode()); // 校验商品信息
// } if (result.isError()) {
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_FAIL.getCode());
// if (result.getData() == null) { }
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_NOT_EXISTENT.getCode());
// } if (result.getData() == null) {
// return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_SKU_NOT_EXISTENT.getCode());
// ProductSpuDetailBO spuDetailBO = result.getData(); }
// orderItemDO.setPrice(1000);
// } if (orderItemDTOList.size() != result.getData().size()) {
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_GOODS_INFO_INCORRECT.getCode());
}
// 设置 orderItem
Map<Integer, ProductSpuBO> productSpuBOMap = result.getData()
.stream().collect(Collectors.toMap(o -> o.getId(), o -> o));
for (OrderItemDO orderItemDO : orderItemDOList) {
ProductSpuBO productSpuBO = productSpuBOMap.get(orderItemDO.getSkuId());
if (productSpuBO.getQuantity() <= 0) {
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_INSUFFICIENT_INVENTORY.getCode());
}
if (productSpuBO.getPrice() <= 0) {
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GOODS_AMOUNT_INCORRECT.getCode());
}
orderItemDO.setSkuImage(Optional.ofNullable(productSpuBO.getPicUrls().get(0)).get());
orderItemDO.setSkuName(productSpuBO.getName());
orderItemDO.setPrice(productSpuBO.getPrice());
int payAmount = orderItemDO.getQuantity() * orderItemDO.getPrice();
orderItemDO.setPayAmount(payAmount);
}
// order // order
Integer totalAmount = orderCommon.calculatedAmount(orderItemDOList);
OrderDO orderDO = new OrderDO() OrderDO orderDO = new OrderDO()
.setUserId(userId) .setUserId(userId)
.setOrderNo(UUID.randomUUID().toString().replace("-", "")) .setOrderNo(UUID.randomUUID().toString().replace("-", ""))
.setPayAmount(-1) // 先设置一个默认值,金额在下面计算 .setPayAmount(totalAmount)
.setClosingTime(null) .setClosingTime(null)
.setDeliveryTime(null) .setDeliveryTime(null)
.setPaymentTime(null) .setPaymentTime(null)
...@@ -173,6 +225,12 @@ public class OrderServiceImpl implements OrderService { ...@@ -173,6 +225,12 @@ public class OrderServiceImpl implements OrderService {
orderMapper.insert(orderDO); orderMapper.insert(orderDO);
// 收件人信息 // 收件人信息
CommonResult<UserAddressBO> userAddressResult = userAddressService.getAddress(userId, orderCreateDTO.getUserAddressId());
if (userAddressResult.isError()) {
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_USER_ADDRESS_FAIL.getCode());
}
UserAddressBO userAddressBO = userAddressResult.getData();
OrderRecipientDO orderRecipientDO = OrderRecipientConvert.INSTANCE.convert(userAddressBO);
orderRecipientDO orderRecipientDO
.setOrderId(orderDO.getId()) .setOrderId(orderDO.getId())
.setType(OrderRecipientTypeEnum.EXPRESS.getValue()) .setType(OrderRecipientTypeEnum.EXPRESS.getValue())
...@@ -183,14 +241,9 @@ public class OrderServiceImpl implements OrderService { ...@@ -183,14 +241,9 @@ public class OrderServiceImpl implements OrderService {
// order item // order item
orderItemDOList.forEach(orderItemDO -> { orderItemDOList.forEach(orderItemDO -> {
int goodsPrice = 1000; // 商品单价
orderItemDO orderItemDO
.setOrderId(orderDO.getId()) .setOrderId(orderDO.getId())
.setOrderNo(orderDO.getOrderNo()) .setOrderNo(orderDO.getOrderNo())
.setPrice(goodsPrice)
.setPayAmount(orderItemDO.getQuantity() * orderItemDO.getPrice())
.setSkuName("夏季衣服-默认数据")
.setSkuImage("//img.alicdn.com/tps/i4/TB1TiGwKXXXXXXRXFXXqVMCNVXX-400-400.jpg_350x350q90.jpg_.webp")
.setPaymentTime(null) .setPaymentTime(null)
.setDeliveryTime(null) .setDeliveryTime(null)
.setReceiverTime(null) .setReceiverTime(null)
...@@ -201,20 +254,31 @@ public class OrderServiceImpl implements OrderService { ...@@ -201,20 +254,31 @@ public class OrderServiceImpl implements OrderService {
.setDeleted(DeletedStatusEnum.DELETED_NO.getValue()) .setDeleted(DeletedStatusEnum.DELETED_NO.getValue())
.setCreateTime(new Date()) .setCreateTime(new Date())
.setUpdateTime(null); .setUpdateTime(null);
orderItemMapper.insert(orderItemDO); orderItemMapper.insert(orderItemDO);
}); });
// 更新订单金额 // 创建预订单
Integer totalAmount = orderCommon.calculatedAmount(orderItemDOList); // TODO sin 支付订单 orderSubject 暂时取第一个子订单商品信息
orderMapper.updateById( String orderSubject = orderItemDOList.get(0).getSkuName();
new OrderDO() Date expireTime = DateUtil.addDate(Calendar.MINUTE, PAY_EXPIRE_TIME);
.setId(orderDO.getId()) CommonResult commonResult = payTransactionService.createTransaction(
.setPayAmount(totalAmount) new PayTransactionCreateDTO()
.setCreateIp(orderCreateDTO.getIp())
.setAppId(PayAppId.APP_ID_1024)
.setExpireTime(expireTime)
.setPrice(orderDO.getPayAmount())
.setOrderSubject(orderSubject)
.setOrderMemo(orderDO.getRemark())
.setOrderDescription("")
); );
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息 if (commonResult.isError()) {
//手动开启事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return ServiceExceptionUtil.error(OrderErrorCodeEnum.ORDER_GET_PAY_FAIL.getCode());
}
// TODO: 2019-03-17 Sin 需要发送 创建成果 MQ 消息,业务扩展和统计
return CommonResult.success( return CommonResult.success(
new OrderCreateBO() new OrderCreateBO()
.setId(orderDO.getId()) .setId(orderDO.getId())
......
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
<mapper namespace="cn.iocoder.mall.order.biz.dao.OrderItemMapper"> <mapper namespace="cn.iocoder.mall.order.biz.dao.OrderItemMapper">
<sql id="FIELDS"> <sql id="FIELDS">
id, order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount, id, order_id, order_no, sku_id, sku_name, sku_image, order_logistics_id,
quantity, price, pay_amount,
payment_time, delivery_time, receiver_time, closing_time, payment_time, delivery_time, receiver_time, closing_time,
has_return_exchange, delivery_type, status, create_time, update_time, deleted has_return_exchange, delivery_type, status,
create_time, update_time, deleted
</sql> </sql>
<!-- <!--
...@@ -13,11 +15,14 @@ ...@@ -13,11 +15,14 @@
--> -->
<insert id="insert" parameterType="OrderItemDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id"> <insert id="insert" parameterType="OrderItemDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO `order_item` ( INSERT INTO `order_item` (
order_id, order_no, sku_id, sku_name, sku_image, quantity, price, pay_amount, order_id, order_no, sku_id, sku_name, sku_image, order_logistics_id,
quantity, price, pay_amount,
payment_time, delivery_time, receiver_time, closing_time, payment_time, delivery_time, receiver_time, closing_time,
has_return_exchange, delivery_type, status, create_time, update_time, deleted has_return_exchange, delivery_type, status,
create_time, update_time, deleted
) VALUES ( ) VALUES (
#{orderId}, #{orderNo}, #{skuId}, #{quantity}, #{price}, #{orderId}, #{orderNo}, #{skuId}, #{skuName}, #{skuImage}, #{orderLogisticsId},
#{quantity}, #{price}, #{payAmount},
#{paymentTime}, #{deliveryTime}, #{receiverTime}, #{closingTime}, #{paymentTime}, #{deliveryTime}, #{receiverTime}, #{closingTime},
#{hasReturnExchange}, #{deliveryType}, #{status}, #{hasReturnExchange}, #{deliveryType}, #{status},
#{createTime}, #{updateTime}, #{deleted} #{createTime}, #{updateTime}, #{deleted}
......
...@@ -14,15 +14,15 @@ ...@@ -14,15 +14,15 @@
--> -->
<insert id="insert" parameterType="OrderDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id"> <insert id="insert" parameterType="OrderDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
INSERT INTO `order` ( INSERT INTO `order` (
user_id, order_no, price, payment_time, user_id, order_no, pay_amount, payment_time,
delivery_time, receiver_time, closing_time, delivery_time, receiver_time, closing_time,
has_return_exchange, status, remark, has_return_exchange,
create_time, update_time, `deleted` status, remark, create_time, update_time, `deleted`
) VALUES ( ) VALUES (
#{userId}, #{orderNo}, #{price}, #{paymentTime}, #{userId}, #{orderNo}, #{payAmount}, #{paymentTime},
#{deliveryTime}, #{receiverTime}, #{closingTime}, #{deliveryTime}, #{receiverTime}, #{closingTime},
#{hasReturnExchange}, #{status}, #{remark}, #{hasReturnExchange},
#{createTime}, #{updateTime}, #{deleted} #{status}, #{remark}, #{createTime}, #{updateTime}, #{deleted}
) )
</insert> </insert>
......
...@@ -36,24 +36,24 @@ public class OrderServiceImplTest { ...@@ -36,24 +36,24 @@ public class OrderServiceImplTest {
@Test @Test
public void createOrderTest() { public void createOrderTest() {
//
Integer userId = 1; // Integer userId = 1;
OrderCreateItemDTO orderCreateItemDTO // OrderCreateItemDTO orderCreateItemDTO
= new OrderCreateItemDTO() // = new OrderCreateItemDTO()
.setSkuId(1) // .setSkuId(1)
.setQuantity(1); // .setQuantity(1);
//
CommonResult<OrderCreateBO> result = orderService.createOrder( // CommonResult<OrderCreateBO> result = orderService.createOrder(
userId, // userId,
new OrderCreateDTO() // new OrderCreateDTO()
.setRemark("") // .setRemark("")
.setName("张三") // .setName("张三")
.setMobile("13301926050") // .setMobile("13301926050")
.setAddress("深圳市福田区") // .setAddress("深圳市福田区")
.setAreaNo("1000100") // .setAreaNo("1000100")
.setOrderItems(Arrays.asList(orderCreateItemDTO))); // .setOrderItems(Arrays.asList(orderCreateItemDTO)));
//
OrderDO orderDO = orderMapper.selectById(result.getData().getId()); // OrderDO orderDO = orderMapper.selectById(result.getData().getId());
Assert.assertNotNull("创建的订单不存在!", orderDO); // Assert.assertNotNull("创建的订单不存在!", orderDO);
} }
} }
...@@ -3,13 +3,15 @@ package cn.iocoder.mall.user.api.bo; ...@@ -3,13 +3,15 @@ package cn.iocoder.mall.user.api.bo;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
/** /**
* @author Sin * @author Sin
* @time 2019-04-06 13:28 * @time 2019-04-06 13:28
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class UserAddressBO { public class UserAddressBO implements Serializable {
/** /**
......
...@@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo; ...@@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class UserBO { public class UserBO implements Serializable {
/** /**
* 用户编号 * 用户编号
......
...@@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo; ...@@ -3,11 +3,12 @@ package cn.iocoder.mall.user.api.bo;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.List; import java.util.List;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class UserPageBO { public class UserPageBO implements Serializable {
/** /**
* 用户数组 * 用户数组
......
...@@ -24,6 +24,7 @@ import java.util.List; ...@@ -24,6 +24,7 @@ import java.util.List;
* @time 2019-04-06 13:26 * @time 2019-04-06 13:26
*/ */
@Service @Service
@com.alibaba.dubbo.config.annotation.Service(validation = "true")
public class UserAddressServiceImpl implements UserAddressService { public class UserAddressServiceImpl implements UserAddressService {
@Autowired @Autowired
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论