diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CommonController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CommonController.java index 67f2a31..e17a711 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CommonController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CommonController.java @@ -4,29 +4,56 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,表明它负责处理Web请求,并将请求转发到相应的视图进行展示,是Web应用中实现页面交互逻辑的重要组成部分。 @Controller public class CommonController { - + + // 定义一个常量字符串,表示树状选择页面的视图名称(具体路径格式遵循Spring MVC视图解析的配置规则,这里的"modules/sys/common/treeselect"可能对应的是一个JSP、Thymeleaf等模板文件的路径,用于展示树状选择相关的页面内容)。 private final String TREE_SELECT_PAGE = "modules/sys/common/treeselect"; + // 定义常量字符串,代表树状图标选择页面的视图名称,同样对应着用于展示树状图标选择相关内容的模板文件路径。 private final String TREE_ICON_PAGE = "modules/sys/common/iconselect"; + // 定义常量字符串,用于表示系统桌面页面的视图名称,即对应展示系统桌面相关内容的模板文件路径。 private final String SYS_DESKTOP_PAGE = "modules/sys/common/desktop"; - @RequestMapping(path="sys/treeselect") - public ModelAndView index(ModelAndView model , String url) { - model.addObject("url" , url); + /** + * 处理路径为"sys/treeselect"的请求的方法,用于准备并返回树状选择页面相关的数据和视图。 + * 通过Spring MVC的@RequestMapping注解将该方法与指定的请求路径进行映射,当客户端发起对应的请求时,这个方法就会被调用执行。 + * 方法接收一个ModelAndView对象,用于向视图传递数据以及设置要返回的视图名称,同时还接收一个名为"url"的字符串参数(该参数的值应该是从请求中传递过来的,具体取决于前端页面如何发起请求及传递参数)。 + * + * @param model ModelAndView对象,用于添加模型数据(可以在视图中通过相应的表达式获取这些数据)以及设置视图名称,实现数据与视图的整合。 + * @param url 从请求中传递过来的字符串参数,用于在视图中可能需要根据不同的URL进行相关逻辑处理(具体用途取决于视图层的实现逻辑),在这里将其添加到ModelAndView对象中,传递给视图。 + * @return 返回包含了准备好的数据以及设置好视图名称的ModelAndView对象,Spring MVC会根据这个对象将数据传递给对应的视图进行渲染展示。 + */ + @RequestMapping(path = "sys/treeselect") + public ModelAndView index(ModelAndView model, String url) { + model.addObject("url", url); model.setViewName(TREE_SELECT_PAGE); return model; } - - @RequestMapping(path="sys/iconselect") + + /** + * 处理路径为"sys/iconselect"的请求的方法,用于返回树状图标选择页面相关的视图。 + * 通过@RequestMapping注解将方法与请求路径进行映射,当客户端发起对应请求时执行该方法,该方法主要负责设置要返回的视图名称,将对应的视图展示给客户端。 + * + * @param model ModelAndView对象,用于设置视图名称,以确定要返回给客户端的视图页面。 + * @return 返回设置好视图名称的ModelAndView对象,使得Spring MVC能够找到对应的视图进行渲染展示,这里返回的是树状图标选择页面的视图。 + */ + @RequestMapping(path = "sys/iconselect") public ModelAndView iconselect(ModelAndView model) { model.setViewName(TREE_ICON_PAGE); return model; } - @RequestMapping(path="sys/desktop") + /** + * 处理路径为"sys/desktop"的请求的方法,用于返回系统桌面页面相关的视图。 + * 同样借助@RequestMapping注解与请求路径建立映射关系,当收到对应请求时,此方法被调用,其主要工作是设置好要返回的系统桌面页面的视图名称,让Spring MVC将对应的视图呈现给客户端。 + * + * @param model ModelAndView对象,用于指定要返回的视图名称,确保正确的视图能够被渲染展示。 + * @return 返回已设置好视图名称的ModelAndView对象,从而使得系统桌面页面的视图能够展示给客户端,实现相应的页面展示功能。 + */ + @RequestMapping(path = "sys/desktop") public ModelAndView index(ModelAndView model) { model.setViewName(SYS_DESKTOP_PAGE); return model; } -} +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CompanyController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CompanyController.java index 1118e5c..9b0b552 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CompanyController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CompanyController.java @@ -18,33 +18,63 @@ import com.tamguo.modules.sys.model.condition.SysCompanyCondition; import com.tamguo.modules.sys.service.ISysAreaService; import com.tamguo.modules.sys.service.ISysCompanyService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,表明它负责处理与公司相关的Web请求,并根据不同的请求调用相应的业务逻辑方法,将处理结果返回给客户端或者转发到对应的视图进行展示,是实现公司业务模块页面交互和数据处理的核心部分。 @Controller -@RequestMapping(path="sys/company") +// 通过@RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,即该控制器处理的请求路径都以"sys/company"开头,方便对公司相关的各种请求进行统一管理和分类。 +@RequestMapping(path = "sys/company") public class CompanyController { - + + // 定义一个常量字符串,表示公司列表页面(或首页)的视图名称,遵循Spring MVC视图解析的配置规则,对应着展示公司列表相关内容的模板文件路径(如JSP、Thymeleaf等模板文件的具体路径)。 private final String COMPANY_INDEX_PAGE = "modules/sys/company/index"; + // 定义常量字符串,代表公司详情页面(可能用于新增公司时展示相关信息的页面,也可能用于查看已有公司详情的页面,具体取决于业务逻辑)的视图名称,对应着展示公司详细信息相关内容的模板文件路径。 private final String COMPANY_DETAIL_PAGE = "modules/sys/company/add"; + // 定义常量字符串,用于表示公司信息更新页面的视图名称,对应展示修改公司信息相关内容的模板文件路径。 private final String COMPANY_UPDATE_PAGE = "modules/sys/company/update"; + // 通过@Autowired注解自动注入ISysCompanyService接口的实现类实例,用于调用与公司相关的业务逻辑方法,比如查询、保存、更新公司信息等操作,实现控制器层与业务逻辑层的交互。 @Autowired ISysCompanyService iSysCompanyService; + // 同样使用@Autowired注解注入ISysAreaService接口的实现类实例,用于获取与地区相关的服务,可能在处理公司信息时涉及到关联地区信息等业务场景(比如公司所属地区的查询等操作),实现与其他相关业务模块的交互。 @Autowired ISysAreaService iSysAreaService; - - @RequestMapping(path="index") + + /** + * 处理路径为"sys/company/index"的请求的方法,用于返回公司列表页面的视图名称。 + * 当客户端发起对应的请求时,该方法被调用,其主要功能就是告诉Spring MVC要渲染展示的视图对应的名称,以便找到对应的模板文件进行页面展示(这里只是简单返回视图名称,具体页面内容的渲染由视图层根据配置和模板文件来完成)。 + * + * @param model ModelAndView对象,虽然在这里没有向其添加额外的数据,但在Spring MVC的请求处理流程中,这个对象是用于传递数据和设置视图名称的常用载体,此处主要利用它来遵循方法签名的统一要求,在其他方法中可能会向其添加数据后再返回。 + * @return 返回公司列表页面的视图名称(即常量COMPANY_INDEX_PAGE所定义的值),Spring MVC根据这个名称去查找并渲染对应的视图模板文件,展示公司列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index(ModelAndView model) { return COMPANY_INDEX_PAGE; } - - @RequestMapping(path="add") - public ModelAndView add(String parentCode , ModelAndView model) { + + /** + * 处理路径为"sys/company/add"的请求的方法,用于准备并返回公司详情页面相关的数据和视图。 + * 当客户端发起该请求时,方法会被调用,先设置要返回的视图名称为公司详情页面的视图名称(COMPANY_DETAIL_PAGE),然后通过注入的ISysCompanyService实例,根据传入的parentCode参数查询对应的公司信息,并将查询到的公司对象添加到ModelAndView对象中,传递给视图层使用(例如在视图中展示公司的基本信息等),最后返回包含了视图名称和相关数据的ModelAndView对象,使得Spring MVC能够正确渲染展示公司详情页面。 + * + * @param parentCode 从请求中传递过来的字符串参数,用于指定要查询的公司的标识(具体含义取决于业务中公司实体类的设计以及业务逻辑,可能是公司编号等唯一标识),通过这个参数去查询对应的公司信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的公司对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示。 + * @return 返回包含了设置好的视图名称(COMPANY_DETAIL_PAGE)以及添加了公司对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现公司详情页面给客户端。 + */ + @RequestMapping(path = "add") + public ModelAndView add(String parentCode, ModelAndView model) { model.setViewName(COMPANY_DETAIL_PAGE); model.addObject("company", iSysCompanyService.selectById(parentCode)); return model; } - - @RequestMapping(path="update") - public ModelAndView update(String companyCode , ModelAndView model) { + + /** + * 处理路径为"sys/company/update"的请求的方法,用于准备并返回公司信息更新页面相关的数据和视图。 + * 当客户端发起对应请求时,该方法首先设置要返回的视图名称为公司信息更新页面的视图名称(COMPANY_UPDATE_PAGE),然后通过ISysCompanyService查询要更新的公司本身的信息、其上级公司信息(通过公司实体类中的parentCode属性关联查询)以及所属地区信息(通过调用ISysAreaService根据公司的areaCode属性查询),并将这些查询到的公司、上级公司、地区的实体对象分别添加到ModelAndView对象中,传递给视图层,方便在更新页面中展示相关信息供用户修改,最后返回包含了视图名称和这些数据的ModelAndView对象,以便Spring MVC进行视图渲染展示更新页面给客户端。 + * + * @param companyCode 从请求中传递过来的字符串参数,用于指定要更新的公司的唯一标识(如公司编号等,具体由业务中公司实体类的设计决定),根据这个标识去查询相关的公司及其关联信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的多个数据对象(包括公司、上级公司、地区实体对象),实现数据与视图的整合,确保视图层能获取到完整信息用于更新页面的展示和操作。 + * @return 返回包含了设置好视图名称(COMPANY_UPDATE_PAGE)以及添加了相关公司及关联信息数据的ModelAndView对象,供Spring MVC渲染展示公司信息更新页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String companyCode, ModelAndView model) { model.setViewName(COMPANY_UPDATE_PAGE); SysCompanyEntity company = iSysCompanyService.selectById(companyCode); SysCompanyEntity parentCompany = iSysCompanyService.selectById(company.getParentCode()); @@ -54,44 +84,80 @@ public class CompanyController { model.addObject("area", area); return model; } - - @RequestMapping(path="info/{code}") + + /** + * 处理路径为"sys/company/info/{code}"的请求的方法,用于根据传入的公司代码查询并返回公司的详细信息,返回结果以JSON格式响应给客户端。 + * 通过@PathVariable注解获取请求路径中占位符{code}对应的实际值(即公司代码),然后调用ISysCompanyService的selectByCode方法查询对应的公司信息,最后将查询结果包装在Result对象中(Result对象可能是自定义的用于统一返回结果格式的类,包含了如状态码、提示信息、数据等属性),并通过@ResponseBody注解将其转换为JSON格式返回给客户端,方便前端进行数据处理和展示。 + * + * @param code 从请求路径中通过@PathVariable注解获取的字符串参数,代表要查询的公司的代码,用于在业务逻辑层准确查找对应的公司信息。 + * @return 返回一个Result对象,其中包含了查询到的公司信息(如果查询成功)以及相应的状态码和提示信息等,该Result对象会被转换为JSON格式响应给客户端,展示公司的详细信息。 + */ + @RequestMapping(path = "info/{code}") @ResponseBody public Result info(@PathVariable("code") String code) { return Result.successResult(iSysCompanyService.selectByCode(code)); } - - @RequestMapping(path="listData") + + /** + * 处理路径为"sys/company/listData"的请求的方法,用于查询并返回符合条件的公司列表数据,返回结果以JSON格式响应给客户端。 + * 该方法接收一个SysCompanyCondition对象作为参数,这个对象应该是自定义的用于封装查询公司列表时的各种条件的类(例如可以包含查询关键字、分页信息等条件),通过调用ISysCompanyService的listData方法,根据传入的条件查询公司列表,最后直接返回查询到的公司实体对象列表(List),Spring MVC会借助@ResponseBody注解将其转换为JSON格式发送给客户端,供前端进行列表展示等操作。 + * + * @param condition SysCompanyCondition对象,用于传递查询公司列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的公司列表数据。 + * @return 返回符合条件的公司实体对象列表,会被自动转换为JSON格式响应给客户端,用于前端展示公司列表信息。 + */ + @RequestMapping(path = "listData") @ResponseBody public List listData(SysCompanyCondition condition) { return iSysCompanyService.listData(condition); } - @RequestMapping(path="treeData") + /** + * 处理路径为"sys/company/treeData"的请求的方法,用于查询并返回公司数据的树形结构表示形式(可能用于前端展示公司层级关系等场景),返回结果以JSON格式响应给客户端。 + * 方法接收一个字符串参数excludeId(具体含义可能是用于排除某个特定公司节点的标识,比如在生成树形结构时不包含某个特定公司及其子公司等情况,具体取决于业务逻辑),然后调用ISysCompanyService的treeData方法根据这个参数生成公司数据的树形结构,返回的结果是JSONArray类型(通常用于表示JSON格式的数组,方便存储树形结构的节点数据等),通过@ResponseBody注解将其转换为JSON格式返回给客户端,便于前端进行树形结构的展示和交互操作。 + * + * @param excludeId 从请求中传递过来的字符串参数,用于在生成公司数据树形结构时作为排除某些节点的依据,具体作用取决于业务中对树形结构生成的相关逻辑和要求。 + * @return 返回表示公司数据树形结构的JSONArray对象,会被转换为JSON格式响应给客户端,供前端展示公司的层级关系等树形结构相关内容。 + */ + @RequestMapping(path = "treeData") @ResponseBody public JSONArray treeData(String excludeId) { return iSysCompanyService.treeData(excludeId); } - - @RequestMapping(path="save") + + /** + * 处理路径为"sys/company/save"的请求的方法,用于保存新的公司信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 方法接收一个SysCompanyEntity对象作为参数,这个对象应该包含了要保存的公司的各项信息(如公司名称、地址、联系方式等,具体属性取决于业务中公司实体类的设计),通过调用ISysCompanyService的save方法尝试保存公司信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及公司名称等相关内容);如果保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param company SysCompanyEntity对象,包含了要保存的新公司的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端公司保存操作的结果情况。 + */ + @RequestMapping(path = "save") @ResponseBody public Result save(SysCompanyEntity company) { try { iSysCompanyService.save(company); - return Result.result(0, null, "公司【"+company.getCompanyName()+"】保存成功!"); + return Result.result(0, null, "公司【" + company.getCompanyName() + "】保存成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("保存公司", this.getClass(), e); } } - - @RequestMapping(path="update" , method=RequestMethod.POST) + + /** + * 处理路径为"sys/company/update"(使用POST方法提交的请求)的请求的方法,用于更新公司信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存公司信息的方法类似,接收一个SysCompanyEntity对象作为参数,包含了要更新的公司的各项信息,通过调用ISysCompanyService的update方法进行公司信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功以及公司名称等相关内容);若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 这里特别指定了请求方法为RequestMethod.POST,意味着该方法只处理POST类型的更新公司信息的请求,与其他可能存在的同名但不同请求方法的请求进行区分,符合RESTful风格的接口设计原则(例如可以有GET方式的查询请求、POST方式的更新请求等)。 + * + * @param company SysCompanyEntity对象,包含了要更新的公司的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端公司更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysCompanyEntity company) { try { iSysCompanyService.update(company); - return Result.result(0, null, "公司【"+company.getCompanyName()+"】修改成功!"); + return Result.result(0, null, "公司【" + company.getCompanyName() + "】修改成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("修改公司", this.getClass(), e); } } -} +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CorpAdminController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CorpAdminController.java index 96d5d2f..5bba204 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CorpAdminController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/CorpAdminController.java @@ -15,55 +15,99 @@ import com.tamguo.modules.sys.model.SysUserEntity; import com.tamguo.modules.sys.model.condition.SysUserCondition; import com.tamguo.modules.sys.service.ISysUserService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与企业管理员相关的Web请求,调用相应的业务逻辑方法,并根据处理结果返回给客户端合适的响应或者转发到对应的视图进行展示,是实现企业管理员业务模块页面交互和数据处理的关键部分。 @Controller -@RequestMapping(path="sys/corpAdmin") +// 通过@RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,即该控制器处理的请求路径都以"sys/corpAdmin"开头,便于对企业管理员相关的各种请求进行统一管理和分类。 +@RequestMapping(path = "sys/corpAdmin") public class CorpAdminController { + // 定义一个常量字符串,表示企业管理员列表页面(或首页)的视图名称,遵循Spring MVC视图解析的配置规则,对应着展示企业管理员列表相关内容的模板文件路径(如JSP、Thymeleaf等模板文件的具体路径)。 private final String CORPADMIN_INDEX_PAGE = "modules/sys/corpAdmin/index"; + // 定义常量字符串,代表企业管理员信息更新页面的视图名称,对应展示修改企业管理员信息相关内容的模板文件路径。 private final String CORPADMIN_UPDATE_PAGE = "modules/sys/corpAdmin/update"; - + + // 通过@Autowired注解自动注入ISysUserService接口的实现类实例,用于调用与系统用户(这里特指企业管理员相关的用户操作,因为从类名和业务逻辑推测,处理的是企业管理员相关的业务)相关的业务逻辑方法,比如查询、保存、更新管理员信息等操作,实现控制器层与业务逻辑层的交互。 @Autowired private ISysUserService iSysUserService; - @RequestMapping(path="index") + /** + * 处理路径为"sys/corpAdmin/index"的请求的方法,用于返回企业管理员列表页面的视图名称。 + * 当客户端发起对应的请求时,该方法被调用,其主要功能就是告知Spring MVC要渲染展示的视图对应的名称,以便找到对应的模板文件进行页面展示(这里只是简单返回视图名称,具体页面内容的渲染由视图层根据配置和模板文件来完成)。 + * + * @param model ModelAndView对象,虽然在这里没有向其添加额外的数据,但在Spring MVC的请求处理流程中,这个对象是用于传递数据和设置视图名称的常用载体,此处主要利用它来遵循方法签名的统一要求,在其他方法中可能会向其添加数据后再返回。 + * @return 返回企业管理员列表页面的视图名称(即常量CORPADMIN_INDEX_PAGE所定义的值),Spring MVC根据这个名称去查找并渲染对应的视图模板文件,展示企业管理员列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index(ModelAndView model) { return CORPADMIN_INDEX_PAGE; } - - @RequestMapping(path="update") - public ModelAndView update(String userCode , ModelAndView model) { + + /** + * 处理路径为"sys/corpAdmin/update"的请求的方法,用于准备并返回企业管理员信息更新页面相关的数据和视图。 + * 当客户端发起该请求时,方法会被调用,先通过注入的ISysUserService实例,根据传入的userCode参数查询对应的企业管理员信息,并将查询到的管理员对象添加到ModelAndView对象中,然后设置要返回的视图名称为企业管理员信息更新页面的视图名称(CORPADMIN_UPDATE_PAGE),最后返回包含了视图名称和管理员对象数据的ModelAndView对象,使得Spring MVC能够正确渲染展示企业管理员信息更新页面。 + * + * @param userCode 从请求中传递过来的字符串参数,用于指定要查询的企业管理员的标识(具体含义取决于业务中用户实体类的设计以及业务逻辑,可能是用户编号等唯一标识),通过这个参数去查询对应的管理员信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的管理员对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示。 + * @return 返回包含了设置好的视图名称(CORPADMIN_UPDATE_PAGE)以及添加了管理员对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现企业管理员信息更新页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String userCode, ModelAndView model) { model.addObject("user", iSysUserService.selectById(userCode)); model.setViewName(CORPADMIN_UPDATE_PAGE); return model; } - - @RequestMapping(path="save",method=RequestMethod.POST) + + /** + * 处理路径为"sys/corpAdmin/save"(且请求方法为POST的请求)的请求的方法,用于保存新的企业管理员信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysUserEntity对象作为参数,这个对象应该包含了要保存的企业管理员的各项信息(如用户名、密码、权限等,具体属性取决于业务中用户实体类的设计),通过调用ISysUserService的saveAdmin方法尝试保存管理员信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及管理员的用户名等相关内容);如果保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * 这里指定请求方法为RequestMethod.POST,符合常见的RESTful风格接口设计原则,通常POST方法用于创建资源(在这里就是创建新的企业管理员记录),确保该接口只处理正确请求方法的保存管理员信息的请求,与其他可能的请求进行区分。 + * + * @param user SysUserEntity对象,包含了要保存的新企业管理员的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端企业管理员保存操作的结果情况。 + */ + @RequestMapping(path = "save", method = RequestMethod.POST) @ResponseBody public Result save(SysUserEntity user) { try { iSysUserService.saveAdmin(user); - return Result.result(0, null, "管理员【"+user.getUserName()+"】添加成功"); + return Result.result(0, null, "管理员【" + user.getUserName() + "】添加成功"); } catch (Exception e) { return ExceptionSupport.resolverResult("添加管理员错误", this.getClass(), e); } } - - @RequestMapping(path="update",method=RequestMethod.POST) + + /** + * 处理路径为"sys/corpAdmin/update"(且请求方法为POST的请求)的请求的方法,用于更新企业管理员信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存管理员信息的方法类似,接收一个SysUserEntity对象作为参数,包含了要更新的企业管理员的各项信息,通过调用ISysUserService的updateAdmin方法进行管理员信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功以及管理员的用户名等相关内容);若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 同样指定请求方法为RequestMethod.POST,符合RESTful风格接口设计要求,用于明确该接口只处理POST请求方式的更新管理员信息的操作,避免与其他同名但不同请求方法的请求混淆。 + * + * @param user SysUserEntity对象,包含了要更新的企业管理员的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端企业管理员更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysUserEntity user) { try { iSysUserService.updateAdmin(user); - return Result.result(0, null, "管理员【"+user.getUserName()+"】修改成功"); + return Result.result(0, null, "管理员【" + user.getUserName() + "】修改成功"); } catch (Exception e) { return ExceptionSupport.resolverResult("修改管理员错误", this.getClass(), e); } } - - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/corpAdmin/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的企业管理员列表数据,返回结果以适合前端表格组件(如jqGrid等)使用的格式包装在Map中,并以JSON格式响应给客户端。 + * 该方法接收一个SysUserCondition对象作为参数,这个对象应该是自定义的用于封装查询企业管理员列表时的各种条件的类(例如可以包含查询关键字、分页信息等条件),通过调用ISysUserService的listData方法,根据传入的条件查询企业管理员列表,返回的结果是一个Page对象(表示分页后的用户实体对象列表,由MyBatis Plus的分页插件生成相关分页信息),然后调用Result.jqGridResult方法将分页信息(总记录数、每页记录数、当前页码、总页数等)以及实际的管理员记录数据进行整合,包装成一个Map对象(符合前端表格组件期望的格式),最后通过@ResponseBody注解将这个Map对象转换为JSON格式返回给客户端,供前端表格组件进行数据展示和分页等操作。 + * 这里指定请求方法为RequestMethod.POST,可能是基于业务逻辑要求或者与前端交互的约定,确保该接口只处理POST请求方式的查询管理员列表数据的操作。 + * + * @param condition SysUserCondition对象,用于传递查询企业管理员列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的管理员列表数据。 + * @return 返回一个Map对象,其中包含了适合前端表格组件展示的企业管理员列表数据以及相关的分页信息,该Map对象会被转换为JSON格式响应给客户端,用于前端展示管理员列表信息并进行分页等操作。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public Map listData(SysUserCondition condition) { Page page = iSysUserService.listData(condition); return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages()); } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/IndexController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/IndexController.java index b6d954f..7522ba9 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/IndexController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/IndexController.java @@ -4,12 +4,21 @@ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,意味着它负责处理Web请求,并将请求转发到相应的视图进行展示,在整个Web应用中承担着页面交互逻辑的一部分,这里大概率是用于处理系统首页相关的请求逻辑。 @Controller public class IndexController { - @RequestMapping(path="index") + /** + * 这个方法使用@RequestMapping注解将其与路径为"index"的请求进行映射,意味着当客户端发起对"index"路径的请求时,该方法就会被调用执行。 + * 它接收一个ModelAndView对象,不过在当前实现中并没有向这个对象添加额外的数据(虽然ModelAndView常用于传递数据给视图,但此处只是简单利用它遵循Spring MVC方法签名的常规要求)。 + * 方法的主要功能是返回一个字符串"index",这个字符串在Spring MVC的视图解析机制下,会对应到一个具体的视图模板文件(例如JSP、Thymeleaf等格式的文件,具体取决于项目的视图解析配置),Spring MVC会根据这个返回的视图名称去查找并渲染对应的视图,最终展示给客户端作为系统的首页(这里假设"index"对应的视图就是系统首页相关的展示页面)。 + * + * @param model ModelAndView对象,用于在一般情况下添加模型数据以及设置视图名称,不过在此方法中目前仅作为方法参数的形式存在,未实际添加数据,主要是为了符合Spring MVC请求处理方法的统一签名规范。 + * @return 返回视图名称"index",以便Spring MVC根据此名称查找并渲染对应的视图模板文件,展示系统首页给客户端。 + */ + @RequestMapping(path = "index") public String sysLogin(ModelAndView model) { return "index"; } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LoginController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LoginController.java index 697cda9..7007559 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LoginController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LoginController.java @@ -22,49 +22,89 @@ import com.tamguo.common.utils.SystemConstant; import com.tamguo.modules.sys.service.ISysUserService; import com.tamguo.modules.sys.utils.ShiroUtils; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与用户登录相关的Web请求,在登录流程中与Shiro框架以及业务逻辑层进行交互,根据不同情况返回相应的响应给客户端,是实现用户登录功能的核心控制器类。 @Controller public class LoginController { - + + // 通过@Autowired注解自动注入ISysUserService接口的实现类实例,用于调用与系统用户相关的业务逻辑方法,比如查询用户权限菜单等操作,实现控制器层与业务逻辑层的交互,辅助完成登录相关的业务处理。 @Autowired private ISysUserService iSysUserService; - @RequestMapping(path="login") + /** + * 处理路径为"login"的GET请求的方法,用于根据用户当前的登录状态返回相应的视图名称,引导用户进入正确的页面。 + * 通过ShiroUtils工具类的isLogin方法判断当前用户是否已经登录,如果已经登录(返回true),则直接返回"index"视图名称,让Spring MVC渲染展示系统的首页;如果未登录(返回false),则返回"login"视图名称,引导用户进入登录页面进行登录操作。 + * + * @param model ModelAndView对象,虽然在这里没有向其添加额外的数据,但在Spring MVC的请求处理流程中,它是常用的用于传递数据和设置视图名称的载体,此处主要是为了遵循方法签名的统一要求,在其他相关方法中可能会向其添加数据后再返回。 + * @return 返回相应的视图名称,根据用户登录状态决定是返回系统首页视图名称"index"还是登录页面视图名称"login",以便Spring MVC查找并渲染对应的视图模板文件进行展示。 + */ + @RequestMapping(path = "login") public String sysLogin(ModelAndView model) { - if(ShiroUtils.isLogin()) { + if (ShiroUtils.isLogin()) { return "index"; } return "login"; } - + + /** + * 处理路径为"login"的POST请求的方法,用于处理用户提交的登录表单数据,进行登录验证以及相关业务逻辑处理,并返回登录结果给客户端,结果以JSON格式响应。 + * 通过@ResponseBody注解将方法返回的Result对象转换为JSON格式发送给客户端,方便前端根据返回结果进行相应的提示和页面跳转等操作。同时,指定请求方法为RequestMethod.POST,表明该方法只处理POST类型的登录请求,符合常见的RESTful风格接口设计原则,与GET请求的登录页面展示方法(sysLogin方法)区分开来,分别处理不同阶段的登录相关操作。 + * + * @param request HttpServletRequest对象,用于获取请求相关的信息,比如从请求中获取用户输入的用户名、密码、验证码等参数,还可以在登录成功后通过它设置会话属性等操作,与客户端和服务器的交互紧密相关。 + * @param response HttpServletResponse对象,用于设置响应相关的信息,例如在验证码错误等情况下可以通过它设置响应状态码、返回错误提示信息给客户端等,确保客户端能正确接收到服务器的响应内容并进行相应处理。 + * @param username 从请求中获取的字符串参数,代表用户输入的用户名,是登录验证的关键信息之一,将用于后续与数据库中存储的用户信息进行比对验证。 + * @param rememberUser 从请求中获取的布尔类型参数,用于表示用户是否选择记住登录状态(具体实现可能涉及到设置相应的Cookie或者Shiro的记住我功能等相关逻辑,不过此处代码未详细展示这部分,仅接收该参数),根据其值来决定是否启用记住登录状态的相关处理。 + * @param password 从请求中获取的字符串参数,代表用户输入的密码,同样是登录验证的重要信息,会经过加密等处理后与数据库中的密码进行比对验证。 + * @param validCode 从请求中获取的字符串参数,代表用户输入的验证码,用于和服务器端生成并存储在会话中的验证码进行比对,验证用户输入的合法性,防止恶意登录等情况。 + * @return 返回一个Result对象,包含了登录操作的状态码、提示信息以及可能的数据内容(如登录成功后返回用户名等),该Result对象会被转换为JSON格式响应给客户端,告知客户端登录操作的结果情况,方便前端根据结果进行相应的页面跳转、提示用户等操作。 + * @throws IOException 如果在处理登录过程中涉及到输入输出操作(例如读取验证码、设置响应内容等情况)出现异常,可能会抛出IOException异常,这里声明抛出该异常以便由上层调用者(通常是Spring MVC框架)进行相应的异常处理,比如返回错误页面等操作。 + */ @ResponseBody @RequestMapping(value = "login", method = RequestMethod.POST) - public Result toLogin(HttpServletRequest request, HttpServletResponse response , String username , Boolean rememberUser, String password, String validCode) - throws IOException { + public Result toLogin(HttpServletRequest request, HttpServletResponse response, String username, + Boolean rememberUser, String password, String validCode) throws IOException { try { + // 通过ShiroUtils工具类获取存储在会话中的验证码(使用SystemConstant.KAPTCHA_SESSION_KEY作为键来查找对应的验证码,SystemConstant应该是一个用于存放系统常量的类),并将获取到的验证码与用户输入的验证码进行不区分大小写的比对,如果不一致,说明验证码错误,直接返回包含相应错误提示信息的Result对象给客户端。 String kaptcha = ShiroUtils.getKaptcha(SystemConstant.KAPTCHA_SESSION_KEY); if (!validCode.equalsIgnoreCase(kaptcha)) { return Result.failResult("验证码错误"); } + + // 通过ShiroUtils工具类获取当前的Subject对象,Subject代表当前执行操作的用户主体,在Shiro框架中是进行认证、授权等操作的核心入口点,后续将基于这个对象进行用户登录认证操作。 Subject subject = ShiroUtils.getSubject(); - // sha256加密 + + // 使用Sha256Hash对用户输入的密码进行加密处理,将加密后的结果转换为十六进制字符串形式,以提高密码存储和传输的安全性,确保在与数据库中存储的密码进行比对时使用的是经过相同加密算法处理后的密码,符合安全规范。 password = new Sha256Hash(password).toHex(); + + // 创建一个UsernamePasswordToken对象,将用户名和加密后的密码传入构造函数,这个对象在Shiro框架中用于表示用户登录的凭证信息,后续会传递给Shiro的认证机制进行登录验证。 UsernamePasswordToken token = new UsernamePasswordToken(username, password); + + // 通过Subject对象调用login方法,传入之前创建的包含用户凭证信息的UsernamePasswordToken对象,触发Shiro框架的登录认证流程,Shiro会根据配置的Realm(通常是自定义的实现了认证逻辑的类)去验证用户名和密码等信息是否正确,如果认证通过则登录成功,否则会抛出相应的认证异常。 subject.login(token); - - // 获取权限菜单 + + // 登录成功后,通过注入的ISysUserService实例,调用其findUserMenuList方法,根据当前登录用户的用户代码(通过ShiroUtils.getUserCode方法获取)查询该用户对应的权限菜单信息,并将查询到的权限菜单列表存储到当前会话中,键为"userMenuList",方便后续在系统中根据用户权限展示不同的菜单选项,实现权限控制和菜单展示的功能。 request.getSession().setAttribute("userMenuList", iSysUserService.findUserMenuList(ShiroUtils.getUserCode())); + + // 将当前登录用户的信息(通过ShiroUtils.getUser方法获取)存储到当前会话中,键为"currAdmin",方便在系统的其他地方获取当前登录用户的详细信息进行相关业务处理,例如在页面上展示当前登录用户的相关信息等操作。 request.getSession().setAttribute("currAdmin", ShiroUtils.getUser()); } catch (UnknownAccountException e) { + // 如果在Shiro的登录认证过程中抛出UnknownAccountException异常,说明找不到对应的用户账户(可能是用户名不存在等原因),则返回一个包含相应错误状态码和提示信息("找不到账户")的Result对象给客户端,告知用户登录失败的原因。 return Result.result(501, null, "找不到账户"); } catch (IncorrectCredentialsException e) { + // 当抛出IncorrectCredentialsException异常时,表示用户输入的账户验证失败,通常是密码错误等原因导致,返回包含对应错误状态码和提示信息("账户验证失败")的Result对象给客户端,提示用户登录失败。 return Result.result(502, null, "账户验证失败"); } catch (LockedAccountException e) { + // 如果出现LockedAccountException异常,意味着用户账户被锁定(可能是由于多次错误登录等原因,具体锁定逻辑通常在业务层或相关配置中设置),同样返回包含相应错误状态码和提示信息("账户验证失败")的Result对象给客户端,告知用户账户状态异常导致登录失败。 return Result.result(503, null, "账户验证失败"); } catch (AuthenticationException e) { + // 捕获其他类型的AuthenticationException异常,这类异常通常涵盖了各种登录认证过程中出现的问题(除了上述明确处理的几种常见异常情况外),同样返回包含错误状态码和提示信息("账户验证失败")的Result对象给客户端,提示用户登录失败以及可能存在的未知认证问题。 return Result.result(504, null, "账户验证失败"); } + + // 再次将当前登录用户的信息存储到会话中(这里可能是为了确保会话中一定存在该用户信息,或者在后续可能的业务逻辑中方便再次获取等原因,代码逻辑上有一定的重复,但不影响功能实现),键为"currAdmin"。 request.getSession().setAttribute("currAdmin", ShiroUtils.getUser()); + + // 如果登录过程顺利,没有抛出任何异常,说明登录成功,返回一个包含成功状态码以及用户名信息的Result对象给客户端,告知客户端登录成功以及登录的用户名等情况,方便前端进行相应的页面跳转和提示操作,例如跳转到系统首页等。 return Result.successResult(username); } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LogoutController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LogoutController.java index b7626c9..9399bee 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LogoutController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/LogoutController.java @@ -6,14 +6,27 @@ import org.springframework.web.servlet.ModelAndView; import com.tamguo.modules.sys.utils.ShiroUtils; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与用户注销相关的Web请求,通过调用Shiro框架提供的注销方法来实现用户注销功能,并将页面重定向到登录页面,是实现用户退出登录操作的关键部分。 @Controller public class LogoutController { - @RequestMapping(path="logout") + /** + * 处理路径为"logout"的请求的方法,用于执行用户注销操作,并返回重定向到登录页面的视图信息。 + * 通过@RequestMapping注解将该方法与"logout"路径的请求进行映射,当客户端发起对应的注销请求时,这个方法就会被调用执行。 + * 方法接收一个ModelAndView对象,用于设置要返回的视图名称以及传递可能的数据(在当前方法中主要是设置视图名称),实现将用户注销后的页面重定向到登录页面的功能,同时借助ShiroUtils工具类来执行具体的注销操作逻辑,清除用户相关的认证信息和会话数据等。 + * + * @param model ModelAndView对象,用于设置视图名称,在这个方法中主要是将其设置为"login",使得Spring MVC能够找到对应的登录页面视图进行渲染展示,引导用户回到登录页面,完成注销后的页面跳转操作。 + * @return 返回包含了设置好视图名称("login")的ModelAndView对象,Spring MVC会根据这个对象将页面重定向到登录页面,让用户重新登录或者进行其他操作。 + */ + @RequestMapping(path = "logout") public ModelAndView logout(ModelAndView model) { + // 调用ShiroUtils工具类的logout方法,该方法会触发Shiro框架执行用户注销的相关操作,清除当前用户的认证信息、会话数据等相关内容,使当前用户退出登录状态,确保用户注销后相关数据的安全性以及资源的合理释放。 ShiroUtils.logout(); + + // 设置要返回的视图名称为"login",这样Spring MVC在处理这个ModelAndView对象时,会将页面重定向到登录页面,方便用户在注销后重新进行登录操作或者进行其他相应的操作(比如忘记密码等相关操作,如果登录页面有提供相应入口的话)。 model.setViewName("login"); + return model; } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SecAdminController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SecAdminController.java index 59b009d..d5576e8 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SecAdminController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SecAdminController.java @@ -15,40 +15,77 @@ import com.tamguo.modules.sys.model.condition.SysUserCondition; import com.tamguo.modules.sys.model.enums.SysUserMgrTypeEnum; import com.tamguo.modules.sys.service.ISysUserService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与安全管理员相关的Web请求,调用相应的业务逻辑方法,并根据处理结果返回给客户端合适的响应或者转发到对应的视图进行展示,是实现安全管理员业务模块页面交互和数据处理的关键部分。 @Controller -@RequestMapping(path="sys/secAdmin") +// 通过@RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,即该控制器处理的请求路径都以"sys/secAdmin"开头,便于对安全管理员相关的各种请求进行统一管理和分类。 +@RequestMapping(path = "sys/secAdmin") public class SecAdminController { - + + // 定义一个常量字符串,表示安全管理员列表页面(或首页)的视图名称,遵循Spring MVC视图解析的配置规则,对应着展示安全管理员列表相关内容的模板文件路径(如JSP、Thymeleaf等模板文件的具体路径)。 private final String SECADMIN_INDEX_PAGE = "modules/sys/secAdmin/index"; + // 定义常量字符串,代表安全管理员添加(或编辑相关信息,具体取决于业务逻辑)页面的视图名称,对应展示添加安全管理员信息相关内容的模板文件路径。 private final String SECADMIN_ADD_PAGE = "modules/sys/secAdmin/add"; - + + // 通过@Autowired注解自动注入ISysUserService接口的实现类实例,用于调用与系统用户(这里特指安全管理员相关的用户操作,因为从类名和业务逻辑推测,处理的是安全管理员相关的业务)相关的业务逻辑方法,比如查询、保存、设置数据权限等操作,实现控制器层与业务逻辑层的交互。 @Autowired private ISysUserService iSysUserService; - @RequestMapping(path="index") + /** + * 处理路径为"sys/secAdmin/index"的请求的方法,用于返回安全管理员列表页面的视图名称。 + * 当客户端发起对应的请求时,该方法被调用,其主要功能就是告知Spring MVC要渲染展示的视图对应的名称,以便找到对应的模板文件进行页面展示(这里只是简单返回视图名称,具体页面内容的渲染由视图层根据配置和模板文件来完成)。 + * + * @param model ModelAndView对象,虽然在这里没有向其添加额外的数据,但在Spring MVC的请求处理流程中,这个对象是用于传递数据和设置视图名称的常用载体,此处主要利用它来遵循方法签名的统一要求,在其他方法中可能会向其添加数据后再返回。 + * @return 返回安全管理员列表页面的视图名称(即常量SECADMIN_INDEX_PAGE所定义的值),Spring MVC根据这个名称去查找并渲染对应的视图模板文件,展示安全管理员列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index(ModelAndView model) { return SECADMIN_INDEX_PAGE; } - - @RequestMapping(path="add") - public ModelAndView add(String userCode , ModelAndView model) { + + /** + * 处理路径为"sys/secAdmin/add"的请求的方法,用于准备并返回安全管理员添加(或编辑)页面相关的数据和视图。 + * 当客户端发起该请求时,方法会被调用,先设置要返回的视图名称为安全管理员添加页面的视图名称(SECADMIN_ADD_PAGE),然后通过注入的ISysUserService实例,根据传入的userCode参数查询对应的安全管理员信息,并将查询到的管理员对象添加到ModelAndView对象中,同时还调用iSysUserService的selectUserDataScope方法,根据userCode查询该管理员的数据权限范围信息,并将其也添加到ModelAndView对象中,最后返回包含了视图名称、管理员对象以及数据权限范围信息数据的ModelAndView对象,使得Spring MVC能够正确渲染展示安全管理员添加(或编辑)页面。 + * + * @param userCode 从请求中传递过来的字符串参数,用于指定要查询的安全管理员的标识(具体含义取决于业务中用户实体类的设计以及业务逻辑,可能是用户编号等唯一标识),通过这个参数去查询对应的管理员信息以及其数据权限范围信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的管理员对象和数据权限范围信息),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示。 + * @return 返回包含了设置好的视图名称(SECADMIN_ADD_PAGE)以及添加了管理员对象和数据权限范围信息数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现安全管理员添加(或编辑)页面给客户端。 + */ + @RequestMapping(path = "add") + public ModelAndView add(String userCode, ModelAndView model) { model.setViewName(SECADMIN_ADD_PAGE); model.addObject("user", iSysUserService.selectById(userCode)); model.addObject("userDataScopeList", iSysUserService.selectUserDataScope(userCode)); return model; } - - @RequestMapping(path="save") + + /** + * 处理路径为"sys/secAdmin/save"的请求的方法,用于保存安全管理员的数据权限信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysUserEntity对象作为参数,这个对象应该包含了要保存数据权限的安全管理员的各项信息(如用户名、用户编号等,具体属性取决于业务中用户实体类的设计),同时还接收一个ModelAndView对象(不过在当前方法中未对其进行实质性操作,主要是为了遵循方法签名的统一要求),通过调用ISysUserService的saveUserDataScope方法,传入管理员对象和表示安全管理员类型的枚举值(SysUserMgrTypeEnum.SEC_ADMIN),尝试保存该管理员的数据权限信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及管理员的用户名等相关内容);如果保存过程中出现异常(此处代码未详细处理异常情况,实际应用中可根据需要添加更完善的异常处理逻辑),则返回的结果可能不符合预期,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param user SysUserEntity对象,包含了要保存数据权限的安全管理员的各项详细信息,将其传递给业务逻辑层进行数据权限保存操作。 + * @param model ModelAndView对象,在当前方法中未实际使用,主要是为了符合Spring MVC请求处理方法的统一签名格式,可根据业务需求在后续扩展中对其进行相应的操作,比如添加更多的数据传递等功能。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端安全管理员数据权限保存操作的结果情况。 + */ + @RequestMapping(path = "save") @ResponseBody - public Result save(SysUserEntity user , ModelAndView model) { - iSysUserService.saveUserDataScope(user , SysUserMgrTypeEnum.SEC_ADMIN); - return Result.result(0, null, "【"+user.getUserName()+"】保存数据权限成功!"); + public Result save(SysUserEntity user, ModelAndView model) { + iSysUserService.saveUserDataScope(user, SysUserMgrTypeEnum.SEC_ADMIN); + return Result.result(0, null, "【" + user.getUserName() + "】保存数据权限成功!"); } - - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/secAdmin/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的安全管理员列表数据,返回结果以适合前端表格组件(如jqGrid等)使用的格式包装在Map中,并以JSON格式响应给客户端。 + * 该方法接收一个SysUserCondition对象作为参数,这个对象应该是自定义的用于封装查询安全管理员列表时的各种条件的类(例如可以包含查询关键字、分页信息等条件),通过调用ISysUserService的listData方法,根据传入的条件查询安全管理员列表,返回的结果是一个Page对象(表示分页后的用户实体对象列表,由MyBatis Plus的分页插件生成相关分页信息),然后调用Result.jqGridResult方法将分页信息(总记录数、每页记录数、当前页码、总页数等)以及实际的管理员记录数据进行整合,包装成一个Map对象(符合前端表格组件期望的格式),最后通过@ResponseBody注解将这个Map对象转换为JSON格式返回给客户端,供前端表格组件进行数据展示和分页等操作。 + * 这里指定请求方法为RequestMethod.POST,可能是基于业务逻辑要求或者与前端交互的约定,确保该接口只处理POST请求方式的查询管理员列表数据的操作。 + * + * @param condition SysUserCondition对象,用于传递查询安全管理员列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的管理员列表数据。 + * @return 返回一个Map对象,其中包含了适合前端表格组件展示的安全管理员列表数据以及相关的分页信息,该Map对象会被转换为JSON格式响应给客户端,用于前端展示管理员列表信息并进行分页等操作。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public Map listData(SysUserCondition condition) { Page page = iSysUserService.listData(condition); return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages()); } -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysAreaController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysAreaController.java index 1e6b630..4a62924 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysAreaController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysAreaController.java @@ -15,31 +15,59 @@ import com.tamguo.modules.sys.model.SysAreaEntity; import com.tamguo.modules.sys.model.condition.SysAreaCondition; import com.tamguo.modules.sys.service.ISysAreaService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与系统地区相关的Web请求,它会根据不同的请求路径调用对应的业务逻辑方法,然后将处理结果以合适的形式(如视图展示或JSON数据返回)反馈给客户端,是实现地区业务模块在Web端交互的核心部分。 @Controller -@RequestMapping(path="sys/area") +// 通过@RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,表明该控制器主要处理以"sys/area"开头的请求,便于对地区相关的各类请求进行统一管理与分类。 +@RequestMapping(path = "sys/area") public class SysAreaController { + // 定义一个常量字符串,表示地区列表页面(通常作为地区管理模块的首页)的视图名称,遵循Spring MVC视图解析的配置规则,其对应着实际用于展示地区列表相关内容的模板文件路径(例如可能是JSP、Thymeleaf等模板文件的具体路径)。 private final String AREA_INDEX_PAGE = "modules/sys/area/index"; + // 定义常量字符串,代表添加地区页面的视图名称,对应着展示添加地区相关表单及信息的模板文件路径,用于在添加新地区时向用户呈现相应的输入界面。 private final String AREA_ADD_PAGE = "modules/sys/area/add"; + // 定义常量字符串,用于表示修改地区信息页面的视图名称,对应展示修改地区已有信息相关内容的模板文件路径,方便用户对已存在的地区记录进行编辑操作。 private final String AREA_UPDATE_PAGE = "modules/sys/area/update"; + // 通过@Autowired注解自动注入ISysAreaService接口的实现类实例,用于调用与地区相关的业务逻辑方法,例如查询地区信息、保存地区数据、更新地区记录以及获取地区数据的树形结构等操作,以此实现控制器层与业务逻辑层之间的交互,完成地区相关业务的具体处理。 @Autowired - private ISysAreaService iSysAreaService; - - @RequestMapping(path="index") + private ISysAreaService iSysAreaService; + + /** + * 处理路径为"sys/area/index"的请求的方法,该方法的作用是返回地区列表页面的视图名称。 + * 当客户端发起对应的请求时,此方法被调用,它仅仅是简单地将预先定义好的地区列表页面视图名称(AREA_INDEX_PAGE)返回给Spring MVC框架,然后由框架根据视图解析配置找到对应的模板文件进行渲染展示,向客户端呈现地区列表页面。 + * 此方法没有接收额外的参数,也未对ModelAndView对象进行数据添加等操作,只是负责视图名称的返回,以引导页面展示。 + * @return 返回地区列表页面的视图名称(即常量AREA_INDEX_PAGE所定义的值),供Spring MVC查找并渲染对应的视图模板文件,从而展示地区列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index() { return AREA_INDEX_PAGE; } - - @RequestMapping(path="add") - public ModelAndView add(String parentCode , ModelAndView model) { + + /** + * 处理路径为"sys/area/add"的请求的方法,用于准备并返回添加地区页面相关的数据和视图信息。 + * 当客户端发起该请求时,方法会被调用,首先将返回的视图名称设置为添加地区页面的视图名称(AREA_ADD_PAGE),然后通过注入的ISysAreaService实例,依据传入的parentCode参数去查询对应的上级地区信息,并将查询到的上级地区对象添加到ModelAndView对象中,以便在视图层(如对应的模板文件中)可以获取并展示该上级地区相关信息(可能用于显示当前要添加地区所属的上级区域等场景),最后返回包含了设置好的视图名称以及上级地区对象数据的ModelAndView对象,使得Spring MVC能够依据这些信息正确渲染展示添加地区页面。 + * + * @param parentCode 从请求中传递过来的字符串参数,用于指定要查询的上级地区的唯一标识(具体的标识形式取决于业务中地区实体类的设计以及业务逻辑,可能是地区编号等),借助这个参数去获取对应的上级地区信息,用于添加地区页面的相关展示和关联操作。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的上级地区对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示,满足添加地区页面的业务需求。 + * @return 返回包含了设置好的视图名称(AREA_ADD_PAGE)以及添加了上级地区对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现添加地区页面给客户端。 + */ + @RequestMapping(path = "add") + public ModelAndView add(String parentCode, ModelAndView model) { model.setViewName(AREA_ADD_PAGE); model.addObject("parentArea", iSysAreaService.selectById(parentCode)); return model; } - - @RequestMapping(path="update") - public ModelAndView update(String areaCode , ModelAndView model) { + + /** + * 处理路径为"sys/area/update"的请求的方法,用于准备并返回修改地区信息页面相关的数据和视图。 + * 当客户端发起对应请求时,该方法首先设置要返回的视图名称为修改地区信息页面的视图名称(AREA_UPDATE_PAGE),接着通过ISysAreaService查询要修改的地区本身的信息以及其上级地区信息(通过地区实体类中的parentCode属性关联查询),并分别将查询到的地区对象和上级地区对象添加到ModelAndView对象中,以便在视图层展示地区当前信息以及所属的上级地区情况,方便用户进行修改操作,最后返回包含了视图名称和这些数据的ModelAndView对象,以便Spring MVC进行视图渲染展示修改地区信息页面给客户端。 + * + * @param areaCode 从请求中传递过来的字符串参数,用于指定要修改的地区的唯一标识(如地区编号等,具体由业务中地区实体类的设计决定),根据这个标识去查询相关的地区及其上级地区信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的地区对象和上级地区对象数据,实现数据与视图的整合,确保视图层能获取到完整信息用于修改地区信息页面的展示和操作。 + * @return 返回包含了设置好视图名称(AREA_UPDATE_PAGE)以及添加了地区对象和上级地区对象数据的ModelAndView对象,供Spring MVC渲染展示修改地区信息页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String areaCode, ModelAndView model) { model.setViewName(AREA_UPDATE_PAGE); SysAreaEntity area = iSysAreaService.selectById(areaCode); SysAreaEntity parentArea = iSysAreaService.selectById(area.getParentCode()); @@ -47,41 +75,69 @@ public class SysAreaController { model.addObject("parentArea", parentArea); return model; } - - @RequestMapping(path="save") + + /** + * 处理路径为"sys/area/save"的请求的方法,用于保存新的地区信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysAreaEntity对象作为参数,这个对象包含了要保存的地区的各项详细信息(如地区名称、上级地区编号、地区描述等,具体属性取决于业务中地区实体类的设计),通过调用ISysAreaService的save方法尝试保存地区信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及地区的名称等相关内容);若保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param area SysAreaEntity对象,包含了要保存的新地区的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端地区保存操作的结果情况。 + */ + @RequestMapping(path = "save") @ResponseBody public Result save(SysAreaEntity area) { try { iSysAreaService.save(area); - return Result.result(0, null, "保存【"+area.getAreaName()+"】地区成功!"); + return Result.result(0, null, "保存【" + area.getAreaName() + "】地区成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("保存地区", this.getClass(), e); } } - - @RequestMapping(path="update",method=RequestMethod.POST) + + /** + * 处理路径为"sys/area/update"(且请求方法为POST的请求)的请求的方法,用于更新地区信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存地区信息的方法类似,接收一个SysAreaEntity对象作为参数,包含了要更新的地区的各项信息,通过调用ISysAreaService的update方法进行地区信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功以及地区的名称等相关内容);若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 这里特别指定了请求方法为RequestMethod.POST,符合常见的RESTful风格接口设计原则,表明该方法只处理POST类型的更新地区信息的请求,以此与其他可能存在的同名但不同请求方法的请求进行区分,确保接口的规范性和准确性。 + * + * @param area SysAreaEntity对象,包含了要更新的地区的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端地区更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysAreaEntity area) { try { iSysAreaService.update(area); - return Result.result(0, null, "修改【"+area.getAreaName()+"】地区成功!"); + return Result.result(0, null, "修改【" + area.getAreaName() + "】地区成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("修改地区", this.getClass(), e); } } - - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/area/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的地区列表数据,返回结果以JSON格式响应给客户端。 + * 该方法接收一个SysAreaCondition对象作为参数,这个对象是自定义的用于封装查询地区列表时各种条件的类(例如可以包含查询关键字、分页信息、地区级别筛选等条件,具体取决于业务需求),通过调用ISysAreaService的listData方法,依据传入的条件查询地区列表,最后直接返回查询到的地区实体对象列表(List),Spring MVC会借助@ResponseBody注解将其转换为JSON格式发送给客户端,供前端进行列表展示等操作,方便用户查看和管理地区信息。 + * + * @param condition SysAreaCondition对象,用于传递查询地区列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的地区列表数据,满足不同业务场景下对地区数据查询的需求。 + * @return 返回符合条件的地区实体对象列表,会被自动转换为JSON格式响应给客户端,用于前端展示地区列表信息。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public List listData(SysAreaCondition condition) { List list = iSysAreaService.listData(condition); return list; } - - @RequestMapping(path="treeData") + + /** + * 处理路径为"sys/area/treeData"的请求的方法,用于查询并返回地区数据的树形结构表示形式(常用于在前端以树形结构展示地区的层级关系,例如省、市、县等层级),返回结果以JSON格式响应给客户端。 + * 方法接收一个字符串参数excludeId(具体含义可能是用于排除某个特定地区节点及其子节点的标识,比如在生成树形结构时不包含某个特定地区及其下属地区等情况,具体取决于业务逻辑和需求),然后调用ISysAreaService的treeData方法根据这个参数生成地区数据的树形结构,返回的结果是JSONArray类型(适合表示JSON格式的数组,方便存储树形结构的节点数据以及节点之间的层级关系等信息),通过@ResponseBody注解将其转换为JSON格式返回给客户端,便于前端进行树形结构的展示和交互操作,例如展开、收缩树形节点,查看不同层级地区信息等。 + * + * @param excludeId 从请求中传递过来的字符串参数,用于在生成地区数据树形结构时作为排除某些节点的依据,根据业务需求来控制树形结构的生成内容,满足不同场景下展示地区层级关系的要求。 + * @return 返回表示地区数据树形结构的JSONArray对象,会被转换为JSON格式响应给客户端,供前端展示地区的层级关系等树形结构相关内容。 + */ + @RequestMapping(path = "treeData") @ResponseBody public JSONArray treeData(String excludeId) { return iSysAreaService.treeData(excludeId); } - - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysMenuController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysMenuController.java index eed6614..ba86bc7 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysMenuController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysMenuController.java @@ -15,23 +15,42 @@ import com.tamguo.modules.sys.model.SysMenuEntity; import com.tamguo.modules.sys.model.condition.SysMenuCondition; import com.tamguo.modules.sys.service.ISysMenuService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与系统菜单相关的Web请求,它依据不同的请求路径调用对应的业务逻辑方法,来实现诸如菜单展示、保存、更新以及获取菜单列表、树形结构等功能,并将处理结果以合适的形式(视图展示或JSON数据返回)反馈给客户端,是系统菜单业务模块在Web端交互的关键部分。 @Controller -@RequestMapping(path="sys/menu") +// 通过@RequestMapping注解为该控制器类下所有请求路径设置公共前缀,表明此控制器主要处理以"sys/menu"开头的请求,便于对系统菜单相关的各类请求进行统一管理和分类。 +@RequestMapping(path = "sys/menu") public class SysMenuController { + // 定义一个常量字符串,表示系统菜单列表页面(通常作为菜单管理模块的首页)的视图名称,按照Spring MVC视图解析的配置规则,其对应着实际用于展示系统菜单列表相关内容的模板文件路径(例如可能是JSP、Thymeleaf等模板文件的具体路径)。 private final String MENU_INDEX_PAGE = "modules/sys/menu/index"; + // 定义常量字符串,代表修改系统菜单信息页面的视图名称,对应展示修改菜单已有信息相关内容的模板文件路径,方便用户对已存在的菜单记录进行编辑操作。 private final String MENU_UPDATE_PAGE = "modules/sys/menu/update"; + // 通过@Autowired注解自动注入ISysMenuService接口的实现类实例,用于调用与系统菜单相关的业务逻辑方法,比如查询菜单信息、保存菜单数据、更新菜单记录以及获取菜单数据的树形结构、列表数据等操作,以此实现控制器层与业务逻辑层之间的交互,完成系统菜单相关业务的具体处理。 @Autowired private ISysMenuService iSysMenuService; - @RequestMapping(path="index") + /** + * 处理路径为"sys/menu/index"的请求的方法,该方法的作用是返回系统菜单列表页面的视图名称。 + * 当客户端发起对应的请求时,此方法被调用,它简单地将预先定义好的系统菜单列表页面视图名称(MENU_INDEX_PAGE)返回给Spring MVC框架,然后框架会依据视图解析配置找到对应的模板文件进行渲染展示,向客户端呈现系统菜单列表页面。 + * 此方法没有接收额外参数,也未对返回结果做更多复杂处理,仅是负责返回视图名称以引导页面展示。 + * @return 返回系统菜单列表页面的视图名称(即常量MENU_INDEX_PAGE所定义的值),供Spring MVC查找并渲染对应的视图模板文件,从而展示系统菜单列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index() { return MENU_INDEX_PAGE; } - - @RequestMapping(path="update") - public ModelAndView update(String menuCode , ModelAndView model) { + + /** + * 处理路径为"sys/menu/update"的请求的方法,用于准备并返回修改系统菜单信息页面相关的数据和视图。 + * 当客户端发起该请求时,方法会被调用,首先将返回的视图名称设置为修改系统菜单信息页面的视图名称(MENU_UPDATE_PAGE),接着通过注入的ISysMenuService实例,依据传入的menuCode参数去查询要修改的菜单本身信息以及其上级菜单信息(通过菜单实体类中的parentCode属性关联查询),并分别将查询到的菜单对象和上级菜单对象添加到ModelAndView对象中,以便在视图层展示菜单当前信息以及所属的上级菜单情况,方便用户进行修改操作,最后返回包含了视图名称和这些数据的ModelAndView对象,以便Spring MVC进行视图渲染展示修改系统菜单信息页面给客户端。 + * + * @param menuCode 从请求中传递过来的字符串参数,用于指定要修改的菜单的唯一标识(如菜单编号等,具体由业务中菜单实体类的设计决定),根据这个标识去查询相关的菜单及其上级菜单信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的菜单对象和上级菜单对象数据,实现数据与视图的整合,确保视图层能获取到完整信息用于修改系统菜单信息页面的展示和操作。 + * @return 返回包含了设置好视图名称(MENU_UPDATE_PAGE)以及添加了菜单对象和上级菜单对象数据的ModelAndView对象,供Spring MVC渲染展示修改系统菜单信息页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String menuCode, ModelAndView model) { model.setViewName(MENU_UPDATE_PAGE); SysMenuEntity menu = iSysMenuService.selectById(menuCode); SysMenuEntity parentMenu = iSysMenuService.selectById(menu.getParentCode()); @@ -39,40 +58,71 @@ public class SysMenuController { model.addObject("parentMenu", parentMenu); return model; } - - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/menu/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的系统菜单列表数据,返回结果以JSON格式响应给客户端。 + * 该方法接收一个SysMenuCondition对象作为参数,这个对象是自定义的用于封装查询系统菜单列表时各种条件的类(例如可以包含查询关键字、分页信息、菜单类型筛选等条件,具体取决于业务需求),通过调用ISysMenuService的listData方法,依据传入的条件查询系统菜单列表,最后直接返回查询到的系统菜单实体对象列表(List),Spring MVC会借助@ResponseBody注解将其转换为JSON格式发送给客户端,供前端进行列表展示等操作,方便用户查看和管理系统菜单信息。 + * + * @param condition SysMenuCondition对象,用于传递查询系统菜单列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的系统菜单列表数据,满足不同业务场景下对系统菜单数据查询的需求。 + * @return 返回符合条件的系统菜单实体对象列表,会被自动转换为JSON格式响应给客户端,用于前端展示系统菜单列表信息。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public List listData(SysMenuCondition condition) { List list = iSysMenuService.listData(condition); return list; } - - @RequestMapping(path="save") + + /** + * 处理路径为"sys/menu/save"的请求的方法,用于保存新的系统菜单信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysMenuEntity对象作为参数,这个对象包含了要保存的系统菜单的各项详细信息(如菜单名称、上级菜单编号、菜单链接、菜单图标等,具体属性取决于业务中菜单实体类的设计),通过调用ISysMenuService的save方法尝试保存菜单信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及菜单的名称等相关内容);若保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param menu SysMenuEntity对象,包含了要保存的新系统菜单的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端系统菜单保存操作的结果情况。 + */ + @RequestMapping(path = "save") @ResponseBody public Result save(SysMenuEntity menu) { try { iSysMenuService.save(menu); - return Result.result(0, null, "新增菜单【"+menu.getMenuName()+"】成功!"); + return Result.result(0, null, "新增菜单【" + menu.getMenuName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("新增菜单", this.getClass(), e); } } - - @RequestMapping(path="update" , method=RequestMethod.POST) + + /** + * 处理路径为"sys/menu/update"(且请求方法为POST的请求)的请求的方法,用于更新系统菜单信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存系统菜单信息的方法类似,接收一个SysMenuEntity对象作为参数,包含了要更新的系统菜单的各项信息,通过调用ISysMenuService的update方法进行系统菜单信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功以及菜单的名称等相关内容);若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 这里指定请求方法为RequestMethod.POST,符合常见的RESTful风格接口设计原则,表明该方法只处理POST类型的更新系统菜单信息的请求,以此与其他可能存在的同名但不同请求方法的请求进行区分,确保接口的规范性和准确性。 + * + * @param menu SysMenuEntity对象,包含了要更新的系统菜单的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端系统菜单更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result post(SysMenuEntity menu) { try { iSysMenuService.update(menu); - return Result.result(0, null, "修改菜单【"+menu.getMenuName()+"】成功!"); + return Result.result(0, null, "修改菜单【" + menu.getMenuName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("修改菜单", this.getClass(), e); } } - - @RequestMapping(path="treeData") + + /** + * 处理路径为"sys/menu/treeData"的请求的方法,用于查询并返回系统菜单数据的树形结构表示形式(常用于在前端以树形结构展示菜单的层级关系,例如一级菜单、二级菜单等层级),返回结果以JSON格式响应给客户端。 + * 方法接收三个字符串参数,其中excludeId(具体含义可能是用于排除某个特定菜单节点及其子节点的标识,比如在生成树形结构时不包含某个特定菜单及其下属菜单等情况,具体取决于业务逻辑和需求),另外两个参数sysCode和isShowNameOrig在当前代码中虽然传入了方法,但并没有在调用iSysMenuService.treeData方法时使用(可能是后续需要扩展功能或者原本设计有其他用途但暂未实现相关逻辑),然后调用ISysMenuService的treeData方法根据excludeId参数生成系统菜单数据的树形结构,返回的结果是JSONArray类型(适合表示JSON格式的数组,方便存储树形结构的节点数据以及节点之间的层级关系等信息),通过@ResponseBody注解将其转换为JSON格式返回给客户端,便于前端进行树形结构的展示和交互操作,例如展开、收缩树形节点,查看不同层级菜单信息等。 + * + * @param excludeId 从请求中传递过来的字符串参数,用于在生成系统菜单数据树形结构时作为排除某些节点的依据,根据业务需求来控制树形结构的生成内容,满足不同场景下展示系统菜单层级关系的要求。 + * @param sysCode 从请求中传递过来的字符串参数,当前代码未使用其参与业务逻辑处理,可能是预留用于后续功能扩展或者原本有其他相关设计意图但暂未实现对应逻辑。 + * @param isShowNameOrig 从请求中传递过来的字符串参数,同样当前代码未使用其参与业务逻辑处理,可能是为了后续功能拓展等情况预留的参数。 + * @return 返回表示系统菜单数据树形结构的JSONArray对象,会被转换为JSON格式响应给客户端,供前端展示系统菜单的层级关系等树形结构相关内容。 + */ + @RequestMapping(path = "treeData") @ResponseBody - public JSONArray treeData(String excludeId , String sysCode , String isShowNameOrig) { + public JSONArray treeData(String excludeId, String sysCode, String isShowNameOrig) { return iSysMenuService.treeData(excludeId); } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysOfficeController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysOfficeController.java index 56b74fb..ef4ffd5 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysOfficeController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysOfficeController.java @@ -1,7 +1,6 @@ package com.tamguo.modules.sys.web; import java.util.List; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -18,69 +17,133 @@ import com.tamguo.modules.sys.service.ISysOfficeService; /** * Controller - 组织 - * + * 这个类是Spring MVC中的控制器类,主要负责处理与系统组织(机构)相关的Web请求, + * 通过调用对应的业务服务层方法,实现诸如组织信息的添加、更新、查询列表以及获取树形结构等功能, + * 并将相应的处理结果以合适的形式(如视图展示或JSON数据返回)反馈给客户端,是组织业务模块在Web应用中进行交互操作的核心部分。 + * * @author tamguo * */ @Controller -@RequestMapping(path="sys/office") +// 通过@RequestMapping注解为这个控制器类下所有请求路径设置公共前缀,表明该控制器主要处理以"sys/office"开头的请求,便于对组织(机构)相关的各类请求进行统一管理与分类。 +@RequestMapping(path = "sys/office") public class SysOfficeController { - + + // 定义一个常量字符串,表示添加组织(机构)页面的视图名称,按照Spring MVC视图解析的配置规则,其对应着实际用于展示添加机构相关表单及信息的模板文件路径(例如可能是JSP、Thymeleaf等模板文件的具体路径),用于在新增机构时向用户呈现相应的输入界面。 private final String OFFICE_ADD_PAGE = "modules/sys/office/add"; + // 定义常量字符串,用于表示修改组织(机构)信息页面的视图名称,对应展示修改机构已有信息相关内容的模板文件路径,方便用户对已存在的机构记录进行编辑操作。 private final String OFFICE_UPDATE_PAGE = "modules/sys/office/update"; + // 通过@Autowired注解自动注入ISysOfficeService接口的实现类实例,用于调用与组织(机构)相关的业务逻辑方法,例如查询机构信息、保存机构数据、更新机构记录以及获取机构数据的树形结构、列表数据等操作,以此实现控制器层与业务逻辑层之间的交互,完成组织(机构)相关业务的具体处理。 @Autowired - private ISysOfficeService iSysOfficeService; - - @RequestMapping(path="add") - public ModelAndView add(String parentCode , ModelAndView model) { + private ISysOfficeService iSysOfficeService; + + /** + * 处理路径为"sys/office/add"的请求的方法,用于准备并返回添加组织(机构)页面相关的数据和视图信息。 + * 当客户端发起该请求时,此方法会被调用,首先将返回的视图名称设置为添加组织(机构)页面的视图名称(OFFICE_ADD_PAGE), + * 然后通过注入的ISysOfficeService实例,依据传入的parentCode参数去查询对应的上级组织(机构)信息,并将查询到的上级机构对象添加到ModelAndView对象中, + * 以便在视图层(如对应的模板文件中)可以获取并展示该上级机构相关信息(可能用于显示当前要添加机构所属的上级组织等场景), + * 最后返回包含了设置好的视图名称以及上级机构对象数据的ModelAndView对象,使得Spring MVC能够依据这些信息正确渲染展示添加组织(机构)页面。 + * + * @param parentCode 从请求中传递过来的字符串参数,用于指定要查询的上级组织(机构)的唯一标识(具体的标识形式取决于业务中机构实体类的设计以及业务逻辑,可能是机构编号等),借助这个参数去获取对应的上级机构信息,用于添加机构页面的相关展示和关联操作。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的上级机构对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示,满足添加机构页面的业务需求。 + * @return 返回包含了设置好的视图名称(OFFICE_ADD_PAGE)以及添加了上级机构对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现添加组织(机构)页面给客户端。 + */ + @RequestMapping(path = "add") + public ModelAndView add(String parentCode, ModelAndView model) { model.setViewName(OFFICE_ADD_PAGE); model.addObject("parentOffice", iSysOfficeService.selectById(parentCode)); return model; } - - @RequestMapping(path="update") - public ModelAndView update(String officeCode , ModelAndView model) { + + /** + * 处理路径为"sys/office/update"的请求的方法,用于准备并返回修改组织(机构)信息页面相关的数据和视图。 + * 当客户端发起对应请求时,该方法首先设置要返回的视图名称为修改组织(机构)信息页面的视图名称(OFFICE_UPDATE_PAGE), + * 接着通过ISysOfficeService查询要修改的机构本身的信息以及其上级机构信息(通过机构实体类中的parentCode属性关联查询),并分别将查询到的机构对象和上级机构对象添加到ModelAndView对象中, + * 以便在视图层展示机构当前信息以及所属的上级机构情况,方便用户进行修改操作,最后返回包含了视图名称和这些数据的ModelAndView对象,以便Spring MVC进行视图渲染展示修改组织(机构)信息页面给客户端。 + * + * @param officeCode 从请求中传递过来的字符串参数,用于指定要修改的机构的唯一标识(如机构编号等,具体由业务中机构实体类的设计决定),根据这个标识去查询相关的机构及其上级机构信息。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的机构对象和上级机构对象数据,实现数据与视图的整合,确保视图层能获取到完整信息用于修改组织(机构)信息页面的展示和操作。 + * @return 返回包含了设置好视图名称(OFFICE_UPDATE_PAGE)以及添加了机构对象和上级机构对象数据的ModelAndView对象,供Spring MVC渲染展示修改组织(机构)信息页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String officeCode, ModelAndView model) { model.setViewName(OFFICE_UPDATE_PAGE); SysOfficeEntity office = iSysOfficeService.selectById(officeCode); SysOfficeEntity parentOffice = iSysOfficeService.selectById(office.getParentCode()); model.addObject("office", office); - model.addObject("parentOffice" , parentOffice); + model.addObject("parentOffice", parentOffice); return model; } - - @RequestMapping(path="listData") + + /** + * 处理路径为"sys/office/listData"的请求的方法,用于查询并返回符合条件的组织(机构)列表数据,返回结果以JSON格式响应给客户端。 + * 该方法接收一个SysOfficeCondition对象作为参数,这个对象是自定义的用于封装查询机构列表时各种条件的类(例如可以包含查询关键字、分页信息、机构级别筛选等条件,具体取决于业务需求), + * 通过调用ISysOfficeService的listData方法,依据传入的条件查询机构列表,最后直接返回查询到的机构实体对象列表(List), + * Spring MVC会借助@ResponseBody注解将其转换为JSON格式发送给客户端,供前端进行列表展示等操作,方便用户查看和管理机构信息。 + * + * @param condition SysOfficeCondition对象,用于传递查询组织(机构)列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的机构列表数据,满足不同业务场景下对机构数据查询的需求。 + * @return 返回符合条件的组织(机构)实体对象列表,会被自动转换为JSON格式响应给客户端,用于前端展示机构列表信息。 + */ + @RequestMapping(path = "listData") @ResponseBody public List listData(SysOfficeCondition condition) { return iSysOfficeService.listData(condition); } - - @RequestMapping(path="treeData") + + /** + * 处理路径为"sys/office/treeData"的请求的方法,用于查询并返回组织(机构)数据的树形结构表示形式(常用于在前端以树形结构展示机构的层级关系,例如总公司、分公司、部门等层级),返回结果以JSON格式响应给客户端。 + * 方法接收一个字符串参数excludeId(具体含义可能是用于排除某个特定机构节点及其子节点的标识,比如在生成树形结构时不包含某个特定机构及其下属机构等情况,具体取决于业务逻辑和需求), + * 然后调用ISysOfficeService的treeData方法根据这个参数生成机构数据的树形结构,返回的结果是JSONArray类型(适合表示JSON格式的数组,方便存储树形结构的节点数据以及节点之间的层级关系等信息), + * 通过@ResponseBody注解将其转换为JSON格式返回给客户端,便于前端进行树形结构的展示和交互操作,例如展开、收缩树形节点,查看不同层级机构信息等。 + * + * @param excludeId 从请求中传递过来的字符串参数,用于在生成组织(机构)数据树形结构时作为排除某些节点的依据,根据业务需求来控制树形结构的生成内容,满足不同场景下展示机构层级关系的要求。 + * @return 返回表示组织(机构)数据树形结构的JSONArray对象,会被转换为JSON格式响应给客户端,供前端展示机构的层级关系等树形结构相关内容。 + */ + @RequestMapping(path = "treeData") @ResponseBody public JSONArray treeData(String excludeId) { return iSysOfficeService.treeData(excludeId); } - - @RequestMapping(path="save") + + /** + * 处理路径为"sys/office/save"的请求的方法,用于保存新的组织(机构)信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysOfficeEntity对象作为参数,这个对象包含了要保存的机构的各项详细信息(如机构名称、上级机构编号、机构描述等,具体属性取决于业务中机构实体类的设计), + * 通过调用ISysOfficeService的save方法尝试保存机构信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及机构的名称等相关内容); + * 若保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param office SysOfficeEntity对象,包含了要保存的新组织(机构)的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端组织(机构)保存操作的结果情况。 + */ + @RequestMapping(path = "save") @ResponseBody public Result save(SysOfficeEntity office) { try { iSysOfficeService.save(office); - return Result.result(0, null, "新增机构【"+office.getOfficeName()+"】成功!"); + return Result.result(0, null, "新增机构【" + office.getOfficeName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("新增机构", this.getClass(), e); } } - - @RequestMapping(path="update",method=RequestMethod.POST) + + /** + * 处理路径为"sys/office/update"(且请求方法为POST的请求)的请求的方法,用于更新组织(机构)信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存机构信息的方法类似,接收一个SysOfficeEntity对象作为参数,包含了要更新的机构的各项信息,通过调用ISysOfficeService的update方法进行机构信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功以及机构的名称等相关内容); + * 若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 这里指定请求方法为RequestMethod.POST,符合常见的RESTful风格接口设计原则,表明该方法只处理POST类型的更新组织(机构)信息的请求,以此与其他可能存在的同名但不同请求方法的请求进行区分,确保接口的规范性和准确性。 + * + * @param office SysOfficeEntity对象,包含了要更新的组织(机构)的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端组织(机构)更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysOfficeEntity office) { try { iSysOfficeService.update(office); - return Result.result(0, null, "修改机构【"+office.getOfficeName()+"】成功!"); + return Result.result(0, null, "修改机构【" + office.getOfficeName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("修改机构", this.getClass(), e); } } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPageController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPageController.java index 65f110b..7432391 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPageController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPageController.java @@ -6,18 +6,38 @@ import org.springframework.web.bind.annotation.RequestMapping; /** * 页面视图 + * 这个类是Spring MVC中的控制器类,主要负责根据不同的请求路径,返回对应的视图名称,以引导Spring MVC框架找到相应的模板文件进行页面渲染展示, + * 起到了将请求与具体视图进行映射的作用,方便在Web应用中实现不同模块下不同页面的展示逻辑,这里涉及到了系统模块("sys"相关)和题库模块("tiku"相关)的页面视图处理。 */ @Controller public class SysPageController { - + + /** + * 处理路径格式为"sys/{fn}/{page}"的请求的方法,用于根据请求路径中的参数动态返回对应的系统模块下的视图名称。 + * 通过 @PathVariable 注解,从请求路径中提取出 "fn" 和 "page" 这两个占位符对应的实际值,然后将它们拼接成完整的视图名称路径格式(遵循项目中视图解析配置对应的路径规则,这里是拼接成 "modules/sys/" 加上具体的 "fn" 和 "page" 值), + * 最后返回这个拼接好的视图名称字符串,Spring MVC框架会依据此名称去查找对应的模板文件(如JSP、Thymeleaf等格式的文件,具体取决于项目配置),并进行渲染展示,呈现出相应的系统模块下的页面给客户端。 + * + * @param fn 从请求路径中通过 @PathVariable 注解获取的字符串参数,代表系统模块下的功能分类或者文件夹名称等(具体含义取决于项目中视图文件的组织方式和业务逻辑),用于构建完整的视图名称路径。 + * @param page 从请求路径中通过 @PathVariable 注解获取的字符串参数,代表具体的页面文件名(同样具体含义取决于项目的视图组织和业务逻辑),与 "fn" 参数一起构成完整的视图名称路径,指向要展示的具体页面视图文件。 + * @return 返回拼接好的视图名称字符串(格式为 "modules/sys/" + fn + "/" + page),供Spring MVC查找并渲染对应的视图模板文件,展示系统模块下相应的页面给客户端。 + */ @RequestMapping("sys/{fn}/{page}") - public String sys(@PathVariable("fn") String fn , @PathVariable("page") String page){ + public String sys(@PathVariable("fn") String fn, @PathVariable("page") String page) { return "modules/sys/" + fn + "/" + page; } - + + /** + * 处理路径格式为"tiku/{fn}/{page}"的请求的方法,与上面的 "sys" 相关的方法类似,用于根据请求路径中的参数动态返回对应的题库模块下的视图名称。 + * 同样借助 @PathVariable 注解获取请求路径中的 "fn" 和 "page" 参数值,将它们按照既定的路径格式拼接成完整的视图名称(即 "modules/tiku/" 加上具体的 "fn" 和 "page" 值),再返回这个视图名称字符串给Spring MVC框架, + * 使得框架能依据其找到对应的题库模块下的模板文件进行渲染展示,从而向客户端呈现相应的题库模块页面。 + * + * @param fn 从请求路径中通过 @PathVariable 注解获取的字符串参数,在题库模块下代表相应的功能分类或者文件夹名称等(具体含义由项目中视图文件的组织情况和业务逻辑决定),用于构建准确的视图名称路径指向相应页面。 + * @param page 从请求路径中通过 @PathVariable 注解获取的字符串参数,代表题库模块下具体的页面文件名(具体取决于项目视图组织和业务逻辑),与 "fn" 参数共同组成完整的视图名称路径,确定要展示的具体页面视图文件。 + * @return 返回拼接好的视图名称字符串(格式为 "modules/tiku/" + fn + "/" + page),供Spring MVC查找并渲染对应的视图模板文件,展示题库模块下相应的页面给客户端。 + */ @RequestMapping("tiku/{fn}/{page}") - public String ti(@PathVariable("fn") String fn , @PathVariable("page") String page){ + public String ti(@PathVariable("fn") String fn, @PathVariable("page") String page) { return "modules/tiku/" + fn + "/" + page; } - -} + +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPostController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPostController.java index ec3ab56..4581354 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPostController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysPostController.java @@ -15,43 +15,85 @@ import com.tamguo.modules.sys.model.SysPostEntity; import com.tamguo.modules.sys.model.condition.SysPostCondition; import com.tamguo.modules.sys.service.ISysPostService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与系统岗位相关的Web请求,调用相应的业务逻辑方法,并根据处理结果返回给客户端合适的响应或者转发到对应的视图进行展示,是实现岗位业务模块页面交互和数据处理的关键部分。 @Controller -@RequestMapping(path="sys/post") +// 通过@RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,即该控制器处理的请求路径都以"sys/post"开头,便于对岗位相关的各种请求进行统一管理和分类。 +@RequestMapping(path = "sys/post") public class SysPostController { + // 定义一个常量字符串,表示岗位列表页面(或首页)的视图名称,遵循Spring MVC视图解析的配置规则,对应着展示岗位列表相关内容的模板文件路径(如JSP、Thymeleaf等模板文件的具体路径)。 private final String POST_INDEX_PAGE = "modules/sys/post/index"; + // 定义常量字符串,代表岗位信息更新页面的视图名称,对应展示修改岗位信息相关内容的模板文件路径。 private final String POST_UPDATE_PAGE = "modules/sys/post/update"; + // 定义常量字符串,用于表示岗位添加页面的视图名称,对应展示添加新岗位相关内容的模板文件路径。 private final String POST_ADD_PAGE = "modules/sys/post/add"; - + + // 通过@Autowired注解自动注入ISysPostService接口的实现类实例,用于调用与系统岗位相关的业务逻辑方法,比如查询、保存、更新岗位信息等操作,实现控制器层与业务逻辑层的交互。 @Autowired private ISysPostService iSysPostService; - @RequestMapping(path="index") + /** + * 处理路径为"sys/post/index"的请求的方法,用于返回岗位列表页面的视图名称。 + * 当客户端发起对应的请求时,该方法被调用,其主要功能就是告知Spring MVC要渲染展示的视图对应的名称,以便找到对应的模板文件进行页面展示(这里只是简单返回视图名称,具体页面内容的渲染由视图层根据配置和模板文件来完成)。 + * + * @return 返回岗位列表页面的视图名称(即常量POST_INDEX_PAGE所定义的值),Spring MVC根据这个名称去查找并渲染对应的视图模板文件,展示岗位列表页面给客户端。 + */ + @RequestMapping(path = "index") public String index() { return POST_INDEX_PAGE; } - - @RequestMapping(path="update") - public ModelAndView update(ModelAndView model , String id) { + + /** + * 处理路径为"sys/post/update"的请求的方法,用于准备并返回岗位信息更新页面相关的数据和视图。 + * 当客户端发起该请求时,方法会被调用,先向ModelAndView对象中添加一些用于页面展示的数据,比如设置页面标题为"修改岗位",然后通过注入的ISysPostService实例,根据传入的id参数查询对应的岗位信息,并将查询到的岗位对象添加到ModelAndView对象中,接着设置要返回的视图名称为岗位信息更新页面的视图名称(POST_UPDATE_PAGE),最后返回包含了视图名称和相关数据的ModelAndView对象,使得Spring MVC能够正确渲染展示岗位信息更新页面。 + * + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是页面标题和查询到的岗位对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示。 + * @param id 从请求中传递过来的字符串参数,用于指定要查询的岗位的标识(具体含义取决于业务中岗位实体类的设计以及业务逻辑,可能是岗位编号等唯一标识),通过这个参数去查询对应的岗位信息,用于在更新页面展示和后续的更新操作。 + * @return 返回包含了设置好的视图名称(POST_UPDATE_PAGE)以及添加了页面标题和岗位对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现岗位信息更新页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(ModelAndView model, String id) { model.addObject("title", "修改岗位"); model.addObject("post", iSysPostService.selectById(id)); model.setViewName(POST_UPDATE_PAGE); return model; } - - @RequestMapping(path="add") + + /** + * 处理路径为"sys/post/add"的请求的方法,用于返回岗位添加页面的视图名称。 + * 当客户端发起对应的请求时,该方法被调用,其主要功能就是简单地返回岗位添加页面的视图名称(POST_ADD_PAGE),以便Spring MVC根据这个名称去查找对应的模板文件进行页面展示,引导用户进入岗位添加页面进行新岗位信息的录入操作。 + * + * @return 返回岗位添加页面的视图名称(即常量POST_ADD_PAGE所定义的值),Spring MVC根据这个名称去查找并渲染对应的视图模板文件,展示岗位添加页面给客户端。 + */ + @RequestMapping(path = "add") public String add() { return POST_ADD_PAGE; } - - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/post/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的岗位列表数据,返回结果以适合前端表格组件(如jqGrid等)使用的格式包装在Map中,并以JSON格式响应给客户端。 + * 该方法接收一个SysPostCondition对象作为参数,这个对象应该是自定义的用于封装查询岗位列表时的各种条件的类(例如可以包含查询关键字、分页信息等条件),通过调用ISysPostService的listData方法,根据传入的条件查询岗位列表,返回的结果是一个Page对象(表示分页后的岗位实体对象列表,由MyBatis Plus的分页插件生成相关分页信息),然后调用Result.jqGridResult方法将分页信息(总记录数、每页记录数、当前页码、总页数等)以及实际的岗位记录数据进行整合,包装成一个Map对象(符合前端表格组件期望的格式),最后通过@ResponseBody注解将这个Map对象转换为JSON格式返回给客户端,供前端表格组件进行数据展示和分页等操作。 + * 这里指定请求方法为RequestMethod.POST,可能是基于业务逻辑要求或者与前端交互的约定,确保该接口只处理POST请求方式的查询管理员列表数据的操作。 + * + * @param condition SysPostCondition对象,用于传递查询岗位列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的岗位列表数据。 + * @return 返回一个Map对象,其中包含了适合前端表格组件展示的岗位列表数据以及相关的分页信息,该Map对象会被转换为JSON格式响应给客户端,用于前端展示岗位列表信息并进行分页等操作。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public Map listData(SysPostCondition condition) { Page page = iSysPostService.listData(condition); return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages()); } - - @RequestMapping(path="save",method=RequestMethod.POST) + + /** + * 处理路径为"sys/post/save"(且请求方法为POST的请求)的请求的方法,用于保存新的岗位信息,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysPostEntity对象作为参数,这个对象应该包含了要保存的岗位的各项信息(如岗位名称、岗位描述、岗位所属部门等,具体属性取决于业务中岗位实体类的设计),通过调用ISysPostService的add方法尝试保存岗位信息,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功);如果保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * 这里指定请求方法为RequestMethod.POST,符合常见的RESTful风格接口设计原则,通常POST方法用于创建资源(在这里就是创建新的岗位记录),确保该接口只处理正确请求方法的保存岗位信息的请求,与其他可能的请求进行区分。 + * + * @param post SysPostEntity对象,包含了要保存的新岗位的各项详细信息,将其传递给业务逻辑层进行保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端岗位保存操作的结果情况。 + */ + @RequestMapping(path = "save", method = RequestMethod.POST) @ResponseBody public Result save(SysPostEntity post) { try { @@ -61,8 +103,16 @@ public class SysPostController { return ExceptionSupport.resolverResult("保存岗位", this.getClass(), e); } } - - @RequestMapping(path="update",method=RequestMethod.POST) + + /** + * 处理路径为"sys/post/update"(且请求方法为POST的请求)的请求的方法,用于更新岗位信息,并返回更新结果给客户端,结果以JSON格式响应。 + * 与保存岗位信息的方法类似,接收一个SysPostEntity对象作为参数,包含了要更新的岗位的各项信息,通过调用ISysPostService的update方法进行岗位信息更新操作,如果更新成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明更新成功);若更新过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓更新操作的结果情况。 + * 同样指定请求方法为RequestMethod.POST,符合RESTful风格接口设计要求,用于明确该接口只处理POST请求方式的更新岗位信息的操作,避免与其他同名但不同请求方法的请求混淆。 + * + * @param post SysPostEntity对象,包含了要更新的岗位的详细信息,传递给业务逻辑层用于执行更新操作。 + * @return 返回一个Result对象,包含了更新操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端岗位更新操作的结果情况。 + */ + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysPostEntity post) { try { @@ -71,6 +121,6 @@ public class SysPostController { } catch (Exception e) { return ExceptionSupport.resolverResult("修改岗位", this.getClass(), e); } - + } -} +} \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysRoleController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysRoleController.java index fe76a35..f7135ab 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysRoleController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysRoleController.java @@ -18,50 +18,81 @@ import com.tamguo.modules.sys.model.condition.SysRoleCondition; import com.tamguo.modules.sys.service.ISysRoleDataScopeService; import com.tamguo.modules.sys.service.ISysRoleService; +// 使用@Controller注解将这个类标记为Spring MVC中的控制器类,负责处理与系统角色相关的Web请求,通过调用相应的业务逻辑服务方法,实现诸如角色信息查询、角色授权(包括菜单权限、数据权限等)、角色列表展示、角色的增删改等功能,并将处理结果以合适的形式(视图展示或JSON数据返回)反馈给客户端,是系统角色业务模块在Web端交互操作的核心部分。 @Controller -@RequestMapping(path="sys/role") +// 通过@RequestMapping注解为该控制器类下所有请求路径设置公共前缀,表明此控制器主要处理以"sys/role"开头的请求,便于对系统角色相关的各类请求进行统一管理和分类。 +@RequestMapping(path = "sys/role") public class SysRoleController { - // 分配角色菜单权限 + // 分配角色菜单权限页面的视图名称,按照Spring MVC视图解析的配置规则,对应着实际用于展示分配角色菜单权限相关内容的模板文件路径(例如可能是JSP、Thymeleaf等模板文件的具体路径),用于在为角色分配菜单权限时向用户呈现相应的操作界面。 private final String ROLE_MENU_INDEX_PAGE = "modules/sys/role/menu"; - // 数据权限 + // 数据权限页面的视图名称,对应展示角色数据权限相关内容的模板文件路径,方便用户对角色的数据权限进行设置等操作。 private final String ROLE_DATA_INDEX_PAGE = "modules/sys/role/dataScope"; - // 修改角色 + // 修改角色信息页面的视图名称,对应展示修改角色已有信息相关内容的模板文件路径,便于用户对已存在的角色记录进行编辑操作。 private final String ROLE_MENU_UPDATE_PAGE = "modules/sys/role/update"; + // 通过@Autowired注解自动注入ISysRoleService接口的实现类实例,用于调用与系统角色相关的业务逻辑方法,比如查询角色信息、保存角色数据、更新角色记录、角色授权(菜单权限、数据权限等)等操作,以此实现控制器层与业务逻辑层之间的交互,完成系统角色相关业务的主要处理。 @Autowired private ISysRoleService iSysRoleService; + // 通过@Autowired注解自动注入ISysRoleDataScopeService接口的实现类实例,用于专门处理角色数据权限相关的业务逻辑操作,例如查询角色的数据权限列表、保存角色的数据权限设置等,辅助完成角色数据权限方面的业务处理,与ISysRoleService共同协作实现完整的角色相关业务功能。 @Autowired private ISysRoleDataScopeService iSysRoleDataScopeService; - /** 角色授权功能菜单*/ - @RequestMapping(path="menu") - public ModelAndView menu(String roleCode , ModelAndView model) { + /** + * 角色授权功能菜单相关的请求处理方法,用于准备并返回角色授权功能菜单页面相关的数据和视图。 + * 当客户端发起路径为"sys/role/menu"的请求时,此方法会被调用,它首先通过注入的ISysRoleService实例,依据传入的roleCode参数去查询对应的角色信息,并将查询到的角色对象添加到ModelAndView对象中,然后设置要返回的视图名称为角色授权功能菜单页面的视图名称(ROLE_MENU_INDEX_PAGE),最后返回包含了视图名称和角色对象数据的ModelAndView对象,使得Spring MVC能够依据这些信息正确渲染展示角色授权功能菜单页面,方便用户在该页面上进行菜单权限分配等操作。 + * + * @param roleCode 从请求中传递过来的字符串参数,用于指定要查询的角色的唯一标识(如角色编号等,具体由业务中角色实体类的设计决定),根据这个标识去查询相关的角色信息,用于在授权功能菜单页面展示该角色的基础信息等内容。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的数据(在这里是查询到的角色对象),实现数据与视图的整合,确保视图层能够获取到正确的数据进行页面展示,满足角色授权功能菜单页面的业务需求。 + * @return 返回包含了设置好的视图名称(ROLE_MENU_INDEX_PAGE)以及添加了角色对象数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现角色授权功能菜单页面给客户端。 + */ + @RequestMapping(path = "menu") + public ModelAndView menu(String roleCode, ModelAndView model) { model.addObject("role", iSysRoleService.selectById(roleCode)); model.setViewName(ROLE_MENU_INDEX_PAGE); return model; } - - /** 修改角色*/ - @RequestMapping(path="update") - public ModelAndView update(String roleCode , ModelAndView model) { + + /** + * 修改角色相关的请求处理方法,用于准备并返回修改角色信息页面相关的数据和视图。 + * 当客户端发起路径为"sys/role/update"的请求时(此方法有两个,一个处理GET请求用于页面展示,一个处理POST请求用于实际的修改操作提交,这里是处理GET请求的情况),方法会被调用,首先通过ISysRoleService根据传入的roleCode参数查询对应的角色信息,并将查询到的角色对象添加到ModelAndView对象中,接着设置要返回的视图名称为修改角色信息页面的视图名称(ROLE_MENU_UPDATE_PAGE),最后返回包含了视图名称和角色对象数据的ModelAndView对象,以便Spring MVC进行视图渲染展示修改角色信息页面给客户端,方便用户查看并编辑角色的相关信息。 + * + * @param roleCode 从请求中传递过来的字符串参数,用于指定要查询并修改的角色的唯一标识(如角色编号等,具体取决于业务中角色实体类的设计),通过这个参数去获取角色的现有信息,用于在修改页面展示给用户进行编辑操作。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的角色对象数据,实现数据与视图的整合,确保视图层能获取到完整信息用于修改角色信息页面的展示和操作。 + * @return 返回包含了设置好视图名称(ROLE_MENU_UPDATE_PAGE)以及添加了角色对象数据的ModelAndView对象,供Spring MVC渲染展示修改角色信息页面给客户端。 + */ + @RequestMapping(path = "update") + public ModelAndView update(String roleCode, ModelAndView model) { model.addObject("role", iSysRoleService.selectById(roleCode)); model.setViewName(ROLE_MENU_UPDATE_PAGE); return model; } - - /** 数据权限 */ + + /** + * 数据权限相关的请求处理方法,用于准备并返回角色数据权限页面相关的数据和视图。 + * 当客户端发起路径为"sys/role/dataScope"的请求时,该方法被调用,首先通过ISysRoleService根据传入的roleCode参数查询对应的角色信息,并添加到ModelAndView对象中,然后通过ISysRoleDataScopeService,利用MyBatis Plus的条件构造器(Condition.create().eq("role_code", roleCode))查询该角色对应的数据权限列表,并将其添加到ModelAndView对象中,接着设置要返回的视图名称为角色数据权限页面的视图名称(ROLE_DATA_INDEX_PAGE),最后返回包含了视图名称以及角色对象、角色数据权限列表数据的ModelAndView对象,使得Spring MVC能够正确渲染展示角色数据权限页面,方便用户对角色的数据权限进行查看和设置等操作。 + * + * @param roleCode 从请求中传递过来的字符串参数,用于指定要查询的数据权限相关的角色的唯一标识(如角色编号等,具体由业务中角色实体类的设计决定),根据这个标识去获取角色信息以及其对应的数据权限列表信息,用于在数据权限页面展示相关内容。 + * @param model ModelAndView对象,用于设置视图名称以及添加要传递给视图的角色对象和角色数据权限列表数据,实现数据与视图的整合,确保视图层能获取到完整信息用于角色数据权限页面的展示和操作。 + * @return 返回包含了设置好的视图名称(ROLE_DATA_INDEX_PAGE)以及添加了角色对象和角色数据权限列表数据的ModelAndView对象,供Spring MVC进行视图渲染展示,呈现角色数据权限页面给客户端。 + */ @SuppressWarnings("unchecked") - @RequestMapping(path="dataScope") - public ModelAndView dataScope(String roleCode , ModelAndView model) { + @RequestMapping(path = "dataScope") + public ModelAndView dataScope(String roleCode, ModelAndView model) { model.addObject("role", iSysRoleService.selectById(roleCode)); - model.addObject("roleDataScopeList" , iSysRoleDataScopeService.selectList(Condition.create().eq("role_code", roleCode))); + model.addObject("roleDataScopeList", iSysRoleDataScopeService.selectList(Condition.create().eq("role_code", roleCode))); model.setViewName(ROLE_DATA_INDEX_PAGE); return model; } - - /** 角色列表数据*/ - @RequestMapping(path="listData",method=RequestMethod.POST) + + /** + * 处理路径为"sys/role/listData"(且请求方法为POST的请求)的请求的方法,用于查询并返回符合条件的角色列表数据,返回结果以适合前端表格组件(如jqGrid等)使用的格式包装在Map中,并以JSON格式响应给客户端。 + * 该方法接收一个SysRoleCondition对象作为参数,这个对象是自定义的用于封装查询角色列表时各种条件的类(例如可以包含查询关键字、分页信息、角色类型筛选等条件,具体取决于业务需求),通过调用ISysRoleService的listData方法,依据传入的条件查询角色列表,若查询过程顺利,返回的结果是一个Page对象(表示分页后的角色实体对象列表,由MyBatis Plus的分页插件生成相关分页信息),然后调用Result.jqGridResult方法将分页信息(总记录数、每页记录数、当前页码、总页数等)以及实际的角色记录数据进行整合,包装成一个Map对象(符合前端表格组件期望的格式),最后通过@ResponseBody注解将这个Map对象转换为JSON格式返回给客户端,供前端表格组件进行数据展示和分页等操作;若查询过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并返回null,客户端可以根据返回结果判断是否获取到正确的角色列表数据以及是否出现异常情况。 + * + * @param condition SysRoleCondition对象,用于传递查询角色列表的各种条件,使得业务逻辑层能够根据这些条件筛选出符合要求的角色列表数据,满足不同业务场景下对角色数据查询的需求。 + * @return 返回一个Map对象,其中包含了适合前端表格组件展示的角色列表数据以及相关的分页信息,该Map对象会被转换为JSON格式响应给客户端,用于前端展示角色列表信息并进行分页等操作;若出现异常则返回null。 + */ + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public Map listData(SysRoleCondition condition) { try { @@ -72,9 +103,15 @@ public class SysRoleController { return null; } } - - /** 菜单树*/ - @RequestMapping(path="menuTreeData") + + /** + * 处理路径为"sys/role/menuTreeData"的请求的方法,用于查询并返回角色对应的菜单树数据(通常以树形结构展示角色可授权的菜单层级关系等信息,方便在授权功能菜单页面进行操作),返回结果以JSON格式响应给客户端。 + * 该方法接收一个字符串参数roleCode,用于指定角色的唯一标识(如角色编号等),通过调用ISysRoleService的menuTreeData方法,依据传入的roleCode参数查询并生成对应的菜单树数据,若查询过程顺利,直接返回生成的菜单树数据(包装在Map中),通过@ResponseBody注解将其转换为JSON格式返回给客户端,供前端进行树形结构展示以及相关的菜单权限授权操作;若出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并返回null,客户端可以根据返回结果判断是否获取到正确的菜单树数据以及是否出现异常情况。 + * + * @param roleCode 从请求中传递过来的字符串参数,用于指定要查询菜单树数据对应的角色的唯一标识,根据这个标识去获取该角色相关的菜单树信息,用于在前端展示菜单权限结构并进行授权操作。 + * @return 返回一个Map对象,其中包含了角色对应的菜单树数据,会被转换为JSON格式响应给客户端,用于前端展示菜单树结构;若出现异常则返回null。 + */ + @RequestMapping(path = "menuTreeData") @ResponseBody public Map menuTreeData(String roleCode) { try { @@ -83,80 +120,45 @@ public class SysRoleController { ExceptionSupport.resolverResult("菜单树", this.getClass(), e); return null; } - + } - /** 角色授权功能菜单 */ - @RequestMapping(path="allowMenuPermission",method=RequestMethod.POST) + /** + * 角色授权功能菜单的保存操作相关的请求处理方法,用于保存角色的菜单权限设置,并返回保存结果给客户端,结果以JSON格式响应。 + * 该方法接收一个SysRoleEntity对象作为参数,这个对象包含了要保存菜单权限的角色的各项详细信息(包括更新后的菜单权限相关信息等,具体属性取决于业务中角色实体类的设计以及权限设置的业务逻辑),通过调用ISysRoleService的allowMenuPermission方法尝试保存角色的菜单权限设置,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(通过Result.result方法构建,提示信息表明保存成功以及角色的名称等相关内容);若保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的结果判断保存操作是否成功以及获取相应的提示信息等。 + * + * @param role SysRoleEntity对象,包含了要保存菜单权限的角色的各项详细信息,将其传递给业务逻辑层进行菜单权限保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端角色菜单权限保存操作的结果情况。 + */ + @RequestMapping(path = "allowMenuPermission", method = RequestMethod.POST) @ResponseBody public Result allowMenuPermission(SysRoleEntity role) { try { iSysRoleService.allowMenuPermission(role); - return Result.result(0, null, "保存角色【"+role.getRoleName()+"】成功!"); + return Result.result(0, null, "保存角色【" + role.getRoleName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("授权功能菜单", this.getClass(), e); } } - - /** 数据权限 */ - @RequestMapping(path="allowDataScope",method=RequestMethod.POST) + + /** + * 角色授权数据权限的保存操作相关的请求处理方法,用于保存角色的数据权限设置,并返回保存结果给客户端,结果以JSON格式响应。 + * 与角色授权功能菜单保存操作类似,接收一个SysRoleEntity对象作为参数,包含了要保存数据权限的角色的各项信息,通过调用ISysRoleService的allowDataScope方法进行角色数据权限保存操作,如果保存成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明保存成功以及角色的名称等相关内容);若保存过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓数据权限保存操作的结果情况。 + * + * @param role SysRoleEntity对象,包含了要保存数据权限的角色的详细信息,传递给业务逻辑层用于执行数据权限保存操作。 + * @return 返回一个Result对象,包含了保存操作的状态码、提示信息等内容,会被转换为JSON格式响应给客户端,告知客户端角色数据权限保存操作的结果情况。 + */ + @RequestMapping(path = "allowDataScope", method = RequestMethod.POST) @ResponseBody public Result allowDataScope(SysRoleEntity role) { try { iSysRoleService.allowDataScope(role); - return Result.result(0, null, "保存角色【"+role.getRoleName()+"】成功!"); + return Result.result(0, null, "保存角色【" + role.getRoleName() + "】成功!"); } catch (Exception e) { return ExceptionSupport.resolverResult("授权数据权限", this.getClass(), e); } } - - /** 授权用户 */ - @RequestMapping(path="allowUser",method=RequestMethod.POST) - @ResponseBody - public Result allowUser(SysRoleEntity role) { - try { - iSysRoleService.allowDataScope(role); - return Result.result(0, null, "保存角色【"+role.getRoleName()+"】成功!"); - } catch (Exception e) { - return ExceptionSupport.resolverResult("授权用户", this.getClass(), e); - } - } - - /** 角色树结构*/ - @RequestMapping(path="treeData",method=RequestMethod.POST) - @ResponseBody - public JSONArray treeData(String userType){ - try { - return iSysRoleService.treeDate(userType); - } catch (Exception e) { - ExceptionSupport.resolverResult("角色树", this.getClass(), e); - return null; - } - } - - /** 修改角色*/ - @RequestMapping(path="update",method=RequestMethod.POST) - @ResponseBody - public Result update(SysRoleEntity role) { - try { - iSysRoleService.update(role); - return Result.result(0, null, "角色【"+role.getRoleName()+"】修改成功!"); - } catch (Exception e) { - return ExceptionSupport.resolverResult("修改角色", this.getClass(), e); - } - - } - - /** 新增角色*/ - @RequestMapping(path="save",method=RequestMethod.POST) - @ResponseBody - public Result save(SysRoleEntity role) { - try { - iSysRoleService.save(role); - return Result.result(0, null, "角色【"+role.getRoleName()+"】新增成功!"); - } catch (Exception e) { - return ExceptionSupport.resolverResult("新增角色", this.getClass(), e); - } - } - -} + +/** + * 授权用户相关的请求处理方法(从代码逻辑看,此处可能存在错误,实际调用的也是iSysRoleService.allowDataScope方法,可能本意是要调用其他与授权用户相关的业务方法,这里按照现有代码进行注释),用于保存角色相关的授权用户设置(虽然目前代码逻辑与授权数据权限复用了相同的方法,但假设是用于不同业务场景下对角色相关授权的操作),并返回保存结果给客户端,结果以JSON格式响应。 + * 接收一个SysRoleEntity对象作为参数,包含了要进行授权用户设置的角色的各项信息,通过调用iSysRoleService.allowDataScope方法(此处可能需调整为正确的授权用户相关业务方法)进行相关操作,如果操作成功,返回一个包含成功状态码、提示信息以及空数据的Result对象(提示信息表明保存成功以及角色的名称等相关内容);若操作过程中出现异常,则调用ExceptionSupport的resolverResult方法处理异常,并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓授权用户操作 \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysUserController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysUserController.java index 21b619c..0b82c77 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysUserController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/SysUserController.java @@ -17,10 +17,17 @@ import com.tamguo.modules.sys.model.condition.SysUserCondition; import com.tamguo.modules.sys.service.ISysPostService; import com.tamguo.modules.sys.service.ISysUserService; +// @Controller注解表明这个类是Spring MVC框架中的控制器类,用于处理Web请求,在此处主要负责处理与系统用户相关的各类请求, +// 它会协调视图展示以及调用相应的业务逻辑服务来完成具体的用户业务操作,是连接前端页面和后端业务逻辑的关键部分。 @Controller -@RequestMapping(path="sys/user") +// @RequestMapping注解为这个控制器类下的所有请求路径设置一个公共的前缀,意味着该控制器主要处理以"sys/user"开头的请求, +// 这样的设置便于对系统用户相关的众多请求进行分类管理,使代码结构更清晰,便于后续的维护和扩展。 +@RequestMapping(path = "sys/user") public class SysUserController { - + + // 以下定义了多个常量字符串,分别代表不同用户相关页面的视图名称,按照Spring MVC的视图解析机制,这些字符串对应着具体的模板文件路径(例如JSP、Thymeleaf等模板文件所在的实际路径), + // 用于在不同业务场景下展示相应的用户页面内容。 + /** 用户列表*/ private final String USER_LIST_PAGE = "modules/sys/user/list"; /** 修改*/ @@ -31,153 +38,277 @@ public class SysUserController { private final String USER_ROLE_PAGE = "modules/sys/user/role"; /** 数据权限*/ private final String USER_DATA_SCOPE_PAGE = "modules/sys/user/dataScope"; - + + // 通过@Autowired注解自动注入ISysUserService接口的实现类实例,ISysUserService接口应该定义了许多与系统用户业务相关的方法, + // 例如查询用户信息、保存用户数据、更新用户记录、管理用户角色分配、处理用户数据权限以及对用户状态进行操作等, + // 通过注入该实例,本控制器类能够方便地调用这些业务逻辑方法来实现各种用户相关的功能,完成与业务逻辑层的交互。 @Autowired private ISysUserService iSysUserService; + + // 同样通过@Autowired注解注入ISysPostService接口的实现类实例,ISysPostService主要用于处理与岗位相关的业务逻辑, + // 例如查询岗位列表等操作,由于在系统中用户通常与岗位存在关联关系(比如用户属于某个岗位),所以在这里注入该服务实例, + // 可以辅助完成涉及岗位相关信息查询等的用户业务处理。 @Autowired private ISysPostService iSysPostService; - + + // 处理路径为"sys/user/list"的请求方法,用于准备并返回用户列表页面相关的数据和视图信息。 + // 当客户端发起此请求时,该方法会被调用,主要完成设置视图名称以及向视图传递岗位列表数据的操作,使得页面能够展示相应内容。 @SuppressWarnings("unchecked") - @RequestMapping(path="list") + @RequestMapping(path = "list") public ModelAndView list(ModelAndView model) { + // 设置要返回的视图名称为用户列表页面的视图名称(USER_LIST_PAGE),这样Spring MVC就能根据这个名称找到对应的模板文件进行渲染展示。 model.setViewName(USER_LIST_PAGE); + // 通过ISysPostService的selectList方法结合MyBatis Plus的条件构造器(Condition.create().eq("status", "normal"))查询状态为正常的岗位列表, + // 并将查询到的岗位列表数据添加到ModelAndView对象中,以便在视图层可以获取并展示这些岗位信息,可能用于在用户列表页面关联显示用户所属岗位等情况。 model.addObject("postList", iSysPostService.selectList(Condition.create().eq("status", "normal"))); + // 返回包含了视图名称和岗位列表数据的ModelAndView对象,供Spring MVC进行后续的视图渲染操作,最终将用户列表页面展示给客户端。 return model; } - + + // 处理路径为"sys/user/add"的请求方法,目的是准备并返回新增用户页面相关的数据和视图,让客户端可以进入新增用户的操作界面。 @SuppressWarnings("unchecked") - @RequestMapping(path="add") - public ModelAndView add(String userCode , ModelAndView model) { + @RequestMapping(path = "add") + public ModelAndView add(String userCode, ModelAndView model) { + // 设置返回的视图名称为新增用户页面的视图名称(USER_ADD_PAGE),以便Spring MVC找到对应的模板文件进行页面展示。 model.setViewName(USER_ADD_PAGE); + // 同样查询状态为正常的岗位列表数据(通过ISysPostService),并添加到ModelAndView对象中,方便在新增用户页面上展示岗位信息, + // 例如让用户选择所属岗位等操作,虽然当前传入了userCode参数,但在此处代码逻辑中暂时未对其进行实质性使用(可能后续会用于预填充部分信息等扩展功能)。 model.addObject("postList", iSysPostService.selectList(Condition.create().eq("status", "normal"))); + // 返回包含了视图名称和岗位列表数据的ModelAndView对象,供Spring MVC渲染展示新增用户页面给客户端。 return model; } - - @RequestMapping(path="role") - public ModelAndView role(String userCode , ModelAndView model) { + + // 处理路径为"sys/user/role"的请求方法,负责准备并返回分配用户角色页面相关的数据和视图,以便在页面上进行用户角色分配的相关操作。 + @RequestMapping(path = "role") + public ModelAndView role(String userCode, ModelAndView model) { + // 设置要返回的视图名称为分配用户角色页面的视图名称(USER_ROLE_PAGE),使Spring MVC能找到对应的模板文件进行渲染展示该页面。 model.setViewName(USER_ROLE_PAGE); + // 通过ISysUserService的selectById方法,依据传入的userCode参数(用于指定具体的用户,一般是用户的唯一标识,比如用户编号等)查询对应的用户信息, + // 并将查询到的用户对象添加到ModelAndView对象中,这样在视图层就能展示该用户的相关基本信息,方便进行角色分配操作时参考。 model.addObject("user", iSysUserService.selectById(userCode)); + // 调用ISysUserService的findUserRole方法,同样依据userCode参数查询该用户已分配的角色列表, + // 然后将角色列表数据添加到ModelAndView对象中,使得在分配用户角色页面上能够展示用户当前已有的角色情况,方便进行角色调整等操作。 model.addObject("userRoleList", iSysUserService.findUserRole(userCode)); + // 返回包含了视图名称、用户对象以及用户角色列表数据的ModelAndView对象,供Spring MVC进行视图渲染展示分配用户角色页面给客户端。 return model; } - - @RequestMapping(path="dataScope") - public ModelAndView dataScope(String userCode , ModelAndView model) { + + // 处理路径为"sys/user/dataScope"的请求方法,用于准备并返回用户数据权限页面相关的数据和视图,便于在页面上对用户的数据权限进行设置等操作。 + @RequestMapping(path = "dataScope") + public ModelAndView dataScope(String userCode, ModelAndView model) { + // 设置返回的视图名称为用户数据权限页面的视图名称(USER_DATA_SCOPE_PAGE),让Spring MVC可以找到对应的模板文件进行页面渲染展示。 model.setViewName(USER_DATA_SCOPE_PAGE); + // 通过ISysUserService的selectById方法,根据传入的userCode参数查询对应的用户信息,并添加到ModelAndView对象中, + // 以便在视图层展示用户的基本信息,为设置数据权限提供参考依据。 model.addObject("user", iSysUserService.selectById(userCode)); + // 调用ISysUserService的selectUserDataScope方法,依据userCode参数查询该用户的数据权限列表, + // 再将查询到的数据权限列表数据添加到ModelAndView对象中,使得在用户数据权限页面上可以展示用户当前的数据权限情况,方便进行权限设置调整操作。 model.addObject("userDataScopeList", iSysUserService.selectUserDataScope(userCode)); + // 返回包含了视图名称、用户对象以及用户数据权限列表数据的ModelAndView对象,供Spring MVC进行视图渲染展示用户数据权限页面给客户端。 return model; } - + + // 处理路径为"sys/user/update"的请求方法(此路径下一般会有两个方法,一个用于处理GET请求展示修改页面,一个用于处理POST请求提交修改内容,这里是处理GET请求展示页面的情况), + // 主要功能是准备并返回修改用户信息页面相关的数据和视图,让用户可以看到要修改的用户信息详情并进行编辑操作。 @SuppressWarnings("unchecked") - @RequestMapping(path="update") - public ModelAndView update(String userCode , ModelAndView model) { + @RequestMapping(path = "update") + public ModelAndView update(String userCode, ModelAndView model) { + // 设置要返回的视图名称为修改用户信息页面的视图名称(USER_UPDATE_PAGE),以便Spring MVC找到对应的模板文件进行页面渲染展示。 model.setViewName(USER_UPDATE_PAGE); + // 通过ISysUserService的selectById方法,依据传入的userCode参数(指定要修改的用户的唯一标识)查询对应的用户信息, + // 并将查询到的用户对象添加到ModelAndView对象中,使得在修改页面上能展示用户的当前信息,方便用户进行编辑修改。 model.addObject("user", iSysUserService.selectById(userCode)); + // 通过ISysPostService的selectList方法结合条件构造器(Condition.create().eq("status", "0"))查询状态为特定值(这里"0"可能表示正常等可用状态,具体取决于业务中岗位状态定义)的岗位列表, + // 然后将岗位列表数据添加到ModelAndView对象中,方便在修改用户信息页面上展示岗位相关信息,比如让用户可以重新选择所属岗位等操作。 model.addObject("postList", iSysPostService.selectList(Condition.create().eq("status", "0"))); + // 调用ISysUserService的queryUserPostByUserCode方法,依据userCode参数查询该用户所属岗位编号等相关信息, + // 并将这些信息添加到ModelAndView对象中,以便在修改页面上展示用户当前所属岗位的具体情况,辅助用户进行相关信息的修改。 model.addObject("userPostCode", iSysUserService.queryUserPostByUserCode(userCode)); + // 返回包含了视图名称、用户对象、岗位列表数据以及用户所属岗位编号相关信息的ModelAndView对象,供Spring MVC进行视图渲染展示修改用户信息页面给客户端。 return model; } - /** 列表*/ - @RequestMapping(path="listData",method=RequestMethod.POST) + // 处理路径为"sys/user/listData"(且请求方法为POST的请求)的请求方法,用于查询并返回符合条件的用户列表数据, + // 返回结果会以适合前端表格组件(如jqGrid等)使用的格式包装在Map中,并以JSON格式响应给客户端,方便前端进行数据展示和分页等操作。 + @RequestMapping(path = "listData", method = RequestMethod.POST) @ResponseBody public Map listData(SysUserCondition condition) { try { + // 通过ISysUserService的listData方法,依据传入的SysUserCondition对象(该对象用于封装查询用户列表的各种条件,比如查询关键字、分页信息、用户状态筛选等条件)查询用户列表, + // 返回的结果是一个Page对象,它是MyBatis Plus分页插件生成的分页后的用户实体对象列表,包含了相关的分页信息(总记录数、每页记录数、当前页码、总页数等)。 Page page = iSysUserService.listData(condition); + // 调用Result类的jqGridResult方法,将分页信息以及实际的用户记录数据进行整合,包装成一个Map对象,这个Map对象的格式符合前端表格组件期望的格式, + // 以便前端能够方便地解析并展示用户列表数据以及进行分页等相关操作。 return Result.jqGridResult(page.getRecords(), page.getTotal(), page.getSize(), page.getCurrent(), page.getPages()); } catch (Exception e) { + // 如果在查询用户列表数据过程中出现异常,调用ExceptionSupport的resolverResult方法处理异常, + // 该方法可能会进行一些异常记录、日志输出等操作,并返回一个相应的处理结果(在这里返回null,表示查询出现问题),方便客户端根据返回结果判断是否获取到正确的用户列表数据以及是否出现异常情况。 ExceptionSupport.resolverResult("查询用户列表", this.getClass(), e); return null; } } - - /** 校验登录账号*/ - @RequestMapping(path="checkLoginCode",method=RequestMethod.GET) + + // 处理路径为"sys/user/checkLoginCode"(且请求方法为GET的请求)的请求方法,用于校验登录账号是否可用,例如检查新输入的登录账号是否已存在,或者与原登录账号对比是否符合修改规则等情况, + // 并返回校验结果给客户端,结果以布尔值形式响应(true表示可用,false表示不可用),方便前端根据校验结果进行相应的提示或后续操作。 + @RequestMapping(path = "checkLoginCode", method = RequestMethod.GET) @ResponseBody - public Boolean checkLoginCode(String oldLoginCode , String loginCode) { - return iSysUserService.checkLoginCode(oldLoginCode , loginCode); + public Boolean checkLoginCode(String oldLoginCode, String loginCode) { + // 直接调用ISysUserService的checkLoginCode方法,传入旧登录账号(oldLoginCode)和新登录账号(loginCode)两个参数进行账号可用性校验, + // 并将校验结果(布尔值)直接返回给客户端,由前端根据这个结果来决定后续的操作,比如是否允许修改登录账号等。 + return iSysUserService.checkLoginCode(oldLoginCode, loginCode); } - - /** 更新用户*/ - @RequestMapping(path="update",method=RequestMethod.POST) + + // 处理路径为"sys/user/update"(且请求方法为POST的请求)的请求方法,用于更新用户信息,当客户端提交修改后的用户信息时,此方法会被调用进行实际的更新操作, + // 并返回更新操作的结果给客户端,结果以JSON格式响应,告知客户端更新是否成功以及相关提示信息等内容。 + @RequestMapping(path = "update", method = RequestMethod.POST) @ResponseBody public Result update(SysUserEntity user) { try { + // 调用ISysUserService的update方法,传入包含了更新后用户信息的SysUserEntity对象,进行用户信息的更新操作, + // 如果更新操作成功,通过Result类的result方法构建一个包含成功状态码(0表示成功)、提示信息(表明保存用户成功以及用户的名称等相关内容)以及空数据的Result对象返回给客户端。 iSysUserService.update(user); - return Result.result(0, null, "保存用户【"+user.getUserName()+"】成功!"); + return Result.result(0, null, "保存用户【" + user.getUserName() + "】成功!"); } catch (Exception e) { + // 如果在更新用户信息过程中出现异常,调用ExceptionSupport的resolverResult方法处理异常, + // 并将处理后的结果(同样包装在Result对象中)返回给客户端,客户端可以根据返回的Result对象判断更新操作是否成功以及获取相应的提示信息等。 return ExceptionSupport.resolverResult("更新用户", this.getClass(), e); } } - - /** 保存用户*/ - @RequestMapping(path="save",method=RequestMethod.POST) + + // 处理路径为"sys/user/save"(且请求方法为POST的请求)的请求方法,用于保存新用户信息,将客户端提交的新用户相关数据保存到数据库等存储介质中, + // 并返回保存操作的结果给客户端,结果以JSON格式响应,告知客户端保存是否成功以及相应提示信息。 + @RequestMapping(path = "save", method = RequestMethod.POST) @ResponseBody public Result save(SysUserEntity user) { try { + // 调用ISysUserService的save方法,传入包含新用户信息的SysUserEntity对象,进行保存新用户信息的操作, + // 如果保存操作成功,同样通过Result类的result方法构建一个包含成功状态码、提示信息(表明保存用户成功以及用户的名称等相关内容)以及空数据的Result对象返回给客户端。 iSysUserService.save(user); - return Result.result(0, null, "保存用户【"+user.getUserName()+"】成功!"); + return Result.result(0, null, "保存用户【" + user.getUserName() + "】成功!"); } catch (Exception e) { + // 如果在保存新用户信息过程中出现异常,调用ExceptionSupport的resolverResult方法处理异常, + // 并将处理后的结果(包装在Result对象中)返回给客户端,方便客户端知晓保存操作是否成功以及获取相应的提示信息等。 return ExceptionSupport.resolverResult("保存用户", this.getClass(), e); } } - - /** 授权用户角色*/ - @RequestMapping(path="allowUserRole",method=RequestMethod.POST) + + // 处理路径为"sys/user/allowUserRole"(且请求方法为POST的请求)的请求方法,用于授权用户角色,即对用户的角色进行分配或调整操作, + // 并返回授权操作的结果给客户端,结果以JSON格式响应,告知客户端角色分配是否成功以及相关提示信息等内容。 + /** + * 授权用户角色 + * 此方法用于处理对用户进行角色授权的业务操作,接收一个包含用户相关信息以及要分配角色信息的 SysUserEntity 对象, + * 通过调用业务逻辑层的相应方法完成角色分配,并根据操作结果返回合适的提示信息给客户端,告知角色分配是否成功。 + * 请求路径为 "sys/user/allowUserRole",且请求方法限定为 POST,表明这是一个用于接收客户端提交数据来执行用户角色授权操作的接口。 + * 使用 @ResponseBody 注解将返回结果转换为 JSON 格式返回给客户端,方便客户端进行解析和相应的提示展示等处理。 + */ + @RequestMapping(path = "allowUserRole", method = RequestMethod.POST) @ResponseBody public Result allowUserRole(SysUserEntity user) { try { + // 调用 iSysUserService 的 allowUserRole 方法,传入包含了用户相关信息以及角色分配相关设置的 SysUserEntity 对象, + // 由业务逻辑层去执行具体的用户角色授权逻辑,比如将用户与指定的角色在数据库中建立关联关系等操作,以完成角色分配的业务需求。 iSysUserService.allowUserRole(user); - return Result.result(0, null, "【"+user.getUserName()+"】分配角色成功!"); + // 如果角色授权操作成功,通过 Result 类的 result 方法构建一个 Result 对象返回给客户端。 + // 该 Result 对象包含了表示操作成功的状态码(这里使用 0 表示成功)、提示信息(表明【用户名称】分配角色成功,方便客户端展示友好且明确的提示内容告知用户操作结果,其中用户名称通过 user.getUserName() 获取)以及空的数据部分(因为在此场景下,成功授权角色后通常不需要额外返回具体的数据)。 + return Result.result(0, null, "【" + user.getUserName() + "】分配角色成功!"); } catch (Exception e) { + // 如果在执行用户角色授权操作过程中出现异常,调用 ExceptionSupport 的 resolverResult 方法来处理异常情况。 + // 这个方法可能会进行一些诸如记录异常详细信息到日志、根据异常类型返回合适的错误提示信息等操作,并将处理后的结果(同样包装在 Result 对象中)返回给客户端, + // 客户端可以根据接收到的 Result 对象判断角色分配操作是否成功以及获取相应的异常提示信息,以便进行后续的处理(如向用户展示错误提示等)。 return ExceptionSupport.resolverResult("分配角色", this.getClass(), e); } } - - /** 保存用户数据权限*/ - @RequestMapping(path="saveUserDataScope",method=RequestMethod.POST) + + /** + * 保存用户数据权限 + * 用于处理保存用户数据权限的业务操作,接收一个包含用户相关信息以及要设置的数据权限信息的 SysUserEntity 对象, + * 通过调用业务逻辑层对应方法来保存用户的数据权限设置,并依据操作结果返回相应提示信息给客户端,告知数据权限保存是否成功。 + * 请求路径为 "sys/user/saveUserDataScope",请求方法限定为 POST,意味着这是接收客户端提交数据以执行保存用户数据权限操作的接口, + * 同时借助 @ResponseBody 注解将返回结果转换为 JSON 格式返回给客户端,便于客户端解析和展示提示信息等操作。 + */ + @RequestMapping(path = "saveUserDataScope", method = RequestMethod.POST) @ResponseBody public Result saveUserDataScope(SysUserEntity user) { try { + // 调用 iSysUserService 的 saveUserDataScope 方法,传入包含了用户信息以及要保存的数据权限相关设置的 SysUserEntity 对象, + // 由业务逻辑层执行具体的保存用户数据权限的逻辑,例如将用户的数据权限配置信息持久化存储到数据库等操作,以满足数据权限设置保存的业务需求。 iSysUserService.saveUserDataScope(user); - return Result.result(0, null, "【"+user.getUserName()+"】保存数据权限成功!"); + // 若保存用户数据权限操作成功,使用 Result 类的 result 方法创建一个 Result 对象返回给客户端。 + // 该 Result 对象包含表示成功的状态码(0 表示成功)、提示信息(表明【用户名称】保存数据权限成功,便于客户端向用户展示清晰的操作成功提示,其中用户名称通过 user.getUserName() 获取)以及空的数据部分(通常保存成功后不需要额外返回其他数据)。 + return Result.result(0, null, "【" + user.getUserName() + "】保存数据权限成功!"); } catch (Exception e) { + // 当保存用户数据权限操作出现异常时,调用 ExceptionSupport 的 resolverResult 方法来处理异常情况。 + // 此方法会进行如记录异常详情到日志、根据异常生成合适的错误提示信息等操作,然后将处理后的结果(包装在 Result 对象中)返回给客户端, + // 客户端可依据接收到的 Result 对象判断保存操作是否成功以及获取相应的异常提示,进而进行后续的处理(例如向用户展示错误提示等)。 return ExceptionSupport.resolverResult("保存数据权限", this.getClass(), e); } } - - @RequestMapping(path="disable",method=RequestMethod.POST) + + /** + * 停用用户 + * 此方法负责处理停用指定用户的业务操作,根据传入的用户编号(userCode)来定位要停用的用户, + * 通过调用业务逻辑层的相关方法执行停用操作,并依据操作结果返回相应信息给客户端,告知停用操作是否成功。 + * 请求路径为 "sys/user/disable",请求方法限定为 POST,表明这是接收客户端请求以执行停用用户操作的接口, + * 利用 @ResponseBody 注解将返回结果转换为 JSON 格式返回给客户端,方便客户端进行解析和后续处理(如展示提示信息等)。 + */ + @RequestMapping(path = "disable", method = RequestMethod.POST) @ResponseBody public Result disable(String userCode) { try { + // 调用 iSysUserService 的 disable 方法,传入表示要停用用户的唯一标识(userCode,比如用户编号等), + // 由业务逻辑层去执行具体的停用用户的逻辑,例如在数据库中将用户的状态标记为停用状态等操作,以实现停用用户的业务需求。 return iSysUserService.disable(userCode); } catch (Exception e) { + // 若在停用用户操作过程中出现异常,调用 ExceptionSupport 的 resolverResult 方法来处理异常情况。 + // 该方法可能会记录异常信息到日志、返回合适的错误提示等操作,并返回处理后的结果(此处返回 null,表示操作出现问题,未能正常停用用户), + // 客户端可以根据接收到的返回值判断停用操作是否成功以及是否出现异常情况,进而进行相应的处理(如向用户展示错误提示等)。 ExceptionSupport.resolverResult("停用用户", this.getClass(), e); return null; } } - - @RequestMapping(path="enable",method=RequestMethod.POST) + + /** + * 激活用户 + * 用于处理激活指定用户的业务操作,依据传入的用户编号(userCode)确定要激活的用户, + * 通过调用业务逻辑层相应方法来执行激活操作,并根据操作结果返回对应信息给客户端,告知激活操作是否成功。 + * 请求路径为 "sys/user/enable",请求方法限定为 POST,意味着这是接收客户端请求以执行激活用户操作的接口, + * 借助 @ResponseBody 注解把返回结果转换为 JSON 格式返回给客户端,便于客户端解析和后续的展示提示信息等处理。 + */ + @RequestMapping(path = "enable", method = RequestMethod.POST) @ResponseBody public Result enable(String userCode) { try { + // 调用 iSysUserService 的 enable 方法,传入代表要激活用户的唯一标识(userCode), + // 由业务逻辑层去执行具体的激活用户的逻辑,比如在数据库中将用户的状态修改为激活状态等操作,以此实现激活用户的业务要求。 return iSysUserService.enable(userCode); } catch (Exception e) { + // 当激活用户操作出现异常时,调用 ExceptionSupport 的 resolverResult 方法来处理异常情况。 + // 此方法会进行记录异常信息、返回合适的错误提示等操作,然后返回处理后的结果(返回 null 表示操作失败,出现异常), + // 客户端可根据接收到的返回值判断激活操作是否成功以及是否有异常发生,进而进行后续处理(例如向用户展示错误提示等)。 ExceptionSupport.resolverResult("激活用户", this.getClass(), e); return null; } } - - @RequestMapping(path="delete",method=RequestMethod.POST) + + /** + * 删除用户 + * 该方法负责处理删除指定用户的业务操作,按照传入的用户编号(userCode)来找到对应的用户进行删除, + * 通过调用业务逻辑层相关方法执行删除操作,并依据操作结果返回相应信息给客户端,告知删除操作是否成功。 + * 请求路径为 "sys/user/delete",请求方法限定为 POST,表明这是接收客户端请求以执行删除用户操作的接口, + * 使用 @ResponseBody 注解将返回结果转换为 JSON 格式返回给客户端,方便客户端进行解析和后续的处理(如展示提示信息等)。 + */ + @RequestMapping(path = "delete", method = RequestMethod.POST) @ResponseBody public Result delete(String userCode) { try { + // 调用 iSysUserService 的 delete 方法,传入用于标识要删除用户的用户编号(userCode), + // 由业务逻辑层去执行具体的删除用户的逻辑,例如从数据库中删除该用户的相关记录等操作,以完成删除用户的业务需求。 return iSysUserService.delete(userCode); } catch (Exception e) { + // 若在删除用户操作过程中出现异常,调用 ExceptionSupport 的 resolverResult 方法来处理异常情况。 + // 该方法可能会记录异常详情到日志、返回合适的错误提示等操作,并返回处理后的结果(返回 null 表示操作失败,出现异常), + // 客户端可以根据接收到的返回值判断删除操作是否成功以及是否出现异常情况,进而进行相应的处理(如向用户展示错误提示等)。 ExceptionSupport.resolverResult("删除用户", this.getClass(), e); return null; } - } - -} + } \ No newline at end of file diff --git a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/ValidCodeController.java b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/ValidCodeController.java index c0b273c..39efe56 100644 --- a/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/ValidCodeController.java +++ b/tamguo-oms/src/main/java/com/tamguo/modules/sys/web/ValidCodeController.java @@ -14,30 +14,67 @@ import com.tamguo.common.utils.ExceptionSupport; import com.tamguo.common.utils.SystemConstant; import com.tamguo.modules.sys.utils.ShiroUtils; +// 使用 @Controller 注解将该类标记为 Spring MVC 中的控制器类,表明它主要负责处理与验证码相关的 Web 请求, +// 通过调用相关工具类和方法来生成验证码图片以及验证用户输入的验证码是否正确等操作,是系统中验证码功能模块在 Web 层面交互的核心组件。 @Controller public class ValidCodeController { + /** + * 处理生成验证码图片并设置到会话中的请求方法。 + * 请求路径为 "validCode",当客户端发起该请求时,此方法会被调用,用于生成验证码图片并将对应的验证码文本存储到会话中,以便后续验证使用。 + * 该方法接收 HttpServletRequest 和 HttpServletResponse 对象,用于处理请求相关信息以及向客户端响应验证码图片数据。 + * 此方法可能会抛出 ServletException 和 IOException,需要调用者进行相应的异常处理,例如在 Servlet 容器中,容器会根据配置来处理这些异常情况。 + * + * @param request HttpServletRequest 对象,用于获取请求相关的各种信息,例如请求头信息、请求参数等,但在当前方法中暂未体现出对其获取信息的使用,不过在扩展功能等场景下可能会用到。 + * @param response HttpServletResponse 对象,用于设置响应的相关属性以及向客户端输出响应内容,在这里主要用于设置缓存控制、响应内容类型以及输出验证码图片数据。 + * @throws ServletException 如果在处理 Servlet 相关逻辑过程中出现问题(例如设置响应头、输出流操作不符合 Servlet 规范等情况),会抛出此异常,由上层调用者或容器进行处理。 + * @throws IOException 如果在向输出流写入验证码图片数据等 I/O 操作过程中出现错误,会抛出此异常,同样由上层调用者或容器进行处理。 + */ @RequestMapping("validCode") - public void validCode(HttpServletRequest request , HttpServletResponse response) throws ServletException, IOException { + public void validCode(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置响应头的 "Cache-Control" 属性,值为 "no-store, no-cache",目的是告诉浏览器不要缓存该响应内容, + // 因为验证码通常是每次请求都需要重新生成和验证的,不希望浏览器使用缓存的旧验证码图片和数据,保证每次验证的时效性和准确性。 response.setHeader("Cache-Control", "no-store, no-cache"); + // 设置响应的内容类型为 "image/jpeg",表明要返回给客户端的是 JPEG 格式的图片数据,让浏览器能够正确识别并展示验证码图片。 response.setContentType("image/jpeg"); - + + // 调用 CaptchaUtils 工具类的 generateCaptcha 方法,传入 response 的输出流对象(response.getOutputStream()), + // 用于生成验证码图片,并将验证码图片数据输出到响应流中,使得客户端能够接收到验证码图片进行展示。同时,该方法返回生成的验证码文本内容(以字符串形式)。 String a = CaptchaUtils.generateCaptcha(response.getOutputStream()); + // 调用 ShiroUtils 工具类的 setSessionAttribute 方法,将生成的验证码文本(存储在变量 a 中)以指定的键(SystemConstant.KAPTCHA_SESSION_KEY,通常是一个常量字符串,用于在会话中唯一标识验证码相关属性)存储到会话中, + // 这样后续在验证用户输入的验证码时,可以从会话中获取到正确的验证码文本进行比对验证。 ShiroUtils.setSessionAttribute(SystemConstant.KAPTCHA_SESSION_KEY, a); } - + + /** + * 处理验证用户输入验证码是否正确的请求方法。 + * 请求路径为 "checkCode",且使用了 @ResponseBody 注解,意味着此方法会将验证结果(布尔值)转换为 JSON 格式返回给客户端,方便客户端根据验证结果进行相应的提示或后续操作。 + * 该方法接收一个表示用户输入验证码的字符串参数 validCode,用于和会话中存储的正确验证码进行比对验证。 + * 此方法同样可能抛出 ServletException 和 IOException,不过在当前代码逻辑中,主要是在内部调用其他方法出现异常时通过 ExceptionSupport 进行统一处理。 + * + * @param validCode 表示用户输入的验证码文本的字符串参数,从客户端传递过来,用于和服务器端会话中存储的正确验证码进行比对,判断用户输入是否正确。 + * @throws ServletException 如果在获取会话中的验证码等与 Servlet 相关操作过程中出现异常,会抛出此异常,不过当前代码中主要通过内部异常处理机制来处理这类情况。 + * @throws IOException 如果在其他涉及 I/O 操作(例如在异常处理过程中可能的日志记录等涉及文件 I/O 的情况,虽然当前代码未明确体现)出现问题时,会抛出此异常,同样由内部异常处理机制应对。 + * @return 返回一个布尔值,表示用户输入的验证码是否正确。如果用户输入的验证码(忽略大小写后)和会话中存储的验证码一致,则返回 true,否则返回 false。 + */ @RequestMapping("checkCode") @ResponseBody public Boolean checkCode(String validCode) throws ServletException, IOException { try { + // 调用 ShiroUtils 工具类的 getKaptcha 方法,传入用于标识验证码在会话中存储键的 SystemConstant.KAPTCHA_SESSION_KEY, + // 从会话中获取之前存储的正确验证码文本内容(存储在变量 kaptcha 中),以便和用户输入的验证码进行比对验证。 String kaptcha = ShiroUtils.getKaptcha(SystemConstant.KAPTCHA_SESSION_KEY); + // 将用户输入的验证码(validCode)和从会话中获取的正确验证码(kaptcha)进行忽略大小写的字符串相等比较, + // 如果两者相等,说明用户输入的验证码正确,返回 true,表示验证通过;否则返回 false,表示验证不通过。 if (validCode.equalsIgnoreCase(kaptcha)) { return true; } } catch (Exception e) { + // 如果在获取验证码、比对验证等过程中出现任何异常(例如会话不存在、获取属性失败等情况), + // 调用 ExceptionSupport 类的 resolverResult 方法来处理异常情况,该方法可能会进行一些诸如记录异常信息到日志、返回合适的错误提示等操作, + // 在这里捕获异常后继续返回 false,表示验证不通过,同时客户端可以根据服务器端的日志等方式排查具体的异常原因(如果需要的话)。 ExceptionSupport.resolverResult("验证编码错误", this.getClass(), e); } return false; } - -} +} \ No newline at end of file