From 77eaae1a96b2c6a0a23bafbacf39806acd1980b6 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 29 一月 2026 09:29:06 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 /dev/null                                                                             |   12 -
 server/web/src/main/java/com/doumee/api/web/LoginController.java                      |   70 ++++++++
 server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java                 |   24 --
 server/web/src/main/java/com/doumee/api/web/ApiController.java                        |    5 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                |    4 
 server/services/src/main/java/com/doumee/dao/vo/WebLoginUserVO.java                   |   28 +++
 server/services/src/main/java/com/doumee/service/business/MemberService.java          |    2 
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java |  200 +++++++++++++++++++-----
 server/services/src/main/java/com/doumee/dao/business/model/Category.java             |    4 
 server/services/src/main/java/com/doumee/dao/business/model/Member.java               |   48 ++++++
 server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                 |   29 +-
 11 files changed, 330 insertions(+), 96 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index f0fca7a..9c0b262 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.core.constants.Constants;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.vo.WebLoginUserVO;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.extern.slf4j.Slf4j;
@@ -34,23 +35,21 @@
     /**
      * 鐢熸垚token浠ょ墝
      *
-     * @param member 浠ょ墝涓惡甯︾殑闄勫姞淇℃伅
+     * @param webLoginUser 浠ょ墝涓惡甯︾殑闄勫姞淇℃伅
      * @return 浠oken鐗�
      */
-    public String generateToken(Member member) {
-        if(member == null){
+    public String generateToken(WebLoginUserVO webLoginUser) {
+        if(webLoginUser == null){
             return  null;
         }
-        Map<String,Object> map = new HashMap<>();
-        map.put("id",member.getId());
-        return generateTokenDo(member);
+        return generateTokenDo(webLoginUser);
     }
 
 
-    public Member getUserInfoByToken(String token) {
+    public WebLoginUserVO getUserInfoByToken(String token) {
         try {
-            Member member = getClaimsFromToken(token);
-            return member;
+            WebLoginUserVO userVO = getClaimsFromToken(token);
+            return userVO;
         } catch (Exception e) {
            e.printStackTrace();
         }
@@ -97,15 +96,15 @@
      *
      * @return 浠ょ墝
      */
-    private String generateTokenDo(Member member) {
+    private String generateTokenDo(WebLoginUserVO webLoginUser) {
         Map<String, Object> claims = new HashMap<>();
-        claims.put("id",member.getId());
+        claims.put("id",webLoginUser.getId());
         Date expirationDate = new Date(System.currentTimeMillis() + jwtProperties.getExpiration());
         String token = Jwts.builder().setClaims(claims)
                 .setExpiration(expirationDate)
                 .signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
                 .compact();
-        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(member));
+        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(webLoginUser));
         return token;
     }
 
@@ -116,11 +115,11 @@
      * @param token 浠ょ墝
      * @return 鏁版嵁澹版槑
      */
-    private Member getClaimsFromToken(String token) {
-        Member claims;
+    private WebLoginUserVO getClaimsFromToken(String token) {
+        WebLoginUserVO claims;
         try {
             String userInfo = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
-            claims = JSONObject.toJavaObject(JSONObject.parseObject(userInfo),Member.class);
+            claims = JSONObject.toJavaObject(JSONObject.parseObject(userInfo),WebLoginUserVO.class);
         } catch (Exception e) {
             claims = null;
         }
diff --git a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
index a52062a..0d90178 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -1,11 +1,10 @@
 package com.doumee.config.jwt;
 
 import com.alibaba.fastjson.JSONObject;
-import com.doumee.core.annotation.LoginRequired;
-import com.doumee.core.constants.Constants;
+import com.doumee.config.annotation.LoginRequired;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
-import com.doumee.dao.business.model.Member;
+import com.doumee.dao.vo.WebLoginUserVO;
 import io.jsonwebtoken.JwtException;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,23 +78,14 @@
     public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
         String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
         try {
-            Member member  = jwtTokenUtil.getUserInfoByToken(token);
-            if(Objects.isNull(member)){
+            WebLoginUserVO webLoginUserVO = jwtTokenUtil.getUserInfoByToken(token);
+            if(Objects.isNull(webLoginUserVO)){
                 throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
             }
-            Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,1)  from member where id  = ?", Integer.class, member.getId());
-            if(isDeleted.equals(Constants.ONE)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
-            }
-            Integer count = dao.queryForObject("select count(1) from member where id  = ?", Integer.class, member.getId());
-            if (count != null && count > 0) {
 //                jwtTokenUtil.refreshToken(token,member);
-                request.setAttribute(JwtTokenUtil.MEMBER_INFO, JSONObject.toJSONString(member));
-                request.setAttribute(JwtTokenUtil.MEMBER_ID, member.getId());
-                return true;
-            }else{
-                throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
-            }
+            request.setAttribute(JwtTokenUtil.MEMBER_INFO, JSONObject.toJSONString(webLoginUserVO));
+            request.setAttribute(JwtTokenUtil.MEMBER_ID, webLoginUserVO.getId());
+            return true;
         } catch (IllegalArgumentException | JwtException e) {
             throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
         }
diff --git a/server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java b/server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java
deleted file mode 100644
index e406b69..0000000
--- a/server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.doumee.core.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.METHOD,ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface LoginRequired {
-
-}
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 8919316..5fe8c94 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -19,6 +19,8 @@
     public static final String HWY_OBS_ENDPOINT ="HWY_OBS_ENDPOINT" ;
     public static final String HWY_OBS_BUCKET ="HWY_OBS_BUCKET" ;
     public static final String RESOURCE_PATH ="RESOURCE_PATH" ;
+    public static final String ROLE_CONFIG ="ROLE_CONFIG" ;
+
     public static final String QYWX_CORPID = "QYWX_CORPID";
     public static final String QYWX_SECRET = "QYWX_SECRET";
     public static final String QYWX_TOKEN = "QYWX_TOKEN";
@@ -82,6 +84,7 @@
     public static final String ZBOM_UK_ERROR_URL ="ZBOM_UK_ERROR_URL" ;
     public static final String ZBOM_TICKET_LOGIN_URL ="ZBOM_TICKET_LOGIN_URL" ;
     public static final String OBJCET_STORAGE = "OBJCET_STORAGE";
+    public static final Object OBJECT_TYPE_CASES = "OBJECT_TYPE_CASES";
     public static boolean WORKORDER_SHE_EMAIL_SENDING = false;
     public static  boolean DEALING_COMPANY_SYNC = false ;
     public static  boolean DEALING_MEMBER_SYNC = false ;
@@ -89,6 +92,7 @@
     public static final String WORKORDER_LOG_FILE_PATH ="WORKORDER_LOG_FILE_PATH" ;
 
     public static final String REDIS_TOKEN_KEY = "token_";
+    public static final String CASES_FILES = "CASES_FILES";
 
     public static final String SUCCESS = "SUCCESS";
     public static final String FAIL = "FAIL";
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Category.java b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
index fccea28..b2e5e00 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Category.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Category.java
@@ -90,4 +90,8 @@
     @ApiModelProperty(value = "鍥炬爣鍏ㄨ矾寰�")
     @TableField(exist = false)
     private String iconFull;
+
+    @ApiModelProperty(value = "鍟嗕笟鍥炬帓琛屼俊鎭�")
+    @TableField(exist = false)
+    private List<Multifile> multifileList;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index cdc5bed..405d4ab 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -11,6 +11,8 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
 import java.math.BigDecimal;
+import java.util.List;
+
 /**
  * 浼氬憳淇℃伅琛∕odel瀹氫箟
  * @author doumee
@@ -70,6 +72,10 @@
     @ApiModelProperty("鍟嗕笟鍖栫被鍨嬬紪鐮侀泦鍚堬紙[1],[2],...]锛�")
     @ExcelColumn(name="鍟嗕笟鍖栫被鍨嬬紪鐮侀泦鍚堬紙[1],[2],...]锛�",index=16 ,width=10)
     private String bustypeIds;
+    @ApiModelProperty("鎿呴暱棰嗗煙闆嗗悎锛圼1],[2],...]锛�")
+    private String fieldIds;
+    @ApiModelProperty("宸ュ彿")
+    private String code;
     @ApiModelProperty("璁插笀绛夌骇缂栫爜锛堝叧鑱攃ategory锛�")
     @ExcelColumn(name="璁插笀绛夌骇缂栫爜锛堝叧鑱攃ategory锛�",index=17 ,width=10)
     private Integer levelId;
@@ -106,4 +112,46 @@
     @ApiModelProperty("瀵煎叆璁板綍缂栫爜锛堝叧鑱攊mport_record)")
     @ExcelColumn(name="瀵煎叆璁板綍缂栫爜锛堝叧鑱攊mport_record)",index=28 ,width=10)
     private Integer importId;
+
+    @ApiModelProperty("宸ヤ綔骞存暟")
+    @TableField(exist = false)
+    private Integer workYears;
+
+    @ApiModelProperty("鎿呴暱棰嗗煙鍚嶇О")
+    @TableField(exist = false)
+    private String fieldNames;
+
+    @ApiModelProperty("宸ヤ綔宀椾綅鍚嶇О")
+    @TableField(exist = false)
+    private String promotionName;
+
+    @ApiModelProperty("绾у埆鍚嶇О")
+    @TableField(exist = false)
+    private String levelName;
+
+    @ApiModelProperty("鎴樺尯缂栫爜 - 鏌ヨ")
+    @TableField(exist = false)
+    private String queryZQCode;
+
+    @ApiModelProperty("鎺掑簭淇℃伅锛�0=鏀惰垂浠庨珮鍒颁綆锛�1=鏀惰垂浠庝綆鍒伴珮锛�2=绛夌骇浠庨珮鍒颁綆锛�3=绛夌骇浠庝綆鍒伴珮锛�4=鏈嶅姟鏁颁粠楂樺埌浣�")
+    @TableField(exist = false)
+    private Integer orderByType;
+
+    @ApiModelProperty("璇佷欢鐓у叏璺緞")
+    @TableField(exist = false)
+    private String fullImgurl;
+
+    @ApiModelProperty("鏌ヨ鐢ㄦ埛绫诲瀷")
+    @TableField(exist = false)
+    private String queryUserRole;
+
+    @ApiModelProperty("鎿呴暱棰嗗煙")
+    @TableField(exist = false)
+    private List<Category> fieldList;
+
+    @ApiModelProperty("妗堜緥淇℃伅")
+    @TableField(exist = false)
+    private List<Cases> casesList;
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/WebLoginUserVO.java b/server/services/src/main/java/com/doumee/dao/vo/WebLoginUserVO.java
new file mode 100644
index 0000000..e9cd3f1
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/WebLoginUserVO.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2026/1/28 10:43
+ */
+@Data
+@ApiModel("H5鐢ㄦ埛璇锋眰杩斿洖瀵硅薄绫�")
+public class WebLoginUserVO {
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭")
+    private String id;
+
+    @ApiModelProperty(value = "鐢ㄦ埛瑙掕壊锛�")
+    private String roleType;
+
+    @ApiModelProperty(value = "鎴樺尯缂栫爜")
+    private String zhanqu;
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index d5804e4..bc604e3 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -97,4 +97,6 @@
      */
     long count(Member model);
 
+    Member findDetailById(Integer id,String queryUserRole);
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 3b7e90c..1f2d07d 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -3,13 +3,23 @@
 import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.ImportRecordMapper;
 import com.doumee.dao.business.dto.MemberImport;
+import com.doumee.dao.business.CasesMapper;
+import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.MultifileMapper;
+import com.doumee.dao.business.model.Cases;
+import com.doumee.dao.business.model.Category;
 import com.doumee.dao.business.model.Member;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.model.Multifile;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -18,6 +28,10 @@
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.CellType;
+import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -27,6 +41,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
+import java.util.Objects;
 
 /**
  * 浼氬憳淇℃伅琛⊿ervice瀹炵幇
@@ -38,6 +53,18 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private CategoryMapper categoryMapper;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private CasesMapper casesMapper;
+
+    @Autowired
+    private MultifileMapper multifileMapper;
 
     @Override
     public Integer create(Member member) {
@@ -99,55 +126,140 @@
     @Override
     public PageData<Member> findPage(PageWrap<Member> pageWrap) {
         IPage<Member> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
-        QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
+        MPJLambdaWrapper<Member> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-               queryWrapper.lambda().eq(pageWrap.getModel().getId() != null,Member::getId, pageWrap.getModel().getId());
-               queryWrapper.lambda().eq(pageWrap.getModel().getDeleted() != null,Member::getDeleted, pageWrap.getModel().getDeleted());
-               queryWrapper.lambda().eq(pageWrap.getModel().getCreateUser() != null,Member::getCreateUser, pageWrap.getModel().getCreateUser());
-             if (pageWrap.getModel().getId() != null) {
-                  queryWrapper.lambda().ge(Member::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
-                  queryWrapper.lambda().le(Member::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
-             }
-               queryWrapper.lambda().eq(pageWrap.getModel().getUpdateUser() != null,Member::getUpdateUser, pageWrap.getModel().getUpdateUser());
-             if (pageWrap.getModel().getId() != null) {
-                  queryWrapper.lambda().ge(Member::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
-                  queryWrapper.lambda().le(Member::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
-             }
-               queryWrapper.lambda().eq(pageWrap.getModel().getRemark() != null,Member::getRemark, pageWrap.getModel().getRemark());
-               queryWrapper.lambda().eq(pageWrap.getModel().getImgurl() != null,Member::getImgurl, pageWrap.getModel().getImgurl());
-               queryWrapper.lambda().eq(pageWrap.getModel().getDingdingId() != null,Member::getDingdingId, pageWrap.getModel().getDingdingId());
-               queryWrapper.lambda().eq(pageWrap.getModel().getPhone() != null,Member::getPhone, pageWrap.getModel().getPhone());
-               queryWrapper.lambda().eq(pageWrap.getModel().getName() != null,Member::getName, pageWrap.getModel().getName());
-               queryWrapper.lambda().eq(pageWrap.getModel().getSex() != null,Member::getSex, pageWrap.getModel().getSex());
-               queryWrapper.lambda().eq(pageWrap.getModel().getJobYear() != null,Member::getJobYear, pageWrap.getModel().getJobYear());
-               queryWrapper.lambda().eq(pageWrap.getModel().getPositon() != null,Member::getPositon, pageWrap.getModel().getPositon());
-               queryWrapper.lambda().eq(pageWrap.getModel().getZhanquIds() != null,Member::getZhanquIds, pageWrap.getModel().getZhanquIds());
-               queryWrapper.lambda().eq(pageWrap.getModel().getBustypeIds() != null,Member::getBustypeIds, pageWrap.getModel().getBustypeIds());
-               queryWrapper.lambda().eq(pageWrap.getModel().getLevelId() != null,Member::getLevelId, pageWrap.getModel().getLevelId());
-               queryWrapper.lambda().eq(pageWrap.getModel().getStatus() != null,Member::getStatus, pageWrap.getModel().getStatus());
-               queryWrapper.lambda().eq(pageWrap.getModel().getFee() != null,Member::getFee, pageWrap.getModel().getFee());
-               queryWrapper.lambda().eq(pageWrap.getModel().getServeNum() != null,Member::getServeNum, pageWrap.getModel().getServeNum());
-               queryWrapper.lambda().eq(pageWrap.getModel().getType() != null,Member::getType, pageWrap.getModel().getType());
-               queryWrapper.lambda().eq(pageWrap.getModel().getContent() != null,Member::getContent, pageWrap.getModel().getContent());
-             if (pageWrap.getModel().getId() != null) {
-                  queryWrapper.lambda().ge(Member::getLoginDate, Utils.Date.getStart(pageWrap.getModel().getLoginDate()));
-                  queryWrapper.lambda().le(Member::getLoginDate, Utils.Date.getEnd(pageWrap.getModel().getLoginDate()));
-             }
-               queryWrapper.lambda().eq(pageWrap.getModel().getLoginCount() != null,Member::getLoginCount, pageWrap.getModel().getLoginCount());
-               queryWrapper.lambda().eq(pageWrap.getModel().getSortnum() != null,Member::getSortnum, pageWrap.getModel().getSortnum());
-               queryWrapper.lambda().eq(pageWrap.getModel().getUsername() != null,Member::getUsername, pageWrap.getModel().getUsername());
-               queryWrapper.lambda().eq(pageWrap.getModel().getAddType() != null,Member::getAddType, pageWrap.getModel().getAddType());
-               queryWrapper.lambda().eq(pageWrap.getModel().getImportId() != null,Member::getImportId, pageWrap.getModel().getImportId());
-        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
-            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
-                queryWrapper.orderByDesc(sortData.getProperty());
-            } else {
-                queryWrapper.orderByAsc(sortData.getProperty());
+        Member model = pageWrap.getModel();
+        queryWrapper.selectAll(Member.class)
+                .select(" c1.NAME ", Member::getPromotionName)
+                .select(" c2.NAME ", Member::getLevelName)
+                .select(" TIMESTAMPDIFF(YEAR, CONCAT(t.JOB_YEAR , '-01-01'), now()) ",Member::getWorkYears)
+                .leftJoin(" category c1 on t.POSITON = c1.id ")
+                .leftJoin(" category c2 on t.LEVEL_ID = c2.id ")
+                .apply(Objects.nonNull(model.getBustypeIds())," find_in_set( '["+model.getBustypeIds()+"]', t.BUSTYPE_IDS ) ")
+                .like(StringUtils.isNotBlank(model.getName()),Member::getName, model.getName())
+                .eq(Objects.nonNull(model.getStatus()),Member::getStatus, model.getStatus())
+                .orderByAsc(Objects.isNull(model.getOrderByType()),"c2.DETAIL")
+                .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ZERO),Member::getFee)
+                .orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ONE),Member::getFee)
+                .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.TWO),"c2.DETAIL")
+                .orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.THREE),"c2.DETAIL")
+                .orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.FOUR),Member::getServeNum)
+        ;
+        if(StringUtils.isNotBlank(model.getFieldIds())){
+            String [] fieldIds = model.getFieldIds().split(",");
+            for (String s:fieldIds) {
+                queryWrapper.apply("find_in_set( '["+s+"]' , t.FIELD_IDS )");
             }
         }
-        return PageData.from(memberMapper.selectPage(page, queryWrapper));
+        if (StringUtils.isNotBlank(model.getQueryZQCode())) {
+            Category zhanqu = categoryMapper.selectOne(new QueryWrapper<Category>().lambda()
+                    .eq(Category::getDeleted,Constants.ZERO)
+                    .eq(Category::getStatus,Constants.ZERO)
+                    .eq(Category::getDetail,model.getQueryZQCode())
+                    .last(" limit 1")
+            );
+            if(Objects.nonNull(zhanqu)){
+                queryWrapper.apply(" find_in_set( '["+zhanqu.getId()+"]', t.ZHANQU_IDS ) ");
+            }
+        }
+        IPage<Member> memberIPage  = memberMapper.selectJoinPage(page, Member.class, new MPJLambdaWrapper<>());
+        if(CollectionUtils.isNotEmpty(memberIPage.getRecords())){
+            List<Category> categoryList = categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                    .eq(Category::getDeleted, Constants.ZERO)
+                    .eq(Category::getType,Constants.TWO)
+                    .orderByAsc(Category::getSortnum)
+            );
+            String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode() +
+                    systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CATEGORY_FILES).getCode();
+            String roleConfig = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ROLE_CONFIG).getCode();
+            for (Member member:memberIPage.getRecords()) {
+                if(CollectionUtils.isNotEmpty(categoryList)){
+                    dealMemberField(member,categoryList);
+                }
+                member.setFullImgurl(StringUtils.isNotBlank(member.getImgurl())?(path + member.getImgurl()):"");
+                if(StringUtils.isBlank(roleConfig)||StringUtils.isBlank(model.getQueryUserRole())
+                || !roleConfig.contains(model.getQueryUserRole())){
+                    member.setFee(null);
+                }
+            }
+        }
+        return PageData.from(memberIPage);
     }
 
+
+    @Override
+    public Member findDetailById(Integer id,String queryUserRole) {
+        Member member = memberMapper.selectJoinOne(Member.class, new MPJLambdaWrapper<Member>()
+                .selectAll(Member.class)
+                .select(" c1.NAME ", Member::getPromotionName)
+                .select(" c2.NAME ", Member::getLevelName)
+                .select(" TIMESTAMPDIFF(YEAR, CONCAT(t.JOB_YEAR , '-01-01'), now()) ",Member::getWorkYears)
+                .leftJoin(" category c1 on t.POSITON = c1.id ")
+                .leftJoin(" category c2 on t.LEVEL_ID = c2.id ")
+                .eq(Member::getId, id)
+                .last(" limit 1 "));
+       if(Objects.isNull(member)){
+           throw new BusinessException(ResponseStatus.DATA_EMPTY);
+       }
+       if(StringUtils.isNotBlank(member.getFieldIds())){
+           member.setFieldList(
+                   categoryMapper.selectList(new QueryWrapper<Category>().lambda()
+                           .eq(Category::getDeleted, Constants.ZERO)
+                           .eq(Category::getType,Constants.TWO)
+                           .apply(" find_in_set(CONCAT('[',id,']'),'"+member.getFieldIds()+"') ")
+                           .orderByAsc(Category::getSortnum)
+            )
+           );
+       }
+
+        String resourcePath = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode();
+        String path =  systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CATEGORY_FILES).getCode();
+        String roleConfig = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ROLE_CONFIG).getCode();
+        member.setFullImgurl(StringUtils.isNotBlank(member.getImgurl())?(resourcePath  + path + member.getImgurl()):"");
+        List<Cases> casesList = casesMapper.selectList(new QueryWrapper<Cases>().lambda()
+                .eq(Cases::getMemberId,member.getId())
+                .eq(Cases::getDeleted,Constants.ZERO)
+                .orderByDesc(Cases::getId)
+        );
+        if(CollectionUtils.isNotEmpty(casesList)){
+            String casePath =  systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CASES_FILES).getCode();
+            for (Cases cases:casesList) {
+                List<Multifile> multifileList = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                        .eq(Multifile::getObjId,cases.getId())
+                        .eq(Multifile::getObjType,Constants.OBJECT_TYPE_CASES)
+                        .eq(Multifile::getIsdeleted,Constants.ZERO)
+                        .orderByDesc(Multifile::getId)
+                );
+                multifileList.forEach(multifile -> {
+                    multifile.setFileurlFull(StringUtils.isNotBlank(multifile.getFileurl())?(resourcePath  + casePath + multifile.getFileurl()):"");
+                });
+            }
+            member.setCasesList(casesList);
+        }
+        if(StringUtils.isBlank(roleConfig)||StringUtils.isBlank(queryUserRole)
+                || !roleConfig.contains(queryUserRole)){
+            member.setFee(null);
+        }
+        return member;
+    }
+
+
+
+
+    public void dealMemberField(Member member,List<Category> categoryList){
+        if(CollectionUtils.isNotEmpty(categoryList)){
+            return;
+        }
+        String fieldNames = "";
+        for (Category category:categoryList) {
+            if(member.getFieldIds().contains("["+category.getId()+"]")){
+                fieldNames = fieldNames + (StringUtils.isNotBlank(fieldNames)?",":"") + category.getName();
+            }
+        }
+        member.setFieldNames(fieldNames);
+    }
+
+
     @Override
     public long count(Member member) {
         QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
diff --git a/server/web/src/main/java/com/doumee/api/web/ApiController.java b/server/web/src/main/java/com/doumee/api/web/ApiController.java
index c9eb82a..b6e10cb 100644
--- a/server/web/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/web/src/main/java/com/doumee/api/web/ApiController.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.vo.WebLoginUserVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.RequestContextHolder;
@@ -39,10 +40,10 @@
      * 鑾峰彇鐧诲綍鐢ㄦ埛瀵硅薄淇℃伅
      * @return
      */
-    protected Member getMemberResponse(){
+    protected WebLoginUserVO getMemberResponse(){
         Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_INFO);
         if(obj != null){
-            return JSONObject.parseObject(obj.toString(),Member.class);
+            return JSONObject.parseObject(obj.toString(), WebLoginUserVO.class);
         }
         return null;
     }
diff --git a/server/web/src/main/java/com/doumee/api/web/LoginController.java b/server/web/src/main/java/com/doumee/api/web/LoginController.java
index 0015f4f..e4a8040 100644
--- a/server/web/src/main/java/com/doumee/api/web/LoginController.java
+++ b/server/web/src/main/java/com/doumee/api/web/LoginController.java
@@ -4,8 +4,11 @@
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.annotation.LoginRequired;
+import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.constants.Constants;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
@@ -14,10 +17,15 @@
 import com.doumee.core.utils.HttpsUtil;
 import com.doumee.dao.business.dto.LoginRequestNewParam;
 import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.system.model.SystemJob;
+import com.doumee.dao.vo.WebLoginUserVO;
 import com.doumee.service.business.CategoryService;
+import com.doumee.service.business.MemberService;
 import com.sun.deploy.net.HttpUtils;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -41,22 +49,30 @@
  * @date 2025/07/09 12:00
  */
 @Api(tags = "web鐧诲綍鐩稿叧鎺ュ彛")
+@Trace(exclude = true)
 @RestController
-@RequestMapping("/web")
+@RequestMapping("/web/login")
 @Slf4j
-public class LoginController extends BaseController {
+public class LoginController extends ApiController {
 
     @Autowired
     private CategoryService categoryService;
 
     @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
     private SystemDictDataBiz systemDictDataBiz;
 
+    @Autowired
+    private MemberService memberService;
+
+
     @ApiOperation("UK鍗曠偣鐧诲綍")
-    @RequestMapping("/ukLogin")
+    @GetMapping("/ukLogin")
     public void ukLogin(String tick, Object obj, HttpServletRequest request, HttpServletResponse response) throws Exception  {
         LoginRequestNewParam requestParam = new LoginRequestNewParam();
-        // UK_ERROR_URL = "http://u.zhibang.com/sso/web/token/error";
+        /*// UK_ERROR_URL = "http://u.zhibang.com/sso/web/token/error";
         String errorUrl =systemDictDataBiz.queryByCode(Constants.ZBOM_PARAM,Constants.ZBOM_UK_ERROR_URL).getCode();
         try {
             log.error("璇锋眰鍙傛暟TICK鏈�鍘熷===========锛�" + tick);
@@ -80,9 +96,13 @@
             log.error("ticket鎺ュ彛璇锋眰閿欒锛�" + e.getMessage());
             response.sendRedirect(errorUrl + "?title=" + enCode("鐧婚檰閿欒") + "&msg=" + enCode("绯荤粺绻佸繖锛岃绋嶅悗閲嶈瘯~"));
             return;
-        }
+        }*/
         requestParam.setRediUrl("http://localhost:10087/#/login");
-        String token = UUID.randomUUID().toString()+"_doumee";
+        WebLoginUserVO loginUserVO = new WebLoginUserVO();
+        loginUserVO.setId("123");
+        loginUserVO.setRoleType("admin");
+        loginUserVO.setZhanqu("1");
+        String token = jwtTokenUtil.generateToken(loginUserVO);
         response.sendRedirect(requestParam.getRediUrl()+"?token="+token);
     }
 
@@ -99,5 +119,43 @@
         return str;
     }
 
+    @LoginRequired
+    @ApiOperation("鑰佸笀鍒嗛〉鏌ヨ")
+    @PostMapping("/memberPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<PageData<Member>> memberPage(@RequestBody PageWrap<Member> pageWrap) {
+        WebLoginUserVO loginUserVO = this.getMemberResponse();
+        pageWrap.getModel().setQueryUserRole(loginUserVO.getRoleType());
+        pageWrap.getModel().setQueryZQCode(loginUserVO.getZhanqu());
+        return ApiResponse.success(memberService.findPage(pageWrap));
+    }
+
+
+
+    @LoginRequired
+    @ApiOperation("鑰佸笀璇︽儏")
+    @GetMapping("/memberDetail")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Member> memberPage(@RequestParam Integer id) {
+        WebLoginUserVO loginUserVO = this.getMemberResponse();
+        return ApiResponse.success(memberService.findDetailById(id,loginUserVO.getRoleType()));
+    }
+
+
+    @LoginRequired
+    @ApiOperation("鍒嗙被淇℃伅鏌ヨ")
+    @GetMapping("/categoryList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<List<Category>> categoryList(@RequestParam Integer type) {
+        return ApiResponse.success(categoryService.getCategoryList(type));
+    }
+
+
 
 }

--
Gitblit v1.9.3