<br><br>重复代码:多次出现类似的条件判断和错误信息返回,可以思量提取出一个公共方法来减少代码冗余。<br>错误信息:虽然有国际化支持,但是部分错误信息直接拼接字符串,如"Cron"+I18nUtil.getString("system_unvalid"),可以统一通过键值来获取,以保持风格一致。<br>解释规范:代码中有解释,但有些地方缺少须要的解释,特别是业务逻辑复杂的部分,更详细的解释有助于其他开发者理解。<br>常量使用:对于固定不变的字符串,如 "Cron" 或者 "xxx,," 这样的模式,建议使用常量界说,这样可以提高代码的可维护性。<br>方法命名:isNumeric 方法名符合其功能,但如果是自界说的方法,建议确保实在现了正确的数字验证逻辑,并且思量到各种界限情况。<br>尚有的问题建议:<br>1. 方法长度与职责分离<br><br>复制代码
- <p> public ReturnT<String> add(XxlJobInfo jobInfo) {<br></p><p><br></p><p> // valid base<br></p><p> XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());<br></p><p> if (group == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) );<br></p><p> }<br></p><p> if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );<br></p><p> }<br></p><p> if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );<br></p><p> }<br></p><p><br></p><p> // valid trigger<br></p><p> ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);<br></p><p> if (scheduleTypeEnum == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {<br></p><p> if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid"));<br></p><p> }<br></p><p> } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {<br></p><p> if (jobInfo.getScheduleConf() == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")) );<br></p><p> }<br></p><p> try {<br></p><p> int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());<br></p><p> if (fixSecond < 1) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> } catch (Exception e) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> }<br></p><p><br></p><p> // valid job<br></p><p> if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") );<br></p><p> }<br></p><p> // 》fix "\r" in shell<br></p><p> if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) {<br></p><p> jobInfo.setGlueSource(jobInfo.getGlueSource().replaceAll("\r", ""));<br></p><p> }<br></p><p><br></p><p> // valid advanced<br></p><p> if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p> if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );<br></p><p> }<br></p><p><br></p><p> // 》ChildJobId valid<br></p><p> if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {<br></p><p> String[] childJobIds = jobInfo.getChildJobId().split(",");<br></p><p> for (String childJobIdItem: childJobIds) {<br></p><p> if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {<br></p><p> XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));<br></p><p> if (childJobInfo==null) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE,<br></p><p> MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));<br></p><p> }<br></p><p> } else {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE,<br></p><p> MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));<br></p><p> }<br></p><p> }<br></p><p><br></p><p> // join , avoid "xxx,,"<br></p><p> String temp = "";<br></p><p> for (String item:childJobIds) {<br></p><p> temp += item + ",";<br></p><p> }<br></p><p> temp = temp.substring(0, temp.length()-1);<br></p><p><br></p><p> jobInfo.setChildJobId(temp);<br></p><p> }<br></p><p><br></p><p> // add in db<br></p><p> jobInfo.setAddTime(new Date());<br></p><p> jobInfo.setUpdateTime(new Date());<br></p><p> jobInfo.setGlueUpdatetime(new Date());<br></p><p> xxlJobInfoDao.save(jobInfo);<br></p><p> if (jobInfo.getId() < 1) {<br></p><p> return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) );<br></p><p> }<br></p><p><br></p><p> return new ReturnT<String>(String.valueOf(jobInfo.getId()));<br></p><p> }</p>
具体的评价和改进建议:<br>1. 代码简洁性与职责<br><br>复制代码
- <p> public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {<br></p><p><br></p><p> // page list<br></p><p> List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);<br></p><p> int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);<br></p><p> <br></p><p> // package result<br></p><p> Map<String, Object> maps = new HashMap<String, Object>();<br></p><p> maps.put("recordsTotal", list_count); // 总记录数<br></p><p> maps.put("recordsFiltered", list_count); // 过滤后的总记录数<br></p><p> maps.put("data", list); // 分页列表<br></p><p> return maps;<br></p><p> }<br></p>
具体的评价和改进建议:<br>1. 单一职责原则<br><br>复制代码
- <p> public void fillRealUser(String orgId, String realId, RealOrganizationUser realUser) throws AccountException {<br></p><p> /*<br></p><p> * 找到映射资源表,查找到DynaBean,执行真实用户parse<br></p><p> * */<br></p><p> DynaBean orgBean = rbacOrganizationService.findById(orgId);<br></p><p> if (orgBean == null) {<br></p><p> throw new AccountException("Can't find the org mapping from the database!");<br></p><p> }<br></p><p><br></p><p> //获取到映射的资源表和资源表主键<br></p><p> String tableProduct = orgBean.getStr("SY_PRODUCT_CODE");<br></p><p> String tableCode = orgBean.getStr("ORG_RESOURCETABLE_CODE");<br></p><p> String tableIdCode = orgBean.getStr("ORG_FIELD_PK");<br></p><p> if (Strings.isNullOrEmpty(tableCode) || Strings.isNullOrEmpty(tableIdCode)) {<br></p><p> throw new AccountException("Can't find the tableCode or pk code from the org mapping!");<br></p><p> }<br></p><p><br></p><p> //获取映射字段,账号名称、账号编码、账号手机、账号邮箱、账号头像<br></p><p> String accountNameField = orgBean.getStr("ORG_ACCOUNT_NAME");<br></p><p> String accountCodeField = orgBean.getStr("ORG_ACCOUNT_CODE");<br></p><p> String accountPhoneField = orgBean.getStr("ORG_ACCOUNT_PHONE");<br></p><p> String accountEmailField = orgBean.getStr("ORG_ACCOUNT_MAIL");<br></p><p> String accountAvatarField = orgBean.getStr("ORG_ACCOUNT_AVATAR");<br></p><p><br></p><p> if (Strings.isNullOrEmpty(accountNameField) || Strings.isNullOrEmpty(accountCodeField)<br></p><p> || Strings.isNullOrEmpty(accountPhoneField) || Strings.isNullOrEmpty(accountEmailField)<br></p><p> || Strings.isNullOrEmpty(accountAvatarField)) {<br></p><p> throw new AccountException("Can't find the mapping fields from the org mapping!");<br></p><p> }<br></p><p><br></p><p> OrgTableRpcService orgTableRpcService;<br></p><p> if (Strings.isNullOrEmpty(tableProduct) || "rbac".equals(tableProduct)) {<br></p><p> orgTableRpcService = SpringContextHolder.getBean(OrgTableRpcService.class);<br></p><p> } else {<br></p><p> orgTableRpcService = RpcSchemaFactory.getRemoteProvierClazz(tableProduct, "orgTableRpcService", OrgTableRpcService.class);<br></p><p> }<br></p><p><br></p><p> //获取到bean进行parse,执行返回<br></p><p> List<DynaBean> userBeanList = orgTableRpcService.findOrgUsers(tableCode, NativeQuery.build().eq(tableIdCode, realId));<br></p><p> if (userBeanList == null || userBeanList.isEmpty()) {<br></p><p> throw new AccountException(String.format("Can't find the org user {} from the org config!",realId));<br></p><p> }<br></p><p><br></p><p> DynaBean userBean = userBeanList.get(0);<br></p><p> realUser.parse(userBean.getValues());<br></p><p> if (!OrgType.DEPARTMENT_ORG_ID.getCode().equals(orgBean.getStr("JE_RBAC_ORG_ID"))) {<br></p><p> realUser.setId(userBean.getStr(tableIdCode));<br></p><p> realUser.setName(userBean.getStr(accountNameField));<br></p><p> realUser.setCode(userBean.getStr(accountCodeField));<br></p><p> realUser.setAvatar(userBean.getStr(accountAvatarField));<br></p><p> realUser.setPhone(userBean.getStr(accountPhoneField));<br></p><p> realUser.setEmail(userBean.getStr(accountEmailField));<br></p><p> RealOrganization organization = new Department();<br></p><p> organization.setId(orgBean.getStr("JE_RBAC_ORG_ID"));<br></p><p> organization.setName(orgBean.getStr("ORG_NAME"));<br></p><p> organization.setCode(orgBean.getStr("ORG_CODE"));<br></p><p> realUser.setOrganization(organization);<br></p><p> }<br></p><p><br></p><p> }</p><p><br></p>
代码质量评价<br><br>复制代码
- <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <span /pp >解释:功能编码为特殊字段,修改编码存在风险,需要您同步修改前端事件JS和背景代码中使用该功能的编码,请慎重修改!</span/pp ><br> <br> <br> <br><br><br><br><br>
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |