欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 實(shí)戰(zhàn)交易平臺(tái)項(xiàng)目之寵物在線(xiàn)商城系統(tǒng)

 更新時(shí)間:2021年11月04日 10:50:57   作者:OldWinePot  
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)寵物在線(xiàn)商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平

該系統(tǒng)分為前臺(tái)和后臺(tái),前臺(tái)可以自主注冊(cè),后臺(tái)管理員角色,除基礎(chǔ)腳手架外,實(shí)現(xiàn)的功能有:
后臺(tái)管理員功能有:商品分類(lèi)管理、商品管理、套餐管理、新聞分類(lèi)管理、新聞管理、常見(jiàn)問(wèn)題、關(guān)于我們、團(tuán)隊(duì)管理、訂單查看和前臺(tái)用戶(hù)查看等功能。 前臺(tái)用戶(hù)功能有:注冊(cè)登錄、查看商品、購(gòu)物車(chē)、支付訂單、評(píng)價(jià)、照片庫(kù)、新聞列表、個(gè)人中心、購(gòu)買(mǎi)套餐等功能。

運(yùn)行環(huán)境:windows/Linux均可、jdk1.8、mysql5.7、maven3.5\maven3.6、idea/eclipse均可。

系統(tǒng)控制器代碼:

/**
 * 系統(tǒng)控制器
 * @author Admin
 *
 */
@RequestMapping("/system")
@Controller
public class SystemController {
 
	
	
	@Autowired
	private OperaterLogService operaterLogService;
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private DatabaseBakService databaseBakService;
 
	@Autowired
	private StaffService staffService;
	@Autowired
	private OrderAuthService orderAuthService;
 
	private Logger log = LoggerFactory.getLogger(SystemController.class);
	
	/**
	 * 登錄頁(yè)面
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.GET)
	public String login(Model model){
		model.addAttribute("loginTypes", LoginType.values());
		return "admin/system/login";
	}
	
	/**
	 * 用戶(hù)登錄提交表單處理方法
	 * @param request
	 * @param cpacha
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> login(HttpServletRequest request,String username,String password,String cpacha,Integer type){
		if(StringUtils.isEmpty(username)){
			return Result.error(CodeMsg.ADMIN_USERNAME_EMPTY);
		}
		if(StringUtils.isEmpty(password)){
			return Result.error(CodeMsg.ADMIN_PASSWORD_EMPTY);
		}
 
		//表示實(shí)體信息合法,開(kāi)始驗(yàn)證驗(yàn)證碼是否為空
		if(StringUtils.isEmpty(cpacha)){
			return Result.error(CodeMsg.CPACHA_EMPTY);
		}
		//說(shuō)明驗(yàn)證碼不為空,從session里獲取驗(yàn)證碼
		Object attribute = request.getSession().getAttribute("admin_login");
		if(attribute == null){
			return Result.error(CodeMsg.SESSION_EXPIRED);
		}
		//表示session未失效,進(jìn)一步判斷用戶(hù)填寫(xiě)的驗(yàn)證碼是否正確
		if(!cpacha.equalsIgnoreCase(attribute.toString())){
			return Result.error(CodeMsg.CPACHA_ERROR);
		}
 
		if(type == LoginType.ADMINISTRATOR.getCode()){
			//表示驗(yàn)證碼正確,開(kāi)始查詢(xún)數(shù)據(jù)庫(kù),檢驗(yàn)密碼是否正確
			User findByUsername = userService.findByUsername(username);
			//判斷是否為空
			if(findByUsername == null){
				return Result.error(CodeMsg.ADMIN_USERNAME_NO_EXIST);
			}
			//表示用戶(hù)存在,進(jìn)一步對(duì)比密碼是否正確
			if(!findByUsername.getPassword().equals(password)){
				return Result.error(CodeMsg.ADMIN_PASSWORD_ERROR);
			}
			//表示密碼正確,接下來(lái)判斷用戶(hù)狀態(tài)是否可用
			if(findByUsername.getStatus() == User.ADMIN_USER_STATUS_UNABLE){
				return Result.error(CodeMsg.ADMIN_USER_UNABLE);
			}
			//檢查用戶(hù)所屬角色狀態(tài)是否可用
			if(findByUsername.getRole() == null || findByUsername.getRole().getStatus() == Role.ADMIN_ROLE_STATUS_UNABLE){
				return Result.error(CodeMsg.ADMIN_USER_ROLE_UNABLE);
			}
			//檢查用戶(hù)所屬角色的權(quán)限是否存在
			if(findByUsername.getRole().getAuthorities() == null || findByUsername.getRole().getAuthorities().size() == 0){
				return Result.error(CodeMsg.ADMIN_USER_ROLE_AUTHORITES_EMPTY);
			}
			//檢查一切符合,可以登錄,將用戶(hù)信息存放至session
			request.getSession().setAttribute(SessionConstant.SESSION_USER_LOGIN_KEY, findByUsername);
			request.getSession().setAttribute("loginType",type);
 
			//銷(xiāo)毀session中的驗(yàn)證碼
			request.getSession().setAttribute("admin_login", null);
			//將登陸記錄寫(xiě)入日志庫(kù)
			operaterLogService.add("用戶(hù)【"+username+"】于【" + StringUtil.getFormatterDate(new Date(), "yyyy-MM-dd HH:mm:ss") + "】登錄系統(tǒng)!");
			log.info("用戶(hù)成功登錄,user = " + findByUsername);
		}else{
			Staff byJobNumber = staffService.findByNameAndIsStatus(username);
			//判斷是否為空
			if(byJobNumber == null){
				return Result.error(CodeMsg.ADMIN_USERNAME_NO_EXIST);
			}
 
			//表示用戶(hù)存在,進(jìn)一步對(duì)比密碼是否正確
			if(!byJobNumber.getPassword().equals(password)){
				return Result.error(CodeMsg.ADMIN_PASSWORD_ERROR);
			}
 
			//檢查用戶(hù)所屬角色狀態(tài)是否可用
			if(byJobNumber.getRole() == null || byJobNumber.getRole().getStatus() == Role.ADMIN_ROLE_STATUS_UNABLE){
				return Result.error(CodeMsg.ADMIN_USER_ROLE_UNABLE);
			}
 
			//檢查用戶(hù)所屬角色的權(quán)限是否存在
			if(byJobNumber.getRole().getAuthorities() == null || byJobNumber.getRole().getAuthorities().size() == 0){
				return Result.error(CodeMsg.ADMIN_USER_ROLE_AUTHORITES_EMPTY);
			}
			//檢查一切符合,可以登錄,將用戶(hù)信息存放至session
			request.getSession().setAttribute(SessionConstant.SESSION_STAFF_LOGIN_KEY, byJobNumber);
			request.getSession().setAttribute("loginType",type);
			//銷(xiāo)毀session中的驗(yàn)證碼
			request.getSession().setAttribute("admin_login", null);
			//將登陸記錄寫(xiě)入日志庫(kù)
			operaterLogService.add("用戶(hù)【"+username+"】于【" + StringUtil.getFormatterDate(new Date(), "yyyy-MM-dd HH:mm:ss") + "】登錄系統(tǒng)!");
			log.info("員工成功登錄,user = " + byJobNumber);
		}
 
		return Result.success(true);
	}
	
	/**
	 * 登錄成功后的系統(tǒng)主頁(yè)
	 * @param model
	 * @return
	 */
	@RequestMapping(value="/index")
	public String index(Model model){
		model.addAttribute("operatorLogs", operaterLogService.findLastestLog(10));
		model.addAttribute("userTotal", userService.total());
		model.addAttribute("operatorLogTotal", operaterLogService.total());
		model.addAttribute("databaseBackupTotal", databaseBakService.total());
		model.addAttribute("onlineUserTotal", SessionListener.onlineUserCount);
		return "admin/system/index";
	}
	
	/**
	 * 注銷(xiāo)登錄
	 * @return
	 */
	@RequestMapping(value="/logout")
	public String logout(){
		Integer loginType = (Integer) SessionUtil.get("loginType");
		if(loginType == LoginType.ADMINISTRATOR.getCode()){
			User loginedUser = SessionUtil.getLoginedUser();
			if(loginedUser != null){
				SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, null);
			}
		}else if(loginType == LoginType.STAFF.getCode()){
			Staff loginedStaff = SessionUtil.getLoginedStaff();
			if(loginedStaff != null){
				SessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY,null);
			}
		}
		return "redirect:login";
	}
	
	/**
	 * 無(wú)權(quán)限提示頁(yè)面
	 * @return
	 */
	@RequestMapping(value="/no_right")
	public String noRight(){
		return "admin/system/no_right";
	}
	
	/**
	 * 修改用戶(hù)個(gè)人信息
	 * @return
	 */
	@RequestMapping(value="/update_userinfo",method=RequestMethod.GET)
	public String updateUserInfo(){
		return "admin/system/update_userinfo";
	}
	
	/**
	 * 修改個(gè)人信息保存
	 * @param user
	 * @return
	 */
	@RequestMapping(value="/update_userinfo",method=RequestMethod.POST)
	public String updateUserInfo(User user){
		User loginedUser = SessionUtil.getLoginedUser();
		loginedUser.setEmail(user.getEmail());
		loginedUser.setMobile(user.getMobile());
		loginedUser.setHeadPic(user.getHeadPic());
		//首先保存到數(shù)據(jù)庫(kù)
		userService.save(loginedUser);
		//更新session里的值
		SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);
		return "redirect:update_userinfo";
	}
	
	/**
	 * 修改密碼頁(yè)面
	 * @return
	 */
	@RequestMapping(value="/update_pwd",method=RequestMethod.GET)
	public String updatePwd(){
		return "admin/system/update_pwd";
	}
	
	/**
	 * 修改密碼表單提交
	 * @param oldPwd
	 * @param newPwd
	 * @return
	 */
	@RequestMapping(value="/update_pwd",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> updatePwd(@RequestParam(name="oldPwd",required=true)String oldPwd,
			@RequestParam(name="newPwd",required=true)String newPwd
			){
		Integer loginType = (Integer) SessionUtil.get("loginType");
		if(loginType == LoginType.ADMINISTRATOR.getCode()){
			User loginedUser = SessionUtil.getLoginedUser();
			if(!loginedUser.getPassword().equals(oldPwd)){
				return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_ERROR);
			}
			if(StringUtils.isEmpty(newPwd)){
				return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_EMPTY);
			}
			if(newPwd.length()<4 || newPwd.length()>32){
				return Result.error(CodeMsg.ADMIN_USER_PWD_LENGTH_ERROR);
			}
			loginedUser.setPassword(newPwd);
			//保存數(shù)據(jù)庫(kù)
			userService.save(loginedUser);
			//更新session
			SessionUtil.set(SessionConstant.SESSION_USER_LOGIN_KEY, loginedUser);
		}else{
			Staff loginedStaff = SessionUtil.getLoginedStaff();
 
			Staff staff = staffService.find(loginedStaff.getId());
			if(!staff.getPassword().equals(oldPwd)){
				return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_ERROR);
			}
			if(StringUtils.isEmpty(newPwd)){
				return Result.error(CodeMsg.ADMIN_USER_UPDATE_PWD_EMPTY);
			}
 
			staff.setPassword(newPwd);
 
			CodeMsg codeMsg = ValidateEntityUtil.validate(staff);
			if (codeMsg.getCode() != CodeMsg.SUCCESS.getCode()){
				return Result.error(codeMsg);
			}
 
			loginedStaff.setPassword(newPwd);
			//保存數(shù)據(jù)庫(kù)
			staffService.save(loginedStaff);
			//更新session
			SessionUtil.set(SessionConstant.SESSION_STAFF_LOGIN_KEY, loginedStaff);
		}
 
		return Result.success(true);
	}
	
	/**
	 * 日志管理列表
	 * @param model
	 * @param operaterLog
	 * @param pageBean
	 * @return
	 */
	@RequestMapping(value="/operator_log_list")
	public String operatorLogList(Model model,OperaterLog operaterLog,PageBean<OperaterLog> pageBean){
		model.addAttribute("pageBean", operaterLogService.findList(operaterLog, pageBean));
		model.addAttribute("operator", operaterLog.getOperator());
		model.addAttribute("title", "日志列表");
		return "admin/system/operator_log_list";
	}
 
	/**
	 * 刪除操作日志,可刪除多個(gè)
	 * @param ids
	 * @return
	 */
	@RequestMapping(value="/delete_operator_log",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> delete(String ids){
		if(!StringUtils.isEmpty(ids)){
			String[] splitIds = ids.split(",");
			for(String id : splitIds){
				operaterLogService.delete(Long.valueOf(id));
			}
		}
		return Result.success(true);
	}
	
	/**
	 * 清空整個(gè)日志
	 * @return
	 */
	@RequestMapping(value="/delete_all_operator_log",method=RequestMethod.POST)
	@ResponseBody
	public Result<Boolean> deleteAll(){
		operaterLogService.deleteAll();
		return Result.success(true);
	}
}

到此這篇關(guān)于Java 實(shí)戰(zhàn)交易平臺(tái)項(xiàng)目之寵物在線(xiàn)商城系統(tǒng)的文章就介紹到這了,更多相關(guān)Java 寵物在線(xiàn)商城系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Delegate IDE build/run actions to maven 配置會(huì)影響程序運(yùn)行嗎?

    Delegate IDE build/run actions to maven 配置會(huì)影響程序運(yùn)行嗎?

    這篇文章主要介紹了Delegate IDE build/run actions to maven 配置會(huì)影響程序運(yùn)行嗎,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java基礎(chǔ)之Stream流原理與用法詳解

    Java基礎(chǔ)之Stream流原理與用法詳解

    從Java1.8開(kāi)始提出了Stream流的概念,側(cè)重對(duì)于源數(shù)據(jù)計(jì)算能力的封裝,并且支持序列與并行兩種操作方式。本文就來(lái)為大家詳細(xì)講講Stream流原理與用法
    2022-08-08
  • 詳解JVM虛擬機(jī)的類(lèi)加載機(jī)制

    詳解JVM虛擬機(jī)的類(lèi)加載機(jī)制

    這篇文章主要介紹了詳解JVM虛擬機(jī)的類(lèi)加載機(jī)制,虛擬機(jī)把描述類(lèi)的數(shù)據(jù)從 Class 文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)、轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的 Java 類(lèi)型,這就是虛擬機(jī)的類(lèi)加載機(jī)制,需要的朋友可以參考下
    2023-08-08
  • Mybatis-plus新版本分頁(yè)失效PaginationInterceptor過(guò)時(shí)的問(wèn)題

    Mybatis-plus新版本分頁(yè)失效PaginationInterceptor過(guò)時(shí)的問(wèn)題

    這篇文章主要介紹了Mybatis-plus新版本分頁(yè)失效,PaginationInterceptor過(guò)時(shí)問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring Boot 3.0升級(jí)指南

    Spring Boot 3.0升級(jí)指南

    這篇文章主要為大家介紹了Spring Boot 3.0升級(jí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • SpringBoot WebSocket實(shí)時(shí)監(jiān)控異常的詳細(xì)流程

    SpringBoot WebSocket實(shí)時(shí)監(jiān)控異常的詳細(xì)流程

    最近做了一個(gè)需求,消防的設(shè)備巡檢,如果巡檢發(fā)現(xiàn)異常,通過(guò)手機(jī)端提交,后臺(tái)的實(shí)時(shí)監(jiān)控頁(yè)面實(shí)時(shí)獲取到該設(shè)備的信息及位置,然后安排員工去處理。這篇文章主要介紹了SpringBoot WebSocket實(shí)時(shí)監(jiān)控異常的全過(guò)程,感興趣的朋友一起看看吧
    2021-10-10
  • 淺談Springboot2.0防止XSS攻擊的幾種方式

    淺談Springboot2.0防止XSS攻擊的幾種方式

    本文主要介紹了Springboot2.0防止XSS攻擊的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • spring boot 1.5.4 web容器定制(端口號(hào)等修改)方法

    spring boot 1.5.4 web容器定制(端口號(hào)等修改)方法

    下面小編就為大家?guī)?lái)一篇spring boot 1.5.4 web容器定制(端口號(hào)等修改)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 淺談關(guān)于Java的GC垃圾回收器的一些基本概念

    淺談關(guān)于Java的GC垃圾回收器的一些基本概念

    這篇文章主要介紹了關(guān)于Java的GC垃圾回收器的一些基本概念,牽扯倒JVM內(nèi)存模型的一些知識(shí),需要的朋友可以參考下
    2015-11-11
  • Java方法參數(shù)傳遞機(jī)制原理解析

    Java方法參數(shù)傳遞機(jī)制原理解析

    這篇文章主要介紹了Java方法參數(shù)傳遞機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論