licailing 5 лет назад
Родитель
Сommit
f9c06d9038

+ 4 - 0
src/main/java/com/izouma/wenlvju/dto/ExpertDTO.java

@@ -2,6 +2,7 @@ package com.izouma.wenlvju.dto;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.izouma.wenlvju.domain.User;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
@@ -44,5 +45,8 @@ public class ExpertDTO {
 //            this.position = expert.getPosition();
 //        }
         this.artType = artType;
+        if (StrUtil.isBlank(artType) && StrUtil.isNotBlank(user.getDistrict())) {
+            this.artType = user.getDistrict();
+        }
     }
 }

+ 1 - 0
src/main/java/com/izouma/wenlvju/repo/UserRepo.java

@@ -9,6 +9,7 @@ import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
 import java.util.List;
+import java.util.Set;
 
 public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
     @Transactional

+ 47 - 28
src/main/java/com/izouma/wenlvju/service/UserService.java

@@ -4,24 +4,20 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.wenlvju.config.Constants;
-import com.izouma.wenlvju.domain.ArtType;
-import com.izouma.wenlvju.domain.Organization;
-import com.izouma.wenlvju.domain.User;
+import com.izouma.wenlvju.domain.*;
 import com.izouma.wenlvju.dto.ExpertDTO;
 import com.izouma.wenlvju.dto.OrganizationRegDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.UserRegister;
 import com.izouma.wenlvju.enums.AuthorityName;
 import com.izouma.wenlvju.exception.BusinessException;
-import com.izouma.wenlvju.repo.ArtTypeRepo;
-import com.izouma.wenlvju.repo.OrganizationRepo;
-import com.izouma.wenlvju.repo.UserRepo;
+import com.izouma.wenlvju.repo.*;
 import com.izouma.wenlvju.security.Authority;
 import com.izouma.wenlvju.security.JwtTokenUtil;
 import com.izouma.wenlvju.security.JwtUserFactory;
-import com.izouma.wenlvju.service.sms.SmsService;
 import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.JpaUtils;
 import lombok.AllArgsConstructor;
@@ -48,15 +44,17 @@ import java.util.stream.Collectors;
 @Slf4j
 @AllArgsConstructor
 public class UserService {
-    private final UserRepo         userRepo;
-    private final WxMaService      wxMaService;
-    private final WxMpService      wxMpService;
-    private final SmsService       smsService;
-    private final StorageService   storageService;
-    private final JwtTokenUtil     jwtTokenUtil;
-    private final CaptchaService   captchaService;
-    private final ArtTypeRepo      artTypeRepo;
-    private final OrganizationRepo organizationRepo;
+    private final UserRepo                userRepo;
+    private final WxMaService             wxMaService;
+    private final WxMpService             wxMpService;
+    //    private final SmsService       smsService;
+    private final StorageService          storageService;
+    private final JwtTokenUtil            jwtTokenUtil;
+    private final CaptchaService          captchaService;
+    private final ArtTypeRepo             artTypeRepo;
+    private final OrganizationRepo        organizationRepo;
+    private final CollaborateRepo         collaborateRepo;
+    private final GradingOrganizationRepo gradingOrganizationRepo;
 
     public Page<User> all(PageQuery pageQuery) {
         return userRepo.findAll(JpaUtils.toSpecification(pageQuery, User.class), JpaUtils.toPageRequest(pageQuery));
@@ -197,34 +195,55 @@ public class UserService {
         return setPassword(userId, password);
     }
 
-    public Page<ExpertDTO> all1(PageQuery pageQuery) {
+    public Page<ExpertDTO> all1(PageQuery pageQuery, List<Authority> authorities) {
+        Map<Long, String> artMap = artTypeRepo.findAll()
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
+        return this.all2(pageQuery, authorities).map(user -> new ExpertDTO(user, artMap.get(user.getArtTypeId())));
+    }
+
+    public Page<ExpertDTO> all3(Long rateId) {
+        PageQuery pageQuery = new PageQuery();
+        pageQuery.setSize(1000);
+        pageQuery.getQuery().put("del", false);
         pageQuery.setSort("createdAt,desc");
+
         Map<Long, String> artMap = artTypeRepo.findAll()
                 .stream()
                 .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
+
+        Set<Long> goId = collaborateRepo.findAllByRateId(rateId)
+                .stream()
+                .map(Collaborate::getGradingOrganizationId)
+                .collect(Collectors.toSet());
+        List<String> names = gradingOrganizationRepo.findAllById(goId)
+                .stream()
+                .map(GradingOrganization::getName)
+                .collect(Collectors.toList());
+
         return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
-            // 只有专家权限
+            // 特定权限
             SetJoin<User, Authority> join = root.join(root.getModel()
                     .getSet("authorities", Authority.class), JoinType.LEFT);
-            and.add(join.in(Authority.get(AuthorityName.ROLE_EXPERT)));
+            and.add(join.in(Authority.get(AuthorityName.ROLE_EXPERT), Authority.get(AuthorityName.ROLE_DISTRICT_STAFF)));
+            criteriaQuery.distinct(true);
+            names.forEach(name -> and.add(criteriaBuilder.notLike(root.get("work"), "%" + name + "%")));
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
         }), JpaUtils.toPageRequest(pageQuery)).map(user -> new ExpertDTO(user, artMap.get(user.getArtTypeId())));
+//        return this.all2(pageQuery, authorities).map(user -> new ExpertDTO(user, artMap.get(user.getArtTypeId())));
     }
 
-    public Page<User> all2(PageQuery pageQuery) {
+
+    public Page<User> all2(PageQuery pageQuery, List<Authority> authorities) {
+        pageQuery.getQuery().put("del", false);
+        pageQuery.setSort("createdAt,desc");
         return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
-            // 只有专家权限
+            // 特定权限
             SetJoin<User, Authority> join = root.join(root.getModel()
                     .getSet("authorities", Authority.class), JoinType.LEFT);
-            and.add(join.in(
-                    Authority.get(AuthorityName.ROLE_DISTRICT),
-                    Authority.get(AuthorityName.ROLE_ORGANIZER),
-                    Authority.get(AuthorityName.ROLE_ADMIN),
-                    Authority.get(AuthorityName.ROLE_DEV),
-                    Authority.get(AuthorityName.ROLE_SUPERVISOR),
-                    Authority.get(AuthorityName.ROLE_USER)));
+            and.add(join.in(authorities));
             criteriaQuery.distinct(true);
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
         }), JpaUtils.toPageRequest(pageQuery));

+ 24 - 9
src/main/java/com/izouma/wenlvju/web/UserController.java

@@ -1,7 +1,5 @@
 package com.izouma.wenlvju.web;
 
-import cn.hutool.core.bean.BeanUtil;
-import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.User;
 import com.izouma.wenlvju.dto.ExpertDTO;
 import com.izouma.wenlvju.dto.OrganizationRegDTO;
@@ -9,6 +7,7 @@ import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.UserRegister;
 import com.izouma.wenlvju.enums.AuthorityName;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.security.Authority;
 import com.izouma.wenlvju.security.JwtTokenUtil;
@@ -19,7 +18,6 @@ import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -27,6 +25,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -34,9 +33,10 @@ import java.util.List;
 @RestController
 @RequestMapping("/user")
 public class UserController extends BaseController {
-    private UserRepo     userRepo;
-    private UserService  userService;
-    private JwtTokenUtil jwtTokenUtil;
+    private final UserRepo     userRepo;
+    private final UserService  userService;
+    private final JwtTokenUtil jwtTokenUtil;
+    private final ArtTypeRepo  artTypeRepo;
 
     @PostMapping("/register")
     public User register(@RequestParam String username,
@@ -93,12 +93,25 @@ public class UserController extends BaseController {
 
     @PostMapping("/all2")
     public Page<User> all2(@RequestBody PageQuery pageQuery) {
-        return userService.all2(pageQuery);
+        List<Authority> authorities = new ArrayList<>();
+        authorities.add(Authority.get(AuthorityName.ROLE_DISTRICT));
+        authorities.add(Authority.get(AuthorityName.ROLE_ORGANIZER));
+        authorities.add(Authority.get(AuthorityName.ROLE_ADMIN));
+        authorities.add(Authority.get(AuthorityName.ROLE_DEV));
+        authorities.add(Authority.get(AuthorityName.ROLE_SUPERVISOR));
+        authorities.add(Authority.get(AuthorityName.ROLE_USER));
+        authorities.add(Authority.get(AuthorityName.ROLE_DISTRICT_STAFF));
+        return userService.all2(pageQuery, authorities);
     }
 
     @PostMapping("/all1")
     public Page<ExpertDTO> all1(@RequestBody PageQuery pageQuery) {
-        return userService.all1(pageQuery);
+        return userService.all1(pageQuery, Collections.singletonList(Authority.get(AuthorityName.ROLE_EXPERT)));
+    }
+
+    @PostMapping("/expert")
+    public Page<ExpertDTO> expert(@RequestParam Long rateId) {
+        return userService.all3(rateId);
     }
 
     @PreAuthorize("hasRole('ADMIN')")
@@ -155,12 +168,14 @@ public class UserController extends BaseController {
 
     /**
      * 判断密码
+     *
      * @return true 密码为123456需要改密码
      */
     @ApiOperation("判断密码")
     @PostMapping("/isEditPw")
     public boolean isEditPw() {
-            User user = userRepo.findById(SecurityUtils.getAuthenticatedUser().getId()).orElseThrow(new BusinessException("无用户"));
+        User user = userRepo.findById(SecurityUtils.getAuthenticatedUser().getId())
+                .orElseThrow(new BusinessException("无用户"));
         return new BCryptPasswordEncoder().matches("123456", user.getPassword());
     }
 

+ 2 - 2
src/main/resources/application.yaml

@@ -78,8 +78,8 @@ aliyun:
     access-key-id: PXzJyah5rZfWHIIH
     access-key-secret: e1MS6j0wypXJrw8CM0hObZu8qKbfah
     oss-end-point: oss-cn-hangzhou.aliyuncs.com
-    oss-bucket-name: ticket-exchange
-    oss-domain: https://ticket-exchange.oss-cn-hangzhou.aliyuncs.com
+    oss-bucket-name: exam
+    oss-domain: https://exam.oss-cn-hangzhou.aliyuncs.com
 njwl:
     app_id: 189610
     app_key: 3e8d47d8-e6de-4b75-aa07-02b0d6c83678

+ 12 - 10
src/main/vue/src/views/rate/AssignExpert.vue

@@ -140,18 +140,20 @@ export default {
                         this.dateRange.push(res.reviewStartTime);
                         this.dateRange.push(res.reviewEndTime);
                     }
-                    this.$http
-                        .post('/user/all1', { size: 1000, query: { del: false } }, { body: 'json' })
-                        .then(data => {
-                            this.users = data.content;
-                            data.content.forEach(item => {
-                                this.expert.push({
-                                    label: item.nickname + '-' + item.artType + '-' + item.phone,
-                                    value: item.id
-                                });
+                    this.$http.post('/user/expert', { rateId: this.$route.query.id }).then(data => {
+                        this.users = data.content;
+                        data.content.forEach(item => {
+                            let nickname = item.nickname;
+                            if (nickname.length < 3) {
+                                nickname = nickname.slice(0, 1) + ' ' + nickname.slice(1);
+                            }
+                            this.expert.push({
+                                label: nickname + '--' + item.phone + '--' + item.artType,
+                                value: item.id
                             });
-                            this.getEmp(res);
                         });
+                        this.getEmp(res);
+                    });
                     this.$http
                         .post(
                             '/rateExpertAudit/all',