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; ...@@ -4,12 +4,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.admin.annotation.LoginAdmin; import org.linlinjava.litemall.admin.annotation.LoginAdmin;
import org.linlinjava.litemall.core.util.JacksonUtil; import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.db.domain.LitemallOrder; import org.linlinjava.litemall.db.domain.*;
import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
import org.linlinjava.litemall.db.domain.LitemallProduct;
import org.linlinjava.litemall.db.service.LitemallOrderGoodsService; import org.linlinjava.litemall.db.service.LitemallOrderGoodsService;
import org.linlinjava.litemall.db.service.LitemallOrderService; import org.linlinjava.litemall.db.service.LitemallOrderService;
import org.linlinjava.litemall.db.service.LitemallProductService; 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.OrderHandleOption;
import org.linlinjava.litemall.db.util.OrderUtil; import org.linlinjava.litemall.db.util.OrderUtil;
import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.util.ResponseUtil;
...@@ -41,18 +40,20 @@ public class AdminOrderController { ...@@ -41,18 +40,20 @@ public class AdminOrderController {
private LitemallOrderService orderService; private LitemallOrderService orderService;
@Autowired @Autowired
private LitemallProductService productService; private LitemallProductService productService;
@Autowired
private LitemallUserService userService;
@GetMapping("/list") @GetMapping("/list")
public Object list(@LoginAdmin Integer adminId, 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 = "page", defaultValue = "1") Integer page,
@RequestParam(value = "limit", defaultValue = "10") Integer limit, @RequestParam(value = "limit", defaultValue = "10") Integer limit,
String sort, String order){ String sort, String order){
if(adminId == null){ if(adminId == null){
return ResponseUtil.unlogin(); return ResponseUtil.unlogin();
} }
List<LitemallOrder> orderList = orderService.querySelective(userId, orderSn, page, limit, sort, order); List<LitemallOrder> orderList = orderService.querySelective(userId, orderSn,orderStatusArray, page, limit, sort, order);
int total = orderService.countSelective(userId, orderSn, page, limit, sort, order); int total = orderService.countSelective(userId, orderSn, orderStatusArray, page, limit, sort, order);
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("total", total); data.put("total", total);
...@@ -61,6 +62,23 @@ public class AdminOrderController { ...@@ -61,6 +62,23 @@ public class AdminOrderController {
return ResponseUtil.ok(data); 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. 检测当前订单是否能够退款确认 * 1. 检测当前订单是否能够退款确认
......
...@@ -8,6 +8,14 @@ export function listOrder(query) { ...@@ -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) { export function shipOrder(data) {
return request({ return request({
url: '/order/ship', url: '/order/ship',
......
...@@ -7,6 +7,10 @@ ...@@ -7,6 +7,10 @@
</el-input> </el-input>
<el-input clearable class="filter-item" style="width: 200px;" placeholder="请输入订单编号" v-model="listQuery.orderSn"> <el-input clearable class="filter-item" style="width: 200px;" placeholder="请输入订单编号" v-model="listQuery.orderSn">
</el-input> </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-search" @click="handleFilter">查找</el-button>
<el-button class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload" :loading="downloadLoading">导出</el-button> <el-button class="filter-item" type="primary" icon="el-icon-download" @click="handleDownload" :loading="downloadLoading">导出</el-button>
</div> </div>
...@@ -14,34 +18,36 @@ ...@@ -14,34 +18,36 @@
<!-- 查询结果 --> <!-- 查询结果 -->
<el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit highlight-current-row> <el-table size="small" :data="list" v-loading="listLoading" element-loading-text="正在查询中。。。" border fit highlight-current-row>
<el-table-column type="expand"> <el-table-column align="center" min-width="100" label="订单编号" prop="orderSn">
<template slot-scope="props">
</template>
</el-table-column>
<el-table-column align="center" width="100px" label="订单ID" prop="id" sortable>
</el-table-column> </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>
<el-table-column align="center" min-width="200px" label="订单编号" prop="orderSn"> <el-table-column align="center" label="订单状态" prop="orderStatus">
</el-table-column>
<el-table-column align="center" min-width="100px" label="订单状态" prop="orderStatus">
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag>{{scope.row.orderStatus | orderStatusFilter}}</el-tag> <el-tag>{{scope.row.orderStatus | orderStatusFilter}}</el-tag>
</template> </template>
</el-table-column> </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>
<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>
<el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width"> <el-table-column align="center" label="操作" width="200" class-name="small-padding fixed-width">
<template slot-scope="scope"> <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="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> <el-button type="primary" size="mini" @click="handleRefund(scope.row)" v-if="scope.row.orderStatus==202">退款</el-button>
</template> </template>
...@@ -55,6 +61,65 @@ ...@@ -55,6 +61,65 @@
</el-pagination> </el-pagination>
</div> </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-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;'> <el-form ref="shipForm" :model="shipForm" status-icon label-position="left" label-width="100px" style='width: 400px; margin-left:50px;'>
...@@ -88,21 +153,23 @@ ...@@ -88,21 +153,23 @@
</template> </template>
<style> <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> </style>
<script> <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 { export default {
name: 'Order', name: 'Order',
...@@ -116,9 +183,17 @@ export default { ...@@ -116,9 +183,17 @@ export default {
limit: 20, limit: 20,
id: undefined, id: undefined,
name: undefined, name: undefined,
orderStatusArray: [],
sort: 'add_time', sort: 'add_time',
order: 'desc' order: 'desc'
}, },
statusMap,
orderDialogVisible: false,
orderDetail: {
order: {},
user: {},
orderGoods: []
},
shipForm: { shipForm: {
orderId: undefined, orderId: undefined,
shipChannel: undefined, shipChannel: undefined,
...@@ -135,17 +210,6 @@ export default { ...@@ -135,17 +210,6 @@ export default {
}, },
filters: { filters: {
orderStatusFilter(status) { orderStatusFilter(status) {
const statusMap = {
'101': '未付款',
'102': '已取消',
'103': '已取消',
'201': '已付款',
'202': '申请退款',
'203': '已退款',
'301': '已发货',
'401': '确认收货',
'402': '确认收货'
}
return statusMap[status] return statusMap[status]
} }
}, },
...@@ -177,6 +241,12 @@ export default { ...@@ -177,6 +241,12 @@ export default {
this.listQuery.page = val this.listQuery.page = val
this.getList() this.getList()
}, },
handleDetail(row) {
detailOrder(row.id).then(response => {
this.orderDetail = response.data.data
})
this.orderDialogVisible = true
},
handleShip(row) { handleShip(row) {
this.shipForm.orderId = row.id this.shipForm.orderId = row.id
this.shipForm.shipChannel = row.shipChannel this.shipForm.shipChannel = row.shipChannel
...@@ -232,7 +302,7 @@ export default { ...@@ -232,7 +302,7 @@ export default {
this.downloadLoading = true this.downloadLoading = true
import('@/vendor/Export2Excel').then(excel => { import('@/vendor/Export2Excel').then(excel => {
const tHeader = ['订单ID', '订单编号', '用户ID', '订单状态', '是否删除', '收货人', '收货联系电话', '收货地址'] 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, '订单信息') excel.export_json_to_excel2(tHeader, this.list, filterVal, '订单信息')
this.downloadLoading = false 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 { ...@@ -100,7 +100,7 @@ public class LitemallOrderService {
return orderMapper.updateByPrimaryKeySelective(order); 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 example = new LitemallOrderExample();
LitemallOrderExample.Criteria criteria = example.createCriteria(); LitemallOrderExample.Criteria criteria = example.createCriteria();
...@@ -110,6 +110,9 @@ public class LitemallOrderService { ...@@ -110,6 +110,9 @@ public class LitemallOrderService {
if(!StringUtils.isEmpty(orderSn)){ if(!StringUtils.isEmpty(orderSn)){
criteria.andOrderSnEqualTo(orderSn); criteria.andOrderSnEqualTo(orderSn);
} }
if(orderStatusArray != null && orderStatusArray.size() != 0){
criteria.andOrderStatusIn(orderStatusArray);
}
criteria.andDeletedEqualTo(false); criteria.andDeletedEqualTo(false);
if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) { if (!StringUtils.isEmpty(sort) && !StringUtils.isEmpty(order)) {
...@@ -120,7 +123,7 @@ public class LitemallOrderService { ...@@ -120,7 +123,7 @@ public class LitemallOrderService {
return orderMapper.selectByExample(example); 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 example = new LitemallOrderExample();
LitemallOrderExample.Criteria criteria = example.createCriteria(); LitemallOrderExample.Criteria criteria = example.createCriteria();
......
...@@ -4,10 +4,13 @@ import com.github.pagehelper.PageHelper; ...@@ -4,10 +4,13 @@ import com.github.pagehelper.PageHelper;
import org.linlinjava.litemall.db.dao.LitemallUserMapper; import org.linlinjava.litemall.db.dao.LitemallUserMapper;
import org.linlinjava.litemall.db.domain.LitemallUser; import org.linlinjava.litemall.db.domain.LitemallUser;
import org.linlinjava.litemall.db.domain.LitemallUserExample; import org.linlinjava.litemall.db.domain.LitemallUserExample;
import org.linlinjava.litemall.db.domain.UserVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
public class LitemallUserService { public class LitemallUserService {
...@@ -18,6 +21,14 @@ public class LitemallUserService { ...@@ -18,6 +21,14 @@ public class LitemallUserService {
return userMapper.selectByPrimaryKey(userId); 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) { public LitemallUser queryByOid(String openId) {
LitemallUserExample example = new LitemallUserExample(); LitemallUserExample example = new LitemallUserExample();
example.or().andWeixinOpenidEqualTo(openId).andDeletedEqualTo(false); example.or().andWeixinOpenidEqualTo(openId).andDeletedEqualTo(false);
......
...@@ -11,6 +11,7 @@ import org.linlinjava.litemall.wx.annotation.LoginUser; ...@@ -11,6 +11,7 @@ import org.linlinjava.litemall.wx.annotation.LoginUser;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -154,6 +155,7 @@ public class WxAddressController { ...@@ -154,6 +155,7 @@ public class WxAddressController {
if (address.getId() == null || address.getId().equals(0)) { if (address.getId() == null || address.getId().equals(0)) {
address.setId(null); address.setId(null);
address.setAddTime(LocalDateTime.now());
address.setUserId(userId); address.setUserId(userId);
addressService.add(address); addressService.add(address);
} else { } 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