From 372822d209a560b017294b594906aa89bd46f4ce Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期五, 11 七月 2025 09:02:41 +0800
Subject: [PATCH] 111

---
 server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java                 |    3 
 server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java                        |   76 +++
 server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java               |   42 -
 server/web/src/main/java/com/doumee/api/web/ApiController.java                              |   52 ++
 server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java                 |   12 
 server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java          |    5 
 server/web/src/main/java/com/doumee/api/web/AccountApi.java                                 |   58 ++
 server/services/src/main/java/com/doumee/config/mybatis/SpringUtils.java                    |   69 +++
 server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                       |  137 +++++
 server/services/src/main/java/com/doumee/config/jwt/JwtProperties.java                      |   27 +
 server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java                        |   30 +
 server/web/src/main/java/com/doumee/api/web/UserApi.java                                    |  127 +++++
 server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java                       |  110 ++++
 server/web/src/main/java/com/doumee/api/web/OrdersApi.java                                  |   51 ++
 server/pom.xml                                                                              |   19 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                      |    9 
 server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java |  130 ++++
 server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java                           |   46 ++
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                     |   10 
 server/services/src/main/java/com/doumee/service/business/MemberService.java                |   52 ++
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java       |  216 +++++++++
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java       |   47 +
 server/services/src/main/java/com/doumee/dao/business/model/Member.java                     |   21 
 server/services/src/main/java/com/doumee/dao/dto/WxPhoneRequest.java                        |   28 +
 24 files changed, 1,308 insertions(+), 69 deletions(-)

diff --git a/server/pom.xml b/server/pom.xml
index 1c0db03..38b3e63 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -37,6 +37,7 @@
     <jna.version>5.7.0</jna.version>
     <poi.version>5.0.0</poi.version>
     <jjwt.version>0.9.1</jjwt.version>
+    <weixin-java-pay.version>4.1.0</weixin-java-pay.version>
   </properties>
   <dependencyManagement>
     <dependencies>
@@ -230,6 +231,24 @@
       <artifactId>bcprov-jdk15on</artifactId>
       <version>1.60</version>
     </dependency>
+
+    <!-- WeChat 灏忕▼搴� -->
+    <dependency>
+      <groupId>com.github.binarywang</groupId>
+      <artifactId>weixin-java-miniapp</artifactId>
+      <version>4.7.0</version>
+    </dependency>
+    <!-- WeChat 鏀粯 -->
+    <dependency>
+      <groupId>com.github.binarywang</groupId>
+      <artifactId>weixin-java-pay</artifactId>
+      <version>${weixin-java-pay.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.wechatpay-apiv3</groupId>
+      <artifactId>wechatpay-java</artifactId>
+      <version>0.2.12</version>
+    </dependency>
  <!--   <dependency>
       <groupId>com.azure.spring</groupId>
       <artifactId>spring-cloud-azure-starter-storage-blob</artifactId>
diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtProperties.java b/server/services/src/main/java/com/doumee/config/jwt/JwtProperties.java
new file mode 100644
index 0000000..790d57a
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtProperties.java
@@ -0,0 +1,27 @@
+package com.doumee.config.jwt;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix = "auth.jwt")
+@Component
+public class JwtProperties {
+
+    //鏄惁寮�鍚疛WT锛屽嵆娉ㄥ叆鐩稿叧鐨勭被瀵硅薄
+    private Boolean enabled;
+    //JWT瀵嗛挜
+    private String secret;
+    //JWT鏈夋晥鏃堕棿
+    private Long expiration;
+    //鍓嶇鍚戝悗绔紶閫扟WT鏃朵娇鐢℉TTP鐨刪eader鍚嶇О锛屽墠鍚庣瑕佺粺涓�
+    private String header;
+    //鐢ㄦ埛鐧诲綍-鐢ㄦ埛鍚嶅弬鏁板悕绉�
+    private String userParamName = "username";
+    //鐢ㄦ埛鐧诲綍-瀵嗙爜鍙傛暟鍚嶇О
+    private String pwdParamName = "password";
+    //鏄惁浣跨敤榛樿鐨凧WTAuthController
+    private Boolean useDefaultController = false;
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..f1e4399
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -0,0 +1,137 @@
+package com.doumee.config.jwt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.system.SystemUserMapper;
+import com.doumee.dao.system.model.SystemUser;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.concurrent.TimeUnit;
+
+@Component
+@Slf4j
+public class JwtTokenUtil {
+
+    public static final String HEADER_KEY = "token";
+
+    public static final String MEMBER_ID = "MEMBER_ID";
+
+    public static final String MEMBER_INFO = "MEMBER_INFO";
+
+    @Resource
+    private RedisTemplate<String,Object> redisTemplate;
+
+    @Resource
+    private JwtProperties jwtProperties;
+
+    /**
+     * 鐢熸垚token浠ょ墝
+     *
+     * @param member 浠ょ墝涓惡甯︾殑闄勫姞淇℃伅
+     * @return 浠oken鐗�
+     */
+    public String generateToken(Member member) {
+        if(member == null){
+            return  null;
+        }
+        Map<String,Object> map = new HashMap<>();
+        map.put("id",member.getId());
+        return generateTokenDo(member);
+    }
+
+
+    public Member getUserInfoByToken(String token) {
+        try {
+            Member member = getClaimsFromToken(token);
+            return member;
+        } catch (Exception e) {
+           e.printStackTrace();
+        }
+        return null;
+    }
+
+
+    /**
+     * 鍒锋柊浠ょ墝
+     *
+     * @param token 鍘熶护鐗�
+     * @return 鏂颁护鐗�
+     */
+    public void refreshToken(String token,Member member) {
+        try {
+            if(Objects.nonNull(member)){
+                redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY+token,JSONObject.toJSONString(member),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
+            }
+        } catch (Exception e) {
+
+        }
+    }
+
+
+    /**
+     * 閫�鍑虹櫥闄�
+     *
+     * @param token 鍘熶护鐗�
+     * @return 鏂颁护鐗�
+     */
+    public void logoutForH5(String token) {
+        try {
+            //鍒犻櫎鑰佺殑token
+            redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 浠巆laims鐢熸垚浠ょ墝,濡傛灉鐪嬩笉鎳傚氨鐪嬭皝璋冪敤瀹�
+     *
+     * @return 浠ょ墝
+     */
+    private String generateTokenDo(Member member) {
+        Map<String, Object> claims = new HashMap<>();
+        claims.put("id",member.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),jwtProperties.getExpiration(), TimeUnit.MILLISECONDS);
+        return token;
+    }
+
+
+    /**
+     * 浠庝护鐗屼腑鑾峰彇鏁版嵁澹版槑,楠岃瘉JWT绛惧悕
+     *
+     * @param token 浠ょ墝
+     * @return 鏁版嵁澹版槑
+     */
+    private Member getClaimsFromToken(String token) {
+        Member claims;
+        try {
+            String userInfo = (String) redisTemplate.opsForValue().get(Constants.REDIS_TOKEN_KEY+token);
+            claims = JSONObject.toJavaObject(JSONObject.parseObject(userInfo),Member.class);
+        } catch (Exception e) {
+            claims = null;
+        }
+        return claims;
+    }
+
+}
\ No newline at end of file
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
new file mode 100644
index 0000000..f55b4d5
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -0,0 +1,110 @@
+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.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.dao.business.model.Member;
+import io.jsonwebtoken.JwtException;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Objects;
+
+@Configuration
+public class WebMvcConfig implements WebMvcConfigurer {
+
+
+    @Autowired
+    private JdbcTemplate dao;
+
+    @Resource
+    private JwtTokenUtil jwtTokenUtil;
+
+    /**
+     * 娣诲姞鎷︽埅鍣�
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        //API鎺ュ彛JwtToken鎷︽埅鍣�
+        HandlerInterceptor TokenInterceptor = new HandlerInterceptor() {
+            @Override
+            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+                // 濡傛灉涓嶆槸鏄犲皠鍒版柟娉曠洿鎺ラ�氳繃
+                if (!(handler instanceof HandlerMethod)) {
+                    return true;
+                }
+                HandlerMethod handlerMethod = (HandlerMethod) handler;
+
+                Class<?> beanType = handlerMethod.getBeanType();
+
+                // 鏈� @LoginRequired 娉ㄨВ锛岄渶瑕佺櫥褰曡璇�
+                if (beanType.isAnnotationPresent(LoginRequired.class)) {
+                    //鑾峰彇token
+                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    if (StringUtils.isNotBlank(token)) {
+                        checkLogin(request,response);
+                    } else {
+                        throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+                    }
+                }else if (handlerMethod.hasMethodAnnotation(LoginRequired.class)){
+                    //鑾峰彇token
+                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
+                    if (StringUtils.isNotBlank(token)) {
+                        checkLogin(request,response);
+                    } else {
+                        throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+                    }
+                }
+                return true;
+            }
+        };
+        registry.addInterceptor(TokenInterceptor).addPathPatterns("/web/**");
+    }
+
+
+
+    public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
+        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
+        try {
+            Member member  = jwtTokenUtil.getUserInfoByToken(token);
+            if(Objects.isNull(member)){
+                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
+            }
+            Integer isDeleted = dao.queryForObject(" select COALESCE(isdeleted,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(),"鐢ㄦ埛淇℃伅鍑洪敊");
+            }
+        } catch (IllegalArgumentException | JwtException e) {
+            throw new BusinessException(ResponseStatus.BE_OVERDUE.getCode(),"鏈櫥褰�");
+        }
+    }
+
+    @Bean
+    public RestTemplate getRestTemplate(){
+        return new RestTemplate();
+    }
+
+
+}
diff --git a/server/services/src/main/java/com/doumee/config/mybatis/SpringUtils.java b/server/services/src/main/java/com/doumee/config/mybatis/SpringUtils.java
new file mode 100644
index 0000000..f813d05
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/mybatis/SpringUtils.java
@@ -0,0 +1,69 @@
+package com.doumee.config.mybatis;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * NOTICE: NEVER USE IT WHEN REGISTERING A SPRING BEAN.
+ *
+ * @author Guang YANG
+ */
+@Component
+public class SpringUtils implements ApplicationContextAware {
+
+    private static ApplicationContext CTX;
+
+    public static ApplicationContext get() {
+        return CTX;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        CTX = applicationContext;
+    }
+
+    /**
+     * 鍚戝鍣ㄤ腑鍔ㄦ�佹坊鍔燘ean
+     *
+     * @param ctx
+     * @param beanName
+     * @param beanClass
+     */
+    public static void addBean(ApplicationContext ctx, String beanName, Class beanClass) {
+        BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory)ctx.getAutowireCapableBeanFactory();
+        BeanDefinitionBuilder beanDefBuilder = BeanDefinitionBuilder.genericBeanDefinition(beanClass);
+        BeanDefinition beanDef = beanDefBuilder.getBeanDefinition();
+        if (!beanDefReg.containsBeanDefinition(beanName)) {
+            beanDefReg.registerBeanDefinition(beanName, beanDef);
+        }
+    }
+
+    /**
+     * 浠庡鍣ㄤ腑绉婚櫎Bean
+     *
+     * @param ctx
+     * @param beanName
+     */
+   public static void removeBean(ApplicationContext ctx, String beanName) {
+        BeanDefinitionRegistry beanDefReg = (DefaultListableBeanFactory) ctx.getAutowireCapableBeanFactory();
+        beanDefReg.getBeanDefinition(beanName);
+        beanDefReg.removeBeanDefinition(beanName);
+    }
+
+    /**
+     * 閬嶅巻杈撳嚭鎵�鏈塀ean鐨勪俊鎭�
+     */
+    static void showAllBeans(ApplicationContext ctx) {
+        //閬嶅巻
+        for (String name : ctx.getBeanDefinitionNames()) {
+            System.out.println("name:" + name + ",class:" + ctx.getBean(name).getClass());
+        }
+    }
+
+}
diff --git a/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
new file mode 100644
index 0000000..f93edef
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/config/wx/WxMiniConfig.java
@@ -0,0 +1,76 @@
+package com.doumee.config.wx;
+
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
+import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.mybatis.SpringUtils;
+import com.doumee.core.constants.Constants;
+import com.github.binarywang.wxpay.config.WxPayConfig;
+import com.github.binarywang.wxpay.constant.WxPayConstants;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+
+import javax.annotation.PostConstruct;
+
+/**
+ * 寰俊灏忕▼搴忕粍浠�
+ */
+@Configuration
+public class WxMiniConfig {
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+    /********寰俊灏忕▼搴忔湇鍔�**********/
+    public static WxMaService wxMaService;
+    /********寰俊灏忕▼搴忔敮浠�**********/
+    public static WxPayService wxPayService;
+
+    public static WxMiniConfig me() {
+        return SpringUtils.get().getBean(WxMiniConfig.class);
+    }
+
+    @PostConstruct
+    void init() {
+        this.load_WxMaService();
+//        this.load_wxPayService();
+    }
+    /**
+     * 鍒濆鍖栧井淇″皬绋嬪簭
+     */
+    public void load_WxMaService() {
+        WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
+        config.setAppid(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.APPID).getCode()));
+        config.setSecret(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.WX_CONFIG,Constants.SECRET).getCode()));
+        config.setMsgDataFormat("JSON");
+        //config.setToken("");
+        //config.setAesKey("");
+        WxMaService wxMaService = new WxMaServiceImpl();
+        wxMaService.setWxMaConfig(config);
+        this.wxMaService = wxMaService;
+    }
+
+    /**
+     * 鍒濆鍖栧井淇″皬绋嬪簭鏀粯
+     */
+//    public void load_wxPayService() {
+//        WxPayConfig payConfig = new WxPayConfig();
+//        payConfig.setTradeType(WxPayConstants.TradeType.JSAPI);
+//        payConfig.setSignType(WxPayConstants.SignType.MD5);
+//        payConfig.setAppId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_AppID.getCode())));
+//        payConfig.setMchId(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchId.getCode())));
+//        payConfig.setMchKey(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_MchKey.getCode())));
+//        payConfig.setKeyPath(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_KeyPath.getCode())));
+//        payConfig.setNotifyUrl(StringUtils.trimToNull(sysDictService.getSysDictValue(SysDictEnum.WX_MINI_NotifyUrl.getCode())));
+//        WxPayService wxPayService = new WxPayServiceImpl();
+//        wxPayService.setConfig(payConfig);
+//        this.wxPayService = wxPayService;
+//    }
+
+
+
+
+
+}
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
new file mode 100644
index 0000000..e406b69
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/core/annotation/LoginRequired.java
@@ -0,0 +1,12 @@
+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 46e31ec..7fa6160 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
@@ -42,6 +42,15 @@
     public static final String WISDOM_SYSTEM ="WISDOM_SYSTEM" ;
     public static final String FOOT_WORDS ="FOOT_WORDS" ;
 
+    public static final String WX_CONFIG ="WX_CONFIG" ;
+    public static final String APPID ="APPID" ;
+    public static final String SECRET ="SECRET" ;
+    public static final String ACCESS_TOKEN ="ACCESS_TOKEN" ;
+    public static final String SERVER_INTRODUCE ="SERVER_INTRODUCE" ;
+    public static final String FEE_STANDARDS ="FEE_STANDARDS" ;
+    public static final String ABOUT_US ="ABOUT_US" ;
+
+
 
     public static final String QYWX = "QYWX";
     public static final  Integer ONE = 1;
diff --git a/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java b/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
index 68680c8..6e58040 100644
--- a/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
+++ b/server/services/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -28,7 +28,8 @@
     REPEAT_REQUEST(5100, "璇峰嬁閲嶅鎻愪氦"),
     MASSIVE_REQUEST(5101, "璇锋眰杩囦簬棰戠箒"),
     NOT_ALLOWED(5110, "涓嶅厑璁哥殑鎿嶄綔"),
-    NO_LOGIN(5112, "鏈櫥褰�"),
+    BE_OVERDUE(5112, "鏈櫥褰�"),
+    TOKEN_EXCEED_TIME(5113, "鐧婚檰宸茶繃鏈�"),
     ;
 
     private int code;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
index 824f8e2..2974faf 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/IdentityInfo.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -55,8 +56,8 @@
     @ExcelColumn(name="绫诲瀷:0=鐢ㄥ伐韬唤锛�1=璐ц繍韬唤锛�2=渚涢韬唤锛�")
     private Integer type;
 
-    @ApiModelProperty(value = "浼氬憳閫愭笎", example = "1")
-    @ExcelColumn(name="浼氬憳閫愭笎")
+    @ApiModelProperty(value = "浼氬憳涓婚敭", example = "1")
+    @ExcelColumn(name="浼氬憳涓婚敭")
     private Integer memberId;
 
     @ApiModelProperty(value = "璁よ瘉绫诲瀷:0=涓汉锛�1=浼佷笟", example = "1")
@@ -87,33 +88,21 @@
     @ExcelColumn(name="缁忓害")
     private BigDecimal lgt;
 
-    @ApiModelProperty(value = "韬唤璇佷汉鍍忛潰")
-    @ExcelColumn(name="韬唤璇佷汉鍍忛潰")
-    private String identityFront;
+    @ApiModelProperty(value = "韬唤璇佷汉鍍忛潰/钀ヤ笟鎵х収")
+    @ExcelColumn(name="韬唤璇佷汉鍍忛潰/钀ヤ笟鎵х収")
+    private String img1;
 
-    @ApiModelProperty(value = "韬唤璇佸浗寰介潰")
-    @ExcelColumn(name="韬唤璇佸浗寰介潰")
-    private String identityBack;
-
-    @ApiModelProperty(value = "钀ヤ笟鎵х収锛堜紒涓氱被浣跨敤锛�")
-    @ExcelColumn(name="钀ヤ笟鎵х収锛堜紒涓氱被浣跨敤锛�")
-    private String businessLicense;
-
-    @ApiModelProperty(value = "鍏朵粬璁よ瘉璧勬枡锛堜紒涓氱被浣跨敤锛�")
-    @ExcelColumn(name="鍏朵粬璁よ瘉璧勬枡锛堜紒涓氱被浣跨敤锛�")
-    private String otherFile;
-
-    @ApiModelProperty(value = "閬撹矾杩愯緭缁忛獙璁稿彲璇侊紙浼佷笟绫昏揣杩愯韩浠戒娇鐢級")
-    @ExcelColumn(name="閬撹矾杩愯緭缁忛獙璁稿彲璇侊紙浼佷笟绫昏揣杩愯韩浠戒娇鐢級")
-    private String transportFile;
-
-    @ApiModelProperty(value = "椋熷搧缁忚惀璁稿彲璇侊紙浼佷笟绫讳緵椁愯韩浠戒娇鐢級")
-    @ExcelColumn(name="椋熷搧缁忚惀璁稿彲璇侊紙浼佷笟绫讳緵椁愯韩浠戒娇鐢級")
-    private String foodBusinessFile;
+    @ApiModelProperty(value = "韬唤璇佸浗寰介潰/閬撹矾浜ら�氳惀杩愯鍙瘉/椋熷搧缁忚惀璁稿彲璇�")
+    @ExcelColumn(name="韬唤璇佸浗寰介潰/閬撹矾浜ら�氳惀杩愯鍙瘉/椋熷搧缁忚惀璁稿彲璇�")
+    private String img2;
 
     @ApiModelProperty(value = "浠庝笟浜哄憳鍋ュ悍璇�")
     @ExcelColumn(name="浠庝笟浜哄憳鍋ュ悍璇�")
-    private String healthFile;
+    private String img3;
+
+    @ApiModelProperty(value = "鍏朵粬璁よ瘉璧勬枡")
+    @ExcelColumn(name="鍏朵粬璁よ瘉璧勬枡")
+    private String img4;
 
     @ApiModelProperty(value = "璁よ瘉瀹℃壒鐘舵��:1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�", example = "1")
     @ExcelColumn(name="璁よ瘉瀹℃壒鐘舵��:1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�")
@@ -128,4 +117,7 @@
     @ExcelColumn(name="璁よ瘉瀹℃壒澶囨敞")
     private String auditRemark;
 
+    @ApiModelProperty(value = "鍥剧墖鍓嶇紑")
+    @TableField(exist = false)
+    private String prefix;
 }
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 a753400..6e5d6c4 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
@@ -1,11 +1,14 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.doumee.dao.vo.UserCenterVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.models.auth.In;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
@@ -27,7 +30,7 @@
 
     @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
     @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
-    private Byte deleted;
+    private Integer deleted;
 
     @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
     @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
@@ -106,7 +109,7 @@
 
     @ApiModelProperty(value = "鎬绘帴鍗曢噺", example = "1")
     @ExcelColumn(name="鎬绘帴鍗曢噺")
-    private Long reciveNum;
+    private Long receiveNum;
 
     @ApiModelProperty(value = "鎬诲彂鍗曢噺", example = "1")
     @ExcelColumn(name="鎬诲彂鍗曢噺")
@@ -118,7 +121,7 @@
 
     @ApiModelProperty(value = "瀹氫綅鍦板潃")
     @ExcelColumn(name="瀹氫綅鍦板潃")
-    private String localtion;
+    private String location;
 
     @ApiModelProperty(value = "绾害", example = "1")
     @ExcelColumn(name="绾害")
@@ -142,6 +145,16 @@
 
     @ApiModelProperty(value = "鏄惁鎺ュ彈鑷姩娲惧崟:0=鍚︼紱1=鏄紱", example = "1")
     @ExcelColumn(name="鏄惁鎺ュ彈鑷姩娲惧崟:0=鍚︼紱1=鏄紱")
-    private Integer autoReciveStatus;
+    private Integer autoReceiveStatus;
+
+
+    @ApiModelProperty(value = "褰撳墠浣跨敤韬唤:0=鐢ㄥ伐鍙戝竷鏂�;1=鐢ㄥ伐鎺ュ崟鏂�;", example = "1")
+    @ExcelColumn(name="褰撳墠浣跨敤韬唤:0=鐢ㄥ伐鍙戝竷鏂�;1=鐢ㄥ伐鎺ュ崟鏂�;")
+    private Integer useIdentity;
+
+    @ApiModelProperty(value = "鎴戠殑 - 鏁版嵁淇℃伅", example = "1")
+    @TableField(exist = false)
+    private UserCenterVO userCenterVO;
+
 
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index fd7fd2a..a47edc6 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -10,6 +11,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * 璁㈠崟淇℃伅璁板綍
@@ -131,7 +133,7 @@
 
     @ApiModelProperty(value = "瀹炴敹璐圭敤", example = "1")
     @ExcelColumn(name="瀹炴敹璐圭敤")
-    private Long reviceAccount;
+    private Long receiveAccount;
 
     @ApiModelProperty(value = "璐圭敤璇存槑")
     @ExcelColumn(name="璐圭敤璇存槑")
@@ -240,6 +242,10 @@
 
     @ApiModelProperty(value = "鎺ュ崟鏂归粦鍚嶅崟member:id 澶氫釜浠�,鍒嗗壊")
     @ExcelColumn(name="鎺ュ崟鏂归粦鍚嶅崟member:id 澶氫釜浠�,鍒嗗壊")
-    private String blackRecive;
+    private String blackReceive;
+
+    @ApiModelProperty
+    @TableField(exist = false)
+    private List<Multifile> multifileList;
 
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/WxPhoneRequest.java b/server/services/src/main/java/com/doumee/dao/dto/WxPhoneRequest.java
new file mode 100644
index 0000000..b3085e6
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/dto/WxPhoneRequest.java
@@ -0,0 +1,28 @@
+package com.doumee.dao.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:50
+ */
+@Data
+@ApiModel("寰俊鎺堟潈鎵嬫満鍙疯姹傜被")
+public class WxPhoneRequest implements Serializable {
+
+    @NotEmpty(message = "openid 涓嶈兘涓虹┖")
+    @ApiModelProperty(value = "openid")
+    private String openid;
+
+    @NotEmpty(message = "code")
+    @ApiModelProperty(value = "code")
+    private String code;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java b/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
new file mode 100644
index 0000000..27c4b96
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/AccountResponse.java
@@ -0,0 +1,30 @@
+package com.doumee.dao.vo;
+
+import com.doumee.core.constants.Constants;
+import com.doumee.dao.business.model.Member;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/3/23 9:25
+ */
+@Data
+@ApiModel("鐧诲綍杩斿洖绫�")
+public class AccountResponse implements Serializable {
+
+    @ApiModelProperty(value = "鐢ㄦ埛token")
+    private String token;
+
+    @ApiModelProperty(value = "openid")
+    private String openid;
+
+    @ApiModelProperty(value = "鐢ㄦ埛淇℃伅")
+    private Member member;
+
+}
diff --git a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
new file mode 100644
index 0000000..c759d08
--- /dev/null
+++ b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
@@ -0,0 +1,46 @@
+package com.doumee.dao.vo;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/10 15:09
+ */
+@Data
+public class UserCenterVO {
+
+    @ApiModelProperty(value = "鍙戝竷浠诲姟鎬绘暟 - 鍙戝崟鏂逛娇鐢�")
+    private Integer releaseTaskTotal;
+
+    @ApiModelProperty(value = "寰呮帴鍗曚换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
+    private Integer waitReceiveTotal;
+
+    @ApiModelProperty(value = "杩涜涓换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
+    private Integer doingTotal;
+
+    @ApiModelProperty(value = "寰呰瘎浠蜂换鍔℃�绘暟 - 鍙戝崟鏂逛娇鐢�")
+    private Integer waitCommentTotal;
+
+    @ApiModelProperty(value = "杩涜涓换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
+    private Integer taskingTotal;
+
+    @ApiModelProperty(value = "瀹屾垚浠诲姟鏁伴噺 - 鎺ュ崟鏂逛娇鐢�")
+    private Integer doneTotal;
+
+    @ApiModelProperty(value = "宸叉帴鍗曚换鍔℃暟閲� - 鎺ュ崟鏂逛娇鐢�")
+    private Integer receiveTotal;
+
+    @ApiModelProperty(value = "鏈嶅姟浠嬬粛")
+    private String serverIntroduce;
+
+    @ApiModelProperty(value = "鏀惰垂鏍囧噯")
+    private String feeStandards;
+
+    @ApiModelProperty(value = "鍏充簬鎴戜滑")
+    private String aboutUs;
+
+}
diff --git a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java b/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
index 1e0bbbc..e7b811c 100644
--- a/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
+++ b/server/services/src/main/java/com/doumee/service/business/IdentityInfoService.java
@@ -94,4 +94,9 @@
      * @return long
      */
     long count(IdentityInfo identityInfo);
+
+
+    IdentityInfo findByMemberType(Integer type,Integer memberId);
+
+    void updateLocation(IdentityInfo identityInfo);
 }
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 c7080a2..683e5d1 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
@@ -1,9 +1,23 @@
 package com.doumee.service.business;
 
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.doumee.config.wx.WxMiniConfig;
+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.model.Member;
+import com.doumee.dao.dto.WxPhoneRequest;
+import com.doumee.dao.vo.AccountResponse;
+import me.chanjar.weixin.common.error.WxErrorException;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浼氬憳淇℃伅琛⊿ervice瀹氫箟
@@ -94,4 +108,42 @@
      * @return long
      */
     long count(Member member);
+
+
+
+    /***************灏忕▼搴忔帴鍙�*************/
+
+    /**
+     * 鎺堟潈鐧诲綍 鏍规嵁openid鏌ヨ璐﹀彿 濡傛灉鏌ヨ鍒� 鍒欒嚜鍔ㄧ櫥褰�
+     * @param code
+     * @return
+     */
+    AccountResponse wxLogin(String code);
+
+    /**
+     * 鎺堟潈鎵嬫満鍙� 鏍规嵁鎵嬫満鍙锋煡璇㈢敤鎴蜂俊鎭� 濡傛灉鏌ヨ鍒� 杩斿洖鐧诲綍淇℃伅
+     * @param wxPhoneRequest
+     * @return
+     */
+    AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest);
+
+
+    /**
+     * 鏇存柊涓汉淇℃伅
+     * @param member
+     */
+    void editMemberInfo(Member member);
+
+    /**
+     * 鍒囨崲鐢ㄥ伐韬唤
+     * @param member
+     */
+    void editUseIdentity(Member member);
+
+    /**
+     * 涓汉淇℃伅
+     * @param memberId
+     * @return
+     */
+    Member getMemberInfo(Integer memberId);
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
index c017ad6..f7095cb 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/IdentityInfoServiceImpl.java
@@ -1,5 +1,8 @@
 package com.doumee.service.business.impl;
 
+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.core.utils.Utils;
@@ -13,8 +16,11 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 浼氬憳韬唤璁よ瘉淇℃伅琛⊿ervice瀹炵幇
@@ -29,6 +35,30 @@
 
     @Override
     public Integer create(IdentityInfo identityInfo) {
+        if(Objects.isNull(identityInfo)
+        || Objects.isNull(identityInfo.getType())
+        || Objects.isNull(identityInfo.getMemberId())
+        || Objects.isNull(identityInfo.getAuthType())
+                || StringUtils.isEmpty(identityInfo.getLinkName())
+                || StringUtils.isEmpty(identityInfo.getTelephone())
+                || StringUtils.isEmpty(identityInfo.getLocation())
+                || StringUtils.isEmpty(identityInfo.getImg1())
+                || Objects.isNull(identityInfo.getLat())
+                || Objects.isNull(identityInfo.getLgt())
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        //鏌ヨ鐢ㄦ埛鏄惁宸插瓨鍦ㄥ綋鍓嶈韩浠�
+        if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getMemberId,identityInfo.getMemberId())
+                .eq(IdentityInfo::getType,identityInfo.getType()))>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸插瓨鍦ㄨ韬唤璇峰埛鏂版煡鐪嬶紒");
+        };
+        identityInfo.setCreateTime(new Date());
+        identityInfo.setAuditStatus(Constants.ZERO);
         identityInfoMapper.insert(identityInfo);
         return identityInfo.getId();
     }
@@ -54,7 +84,65 @@
 
     @Override
     public void updateById(IdentityInfo identityInfo) {
+        if(Objects.isNull(identityInfo)
+                || Objects.isNull(identityInfo.getId())
+                || Objects.isNull(identityInfo.getType())
+                || Objects.isNull(identityInfo.getMemberId())
+                || Objects.isNull(identityInfo.getAuthType())
+                || StringUtils.isEmpty(identityInfo.getLinkName())
+                || StringUtils.isEmpty(identityInfo.getTelephone())
+                || StringUtils.isEmpty(identityInfo.getLocation())
+                || StringUtils.isEmpty(identityInfo.getImg1())
+                || Objects.isNull(identityInfo.getLat())
+                || Objects.isNull(identityInfo.getLgt())
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getCompanyName()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ZERO) && StringUtils.isEmpty(identityInfo.getImg2()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.ONE) && StringUtils.isEmpty(identityInfo.getImg2()))
+                || (Constants.equalsInteger(identityInfo.getAuthType(),Constants.ONE) && Constants.equalsInteger(identityInfo.getType(),Constants.TWO) && (StringUtils.isEmpty(identityInfo.getImg2())||StringUtils.isEmpty(identityInfo.getImg3())))
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
+        if (Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(!Constants.equalsInteger(model.getAuditStatus(),Constants.THREE)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
+        }
+        identityInfo.setUpdateTime(new Date());
         identityInfoMapper.updateById(identityInfo);
+    }
+
+
+    @Override
+    public void updateLocation(IdentityInfo identityInfo) {
+        if(Objects.isNull(identityInfo)
+                || Objects.isNull(identityInfo.getId())
+                || Objects.isNull(identityInfo.getMemberId())
+                || StringUtils.isEmpty(identityInfo.getLocation())
+                || Objects.isNull(identityInfo.getLat())
+                || Objects.isNull(identityInfo.getLgt())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        IdentityInfo model = identityInfoMapper.selectById(identityInfo.getId());
+        if (Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        if(!Constants.equalsInteger(model.getMemberId(),identityInfo.getMemberId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴偍鐨勬暟鎹棤娉曡繘琛岃鎿嶄綔");
+        }
+        if(!Constants.equalsInteger(model.getAuditStatus(),Constants.TWO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐘舵�佹棤娉曡繘琛岃鎿嶄綔");
+        }
+        model.setLocation(identityInfo.getLocation());
+        model.setLat(identityInfo.getLat());
+        model.setLgt(identityInfo.getLgt());
+        model.setUpdateTime(new Date());
+        identityInfoMapper.updateById(model);
     }
 
     @Override
@@ -69,8 +157,27 @@
 
     @Override
     public IdentityInfo findById(Integer id) {
-        return identityInfoMapper.selectById(id);
+        IdentityInfo identityInfo = identityInfoMapper.selectById(id);
+        //缂哄け鍓嶇紑
+        identityInfo.setPrefix("");
+        return identityInfo;
     }
+
+
+    @Override
+    public IdentityInfo findByMemberType(Integer type,Integer memberId){
+        IdentityInfo identityInfo = identityInfoMapper.selectOne(new QueryWrapper<IdentityInfo>().lambda()
+                .eq(IdentityInfo::getMemberId,memberId).eq(IdentityInfo::getType,type));
+        if(Objects.nonNull(identityInfo)){
+            //缂哄け鍓嶇紑
+            identityInfo.setPrefix("");
+        }else{
+            identityInfo = new IdentityInfo();
+        }
+        return identityInfo;
+    }
+
+
 
     @Override
     public IdentityInfo findOne(IdentityInfo identityInfo) {
@@ -138,27 +245,6 @@
         }
         if (pageWrap.getModel().getLgt() != null) {
             queryWrapper.lambda().eq(IdentityInfo::getLgt, pageWrap.getModel().getLgt());
-        }
-        if (pageWrap.getModel().getIdentityFront() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getIdentityFront, pageWrap.getModel().getIdentityFront());
-        }
-        if (pageWrap.getModel().getIdentityBack() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getIdentityBack, pageWrap.getModel().getIdentityBack());
-        }
-        if (pageWrap.getModel().getBusinessLicense() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getBusinessLicense, pageWrap.getModel().getBusinessLicense());
-        }
-        if (pageWrap.getModel().getOtherFile() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getOtherFile, pageWrap.getModel().getOtherFile());
-        }
-        if (pageWrap.getModel().getTransportFile() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getTransportFile, pageWrap.getModel().getTransportFile());
-        }
-        if (pageWrap.getModel().getFoodBusinessFile() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getFoodBusinessFile, pageWrap.getModel().getFoodBusinessFile());
-        }
-        if (pageWrap.getModel().getHealthFile() != null) {
-            queryWrapper.lambda().eq(IdentityInfo::getHealthFile, pageWrap.getModel().getHealthFile());
         }
         if (pageWrap.getModel().getAuditStatus() != null) {
             queryWrapper.lambda().eq(IdentityInfo::getAuditStatus, pageWrap.getModel().getAuditStatus());
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 8defece..ec42cb3 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
@@ -1,20 +1,45 @@
 package com.doumee.service.business.impl;
 
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.config.wx.WxMiniConfig;
+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.core.utils.Utils;
+import com.doumee.dao.business.IdentityInfoMapper;
 import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.OrdersMapper;
+import com.doumee.dao.business.model.IdentityInfo;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Orders;
+import com.doumee.dao.dto.WxPhoneRequest;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.UserCenterVO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.binarywang.wxpay.service.WxPayService;
+import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
+import io.swagger.annotations.ApiModelProperty;
+import me.chanjar.weixin.common.error.WxErrorException;
+import nonapi.io.github.classgraph.json.Id;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
+import java.util.Random;
+import java.util.stream.Collectors;
 
 /**
  * 浼氬憳淇℃伅琛⊿ervice瀹炵幇
@@ -26,6 +51,18 @@
 
     @Autowired
     private MemberMapper memberMapper;
+
+    @Autowired
+    private IdentityInfoMapper identityInfoMapper;
+
+    @Autowired
+    private OrdersMapper ordersMapper;
+
+    @Autowired
+    private JwtTokenUtil jwtTokenUtil;
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public Integer create(Member member) {
@@ -152,17 +189,11 @@
         if (pageWrap.getModel().getLoginTimes() != null) {
             queryWrapper.lambda().eq(Member::getLoginTimes, pageWrap.getModel().getLoginTimes());
         }
-        if (pageWrap.getModel().getReciveNum() != null) {
-            queryWrapper.lambda().eq(Member::getReciveNum, pageWrap.getModel().getReciveNum());
-        }
         if (pageWrap.getModel().getPublishNum() != null) {
             queryWrapper.lambda().eq(Member::getPublishNum, pageWrap.getModel().getPublishNum());
         }
         if (pageWrap.getModel().getScore() != null) {
             queryWrapper.lambda().eq(Member::getScore, pageWrap.getModel().getScore());
-        }
-        if (pageWrap.getModel().getLocaltion() != null) {
-            queryWrapper.lambda().eq(Member::getLocaltion, pageWrap.getModel().getLocaltion());
         }
         if (pageWrap.getModel().getLat() != null) {
             queryWrapper.lambda().eq(Member::getLat, pageWrap.getModel().getLat());
@@ -179,9 +210,6 @@
         if (pageWrap.getModel().getArea() != null) {
             queryWrapper.lambda().eq(Member::getArea, pageWrap.getModel().getArea());
         }
-        if (pageWrap.getModel().getAutoReciveStatus() != null) {
-            queryWrapper.lambda().eq(Member::getAutoReciveStatus, pageWrap.getModel().getAutoReciveStatus());
-        }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
                 queryWrapper.orderByDesc(sortData.getProperty());
@@ -197,4 +225,174 @@
         QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
         return memberMapper.selectCount(wrapper);
     }
+
+
+    /***************灏忕▼搴忔帴鍙�*************/
+
+
+
+    /**
+     * 寰俊灏忕▼搴忕櫥褰�
+     * @param code
+     * @return
+     */
+    @Override
+    public AccountResponse wxLogin(String code) {
+        if(StringUtils.isBlank(code)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        try {
+            //鑾峰彇寰俊鏁忔劅鏁版嵁
+            WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code);
+            String openId = session.getOpenid();
+            String unionId = session.getUnionid();
+            if (StringUtils.isBlank(openId)) {
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�");
+            }
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().eq("openid", openId).eq("isdeleted", Constants.ZERO).last("limit 1"));
+            AccountResponse accountResponse = new AccountResponse();
+            accountResponse.setOpenid(openId);
+            if(Objects.isNull(member)){
+                return accountResponse;
+            }
+            accountResponse.setToken(jwtTokenUtil.generateToken(member));
+            accountResponse.setMember(member);
+            return accountResponse;
+        } catch (WxErrorException e) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�");
+        }
+    }
+
+
+
+
+    @Override
+    public AccountResponse wxAuthPhone(WxPhoneRequest wxPhoneRequest) {
+        try {
+            if(Objects.isNull(wxPhoneRequest)
+            || StringUtils.isBlank(wxPhoneRequest.getCode())
+            || StringUtils.isBlank(wxPhoneRequest.getOpenid())){
+                throw new BusinessException(ResponseStatus.BAD_REQUEST);
+            }
+            WxMaPhoneNumberInfo userPhoneInfo = WxMiniConfig.wxMaService.getUserService().getPhoneNumber(wxPhoneRequest.getCode());
+            String mobile = userPhoneInfo.getPhoneNumber();
+            if(Objects.isNull(mobile)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈幏鍙栧埌鎵嬫満鍙�");
+            }
+            Member member =  memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getTelephone,mobile).last("limit 1"));
+            member.setOpenid(wxPhoneRequest.getOpenid());
+            if(Objects.nonNull(member)){
+                memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getTelephone,mobile)
+                        .set(Member::getOpenid,wxPhoneRequest.getOpenid()).set(Member::getUpdateTime,new Date()).eq(Member::getId,member.getId()));
+            }else{
+                member = new Member();
+                member.setCreateTime(new Date());
+                member.setDeleted(Constants.ZERO);
+                member.setOpenid(wxPhoneRequest.getOpenid());
+                member.setTelephone(mobile);
+                member.setNickName(mobile);
+                member.setCoverImage("");
+                member.setWorkerIdentity(Constants.ZERO);
+                member.setDriverIdentity(Constants.ZERO);
+                member.setChefIdentity(Constants.ZERO);
+                member.setAmount(Constants.ZERO.longValue());
+                member.setTotalAmount(Constants.ZERO.longValue());
+                member.setStatus(Constants.ZERO);
+                member.setLoginTime(new Date());
+                member.setLoginTimes(Constants.ONE.longValue());
+                member.setReceiveNum(Constants.ZERO.longValue());
+                member.setPublishNum(Constants.ZERO.longValue());
+                member.setAutoReceiveStatus(Constants.ONE);
+                member.setUseIdentity(Constants.ZERO);
+                memberMapper.insert(member);
+            }
+            AccountResponse accountResponse = new AccountResponse();
+            accountResponse.setToken(jwtTokenUtil.generateToken(member));
+            accountResponse.setMember(member);
+            return accountResponse;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈В鏋愬埌鎵嬫満鍙�");
+        }
+    }
+
+
+
+    @Override
+    public void editMemberInfo(Member member){
+        if(Objects.isNull(member)
+            || ( StringUtils.isBlank(member.getCoverImage()) || StringUtils.isBlank(member.getName()) || StringUtils.isBlank(member.getNickName()) || Objects.isNull(member.getAutoReceiveStatus()) )){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .set(StringUtils.isNotBlank(member.getNickName()),Member::getNickName,member.getNickName())
+                .set(StringUtils.isNotBlank(member.getName()),Member::getName,member.getName())
+                .set(StringUtils.isNotBlank(member.getCoverImage()),Member::getCoverImage,member.getCoverImage())
+                .set(Objects.nonNull(member.getAutoReceiveStatus()),Member::getCoverImage,member.getAutoReceiveStatus())
+                        .set(Member::getUpdateTime,new Date())
+                .eq(Member::getId,member.getId()));
+    }
+
+
+    @Override
+    public void editUseIdentity(Member member){
+        if(Objects.isNull(member)
+                || Objects.isNull(member.getUseIdentity())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Constants.equalsInteger(member.getUseIdentity(),Constants.ZERO)){
+            member.setUseIdentity(Constants.ZERO);
+            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ZERO).eq(Member::getId,member.getId()));
+        }else{
+            if(identityInfoMapper.selectCount(new QueryWrapper<IdentityInfo>().lambda().eq(IdentityInfo::getDeleted,Constants.ZERO)
+                    .eq(IdentityInfo::getMemberId,member.getId())
+                    .eq(IdentityInfo::getAuditStatus,Constants.TWO))>Constants.ZERO){
+                memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getUseIdentity,Constants.ONE).eq(Member::getId,member.getId()));
+            }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鏃犲彲鐢ㄦ帴鍗曡韩浠�!");
+            }
+        }
+    }
+
+
+    @Override
+    public Member getMemberInfo(Integer memberId){
+        Member member  = this.findById(memberId);
+        if(Objects.isNull(member)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        UserCenterVO userCenterVO = new UserCenterVO();
+        userCenterVO.setReleaseTaskTotal(Constants.ZERO);
+        userCenterVO.setWaitReceiveTotal(Constants.ZERO);
+        userCenterVO.setDoingTotal(Constants.ZERO);
+        userCenterVO.setWaitCommentTotal(Constants.ZERO);
+        userCenterVO.setTaskingTotal(Constants.ZERO);
+        userCenterVO.setDoneTotal(Constants.ZERO);
+        userCenterVO.setReceiveTotal(Constants.ZERO);
+        List<Orders> releaseOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getReleaseMemberId,member));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(releaseOrders)){
+            userCenterVO.setReleaseTaskTotal(releaseOrders.size());
+            userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
+            userCenterVO.setDoingTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
+            userCenterVO.setWaitCommentTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)&&Constants.equalsInteger(i.getCommentStatus(),Constants.ZERO)).collect(Collectors.toList()).size());
+        }
+        List<Orders> acceptOrders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda().eq(Orders::getDeleted,Constants.ZERO).eq(Orders::getAcceptMemberId,member));
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(acceptOrders)){
+            userCenterVO.setReceiveTotal(acceptOrders.size());
+            userCenterVO.setTaskingTotal(acceptOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.TWO)).collect(Collectors.toList()).size());
+            userCenterVO.setDoneTotal(releaseOrders.stream().filter(i->Constants.equalsInteger(i.getStatus(),Constants.THREE)).collect(Collectors.toList()).size());
+        }
+
+        userCenterVO.setAboutUs(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ABOUT_US).getCode()));
+        userCenterVO.setFeeStandards(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.FEE_STANDARDS).getCode()));
+        userCenterVO.setServerIntroduce(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SERVER_INTRODUCE).getCode()));
+        member.setUserCenterVO(userCenterVO);
+        return member;
+    }
+
+
+
+
+
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 36a4040..73c6b13 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -1,5 +1,8 @@
 package com.doumee.service.business.impl;
 
+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.core.utils.Utils;
@@ -10,11 +13,14 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import jodd.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 璁㈠崟淇℃伅璁板綍Service瀹炵幇
@@ -29,9 +35,44 @@
 
     @Override
     public Integer create(Orders orders) {
+
+
         ordersMapper.insert(orders);
         return orders.getId();
     }
+
+
+
+    public void initVerification(Orders orders){
+        if(Objects.isNull(orders)
+                || Objects.isNull(orders.getType())
+                || Objects.isNull(orders.getStartDate())
+                || Objects.isNull(orders.getEndDate())
+                || StringUtil.isBlank(orders.getLocation())
+                || StringUtil.isBlank(orders.getLocationRemark())
+                || Objects.isNull(orders.getLat())
+                || Objects.isNull(orders.getLgt())
+                || Objects.isNull(orders.getCategoryId())
+                || (Constants.equalsInteger(orders.getType(),Constants.ZERO) && Objects.isNull(orders.getWorkType()))
+                || Objects.isNull(orders.getPriceNum1())
+                || (!( Constants.equalsInteger(orders.getType(),Constants.ZERO)
+                && Constants.equalsInteger(orders.getWorkType(),Constants.TWO) ) && Objects.isNull(orders.getPrice()) )
+                || ( Constants.equalsInteger(orders.getType(),Constants.ONE) && Objects.isNull(orders.getTransportTypeId()) )
+
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+
+        if(Constants.equalsInteger(orders.getType(),Constants.ONE)){
+
+
+        }
+
+
+    }
+
+
+
 
     @Override
     public void deleteById(Integer id) {
@@ -171,9 +212,6 @@
         if (pageWrap.getModel().getPayAccount() != null) {
             queryWrapper.lambda().eq(Orders::getPayAccount, pageWrap.getModel().getPayAccount());
         }
-        if (pageWrap.getModel().getReviceAccount() != null) {
-            queryWrapper.lambda().eq(Orders::getReviceAccount, pageWrap.getModel().getReviceAccount());
-        }
         if (pageWrap.getModel().getPriceRemark() != null) {
             queryWrapper.lambda().eq(Orders::getPriceRemark, pageWrap.getModel().getPriceRemark());
         }
@@ -253,9 +291,6 @@
         }
         if (pageWrap.getModel().getIsUpdate() != null) {
             queryWrapper.lambda().eq(Orders::getIsUpdate, pageWrap.getModel().getIsUpdate());
-        }
-        if (pageWrap.getModel().getBlackRecive() != null) {
-            queryWrapper.lambda().eq(Orders::getBlackRecive, pageWrap.getModel().getBlackRecive());
         }
         for(PageWrap.SortData sortData: pageWrap.getSorts()) {
             if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
new file mode 100644
index 0000000..66c5721
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -0,0 +1,58 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.dto.WxPhoneRequest;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.service.business.MemberService;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/10 9:29
+ */
+@Api(tags = "1銆佺櫥褰曚笟鍔�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/account")
+@Slf4j
+public class AccountApi extends  ApiController{
+
+
+    @Autowired
+    private MemberService memberService;
+
+
+    @Trace
+    @ApiOperation(value = "寰俊鎺堟潈", notes = "灏忕▼搴忕")
+    @GetMapping("/wxLogin")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "寰俊code", required = true)
+    })
+    public ApiResponse<AccountResponse> wxLogin(@RequestParam String code) {
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",memberService.wxLogin(code));
+    }
+
+
+    @ApiOperation(value = "鎺堟潈鎵嬫満鍙�", notes = "灏忕▼搴忕")
+    @PostMapping("/wxAuthPhone")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "寰俊code", required = true)
+    })
+    public ApiResponse<AccountResponse> wxAuthPhone(@RequestBody WxPhoneRequest wxPhoneRequest) {
+        return  ApiResponse.success("鎿嶄綔鎴愬姛",memberService.wxAuthPhone(wxPhoneRequest));
+    }
+
+
+
+}
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
new file mode 100644
index 0000000..56227eb
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/ApiController.java
@@ -0,0 +1,52 @@
+package com.doumee.api.web;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.dao.business.model.Member;
+import com.doumee.service.business.MemberService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Controller鍩虹被
+ * @author Eva.Caesar Liu
+ * @date 2022/03/15 09:54
+ */
+@Slf4j
+@Service
+public class ApiController {
+
+    /**
+     * 寰楀埌request瀵硅薄
+     *
+     * @return
+     */
+    public HttpServletRequest getRequest() {
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        return request;
+    }
+
+
+    protected Integer getMemberId() {
+        Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_ID);
+        return obj != null ? (Integer) obj : null;
+    }
+
+    /**
+     * 鑾峰彇鐧诲綍鐢ㄦ埛瀵硅薄淇℃伅
+     * @return
+     */
+    protected Member getMemberResponse(){
+        Object obj = this.getRequest().getAttribute(JwtTokenUtil.MEMBER_INFO);
+        if(obj != null){
+            return JSONObject.parseObject(obj.toString(),Member.class);
+        }
+        return null;
+    }
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/OrdersApi.java b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
new file mode 100644
index 0000000..dac3322
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/OrdersApi.java
@@ -0,0 +1,51 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.IdentityInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.service.business.IdentityInfoService;
+import com.doumee.service.business.MemberService;
+import com.doumee.service.business.OrdersService;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/10 9:29
+ */
+@Api(tags = "1銆佽鍗曚笟鍔�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/orders")
+@Slf4j
+public class OrdersApi extends  ApiController{
+
+
+    @Autowired
+    private MemberService memberService;
+
+    @Autowired
+    private OrdersService ordersService;
+
+    @LoginRequired
+    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
+    @GetMapping("/getMemberInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Member> getMemberInfo() {
+        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
+    }
+
+
+
+}
diff --git a/server/web/src/main/java/com/doumee/api/web/UserApi.java b/server/web/src/main/java/com/doumee/api/web/UserApi.java
new file mode 100644
index 0000000..fea1b3d
--- /dev/null
+++ b/server/web/src/main/java/com/doumee/api/web/UserApi.java
@@ -0,0 +1,127 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.LoginRequired;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.business.model.IdentityInfo;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.dto.WxPhoneRequest;
+import com.doumee.dao.vo.AccountResponse;
+import com.doumee.service.business.IdentityInfoService;
+import com.doumee.service.business.MemberService;
+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.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2025/7/10 9:29
+ */
+@Api(tags = "2銆佺敤鎴蜂俊鎭�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/user")
+@Slf4j
+public class UserApi extends  ApiController{
+
+
+    @Autowired
+    private MemberService memberService;
+
+    @Autowired
+    private IdentityInfoService identityInfoService;
+
+    @LoginRequired
+    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
+    @GetMapping("/getMemberInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<Member> getMemberInfo() {
+        return  ApiResponse.success("鏌ヨ鎴愬姛",memberService.getMemberInfo(getMemberId()));
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "缂栬緫涓汉淇℃伅", notes = "灏忕▼搴忕")
+    @PostMapping("/editMemberInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse editMemberInfo(@RequestBody Member member) {
+        member.setId(getMemberId());
+        memberService.editMemberInfo(member);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+    @LoginRequired
+    @ApiOperation(value = "鍒囨崲鐢ㄥ伐韬唤", notes = "灏忕▼搴忕")
+    @PostMapping("/editUseIdentity")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse editUseIdentity(@RequestBody Member member) {
+        member.setId(getMemberId());
+        memberService.editUseIdentity(member);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+
+    @LoginRequired
+    @ApiOperation(value = "鑾峰彇韬唤璁よ瘉淇℃伅", notes = "灏忕▼搴忕")
+    @GetMapping("/getIdentityInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse<IdentityInfo> getIdentityInfo(@RequestParam Integer type) {
+        return  ApiResponse.success("鏌ヨ鎴愬姛",identityInfoService.findByMemberType(type,getMemberId()));
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "鐢宠韬唤淇℃伅", notes = "灏忕▼搴忕")
+    @PostMapping("/applyForIdentity")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse applyForIdentity(@RequestBody IdentityInfo identityInfo) {
+        identityInfo.setMemberId(getMemberId());
+        identityInfoService.create(identityInfo);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+
+    @LoginRequired
+    @ApiOperation(value = "淇敼韬唤淇℃伅锛堣璇佸け璐ュ悗浣跨敤锛�", notes = "灏忕▼搴忕")
+    @PostMapping("/updateIdentity")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateIdentity(@RequestBody IdentityInfo identityInfo) {
+        identityInfo.setMemberId(getMemberId());
+        identityInfoService.updateById(identityInfo);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @LoginRequired
+    @ApiOperation(value = "淇敼韬唤淇℃伅浣嶇疆锛堣璇佹垚鍔熷悗浣跨敤锛�", notes = "灏忕▼搴忕")
+    @PostMapping("/updateLocation")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
+    public ApiResponse updateLocation(@RequestBody IdentityInfo identityInfo) {
+        identityInfo.setMemberId(getMemberId());
+        identityInfoService.updateLocation(identityInfo);
+        return  ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+}

--
Gitblit v1.9.3