-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApiController.java
More file actions
229 lines (206 loc) · 7.76 KB
/
ApiController.java
File metadata and controls
229 lines (206 loc) · 7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
package org.imooc.controller.api;
import java.util.List;
import javax.annotation.Resource;
import org.imooc.bean.Page;
import org.imooc.constant.ApiCodeEnum;
import org.imooc.dto.AdDto;
import org.imooc.dto.ApiCodeDto;
import org.imooc.dto.BusinessDto;
import org.imooc.dto.BusinessListDto;
import org.imooc.dto.CommentForSubmitDto;
import org.imooc.dto.CommentListDto;
import org.imooc.dto.OrderForBuyDto;
import org.imooc.dto.OrdersDto;
import org.imooc.service.AdService;
import org.imooc.service.BusinessService;
import org.imooc.service.CommentService;
import org.imooc.service.MemberService;
import org.imooc.service.OrdersService;
import org.imooc.util.CommonUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ApiController {
@Autowired
private AdService adService;
@Resource
private BusinessService businessService;
@Resource
private MemberService memberService;
@Resource
private OrdersService ordersService;
@Resource
private CommentService commentService;
@Value("${ad.number}")
private int adNumber;
@Value("${businessHome.number}")
private int businessHomeNumber;
@Value("${businessSearch.number}")
private int businessSearchNumber;
/**
* 首页 —— 广告(超值特惠)
*/
@RequestMapping(value = "/homead", method = RequestMethod.GET)
public List<AdDto> homead() {
AdDto adDto = new AdDto();
adDto.getPage().setPageNumber(adNumber);
return adService.searchByPage(adDto);
}
/**
* 首页 —— 推荐列表(猜你喜欢)
*/
@RequestMapping(value = "/homelist/{city}/{page.currentPage}", method = RequestMethod.GET)
public BusinessListDto homelist(BusinessDto businessDto) {
businessDto.getPage().setPageNumber(businessHomeNumber);
return businessService.searchByPageForApi(businessDto);
}
/**
* 搜索结果页 - 搜索结果 - 三个参数
*/
@RequestMapping(value = "/search/{page.currentPage}/{city}/{category}/{keyword}", method = RequestMethod.GET)
public BusinessListDto searchByKeyword(BusinessDto businessDto) {
businessDto.getPage().setPageNumber(businessSearchNumber);
return businessService.searchByPageForApi(businessDto);
}
/**
* 搜索结果页 - 搜索结果 - 两个参数
*/
@RequestMapping(value = "/search/{page.currentPage}/{city}/{category}", method = RequestMethod.GET)
public BusinessListDto search(BusinessDto businessDto) {
businessDto.getPage().setPageNumber(businessSearchNumber);
return businessService.searchByPageForApi(businessDto);
}
/**
* 详情页 - 商户信息
*/
@RequestMapping(value = "/detail/info/{id}", method = RequestMethod.GET)
public BusinessDto detail(@PathVariable("id") Long id) {
return businessService.getById(id);
}
/**
* 详情页 - 用户评论
*/
@RequestMapping(value = "/detail/comment/{currentPage}/{businessId}", method = RequestMethod.GET)
public CommentListDto detail(@PathVariable("businessId") Long businessId,Page page) {
return commentService.getListByBusinessId(businessId,page);
}
/**
* 订单列表
*/
@RequestMapping(value = "/orderlist/{username}", method = RequestMethod.GET)
public List<OrdersDto> orderlist(@PathVariable("username") Long username) {
// 根据手机号取出会员ID
Long memberId = memberService.getIdByPhone(username);
return ordersService.getListByMemberId(memberId);
}
/**
* 提交评论
*/
@RequestMapping(value = "/submitComment", method = RequestMethod.POST)
public ApiCodeDto submitComment(CommentForSubmitDto dto) {
ApiCodeDto result;
// TODO 需要完成的步骤:
// 1、校验登录信息:token、手机号
Long phone = memberService.getPhone(dto.getToken());
if (phone != null && phone.equals(dto.getUsername())) {
// 2、根据手机号取出会员ID
Long memberId = memberService.getIdByPhone(phone);
// 3、根据提交上来的订单ID获取对应的会员ID,校验与当前登录的会员是否一致
OrdersDto ordersDto = ordersService.getById(dto.getId());
if(ordersDto.getMemberId().equals(memberId)) {
// 4、保存评论
commentService.add(dto);
result = new ApiCodeDto(ApiCodeEnum.SUCCESS);
// TODO
// 5、还有一件重要的事未做
} else {
result = new ApiCodeDto(ApiCodeEnum.NO_AUTH);
}
} else {
result = new ApiCodeDto(ApiCodeEnum.NOT_LOGGED);
}
return result;
}
/**
* 根据手机号下发短信验证码
*/
@RequestMapping(value = "/sms", method = RequestMethod.POST)
public ApiCodeDto sms(@RequestParam("username") Long username) {
ApiCodeDto dto;
// 1、验证用户手机号是否存在(是否注册过)
if (memberService.exists(username)) {
// 2、生成6位随机数
String code = String.valueOf(CommonUtil.random(6));
// 3、保存手机号与对应的md5(6位随机数)(一般保存1分钟,1分钟后失效)
if (memberService.saveCode(username, code)) {
// 4、调用短信通道,将明文6位随机数发送到对应的手机上。
if (memberService.sendCode(username, code)) {
dto = new ApiCodeDto(ApiCodeEnum.SUCCESS.getErrno(), code);
} else {
dto = new ApiCodeDto(ApiCodeEnum.SEND_FAIL);
}
} else {
dto = new ApiCodeDto(ApiCodeEnum.REPEAT_REQUEST);
}
} else {
dto = new ApiCodeDto(ApiCodeEnum.USER_NOT_EXISTS);
}
return dto;
}
/**
* 会员登录
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ApiCodeDto login(@RequestParam("username") Long username, @RequestParam("code") String code) {
ApiCodeDto dto;
// 1、用手机号取出保存的md5(6位随机数),能取到,并且与提交上来的code值相同为校验通过
String saveCode = memberService.getCode(username);
if (saveCode != null) {
if (saveCode.equals(code)) {
// 2、如果校验通过,生成一个32位的token
String token = CommonUtil.getUUID();
// 3、保存手机号与对应的token(一般这个手机号中途没有与服务端交互的情况下,保持10分钟)
memberService.saveToken(token, username);
// 4、将这个token返回给前端
dto = new ApiCodeDto(ApiCodeEnum.SUCCESS);
dto.setToken(token);
} else {
dto = new ApiCodeDto(ApiCodeEnum.CODE_ERROR);
}
} else {
dto = new ApiCodeDto(ApiCodeEnum.CODE_INVALID);
}
return dto;
}
/**
* 买单
*/
@RequestMapping(value = "/order", method = RequestMethod.POST)
public ApiCodeDto order(OrderForBuyDto orderForBuyDto) {
ApiCodeDto dto;
// 1、校验token是否有效(缓存中是否存在这样一个token,并且对应存放的会员信息(这里指的是手机号)与提交上来的信息一致)
Long phone = memberService.getPhone(orderForBuyDto.getToken());
if (phone != null && phone.equals(orderForBuyDto.getUsername())) {
// 2、根据手机号获取会员主键
Long memberId = memberService.getIdByPhone(phone);
// 3、保存订单
OrdersDto ordersDto = new OrdersDto();
ordersDto.setNum(orderForBuyDto.getNum());
ordersDto.setPrice(orderForBuyDto.getPrice());
ordersDto.setBusinessId(orderForBuyDto.getId());
ordersDto.setMemberId(memberId);
ordersService.add(ordersDto);
dto = new ApiCodeDto(ApiCodeEnum.SUCCESS);
// 4、TODO 还有一件重要的事未做
} else {
dto = new ApiCodeDto(ApiCodeEnum.NOT_LOGGED);
}
return dto;
}
}