Browse Source

feature: 部分功能的默认租户处理

luo.yibo@datuai.com 1 năm trước cách đây
mục cha
commit
28ec3952fe

+ 3 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/card/CardBusiness.java

@@ -19,7 +19,7 @@ import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
-import org.dromara.common.core.constant.DefaultConstants;
+import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ResultInfo;
 import org.dromara.common.core.enums.*;
@@ -48,6 +48,7 @@ public class CardBusiness {
     private final IPtBagService ptBagService;
     private final IPtWorkstationService workstationService;
     private final IPtParameterService ptParameterService;
+    private final DefaultConfig defaultConfig;
 
     public R<String> openVirtualCard(PtCardBo cardBo) {
         String resultMsg;
@@ -218,7 +219,7 @@ public class CardBusiness {
         String mainCard = cardBo.getMainCard();
         Long stationNumb = cardBo.getStationNumb();
         CardOperateEnum operateType = cardBo.getOperateType();
-        String tenantId = cardBo.getTenantId() == null ? DefaultConstants.TENANT_ID : cardBo.getTenantId();
+        String tenantId = cardBo.getTenantId() == null ? defaultConfig.getTenantId() : cardBo.getTenantId();
 
         if (ObjectUtil.isEmpty(factoryId) || factoryId == 0) {
             return R.fail(new ResultInfo(ResultCodeEnum.PARAM_IS_INVALID, "物理卡号必须大于0"));

+ 3 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/PayBaseBusiness.java

@@ -33,8 +33,8 @@ import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
+import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.enums.CreditStatusEnum;
 import org.dromara.common.core.enums.CreditTypeEnum;
 import org.dromara.common.core.exception.payments.PaymentsException;
@@ -72,6 +72,7 @@ public class PayBaseBusiness {
     private final IXfCreditAccountService creditAccountService;
     private final IXfUserTotalService userTotalService;
     private final IPtSubsidyitemService subsidyItemService;
+    private final DefaultConfig defaultConfig;
 
     /**
      * 校验第三方支付是否已入账
@@ -164,7 +165,7 @@ public class PayBaseBusiness {
             return null;
         }
         // 这里的工作站Id实际上对应的是工作站的编号
-        return workstationService.queryVoByNumber(orderBo.getStationId(), DefaultConstants.TENANT_ID);
+        return workstationService.queryVoByNumber(orderBo.getStationId(), defaultConfig.getTenantId());
     }
 
     /**

+ 8 - 7
ruoyi-modules/ruoyi-hotel/src/main/java/org/dromara/hotel/service/impl/KfOrderServiceImpl.java

@@ -4,21 +4,21 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.RandomUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
-import org.dromara.common.core.constant.*;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.dromara.backstage.api.RemotePtRoomService;
+import org.dromara.common.core.config.DefaultConfig;
+import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.core.constant.HotelBusinessConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.HotelRoomStatusEnum;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.SmsUtils;
-import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -30,8 +30,9 @@ import org.dromara.hotel.domain.bo.ChangeRoomBo;
 import org.dromara.hotel.domain.bo.ChangeRoomStatusBo;
 import org.dromara.hotel.domain.bo.KfGuestBo;
 import org.dromara.hotel.domain.bo.KfOrderBo;
-import org.dromara.hotel.domain.vo.*;
-import org.dromara.hotel.mapper.KfGuestMapper;
+import org.dromara.hotel.domain.vo.KfOrderVo;
+import org.dromara.hotel.domain.vo.KfTeamGuestVo;
+import org.dromara.hotel.domain.vo.KfTeamVo;
 import org.dromara.hotel.mapper.KfOrderMapper;
 import org.dromara.hotel.service.IKfGuestTeamRService;
 import org.dromara.hotel.service.IKfOrderService;
@@ -39,7 +40,6 @@ import org.dromara.hotel.service.IKfTeamService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.Duration;
 import java.util.*;
 import java.util.concurrent.LinkedBlockingQueue;
 
@@ -58,6 +58,7 @@ public class KfOrderServiceImpl implements IKfOrderService {
     private final KfOrderMapper baseMapper;
     private final IKfTeamService teamService;
     private final IKfGuestTeamRService guestTeamService;
+    private final DefaultConfig defaultConfig;
 
     /**
      * 查询散客入住
@@ -584,7 +585,7 @@ public class KfOrderServiceImpl implements IKfOrderService {
             //设置团客报到状态
             guestTeamService.setGuestCheckInStatus(bo.getGuestId(), bo.getTeamId());
             //设置房间状态
-            roomService.updateGuestRoomStatus(bo.getRoomCode(), DefaultConstants.TENANT_ID, HotelRoomStatusEnum.YZ.code());
+            roomService.updateGuestRoomStatus(bo.getRoomCode(), defaultConfig.getTenantId(), HotelRoomStatusEnum.YZ.code());
             KfOrderBo queryBo = new KfOrderBo();
             queryBo.setId(bo.getId());
             queryBo.setOrderStatus(HotelBusinessConstants.ORDER_STATUS_RZ);

+ 3 - 2
ruoyi-server/ruoyi-server-base/src/main/java/org/dromara/server/base/service/yktOperation/SyncRemotePtCardCenterService.java

@@ -12,6 +12,7 @@ import org.dromara.backstage.api.RemoteBagService;
 import org.dromara.backstage.api.domain.bo.RemoteCardBo;
 import org.dromara.backstage.api.domain.bo.RemoteConsumptionBo;
 import org.dromara.backstage.api.domain.bo.RemotePurseInOutBo;
+import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.enums.CardOperateEnum;
 import org.dromara.common.core.enums.CardStatusEnum;
@@ -27,7 +28,7 @@ import java.util.Map;
 @Slf4j
 @RequiredArgsConstructor
 public class SyncRemotePtCardCenterService {
-
+    private final DefaultConfig defaultConfig;
     @DubboReference
     private final RemoteBagService bagService;
 
@@ -163,7 +164,7 @@ public class SyncRemotePtCardCenterService {
             bo.setOperateType(CardOperateEnum.ISSUE);
         }
         bo.setStationNumb(ObjUtil.isNotEmpty(initParam.get("workStationNumb")) ? Long.parseLong(initParam.get("workStationNumb").toString()) : 0);
-        bo.setTenantId(ObjUtil.isNotEmpty(initParam.get("tenantId")) ? initParam.get("tenantId").toString() : DefaultConstants.TENANT_ID);
+        bo.setTenantId(ObjUtil.isNotEmpty(initParam.get("tenantId")) ? initParam.get("tenantId").toString() : defaultConfig.getTenantId());
         bo.setOldCardNo(ObjUtil.isNotEmpty(initParam.get("oldCardNo")) ? Long.parseLong(initParam.get("oldCardNo").toString()) : 0);
         bo.setOldFactoryId(ObjUtil.isNotEmpty(initParam.get("oldFactoryFixId")) ? Long.parseLong(initParam.get("oldFactoryFixId").toString()) : 0);
         bo.setOldCardId(ObjUtil.isNotEmpty(initParam.get("oldCardId")) ? Long.parseLong(initParam.get("oldCardId").toString()) : 0);

+ 1 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/TermBusiness.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.server.consume.cache.TokenManager;
 import org.dromara.server.consume.domain.vo.XfTermVo;

+ 2 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/convert/strategy/impl/YcRecordConvertStrategyImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.common.util.CardDateUtils;
 import org.dromara.server.consume.constant.TermSupplierConstants;
@@ -62,7 +63,7 @@ public class YcRecordConvertStrategyImpl implements IRecordConvertStrategy {
         if(ObjectUtil.isNotEmpty(bo)){
             YcConsumeInfo yc = new YcConsumeInfo();
             yc.setConsumeValue(bo.getConsumeMoney().floatValue());
-            yc.setConsumeDate(DateUtil.format(bo.getConsumeDate(),DefaultConstants.TERM_DATE_FORMAT));
+            yc.setConsumeDate(DateUtil.format(bo.getConsumeDate(), DefaultConstants.TERM_DATE_FORMAT));
             yc.setCreateDate(DateUtil.format(bo.getConsumeDate(),DefaultConstants.TERM_DATE_FORMAT));
             yc.setCardValueXY(Float.parseFloat("20"));
             yc.setCardValue(bo.getBalance().floatValue());

+ 4 - 3
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/XfTermServiceImpl.java

@@ -10,6 +10,7 @@ import org.dromara.backstage.api.RemotePtAccountService;
 import org.dromara.backstage.api.RemotePtRoomService;
 import org.dromara.backstage.api.domain.vo.RemotePtAccountVo;
 import org.dromara.backstage.api.domain.vo.RemotePtRoomVo;
+import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.redis.utils.RedisUtils;
@@ -40,7 +41,7 @@ public class XfTermServiceImpl implements IXfTermService {
     RemotePtAccountService remotePtAccountService;
 
     private final XfTermMapper baseMapper;
-
+    private final DefaultConfig defaultConfig;
 
     /**
      * 查询消费设备列表
@@ -50,7 +51,7 @@ public class XfTermServiceImpl implements IXfTermService {
     @Override
     public List<XfTermVo> queryList() {
         XfTermBo bo = new XfTermBo();
-        bo.setTenantId(DefaultConstants.TENANT_ID);
+        bo.setTenantId(defaultConfig.getTenantId());
         return this.queryList(bo);
     }
 
@@ -114,7 +115,7 @@ public class XfTermServiceImpl implements IXfTermService {
         }
         XfTermBo bo = new XfTermBo();
         bo.setTermNo(termNo);
-        bo.setTenantId(DefaultConstants.TENANT_ID);
+        bo.setTenantId(defaultConfig.getTenantId());
 
         return this.queryVoOneByBo(bo);
     }

+ 0 - 37
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/InitRunnerTest.java

@@ -1,37 +0,0 @@
-package org.dromara.server.sync;
-
-import lombok.RequiredArgsConstructor;
-import org.dromara.server.sync.service.SyncGraduateService;
-import org.dromara.server.sync.service.SyncHrService;
-import org.dromara.server.sync.service.SyncTrainService;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
-
-/**
- * name: InitRunnerTest
- * package: org.dromara.server.sync
- * description: 同步测试入口
- * date: 2024-10-21 10:48:30 10:48
- *
- * @author luoyibo
- * @version 0.1
- * @since JDK 1.8
- */
-@RequiredArgsConstructor
-@Component
-public class InitRunnerTest implements CommandLineRunner {
-    private final SyncGraduateService syncGraduateClass;
-    private final SyncHrService syncHrService;
-    private final SyncTrainService syncTrainService;
-    @Override
-    public void run(String... args) throws Exception {
-        //syncHrService.syncDept();
-        //syncHrService.syncTeacher();
-
-        //syncGraduateClass.syncGraduateClass();
-        //syncGraduateClass.syncGraduate();
-
-        // syncTrainService.syncTrainClass();
-        //syncTrainService.syncTrainee();
-    }
-}

+ 10 - 2
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncGraduateService.java

@@ -9,7 +9,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.server.base.service.dept.strategy.ISyncDeptStrategy;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
+import org.dromara.server.base.service.user.strategy.ISyncUserStrategy;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
 import org.dromara.server.common.constant.SyncResourceConstants;
 import org.dromara.server.common.domain.bo.ResourceDept;
@@ -38,6 +41,7 @@ public class SyncGraduateService {
     private final SyncDeptStrategyContent syncDeptStrategyContent;
     private final SyncUserStrategyContent syncUserStrategyContent;
     private final DefaultConfig defaultConfig;
+    private final SpringUtils springUtils;
 
     /**
      * 全量同步研究生班级
@@ -64,7 +68,10 @@ public class SyncGraduateService {
                 resourceDeptlist.add(dept);
             }
             log.info("[全量获取到的研究生班级数据]-共[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
-            syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.GRADUATE_CLASS);
+            ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.GRADUATE_CLASS, ISyncDeptStrategy.class);
+            syncDeptStrategy.syncDelDept(resourceDeptlist);
+
+            // eventStrategy.doMsgHandle(eventType, eventMsg);
             return true;
         } catch (Exception e) {
             throw new ServiceException(e.getMessage());
@@ -98,7 +105,8 @@ public class SyncGraduateService {
             List<ResourcePerson> resourcePersonList = getResourcePeople(dataBo);
             log.info("[全量获取到的研究生数据]-共[{}]条-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(dataBo));
 
-            syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.GRADUATE);
+            ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.GRADUATE, ISyncUserStrategy.class);
+            syncUserStrategy.syncUser(resourcePersonList);
             return true;
         } catch (Exception e) {
             throw new ServiceException(e.getMessage());

+ 16 - 4
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncHrService.java

@@ -5,7 +5,10 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.DefaultConstants;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.server.base.service.dept.strategy.ISyncDeptStrategy;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
+import org.dromara.server.base.service.user.strategy.ISyncUserStrategy;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
 import org.dromara.server.common.constant.SyncResourceConstants;
 import org.dromara.server.common.domain.bo.ResourceDept;
@@ -48,7 +51,8 @@ public class SyncHrService {
         //     SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
         //     List<ResourceDept> resourceDeptlist = getResourceDeptList(dataBo);
         //     log.info("[全量获取到的部门数据]-共[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
-        //     syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.HR_DEPT);
+        // ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.HR_DEPT, ISyncDeptStrategy.class);
+        // syncDeptStrategy.syncDelDept(resourceDeptlist);
         //     return true;
         // } catch (Exception e) {
         //     throw new ServiceException(e.getMessage());
@@ -62,7 +66,11 @@ public class SyncHrService {
         dept.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
         dept.setTenantId(defaultConfig.getTenantId());
         resourceDeptlist.add(dept);
-        syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.HR_DEPT);
+
+        ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.HR_DEPT, ISyncDeptStrategy.class);
+        syncDeptStrategy.syncDelDept(resourceDeptlist);
+
+        // syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.HR_DEPT);
         return true;
         //endregion
 
@@ -80,7 +88,8 @@ public class SyncHrService {
         //    SyncFullDataBo dataBo = JSONUtil.toBean(res.body(), SyncFullDataBo.class);
         //    List<ResourcePerson> resourcePersonList = getResourcePeopleList(dataBo);
         //    log.info("[全量获取到的教职工数据]-[共{}条]-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(dataBo));
-        //    syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
+        // ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.TEACHER, ISyncUserStrategy.class);
+        // syncUserStrategy.syncUser(resourcePersonList);
         //    return true;
         //} catch (Exception e) {
         //    throw new ServiceException(e.getMessage());
@@ -100,7 +109,10 @@ public class SyncHrService {
          person.setTenantId(defaultConfig.getTenantId());
          person.setOperatorId(DefaultConstants.FULL_SYNC_ADMIN);
          resourcePersonList.add(person);
-         syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TEACHER);
+
+        ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.TEACHER, ISyncUserStrategy.class);
+        syncUserStrategy.syncUser(resourcePersonList);
+
          return true;
         // endregion
     }

+ 12 - 3
ruoyi-server/ruoyi-server-sync/src/main/java/org/dromara/server/sync/service/SyncTrainService.java

@@ -11,7 +11,10 @@ import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.enums.TraineeStatusEnum;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.server.base.service.dept.strategy.ISyncDeptStrategy;
 import org.dromara.server.base.service.dept.strategy.SyncDeptStrategyContent;
+import org.dromara.server.base.service.user.strategy.ISyncUserStrategy;
 import org.dromara.server.base.service.user.strategy.SyncUserStrategyContent;
 import org.dromara.server.common.constant.SyncResourceConstants;
 import org.dromara.server.common.domain.bo.ResourceDept;
@@ -57,6 +60,8 @@ public class SyncTrainService {
         //         resourceDeptlist.add(dept);
         //     }
         //     log.info("[全量获取到的培训班级数据]-[{}]条-[{}]", resourceDeptlist.size(), JSONUtil.toJsonStr(dataBo));
+        // ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.TRAIN_CLASS, ISyncDeptStrategy.class);
+        // syncDeptStrategy.syncDelDept(resourceDeptlist);
         //     syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
         //     return true;
         // } catch (Exception e) {
@@ -84,7 +89,8 @@ public class SyncTrainService {
         dept.setPlanCount(100);
         dept.setDept_num("9");
         dept.setTenantId(defaultConfig.getTenantId());
-        syncDeptStrategyContent.syncDept(resourceDeptlist, SyncResourceConstants.TRAIN_CLASS);
+        ISyncDeptStrategy syncDeptStrategy = SpringUtils.getBean(SyncResourceConstants.TRAIN_CLASS, ISyncDeptStrategy.class);
+        syncDeptStrategy.syncDelDept(resourceDeptlist);
         return true;
         // endregion
 
@@ -111,7 +117,9 @@ public class SyncTrainService {
                 getResourcePeople(resourcePersonDeptList, resourcePersonList);
                 log.info("[全量获取到的培训学员数据]-[{}]条-[{}]", resourcePersonList.size(), JSONUtil.toJsonStr(traineeDataBo));
 
-                syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+                // syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+                ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.TRAINEE, ISyncUserStrategy.class);
+                syncUserStrategy.syncUser(resourcePersonList);
                 return true;
             } catch (Exception e) {
                 log.error(e.getMessage());
@@ -153,7 +161,8 @@ public class SyncTrainService {
          //resourcePersonDeptList.add(personDept);
          //getResourcePeople(resourcePersonDeptList, resourcePersonList);
          //
-         //syncUserStrategyContent.syncUser(resourcePersonList, SyncResourceConstants.TRAINEE);
+        // ISyncUserStrategy syncUserStrategy = SpringUtils.getBean(SyncResourceConstants.TRAINEE, ISyncUserStrategy.class);
+        // syncUserStrategy.syncUser(resourcePersonList);
          //
          //return true;
         // endregion