基于javaweb+mysql的springboot网上商城系统设计和实现(java+springboot+ssm+mysql+thymeleaf+html+maven)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot网上商城系统设计和实现(java+springboot+ssm+mysql+thymeleaf+html+maven)
一、项目简述
本系统主要实现的功能有: OnlineMall项目是一套电商系统,包括OnlineMall商城系 统及OnlineMall商城后台管理^统,基于Spring Boot 2.X 及相关技术栈开发。前台商城系统包含首页门户、商品分 类、新品上线、首页轮播、商品推荐、商品搜索、商品展 示、购物车、订单结算、订单流程、个人订单管理、会员 中心、帮助中心等模块。后台管理系统包含数据面板、轮 播图管理、商品管理、订单管理、会员管理、分类管理、 设置等模块。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: Springboot+ SpringMVC + MyBatis + ThymeLeaf + JavaScript + JQuery + Ajax + maven等等
public Result checkOut(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.checkOut(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 关闭订单
*/
@RequestMapping(value = "/orders/close", method = RequestMethod.POST)
@ResponseBody
public Result closeOrder(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.closeOrder(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
}
package ltd.newbee.mall.controller.admin;
@Autowired
private ErrorAttributes errorAttributes;
private final static String ERROR_PATH = "/error";
public ErrorPageController(ErrorAttributes errorAttributes) {
this.errorAttributes = errorAttributes;
}
public ErrorPageController() {
if (errorPageController == null) {
errorPageController = new ErrorPageController(errorAttributes);
}
}
@RequestMapping(value = ERROR_PATH, produces = "text/html")
public ModelAndView errorHtml(HttpServletRequest request) {
HttpStatus status = getStatus(request);
if (HttpStatus.BAD_REQUEST == status) {
return new ModelAndView("error/error_400");
} else if (HttpStatus.NOT_FOUND == status) {
return new ModelAndView("error/error_404");
} else {
return new ModelAndView("error/error_5xx");
}
}
@RequestMapping(value = ERROR_PATH)
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
HttpStatus status = getStatus(request);
return new ResponseEntity<Map<String, Object>>(body, status);
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
private boolean getTraceParameter(HttpServletRequest request) {
String parameter = request.getParameter("trace");
if (parameter == null) {
return false;
}
return !"false".equals(parameter.toLowerCase());
if (!CollectionUtils.isEmpty(secondLevelCategories)) {
//查询二级分类列表中第一个实体的所有三级分类
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(secondLevelCategories.get(0).getCategoryId()), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
categoryResult.put("secondLevelCategories", secondLevelCategories);
categoryResult.put("thirdLevelCategories", thirdLevelCategories);
}
}
if (category.getCategoryLevel() == NewBeeMallCategoryLevelEnum.LEVEL_TWO.getLevel()) {
//如果是二级分类则返回当前分类下的所有三级分类列表
List<GoodsCategory> thirdLevelCategories = newBeeMallCategoryService.selectByLevelAndParentIdsAndNumber(Collections.singletonList(categoryId), NewBeeMallCategoryLevelEnum.LEVEL_THREE.getLevel());
categoryResult.put("thirdLevelCategories", thirdLevelCategories);
}
return ResultGenerator.genSuccessResult(categoryResult);
}
/**
* 添加
*/
@RequestMapping(value = "/categories/save", method = RequestMethod.POST)
@ResponseBody
public Result save(@RequestBody GoodsCategory goodsCategory) {
if (Objects.isNull(goodsCategory.getCategoryLevel())
|| StringUtils.isEmpty(goodsCategory.getCategoryName())
|| Objects.isNull(goodsCategory.getParentId())
|| Objects.isNull(goodsCategory.getCategoryRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCategoryService.saveCategory(goodsCategory);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/categories/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody GoodsCategory goodsCategory) {
if (Objects.isNull(goodsCategory.getCategoryId())
|| Objects.isNull(goodsCategory.getCategoryLevel())
|| StringUtils.isEmpty(goodsCategory.getCategoryName())
|| Objects.isNull(goodsCategory.getParentId())
|| Objects.isNull(goodsCategory.getCategoryRank())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallCategoryService.updateGoodsCategory(goodsCategory);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
/**
*/
@Controller
@RequestMapping("/admin")
public class UploadController {
@PostMapping({"/upload/file"})
@ResponseBody
public Result upload(HttpServletRequest httpServletRequest, @RequestParam("file") MultipartFile file) throws URISyntaxException {
String fileName = file.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//生成文件名称通用方法
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
Random r = new Random();
StringBuilder tempName = new StringBuilder();
tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);
String newFileName = tempName.toString();
File fileDirectory = new File(Constants.FILE_UPLOAD_DIC);
//创建文件
File destFile = new File(Constants.FILE_UPLOAD_DIC + newFileName);
try {
if (!fileDirectory.exists()) {
if (!fileDirectory.mkdir()) {
throw new IOException("文件夹创建失败,路径为:" + fileDirectory);
}
}
file.transferTo(destFile);
}
/**
* 详情
*/
@GetMapping("/order-items/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
List<NewBeeMallOrderItemVO> orderItems = newBeeMallOrderService.getOrderItems(id);
if (!CollectionUtils.isEmpty(orderItems)) {
return ResultGenerator.genSuccessResult(orderItems);
}
return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
/**
* 配货
*/
@RequestMapping(value = "/orders/checkDone", method = RequestMethod.POST)
@ResponseBody
public Result checkDone(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.checkDone(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 出库
*/
@RequestMapping(value = "/orders/checkOut", method = RequestMethod.POST)
@ResponseBody
public Result checkOut(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.checkOut(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 关闭订单
*/
@RequestMapping(value = "/orders/close", method = RequestMethod.POST)
if (StringUtils.isEmpty(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_NULL.getResult());
}
String kaptchaCode = httpSession.getAttribute(Constants.MALL_VERIFY_CODE_KEY) + "";
if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_ERROR.getResult());
}
//todo 清verifyCode
String loginResult = newBeeMallUserService.login(loginName, MD5Util.MD5Encode(password, "UTF-8"), httpSession);
//登录成功
if (ServiceResultEnum.SUCCESS.getResult().equals(loginResult)) {
return ResultGenerator.genSuccessResult();
}
//登录失败
return ResultGenerator.genFailResult(loginResult);
}
@PostMapping("/register")
@ResponseBody
public Result register(@RequestParam("loginName") String loginName,
@RequestParam("verifyCode") String verifyCode,
@RequestParam("password") String password,
HttpSession httpSession) {
if (StringUtils.isEmpty(loginName)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_NULL.getResult());
}
if (StringUtils.isEmpty(password)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_PASSWORD_NULL.getResult());
}
if (StringUtils.isEmpty(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_NULL.getResult());
}
String kaptchaCode = httpSession.getAttribute(Constants.MALL_VERIFY_CODE_KEY) + "";
if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_ERROR.getResult());
}
//todo 清verifyCode
String registerResult = newBeeMallUserService.register(loginName, password);
//注册成功
if (ServiceResultEnum.SUCCESS.getResult().equals(registerResult)) {
return ResultGenerator.genSuccessResult();
}
//注册失败
return ResultGenerator.genFailResult(registerResult);
}
@PostMapping("/personal/updateInfo")
@ResponseBody
public Result updateInfo(@RequestBody MallUser mallUser, HttpSession httpSession) {
NewBeeMallUserVO mallUserTemp = newBeeMallUserService.updateUserInfo(mallUser, httpSession);
if (mallUserTemp == null) {
Result result = ResultGenerator.genFailResult("修改失败");
priceTotal += newBeeMallShoppingCartItemVO.getGoodsCount() * newBeeMallShoppingCartItemVO.getSellingPrice();
}
if (priceTotal < 1) {
return "error/error_5xx";
}
}
request.setAttribute("priceTotal", priceTotal);
request.setAttribute("myShoppingCartItems", myShoppingCartItems);
return "mall/order-settle";
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Resource
private AdminUserService adminUserService;
@GetMapping({"/login"})
public String login() {
return "admin/login";
}
@GetMapping({"/test"})
public String test() {
return "admin/test";
}
registerUser.setLoginName(loginName);
registerUser.setNickName(loginName);
String passwordMD5 = MD5Util.MD5Encode(password, "UTF-8");
registerUser.setPasswordMd5(passwordMD5);
if (mallUserMapper.insertSelective(registerUser) > 0) {
return ServiceResultEnum.SUCCESS.getResult();
}
return ServiceResultEnum.DB_ERROR.getResult();
}
@Override
public String login(String loginName, String passwordMD5, HttpSession httpSession) {
MallUser user = mallUserMapper.selectByLoginNameAndPasswd(loginName, passwordMD5);
if (user != null && httpSession != null) {
if (user.getLockedFlag() == 1) {
return ServiceResultEnum.LOGIN_USER_LOCKED.getResult();
}
//昵称太长 影响页面展示
if (user.getNickName() != null && user.getNickName().length() > 7) {
String tempNickName = user.getNickName().substring(0, 7) + "..";
user.setNickName(tempNickName);
}
NewBeeMallUserVO newBeeMallUserVO = new NewBeeMallUserVO();
BeanUtil.copyProperties(user, newBeeMallUserVO);
//设置购物车中的数量
httpSession.setAttribute(Constants.MALL_USER_SESSION_KEY, newBeeMallUserVO);
return ServiceResultEnum.SUCCESS.getResult();
}
return ServiceResultEnum.LOGIN_ERROR.getResult();
}
@Override
public NewBeeMallUserVO updateUserInfo(MallUser mallUser, HttpSession httpSession) {
MallUser user = mallUserMapper.selectByPrimaryKey(mallUser.getUserId());
if (user != null) {
user.setNickName(mallUser.getNickName());
user.setAddress(mallUser.getAddress());
user.setIntroduceSign(mallUser.getIntroduceSign());
if (mallUserMapper.updateByPrimaryKeySelective(user) > 0) {
NewBeeMallUserVO newBeeMallUserVO = new NewBeeMallUserVO();
user = mallUserMapper.selectByPrimaryKey(mallUser.getUserId());
BeanUtil.copyProperties(user, newBeeMallUserVO);
@GetMapping("/categories/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
GoodsCategory goodsCategory = newBeeMallCategoryService.getGoodsCategoryById(id);
if (goodsCategory == null) {
return ResultGenerator.genFailResult("未查询到数据");
}
return ResultGenerator.genSuccessResult(goodsCategory);
}
/**
* 分类删除
*/
@RequestMapping(value = "/categories/delete", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (newBeeMallCategoryService.deleteBatch(ids)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("删除失败");
}
}
}
package ltd.newbee.mall.controller.mall;
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsCoverImg())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallGoodsService.saveNewBeeMallGoods(newBeeMallGoods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 修改
*/
@RequestMapping(value = "/goods/update", method = RequestMethod.POST)
@ResponseBody
public Result update(@RequestBody NewBeeMallGoods newBeeMallGoods) {
if (Objects.isNull(newBeeMallGoods.getGoodsId())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsName())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsIntro())
|| StringUtils.isEmpty(newBeeMallGoods.getTag())
|| Objects.isNull(newBeeMallGoods.getOriginalPrice())
|| Objects.isNull(newBeeMallGoods.getSellingPrice())
|| Objects.isNull(newBeeMallGoods.getGoodsCategoryId())
|| Objects.isNull(newBeeMallGoods.getStockNum())
|| Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsCoverImg())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallGoodsService.updateNewBeeMallGoods(newBeeMallGoods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/goods/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(id);
if (goods == null) {
public class NewBeeMallUserServiceImpl implements NewBeeMallUserService {
@Autowired
private MallUserMapper mallUserMapper;
@Override
public PageResult getNewBeeMallUsersPage(PageQueryUtil pageUtil) {
List<MallUser> mallUsers = mallUserMapper.findMallUserList(pageUtil);
int total = mallUserMapper.getTotalMallUsers(pageUtil);
PageResult pageResult = new PageResult(mallUsers, total, pageUtil.getLimit(), pageUtil.getPage());
return pageResult;
}
@Override
public String register(String loginName, String password) {
if (mallUserMapper.selectByLoginName(loginName) != null) {
return ServiceResultEnum.SAME_LOGIN_NAME_EXIST.getResult();
}
MallUser registerUser = new MallUser();
registerUser.setLoginName(loginName);
registerUser.setNickName(loginName);
String passwordMD5 = MD5Util.MD5Encode(password, "UTF-8");
registerUser.setPasswordMd5(passwordMD5);
if (mallUserMapper.insertSelective(registerUser) > 0) {
return ServiceResultEnum.SUCCESS.getResult();
}
return ServiceResultEnum.DB_ERROR.getResult();
}
@Override
public String login(String loginName, String passwordMD5, HttpSession httpSession) {
MallUser user = mallUserMapper.selectByLoginNameAndPasswd(loginName, passwordMD5);
if (user != null && httpSession != null) {
if (user.getLockedFlag() == 1) {
return ServiceResultEnum.LOGIN_USER_LOCKED.getResult();
}
//昵称太长 影响页面展示
if (user.getNickName() != null && user.getNickName().length() > 7) {
String tempNickName = user.getNickName().substring(0, 7) + "..";
user.setNickName(tempNickName);
|| Objects.isNull(newBeeMallGoods.getStockNum())
|| Objects.isNull(newBeeMallGoods.getGoodsSellStatus())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsCoverImg())
|| StringUtils.isEmpty(newBeeMallGoods.getGoodsDetailContent())) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallGoodsService.updateNewBeeMallGoods(newBeeMallGoods);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
/**
* 详情
*/
@GetMapping("/goods/info/{id}")
@ResponseBody
public Result info(@PathVariable("id") Long id) {
NewBeeMallGoods goods = newBeeMallGoodsService.getNewBeeMallGoodsById(id);
if (goods == null) {
return ResultGenerator.genFailResult(ServiceResultEnum.DATA_NOT_EXIST.getResult());
}
return ResultGenerator.genSuccessResult(goods);
}
/**
* 批量修改销售状态
*/
@RequestMapping(value = "/goods/status/{sellStatus}", method = RequestMethod.PUT)
@ResponseBody
public Result delete(@RequestBody Long[] ids, @PathVariable("sellStatus") int sellStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (sellStatus != Constants.SELL_STATUS_UP && sellStatus != Constants.SELL_STATUS_DOWN) {
return ResultGenerator.genFailResult("状态异常!");
}
if (newBeeMallGoodsService.batchUpdateSellStatus(ids, sellStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("修改失败");
}
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
public class CommonController {
@Autowired
private DefaultKaptcha captchaProducer;
@GetMapping("/common/kaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
byte[] captchaOutputStream = null;
ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream();
try {
//生产验证码字符串并保存到session中
String verifyCode = captchaProducer.createText();
httpServletRequest.getSession().setAttribute("verifyCode", verifyCode);
BufferedImage challenge = captchaProducer.createImage(verifyCode);
ImageIO.write(challenge, "jpg", imgOutputStream);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
captchaOutputStream = imgOutputStream.toByteArray();
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream();
responseOutputStream.write(captchaOutputStream);
responseOutputStream.flush();
responseOutputStream.close();
}
@GetMapping("/common/mall/kaptcha")
public void mallKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
com.google.code.kaptcha.impl.DefaultKaptcha newBeeMallLoginKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha();
Properties properties = new Properties();
properties.put("kaptcha.border", "no");
properties.put("kaptcha.textproducer.font.color", "27,174,171");
properties.put("kaptcha.noise.color", "20,33,42");
properties.put("kaptcha.textproducer.font.size", "30");
properties.put("kaptcha.image.width", "110");
properties.put("kaptcha.image.height", "40");
properties.put("kaptcha.session.key", Constants.MALL_VERIFY_CODE_KEY);
properties.put("kaptcha.textproducer.char.space", "2");
properties.put("kaptcha.textproducer.char.length", "6");
Config config = new Config(properties);
newBeeMallLoginKaptcha.setConfig(config);
byte[] captchaOutputStream = null;
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallUserController {
@Resource
private NewBeeMallUserService newBeeMallUserService;
@GetMapping("/users")
public String usersPage(HttpServletRequest request) {
request.setAttribute("path", "users");
return "admin/newbee_mall_user";
}
/**
* 列表
*/
@RequestMapping(value = "/users/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallUserService.getNewBeeMallUsersPage(pageUtil));
}
/**
* 用户禁用与解除禁用(0-未锁定 1-已锁定)
}
}
file.transferTo(destFile);
Result resultSuccess = ResultGenerator.genSuccessResult();
resultSuccess.setData(NewBeeMallUtils.getHost(new URI(httpServletRequest.getRequestURL() + "")) + "/upload/" + newFileName);
return resultSuccess;
} catch (IOException e) {
e.printStackTrace();
return ResultGenerator.genFailResult("文件上传失败");
}
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallUserController {
@Resource
private NewBeeMallUserService newBeeMallUserService;
@GetMapping("/users")
public String usersPage(HttpServletRequest request) {
request.setAttribute("path", "users");
return "admin/newbee_mall_user";
}
/**
* 列表
*/
@RequestMapping(value = "/users/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
/**
*/
@Controller
public class CommonController {
@Autowired
private DefaultKaptcha captchaProducer;
@GetMapping("/common/kaptcha")
public void defaultKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
byte[] captchaOutputStream = null;
ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream();
try {
//生产验证码字符串并保存到session中
String verifyCode = captchaProducer.createText();
httpServletRequest.getSession().setAttribute("verifyCode", verifyCode);
BufferedImage challenge = captchaProducer.createImage(verifyCode);
ImageIO.write(challenge, "jpg", imgOutputStream);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
captchaOutputStream = imgOutputStream.toByteArray();
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream();
responseOutputStream.write(captchaOutputStream);
responseOutputStream.flush();
responseOutputStream.close();
}
@GetMapping("/common/mall/kaptcha")
public void mallKaptcha(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
com.google.code.kaptcha.impl.DefaultKaptcha newBeeMallLoginKaptcha = new com.google.code.kaptcha.impl.DefaultKaptcha();
Properties properties = new Properties();
properties.put("kaptcha.border", "no");
properties.put("kaptcha.textproducer.font.color", "27,174,171");
properties.put("kaptcha.noise.color", "20,33,42");
}
}
/**
* 关闭订单
*/
@RequestMapping(value = "/orders/close", method = RequestMethod.POST)
@ResponseBody
public Result closeOrder(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.closeOrder(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
}
package ltd.newbee.mall.controller.admin;
return ResultGenerator.genSuccessResult();
}
//登录失败
return ResultGenerator.genFailResult(loginResult);
}
@PostMapping("/register")
@ResponseBody
public Result register(@RequestParam("loginName") String loginName,
@RequestParam("verifyCode") String verifyCode,
@RequestParam("password") String password,
HttpSession httpSession) {
if (StringUtils.isEmpty(loginName)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_NAME_NULL.getResult());
}
if (StringUtils.isEmpty(password)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_PASSWORD_NULL.getResult());
}
if (StringUtils.isEmpty(verifyCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_NULL.getResult());
}
String kaptchaCode = httpSession.getAttribute(Constants.MALL_VERIFY_CODE_KEY) + "";
if (StringUtils.isEmpty(kaptchaCode) || !verifyCode.equals(kaptchaCode)) {
return ResultGenerator.genFailResult(ServiceResultEnum.LOGIN_VERIFY_CODE_ERROR.getResult());
}
//todo 清verifyCode
String registerResult = newBeeMallUserService.register(loginName, password);
//注册成功
if (ServiceResultEnum.SUCCESS.getResult().equals(registerResult)) {
return ResultGenerator.genSuccessResult();
}
//注册失败
return ResultGenerator.genFailResult(registerResult);
}
@PostMapping("/personal/updateInfo")
@ResponseBody
public Result updateInfo(@RequestBody MallUser mallUser, HttpSession httpSession) {
NewBeeMallUserVO mallUserTemp = newBeeMallUserService.updateUserInfo(mallUser, httpSession);
if (mallUserTemp == null) {
Result result = ResultGenerator.genFailResult("修改失败");
return result;
} else {
//返回成功
Result result = ResultGenerator.genSuccessResult();
return result;
}
}
}
package ltd.newbee.mall.controller.admin;
@Service
public class NewBeeMallUserServiceImpl implements NewBeeMallUserService {
@Autowired
private MallUserMapper mallUserMapper;
@Override
public PageResult getNewBeeMallUsersPage(PageQueryUtil pageUtil) {
List<MallUser> mallUsers = mallUserMapper.findMallUserList(pageUtil);
int total = mallUserMapper.getTotalMallUsers(pageUtil);
PageResult pageResult = new PageResult(mallUsers, total, pageUtil.getLimit(), pageUtil.getPage());
return pageResult;
}
@Override
public String register(String loginName, String password) {
if (mallUserMapper.selectByLoginName(loginName) != null) {
return ServiceResultEnum.SAME_LOGIN_NAME_EXIST.getResult();
}
MallUser registerUser = new MallUser();
registerUser.setLoginName(loginName);
registerUser.setNickName(loginName);
String passwordMD5 = MD5Util.MD5Encode(password, "UTF-8");
registerUser.setPasswordMd5(passwordMD5);
if (mallUserMapper.insertSelective(registerUser) > 0) {
return ServiceResultEnum.SUCCESS.getResult();
}
return ServiceResultEnum.DB_ERROR.getResult();
}
@Override
public String login(String loginName, String passwordMD5, HttpSession httpSession) {
MallUser user = mallUserMapper.selectByLoginNameAndPasswd(loginName, passwordMD5);
if (user != null && httpSession != null) {
if (user.getLockedFlag() == 1) {
@GetMapping("/users")
public String usersPage(HttpServletRequest request) {
request.setAttribute("path", "users");
return "admin/newbee_mall_user";
}
/**
* 列表
*/
@RequestMapping(value = "/users/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallUserService.getNewBeeMallUsersPage(pageUtil));
}
/**
* 用户禁用与解除禁用(0-未锁定 1-已锁定)
*/
@RequestMapping(value = "/users/lock/{lockStatus}", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids, @PathVariable int lockStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (lockStatus != 0 && lockStatus != 1) {
return ResultGenerator.genFailResult("操作非法!");
}
if (newBeeMallUserService.lockUsers(ids, lockStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("禁用失败");
}
}
}
package ltd.newbee.mall.interceptor;
@RequestMapping(value = "/goods/status/{sellStatus}", method = RequestMethod.PUT)
@ResponseBody
public Result delete(@RequestBody Long[] ids, @PathVariable("sellStatus") int sellStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (sellStatus != Constants.SELL_STATUS_UP && sellStatus != Constants.SELL_STATUS_DOWN) {
return ResultGenerator.genFailResult("状态异常!");
}
if (newBeeMallGoodsService.batchUpdateSellStatus(ids, sellStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("修改失败");
}
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallGoodsCategoryController {
@Resource
private NewBeeMallCategoryService newBeeMallCategoryService;
@GetMapping("/categories")
public String categoriesPage(HttpServletRequest request, @RequestParam("categoryLevel") Byte categoryLevel, @RequestParam("parentId") Long parentId, @RequestParam("backParentId") Long backParentId) {
if (categoryLevel == null || categoryLevel < 1 || categoryLevel > 3) {
return "error/error_5xx";
}
request.setAttribute("path", "newbee_mall_category");
request.setAttribute("parentId", parentId);
request.setAttribute("backParentId", backParentId);
request.setAttribute("categoryLevel", categoryLevel);
return "/shop-cart";
} else {
//总价
for (NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO : myShoppingCartItems) {
priceTotal += newBeeMallShoppingCartItemVO.getGoodsCount() * newBeeMallShoppingCartItemVO.getSellingPrice();
}
if (priceTotal < 1) {
return "error/error_5xx";
}
}
request.setAttribute("priceTotal", priceTotal);
request.setAttribute("myShoppingCartItems", myShoppingCartItems);
return "mall/order-settle";
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
@Resource
private AdminUserService adminUserService;
@GetMapping({"/login"})
public String login() {
return "admin/login";
}
@GetMapping({"/test"})
public String test() {
return "admin/test";
}
return ResultGenerator.genSuccessResult();
}
//添加失败
return ResultGenerator.genFailResult(saveResult);
}
@PutMapping("/shop-cart")
@ResponseBody
public Result updateNewBeeMallShoppingCartItem(@RequestBody NewBeeMallShoppingCartItem newBeeMallShoppingCartItem,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
newBeeMallShoppingCartItem.setUserId(user.getUserId());
//todo 判断数量
String updateResult = newBeeMallShoppingCartService.updateNewBeeMallCartItem(newBeeMallShoppingCartItem);
//修改成功
if (ServiceResultEnum.SUCCESS.getResult().equals(updateResult)) {
return ResultGenerator.genSuccessResult();
}
//修改失败
return ResultGenerator.genFailResult(updateResult);
}
@DeleteMapping("/shop-cart/{newBeeMallShoppingCartItemId}")
@ResponseBody
public Result updateNewBeeMallShoppingCartItem(@PathVariable("newBeeMallShoppingCartItemId") Long newBeeMallShoppingCartItemId,
HttpSession httpSession) {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
Boolean deleteResult = newBeeMallShoppingCartService.deleteById(newBeeMallShoppingCartItemId);
//删除成功
if (deleteResult) {
return ResultGenerator.genSuccessResult();
}
//删除失败
return ResultGenerator.genFailResult(ServiceResultEnum.OPERATE_ERROR.getResult());
}
@GetMapping("/shop-cart/settle")
public String settlePage(HttpServletRequest request,
HttpSession httpSession) {
int priceTotal = 0;
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
List<NewBeeMallShoppingCartItemVO> myShoppingCartItems = newBeeMallShoppingCartService.getMyShoppingCartItems(user.getUserId());
if (CollectionUtils.isEmpty(myShoppingCartItems)) {
//无数据则不跳转至结算页
return "/shop-cart";
} else {
//总价
for (NewBeeMallShoppingCartItemVO newBeeMallShoppingCartItemVO : myShoppingCartItems) {
return ResultGenerator.genFailResult(result);
}
}
/**
* 关闭订单
*/
@RequestMapping(value = "/orders/close", method = RequestMethod.POST)
@ResponseBody
public Result closeOrder(@RequestBody Long[] ids) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
String result = newBeeMallOrderService.closeOrder(ids);
if (ServiceResultEnum.SUCCESS.getResult().equals(result)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult(result);
}
}
}
package ltd.newbee.mall.controller.admin;
/**
*/
@Controller
@RequestMapping("/admin")
public class NewBeeMallGoodsIndexConfigController {
@Resource
private NewBeeMallIndexConfigService newBeeMallIndexConfigService;
public ModelAndView errorHtml(HttpServletRequest request) {
HttpStatus status = getStatus(request);
if (HttpStatus.BAD_REQUEST == status) {
return new ModelAndView("error/error_400");
} else if (HttpStatus.NOT_FOUND == status) {
return new ModelAndView("error/error_404");
} else {
return new ModelAndView("error/error_5xx");
}
}
@RequestMapping(value = ERROR_PATH)
@ResponseBody
public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
HttpStatus status = getStatus(request);
return new ResponseEntity<Map<String, Object>>(body, status);
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
private boolean getTraceParameter(HttpServletRequest request) {
String parameter = request.getParameter("trace");
if (parameter == null) {
return false;
}
return !"false".equals(parameter.toLowerCase());
}
protected Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) {
WebRequest webRequest = new ServletWebRequest(request);
return this.errorAttributes.getErrorAttributes(webRequest, includeStackTrace);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request
.getAttribute("javax.servlet.error.status_code");
@GetMapping("/users")
public String usersPage(HttpServletRequest request) {
request.setAttribute("path", "users");
return "admin/newbee_mall_user";
}
/**
* 列表
*/
@RequestMapping(value = "/users/list", method = RequestMethod.GET)
@ResponseBody
public Result list(@RequestParam Map<String, Object> params) {
if (StringUtils.isEmpty(params.get("page")) || StringUtils.isEmpty(params.get("limit"))) {
return ResultGenerator.genFailResult("参数异常!");
}
PageQueryUtil pageUtil = new PageQueryUtil(params);
return ResultGenerator.genSuccessResult(newBeeMallUserService.getNewBeeMallUsersPage(pageUtil));
}
/**
* 用户禁用与解除禁用(0-未锁定 1-已锁定)
*/
@RequestMapping(value = "/users/lock/{lockStatus}", method = RequestMethod.POST)
@ResponseBody
public Result delete(@RequestBody Integer[] ids, @PathVariable int lockStatus) {
if (ids.length < 1) {
return ResultGenerator.genFailResult("参数异常!");
}
if (lockStatus != 0 && lockStatus != 1) {
return ResultGenerator.genFailResult("操作非法!");
}
if (newBeeMallUserService.lockUsers(ids, lockStatus)) {
return ResultGenerator.genSuccessResult();
} else {
return ResultGenerator.genFailResult("禁用失败");
}
}
}
package ltd.newbee.mall.interceptor;
/**
* 购物车数量处理