Skip to content

Commit 4611d82

Browse files
committed
chore[litemall-wx, litemall-wx-api]: 小商城优化
1 parent 11a95ac commit 4611d82

File tree

9 files changed

+102
-46
lines changed

9 files changed

+102
-46
lines changed

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/service/WxOrderService.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,8 @@
6262
* 当101用户未付款时,此时用户可以进行的操作是取消订单,或者付款操作
6363
* 当201支付完成而商家未发货时,此时用户可以取消订单并申请退款
6464
* 当301商家已发货时,此时用户可以有确认收货的操作
65-
* 当401用户确认收货以后,此时用户可以进行的操作是删除订单,评价商品,或者再次购买
66-
* 当402系统自动确认收货以后,此时用户可以删除订单,评价商品,或者再次购买
67-
*
68-
* <p>
69-
* 注意:目前不支持订单退货和售后服务
65+
* 当401用户确认收货以后,此时用户可以进行的操作是删除订单,评价商品,申请售后,或者再次购买
66+
* 当402系统自动确认收货以后,此时用户可以删除订单,评价商品,申请售后,或者再次购买
7067
*/
7168
@Service
7269
public class WxOrderService {
@@ -108,6 +105,8 @@ public class WxOrderService {
108105
private CouponVerifyService couponVerifyService;
109106
@Autowired
110107
private TaskService taskService;
108+
@Autowired
109+
private LitemallAftersaleService aftersaleService;
111110

112111
/**
113112
* 订单列表
@@ -139,6 +138,7 @@ public Object list(Integer userId, Integer showType, Integer page, Integer limit
139138
orderVo.put("actualPrice", o.getActualPrice());
140139
orderVo.put("orderStatusText", OrderUtil.orderStatusText(o));
141140
orderVo.put("handleOption", OrderUtil.build(o));
141+
orderVo.put("aftersaleStatus", o.getAftersaleStatus());
142142

143143
LitemallGroupon groupon = grouponService.queryByOrderId(o.getId());
144144
if (groupon != null) {
@@ -180,7 +180,7 @@ public Object detail(Integer userId, Integer orderId) {
180180
}
181181

182182
// 订单信息
183-
LitemallOrder order = orderService.findById(orderId);
183+
LitemallOrder order = orderService.findById(userId, orderId);
184184
if (null == order) {
185185
return ResponseUtil.fail(ORDER_UNKNOWN, "订单不存在");
186186
}
@@ -201,6 +201,7 @@ public Object detail(Integer userId, Integer orderId) {
201201
orderVo.put("actualPrice", order.getActualPrice());
202202
orderVo.put("orderStatusText", OrderUtil.orderStatusText(order));
203203
orderVo.put("handleOption", OrderUtil.build(order));
204+
orderVo.put("aftersaleStatus", order.getAftersaleStatus());
204205
orderVo.put("expCode", order.getShipChannel());
205206
orderVo.put("expName", expressService.getVendorName(order.getShipChannel()));
206207
orderVo.put("expNo", order.getShipSn());
@@ -496,7 +497,7 @@ public Object cancel(Integer userId, String body) {
496497
return ResponseUtil.badArgument();
497498
}
498499

499-
LitemallOrder order = orderService.findById(orderId);
500+
LitemallOrder order = orderService.findById(userId, orderId);
500501
if (order == null) {
501502
return ResponseUtil.badArgumentValue();
502503
}
@@ -553,7 +554,7 @@ public Object prepay(Integer userId, String body, HttpServletRequest request) {
553554
return ResponseUtil.badArgument();
554555
}
555556

556-
LitemallOrder order = orderService.findById(orderId);
557+
LitemallOrder order = orderService.findById(userId, orderId);
557558
if (order == null) {
558559
return ResponseUtil.badArgumentValue();
559560
}
@@ -615,7 +616,7 @@ public Object h5pay(Integer userId, String body, HttpServletRequest request) {
615616
return ResponseUtil.badArgument();
616617
}
617618

618-
LitemallOrder order = orderService.findById(orderId);
619+
LitemallOrder order = orderService.findById(userId, orderId);
619620
if (order == null) {
620621
return ResponseUtil.badArgumentValue();
621622
}
@@ -789,7 +790,7 @@ public Object refund(Integer userId, String body) {
789790
return ResponseUtil.badArgument();
790791
}
791792

792-
LitemallOrder order = orderService.findById(orderId);
793+
LitemallOrder order = orderService.findById(userId, orderId);
793794
if (order == null) {
794795
return ResponseUtil.badArgument();
795796
}
@@ -834,7 +835,7 @@ public Object confirm(Integer userId, String body) {
834835
return ResponseUtil.badArgument();
835836
}
836837

837-
LitemallOrder order = orderService.findById(orderId);
838+
LitemallOrder order = orderService.findById(userId, orderId);
838839
if (order == null) {
839840
return ResponseUtil.badArgument();
840841
}
@@ -877,7 +878,7 @@ public Object delete(Integer userId, String body) {
877878
return ResponseUtil.badArgument();
878879
}
879880

880-
LitemallOrder order = orderService.findById(orderId);
881+
LitemallOrder order = orderService.findById(userId, orderId);
881882
if (order == null) {
882883
return ResponseUtil.badArgument();
883884
}
@@ -893,6 +894,8 @@ public Object delete(Integer userId, String body) {
893894
// 订单order_status没有字段用于标识删除
894895
// 而是存在专门的delete字段表示是否删除
895896
orderService.deleteById(orderId);
897+
// 售后也同时删除
898+
aftersaleService.deleteByOrderId(userId, orderId);
896899

897900
return ResponseUtil.ok();
898901
}
@@ -946,7 +949,7 @@ public Object comment(Integer userId, String body) {
946949
return ResponseUtil.badArgumentValue();
947950
}
948951
Integer orderId = orderGoods.getOrderId();
949-
LitemallOrder order = orderService.findById(orderId);
952+
LitemallOrder order = orderService.findById(userId, orderId);
950953
if (order == null) {
951954
return ResponseUtil.badArgumentValue();
952955
}

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/util/WxResponseCode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ public class WxResponseCode {
3838

3939
public static final int AFTERSALE_UNALLOWED = 750;
4040
public static final int AFTERSALE_INVALID_AMOUNT = 751;
41-
public static final int AFTERSALE_IS_REQUESTED = 752;
41+
public static final int AFTERSALE_INVALID_STATUS = 752;
4242

4343
}

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAddressController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public Object delete(@LoginUser Integer userId, @RequestBody LitemallAddress add
168168
return ResponseUtil.badArgument();
169169
}
170170

171-
addressService.delete(id);
171+
addressService.delete(userId, id);
172172
return ResponseUtil.ok();
173173
}
174174
}

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxAftersaleController.java

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
* 售后服务
2828
*
2929
* 目前只支持订单整体售后,不支持订单商品单个售后
30+
*
31+
* 一个订单只能有一个售后记录
3032
*/
3133
@RestController
3234
@RequestMapping("/wx/aftersale")
@@ -82,25 +84,18 @@ public Object list(@LoginUser Integer userId,
8284
/**
8385
* 售后详情
8486
*
85-
* @param id 售后ID
87+
* @param orderId 订单ID
8688
* @return 售后详情
8789
*/
8890
@GetMapping("detail")
89-
public Object detail(@LoginUser Integer userId, @NotNull Integer id) {
91+
public Object detail(@LoginUser Integer userId, @NotNull Integer orderId) {
9092
if (userId == null) {
9193
return ResponseUtil.unlogin();
9294
}
9395

94-
LitemallAftersale aftersale = aftersaleService.findById(id);
95-
if(id == null){
96-
return ResponseUtil.badArgumentValue();
97-
}
98-
if(!userId.equals(aftersale.getUserId())){
99-
return ResponseUtil.badArgumentValue();
100-
}
101-
102-
LitemallOrder order = orderService.findById(aftersale.getOrderId());
103-
List<LitemallOrderGoods> orderGoodsList = orderGoodsService.queryByOid(order.getId());
96+
LitemallOrder order = orderService.findById(userId, orderId);
97+
List<LitemallOrderGoods> orderGoodsList = orderGoodsService.queryByOid(orderId);
98+
LitemallAftersale aftersale = aftersaleService.findByOrderId(userId, orderId);
10499

105100
Map<String, Object> data = new HashMap<String, Object>();
106101
data.put("aftersale", aftersale);
@@ -130,31 +125,84 @@ public Object submit(@LoginUser Integer userId, @RequestBody LitemallAftersale a
130125
if(orderId == null){
131126
return ResponseUtil.badArgument();
132127
}
133-
LitemallOrder order = orderService.findById(orderId);
128+
LitemallOrder order = orderService.findById(userId, orderId);
134129
if(order == null){
135130
return ResponseUtil.badArgumentValue();
136131
}
137132
if(!order.getUserId().equals(userId)){
138133
return ResponseUtil.badArgumentValue();
139134
}
140135

136+
// 订单必须完成才能进入售后流程。
141137
if(!OrderUtil.isConfirmStatus(order) && !OrderUtil.isAutoConfirmStatus(order)){
142-
return ResponseUtil.fail(WxResponseCode.AFTERSALE_UNALLOWED, "不支持售后");
138+
return ResponseUtil.fail(WxResponseCode.AFTERSALE_UNALLOWED, "不能申请售后");
143139
}
144140
BigDecimal amount = order.getActualPrice().subtract(order.getFreightPrice());
145141
if(aftersale.getAmount().compareTo(amount) > 0){
146142
return ResponseUtil.fail(WxResponseCode.AFTERSALE_INVALID_AMOUNT, "退款金额不正确");
147143
}
148-
149-
if(aftersaleService.countByOrderIdWithoutReject(userId, orderId) > 0){
150-
return ResponseUtil.fail(WxResponseCode.AFTERSALE_UNALLOWED, "已申请售后");
144+
Short afterStatus = order.getAftersaleStatus();
145+
if(afterStatus.equals(AftersaleConstant.STATUS_RECEPT) || afterStatus.equals(AftersaleConstant.STATUS_REFUND)){
146+
return ResponseUtil.fail(WxResponseCode.AFTERSALE_INVALID_AMOUNT, "已申请售后");
151147
}
152148

149+
// 如果有旧的售后记录则删除(例如用户已取消,管理员拒绝)
150+
aftersaleService.deleteByOrderId(userId, orderId);
151+
153152
aftersale.setStatus(AftersaleConstant.STATUS_REQUEST);
154153
aftersale.setAftersaleSn(aftersaleService.generateAftersaleSn(userId));
155154
aftersale.setUserId(userId);
156155
aftersaleService.add(aftersale);
157156

157+
// 订单的aftersale_status和售后记录的status是一致的。
158+
orderService.updateAftersaleStatus(orderId, AftersaleConstant.STATUS_REQUEST);
159+
return ResponseUtil.ok();
160+
}
161+
162+
/**
163+
* 取消售后
164+
*
165+
* 如果管理员还没有审核,用户可以取消自己的售后申请
166+
*
167+
* @param userId 用户ID
168+
* @param aftersale 用户售后信息
169+
* @return 操作结果
170+
*/
171+
@PostMapping("cancel")
172+
public Object cancel(@LoginUser Integer userId, @RequestBody LitemallAftersale aftersale) {
173+
if (userId == null) {
174+
return ResponseUtil.unlogin();
175+
}
176+
Integer id = aftersale.getId();
177+
if(id == null){
178+
return ResponseUtil.badArgument();
179+
}
180+
LitemallAftersale aftersaleOne = aftersaleService.findById(id);
181+
if(aftersaleOne == null){
182+
return ResponseUtil.badArgument();
183+
}
184+
185+
Integer orderId = aftersaleOne.getOrderId();
186+
LitemallOrder order = orderService.findById(userId, orderId);
187+
if(!order.getUserId().equals(userId)){
188+
return ResponseUtil.badArgumentValue();
189+
}
190+
191+
// 订单必须完成才能进入售后流程。
192+
if(!OrderUtil.isConfirmStatus(order) && !OrderUtil.isAutoConfirmStatus(order)){
193+
return ResponseUtil.fail(WxResponseCode.AFTERSALE_UNALLOWED, "不支持售后");
194+
}
195+
Short afterStatus = order.getAftersaleStatus();
196+
if(!afterStatus.equals(AftersaleConstant.STATUS_REQUEST)){
197+
return ResponseUtil.fail(WxResponseCode.AFTERSALE_INVALID_STATUS, "不能取消售后");
198+
}
199+
200+
aftersale.setStatus(AftersaleConstant.STATUS_CANCEL);
201+
aftersale.setUserId(userId);
202+
aftersaleService.updateById(aftersale);
203+
204+
// 订单的aftersale_status和售后记录的status是一致的。
205+
orderService.updateAftersaleStatus(orderId, AftersaleConstant.STATUS_CANCEL);
158206
return ResponseUtil.ok();
159207
}
160208

litemall-wx-api/src/main/java/org/linlinjava/litemall/wx/web/WxGrouponController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public Object detail(@LoginUser Integer userId, @NotNull Integer grouponId) {
9898
}
9999

100100
// 订单信息
101-
LitemallOrder order = orderService.findById(groupon.getOrderId());
101+
LitemallOrder order = orderService.findById(userId, groupon.getOrderId());
102102
if (null == order) {
103103
return ResponseUtil.fail(ORDER_UNKNOWN, "订单不存在");
104104
}
@@ -229,7 +229,7 @@ public Object my(@LoginUser Integer userId, @RequestParam(defaultValue = "0") In
229229
LitemallGrouponRules rules;
230230
LitemallUser creator;
231231
for (LitemallGroupon groupon : myGroupons) {
232-
order = orderService.findById(groupon.getOrderId());
232+
order = orderService.findById(userId, groupon.getOrderId());
233233
rules = rulesService.findById(groupon.getRulesId());
234234
creator = userService.findById(groupon.getCreatorUserId());
235235

litemall-wx/pages/ucenter/aftersaleDetail/aftersaleDetail.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ var api = require('../../../config/api.js');
33

44
Page({
55
data: {
6-
aftersaleId: 0,
6+
orderId: 0,
77
order: {},
88
orderGoods: [],
99
aftersale: {},
10-
statusColumns: ['已申请', '处理中', '退款成功', '已拒绝'],
10+
statusColumns: ['未申请', '已申请,待审核', '审核通过,待退款', '退款成功', '审核不通过,已拒绝'],
1111
typeColumns: ['未收货退款', '不退货退款', '退货退款'],
1212
fileList: []
1313
},
1414
onLoad: function (options) {
1515
// 页面初始化 options为页面跳转所带来的参数
1616
this.setData({
17-
aftersaleId: options.id
17+
orderId: options.id
1818
});
1919
this.getAftersaleDetail();
2020
},
@@ -29,7 +29,7 @@ Page({
2929

3030
let that = this;
3131
util.request(api.AftersaleDetail, {
32-
id: that.data.aftersaleId
32+
orderId: that.data.orderId
3333
}).then(function (res) {
3434
if (res.errno === 0) {
3535
let _fileList = []

litemall-wx/pages/ucenter/aftersaleList/aftersaleList.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ var api = require('../../../config/api.js');
44
Page({
55
data: {
66
aftersaleList: [],
7-
showType: 0,
7+
showType: 1,
88
page: 1,
99
limit: 10,
1010
totalPages: 1

litemall-wx/pages/ucenter/aftersaleList/aftersaleList.wxml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
<view class="container">
22
<view class="aftersales-switch">
3-
<view class="item {{ showType == 0 ? 'active' : ''}}" bindtap="switchTab" data-index='0'>
3+
<view class="item {{ showType == 1 ? 'active' : ''}}" bindtap="switchTab" data-index='1'>
44
<view class="txt">申请中</view>
55
</view>
6-
<view class="item {{ showType == 1 ? 'active' : ''}}" bindtap="switchTab" data-index='1'>
6+
<view class="item {{ showType == 2 ? 'active' : ''}}" bindtap="switchTab" data-index='2'>
77
<view class="txt">处理中</view>
88
</view>
9-
<view class="item {{ showType == 2 ? 'active' : ''}}" bindtap="switchTab" data-index='2'>
9+
<view class="item {{ showType == 3 ? 'active' : ''}}" bindtap="switchTab" data-index='3'>
1010
<view class="txt">已完成</view>
1111
</view>
12-
<view class="item {{ showType == 3 ? 'active' : ''}}" bindtap="switchTab" data-index='3'>
12+
<view class="item {{ showType == 4 ? 'active' : ''}}" bindtap="switchTab" data-index='4'>
1313
<view class="txt">已拒绝</view>
1414
</view>
1515
</view>
@@ -20,9 +20,9 @@
2020
</view>
2121

2222
<view class="aftersales">
23-
<navigator url="../aftersaleDetail/aftersaleDetail?id={{item.aftersale.id}}" class="aftersale" open-type="redirect" wx:for="{{aftersaleList}}" wx:key="id">
23+
<navigator url="../aftersaleDetail/aftersaleDetail?id={{item.aftersale.orderId}}" class="aftersale" open-type="redirect" wx:for="{{aftersaleList}}" wx:key="id">
2424
<view class="h">
25-
<view class="l">服务编号:{{item.aftersale.aftersaleSn}}</view>
25+
<view class="l">售后编号:{{item.aftersale.aftersaleSn}}</view>
2626
</view>
2727
<view class="goods" wx:for="{{item.goodsList}}" wx:key="id" wx:for-item="gitem">
2828
<view class="img">

litemall-wx/pages/ucenter/orderDetail/orderDetail.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,12 @@ Page({
192192
},
193193
// “申请售后”点击效果
194194
aftersaleOrder: function () {
195-
util.redirect('/pages/ucenter/aftersale/aftersale?id=' + this.data.orderId );
195+
if(this.data.orderInfo.aftersaleStatus === 0){
196+
util.redirect('/pages/ucenter/aftersale/aftersale?id=' + this.data.orderId );
197+
}
198+
else{
199+
util.redirect('/pages/ucenter/aftersaleDetail/aftersaleDetail?id=' + this.data.orderId);
200+
}
196201
},
197202
onReady: function() {
198203
// 页面渲染完成

0 commit comments

Comments
 (0)