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

+ 24 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/OrganizationUserModel.java

@@ -2,6 +2,9 @@ package com.zhongshu.card.client.model.org;
 
 import com.github.microservice.auth.security.type.AuthType;
 import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
+import com.zhongshu.card.client.utils.type.CertificateType;
 import com.zhongshu.card.client.utils.type.OrganizationUserType;
 import com.zhongshu.card.client.utils.type.UserState;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -71,6 +74,27 @@ public class OrganizationUserModel extends SuperModel {
         return "";
     }
 
+    @Schema(description = "证件类型")
+    private CertificateType certificateType = CertificateType.IDCard;
+
+    private String certificateTypeStr;
+
+    public String getCertificateTypeStr() {
+        if (certificateType != null) {
+            return certificateType.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "证件号码")
+    private String cardNumber;
+
+    @Schema(description = "职位")
+    private DictInfoSimpleModel position;
+
+    @Schema(description = "人脸照片")
+    private List<String> faceImages;
+
     @Schema(description = "角色信息")
     private List<RoleModel> roles = new ArrayList<>();
 

+ 3 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/org/UserCountAddParam.java

@@ -19,6 +19,9 @@ public class UserCountAddParam extends SuperParam {
     @Schema(description = "用户手机号")
     private String phone;
 
+    @Schema(description = "编码")
+    private String code;
+
     @Schema(description = "姓名")
     private String name;
 

+ 25 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/DictInfoSimpleModel.java

@@ -0,0 +1,25 @@
+package com.zhongshu.card.client.model.school;
+
+import com.zhongshu.card.client.utils.type.DictInfoType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/6/12
+ */
+@Data
+public class DictInfoSimpleModel {
+    @Schema(description = "数据ID", example = "")
+    private String id = null;
+
+    @Schema(description = "排序")
+    private Long sort = 1l;
+
+    @Schema(description = "字典名称")
+    private String name;
+
+    @Schema(description = "字典类型")
+    DictInfoType dictInfoType;
+
+}

+ 15 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/school/FileParam.java

@@ -0,0 +1,15 @@
+package com.zhongshu.card.client.model.school;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author TRX
+ * @date 2024/6/13
+ */
+@Data
+public class FileParam {
+    @Schema(description = "文件")
+    private MultipartFile file;
+}

+ 22 - 6
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/school/SchoolUserController.java

@@ -2,9 +2,12 @@ package com.zhongshu.card.server.core.controller.school;
 
 import com.github.microservice.auth.security.annotations.ResourceAuth;
 import com.github.microservice.auth.security.type.AuthType;
+import com.zhongshu.card.client.model.org.OrganizationUserModel;
 import com.zhongshu.card.client.model.org.OrganizationUserSearch;
+import com.zhongshu.card.client.model.school.FileParam;
 import com.zhongshu.card.client.model.school.ImportUserModel;
 import com.zhongshu.card.client.ret.ResultContent;
+import com.zhongshu.card.client.service.org.UserAccountService;
 import com.zhongshu.card.client.service.school.SchoolUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
@@ -13,12 +16,13 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -35,12 +39,15 @@ public class SchoolUserController {
     @Autowired
     SchoolUserService schoolUserService;
 
+    @Autowired
+    UserAccountService userAccountService;
+
     @ResourceAuth(value = "user", type = AuthType.User)
-    @RequestMapping(value = "importSchoolUsers", method = RequestMethod.POST)
+    @RequestMapping(value = "importSchoolUsers", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = RequestMethod.POST)
     @Operation(summary = "导入校园用户", description = "导入校园用户")
     public ResultContent<ImportUserModel> importSchoolUsers(HttpServletRequest request,
             HttpServletResponse response,
-            @Parameter(name = "file") @RequestParam("file") MultipartFile file) throws IOException {
+            @RequestPart("file") MultipartFile file) throws IOException {
         if (file == null || file.isEmpty()) {
             return ResultContent.buildFail("文件不能为空");
         }
@@ -56,4 +63,13 @@ public class SchoolUserController {
         schoolUserService.exportSchoolUser(request, response, param);
     }
 
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "人员列表-分页查询", description = "人员列表-分页查询")
+    @RequestMapping(value = {"pageOrgUser"}, method = {RequestMethod.POST})
+    public ResultContent<Page<OrganizationUserModel>> page(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) OrganizationUserSearch param) {
+        return userAccountService.pageOrgUser(param, pageable);
+    }
+
 }

+ 34 - 17
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/org/UserAccountServiceImpl.java

@@ -2,6 +2,7 @@ package com.zhongshu.card.server.core.service.org;
 
 import com.github.microservice.auth.client.content.ResultState;
 import com.github.microservice.auth.client.model.UserAuthModel;
+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.client.type.LoginType;
@@ -9,11 +10,14 @@ import com.github.microservice.components.data.base.util.PageEntityUtil;
 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.school.DictInfoParam;
+import com.zhongshu.card.client.model.school.DictInfoSimpleModel;
 import com.zhongshu.card.client.ret.ResultContent;
 import com.zhongshu.card.client.ret.ResultMessage;
 import com.zhongshu.card.client.service.org.DepartmentService;
 import com.zhongshu.card.client.service.org.OrganizationService;
 import com.zhongshu.card.client.service.org.UserAccountService;
+import com.zhongshu.card.client.service.school.DictInfoService;
 import com.zhongshu.card.client.utils.type.*;
 import com.zhongshu.card.server.core.dao.org.*;
 import com.zhongshu.card.server.core.dao.school.DictInfoDao;
@@ -21,6 +25,7 @@ import com.zhongshu.card.server.core.dataConfig.CardDefault;
 import com.zhongshu.card.server.core.domain.org.*;
 import com.zhongshu.card.server.core.domain.school.DictInfo;
 import com.zhongshu.card.server.core.service.base.SuperService;
+import com.zhongshu.card.server.core.service.school.DictInfoServiceImpl;
 import com.zhongshu.card.server.core.util.BeanUtils;
 import com.zhongshu.card.server.core.util.CommonUtil;
 import com.zhongshu.card.server.core.util.DateUtils;
@@ -81,6 +86,12 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
     @Autowired
     DictInfoDao dictInfoDao;
 
+    @Autowired
+    OrganizationUserService organizationUserService;
+
+    @Autowired
+    DictInfoServiceImpl dictInfoService;
+
     /**
      * 添加编辑用户 添加机构用户
      *
@@ -144,7 +155,10 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
                 temp.setLoginName(loginName);
                 temp.setIsLogined(Boolean.FALSE);
                 temp.setSpellCode(CommonUtil.getPinyin(param.getName()));
+                temp.setIsUpdatedPsw(Boolean.FALSE);
                 userCountDao.save(temp);
+            } else {
+
             }
         } else {
             OrganizationUser organizationUser = organizationUserDao.findTopById(param.getId());
@@ -158,6 +172,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
             userCountDao.save(temp);
         }
 
+        userId = temp.getUserId();
         //权限中心: 在角色组添加用户
         String[] roleGroupIds = roles.stream().map(it -> it.getRoleGroupId()).collect(Collectors.toList()).toArray(String[]::new);
         roleService.addUsersToRoleGroup(userId, roleGroupIds);
@@ -166,12 +181,13 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
         if (ObjectUtils.isEmpty(organizationUser)) {
             // 不在机构中
             organizationUser = new OrganizationUser();
+            initEntity(organizationUser);
             organizationUser.setOid(organization.getOid());
             organizationUser.setOrganization(organization);
             organizationUser.setUser(temp);
             organizationUser.setUserId(temp.getUserId());
             organizationUser.setIsAdmin(Boolean.FALSE);
-            organizationUser.setAuthType(organizationUser.getAuthType());
+            organizationUser.setAuthType(organization.getAuthType());
             organizationUser.setCreateUserId(getCurrentUserId());
             organizationUser.setUserType(OrganizationUserType.Common);
         } else {
@@ -188,15 +204,26 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
             }
         }
 
-        BeanUtils.copyProperties(param, temp, "id", "oid");
+        BeanUtils.copyProperties(param, organizationUser, "id", "oid");
         // 职位信息
         if (StringUtils.isNotEmpty(param.getPositionId())) {
             organizationUser.setPosition(dictInfoDao.findTopById(param.getPositionId()));
         }
+        organizationUser.setAuthType(organization.getAuthType());
+        // 设置角色
         organizationUser.setRoles(roles);
+        // 设置部门
         organizationUser.setDepartments(departments);
         organizationUserDao.save(organizationUser);
 
+        // 权限中心
+        com.github.microservice.auth.client.content.ResultContent<Void> resultContent = organizationUserService.update(organization.getOid(), new String[]{userId});
+        if (resultContent.getState() == ResultState.Success) {
+            log.info("权限中心:绑定机构和用户关系成功");
+        } else {
+            log.error("权限中心:绑定机构和用户关系出错:{}", resultContent.getMsg());
+        }
+
         return ResultContent.buildSuccess();
     }
 
@@ -343,21 +370,7 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
      */
     @Override
     public ResultContent<Page<OrganizationUserModel>> pageOrgUser(OrganizationUserSearch param, Pageable pageable) {
-        String oid = param.getOid();
-        if (StringUtils.isEmpty(oid)) {
-            oid = getCurrentOid();
-        }
-        param.setOid(oid);
-        Assert.hasText(oid, "oid不能为空");
-        List<Long> times = param.getTimes();
-        if (ObjectUtils.isNotEmpty(times) && times.size() == 2) {
-            Long startTime = times.get(0);
-            startTime = DateUtils.getDayStartTime(startTime);
-            Long endTime = times.get(1);
-            endTime = DateUtils.getDayEndTime(endTime);
-            param.setStartTime(startTime);
-            param.setEndTime(endTime);
-        }
+        initOidSearchParam(param);
         Page<OrganizationUser> page = organizationUserDao.page(pageable, param);
         return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toOrgUserModel));
     }
@@ -474,6 +487,10 @@ public class UserAccountServiceImpl extends SuperService implements UserAccountS
             UserCountModel userCountModel = toModel(entity.getUser());
             model.setUser(userCountModel);
 
+            // 职务
+            DictInfoSimpleModel position = dictInfoService.toSimpleModel(entity.getPosition());
+            model.setPosition(position);
+
             // 角色信息
             if (ObjectUtils.isNotEmpty(entity.getRoles())) {
                 List<RoleModel> roleModels = entity.getRoles().stream().map(roleServiceImpl::toModel)

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

@@ -1,10 +1,7 @@
 package com.zhongshu.card.server.core.service.school;
 
 import com.github.microservice.components.data.base.util.PageEntityUtil;
-import com.zhongshu.card.client.model.school.BookInfoModel;
-import com.zhongshu.card.client.model.school.BookInfoSearch;
-import com.zhongshu.card.client.model.school.DictInfoParam;
-import com.zhongshu.card.client.model.school.DictInfoSearch;
+import com.zhongshu.card.client.model.school.*;
 import com.zhongshu.card.client.ret.ResultContent;
 import com.zhongshu.card.client.ret.ResultMessage;
 import com.zhongshu.card.client.service.school.DictInfoService;
@@ -136,8 +133,18 @@ public class DictInfoServiceImpl extends SuperService implements DictInfoService
     }
 
     public DictInfoParam toModel(DictInfo dictInfo) {
-        DictInfoParam model = new DictInfoParam();
+        DictInfoParam model = null;
         if (ObjectUtils.isNotEmpty(dictInfo)) {
+            model = new DictInfoParam();
+            BeanUtils.copyProperties(dictInfo, model);
+        }
+        return model;
+    }
+
+    public DictInfoSimpleModel toSimpleModel(DictInfo dictInfo) {
+        DictInfoSimpleModel model = null;
+        if (ObjectUtils.isNotEmpty(dictInfo)) {
+            model = new DictInfoSimpleModel();
             BeanUtils.copyProperties(dictInfo, model);
         }
         return model;

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

@@ -73,7 +73,7 @@ public class SchoolUserServiceImpl extends SuperService implements SchoolUserSer
 
         ImportUserModel model = new ImportUserModel();
         try {
-            int startRow = 1;
+            int startRow = 2;
             ImportParams params = new ImportParams();
             List<ExcelUserParam> list = ExcelImportUtil.importExcel(file.getInputStream(),
                     ExcelUserParam.class, params);
@@ -114,11 +114,19 @@ public class SchoolUserServiceImpl extends SuperService implements SchoolUserSer
                         if (StringUtils.isNotBlank(param1.getSexStr())) {
                             addParam.setSex(CommonUtil.getSexByStr(param1.getSexStr()));
                         }
+                        String passWord = param1.getCardNumber().substring(12, 18);
+                        passWord = passWord.toLowerCase().replace("x", "0");
+                        addParam.setPassWord(passWord);
                         userList.add(addParam);
                     }
                     startRow++;
                 }
 
+                // 添加到
+                for (UserCountAddParam param : userList) {
+                    ResultContent resultContent = userAccountService.update(param);
+                    log.info("添加日志: {}", resultContent.getMsg());
+                }
                 model.setSuccess(userList.size());
                 model.setFailDetails(failDetails);
             }