TRX 1 год назад
Родитель
Сommit
5dda25efac
13 измененных файлов с 126 добавлено и 19 удалено
  1. 3 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/base/OidParam.java
  2. 8 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationUserSearch.java
  3. 5 1
      FullCardClient/src/main/java/com/zhongshu/card/client/model/org/register/UserCountRegisterParam.java
  4. 16 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/orgModel/OrgBindUserAllParam.java
  5. 14 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationUserController.java
  6. 1 9
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/upLoadFile/OssController.java
  7. 2 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/OrganizationUserDao.java
  8. 6 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/OrganizationUserDaoImpl.java
  9. 9 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/OrganizationUser.java
  10. 4 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java
  11. 44 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/OrganizationUserServiceImpl.java
  12. 1 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/user/UserAccountServiceImpl.java
  13. 13 2
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

+ 3 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/base/OidParam.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.client.model.base;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -15,4 +16,6 @@ public class OidParam {
 
     private String oid;
 
+    @Schema(description = "微信的openid")
+    private String openid;
 }

+ 8 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationUserSearch.java

@@ -5,6 +5,7 @@ import com.zhongshu.card.client.model.base.SuperSearch;
 import com.zhongshu.card.client.type.OrganizationUserType;
 import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.UserState;
+import com.zhongshu.card.client.type.user.OrgAddType;
 import com.zhongshu.card.client.type.user.OrgUserState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -18,7 +19,10 @@ import java.util.List;
 @Data
 public class OrganizationUserSearch extends SuperSearch {
 
-    @Schema(description = "用户状态")
+    @Schema(description = "用户添加方式:管理员后台添加、注册")
+    private OrgAddType addType = OrgAddType.Manager;
+
+    @Schema(description = "用户审核状态")
     private OrgUserState orgUserState;
 
     @Schema(description = "关键字")
@@ -71,4 +75,7 @@ public class OrganizationUserSearch extends SuperSearch {
 
     @Schema(description = "是否是机构类型")
     private Boolean isOrg;
+
+    @Schema(description = "")
+    private String openid;
 }

+ 5 - 1
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/register/UserCountRegisterParam.java

@@ -2,7 +2,6 @@ package com.zhongshu.card.client.model.org.register;
 
 import com.zhongshu.card.client.model.base.ProjectOidParam;
 import com.zhongshu.card.client.type.CertificateType;
-import com.zhongshu.card.client.type.OrganizationUserType;
 import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.UserState;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -47,6 +46,9 @@ public class UserCountRegisterParam extends ProjectOidParam {
     @Schema(description = "地址")
     private String address;
 
+    @Schema(description = "地址")
+    private String remark;
+
     @Schema(description = "证件类型")
     private CertificateType certificateType = CertificateType.IDCard;
 
@@ -65,4 +67,6 @@ public class UserCountRegisterParam extends ProjectOidParam {
     @Schema(description = "是否是管理员")
     private Boolean isAdmin = Boolean.FALSE;
 
+    @Schema(description = "openid")
+    private String openid;
 }

+ 16 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/orgModel/OrgBindUserAllParam.java

@@ -2,6 +2,8 @@ package com.zhongshu.card.client.model.orgModel;
 
 import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.type.UserState;
+import com.zhongshu.card.client.type.user.OrgAddType;
+import com.zhongshu.card.client.type.user.OrgUserState;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -20,6 +22,12 @@ import java.util.List;
 @NoArgsConstructor
 public class OrgBindUserAllParam {
 
+    @Schema(description = "添加方式,管理员后台添加、注册")
+    private OrgAddType addType = OrgAddType.Manager;
+
+    @Schema(description = "申请审核状态:正式、审核中、已拒绝")
+    private OrgUserState orgUserState = OrgUserState.Formal;
+
     @Schema(description = "数据ID")
     private String id;
 
@@ -56,4 +64,12 @@ public class OrgBindUserAllParam {
     @Schema(description = "备注")
     private String remark;
 
+    @Schema(description = "openid")
+    private String openid;
+
+    @Schema(description = "审核时间")
+    private Long reViewTime;
+
+    @Schema(description = "审核备注")
+    private String reViewReMark;
 }

+ 14 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/org/OrganizationUserController.java

@@ -14,6 +14,7 @@ import com.zhongshu.card.client.model.org.register.UserCountRegisterParam;
 import com.zhongshu.card.client.model.orgModel.OrgBindUserAllParam;
 import com.zhongshu.card.client.model.school.ImportResultModel;
 import com.zhongshu.card.client.service.org.UserAccountService;
+import com.zhongshu.card.client.type.user.OrgAddType;
 import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -112,6 +113,19 @@ public class OrganizationUserController {
         return userAccountService.pageOrgUser(param, pageable);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "项目注册用户列表-分页查询", description = "项目注册用户列表-分页查询")
+    @RequestMapping(value = {"projectRegisterUsersPages"}, method = {RequestMethod.POST})
+    public ResultContent<Page<OrganizationUserModel>> projectRegisterUsersPages(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) OrganizationUserSearch param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        // 项目用户 包括项目下所有的机构的用户
+        param.setIsSearchProject(Boolean.TRUE);
+        param.setAddType(OrgAddType.Register);
+        return userAccountService.projectUserPage(param, pageable);
+    }
+
     @ResourceAuth(value = "user", type = AuthType.User)
     @Operation(summary = "项目机构用户列表-分页查询", description = "项目机构用户列表-分页查询")
     @RequestMapping(value = {"projectOrgUserPage"}, method = {RequestMethod.POST})

+ 1 - 9
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/upLoadFile/OssController.java

@@ -5,7 +5,6 @@ import com.github.microservice.auth.security.type.AuthType;
 import com.github.microservice.net.ResultContent;
 import com.github.microservice.netdisk.client.model.file.FileItemModel;
 import com.github.microservice.netdisk.client.model.file.FileStoreModel;
-import com.mongodb.client.gridfs.model.GridFSFile;
 import com.zhongshu.card.client.model.base.OidParam;
 import com.zhongshu.card.server.core.model.oss.FileUploadFinishParam;
 import com.zhongshu.card.server.core.model.upLoadFile.RemoteBusFile;
@@ -16,22 +15,16 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
-import lombok.Cleanup;
 import lombok.SneakyThrows;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.mongodb.gridfs.GridFsResource;
-import org.springframework.data.mongodb.gridfs.GridFsTemplate;
 import org.springframework.http.MediaType;
-import org.springframework.util.StreamUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.List;
 
 /**
@@ -47,9 +40,8 @@ public class OssController {
     @Autowired
     NetDiskOssBusService netDiskOssService;
 
-    @ResourceAuth(value = "user", type = AuthType.User)
     @RequestMapping(value = "uploadFile", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
-    @Operation(summary = "网盘直接上传文件", description = "网盘直接上传文件")
+    @Operation(summary = "网盘直接上传文件(专为小程序使用)", description = "网盘直接上传文件")
     public ResultContent<String> uploadFile(HttpServletRequest request, HttpServletResponse response, @RequestPart("file") MultipartFile file, OidParam param) throws IOException {
         if (file == null || file.isEmpty()) {
             return ResultContent.buildFail("文件不能为空");

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

@@ -29,6 +29,8 @@ public interface OrganizationUserDao extends MongoDao<OrganizationUser>, Organiz
 
     OrganizationUser findTopByUserAndProjectOidAndIsOrg(UserAccount user, String projectOid, Boolean isOrg);
 
+    OrganizationUser findTopByUserAndProjectOid(UserAccount user, String projectOid);
+
     OrganizationUser findTopByOrganizationAndUserAndProjectOid(
             Organization organization, UserAccount user, String projectOid);
 

+ 6 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/org/impl/OrganizationUserDaoImpl.java

@@ -83,11 +83,16 @@ public class OrganizationUserDaoImpl extends BaseImpl implements OrganizationUse
             criteria.and("orgUserState").is(param.getOrgUserState());
         }
 
-        // 用户在机构的类型
+        // 用户在机构的添加方式
         if (param.getUserType() != null) {
             criteria.and("userType").is(param.getUserType());
         }
 
+        // 用户审核状态
+        if (param.getOrgUserState() != null) {
+            criteria.and("orgUserState").is(param.getOrgUserState());
+        }
+
         // 机构类型
         if (param.getAuthType() != null) {
             criteria.and("authType").is(param.getAuthType());

+ 9 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/org/OrganizationUser.java

@@ -49,15 +49,21 @@ public class OrganizationUser extends SuperMain {
     @Schema(description = "用户添加方式:管理员后台添加、注册")
     private OrgAddType addType = OrgAddType.Manager;
 
-    @Schema(description = "用户状态")
+    @Schema(description = "申审核用户状态")
     private OrgUserState orgUserState = OrgUserState.Formal;
 
+    @Schema(description = "用户可用状态")
+    private UserState state = UserState.Normal;
+
     @Schema(description = "审核用户")
     private String reViewUserId;
 
     @Schema(description = "审核时间")
     private Long reViewTime;
 
+    @Schema(description = "审核备注")
+    private String reViewReMark;
+
     //---------------------------用户基础信息 start ----------------------
     @Schema(description = "用户ID")
     private String userId;
@@ -94,9 +100,6 @@ public class OrganizationUser extends SuperMain {
 
     //---------------------------用户基础信息 end ------------------------
 
-    @Schema(description = "用户状态")
-    private UserState state = UserState.Normal;
-
     @Schema(description = "是否是企业管理员")
     private Boolean isAdmin = Boolean.FALSE;
 
@@ -120,4 +123,6 @@ public class OrganizationUser extends SuperMain {
     @Schema(description = "扩展字段,动态字段, {'key': 'code','value: '李四', 'filedName': '学号'}")
     private JSONObject extendData = new JSONObject();
 
+    @Schema(description = "openid")
+    private String openid;
 }

+ 4 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/payment/ExpenseFlow.java

@@ -59,9 +59,12 @@ public class ExpenseFlow extends SuperMain {
     @Schema(description = "订单创建类型, 是消费还是查询余额")
     private OrderModeType orderModeType;
 
-    @Schema(description = "消费类型,如:餐饮消费、水费、电费 等等")
+    @Schema(description = "消费类型,如:餐饮消费、水费、电费、学费 等等")
     private String payType;
 
+    @Schema(description = "消费类型 编码")
+    private String payTypeCode;
+
     @Schema(description = "订单计费方式")
     private ChargeableType chargeableType = ChargeableType.Specified;
 

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

@@ -19,6 +19,8 @@ import com.zhongshu.card.client.model.school.ExcelUserParam;
 import com.zhongshu.card.client.model.school.ImportResultModel;
 import com.zhongshu.card.client.model.school.RegisterBindSchoolParam;
 import com.zhongshu.card.client.type.*;
+import com.zhongshu.card.client.type.user.OrgAddType;
+import com.zhongshu.card.client.type.user.OrgUserState;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.server.core.dao.org.*;
 import com.zhongshu.card.server.core.dao.school.DictInfoDao;
@@ -300,7 +302,49 @@ public class OrganizationUserServiceImpl extends SuperService {
         if (ObjectUtils.isEmpty(userAccount)) {
             return ResultContent.buildFail("用户不存在");
         }
+        OrganizationUser orgUser = organizationUserDao.findTopByUserAndProjectOid(userAccount, projectOid);
+        if (ObjectUtils.isNotEmpty(orgUser) && orgUser.getOrgUserState() != OrgUserState.Refusal) {
+            return ResultContent.buildFail("用户已存在");
+        }
 
+        OrgBindUserAllParam orgBindUserAllParam = new OrgBindUserAllParam();
+        BeanUtils.copyProperties(param, orgBindUserAllParam);
+        if (ObjectUtils.isNotEmpty(orgUser)) {
+            orgBindUserAllParam.setId(orgUser.getId());
+        }
+        orgBindUserAllParam.setUserId(userAccount.getUserId());
+        // 要绑定的机构
+        orgBindUserAllParam.setOrgOid(param.getOid());
+        orgBindUserAllParam.setCode(param.getCode());
+        orgBindUserAllParam.setPositionId(param.getPositionId());
+        orgBindUserAllParam.setDepartmentId(param.getDepartmentId());
+        orgBindUserAllParam.setRoleIds(param.getRoleIds());
+        orgBindUserAllParam.setState(UserState.Normal);
+        orgBindUserAllParam.setIsAdmin(param.getIsAdmin());
+        orgBindUserAllParam.setRemark(param.getRemark());
+        orgBindUserAllParam.setProjectOid(param.getProjectOid());
+
+        // 注册方式
+        orgBindUserAllParam.setAddType(OrgAddType.Register);
+        OrgUserState orgUserState = null;
+        if (projectCommonConfig.getIsExamineRegister() != null && projectCommonConfig.getIsExamineRegister()) {
+            // 如果需要审核
+            orgUserState = OrgUserState.Unaudited;
+            orgBindUserAllParam.setReViewTime(null);
+            orgBindUserAllParam.setReViewReMark("");
+        } else {
+            orgUserState = OrgUserState.Formal;
+            orgBindUserAllParam.setReViewTime(System.currentTimeMillis());
+            orgBindUserAllParam.setReViewReMark("不需要审核");
+        }
+        orgBindUserAllParam.setOrgUserState(orgUserState);
+
+        // 绑定用户到机构
+        ResultContent<OrganizationUser> bindUserContent = orgBindUser(orgBindUserAllParam);
+        if (bindUserContent.isFailed()) {
+            return ResultContent.buildFail(bindUserContent.getMsg());
+        }
+        OrganizationUser organizationUser = bindUserContent.getContent();
 
         return ResultContent.buildSuccess();
     }

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

@@ -761,6 +761,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
             model.setCardNumber(DesenUtil.turnIDCardDesen(model.getCardNumber()));
             model.setName(DesenUtil.turnNameDesen(model.getName()));
             model.setRealName(DesenUtil.turnNameDesen(model.getRealName()));
+
             // 机构信息
             OrganizationMiniModel miniModel = organizationManagerService.toMiniModel(entity.getOrganization());
             model.setOrganization(miniModel);

+ 13 - 2
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/visitor/VisitorMainService.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.service.visitor;
 
+import com.github.microservice.auth.client.model.UserFaceConfidenceModel;
 import com.github.microservice.auth.client.model.UserFaceUploadModel;
 import com.github.microservice.auth.client.service.UserFaceService;
 import com.github.microservice.components.data.base.util.PageEntityUtil;
@@ -128,6 +129,17 @@ public class VisitorMainService extends SuperPermissService {
             return ResultContent.buildFail("访客组件参数未配置");
         }
 
+        // 人脸验证
+        UserFaceConfidenceModel faceConfidenceModel = new UserFaceConfidenceModel();
+        faceConfidenceModel.setFile(commonService.getUrlFileBase64(param.getFaceUrl()));
+        // 验证人脸
+        com.github.microservice.auth.client.content.ResultContent<Double> confidence = userFaceService.confidence(faceConfidenceModel);
+        if (confidence.isFailed()) {
+            return ResultContent.buildFail(String.format("人脸识别错误"));
+        }
+        double d = confidence.getContent();
+
+
         UserAccount visitorUserAccount = userCountDao.findTopByUserId(param.getVisitorUserId());
         if (ObjectUtils.isEmpty(visitorUserAccount)) {
             return ResultContent.buildFail("被访人不存在");
@@ -456,8 +468,7 @@ public class VisitorMainService extends SuperPermissService {
     public ResultContent checkExpireInfo(VisitorMain visitorMain) {
         if (ObjectUtils.isNotEmpty(visitorMain)) {
             // 已审核  已过期
-            if (visitorMain.getReViewSuccess() != null && visitorMain.getReViewSuccess()
-                    && visitorMain.getPerEndTime() < System.currentTimeMillis()) {
+            if (visitorMain.getReViewSuccess() != null && visitorMain.getReViewSuccess() && visitorMain.getPerEndTime() < System.currentTimeMillis()) {
                 // 取消人脸
                 com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(visitorMain.getTempUserId(), visitorMain.getFaceFileId());
                 if (resultContent.isSuccess()) {