Unverified Commit e97e32fc authored by Menethil's avatar Menethil Committed by GitHub
Browse files

Merge pull request #3 from linlinjava/master

更新Fork
parents f24cd534 ac54c1f4
......@@ -4,12 +4,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.admin.annotation.LoginAdmin;
import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.db.domain.LitemallOrder;
import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
import org.linlinjava.litemall.db.domain.LitemallProduct;
import org.linlinjava.litemall.db.domain.*;
import org.linlinjava.litemall.db.service.LitemallOrderGoodsService;
import org.linlinjava.litemall.db.service.LitemallOrderService;
import org.linlinjava.litemall.db.service.LitemallProductService;
import org.linlinjava.litemall.db.service.LitemallUserService;
import org.linlinjava.litemall.db.util.OrderHandleOption;
import org.linlinjava.litemall.db.util.OrderUtil;
import org.linlinjava.litemall.core.util.ResponseUtil;
......@@ -41,18 +40,20 @@ public class AdminOrderController {
private LitemallOrderService orderService;
@Autowired
private LitemallProductService productService;
@Autowired
private LitemallUserService userService;
@GetMapping("/list")
public Object list(@LoginAdmin Integer adminId,
Integer userId, String orderSn,
Integer userId, String orderSn, @RequestParam(required = false, value = "orderStatusArray[]")List<Short> orderStatusArray,
@RequestParam(value = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit,
String sort, String order){
if(adminId == null){
return ResponseUtil.unlogin();
}
List<LitemallOrder> orderList = orderService.querySelective(userId, orderSn, page, limit, sort, order);
int total = orderService.countSelective(userId, orderSn, page, limit, sort, order);
List<LitemallOrder> orderList = orderService.querySelective(userId, orderSn,orderStatusArray, page, limit, sort, order);
int total = orderService.countSelective(userId, orderSn, orderStatusArray, page, limit, sort, order);
Map<String, Object> data = new HashMap<>();
data.put("total", total);
......@@ -61,6 +62,23 @@ public class AdminOrderController {
return ResponseUtil.ok(data);
}
@GetMapping("/detail")
public Object detail(@LoginAdmin Integer adminId, Integer id) {
if(adminId == null){
return ResponseUtil.unlogin();
}
LitemallOrder order = orderService.findById(id);
List<LitemallOrderGoods> orderGoods = orderGoodsService.queryByOid(id);
UserVo user = userService.findUserVoById(order.getUserId());
Map<String, Object> data = new HashMap<>();
data.put("order", order);
data.put("orderGoods", orderGoods);
data.put("user", user);
return ResponseUtil.ok(data);
}
/**
* 订单退款确认
* 1. 检测当前订单是否能够退款确认
......
......@@ -8,6 +8,14 @@ export function listOrder(query) {
})
}
export function detailOrder(id) {
return request({
url: '/order/detail',
method: 'get',
params: { id }
})
}
export function shipOrder(data) {
return request({
url: '/order/ship',
......
......@@ -7,6 +7,10 @@
</el-input>
<el-input clearable class="filter-item" style="width: 200px;" placeholder="请输入订单编号" v-model="listQuery.orderSn">
</el-input>
<el-select multiple style="width: 200px" class="filter-item" placeholder="请选择订单状态" v-model="listQuery.orderStatusArray">
<el-option v-for="(key, value) in statusMap" :key="key" :label="key" :value="value">
</el-option>
</el-select>
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">查找</el-button>
<el-button class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload" :loading="downloadLoading">导出</el-button>
</div>
......@@ -14,34 +18,36 @@
<!-- 查询结果 -->
<el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column type="expand">
<template slot-scope="props">
</template>
</el-table-column>
<el-table-column align="center" width="100px" label="订单ID" prop="id" sortable>
<el-table-column align="center" min-width="100" label="订单编号" prop="orderSn">
</el-table-column>
<el-table-column align="center" min-width="100px" label="用户ID" prop="userId">
<el-table-column align="center" label="用户ID" prop="userId">
</el-table-column>
<el-table-column align="center" min-width="200px" label="订单编号" prop="orderSn">
</el-table-column>
<el-table-column align="center" min-width="100px" label="订单状态" prop="orderStatus">
<el-table-column align="center" label="订单状态" prop="orderStatus">
<template slot-scope="scope">
<el-tag>{{scope.row.orderStatus | orderStatusFilter}}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" min-width="100px" label="订单费用" prop="orderPrice">
<el-table-column align="center" label="订单金额" prop="orderPrice">
</el-table-column>
<el-table-column align="center" label="支付金额" prop="actualPrice">
</el-table-column>
<el-table-column align="center" min-width="100px" label="实际费用" prop="actualPrice">
<el-table-column align="center" label="支付时间" prop="payTime">
</el-table-column>
<el-table-column align="center" label="物流单号" prop="shipSn">
</el-table-column>
<el-table-column align="center" label="物流渠道" prop="shipChannel">
</el-table-column>
<el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button type="primary" size="mini" @click="handleDetail(scope.row)">详情</el-button>
<el-button type="primary" size="mini" @click="handleShip(scope.row)" v-if="scope.row.orderStatus==201">发货</el-button>
<el-button type="primary" size="mini" @click="handleRefund(scope.row)" v-if="scope.row.orderStatus==202">退款</el-button>
</template>
......@@ -55,6 +61,65 @@
</el-pagination>
</div>
<!-- 订单详情对话框 -->
<el-dialog title="订单详情" width="800" :visible.sync="orderDialogVisible">
<el-form :data="orderDetail" label-position="left">
<el-form-item label="订单编号">
<span>{{ orderDetail.order.orderSn }}</span>
</el-form-item>
<el-form-item label="订单状态">
<template slot-scope="scope">
<el-tag>{{orderDetail.order.orderStatus | orderStatusFilter}}</el-tag>
</template>
</el-form-item>
<el-form-item label="订单用户">
<span>{{ orderDetail.user.nickname }}</span>
</el-form-item>
<el-form-item label="收货信息">
<span>(收货人){{ orderDetail.order.consignee }}</span>
<span>(手机号){{ orderDetail.order.mobile }}</span>
<span>(地址){{ orderDetail.order.address }}</span>
</el-form-item>
<el-form-item label="商品信息">
<el-table size="small" :data="orderDetail.orderGoods" border fit highlight-current-row>
<el-table-column align="center" label="商品名称" prop="goodsName" />
<el-table-column align="center" label="商品编号" prop="goodsSn" />
<el-table-column align="center" label="货品规格" prop="specifications" />
<el-table-column align="center" label="货品价格" prop="price" />
<el-table-column align="center" label="货品数量" prop="number" />
<el-table-column align="center" label="货品图片" prop="picUrl">
<template slot-scope="scope">
<img :src="scope.row.picUrl" width="40"/>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="费用信息">
<span>
(实际费用){{ orderDetail.order.actualPrice }}元 =
(商品总价){{ orderDetail.order.goodsPrice }}元 +
(快递费用){{ orderDetail.order.freightPrice }}元 -
(优惠减免){{ orderDetail.order.couponPrice }}元 -
(积分减免){{ orderDetail.order.integralPrice }}元
</span>
</el-form-item>
<el-form-item label="支付信息">
<span>(支付渠道)微信支付</span>
<span>(支付时间){{ orderDetail.order.payTime }}</span>
</el-form-item>
<el-form-item label="快递信息">
<span>(快递公司){{ orderDetail.order.shipChannel }}</span>
<span>(快递单号){{ orderDetail.order.shipSn }}</span>
<span>(发货时间){{ orderDetail.order.shipTime }}</span>
</el-form-item>
<el-form-item label="收货信息">
<span>(确认收货时间){{ orderDetail.order.confirmTime }}</span>
</el-form-item>
</el-form>
</el-dialog>
<!-- 发货对话框 -->
<el-dialog title="发货" :visible.sync="shipDialogVisible">
<el-form ref="shipForm" :model="shipForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
......@@ -88,21 +153,23 @@
</template>
<style>
.demo-table-expand {
font-size: 0;
}
.demo-table-expand label {
width: 200px;
color: #99a9bf;
}
.demo-table-expand .el-form-item {
margin-right: 0;
margin-bottom: 0;
}
</style>
<script>
import { listOrder, shipOrder, refundOrder } from '@/api/order'
import { listOrder, shipOrder, refundOrder, detailOrder } from '@/api/order'
const statusMap = {
101: '未付款',
102: '用户取消',
103: '系统取消',
201: '已付款',
202: '申请退款',
203: '已退款',
301: '已发货',
401: '用户收货',
402: '系统收货'
}
export default {
name: 'Order',
......@@ -116,9 +183,17 @@ export default {
limit: 20,
id: undefined,
name: undefined,
orderStatusArray: [],
sort: 'add_time',
order: 'desc'
},
statusMap,
orderDialogVisible: false,
orderDetail: {
order: {},
user: {},
orderGoods: []
},
shipForm: {
orderId: undefined,
shipChannel: undefined,
......@@ -135,17 +210,6 @@ export default {
},
filters: {
orderStatusFilter(status) {
const statusMap = {
'101': '未付款',
'102': '已取消',
'103': '已取消',
'201': '已付款',
'202': '申请退款',
'203': '已退款',
'301': '已发货',
'401': '确认收货',
'402': '确认收货'
}
return statusMap[status]
}
},
......@@ -177,6 +241,12 @@ export default {
this.listQuery.page = val
this.getList()
},
handleDetail(row) {
detailOrder(row.id).then(response => {
this.orderDetail = response.data.data
})
this.orderDialogVisible = true
},
handleShip(row) {
this.shipForm.orderId = row.id
this.shipForm.shipChannel = row.shipChannel
......@@ -232,7 +302,7 @@ export default {
this.downloadLoading = true
import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['订单ID', '订单编号', '用户ID', '订单状态', '是否删除', '收货人', '收货联系电话', '收货地址']
const filterVal = ['id', 'orderSn', 'userId', 'orderStatis', 'isDelete', 'consignee', 'mobile', 'address']
const filterVal = ['id', 'orderSn', 'userId', 'orderStatus', 'isDelete', 'consignee', 'mobile', 'address']
excel.export_json_to_excel2(tHeader, this.list, filterVal, '订单信息')
this.downloadLoading = false
})
......
package org.linlinjava.litemall.db.domain;
public class UserVo {
private String nickname;
private String avatar;
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
......@@ -100,7 +100,7 @@ public class LitemallOrderService {
return orderMapper.updateByPrimaryKeySelective(order);
}
public List<LitemallOrder> querySelective(Integer userId, String orderSn, Integer page, Integer size, String sort, String order) {
public List<LitemallOrder> querySelective(Integer userId, String orderSn, List<Short> orderStatusArray, Integer page, Integer size, String sort, String order) {
LitemallOrderExample example = new LitemallOrderExample();
LitemallOrderExample.Criteria criteria = example.createCriteria();
......@@ -110,6 +110,9 @@ public class LitemallOrderService {
if(!StringUtils.isEmpty(orderSn)){
criteria.andOrderSnEqualTo(orderSn);
}
if(orderStatusArray != null && orderStatusArray.size() != 0){
criteria.andOrderStatusIn(orderStatusArray);
}
criteria.andDeletedEqualTo(false);
if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
......@@ -120,7 +123,7 @@ public class LitemallOrderService {
return orderMapper.selectByExample(example);
}
public int countSelective(Integer userId, String orderSn, Integer page, Integer size, String sort, String order) {
public int countSelective(Integer userId, String orderSn, List<Short> orderStatusArray, Integer page, Integer size, String sort, String order) {
LitemallOrderExample example = new LitemallOrderExample();
LitemallOrderExample.Criteria criteria = example.createCriteria();
......
......@@ -4,10 +4,13 @@ import com.github.pagehelper.PageHelper;
import org.linlinjava.litemall.db.dao.LitemallUserMapper;
import org.linlinjava.litemall.db.domain.LitemallUser;
import org.linlinjava.litemall.db.domain.LitemallUserExample;
import org.linlinjava.litemall.db.domain.UserVo;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class LitemallUserService {
......@@ -18,6 +21,14 @@ public class LitemallUserService {
return userMapper.selectByPrimaryKey(userId);
}
public UserVo findUserVoById(Integer userId) {
LitemallUser user = findById(userId);
UserVo userVo = new UserVo();
userVo.setNickname(user.getNickname());
userVo.setAvatar(user.getAvatar());
return userVo;
}
public LitemallUser queryByOid(String openId) {
LitemallUserExample example = new LitemallUserExample();
example.or().andWeixinOpenidEqualTo(openId).andDeletedEqualTo(false);
......
......@@ -11,6 +11,7 @@ import org.linlinjava.litemall.wx.annotation.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
......@@ -154,6 +155,7 @@ public class WxAddressController {
if (address.getId() == null || address.getId().equals(0)) {
address.setId(null);
address.setAddTime(LocalDateTime.now());
address.setUserId(userId);
addressService.add(address);
} else {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment