TRX 1 год назад
Родитель
Сommit
26c796ce67

+ 7 - 11
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ProjectOpenAPIController.java

@@ -1,10 +1,12 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
+import com.github.microservice.models.device.DevicePerQuery;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.project.ProjectSaveParam;
 import com.zhongshu.card.client.model.school.BookInfoAddParam;
 import com.zhongshu.card.client.model.school.BookInfoModel;
 import com.zhongshu.card.client.service.school.BookInfoService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissIotService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,18 +27,12 @@ import javax.validation.Valid;
 public class ProjectOpenAPIController {
 
     @Autowired
-    BookInfoService bookInfoService;
+    DevicePermissIotService devicePermissIotService;
 
-    @Operation(summary = "项目添加", description = "项目添加")
-    @RequestMapping(value = "addTeacher", method = {RequestMethod.POST})
-    public ResultContent<BookInfoModel> addTeacher(@RequestBody BookInfoAddParam param) {
-        return ResultContent.buildSuccess();
-    }
-
-    @Operation(summary = "项目保存", description = "项目保存")
-    @RequestMapping(value = "saveProjectInfo", method = {RequestMethod.POST})
-    public ResultContent saveProjectInfo(@RequestBody @Valid ProjectSaveParam param) {
-        return ResultContent.buildSuccess(param);
+    @Operation(summary = "查询设备的权限数据", description = "查询设备的权限数据")
+    @RequestMapping(value = "devicePerQuery", method = {RequestMethod.POST})
+    public ResultContent devicePerQuery(@RequestBody @Valid DevicePerQuery param) {
+        return devicePermissIotService.queryDevicePermiss(param);
     }
 
 }

+ 13 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/TestController.java

@@ -3,7 +3,9 @@ package com.zhongshu.card.server.core.controller.org;
 import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.server.core.dao.school.CardInfoDao;
 import com.zhongshu.card.server.core.domain.school.CardInfo;
+import com.zhongshu.card.server.core.event.DevicePermissChangeEvent;
 import com.zhongshu.card.server.core.service.TestService;
+import com.zhongshu.card.server.core.service.devices.DevicePermissIotService;
 import com.zhongshu.card.server.core.service.openAPI.OpenAPIRegisterService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -13,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @Slf4j
 @RestController
 @RequestMapping("test")
@@ -28,13 +32,19 @@ public class TestController {
     @Autowired
     CardInfoDao cardInfoDao;
 
+    @Autowired
+    DevicePermissIotService devicePermissIotService;
+
     @Operation(summary = "测试接口", description = "测试接口")
     @RequestMapping(value = "text", method = {RequestMethod.GET})
     public ResultContent text() {
-        CardInfo cardInfo = cardInfoDao.findByCode("EB0659EB");
-        log.info("cardInfo: {}", cardInfo);
 
-        openAPIRegisterService.initRegisterPAIS();
+//        openAPIRegisterService.initRegisterPAIS();
+
+        DevicePermissChangeEvent event = new DevicePermissChangeEvent(this,
+                List.of("0149843108"));
+        devicePermissIotService.devicePermissChange(event);
+
         return this.testService.text();
     }
 

+ 6 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceInfo.java

@@ -41,6 +41,12 @@ public class DeviceInfo extends SuperMain {
     @DBRef(lazy = true)
     private Organization organization;
 
+    @Schema(description = "所属机构oid")
+    private String beLongOid;
+
+    @Schema(description = "所属机构name")
+    private String beLongName;
+
     @Schema(description = "设备类型,如 消费机 门禁机")
     private DeviceType deviceType;
 

+ 4 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/httpRequest/conf/IotCenterAPIConfig.java

@@ -21,6 +21,8 @@ public class IotCenterAPIConfig {
     // 项目同步
     public static final String syncFromFullCardProjects = "/projectSync/free/syncFromFullCardProjects";
 
+    public static final String openAPISendMessage = "/openAPI/manager/sendIotMessage";
+
     public static final HashMap<String, ApiConfParam> map = new HashMap<>();
 
     static {
@@ -29,7 +31,8 @@ public class IotCenterAPIConfig {
 
         map.put(syncFromFullCardProjects, ApiConfParam.builder().apiName(syncFromFullCardProjects).methodType(MethodType.Json.name()).build());
 
-
+        map.put(openAPISendMessage, ApiConfParam.builder().apiName(openAPISendMessage)
+                .methodType(MethodType.Json.name()).build());
     }
 
     public static ApiConfParam getApiConfParam(String apiName) {

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

@@ -127,12 +127,13 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
     public ResultContent<Page<DeviceInfoModel>> page(DeviceInfoSearch param, Pageable pageable) {
         // 完善所属项目
         String projectOid = param.getProjectOid();
-        Organization organization = organizationDao.findTopByOid(projectOid);
-        if (ObjectUtils.isEmpty(organization)) {
-            return ResultContent.buildFail("projectOid不存在");
+        if (StringUtils.isNotEmpty(projectOid)) {
+            Organization organization = organizationDao.findTopByOid(projectOid);
+            if (ObjectUtils.isEmpty(organization)) {
+                return ResultContent.buildFail("projectOid不存在");
+            }
+//            param.setProjectInfoCode(organization.getCode());
         }
-        param.setProjectInfoCode(organization.getCode());
-
         Page<DeviceInfo> page = deviceInfoDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
@@ -229,6 +230,14 @@ public class DeviceInfoServiceImpl extends SuperService implements DeviceInfoSer
             organization = organizationDao.findTopByOid(param.getBeLongOid());
         }
         deviceInfo.setOrganization(organization);
+        deviceInfo.setBeLongOid(param.getBeLongOid());
+        deviceInfo.setBeLongName(organization.getName());
+        if (StringUtils.isEmpty(deviceInfo.getProjectOid())) {
+            Organization project = organizationDao.findTopByCode(deviceInfo.getProjectInfoCode());
+            if (ObjectUtils.isNotEmpty(project)) {
+                deviceInfo.setProjectOid(project.getOid());
+            }
+        }
         deviceInfoDao.save(deviceInfo);
         return ResultContent.buildSuccess();
     }

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

@@ -1,11 +1,17 @@
 package com.zhongshu.card.server.core.service.devices;
 
+import cn.hutool.json.JSONUtil;
+import com.github.microservice.models.device.DevicePerQuery;
 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.github.microservice.models.iot.IotSendParam;
+import com.github.microservice.models.iot.PermissionChange;
+import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.client.model.school.CardInfoModel;
 import com.zhongshu.card.client.type.school.CardState;
+import com.zhongshu.card.client.utils.DateUtils;
 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;
@@ -16,7 +22,7 @@ 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.openAPI.OpenApiRequestService;
 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;
@@ -66,6 +72,9 @@ public class DevicePermissIotService {
     @Autowired
     private CardInfoServiceImpl cardInfoService;
 
+    @Autowired
+    private OpenApiRequestService openApiRequestService;
+
     /**
      * 查询网关 包含的设备的权限
      *
@@ -94,14 +103,47 @@ public class DevicePermissIotService {
         return model;
     }
 
+    /**
+     * 查询设备的权限数据
+     *
+     * @param query
+     * @return
+     */
+    public ResultContent queryDevicePermiss(DevicePerQuery query) {
+        DeviceAboutPermiss deviceAboutPermiss = new DeviceAboutPermiss();
+
+        return ResultContent.buildSuccess(JSONUtil.toJsonStr(deviceAboutPermiss));
+    }
+
     @EventListener(classes = DevicePermissChangeEvent.class)
     @Async
     @SneakyThrows
     public void devicePermissChange(DevicePermissChangeEvent event) {
         log.info("设备权限发生变化...");
         // 通知物联网 设备权限发生变化
-
-
+        List<String> deviceIds = event.getDeviceIds();
+        if (ObjectUtils.isNotEmpty(deviceIds)) {
+            for (String deviceId : deviceIds) {
+                DeviceInfo deviceInfo = deviceInfoDao.findTopByDeviceId(deviceId);
+                if (ObjectUtils.isEmpty(deviceInfo)) {
+                    continue;
+                }
+                IotSendParam param = new IotSendParam();
+                param.setDeviceId(deviceId);
+                param.setIdentifier("permissionChange");
+
+                PermissionChange change = new PermissionChange();
+                change.setTime(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+                change.setDeviceId(deviceId);
+                param.setData(JSONUtil.parseObj(change));
+                ResultContent resultContent = openApiRequestService.sendIotSendMessage(param, deviceInfo.getProjectOid());
+                if (resultContent.isSuccess()) {
+
+                } else {
+                    log.error("设备权限通知失败 {} {}", deviceId, resultContent.getMsg());
+                }
+            }
+        }
     }
 
     public UserPermiss toModel(DevicePermiss devicePermiss) {

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

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

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenAPIRegisterService.java

@@ -38,7 +38,7 @@ public class OpenAPIRegisterService {
         param.setOpenApiInfo(openAPIS);
         param.setApiType(ApiType.FullCard.name());
 
-        ResultContent content = restTemplate.postForObject("http://openapiserver/openapi/manager/api/refresh", param, ResultContent.class);
+        ResultContent content = restTemplate.postForObject("http://openapiserver-wjf/manager/apiManager/refresh", param, ResultContent.class);
         if (content == null) {
             content = ResultContent.buildSuccess();
         }

+ 31 - 8
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenApiRequestService.java

@@ -8,17 +8,16 @@ import com.github.microservice.core.util.net.apache.HttpModel;
 import com.github.microservice.core.util.net.apache.MethodType;
 import com.github.microservice.core.util.net.apache.ResponseModel;
 import com.github.microservice.http.APIResponseModel;
+import com.github.microservice.http.ApiConfParam;
 import com.github.microservice.models.iot.IotSendParam;
 import com.github.microservice.net.ResultContent;
-import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
 import com.zhongshu.card.server.core.dao.projectAbout.ProjectIotInfoDao;
 import com.zhongshu.card.server.core.domain.projectAbout.ProjectIotInfo;
+import com.zhongshu.card.server.core.httpRequest.conf.IotCenterAPIConfig;
 import com.zhongshu.card.server.core.service.base.SuperService;
 import com.zhongshu.card.server.core.service.payment.RequestInfoService;
-import com.zhongshu.card.server.core.util.CommonUtil;
 import com.zhongshu.opengateway.client.util.SignUtil;
-import com.zhongshu.payment.client.payModel.unionFrictionlessPay.model.ApiConfParam;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -50,6 +49,18 @@ public class OpenApiRequestService extends SuperService {
     @Autowired
     private ProjectIotInfoDao projectIotInfoDao;
 
+    /**
+     * 发送发下数据
+     *
+     * @param param
+     * @param projectOid
+     * @return
+     */
+    public ResultContent sendIotSendMessage(IotSendParam param, String projectOid) {
+        ApiConfParam apiConfParam = IotCenterAPIConfig.getApiConfParam(IotCenterAPIConfig.openAPISendMessage);
+        return sendIotRequest(param, projectOid, apiConfParam.getApiName());
+    }
+
     /**
      * 请求物联网接口
      *
@@ -57,16 +68,25 @@ public class OpenApiRequestService extends SuperService {
      * @param projectOid
      * @return
      */
-    public ResultContent sendIotRequest(IotSendParam param, String projectOid) {
+    public ResultContent sendIotRequest(IotSendParam param, String projectOid, String apiName) {
         if (StringUtils.isEmpty(projectOid)) {
             return ResultContent.buildFail("projectOid为空");
         }
         ProjectIotInfo projectIotInfo = projectIotInfoDao.findTopByProjectOid(projectOid);
+        projectIotInfo = new ProjectIotInfo();
+        projectIotInfo.setUrl("http://192.168.32.113:9601");
+        projectIotInfo.setAk("");
+        projectIotInfo.setSk("");
+
         if (ObjectUtils.isEmpty(projectIotInfo)) {
             return ResultContent.buildFail(String.format("项目未配置物联网AK/SK信息", projectOid));
         }
-
-        return ResultContent.buildSuccess();
+        APIResponseModel responseModel = requestAPI(projectIotInfo.getUrl(), apiName,
+                projectIotInfo.getAk(), projectIotInfo.getSk(), param);
+        if (responseModel.isFailed()) {
+            return ResultContent.buildFail(responseModel.getMsg());
+        }
+        return ResultContent.buildSuccess(responseModel);
     }
 
 //    /**
@@ -174,7 +194,10 @@ public class OpenApiRequestService extends SuperService {
 //    }
 
 
-    public APIResponseModel requestAPI(String url, String ak, String sk, Object data) {
+    public APIResponseModel requestAPI(
+            String url,
+            String apiName,
+            String ak, String sk, Object data) {
         APIResponseModel responseModel = new APIResponseModel();
         try {
             String authorization = SignUtil.sign(JSONUtil.toJsonStr(data), ak, sk);
@@ -185,7 +208,7 @@ public class OpenApiRequestService extends SuperService {
             StopWatch stopWatch = new StopWatch();
             stopWatch.start();
             ResponseModel request = HttpClientUtil.request(HttpModel.builder()
-                    .url(url).method(MethodType.Json)
+                    .url(url + apiName).method(MethodType.Json)
                     .header(headers)
                     .charset("utf-8").body(data).build());
             int code = request.getCode();

+ 42 - 35
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoPoolService.java

@@ -40,6 +40,7 @@ import org.springframework.util.Assert;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -217,65 +218,71 @@ public class CardInfoPoolService extends SuperService {
 
         ImportResultModel model = new ImportResultModel();
         try {
-            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());
 
+            int startRow = 2;
             List<String> failDetails = new ArrayList<>();
             List<CardInfoPool> cardInfoPools = new ArrayList<>();
+            HashMap<String, String> codeMap = new HashMap<>();
             if (ObjectUtils.isNotEmpty(list)) {
                 for (CardInfoPoolImportParam param1 : list) {
+                    startRow++;
+
                     // 验证数据合法性
-                    boolean b = true;
-                    if (b && StringUtils.isEmpty(param1.getCode())) {
-                        b = false;
+                    String code = param1.getCode();
+                    if (StringUtils.isEmpty(code)) {
                         failDetails.add(String.format("第%d行卡号不能为空", startRow));
+                        continue;
                     }
-                    if (b && StringUtils.isEmpty(param1.getCardType())) {
-                        b = false;
+                    code = code.trim();
+                    if (codeMap.containsKey(code)) {
+                        failDetails.add(String.format("第%d行卡号%s已存在", startRow, code));
+                        continue;
+                    }
+
+                    if (StringUtils.isEmpty(param1.getCardType())) {
                         failDetails.add(String.format("第%d行卡片类型不能为空", startRow));
+                        continue;
                     }
 
-                    if (b && StringUtils.isNotEmpty(param1.getCardType())) {
+                    if (StringUtils.isNotEmpty(param1.getCardType())) {
                         CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
                         if (cardType == null) {
-                            b = false;
                             failDetails.add(String.format("第%d行卡片类型不正确", startRow));
+                            continue;
                         }
                     }
 
-                    if (b) {
-                        // 检查是否已存在 code
-                        boolean exit = cardInfoPoolDao.existsByCode(param1.getCode());
-                        if (exit) {
-                            failDetails.add(String.format("第%d行卡号%s已存在", startRow, param1.getCode()));
-                            b = false;
-                        }
+                    // 检查是否已存在 code
+                    boolean exit = cardInfoPoolDao.existsByCode(param1.getCode());
+                    if (exit) {
+                        failDetails.add(String.format("第%d行卡号%s已存在", startRow, param1.getCode()));
+                        continue;
                     }
 
-                    if (b) {
-                        // 验证通过
-                        CardInfoPool pool = new CardInfoPool();
-                        initEntity(pool);
-                        param1.setCode(param1.getCode().trim());
-                        BeanUtils.copyProperties(param1, pool, "cardType");
-                        pool.setSchoolOid("");
-                        pool.setProjectOid(projectOid);
-                        pool.setOid(oid);
-                        pool.setAboutOid(oidAboutInfo.getOid());
-                        pool.setAboutAuthType(oidAboutInfo.getAuthType());
-
-                        // 初始状态为  未使用
-                        pool.setIsUsed(Boolean.FALSE);
-                        // 对比出卡片类型
-                        CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
-                        pool.setCardType(cardType);
-                        cardInfoPools.add(pool);
-                    }
-                    startRow++;
+                    // 组装数据
+                    codeMap.put(code, code);
+                    // 验证通过
+                    CardInfoPool pool = new CardInfoPool();
+                    initEntity(pool);
+                    param1.setCode(code);
+                    BeanUtils.copyProperties(param1, pool, "cardType");
+                    pool.setSchoolOid("");
+                    pool.setProjectOid(projectOid);
+                    pool.setOid(oid);
+                    pool.setAboutOid(oidAboutInfo.getOid());
+                    pool.setAboutAuthType(oidAboutInfo.getAuthType());
+
+                    // 初始状态为  未使用
+                    pool.setIsUsed(Boolean.FALSE);
+                    // 对比出卡片类型
+                    CardType cardType = CommonUtil.getCardTypeByStr(param1.getCardType());
+                    pool.setCardType(cardType);
+                    cardInfoPools.add(pool);
                 }
                 cardInfoPoolDao.saveAll(cardInfoPools);
                 model.setSuccess(cardInfoPools.size());

+ 1 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/CardInfoServiceImpl.java

@@ -740,6 +740,7 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
                         failDetails.add(String.format("第%d行卡号不能为空", startRow));
                         continue;
                     }
+                    code = code.trim();
                     String phone = bindImportParam.getPhone();
                     if (StringUtils.isEmpty(phone)) {
                         failDetails.add(String.format("第%d行手机号码不能为空", startRow));
@@ -762,7 +763,6 @@ public class CardInfoServiceImpl extends SuperService implements CardInfoService
                     }
                     bind2OrgUserParam.setPoolId(cardInfoPool.getId());
 
-
                     // 查询用户
                     UserAccount userAccount = userCountDao.findTopByLoginName(phone);
                     if (ObjectUtils.isEmpty(userAccount)) {