TRX 1 рік тому
батько
коміт
2698b59e5c
14 змінених файлів з 356 додано та 15 видалено
  1. 20 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/UserIdAndOidModel.java
  2. 33 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/OrgUserFaceModel.java
  3. 33 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/OrgUserFaceParam.java
  4. 1 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/orgManager/CardInfoPoolController.java
  5. 50 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/OrgUserFaceController.java
  6. 21 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/OrgUserFaceDao.java
  7. 41 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/projectAbout/OrgUserFace.java
  8. 3 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/event/DevicePermissChangeEvent.java
  9. 47 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DevicePermissIotService.java
  10. 1 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DevicePermissService.java
  11. 2 5
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoPoolService.java
  12. 2 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoServiceImpl.java
  13. 101 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/OrgUserFaceService.java
  14. 1 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/SchoolUserServiceImpl.java

+ 20 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/UserIdAndOidModel.java

@@ -0,0 +1,20 @@
+package com.zhongshu.card.client.model.base;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/10/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserIdAndOidModel extends OidModel {
+
+    @Schema(description = "用户userId", example = "")
+    private String userId;
+
+}

+ 33 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/OrgUserFaceModel.java

@@ -0,0 +1,33 @@
+package com.zhongshu.card.client.model.projectAbout;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/10/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrgUserFaceModel extends SuperModel {
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "用户信息")
+    private UserCountModel userAccount;
+
+    @Schema(description = "图片名称")
+    private String name;
+
+    @Schema(description = "人员图片地址")
+    private String img;
+
+    @Schema(description = "是否可使用")
+    private Boolean isCanUsed = Boolean.TRUE;
+}

+ 33 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/OrgUserFaceParam.java

@@ -0,0 +1,33 @@
+package com.zhongshu.card.client.model.projectAbout;
+
+import com.zhongshu.card.client.model.base.SuperParam;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/10/12
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrgUserFaceParam extends SuperParam {
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "图片名称")
+    private String name;
+
+    @NotEmpty
+    @Schema(description = "人员图片地址")
+    private String img;
+
+    @Schema(description = "是否可使用")
+    private Boolean isCanUsed = Boolean.TRUE;
+
+}

+ 1 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/orgManager/CardInfoPoolController.java

@@ -5,12 +5,10 @@ import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.model.base.IDsParam;
 import com.zhongshu.card.client.model.base.OidModel;
-import com.zhongshu.card.client.model.base.ProjectOidParam;
-import com.zhongshu.card.client.model.org.OrganizationUserSearch;
 import com.zhongshu.card.client.model.school.*;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.type.CardCancelState;
-import com.zhongshu.card.server.core.service.school.CardInfoPoolService;
+import com.zhongshu.card.server.core.service.projectAbout.CardInfoPoolService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;

+ 50 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/OrgUserFaceController.java

@@ -0,0 +1,50 @@
+package com.zhongshu.card.server.core.controller.projectAbout;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.ProjectOidParam;
+import com.zhongshu.card.client.model.base.UserIdAndOidModel;
+import com.zhongshu.card.client.model.projectAbout.*;
+import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
+import com.zhongshu.card.server.core.service.projectAbout.ProjectCommonConfigService;
+import io.swagger.v3.oas.annotations.Hidden;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+
+/**
+ * 结构人脸管理
+ *
+ * @author TRX
+ * @date 2024/7/26
+ */
+@RestController
+@RequestMapping("/orgUserFace")
+@Tag(name = "项目-用户人脸设置")
+public class OrgUserFaceController {
+
+    @Autowired
+    private OrgUserFaceService orgUserFaceService;
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "保存人脸信息", description = "保存人脸信息")
+    @RequestMapping(value = "saveFace", method = {RequestMethod.POST})
+    public ResultContent saveFace(@RequestBody @Valid OrgUserFaceParam param) {
+        return orgUserFaceService.saveFace(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "得到用户人脸信息", description = "得到用户人脸信息")
+    @RequestMapping(value = "getUserFace", method = {RequestMethod.POST})
+    public ResultContent<OrgUserFaceModel> getUserFace(@RequestBody @Valid UserIdAndOidModel param) {
+        return orgUserFaceService.getUserFaceModel(param.getUserId(), param.getOid());
+    }
+
+}

+ 21 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/projectAbout/OrgUserFaceDao.java

@@ -0,0 +1,21 @@
+package com.zhongshu.card.server.core.dao.projectAbout;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.server.core.domain.paySetting.OrgPayAccount;
+import com.zhongshu.card.server.core.domain.projectAbout.OrgUserFace;
+
+import java.util.List;
+
+/**
+ * 机构用户人脸信息 dao
+ */
+public interface OrgUserFaceDao extends MongoDao<OrgUserFace> {
+
+    OrgUserFace findTopById(String id);
+
+    OrgUserFace findTopByUserIdAndProjectOid(String userId, String projectOid);
+
+    List<OrgUserFace> findByUserIdAndProjectOid(String userId, String projectOid);
+
+}

+ 41 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/projectAbout/OrgUserFace.java

@@ -0,0 +1,41 @@
+package com.zhongshu.card.server.core.domain.projectAbout;
+
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 项目人脸信息
+ *
+ * @author TRX
+ * @date 2024/10/12
+ */
+@Data
+@Builder
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+public class OrgUserFace extends SuperMain {
+
+    @Schema(description = "用户ID")
+    private String userId;
+
+    @Schema(description = "用户信息")
+    @DBRef(lazy = true)
+    private UserAccount userAccount;
+
+    @Schema(description = "图片名称")
+    private String name;
+
+    @Schema(description = "人员图片地址")
+    private String img;
+
+    @Schema(description = "是否可使用")
+    private Boolean isCanUsed = Boolean.TRUE;
+}

+ 3 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/event/DevicePermissChangeEvent.java

@@ -13,10 +13,10 @@ import java.util.List;
 public class DevicePermissChangeEvent extends ApplicationEvent {
 
     @Getter
-    private String deviceId;
+    private List<String> deviceIds;
 
-    public DevicePermissChangeEvent(Object source, String deviceId) {
+    public DevicePermissChangeEvent(Object source, List<String> deviceIds) {
         super(source);
-        this.deviceId = deviceId;
+        this.deviceIds = deviceIds;
     }
 }

+ 47 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DevicePermissIotService.java

@@ -4,6 +4,8 @@ import com.github.microservice.models.devicePermiss.DeviceAboutPermiss;
 import com.github.microservice.models.devicePermiss.GateWayPermissModel;
 import com.github.microservice.models.devicePermiss.GateWayQuery;
 import com.github.microservice.models.devicePermiss.UserPermiss;
+import com.zhongshu.card.client.model.school.CardInfoModel;
+import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
 import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
@@ -11,10 +13,19 @@ import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
 import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
 import com.zhongshu.card.server.core.domain.org.Organization;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
+import com.zhongshu.card.server.core.domain.projectAbout.OrgUserFace;
+import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
+import com.zhongshu.card.server.core.event.OrgUserBindUpdateSyncEvent;
+import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
+import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -49,6 +60,12 @@ public class DevicePermissIotService {
     @Autowired
     private OrganizationUserDao organizationUserDao;
 
+    @Autowired
+    private OrgUserFaceService orgUserFaceService;
+
+    @Autowired
+    private CardInfoServiceImpl cardInfoService;
+
     /**
      * 查询网关 包含的设备的权限
      *
@@ -58,6 +75,7 @@ public class DevicePermissIotService {
     public GateWayPermissModel queryGateWayPermiss(GateWayQuery query) {
         // 返回模型
         GateWayPermissModel model = new GateWayPermissModel();
+        model.setSuccess();
 
         String deviceId = query.getDeviceId();
         DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
@@ -76,11 +94,40 @@ public class DevicePermissIotService {
         return model;
     }
 
+    @EventListener(classes = DevicePermissChangeEvent.class)
+    @Async
+    @SneakyThrows
+    public void devicePermissChange(DevicePermissChangeEvent event) {
+        log.info("设备权限发生变化...");
+        // 通知物联网 设备权限发生变化
+
+    }
+
     public UserPermiss toModel(DevicePermiss devicePermiss) {
         UserPermiss userPermiss = null;
         if (ObjectUtils.isNotEmpty(devicePermiss)) {
             userPermiss = new UserPermiss();
+            String userId = devicePermiss.getUserId();
+            String projectOid = devicePermiss.getProjectOid();
+            UserAccount account = devicePermiss.getUserAccount();
+            if (ObjectUtils.isNotEmpty(account)) {
+                userPermiss.setUserId(userId);
+                userPermiss.setUserName(account.getName());
+            }
 
+            // 查询用户的头像
+            OrgUserFace orgUserFace = orgUserFaceService.getUserFace(userId, projectOid);
+            if (ObjectUtils.isNotEmpty(orgUserFace)) {
+                userPermiss.setFaceImage(orgUserFace.getImg());
+            }
+
+            // 查询用户的卡片
+            List<CardInfoModel> list = cardInfoService.getUserOrgAllCard(userId, projectOid);
+            List<String> cardNos = new ArrayList<>();
+            if (ObjectUtils.isNotEmpty(list)) {
+                cardNos = list.stream().filter(it -> it.getCardState() == CardState.Enable).map(it -> it.getCode()).collect(Collectors.toUnmodifiableList());
+            }
+            userPermiss.setCardNos(cardNos);
         }
         return userPermiss;
     }

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DevicePermissService.java

@@ -108,7 +108,7 @@ public class DevicePermissService extends SuperService {
                 }
                 devicePermissDao.saveAll(permisses);
                 // 设备权限发生变化
-                DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceId);
+                DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, List.of(deviceId));
                 applicationContext.publishEvent(event);
             }
         }

+ 2 - 5
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CardInfoPoolService.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoPoolService.java

@@ -1,4 +1,4 @@
-package com.zhongshu.card.server.core.service.school;
+package com.zhongshu.card.server.core.service.projectAbout;
 
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
@@ -7,9 +7,7 @@ import com.github.microservice.core.util.bean.BeanUtil;
 import com.google.common.collect.Lists;
 import com.zhongshu.card.client.model.base.IDsParam;
 import com.zhongshu.card.client.model.base.OidModel;
-import com.zhongshu.card.client.model.base.ProjectOidParam;
 import com.zhongshu.card.client.model.org.OidAboutInfo;
-import com.zhongshu.card.client.model.org.OrganizationUserSearch;
 import com.zhongshu.card.client.model.school.*;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
@@ -19,7 +17,6 @@ import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.dao.school.CardInfoPoolDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
-import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 import com.zhongshu.card.server.core.domain.school.CardInfoPool;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
@@ -80,7 +77,7 @@ public class CardInfoPoolService extends SuperService {
         checkParamOid(param);
 
         CardInfoPool entity = null;
-        // 这是学校的oid
+        // 这是oid
         String oid = param.getOid();
         Organization organization = organizationDao.findTopByOid(oid);
         if (ObjectUtils.isEmpty(organization)) {

+ 2 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CardInfoServiceImpl.java → FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoServiceImpl.java

@@ -1,4 +1,4 @@
-package com.zhongshu.card.server.core.service.school;
+package com.zhongshu.card.server.core.service.projectAbout;
 
 import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.client.service.UserService;
@@ -87,7 +87,6 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
     @Override
     public ResultContent addCardInfo(CardInfoParam param) {
 //        checkParamOid(param);
-
         initDefaultUserParam(param);
         if (StringUtils.isEmpty(param.getCode())) {
             return ResultContent.buildFail("code不能为空");
@@ -133,7 +132,6 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         cardInfo.setAboutOid(oidAboutInfo.getOid());
         cardInfo.setAboutAuthType(oidAboutInfo.getAuthType());
         cardInfoDao.save(cardInfo);
-
         return ResultContent.buildSuccess();
     }
 
@@ -191,6 +189,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
         cardInfo.setUserId(userId);
         cardInfo.setUserName(account.getName());
         cardInfo.setPhone(account.getPhone());
+        cardInfo.setOid(cardInfoPool.getOid());
         cardInfoDao.save(cardInfo);
 
         // 标记卡池这张卡一使用

+ 101 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/OrgUserFaceService.java

@@ -0,0 +1,101 @@
+package com.zhongshu.card.server.core.service.projectAbout;
+
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.projectAbout.OrgUserFaceModel;
+import com.zhongshu.card.client.model.projectAbout.OrgUserFaceParam;
+import com.zhongshu.card.server.core.dao.projectAbout.OrgUserFaceDao;
+import com.zhongshu.card.server.core.domain.projectAbout.OrgUserFace;
+import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.util.BeanUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 项目人脸管理
+ *
+ * @author TRX
+ * @date 2024/10/12
+ */
+@Slf4j
+@Service
+public class OrgUserFaceService extends SuperService {
+
+    @Autowired
+    private OrgUserFaceDao orgUserFaceDao;
+
+    /**
+     * 保存用户人脸信息
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent saveFace(OrgUserFaceParam param) {
+        String oid = param.getOid();
+        if (StringUtils.isEmpty(oid)) {
+            return ResultContent.buildFail("oid不能为空");
+        }
+        String userId = param.getUserId();
+        if (StringUtils.isEmpty(userId)) {
+            userId = getCurrentUserId();
+        }
+        OrgUserFace orgUserFace = orgUserFaceDao.findTopByUserIdAndProjectOid(userId, oid);
+        if (ObjectUtils.isEmpty(orgUserFace)) {
+            orgUserFace = new OrgUserFace();
+            initEntity(orgUserFace);
+        } else {
+            initUpdateEntity(orgUserFace);
+        }
+        BeanUtils.copyProperties(param, orgUserFace);
+        orgUserFaceDao.save(orgUserFace);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<List<OrgUserFaceModel>> getUserFaceList(String userId, String oid) {
+        List<OrgUserFace> list = getUserFaces(userId, oid);
+        List<OrgUserFaceModel> models = new ArrayList<>();
+        if (ObjectUtils.isNotEmpty(list)) {
+            models = list.stream().map(this::toModel).collect(Collectors.toList());
+        }
+        return ResultContent.buildSuccess(models);
+    }
+
+    public List<OrgUserFace> getUserFaces(String userId, String oid) {
+        List<OrgUserFace> list = new ArrayList<>();
+        if (StringUtils.isNotEmpty(userId) && StringUtils.isNotEmpty(oid)) {
+            list = orgUserFaceDao.findByUserIdAndProjectOid(userId, oid);
+        }
+        return list;
+    }
+
+    public ResultContent<OrgUserFaceModel> getUserFaceModel(String userId, String oid) {
+        if (StringUtils.isEmpty(userId)) {
+            userId = getCurrentUserId();
+        }
+        OrgUserFace entity = getUserFace(userId, oid);
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    public OrgUserFace getUserFace(String userId, String oid) {
+        if (StringUtils.isNotEmpty(userId) && StringUtils.isNotEmpty(oid)) {
+            return orgUserFaceDao.findTopByUserIdAndProjectOid(userId, oid);
+        }
+        return null;
+    }
+
+    public OrgUserFaceModel toModel(OrgUserFace entity) {
+        OrgUserFaceModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new OrgUserFaceModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+}

+ 1 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/SchoolUserServiceImpl.java

@@ -20,6 +20,7 @@ import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
+import com.zhongshu.card.server.core.service.projectAbout.CardInfoServiceImpl;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import com.zhongshu.card.server.core.util.CommonUtil;