Преглед на файлове

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	FullCardServer/src/main/java/com/zhongshu/card/server/core/service/pay/ChinaumsSenselessPayService.java
wujiefeng преди 1 година
родител
ревизия
f1a8ea654b
променени са 35 файла, в които са добавени 516 реда и са изтрити 260 реда
  1. 64 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/OutNumberModel.java
  2. 2 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/permiss/DevicePermissModel.java
  3. 36 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/DepartmentSimpleModel.java
  4. 2 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/orgUser/OrganizationUserModel.java
  5. 16 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/orgUser/OrganizationUserSimpleModel.java
  6. 26 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/orgFace/OrgUserFaceAuditsParam.java
  7. 39 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/orgFace/OrgUserFaceModel.java
  8. 6 1
      FullCardClient/src/main/java/com/zhongshu/card/client/utils/DateUtils.java
  9. 2 8
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/fix/FixDataController.java
  10. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/gateDoor/GateDoorController.java
  11. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/AccessRecordController.java
  12. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/DevicePermissOpenApiController.java
  13. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ExpenseFlowOpenApiController.java
  14. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OpenApiConfigManagerController.java
  15. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OpenAppManagerController.java
  16. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OrganizationUserOpenApiController.java
  17. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/PayOpenApiController.java
  18. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ProjectOpenAPIController.java
  19. 8 9
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/TransactionLogOpenApiController.java
  20. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/HxzController.java
  21. 36 10
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/projectAbout/OrgUserFaceController.java
  22. 4 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/DeviceInfo.java
  23. 67 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/thing/IotThing.java
  24. 0 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/DeviceSyncFromIotService.java
  25. 0 90
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/ProjectSyncIotCenterService.java
  26. 18 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/thing/IotThingService.java
  27. 0 24
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/fix/FixDataService.java
  28. 4 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenAPIRegisterService.java
  29. 0 12
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java
  30. 2 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java
  31. 20 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserInfoSyncService.java
  32. 3 61
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java
  33. 116 15
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/projectAbout/OrgUserFaceService.java
  34. 14 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/DepartmentServiceImpl.java
  35. 11 3
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/UserAccountServiceImpl.java

+ 64 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/OutNumberModel.java

@@ -0,0 +1,64 @@
+package com.zhongshu.card.client.model.base;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 批量操作结果 返回 (成功多少,失败多少)
+ *
+ * @author TRX
+ * @date 2025/3/3
+ */
+@Data
+public class OutNumberModel {
+
+    @Schema(description = "成功数量")
+    private Long success = 0L;
+
+    @Schema(description = "成功的数据")
+    private List<OutMessage> successList = new ArrayList<>();
+
+    public void addSuccess() {
+        this.success++;
+    }
+
+    public void addSuccess(String key, String msg) {
+        this.successList.add(new OutMessage(key, msg));
+        this.success++;
+    }
+
+    public void addSuccess(String key) {
+        this.successList.add(new OutMessage(key, "成功"));
+        this.success++;
+    }
+
+    @Schema(description = "失败数量")
+    private Long fail = 0L;
+
+    @Schema(description = "失败的数据")
+    private List<OutMessage> failList = new ArrayList<>();
+
+    public void addFail() {
+        this.fail++;
+    }
+
+    public void addFail(String key, String msg) {
+        this.fail++;
+        this.failList.add(new OutMessage(key, msg));
+    }
+
+    @Data
+    @Builder
+    public static class OutMessage {
+
+        @Schema(description = "相关数据")
+        private String key;
+
+        @Schema(description = "结果")
+        private String msg;
+    }
+}

+ 2 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/devices/permiss/DevicePermissModel.java

@@ -4,6 +4,7 @@ import com.github.microservice.types.deviceUse.DeviceType;
 import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.devices.DeviceInfoModel;
 import com.zhongshu.card.client.model.org.DepartmentModel;
+import com.zhongshu.card.client.model.org.DepartmentSimpleModel;
 import com.zhongshu.card.client.model.org.orgUser.OrganizationUserModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
 import com.zhongshu.card.client.model.org.role.RoleSimpleModel;
@@ -111,7 +112,7 @@ public class DevicePermissModel extends SuperModel {
     private List<RoleSimpleModel> roles = new ArrayList<>();
 
     @Schema(description = "部门信息")
-    private DepartmentModel department;
+    private DepartmentSimpleModel department;
 
     @Schema(description = "用户状态")
     private UserState state = UserState.Normal;

+ 36 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/DepartmentSimpleModel.java

@@ -0,0 +1,36 @@
+package com.zhongshu.card.client.model.org;
+
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.type.DataState;
+import com.zhongshu.card.client.utils.ITree;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/6/3
+ */
+@Data
+public class DepartmentSimpleModel implements ITree<DepartmentSimpleModel>, Serializable {
+
+    private String id;
+
+    @Schema(description = "部门名称")
+    private String name;
+
+    @Schema(description = "部门编码")
+    private String code;
+
+    @Schema(description = "部门状态")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "上级ID")
+    private String parentId;
+
+    @Schema(description = "子层级")
+    private List<DepartmentSimpleModel> children = new ArrayList<>();
+}

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

@@ -3,6 +3,7 @@ package com.zhongshu.card.client.model.org.orgUser;
 import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.model.base.SuperModel;
 import com.zhongshu.card.client.model.org.DepartmentModel;
+import com.zhongshu.card.client.model.org.DepartmentSimpleModel;
 import com.zhongshu.card.client.model.org.OrganizationMiniModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
 import com.zhongshu.card.client.model.org.role.RoleSimpleModel;
@@ -224,7 +225,7 @@ public class OrganizationUserModel extends SuperModel {
     }
 
     @Schema(description = "部门信息")
-    private DepartmentModel department;
+    private DepartmentSimpleModel department;
 
     @Schema(description = "部门名称")
     private String departmentName;

+ 16 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/orgUser/OrganizationUserSimpleModel.java

@@ -1,11 +1,14 @@
 package com.zhongshu.card.client.model.org.orgUser;
 
 import com.zhongshu.card.client.model.org.DepartmentModel;
+import com.zhongshu.card.client.model.org.DepartmentSimpleModel;
 import com.zhongshu.card.client.model.org.role.RoleModel;
+import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.ArrayList;
@@ -48,8 +51,20 @@ public class OrganizationUserSimpleModel {
     private List<RoleModel> roles = new ArrayList<>();
 
     @Schema(description = "部门信息")
-    private DepartmentModel department;
+    private DepartmentSimpleModel department;
 
     @Schema(description = "部门信息所有级")
     private List<DepartmentModel> departments = new ArrayList<>();
+
+    @Schema(description = "职位")
+    private DictInfoSimpleModel position;
+
+    private String positionName;
+
+    public String getPositionName() {
+        if (ObjectUtils.isNotEmpty(position)) {
+            return position.getName();
+        }
+        return "";
+    }
 }

+ 26 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/orgFace/OrgUserFaceAuditsParam.java

@@ -0,0 +1,26 @@
+package com.zhongshu.card.client.model.projectAbout.orgFace;
+
+import com.zhongshu.card.client.type.common.AuditState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2025/2/18
+ */
+@Data
+public class OrgUserFaceAuditsParam {
+
+    private List<String> ids = new ArrayList<String>();
+
+    @Schema(description = "审核备注")
+    private String auditRemark;
+
+    @NotNull
+    @Schema(description = "审核状态")
+    private AuditState auditState;
+}

+ 39 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/projectAbout/orgFace/OrgUserFaceModel.java

@@ -1,13 +1,15 @@
 package com.zhongshu.card.client.model.projectAbout.orgFace;
 
 import com.zhongshu.card.client.model.base.SuperModel;
-import com.zhongshu.card.client.model.org.orgUser.OrganizationUserSimpleModel;
 import com.zhongshu.card.client.model.org.UserCountSimpleModel;
+import com.zhongshu.card.client.model.org.orgUser.OrganizationUserSimpleModel;
+import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.common.AuditState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 
 /**
  * @author TRX
@@ -30,6 +32,15 @@ public class OrgUserFaceModel extends SuperModel {
         return "";
     }
 
+    public String passRate;
+
+    public String getPassRate() {
+        if (auditState == AuditState.Audited) {
+            return "合格";
+        }
+        return "";
+    }
+
     //-----------------用户信息 start -----------------
     @Schema(description = "用户ID")
     private String userId;
@@ -40,6 +51,21 @@ public class OrgUserFaceModel extends SuperModel {
     @Schema(description = "用户电话")
     private String phone;
 
+    @Schema(description = "性别")
+    private Sex sex;
+
+    private String sexStr;
+
+    public String getSexStr() {
+        if (sex != null) {
+            return sex.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "人员编码")
+    private String code;
+
     @Schema(description = "用户信息")
     private UserCountSimpleModel userAccount;
 
@@ -60,6 +86,18 @@ public class OrgUserFaceModel extends SuperModel {
     @Schema(description = "审核用户userId")
     private String auditUserId;
 
+    private String auditUserName;
+
+    public String getAuditUserName() {
+        if (ObjectUtils.isNotEmpty(auditUserAccount)) {
+            return auditUserAccount.getName();
+        }
+        return "";
+    }
+
+    @Schema(description = "审核用户")
+    private UserCountSimpleModel auditUserAccount;
+
     @Schema(description = "审核备注")
     private String auditRemark;
 

+ 6 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/utils/DateUtils.java

@@ -52,6 +52,10 @@ public class DateUtils {
 
     public final static String patternyyyyMMCn = "yyyy年MM月";
 
+    public final static String patternyyyyMMddHHmmKey = "yyyy-MM-dd-HH-mm";
+
+    public final static String patternyyyyMMddHHKey = "yyyy-MM-dd-HH";
+
     public static Long timeToLong(String time) {
         return timeToLong(time, FORMAT_LONG);
     }
@@ -832,9 +836,10 @@ public class DateUtils {
 
     /**
      * 得到半年前的时间
+     *
      * @return
      */
-    public static Long getSixMonthsAgo () {
+    public static Long getSixMonthsAgo() {
         Calendar calendar = Calendar.getInstance();
         calendar.add(Calendar.MONTH, -6);
         Date sixMonthsAgo = calendar.getTime();

+ 2 - 8
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/fix/FixDataController.java

@@ -1,16 +1,15 @@
 package com.zhongshu.card.server.core.controller.fix;
 
-import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.server.core.service.fix.FixDataService;
-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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
+ * 修复数据
+ *
  * @author TRX
  * @date 2024/6/27
  */
@@ -23,9 +22,4 @@ public class FixDataController {
     @Autowired
     private FixDataService fixDataService;
 
-    @Operation(summary = "同步全部项目到物联网平台")
-    @RequestMapping(value = "fixSyncDevice", method = {RequestMethod.GET})
-    public ResultContent fixSyncDevice() {
-        return fixDataService.fixSyncProjectToIot();
-    }
 }

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/gateDoor/GateDoorController.java

@@ -4,6 +4,7 @@ package com.zhongshu.card.server.core.controller.gateDoor;
 import com.github.microservice.models.gateDoor.OnLineParam;
 import com.github.microservice.models.gateDoor.gateDoor.GateDoorIotParam;
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.server.core.service.gateDoor.GateDoorService;
 import io.swagger.v3.oas.annotations.Hidden;
 import io.swagger.v3.oas.annotations.Operation;
@@ -15,7 +16,7 @@ import org.springframework.web.bind.annotation.*;
 
 @Slf4j
 @RestController
-@RequestMapping("/openAPI/gateDoor/v1")
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/gateDoor/v1")
 @Tag(name = "门闸")
 @Hidden
 public class GateDoorController {

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/AccessRecordController.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.opengateway.client.model.param.AccessRecordSearchParam;
 import com.zhongshu.opengateway.client.model.ret.ResultContent;
 import com.zhongshu.opengateway.client.service.AccessRecordService;
@@ -11,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
-@RequestMapping("/openApi/accessRecord")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/accessRecord")
 @Tag(name = "OpenApi--访问日志")
 public class AccessRecordController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/DevicePermissOpenApiController.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.openApi.model.DeviceInfoOpenApiModel;
 import com.zhongshu.card.client.openApi.model.DevicePermissOpenApiModel;
 import com.zhongshu.card.client.openApi.params.*;
@@ -22,7 +23,7 @@ import java.util.List;
  * @date 2024/6/5
  */
 @RestController
-@RequestMapping("/openAPI/v1/devicePermiss")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/devicePermiss")
 @Tag(name = "openAPI-设备权限管理")
 public class DevicePermissOpenApiController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/ExpenseFlowOpenApiController.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.openApi.model.ExpenseFlowOpenApiModel;
 import com.zhongshu.card.client.openApi.params.ExpenseFlowOpenApiSearch;
 import com.zhongshu.card.client.openApi.params.PaymentNoParam;
@@ -19,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @date 2024/6/5
  */
 @RestController
-@RequestMapping("/openAPI/v1/orderManager")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/orderManager")
 @Tag(name = "openAPI-订单管理")
 public class ExpenseFlowOpenApiController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OpenApiConfigManagerController.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.openAPI;
 import com.github.microservice.auth.client.constant.AuthConstant;
 import com.github.microservice.auth.security.annotations.ResourceAuth;
 import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.server.core.service.openAPI.OpenApiConfigManagerService;
 import com.zhongshu.card.server.core.service.openAPI.OpenAppManagerService;
 import com.zhongshu.opengateway.client.model.OpenApiConfigModel;
@@ -26,7 +27,7 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 @RestController
-@RequestMapping("/openApi/apiConfig")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/apiConfig")
 @Tag(name = "OpenApi--接口管理")
 public class OpenApiConfigManagerController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OpenAppManagerController.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.openAPI;
 import com.github.microservice.auth.client.constant.AuthConstant;
 import com.github.microservice.auth.security.annotations.ResourceAuth;
 import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.model.openApi.AppParam;
 import com.zhongshu.card.server.core.service.openAPI.OpenAppManagerService;
 import com.zhongshu.opengateway.client.model.param.SignParam;
@@ -19,7 +20,7 @@ import org.springframework.data.web.PageableDefault;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
-@RequestMapping("/openApi/app")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/app")
 @Tag(name = "OpenApi--应用管理")
 public class OpenAppManagerController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/OrganizationUserOpenApiController.java

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.model.base.IDParam;
 import com.zhongshu.card.client.openApi.model.OrganizationUserOpenApiModel;
 import com.zhongshu.card.client.openApi.params.OrganizationUserOpenApiSearch;
@@ -19,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @date 2024/6/5
  */
 @RestController
-@RequestMapping("/openAPI/v1/projectUserManager")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/projectUserManager")
 @Tag(name = "openAPI-项目用户")
 public class OrganizationUserOpenApiController {
 

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/PayOpenApiController.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.openAPI;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
 import com.github.microservice.pay.client.model.ledger.transaction.TransactionLogAggregateRetModel;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.model.pay.*;
 import com.zhongshu.card.client.openApi.RefundQueryParam;
@@ -25,7 +26,7 @@ import javax.validation.Valid;
 import java.util.List;
 
 @RestController
-@RequestMapping("/openAPI/v1/pay")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/pay")
 @Tag(name = "openAPI-支付管理")
 public class PayOpenApiController {
 

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

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.openAPI;
 import com.github.microservice.models.device.DevicePerQuery;
 import com.github.microservice.models.device.UserPerQuery;
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.server.core.service.devices.permiss.DevicePermissIotService;
 import com.zhongshu.card.server.core.service.devices.DeviceUseRecordService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -20,7 +21,7 @@ import javax.validation.Valid;
  * @date 2024/6/5
  */
 @RestController
-@RequestMapping("/openAPI/v1/projectManager")
+@RequestMapping("/"+ OpenApiMark.fullCardOpenAPI +"/v1/projectManager")
 @Tag(name = "openAPI-项目管理")
 public class ProjectOpenAPIController {
 

+ 8 - 9
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/openAPI/TransactionLogOpenApiController.java

@@ -1,12 +1,11 @@
 package com.zhongshu.card.server.core.controller.openAPI;
 
-import com.github.microservice.auth.security.annotations.ResourceAuth;
-import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.pay.client.model.ledger.TransactionLogModel;
 import com.github.microservice.pay.client.model.ledger.transaction.TransactionLogPeriodAggregateRetModel;
 import com.github.microservice.pay.client.model.ledger.transaction.TransactionLogRealTimeAggregateRetModel;
 import com.github.microservice.pay.client.model.ledger.transaction.TransactionLogSettleAggregateRetModel;
 import com.github.microservice.pay.client.ret.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.client.model.pay.PeriodDetailQueryModel;
 import com.zhongshu.card.client.model.pay.PeriodQueryModel;
 import com.zhongshu.card.client.model.pay.SettleDetailQueryModel;
@@ -23,7 +22,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
-@RequestMapping("/openAPI/v1/transactionLog")
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/v1/transactionLog")
 @Tag(name = "openAPI-账单")
 public class TransactionLogOpenApiController {
 
@@ -33,42 +32,42 @@ public class TransactionLogOpenApiController {
     @Operation(summary = "查询收入账单", description = "查询收入账单-年月日汇总")
     @RequestMapping(value = "queryCreditBill", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogPeriodAggregateRetModel>> queryCreditBill(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                                      @Parameter(required = true) PeriodQueryModel param){
+            @Parameter(required = true) PeriodQueryModel param) {
         return orgOverviewService.queryCreditBill(pageable, param);
     }
 
     @Operation(summary = "查询收入账单详情", description = "查询收入账单详情")
     @RequestMapping(value = "queryCreditBillDetail", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogModel>> queryCreditBillDetail(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                          @Parameter(required = true) PeriodDetailQueryModel periodDetailQueryModel){
+            @Parameter(required = true) PeriodDetailQueryModel periodDetailQueryModel) {
         return orgOverviewService.queryCreditBillDetail(pageable, periodDetailQueryModel);
     }
 
     @Operation(summary = "查询结算账单", description = "查询结算账单")
     @RequestMapping(value = "querySettleBill", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogSettleAggregateRetModel>> querySettleBill(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                                      @Parameter(required = false) PeriodQueryModel param){
+            @Parameter(required = false) PeriodQueryModel param) {
         return orgOverviewService.querySettleBill(pageable, param);
     }
 
     @Operation(summary = "查询结算账单详情", description = "查询结算账单详情")
     @RequestMapping(value = "querySettleBillDetail", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogModel>> querySettleBillDetail(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                          @Parameter(required = false) SettleDetailQueryModel settleDetailQueryModel){
+            @Parameter(required = false) SettleDetailQueryModel settleDetailQueryModel) {
         return orgOverviewService.querySettleBillDetail(pageable, settleDetailQueryModel);
     }
 
     @Operation(summary = "查询提现账单", description = "查询提现账单")
     @RequestMapping(value = "queryWithdrawBill", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogRealTimeAggregateRetModel>> queryWithdrawBill(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                                          @Parameter(required = false) PeriodQueryModel param){
+            @Parameter(required = false) PeriodQueryModel param) {
         return orgOverviewService.queryWithdrawBill(pageable, param);
     }
 
     @Operation(summary = "查询提现账单详情", description = "查询提现账单详情")
     @RequestMapping(value = "queryWithdrawBillDetail", method = RequestMethod.POST)
     public ResultContent<Page<TransactionLogModel>> queryWithdrawBillDetail(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
-                                                                            @Parameter(required = false) SettleDetailQueryModel settleDetailQueryModel){
+            @Parameter(required = false) SettleDetailQueryModel settleDetailQueryModel) {
         return orgOverviewService.queryWithdrawBillDetail(pageable, settleDetailQueryModel);
     }
 }

+ 2 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/HxzController.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.controller.payment;
 
 import com.github.microservice.models.hxz.*;
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.zhongshu.card.server.core.service.hxz.HxzService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -16,7 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @Slf4j
 @RestController
-@RequestMapping("/openAPI/hxz/v1")
+@RequestMapping("/" + OpenApiMark.fullCardOpenAPI + "/hxz/v1")
 @Tag(name = "云版消费机接口-HXZ")
 public class HxzController {
 

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

@@ -3,14 +3,9 @@ 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.IDParam;
-import com.zhongshu.card.client.model.base.ProjectOidParam;
-import com.zhongshu.card.client.model.base.UrlParam;
-import com.zhongshu.card.client.model.base.UserIdAndOidModel;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceAuditParam;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceModel;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceParam;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceSearch;
+import com.zhongshu.card.client.model.base.*;
+import com.zhongshu.card.client.model.projectAbout.orgFace.*;
+import com.zhongshu.card.client.type.common.AuditState;
 import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -62,7 +57,14 @@ public class OrgUserFaceController {
     @Operation(summary = "删除人脸信息", description = "删除人脸信息")
     @RequestMapping(value = {"deleteFace"}, method = {RequestMethod.POST})
     public ResultContent deleteFace(@RequestBody IDParam param) {
-        return orgUserFaceService.deleteFace(param.getId());
+        return orgUserFaceService.deleteFace(param.getId(), false);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除人脸信息(多个)", description = "删除人脸信息")
+    @RequestMapping(value = {"deleteFaces"}, method = {RequestMethod.POST})
+    public ResultContent deleteFaces(@RequestBody IDsParam param) {
+        return orgUserFaceService.deleteFace(param);
     }
 
     @ResourceAuth(value = "user", type = AuthType.User)
@@ -72,12 +74,29 @@ public class OrgUserFaceController {
         return orgUserFaceService.auditFace(param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "审核人脸申请(多个)", description = "审核人脸申请(多个)")
+    @RequestMapping(value = {"auditsFace"}, method = {RequestMethod.POST})
+    public ResultContent auditsFace(@RequestBody OrgUserFaceAuditsParam param) {
+        return orgUserFaceService.auditsFace(param);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "所有数据列表-分页查询", description = "数据列表-分页查询")
     @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
-    public ResultContent<Page<OrgUserFaceModel>> page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+    public ResultContent<Page<OrgUserFaceModel>> page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) OrgUserFaceSearch param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        return orgUserFaceService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "所有数据列表(已通过的)-分页查询", description = "数据列表-分页查询")
+    @RequestMapping(value = {"passPage"}, method = {RequestMethod.POST})
+    public ResultContent<Page<OrgUserFaceModel>> passPage(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
             @Parameter(required = false) OrgUserFaceSearch param) {
         Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        param.setAuditState(AuditState.Audited);
         return orgUserFaceService.page(param, pageable);
     }
 
@@ -95,6 +114,13 @@ public class OrgUserFaceController {
         return orgUserFaceService.getUserAllFace(param.getUserId(), param.getProjectOid());
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "人脸信息详情", description = "人脸信息详情")
+    @RequestMapping(value = "getDetail", method = {RequestMethod.POST})
+    public ResultContent getDetail(@RequestBody @Valid IDParam param) {
+        return orgUserFaceService.getDetail(param.getId());
+    }
+
     @Operation(summary = "判断检查人脸可信度", description = "判断检查人脸可信度")
     @RequestMapping(value = "conformFace", method = {RequestMethod.POST})
     public ResultContent conformFace(@RequestBody @Valid UrlParam param) {

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

@@ -1,6 +1,7 @@
 package com.zhongshu.card.server.core.domain.devices;
 
 import com.github.microservice.models.device.DeviceAboutInfo;
+import com.github.microservice.types.deviceUse.DeviceCategory;
 import com.github.microservice.types.deviceUse.DeviceSpecType;
 import com.github.microservice.types.deviceUse.DeviceState;
 import com.github.microservice.types.deviceUse.DeviceType;
@@ -78,6 +79,9 @@ public class DeviceInfo extends SuperMain {
     @Schema(description = "设备型号")
     private DeviceSpecType specType;
 
+    @Schema(description = "设备品类")
+    private DeviceCategory deviceCategory;
+
     @Schema(description = "网关号")
     private String gateWayId;
 

+ 67 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/devices/thing/IotThing.java

@@ -0,0 +1,67 @@
+package com.zhongshu.card.server.core.domain.devices.thing;
+
+import com.github.microservice.types.deviceUse.DeviceCategory;
+import com.github.microservice.types.deviceUse.DeviceType;
+import com.github.microservice.types.deviceUse.ThingType;
+import com.zhongshu.card.server.core.domain.base.SuperMain;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 物模型数据
+ *
+ * @author TRX
+ * @date 2025/3/3
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotThing extends SuperMain {
+
+    @Schema(description = "物模型类型:自动、手动创建")
+    private ThingType thingType;
+
+    @Schema(description = "编码")
+    private String code;
+
+    @Schema(description = "名称")
+    private String name;
+
+    @Schema(description = "设备数量")
+    private Long deviceCount = 0L;
+
+    @Schema(description = "所属分组")
+    private String projectCode;
+
+    //-----------------所属产品 start-----------
+    @Schema(description = "所属产品数据id")
+    private String iotTemplateId;
+
+    @Schema(description = "关联code,产品code")
+    private String productCode;
+
+    @Schema(description = "产品名称")
+    private String productName;
+
+    //-----------------管理的设备类型 start ---------
+
+    @Schema(description = "设备id")
+    private String deviceId;
+
+    @Schema(description = "设备品类")
+    private DeviceCategory deviceCategory;
+
+    @Schema(description = "设备id集合")
+    private List<String> deviceIds = new ArrayList<>();
+
+    @Schema(description = "设备类型集合")
+    private List<DeviceType> deviceTypes = new ArrayList<>();
+
+}

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

@@ -17,7 +17,6 @@ import com.zhongshu.card.server.core.domain.devices.permiss.DevicePermiss;
 import com.zhongshu.card.server.core.service.base.CommonService;
 import com.zhongshu.card.server.core.service.user.OperationLogsService;
 import com.zhongshu.card.server.core.util.CommonUtil;
-import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;

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

@@ -1,90 +0,0 @@
-package com.zhongshu.card.server.core.service.devices;
-
-import com.github.microservice.auth.security.type.AuthType;
-import com.github.microservice.models.project.ProjectSyncParam;
-import com.github.microservice.types.common.CommonState;
-import com.github.microservice.net.ResultContent;
-import com.zhongshu.card.client.type.OrganizationState;
-import com.zhongshu.card.server.core.dao.org.OrganizationDao;
-import com.zhongshu.card.server.core.domain.org.Organization;
-import com.zhongshu.card.server.core.event.ProjectSyncEvent;
-import com.zhongshu.card.server.core.httpRequest.ApiRequestService;
-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.scheduling.annotation.Async;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author TRX
- * @date 2024/6/27
- */
-@Slf4j
-@Service
-public class ProjectSyncIotCenterService {
-
-    @Autowired
-    OrganizationDao organizationDao;
-
-    @Autowired
-    ApplicationContext applicationContext;
-
-    @Autowired
-    ApiRequestService apiRequestService;
-
-    public ResultContent noticeSyncProjects(List<Organization> list) {
-        if (ObjectUtils.isNotEmpty(list)) {
-            List<String> projectOIds = list.stream().map(it -> it.getOid()).collect(Collectors.toList());
-            ProjectSyncEvent event = new ProjectSyncEvent(this, projectOIds);
-            applicationContext.publishEvent(event);
-        }
-        return ResultContent.buildSuccess();
-    }
-
-    public ResultContent noticeSyncProject(Organization organization) {
-        if (ObjectUtils.isNotEmpty(organization) && organization.getAuthType() == AuthType.Project) {
-            List<String> projectOIds = List.of(organization.getOid());
-            ProjectSyncEvent event = new ProjectSyncEvent(this, projectOIds);
-            applicationContext.publishEvent(event);
-        }
-        return ResultContent.buildSuccess();
-    }
-
-    @EventListener(classes = ProjectSyncEvent.class)
-    @Async
-    @SneakyThrows
-    public void syncProjectInfo(ProjectSyncEvent event) {
-        List<String> projectOIds = event.getProjectOIds();
-        log.info("syncProjectInfo: {}", projectOIds.size());
-        if (ObjectUtils.isNotEmpty(projectOIds)) {
-            List<Organization> organizations = organizationDao.findByOidIn(projectOIds);
-            List<ProjectSyncParam.ProjectSyncInfo> list = organizations.stream().map(it -> {
-                ProjectSyncParam.ProjectSyncInfo info = new ProjectSyncParam.ProjectSyncInfo();
-                info.setCode(it.getCode());
-                info.setName(it.getName());
-                OrganizationState state = it.getState();
-                if (state == OrganizationState.Normal) {
-                    info.setState(CommonState.Enable);
-                } else {
-                    info.setState(CommonState.Disable);
-                }
-                return info;
-            }).collect(Collectors.toList());
-            ProjectSyncParam param = new ProjectSyncParam();
-            param.setList(list);
-            // 请求iot平台
-//            APIResponseModel api = apiRequestService.sendIotCenterAPI(IotCenterAPIConfig.syncFromFullCardProjects, param);
-//            if (api.isSuccess()) {
-//                log.info("同步项目成功");
-//            } else {
-//                log.error("同步项目失败:{}", api.getMsg());
-//            }
-        }
-    }
-}

+ 18 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/devices/thing/IotThingService.java

@@ -0,0 +1,18 @@
+package com.zhongshu.card.server.core.service.devices.thing;
+
+import com.zhongshu.card.server.core.service.base.SuperService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 物模型管理服务
+ *
+ * @author TRX
+ * @date 2025/3/3
+ */
+@Slf4j
+@Service
+public class IotThingService extends SuperService {
+
+
+}

+ 0 - 24
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/fix/FixDataService.java

@@ -1,17 +1,10 @@
 package com.zhongshu.card.server.core.service.fix;
 
-import com.github.microservice.auth.security.type.AuthType;
-import com.github.microservice.net.ResultContent;
 import com.zhongshu.card.server.core.dao.org.OrganizationDao;
-import com.zhongshu.card.server.core.domain.org.Organization;
-import com.zhongshu.card.server.core.service.devices.ProjectSyncIotCenterService;
 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.List;
-
 /**
  * @author TRX
  * @date 2024/6/28
@@ -23,22 +16,5 @@ public class FixDataService {
     @Autowired
     OrganizationDao organizationDao;
 
-    @Autowired
-    ProjectSyncIotCenterService projectSyncIotCenterService;
-
-    /**
-     * 同步项目信息到物联网平台
-     *
-     * @return
-     */
-    public ResultContent fixSyncProjectToIot() {
-        int count = 0;
-        List<Organization> list = organizationDao.findByAuthType(AuthType.Project);
-        if (ObjectUtils.isNotEmpty(list)) {
-            count = list.size();
-            projectSyncIotCenterService.noticeSyncProjects(list);
-        }
-        return ResultContent.buildSuccess(String.format("同步项目:%d", count));
-    }
 
 }

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

@@ -3,6 +3,7 @@ package com.zhongshu.card.server.core.service.openAPI;
 import com.github.microservice.models.openAPI.OpenApiInfo;
 import com.github.microservice.models.openAPI.RefreshApiParam;
 import com.github.microservice.net.ResultContent;
+import com.github.microservice.staticVariable.OpenApiMark;
 import com.github.microservice.utils.OpenAPIScan;
 import com.zhongshu.opengateway.client.type.ApiType;
 import lombok.extern.slf4j.Slf4j;
@@ -31,14 +32,13 @@ public class OpenAPIRegisterService {
 
     public ResultContent initRegisterPAIS() {
         String str = restTemplate.getForObject("http://" + serviceId + "/v3/api-docs", String.class);
-        String sign = "openAPI";
-        List<OpenApiInfo> openAPIS = OpenAPIScan.scanAPI(str, "一卡通", sign);
+        List<OpenApiInfo> openAPIS = OpenAPIScan.scanAPI(str, "一卡通", OpenApiMark.fullCardOpenAPI);
         RefreshApiParam param = new RefreshApiParam();
         param.setServerName(serviceId.toLowerCase());
-        param.setPredicateArgs(String.format("/%s/**", sign));
+        param.setPredicateArgs(String.format("/%s/**", OpenApiMark.fullCardOpenAPI));
         param.setOpenApiInfo(openAPIS);
         param.setApiType(ApiType.FullCard.name());
-        param.setApiDocs(OpenAPIScan.filterOpenApi(str, sign));
+        param.setApiDocs(OpenAPIScan.filterOpenApi(str, OpenApiMark.fullCardOpenAPI));
         ResultContent content = restTemplate.postForObject("http://openapiserver/manager/gateway/api/refresh", param, ResultContent.class);
         if (content == null) {
             content = ResultContent.buildSuccess();

+ 0 - 12
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationServiceImpl.java

@@ -26,7 +26,6 @@ import com.zhongshu.card.server.core.dao.org.*;
 import com.zhongshu.card.server.core.dataConfig.CardSystemDefault;
 import com.zhongshu.card.server.core.domain.org.*;
 import com.zhongshu.card.server.core.service.base.SuperService;
-import com.zhongshu.card.server.core.service.devices.ProjectSyncIotCenterService;
 import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
 import com.zhongshu.card.server.core.service.orgManager.ProjectBindOrgServiceImpl;
 import com.zhongshu.card.server.core.service.projectAbout.ProjectCommonConfigService;
@@ -105,9 +104,6 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
     @Autowired
     private OrganizationRelationDao organizationRelationDao;
 
-    @Autowired
-    private ProjectSyncIotCenterService projectSyncIotCenterService;
-
     @Autowired
     private OrganizationUserServiceImpl organizationUserServiceImpl;
 
@@ -369,11 +365,6 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
             initOrganization(organization, param.getPassword());
         }
 
-        // 同步项目信息
-        if (authType == AuthType.Project) {
-            projectSyncIotCenterService.noticeSyncProject(organization);
-        }
-
         return ResultContent.buildSuccess(organization);
     }
 
@@ -397,9 +388,6 @@ public class OrganizationServiceImpl extends SuperService implements Organizatio
         }
         BeanUtils.copyProperties(param, organization);
         organizationDao.save(organization);
-        if (organization.getAuthType() == AuthType.Project) {
-            projectSyncIotCenterService.noticeSyncProject(organization);
-        }
         return ResultContent.buildSuccess();
     }
 

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

@@ -1128,11 +1128,12 @@ public class OrganizationUserServiceImpl extends SuperService {
 
             // 部门信息
             if (ObjectUtils.isNotEmpty(entity.getDepartment())) {
-                DepartmentModel departmentModel = departmentService.toModel(entity.getDepartment());
+                DepartmentSimpleModel departmentModel = departmentService.toSimpleModel(entity.getDepartment());
                 model.setDepartment(departmentModel);
                 List<DepartmentModel> departmentModels = departmentService.getParents(entity.getDepartment().getId());
                 model.setDepartments(departmentModels);
             }
+            model.setPosition(dictInfoService.toSimpleModel(entity.getPosition()));
         }
         return model;
     }

+ 20 - 3
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserInfoSyncService.java

@@ -2,11 +2,14 @@ package com.zhongshu.card.server.core.service.org;
 
 import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
 import com.zhongshu.card.server.core.domain.org.OrganizationUser;
+import com.zhongshu.card.server.core.service.projectAbout.OrgUserFaceService;
 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.concurrent.CompletableFuture;
+
 /**
  * 用户改变 后,修改其他关联的信息
  *
@@ -20,16 +23,30 @@ public class UserInfoSyncService {
     @Autowired
     private OrganizationUserDao organizationUserDao;
 
+    @Autowired
+    private OrgUserFaceService orgUserFaceService;
+
     /**
      * 机构用户信息发送变化 同步其他 冗余存储的数据(主要是 用户名称、电话、角色、等信息)
      *
      * @param orgUserDataId
      */
     public void updateProjectAboutInfoByOrgUserDataId(String orgUserDataId) {
-        OrganizationUser organizationUser = organizationUserDao.findTopById(orgUserDataId);
-        if (ObjectUtils.isNotEmpty(organizationUser)) {
+        log.info("updateProjectAboutInfoByOrgUserDataId {}", orgUserDataId);
+        CompletableFuture.runAsync(() -> {
+            try {
+                OrganizationUser organizationUser = organizationUserDao.findTopById(orgUserDataId);
+                if (ObjectUtils.isNotEmpty(organizationUser)) {
+                    //
+
+                    // 用户人脸相关信息
+                    orgUserFaceService.updateAllUser(organizationUser);
 
-        }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        });
     }
 
 }

+ 3 - 61
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/orgManager/OrganizationManagerServiceImpl.java

@@ -1,9 +1,5 @@
 package com.zhongshu.card.server.core.service.orgManager;
 
-import com.github.microservice.auth.client.service.OrganizationUserService;
-import com.github.microservice.auth.client.service.RoleService;
-import com.github.microservice.auth.client.service.UserService;
-import com.github.microservice.auth.security.helper.AuthHelper;
 import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
@@ -11,20 +7,14 @@ import com.github.microservice.net.ResultMessage;
 import com.zhongshu.card.client.model.org.*;
 import com.zhongshu.card.client.model.orgModel.OrgSaveParam;
 import com.zhongshu.card.client.type.OrganizationRelationType;
-import com.zhongshu.card.server.core.dao.org.*;
+import com.zhongshu.card.server.core.dao.org.OrganizationDao;
+import com.zhongshu.card.server.core.dao.org.OrganizationRelationDao;
+import com.zhongshu.card.server.core.dao.org.RegionDao;
 import com.zhongshu.card.server.core.domain.org.Organization;
 import com.zhongshu.card.server.core.domain.org.OrganizationRelation;
 import com.zhongshu.card.server.core.domain.org.Region;
 import com.zhongshu.card.server.core.service.base.SuperService;
-import com.zhongshu.card.server.core.service.devices.ProjectSyncIotCenterService;
 import com.zhongshu.card.server.core.service.org.OrganizationServiceImpl;
-import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
-import com.zhongshu.card.server.core.service.projectAbout.ProjectCommonConfigService;
-import com.zhongshu.card.server.core.service.projectAbout.ProjectIotInfoService;
-import com.zhongshu.card.server.core.service.projectAbout.ProjectWeChatInfoService;
-import com.zhongshu.card.server.core.service.user.DepartmentServiceImpl;
-import com.zhongshu.card.server.core.service.user.RoleServiceImpl;
-import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import com.zhongshu.card.server.core.util.NextNoUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -52,60 +42,12 @@ public class OrganizationManagerServiceImpl extends SuperService {
     @Autowired
     OrganizationDao organizationDao;
 
-    @Autowired
-    com.github.microservice.auth.client.service.OrganizationService organizationService;
-
-    @Autowired
-    OrganizationUserService organizationUserService;
-
-    @Autowired
-    RoleService roleService;
-
-    @Autowired
-    UserService userService;
-
-    @Autowired
-    UserCountDao userCountDao;
-
-    @Autowired
-    UserAccountServiceImpl userAccountService;
-
-    @Autowired
-    private OrganizationUserDao organizationUserDao;
-
-    @Autowired
-    RoleDao roleDao;
-
-    @Autowired
-    DepartmentServiceImpl departmentService;
-
-    @Autowired
-    AuthHelper authHelper;
-
     @Autowired
     RegionDao regionDao;
 
     @Autowired
     OrganizationRelationDao organizationRelationDao;
 
-    @Autowired
-    ProjectSyncIotCenterService projectSyncIotCenterService;
-
-    @Autowired
-    OrganizationUserServiceImpl organizationUserServiceImpl;
-
-    @Autowired
-    RoleServiceImpl roleServiceImpl;
-
-    @Autowired
-    ProjectIotInfoService projectIotInfoService;
-
-    @Autowired
-    ProjectWeChatInfoService projectWeChatInfoService;
-
-    @Autowired
-    ProjectCommonConfigService projectCommonConfigService;
-
     @Autowired
     OrganizationServiceImpl organizationServiceImpl;
 

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

@@ -7,10 +7,9 @@ import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
 import com.google.common.collect.Lists;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceAuditParam;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceModel;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceParam;
-import com.zhongshu.card.client.model.projectAbout.orgFace.OrgUserFaceSearch;
+import com.zhongshu.card.client.model.base.IDsParam;
+import com.zhongshu.card.client.model.base.OutNumberModel;
+import com.zhongshu.card.client.model.projectAbout.orgFace.*;
 import com.zhongshu.card.client.model.projectAbout.projectCommon.ProjectCommonConfigModel;
 import com.zhongshu.card.client.type.common.AuditState;
 import com.zhongshu.card.server.core.dao.org.UserCountDao;
@@ -85,6 +84,15 @@ public class OrgUserFaceService extends SuperService {
      * @return
      */
     public ResultContent saveFace(OrgUserFaceParam param) {
+        // 编辑 先删除
+        if (StringUtils.isNotEmpty(param.getId())) {
+            ResultContent resultContent = deleteFace(param.getId(), false);
+            if (resultContent.isFailed()) {
+                return ResultContent.buildFail(resultContent.getMsg());
+            }
+            param.setId(null);
+        }
+
         String projectOid = param.getProjectOid();
         if (StringUtils.isEmpty(projectOid)) {
             projectOid = getCurrentProjectOid();
@@ -125,6 +133,9 @@ public class OrgUserFaceService extends SuperService {
 
         int maxFaceNumber = configModel.getMaxFaceNumber();
         int number = orgUserFaceDao.countByUserIdAndProjectOid(userId, projectOid);
+        if (StringUtils.isNotEmpty(param.getId())) {
+            number = number - 1;
+        }
         if (number >= maxFaceNumber) {
             return ResultContent.buildFail(String.format("用户人脸数量已达上限:%d张", number));
         }
@@ -176,22 +187,47 @@ public class OrgUserFaceService extends SuperService {
         }
         orgUserFace.setConfidence(configModel.getConfidence());
         orgUserFaceDao.save(orgUserFace);
+        return ResultContent.buildSuccess(toModel(orgUserFace));
+    }
+
+    /**
+     * 删除多个
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent deleteFace(IDsParam param) {
+        if (ObjectUtils.isEmpty(param.getIds())) {
+            return ResultContent.buildFail("ids 不能为空");
+        }
+        OutNumberModel model = new OutNumberModel();
+        for (String id : param.getIds()) {
+            ResultContent _temp = deleteFace(id, true);
+            if (_temp.isSuccess()) {
+                model.addSuccess(id);
+            } else {
+                model.addFail(id, _temp.getMsg());
+            }
+        }
         return ResultContent.buildSuccess();
     }
 
-    public ResultContent deleteFace(String id) {
+    public ResultContent deleteFace(String id, boolean isManager) {
         OrgUserFace orgUserFace = orgUserFaceDao.findTopById(id);
         if (orgUserFace == null) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
         }
-        ResultContent<ProjectCommonConfigModel> content = projectCommonConfigService.getConfigInfoAndCheck(orgUserFace.getProjectOid());
-        if (content.isFailed()) {
-            return ResultContent.buildFail(content.getMsg());
-        }
-        ProjectCommonConfigModel configModel = content.getContent();
-        Boolean isAllowUpdateFace = configModel.getIsAllowUpdateFace();
-        if (isAllowUpdateFace == null || !isAllowUpdateFace) {
-            return ResultContent.buildFail("系统不允许删除人脸信息");
+        if (!isManager) {
+            // 不是管理员,需要验证是否可以删除
+            ResultContent<ProjectCommonConfigModel> content = projectCommonConfigService.getConfigInfoAndCheck(orgUserFace.getProjectOid());
+            if (content.isFailed()) {
+                return ResultContent.buildFail(content.getMsg());
+            }
+            ProjectCommonConfigModel configModel = content.getContent();
+            Boolean isAllowUpdateFace = configModel.getIsAllowUpdateFace();
+            if (isAllowUpdateFace == null || !isAllowUpdateFace) {
+                return ResultContent.buildFail("系统不允许删除人脸信息");
+            }
         }
         if (StringUtils.isNotEmpty(orgUserFace.getUpdateFaceFileId())) {
             com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(orgUserFace.getUserId(), orgUserFace.getUpdateFaceFileId());
@@ -208,6 +244,51 @@ public class OrgUserFaceService extends SuperService {
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
     }
 
+    public ResultContent getDetail(String id) {
+        OrgUserFace orgUserFace = orgUserFaceDao.findTopById(id);
+        if (orgUserFace == null) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(orgUserFace));
+    }
+
+    /**
+     * 审核批量
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent auditsFace(OrgUserFaceAuditsParam param) {
+        List<String> ids = param.getIds();
+        if (ObjectUtils.isEmpty(ids)) {
+            return ResultContent.buildFail("ids不能为空");
+        }
+        String auditRemark = param.getAuditRemark();
+        AuditState auditState = param.getAuditState();
+        if (auditState == null) {
+            return ResultContent.buildFail("审核状态不能为空");
+        }
+        if (auditState == AuditState.Refuse && StringUtils.isEmpty(auditRemark)) {
+            return ResultContent.buildFail("原因不能为空");
+        }
+
+        // 操作结果
+        OutNumberModel numberModel = new OutNumberModel();
+        for (String id : ids) {
+            OrgUserFaceAuditParam param1 = new OrgUserFaceAuditParam();
+            param1.setId(id);
+            param1.setAuditRemark(auditRemark);
+            param1.setAuditState(auditState);
+            ResultContent _temp = auditFace(param1);
+            if (_temp.isSuccess()) {
+                numberModel.addSuccess(id, "成功");
+            } else {
+                numberModel.addFail(id, _temp.getMsg());
+            }
+        }
+        return ResultContent.buildSuccess(numberModel);
+    }
+
     /**
      * 审核
      *
@@ -219,10 +300,11 @@ public class OrgUserFaceService extends SuperService {
         if (orgUserFace == null) {
             return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
         }
-        if (param.getAuditState() != AuditState.WaitAudit) {
+        if (orgUserFace.getAuditState() != AuditState.WaitAudit) {
             return ResultContent.buildFail("数据已审核");
         }
         BeanUtils.copyProperties(param, orgUserFace, "id");
+
         if (orgUserFace.getAuditState() == AuditState.Audited) {
             // 通过
             ResultContent<String> content = syncFace(orgUserFace);
@@ -362,6 +444,24 @@ public class OrgUserFaceService extends SuperService {
         }
     }
 
+    /**
+     * 项目用户信息发生变化,更新人脸信息冗余的用户信息
+     *
+     * @param organizationUser
+     */
+    public void updateAllUser(OrganizationUser organizationUser) {
+        if (ObjectUtils.isNotEmpty(organizationUser)) {
+            List<OrgUserFace> list = orgUserFaceDao.findByUserIdAndProjectOidOrderByCreateTimeDesc(organizationUser.getUserId(), organizationUser.getProjectOid());
+            if (ObjectUtils.isNotEmpty(list)) {
+                for (OrgUserFace orgUserFace : list) {
+                    fillEntityUserInfo(orgUserFace, organizationUser);
+                    orgUserFaceDao.save(orgUserFace);
+                }
+            }
+        }
+    }
+
+
     /**
      * 填充用户信息
      *
@@ -397,8 +497,9 @@ public class OrgUserFaceService extends SuperService {
         if (ObjectUtils.isNotEmpty(entity)) {
             model = new OrgUserFaceModel();
             BeanUtils.copyProperties(entity, model);
-            model.setUserAccount(userAccountService.toSimpleModel(entity.getUserAccount()));
+            model.setUserAccount(userAccountService.toSimpleDesenModel(entity.getUserAccount()));
             model.setOrganizationUser(organizationUserServiceImpl.toModel(entity.getOrganizationUser()));
+            model.setAuditUserAccount(userAccountService.toSimpleModel(entity.getAuditUserId()));
         }
         return model;
     }

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

@@ -1,14 +1,15 @@
 package com.zhongshu.card.server.core.service.user;
 
-import com.zhongshu.card.client.model.org.DepartmentModel;
-import com.zhongshu.card.client.model.org.DepartmentParam;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.net.ResultMessage;
+import com.zhongshu.card.client.model.org.DepartmentModel;
+import com.zhongshu.card.client.model.org.DepartmentParam;
+import com.zhongshu.card.client.model.org.DepartmentSimpleModel;
 import com.zhongshu.card.client.model.org.OidAboutInfo;
 import com.zhongshu.card.client.service.org.DepartmentService;
+import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.client.utils.ITree;
 import com.zhongshu.card.client.utils.TreeUtil;
-import com.zhongshu.card.client.type.DataState;
 import com.zhongshu.card.server.core.dao.org.DepartmentDao;
 import com.zhongshu.card.server.core.domain.org.Department;
 import com.zhongshu.card.server.core.domain.org.Organization;
@@ -19,7 +20,6 @@ import com.zhongshu.card.server.core.util.CommonUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.kafka.common.protocol.types.Field;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -201,4 +201,14 @@ public class DepartmentServiceImpl extends SuperService implements DepartmentSer
         }
         return model;
     }
+
+    public DepartmentSimpleModel toSimpleModel(Department entity) {
+        DepartmentSimpleModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new DepartmentSimpleModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
 }

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

@@ -13,9 +13,9 @@ import com.google.common.collect.Lists;
 import com.zhongshu.card.client.model.base.AuthTypeParam;
 import com.zhongshu.card.client.model.base.UserIdModel;
 import com.zhongshu.card.client.model.org.*;
-import com.zhongshu.card.client.model.org.role.RoleSimpleModel;
 import com.zhongshu.card.client.model.org.orgUser.OrganizationUserModel;
 import com.zhongshu.card.client.model.org.orgUser.OrganizationUserSearch;
+import com.zhongshu.card.client.model.org.role.RoleSimpleModel;
 import com.zhongshu.card.client.model.orgModel.OrgBindUserAllParam;
 import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
 import com.zhongshu.card.client.service.org.UserAccountService;
@@ -680,6 +680,14 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         return model;
     }
 
+    public UserCountSimpleModel toSimpleModel(String userId) {
+        if (StringUtils.isEmpty(userId)) {
+            return null;
+        }
+        UserAccount userAccount = userCountDao.findTopByUserId(userId);
+        return toSimpleModel(userAccount);
+    }
+
     /**
      * 用户的基本信息 (简介模型)
      *
@@ -739,7 +747,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
 
             // 部门信息
             if (ObjectUtils.isNotEmpty(entity.getDepartment())) {
-                DepartmentModel departmentModel = departmentService.toModel(entity.getDepartment());
+                DepartmentSimpleModel departmentModel = departmentService.toSimpleModel(entity.getDepartment());
                 model.setDepartment(departmentModel);
                 List<DepartmentModel> departmentModels = departmentService.getParents(entity.getDepartment().getId());
                 model.setDepartments(departmentModels);
@@ -783,7 +791,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
 
             // 部门信息
             if (ObjectUtils.isNotEmpty(entity.getDepartment())) {
-                DepartmentModel departmentModel = departmentService.toModel(entity.getDepartment());
+                DepartmentSimpleModel departmentModel = departmentService.toSimpleModel(entity.getDepartment());
                 model.setDepartment(departmentModel);
                 List<DepartmentModel> departmentModels = departmentService.getParents(entity.getDepartment().getId());
                 model.setDepartments(departmentModels);