TRX преди 1 година
родител
ревизия
e40034c11f

+ 1 - 2
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/DepartmentParam.java

@@ -26,7 +26,6 @@ public class DepartmentParam extends SuperParam {
     @Schema(description = "上级ID")
     private String parentId = ITree.ROOT_ID;
 
-    @Schema(description = "机构oid")
-    @NotEmpty
+    @Schema(description = "机构oid", hidden = true)
     private String orgOid;
 }

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

@@ -5,6 +5,8 @@ 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.server.core.service.school.CardInfoPoolService;
@@ -99,12 +101,19 @@ public class CardInfoPoolController {
     public ResultContent<ImportResultModel> importCardPool(HttpServletRequest request,
             HttpServletResponse response,
             @RequestPart("file") MultipartFile file,
-            OidModel oidModel
-    ) throws IOException {
+            OidModel param) throws IOException {
         if (file == null || file.isEmpty()) {
             return ResultContent.buildFail("文件不能为空");
         }
-        return cardInfoPoolService.importCardPool(request, response, file, oidModel.getOid());
+        return cardInfoPoolService.importCardPool(request, response, file, param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @RequestMapping(value = "exportProjectCardPool", method = RequestMethod.POST)
+    @Operation(summary = "导出项目卡片", description = "导出项目卡片")
+    public void exportProjectCardPool(HttpServletRequest request, HttpServletResponse response,
+            CardInfoPoolSearch param) throws IOException {
+        cardInfoPoolService.exportProjectCard(request, response, param);
     }
 
     @Operation(summary = "池卡搜索卡片", description = "池卡搜索卡片")

+ 0 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/devices/DevicePermissDao.java

@@ -1,9 +1,7 @@
 package com.zhongshu.card.server.core.dao.devices;
 
 import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
-import com.zhongshu.card.server.core.dao.devices.extend.DeviceBindDaoExtend;
 import com.zhongshu.card.server.core.dao.devices.extend.DevicePermissDaoExtend;
-import com.zhongshu.card.server.core.domain.devices.DeviceBind;
 import com.zhongshu.card.server.core.domain.devices.DevicePermiss;
 import com.zhongshu.card.server.core.domain.org.OrganizationUser;
 

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

@@ -0,0 +1,22 @@
+package com.zhongshu.card.server.core.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/26
+ */
+public class DevicePermissChangeEvent extends ApplicationEvent {
+
+    @Getter
+    private String deviceId;
+
+    public DevicePermissChangeEvent(Object source, String deviceId) {
+        super(source);
+        this.deviceId = deviceId;
+    }
+}

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

@@ -0,0 +1,87 @@
+package com.zhongshu.card.server.core.service.devices;
+
+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.server.core.dao.devices.DeviceInfoDao;
+import com.zhongshu.card.server.core.dao.devices.DevicePermissDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+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.service.user.UserAccountServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+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/11
+ */
+@Slf4j
+@Service
+public class DevicePermissIotService {
+
+    @Autowired
+    private DevicePermissDao devicePermissDao;
+
+    @Autowired
+    private DeviceInfoServiceImpl deviceInfoService;
+
+    @Autowired
+    private UserAccountServiceImpl userAccountService;
+
+    @Autowired
+    private DeviceInfoDao deviceInfoDao;
+
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @Autowired
+    private OrganizationUserDao organizationUserDao;
+
+    /**
+     * 查询网关 包含的设备的权限
+     *
+     * @param query
+     * @return
+     */
+    public GateWayPermissModel queryGateWayPermiss(GateWayQuery query) {
+        // 返回模型
+        GateWayPermissModel model = new GateWayPermissModel();
+
+        String deviceId = query.getDeviceId();
+        DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
+        Organization project = organizationDao.findTopByCode(query.getProjectCode());
+        if (ObjectUtils.isNotEmpty(deviceInfo) && ObjectUtils.isNotEmpty(project)) {
+            DeviceAboutPermiss aboutPermiss = new DeviceAboutPermiss();
+            aboutPermiss.setDeviceId(deviceId);
+            List<DevicePermiss> devices = devicePermissDao.findByDeviceIdAndProjectOid(deviceId, project.getOid());
+            List<UserPermiss> userPermisses = new ArrayList<>();
+            if (ObjectUtils.isNotEmpty(devices)) {
+                userPermisses = devices.parallelStream().map(this::toModel).collect(Collectors.toUnmodifiableList());
+            }
+            aboutPermiss.setUserPermisses(userPermisses);
+            model.addDevice(aboutPermiss);
+        }
+        return model;
+    }
+
+    public UserPermiss toModel(DevicePermiss devicePermiss) {
+        UserPermiss userPermiss = null;
+        if (ObjectUtils.isNotEmpty(devicePermiss)) {
+            userPermiss = new UserPermiss();
+
+        }
+        return userPermiss;
+    }
+}

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

@@ -4,7 +4,9 @@ import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.zhongshu.card.client.model.base.IDsParam;
-import com.zhongshu.card.client.model.devices.*;
+import com.zhongshu.card.client.model.devices.DevicePermissModel;
+import com.zhongshu.card.client.model.devices.DevicePermissParam;
+import com.zhongshu.card.client.model.devices.DevicePermissSearch;
 import com.zhongshu.card.client.model.org.OrganizationUserModel;
 import com.zhongshu.card.client.type.DataOperationType;
 import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
@@ -16,8 +18,8 @@ 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.OrganizationUser;
 import com.zhongshu.card.server.core.domain.org.UserAccount;
+import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
 import com.zhongshu.card.server.core.event.OrgUserBindUpdateSyncEvent;
-import com.zhongshu.card.server.core.event.ProjectSyncEvent;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
@@ -25,16 +27,15 @@ 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.ApplicationContext;
 import org.springframework.context.event.EventListener;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.security.core.userdetails.User;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 设备权限 (绑定用户)管理
@@ -64,6 +65,9 @@ public class DevicePermissService extends SuperService {
     @Autowired
     private OrganizationUserDao organizationUserDao;
 
+    @Autowired
+    ApplicationContext applicationContext;
+
     /**
      * 设备绑定用户
      *
@@ -103,6 +107,9 @@ public class DevicePermissService extends SuperService {
                     permisses.add(permiss);
                 }
                 devicePermissDao.saveAll(permisses);
+                // 设备权限发生变化
+                DevicePermissChangeEvent event = new DevicePermissChangeEvent(this, deviceId);
+                applicationContext.publishEvent(event);
             }
         }
         return ResultContent.buildSuccess();
@@ -158,7 +165,7 @@ public class DevicePermissService extends SuperService {
             }
         }
     }
-    
+
 
     /**
      * 分页数据

+ 84 - 15
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/school/CardInfoPoolService.java

@@ -3,22 +3,31 @@ package com.zhongshu.card.server.core.service.school;
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
+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;
 import com.zhongshu.card.client.type.school.CardType;
 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;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import com.zhongshu.card.server.core.util.CommonUtil;
+import com.zhongshu.card.server.core.util.ExcelUtils;
+import com.zhongshu.card.server.core.util.excel.CommonExeclParam;
+import com.zhongshu.card.server.core.util.excel.CommonExeclTd;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
@@ -26,6 +35,7 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
@@ -33,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -55,6 +66,9 @@ public class CardInfoPoolService extends SuperService {
     @Autowired
     OrganizationManagerServiceImpl organizationManagerService;
 
+    @Autowired
+    OrganizationUserDao organizationUserDao;
+
     /**
      * 保存卡片信息
      *
@@ -90,15 +104,14 @@ public class CardInfoPoolService extends SuperService {
             if (ObjectUtils.isNotEmpty(temp)) {
                 return ResultContent.buildFail(String.format("卡号已存在:%s", param.getCode()));
             }
+            entity.setIsUsed(Boolean.FALSE);
         }
-        BeanUtils.copyProperties(param, entity);
+        BeanUtils.copyProperties(param, entity, "isUsed");
+
+        entity.setOid(oid);
         entity.setProjectOid(projectOid);
         entity.setAboutAuthType(oidAboutInfo.getAuthType());
         entity.setAboutOid(oidAboutInfo.getOid());
-
-        if (entity.getIsUsed() == null) {
-            entity.setIsUsed(Boolean.FALSE);
-        }
         cardInfoPoolDao.save(entity);
         return ResultContent.buildSuccess();
     }
@@ -113,7 +126,6 @@ public class CardInfoPoolService extends SuperService {
     public ResultContent<Page<CardInfoPoolModel>> page(CardInfoPoolSearch param, Pageable pageable) {
         checkParamOid(param);
         initOidSearchParamNoCheckOid(param);
-
         Page<CardInfoPool> page = cardInfoPoolDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
@@ -196,22 +208,19 @@ public class CardInfoPoolService extends SuperService {
             HttpServletRequest request,
             HttpServletResponse response,
             MultipartFile file,
-            String oid
-    ) {
-        // 当前的机构
-        if (StringUtils.isEmpty(oid)) {
-            oid = getCurrentOid();
-        }
+            OidModel param) {
+        String oid = param.getOid();
         Assert.hasText(oid, "oid不能为空");
 
         OidAboutInfo oidAboutInfo = organizationManagerService.getOidAboutInfo(oid);
         String projectOid = oidAboutInfo.getProjectOid();
-        String schoolOid = oidAboutInfo.getSchoolOid();
 
         ImportResultModel model = new ImportResultModel();
         try {
-            int startRow = 2;
+            int startRow = 3;
             ImportParams params = new ImportParams();
+            params.setHeadRows(1);
+            params.setTitleRows(1);
             List<CardInfoPoolImportParam> list = ExcelImportUtil.importExcel(file.getInputStream(), CardInfoPoolImportParam.class, params);
             model.setTotal(list.size());
 
@@ -230,6 +239,14 @@ public class CardInfoPoolService extends SuperService {
                         failDetails.add(String.format("第%d行卡片类型不能为空", startRow));
                     }
 
+                    if (b && StringUtils.isNotEmpty(param1.getCardType())) {
+                        CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
+                        if (cardType == null) {
+                            b = false;
+                            failDetails.add(String.format("第%d行卡片类型不正确", startRow));
+                        }
+                    }
+
                     if (b) {
                         // 检查是否已存在 code
                         boolean exit = cardInfoPoolDao.existsByCode(param1.getCode());
@@ -242,8 +259,9 @@ public class CardInfoPoolService extends SuperService {
                         // 验证通过
                         CardInfoPool pool = new CardInfoPool();
                         initEntity(pool);
+                        param1.setCode(param1.getCode().trim());
                         BeanUtils.copyProperties(param1, pool, "cardType");
-                        pool.setSchoolOid(schoolOid);
+                        pool.setSchoolOid("");
                         pool.setProjectOid(projectOid);
                         pool.setOid(oid);
                         pool.setAboutOid(oidAboutInfo.getOid());
@@ -268,6 +286,57 @@ public class CardInfoPoolService extends SuperService {
         return ResultContent.buildSuccess(model);
     }
 
+    /**
+     * 导出项目用户
+     *
+     * @param request
+     * @param response
+     * @param param
+     */
+    public void exportProjectCard(HttpServletRequest request, HttpServletResponse response,
+            CardInfoPoolSearch param) {
+        Assert.hasText(param.getOid(), "oid不能为空");
+
+        Organization organization = organizationDao.findTopByOid(param.getOid());
+        Pageable pageable = PageRequest.of(0, Integer.MAX_VALUE);
+        Page<CardInfoPool> page = cardInfoPoolDao.page(pageable, param);
+
+        List<Map<String, Object>> maps = new ArrayList<>();
+        if (page.getContent() != null) {
+            List<CardInfoPool> list = page.getContent();
+            maps = list.stream().map(it -> {
+                Map<String, Object> map = BeanUtil.bean2Map(it);
+                String cardStr = it.getCardType().getRemark();
+                map.put("cardStr", cardStr);
+                String useStr = "未使用";
+                if (it.getIsUsed() != null && it.getIsUsed()) {
+                    useStr = "已使用";
+                }
+                map.put("useStr", useStr);
+                // 作废状态
+                String cancelStr = "";
+                if (it.getCardCancelState() != null) {
+                    cancelStr = it.getCardCancelState().getRemark();
+                }
+                map.put("cancelStr", cancelStr);
+                return map;
+            }).collect(Collectors.toList());
+        }
+
+        CommonExeclParam execlParam = new CommonExeclParam();
+        execlParam.setTitle(String.format("%s卡片数据", organization.getName()));
+        execlParam.setStartRow(2);
+        execlParam.setDatas(maps);
+
+        List<CommonExeclTd> tds = new ArrayList<>();
+        tds.add(CommonExeclTd.build("卡号", "code"));
+        tds.add(CommonExeclTd.build("卡片类型", "cardStr"));
+        tds.add(CommonExeclTd.build("使用状态", "useStr"));
+        tds.add(CommonExeclTd.build("作废状态", "cancelStr"));
+        execlParam.setTds(tds);
+        ExcelUtils.commonExecuteExcel(request, response, execlParam);
+    }
+
     /**
      * 搜索卡片
      *

+ 4 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/DepartmentServiceImpl.java

@@ -49,8 +49,9 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
      */
     @Override
     public ResultContent<Department> addDepartment(DepartmentParam param) {
-        initDefaultUserAndOidCheck(param);
-        param.setOid(param.getOrgOid());
+        if (StringUtils.isEmpty(param.getOid())) {
+            return ResultContent.buildFail(String.format("oid不能为空"));
+        }
         OidAboutInfo aboutInfo = organizationManagerService.getOidAboutInfo(param.getOid());
 
         if (CommonUtil.longIsEmpty(param.getSort())) {
@@ -146,7 +147,7 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
     @Override
     public ResultContent<List<ITree>> getDepartmentTree(String oid) {
         if (StringUtils.isEmpty(oid)) {
-            oid = getCurrentOid();
+            return ResultContent.buildFail("oid不能为空");
         }
         List<Department> list = departmentDao.findByOidOrderBySortAsc(oid);
         List<ITree> models = list.stream().map(this::toModel).collect(Collectors.toList());