"vscode:/vscode.git/clone" did not exist on "64a3ff7b26b15470f5473d04dcd0c7bbb23b6e39"
Commit 12786648 authored by Hong's avatar Hong
Browse files

优化地址,商品详情 的查询速度

parent b2295166
...@@ -12,6 +12,7 @@ import java.util.List; ...@@ -12,6 +12,7 @@ import java.util.List;
@Service @Service
public class LitemallRegionService { public class LitemallRegionService {
@Resource @Resource
private LitemallRegionMapper regionMapper; private LitemallRegionMapper regionMapper;
......
...@@ -13,6 +13,7 @@ import java.util.List; ...@@ -13,6 +13,7 @@ import java.util.List;
**/ **/
@Component @Component
public class GetRegionService { public class GetRegionService {
@Autowired @Autowired
private LitemallRegionService regionService; private LitemallRegionService regionService;
......
...@@ -28,206 +28,208 @@ import java.util.concurrent.*; ...@@ -28,206 +28,208 @@ import java.util.concurrent.*;
@RestController @RestController
@RequestMapping("/wx/address") @RequestMapping("/wx/address")
@Validated @Validated
public class WxAddressController extends GetRegionService{ public class WxAddressController extends GetRegionService {
private final Log logger = LogFactory.getLog(WxAddressController.class); private final Log logger = LogFactory.getLog(WxAddressController.class);
@Autowired @Autowired
private LitemallAddressService addressService; private LitemallAddressService addressService;
@Autowired
private LitemallRegionService regionService; @Autowired
private LitemallRegionService regionService;
private final static ArrayBlockingQueue<Runnable> WORK_QUEUE = new ArrayBlockingQueue<>(6);
private final static ArrayBlockingQueue<Runnable> WORK_QUEUE = new ArrayBlockingQueue<>(6);
private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();
private final static RejectedExecutionHandler HANDLER = new ThreadPoolExecutor.CallerRunsPolicy();
private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(3, 6, 1000, TimeUnit.MILLISECONDS, WORK_QUEUE, HANDLER);
private static ThreadPoolExecutor executorService = new ThreadPoolExecutor(3, 6, 1000, TimeUnit.MILLISECONDS, WORK_QUEUE, HANDLER);
/**
* 用户收货地址列表 /**
* * 用户收货地址列表
* @param userId 用户ID *
* @return 收货地址列表 * @param userId 用户ID
*/ * @return 收货地址列表
@GetMapping("list") */
public Object list(@LoginUser Integer userId) { @GetMapping("list")
if (userId == null) { public Object list(@LoginUser Integer userId) {
return ResponseUtil.unlogin(); if (userId == null) {
} return ResponseUtil.unlogin();
List<LitemallAddress> addressList = addressService.queryByUid(userId); }
List<Map<String, Object>> addressVoList = new ArrayList<>(addressList.size()); List<LitemallAddress> addressList = addressService.queryByUid(userId);
List<LitemallRegion> regionList = getLitemallRegions(); List<Map<String, Object>> addressVoList = new ArrayList<>(addressList.size());
for (LitemallAddress address : addressList) { List<LitemallRegion> regionList = getLitemallRegions();
Map<String, Object> addressVo = new HashMap<>(); for (LitemallAddress address : addressList) {
addressVo.put("id", address.getId()); Map<String, Object> addressVo = new HashMap<>();
addressVo.put("name", address.getName()); addressVo.put("id", address.getId());
addressVo.put("mobile", address.getMobile()); addressVo.put("name", address.getName());
addressVo.put("isDefault", address.getIsDefault()); addressVo.put("mobile", address.getMobile());
Callable<String> provinceCallable = ()->regionList.stream().filter(region->region.getId().equals(address.getProvinceId())).findAny().orElse(null).getName(); addressVo.put("isDefault", address.getIsDefault());
Callable<String> cityCallable = ()->regionList.stream().filter(region->region.getId().equals(address.getCityId())).findAny().orElse(null).getName(); Callable<String> provinceCallable = () -> regionList.stream().filter(region -> region.getId().equals(address.getProvinceId())).findAny().orElse(null).getName();
Callable<String> areaCallable = ()->regionList.stream().filter(region->region.getId().equals(address.getAreaId())).findAny().orElse(null).getName(); Callable<String> cityCallable = () -> regionList.stream().filter(region -> region.getId().equals(address.getCityId())).findAny().orElse(null).getName();
FutureTask<String> provinceNameCallableTask = new FutureTask<>(provinceCallable); Callable<String> areaCallable = () -> regionList.stream().filter(region -> region.getId().equals(address.getAreaId())).findAny().orElse(null).getName();
FutureTask<String> cityNameCallableTask = new FutureTask<>(cityCallable); FutureTask<String> provinceNameCallableTask = new FutureTask<>(provinceCallable);
FutureTask<String> areaNameCallableTask = new FutureTask<>(areaCallable); FutureTask<String> cityNameCallableTask = new FutureTask<>(cityCallable);
executorService.submit(provinceNameCallableTask); FutureTask<String> areaNameCallableTask = new FutureTask<>(areaCallable);
executorService.submit(cityNameCallableTask); executorService.submit(provinceNameCallableTask);
executorService.submit(areaNameCallableTask); executorService.submit(cityNameCallableTask);
String detailedAddress=""; executorService.submit(areaNameCallableTask);
try { String detailedAddress = "";
String province=provinceNameCallableTask.get(); try {
String city =cityNameCallableTask.get(); String province = provinceNameCallableTask.get();
String area =areaNameCallableTask.get(); String city = cityNameCallableTask.get();
String addr = address.getAddress(); String area = areaNameCallableTask.get();
detailedAddress = province + city + area + " " + addr; String addr = address.getAddress();
}catch (Exception e){ detailedAddress = province + city + area + " " + addr;
e.printStackTrace(); }
} catch (Exception e) {
addressVo.put("detailedAddress", detailedAddress); e.printStackTrace();
}
addressVoList.add(addressVo); addressVo.put("detailedAddress", detailedAddress);
}
return ResponseUtil.ok(addressVoList); addressVoList.add(addressVo);
} }
return ResponseUtil.ok(addressVoList);
/** }
* 收货地址详情
* /**
* @param userId 用户ID * 收货地址详情
* @param id 收货地址ID *
* @return 收货地址详情 * @param userId 用户ID
*/ * @param id 收货地址ID
@GetMapping("detail") * @return 收货地址详情
public Object detail(@LoginUser Integer userId, @NotNull Integer id) { */
if (userId == null) { @GetMapping("detail")
return ResponseUtil.unlogin(); public Object detail(@LoginUser Integer userId, @NotNull Integer id) {
} if (userId == null) {
return ResponseUtil.unlogin();
LitemallAddress address = addressService.findById(id); }
if (address == null) {
return ResponseUtil.badArgumentValue(); LitemallAddress address = addressService.findById(id);
} if (address == null) {
return ResponseUtil.badArgumentValue();
Map<Object, Object> data = new HashMap<Object, Object>(); }
data.put("id", address.getId());
data.put("name", address.getName()); Map<Object, Object> data = new HashMap<Object, Object>();
data.put("provinceId", address.getProvinceId()); data.put("id", address.getId());
data.put("cityId", address.getCityId()); data.put("name", address.getName());
data.put("areaId", address.getAreaId()); data.put("provinceId", address.getProvinceId());
data.put("mobile", address.getMobile()); data.put("cityId", address.getCityId());
data.put("address", address.getAddress()); data.put("areaId", address.getAreaId());
data.put("isDefault", address.getIsDefault()); data.put("mobile", address.getMobile());
String pname = regionService.findById(address.getProvinceId()).getName(); data.put("address", address.getAddress());
data.put("provinceName", pname); data.put("isDefault", address.getIsDefault());
String cname = regionService.findById(address.getCityId()).getName(); String pname = regionService.findById(address.getProvinceId()).getName();
data.put("cityName", cname); data.put("provinceName", pname);
String dname = regionService.findById(address.getAreaId()).getName(); String cname = regionService.findById(address.getCityId()).getName();
data.put("areaName", dname); data.put("cityName", cname);
return ResponseUtil.ok(data); String dname = regionService.findById(address.getAreaId()).getName();
} data.put("areaName", dname);
return ResponseUtil.ok(data);
private Object validate(LitemallAddress address) { }
String name = address.getName();
if (StringUtils.isEmpty(name)) { private Object validate(LitemallAddress address) {
return ResponseUtil.badArgument(); String name = address.getName();
} if (StringUtils.isEmpty(name)) {
return ResponseUtil.badArgument();
// 测试收货手机号码是否正确 }
String mobile = address.getMobile();
if (StringUtils.isEmpty(mobile)) { // 测试收货手机号码是否正确
return ResponseUtil.badArgument(); String mobile = address.getMobile();
} if (StringUtils.isEmpty(mobile)) {
if (!RegexUtil.isMobileExact(mobile)) { return ResponseUtil.badArgument();
return ResponseUtil.badArgument(); }
} if (!RegexUtil.isMobileExact(mobile)) {
return ResponseUtil.badArgument();
Integer pid = address.getProvinceId(); }
if (pid == null) {
return ResponseUtil.badArgument(); Integer pid = address.getProvinceId();
} if (pid == null) {
if (regionService.findById(pid) == null) { return ResponseUtil.badArgument();
return ResponseUtil.badArgumentValue(); }
} if (regionService.findById(pid) == null) {
return ResponseUtil.badArgumentValue();
Integer cid = address.getCityId(); }
if (cid == null) {
return ResponseUtil.badArgument(); Integer cid = address.getCityId();
} if (cid == null) {
if (regionService.findById(cid) == null) { return ResponseUtil.badArgument();
return ResponseUtil.badArgumentValue(); }
} if (regionService.findById(cid) == null) {
return ResponseUtil.badArgumentValue();
Integer aid = address.getAreaId(); }
if (aid == null) {
return ResponseUtil.badArgument(); Integer aid = address.getAreaId();
} if (aid == null) {
if (regionService.findById(aid) == null) { return ResponseUtil.badArgument();
return ResponseUtil.badArgumentValue(); }
} if (regionService.findById(aid) == null) {
return ResponseUtil.badArgumentValue();
String detailedAddress = address.getAddress(); }
if (StringUtils.isEmpty(detailedAddress)) {
return ResponseUtil.badArgument(); String detailedAddress = address.getAddress();
} if (StringUtils.isEmpty(detailedAddress)) {
return ResponseUtil.badArgument();
Boolean isDefault = address.getIsDefault(); }
if (isDefault == null) {
return ResponseUtil.badArgument(); Boolean isDefault = address.getIsDefault();
} if (isDefault == null) {
return null; return ResponseUtil.badArgument();
} }
return null;
/** }
* 添加或更新收货地址
* /**
* @param userId 用户ID * 添加或更新收货地址
* @param address 用户收货地址 *
* @return 添加或更新操作结果 * @param userId 用户ID
*/ * @param address 用户收货地址
@PostMapping("save") * @return 添加或更新操作结果
public Object save(@LoginUser Integer userId, @RequestBody LitemallAddress address) { */
if (userId == null) { @PostMapping("save")
return ResponseUtil.unlogin(); public Object save(@LoginUser Integer userId, @RequestBody LitemallAddress address) {
} if (userId == null) {
Object error = validate(address); return ResponseUtil.unlogin();
if (error != null) { }
return error; Object error = validate(address);
} if (error != null) {
return error;
if (address.getIsDefault()) { }
// 重置其他收获地址的默认选项
addressService.resetDefault(userId); if (address.getIsDefault()) {
} // 重置其他收获地址的默认选项
addressService.resetDefault(userId);
if (address.getId() == null || address.getId().equals(0)) { }
address.setId(null);
address.setUserId(userId); if (address.getId() == null || address.getId().equals(0)) {
addressService.add(address); address.setId(null);
} else { address.setUserId(userId);
address.setUserId(userId); addressService.add(address);
if (addressService.update(address) == 0) { } else {
return ResponseUtil.updatedDataFailed(); address.setUserId(userId);
} if (addressService.update(address) == 0) {
} return ResponseUtil.updatedDataFailed();
return ResponseUtil.ok(address.getId()); }
} }
return ResponseUtil.ok(address.getId());
/** }
* 删除收货地址
* /**
* @param userId 用户ID * 删除收货地址
* @param address 用户收货地址,{ id: xxx } *
* @return 删除操作结果 * @param userId 用户ID
*/ * @param address 用户收货地址,{ id: xxx }
@PostMapping("delete") * @return 删除操作结果
public Object delete(@LoginUser Integer userId, @RequestBody LitemallAddress address) { */
if (userId == null) { @PostMapping("delete")
return ResponseUtil.unlogin(); public Object delete(@LoginUser Integer userId, @RequestBody LitemallAddress address) {
} if (userId == null) {
Integer id = address.getId(); return ResponseUtil.unlogin();
if (id == null) { }
return ResponseUtil.badArgument(); Integer id = address.getId();
} if (id == null) {
return ResponseUtil.badArgument();
addressService.delete(id); }
return ResponseUtil.ok();
} addressService.delete(id);
return ResponseUtil.ok();
}
} }
\ No newline at end of file
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