From 87365f80876cfbf01fddb77911edbc8b2fdf7176 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Thu, 22 Jul 2021 23:02:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E5=BA=94=E6=80=A5?= =?UTF-8?q?=E5=B1=80=E6=A1=88=E4=BB=B6=E4=B8=8A=E6=8A=A5=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20=E6=98=8E=E7=A1=AE=E4=BA=86=E6=A3=80=E6=9F=A5=E9=A1=B9?= =?UTF-8?q?=E3=80=81=E7=BD=91=E6=A0=BC=E5=91=98=E4=B8=8E=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E4=B8=89=E8=80=85=E4=B9=8B=E9=97=B4=E7=9A=84=E5=85=B3=E7=B3=BB?= =?UTF-8?q?=EF=BC=8C=E7=AE=80=E5=8C=96=E4=BA=86=E9=85=8D=E7=BD=AE=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E8=AF=B4=E6=98=8E=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 43 +++++++ .../IndustryCheckItemAppController.java | 11 ++ .../check2/Check2CompleteRunnable.java | 4 +- .../runnable/check2/Check2HandleRunnable.java | 6 +- .../runnable/check2/Check2MsgRequest.java | 6 +- .../cm/inspection/service/BaseService.java | 2 +- .../service/check/impl/Check2ServiceImpl.java | 29 ++++- .../service/check/impl/CheckServiceImpl.java | 2 +- .../IIndustryCheckItemService.java | 11 +- .../impl/IndustryCheckItemServiceImpl.java | 19 ++- .../enterpriseofgridoperator-mapper.xml | 113 ++---------------- .../list-industrycheckitem.html | 4 +- .../v1/list-industrycheckitem-v1.html | 2 +- .../v2/list-industrycheckitem-v2.html | 2 +- 14 files changed, 129 insertions(+), 125 deletions(-) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..caf13c5 --- /dev/null +++ b/readme.md @@ -0,0 +1,43 @@ +# 代码组成 + +1. 该项目代码由两部分组成,其中第一部分为**包头应急管理局**,第二部分为**集宁环保厅** +2. 包头应急管理局由原始代码 + check2 + 带有 v1 标记的代码 +3. 集宁环保厅的由 v2 标记的代码 + +# 业务逻辑 + +## 包头应急局 + +1. 案件由网格员进行上报,网格员的人员级别为5级,网格类型有**嘎查村(社区)**,**苏木乡镇(街道)**,**工业园区**等三类 +2. 企业需要有网格员去认领 +3. 上报案件时,检查项根据网格员的**网格类型**来获取。 +4. 网格类型与检查项的关联表为 **gen_industry_check_item_v1**,表中 **classify_id** 对应的就是网格员表中的 **grid_type** 字段,同时对应这企业表中的 **classify** 字段。 +5. 案件上报后,后台查询上报人的网格员属性,根据 **grid_type** 查询检查项用来判断企业的检查内容是否通过。 + +### 案件的流转流程 + +1. 每月进行安全隐患巡检,根据企业实际情况上报。 +2. 所有必查的检查项全部通过则流程结束 +3. 如果检查项中存在**必查**且**未通过**,则进入案件复查。 +4. 案件复查,如果必查项全部通过,则流程结束,如果存在**必查**且**未通过**检查项,则案件上报到**街道办事处**一级,由该级网格长处理案件 +5. 街道办事处级网格长可以选在完成案件或者交由上级处理 +6. 当将案件交由上级处理时,街道办事处一级可选择将案件上报至**直属领导(旗县区委办局)**或者上报至**旗县区管理员**,其中上报至**旗县区管理员**时,由于不是直接上下级关系,因此在上报时需要选择对应的网格长。 +7. 旗县区委办局的网格长可以选择对案件进行处理、回退。 +8. 旗县区管理员可以选择对案件进行处理、回退和交由**上级(市管理员)**处理。 +9. 市管理员可以对案件进行处理、回退。该级市案件流转流程中的最后一级。 +10. 只要用户处理过案件(案件的经办人或处理人),则可以再历史案件中看到自己处理过的案件。 + +### 案件随机指派 + +1. taskCheck的v1版本 + +## 集宁环保厅 + +1. 案件上报与流转与包头一致 +2. 不一致的地方是,集宁环保的检查选项与企业行业有关,而不与网格长有关。 +3. 上报案件时,检查项由当前检查的企业中的行业(industryId)决定。 +4. 上报时校对检查项也是由企业中的行业(industryId)决定。 + +### 案件随机指派 + +1. taskCheck的v2版本 \ No newline at end of file diff --git a/src/main/java/com/cm/inspection/controller/app/apis/industrycheckitem/IndustryCheckItemAppController.java b/src/main/java/com/cm/inspection/controller/app/apis/industrycheckitem/IndustryCheckItemAppController.java index 1320d4e..4a33115 100644 --- a/src/main/java/com/cm/inspection/controller/app/apis/industrycheckitem/IndustryCheckItemAppController.java +++ b/src/main/java/com/cm/inspection/controller/app/apis/industrycheckitem/IndustryCheckItemAppController.java @@ -66,6 +66,17 @@ public class IndustryCheckItemAppController extends AbstractController { return industryCheckItemService.listIndustryCheckItem(params); } + @ApiOperation(value = "我的检查项列表", notes = "我的检查项列表接口") + @ApiImplicitParams({ + @ApiImplicitParam(name = "token", value = "token", paramType = "header") + }) + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("list-of-mine") + public List listOfMine(@RequestHeader("token") String token) throws SearchException { + Map params = requestParams(); + return industryCheckItemService.listOfMine(token, params); + } + @ApiOperation(value = "行业检查项分页列表", notes = "行业检查项分页列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "token", paramType = "header"), diff --git a/src/main/java/com/cm/inspection/runnable/check2/Check2CompleteRunnable.java b/src/main/java/com/cm/inspection/runnable/check2/Check2CompleteRunnable.java index b7ad94c..65f44bd 100644 --- a/src/main/java/com/cm/inspection/runnable/check2/Check2CompleteRunnable.java +++ b/src/main/java/com/cm/inspection/runnable/check2/Check2CompleteRunnable.java @@ -22,7 +22,7 @@ public class Check2CompleteRunnable implements Runnable { private String module = BaseService.MODULE_CHECK2_COMPLETE; private String menu = BaseService.MENU_CHECK2_COMPLETE; private String checkId; - private static final String TARGET = "GO_CHECK2_INFO"; + private static final String TARGET = "GO_CHECK2_COMPLETE"; private IProcessService processService; public Check2CompleteRunnable(String noticeUrl) { @@ -43,7 +43,7 @@ public class Check2CompleteRunnable implements Runnable { check2MsgRequest.setTitle("检查案件完结通知"); check2MsgRequest.setMsg("您有一条检查案件处理完成,请点击查看详情"); check2MsgRequest.setUserIdSet(userIdSet); - check2MsgRequest.setCheckId(checkId); + check2MsgRequest.setCheckId("checkId:" + checkId); check2MsgRequest.postJson(Check2MsgRequest.getNoticeUrl(noticeUrl)); } diff --git a/src/main/java/com/cm/inspection/runnable/check2/Check2HandleRunnable.java b/src/main/java/com/cm/inspection/runnable/check2/Check2HandleRunnable.java index cd4a7e6..2e78993 100644 --- a/src/main/java/com/cm/inspection/runnable/check2/Check2HandleRunnable.java +++ b/src/main/java/com/cm/inspection/runnable/check2/Check2HandleRunnable.java @@ -20,7 +20,7 @@ public class Check2HandleRunnable implements Runnable { private String module; private String menu; private String checkId; - private static final String TARGET = "GO_CHECK2_INFO"; + private static final String TARGET = "GO_CHECK2_HANDLE"; public Check2HandleRunnable(String noticeUrl, GridPersonnelTypeEnum gridPersonnelTypeEnum) { this.noticeUrl = noticeUrl; @@ -45,10 +45,10 @@ public class Check2HandleRunnable implements Runnable { check2MsgRequest.setTarget(TARGET); check2MsgRequest.setModule(module); check2MsgRequest.setMenu(menu); - check2MsgRequest.setTitle("检查案件代办通知"); + check2MsgRequest.setTitle("检查案件待办通知"); check2MsgRequest.setMsg("您有一条检查案件需要处理,请点击查看详情"); check2MsgRequest.setUserIdSet(userIdSet); - check2MsgRequest.setCheckId(checkId); + check2MsgRequest.setCheckId("checkId:" + checkId); check2MsgRequest.postJson(Check2MsgRequest.getNoticeUrl(noticeUrl)); } diff --git a/src/main/java/com/cm/inspection/runnable/check2/Check2MsgRequest.java b/src/main/java/com/cm/inspection/runnable/check2/Check2MsgRequest.java index ea87939..e3a64f8 100644 --- a/src/main/java/com/cm/inspection/runnable/check2/Check2MsgRequest.java +++ b/src/main/java/com/cm/inspection/runnable/check2/Check2MsgRequest.java @@ -34,9 +34,9 @@ public class Check2MsgRequest extends AbstractRestTemplate { JSONArray noticeJSONArray = new JSONArray(); JSONObject notice = new JSONObject(); notice.put("userIds", userIdSet); - notice.put("title", "案件完成通知"); - notice.put("msg", "您的案件已完结,请点击查看"); - notice.put("target", "GO_CHECK2_INFO"); + notice.put("title", title); + notice.put("msg", msg); + notice.put("target", target); notice.put("system", BaseService.SYSTEM_NAME); notice.put("module", module); notice.put("menu", menu); diff --git a/src/main/java/com/cm/inspection/service/BaseService.java b/src/main/java/com/cm/inspection/service/BaseService.java index 10f37b1..0b33e74 100644 --- a/src/main/java/com/cm/inspection/service/BaseService.java +++ b/src/main/java/com/cm/inspection/service/BaseService.java @@ -28,7 +28,7 @@ public class BaseService extends AbstractService { public static final String MODULE_TASK_V2 = "task_v2"; public static final String MODULE_EIA_REPORT = "eia_report"; public static final String MODULE_DISCHARGE_PERMIT = "discharge_permit"; - public static final String MODULE_CHECK2_STREET = "module_check2"; + public static final String MODULE_CHECK2_STREET = "module_check2_street"; public static final String MODULE_CHECK2_DISTRICT_DEPARTMENT = "module_check2_district_department"; public static final String MODULE_CHECK2_DISTRICT = "module_check2_district"; public static final String MODULE_CHECK2_CITY = "module_check2_city"; diff --git a/src/main/java/com/cm/inspection/service/check/impl/Check2ServiceImpl.java b/src/main/java/com/cm/inspection/service/check/impl/Check2ServiceImpl.java index cb1b411..f48f603 100644 --- a/src/main/java/com/cm/inspection/service/check/impl/Check2ServiceImpl.java +++ b/src/main/java/com/cm/inspection/service/check/impl/Check2ServiceImpl.java @@ -274,7 +274,7 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { } private SuccessResultList> listPageReCheckByUserId(String userId, ListPage page) { - List tasks = processService.listTaskByAssigneeAndVariableKeyValue(userId, CheckProcessParamsEnum.IS_RE_REPORT.getValue(), 0); + List tasks = processService.listTaskByAssignee(userId); List checkIds = listLastCheckId(tasks); if (checkIds.isEmpty()) { return new SuccessResultList(new ArrayList<>(), 1, 0L); @@ -432,6 +432,9 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { processService.completeByTaskId(task.getId(), params); LOG.debug("流程回退"); + + // 通知 + noticeHandler(checkId, streetUserId, GridPersonnelTypeEnum.STREET); } @Override @@ -532,6 +535,9 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { processService.completeByTaskId(task.getId(), params); LOG.debug("流程回退"); + + // 通知 + noticeHandler(checkId, streetUserId, GridPersonnelTypeEnum.STREET); } @Override @@ -618,6 +624,9 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { processService.completeByTaskId(task.getId(), params); LOG.debug("流程回退"); + + // 通知 + noticeHandler(checkId, districtUserId, GridPersonnelTypeEnum.DISTRICT); } /** @@ -742,7 +751,7 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { processService.completeByTaskId(task.getId(), params); // 通知 - noticeHandler(checkId, gridPersonnelDTO.getUserId(), GridPersonnelTypeEnum.DISTRICT_DEPARTMENT); + noticeHandler(checkId, gridPersonnelDTO.getUserId(), GridPersonnelTypeEnum.DISTRICT); } /** @@ -859,10 +868,18 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { * 保存检查结果 */ private Integer saveCheckResult(String token, String checkId, Check2VO check2VO) throws Exception { + String userId = AppTokenManager.getInstance().getToken(token).getUserId(); + GridPersonnelDTO gridPersonnelDTO = gridPersonnelService.getGridPersonnelByUserId(userId); + if (gridPersonnelDTO == null) { + throw new SearchException("您不是网格员或网格长,请联系管理员"); + } LOG.debug("获取检查企业"); EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseSingleById(check2VO.getEnterpriseId()); + if (enterpriseDTO == null) { + throw new SearchException("企业不存在"); + } LOG.debug("获取企业检查项列表"); - List industryCheckItemDTOs = industryCheckItemService.listIndustryCheckItemByNatureId(enterpriseDTO.getNature()); + List industryCheckItemDTOs = industryCheckItemService.listIndustryCheckItemByClassifyId(gridPersonnelDTO.getGridType()); // 获取检查项的所有选项列表 List checkItemOptionDTOs = new ArrayList<>(); for (IndustryCheckItemDTO industryCheckItemDTO : industryCheckItemDTOs) { @@ -879,8 +896,10 @@ public class Check2ServiceImpl extends BaseService implements ICheck2Service { hiddenDangerReportVO.setCheckItemType(getCheckItemType(checkItemOptionDTOs, hiddenDangerReportVO.getCheckItemOptionId())); boolean isMustCheckItem = false; for (IndustryCheckItemDTO industryCheckItemDTO : industryCheckItemDTOs) { - if (StringUtils.equals(hiddenDangerReportVO.getCheckItemId(), industryCheckItemDTO.getCheckItemId()) - && industryCheckItemDTO.getIsMustCheck() == HiddenDangerReportTypeEnum.MUST.getValue()) { + if (!StringUtils.equals(hiddenDangerReportVO.getCheckItemId(), industryCheckItemDTO.getCheckItemId())) { + continue; + } + if (industryCheckItemDTO.getIsMustCheck() == HiddenDangerReportTypeEnum.MUST.getValue()) { hiddenDangerReportVO.setType(HiddenDangerReportTypeEnum.MUST.getValue()); isMustCheckItem = true; break; diff --git a/src/main/java/com/cm/inspection/service/check/impl/CheckServiceImpl.java b/src/main/java/com/cm/inspection/service/check/impl/CheckServiceImpl.java index 0d85d19..db347c3 100644 --- a/src/main/java/com/cm/inspection/service/check/impl/CheckServiceImpl.java +++ b/src/main/java/com/cm/inspection/service/check/impl/CheckServiceImpl.java @@ -271,7 +271,7 @@ public class CheckServiceImpl extends BaseService implements ICheckService { // 获取企业信息 EnterpriseDTO enterpriseDTO = enterpriseService.getEnterpriseSingleById(checkVO.getEnterpriseId()); // 获取企业检查项列表 - List industryCheckItemDTOs = industryCheckItemService.listIndustryCheckItemByNatureId(enterpriseDTO.getNature()); + List industryCheckItemDTOs = industryCheckItemService.listIndustryCheckItemByClassifyId(enterpriseDTO.getNature()); // 获取判断通过、不通过的所有选项列表 List checkItemOptionDTOs = new ArrayList<>(); for (IndustryCheckItemDTO industryCheckItemDTO : industryCheckItemDTOs) { diff --git a/src/main/java/com/cm/inspection/service/industrycheckitem/IIndustryCheckItemService.java b/src/main/java/com/cm/inspection/service/industrycheckitem/IIndustryCheckItemService.java index 71c1560..b836b04 100644 --- a/src/main/java/com/cm/inspection/service/industrycheckitem/IIndustryCheckItemService.java +++ b/src/main/java/com/cm/inspection/service/industrycheckitem/IIndustryCheckItemService.java @@ -116,5 +116,14 @@ public interface IIndustryCheckItemService { * @return * @throws SearchException */ - List listIndustryCheckItemByNatureId(String nature) throws SearchException; + List listIndustryCheckItemByClassifyId(String nature) throws SearchException; + + /** + * 我的检查项 + * + * @param token + * @param params + * @return + */ + List listOfMine(String token, Map params); } diff --git a/src/main/java/com/cm/inspection/service/industrycheckitem/impl/IndustryCheckItemServiceImpl.java b/src/main/java/com/cm/inspection/service/industrycheckitem/impl/IndustryCheckItemServiceImpl.java index 913e41c..d1a607b 100644 --- a/src/main/java/com/cm/inspection/service/industrycheckitem/impl/IndustryCheckItemServiceImpl.java +++ b/src/main/java/com/cm/inspection/service/industrycheckitem/impl/IndustryCheckItemServiceImpl.java @@ -5,15 +5,18 @@ import com.cm.common.exception.SearchException; import com.cm.common.pojo.ListPage; import com.cm.common.result.SuccessResult; import com.cm.common.result.SuccessResultList; +import com.cm.common.token.app.AppTokenManager; import com.cm.common.utils.HashMapUtil; import com.cm.common.utils.UUIDUtil; import com.cm.inspection.dao.industrycheckitem.IIndustryCheckItemDao; import com.cm.inspection.pojo.dtos.checkitemoption.CheckItemOptionDTO; +import com.cm.inspection.pojo.dtos.gridpersonnel.GridPersonnelDTO; import com.cm.inspection.pojo.dtos.industrycheckitem.IndustryCheckItemDTO; import com.cm.inspection.pojo.vos.industrycheckitem.IndustryCheckItemBindVO; import com.cm.inspection.pojo.vos.industrycheckitem.IndustryCheckItemVO; import com.cm.inspection.service.BaseService; import com.cm.inspection.service.checkitemoption.ICheckItemOptionService; +import com.cm.inspection.service.gridpersonnel.IGridPersonnelService; import com.cm.inspection.service.industrycheckitem.IIndustryCheckItemService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -37,6 +40,8 @@ public class IndustryCheckItemServiceImpl extends BaseService implements IIndust private IIndustryCheckItemDao industryCheckItemDao; @Autowired private ICheckItemOptionService checkItemOptionService; + @Autowired + private IGridPersonnelService gridPersonnelService; @Override public SuccessResult saveIndustryCheckItemByClassifyId(String classifyId, IndustryCheckItemBindVO industryCheckItemBindVO) throws Exception { @@ -165,12 +170,22 @@ public class IndustryCheckItemServiceImpl extends BaseService implements IIndust } @Override - public List listIndustryCheckItemByNatureId(String nature) throws SearchException { + public List listIndustryCheckItemByClassifyId(String nature) throws SearchException { Map params = getHashMap(1); params.put("classifyId", nature); return listIndustryCheckItem(params); } + @Override + public List listOfMine(String token, Map params) { + String userId = AppTokenManager.getInstance().getToken(token).getUserId(); + GridPersonnelDTO gridPersonnelDTO = gridPersonnelService.getGridPersonnelByUserId(userId); + if (gridPersonnelDTO == null) { + throw new SearchException("您不是网格员或网格长,请联系管理员"); + } + return listIndustryCheckItemByClassifyId(gridPersonnelDTO.getGridType()); + } + /** * 设置检查选项 * @@ -186,7 +201,7 @@ public class IndustryCheckItemServiceImpl extends BaseService implements IIndust List checkItemOptionDTOs = checkItemOptionService.listCheckItemOption(params); for (IndustryCheckItemDTO industryCheckItemDTO : industryCheckItemDTOs) { List checkItemOptions = industryCheckItemDTO.getCheckItemOptions(); - if(checkItemOptions == null) { + if (checkItemOptions == null) { checkItemOptions = new ArrayList<>(); } for (int i = 0; i < checkItemOptionDTOs.size(); i++) { diff --git a/src/main/resources/mybatis/mapper/enterpriseofgridoperator/enterpriseofgridoperator-mapper.xml b/src/main/resources/mybatis/mapper/enterpriseofgridoperator/enterpriseofgridoperator-mapper.xml index 1cb5e9a..bb1361e 100644 --- a/src/main/resources/mybatis/mapper/enterpriseofgridoperator/enterpriseofgridoperator-mapper.xml +++ b/src/main/resources/mybatis/mapper/enterpriseofgridoperator/enterpriseofgridoperator-mapper.xml @@ -45,26 +45,11 @@ - - - - - - - - - - - - - - - @@ -158,7 +143,7 @@ - SELECT t1.user_id, t1.enterprise_id, @@ -245,86 +230,8 @@ - - - - SELECT t1.enterprise_id, t1.name name_join_by_enterprise_id, @@ -418,7 +325,7 @@ - SELECT user_id enterprise_id @@ -431,7 +338,7 @@ - SELECT COUNT(*) FROM @@ -451,7 +358,7 @@ - SELECT jt1.user_id, jt1.area1, @@ -480,7 +387,7 @@ - SELECT t1.enterprise_id, t1.name name_join_by_enterprise_id, @@ -552,7 +459,7 @@ - SELECT COUNT(*) FROM @@ -599,7 +506,7 @@ - SELECT COUNT(*) FROM @@ -646,7 +553,7 @@ - SELECT COUNT(*) FROM @@ -687,7 +594,7 @@ - SELECT enterprise_id FROM diff --git a/src/main/resources/static/route/industrycheckitem/list-industrycheckitem.html b/src/main/resources/static/route/industrycheckitem/list-industrycheckitem.html index a02abb3..2eeb967 100644 --- a/src/main/resources/static/route/industrycheckitem/list-industrycheckitem.html +++ b/src/main/resources/static/route/industrycheckitem/list-industrycheckitem.html @@ -54,7 +54,7 @@ var checkCheckItemIdArray = []; for(var i = 0, item; item = data[i++];) { checkCheckItemIdArray.push(item.checkItemId); - $('input[name="'+ item.checkItemId +'_type"][value='+ item.type +']').attr('checked', true); + $('input[name="'+ item.checkItemId +'_is_must_check"][value='+ item.isMustCheck +']').attr('checked', true); } treeTableObj.setChecked(checkCheckItemIdArray); form.render('radio', 'dataTable'); @@ -102,7 +102,7 @@ if(row.type != 2) { return '无'; } - return ''; + return ''; } }, ] diff --git a/src/main/resources/static/route/industrycheckitem/v1/list-industrycheckitem-v1.html b/src/main/resources/static/route/industrycheckitem/v1/list-industrycheckitem-v1.html index b5a2e92..865a6ae 100644 --- a/src/main/resources/static/route/industrycheckitem/v1/list-industrycheckitem-v1.html +++ b/src/main/resources/static/route/industrycheckitem/v1/list-industrycheckitem-v1.html @@ -102,7 +102,7 @@ if(row.type != 2) { return '无'; } - return ''; + return ''; } }, ] diff --git a/src/main/resources/static/route/industrycheckitem/v2/list-industrycheckitem-v2.html b/src/main/resources/static/route/industrycheckitem/v2/list-industrycheckitem-v2.html index 2542a64..685bbbc 100644 --- a/src/main/resources/static/route/industrycheckitem/v2/list-industrycheckitem-v2.html +++ b/src/main/resources/static/route/industrycheckitem/v2/list-industrycheckitem-v2.html @@ -102,7 +102,7 @@ if(row.type != 2) { return '无'; } - return ''; + return ''; } }, ]