From fc17a98e0bd076bd69d2418ec7c5d61e8a54f8bb Mon Sep 17 00:00:00 2001
From: k94314517 <8417338+k94314517@user.noreply.gitee.com>
Date: 星期四, 07 十二月 2023 15:24:41 +0800
Subject: [PATCH] 11111

---
 server/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java                          |   19 
 server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java                                |   72 +++
 server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java              |   23 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemLogService.java          |    9 
 server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java                           |    2 
 server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java                          |   73 +++
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java              |   18 
 server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java                       |   47 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java     |   52 ++
 server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java                        |  652 ++++++++++++++++++++++++++++++++
 server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java            |   10 
 server/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java                 |   43 ++
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java   |   27 +
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java |   60 +++
 server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/FinishAnswerDTO.java             |   34 +
 15 files changed, 1,141 insertions(+), 0 deletions(-)

diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
index 924cb84..1fce4da 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -113,6 +113,15 @@
 
 
 
+    public static final String WX_PLATFORM = "WX_PLATFORM";
+    public static final String WX_PLATFORM_ACCESS_TOKEN = "WX_PLATFORM_ACCESS_TOKEN";
+    public static final String WX_PLATFORM_APPID = "WX_PLATFORM_APPID";
+    public static final String WX_PLATFORM_SECRET = "WX_PLATFORM_SECRET";
+
+
+
+
+
 
     public interface RedisKeys {
         public static final String GOODSORDER_KEY = "ordercode_";
@@ -170,9 +179,652 @@
         return d.longValue();
     }
 
+public interface  UserRelObjType{
+      int objTypeRoom = 0;
+      int objTypeBook = 1;
+}
+public interface  RoomRecordObjType{
+      int objTypeRoom = 0;//绠$悊鍛樺紑闂�
+      int objTypeBook_in = 1;//鍙備細浜哄憳寮�闂�
+      int objTypeBook_out = 2;//璁垮寮�闂�
+}
+public interface  memberType{
+    int visitor = 0;//鏅�氳瀹�
+    int lw_visitor = 1;//鍔冲姟璁垮
+    int internal = 2;//鍐呴儴浜哄憳
+}
     public static void main(String[] args) {
         String t = URLDecoder.decode("https://lsqw.gtja.com/qwcos/v-index.html#/loginforProperty?corpId=ww4b7aefafeb430e4b&corpId=ww4b7aefafeb430e4b&agentId=1000005&agentId=1000005&fromRoute=&userCode=013561&userCode=&userId=zz&userId=&encryptUserCode=&custQwId=wmIUuSDgAAR8MhtVY8w90EyKltvoK5fA&custCode=&openId=op1wZwD1dKuBQywmWWS5957zUOJI&name=%E8%B9%84%E8%B9%84&headUrl=http%3A%2F%2Fwx.qlogo.cn%2Fmmhead%2FQ3auHgzwzM4QlibSOAvYcvRMdsoyF3Ua7duLOYSJfB3dsGsYxIYonBw%2F0&dbHeadUrl=https%3A%2F%2Ftgf.gtja.com%2Ff%2F%2Fqwoms%2F2022512%2Fqwoms_1652332606613_8.jpg");
         System.out.println(t);
     }
 
+
+    /**
+     * 鐢ㄦ埛绫诲瀷
+     */
+    public  enum UserType {
+
+        SYSTEM(0, "绯荤粺鐢ㄦ埛", "绠$悊鍛�",Arrays.asList(0)),
+        ORG(1, "鏈烘瀯", "鏈烘瀯",Arrays.asList(1)),
+        CREATION(2, "鍒涗綔涓績", "鍒涗綔涓績",Arrays.asList(2))
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private List<Integer> historyStatus;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        UserType(int key, String name, String noteinfo,List<Integer> historyStatus) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+            this.historyStatus=historyStatus;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (UserType c : UserType.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (UserType c : UserType.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+        // 鏅�氭柟娉�
+        public static List<Integer> getHistoryStatus(int index) {
+            for (UserType c : UserType.values()) {
+                if (c.getKey() == index) {
+                    return c.historyStatus;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+        public List<Integer> getHistoryStatus() {
+            return historyStatus;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+
+    /**
+     * 鏁版嵁鐘舵�佹灇涓�
+     *
+     */
+    public enum Status {
+
+        /** 鐢ㄦ埛鍚敤绂佺敤鏋氫妇鍊�*/
+        ENABLE(0,"姝e父"),
+        DISABLE(1,"绂佺敤");
+
+        private  Integer value;
+        private  String des;
+
+
+        Status(Integer value, String des) {
+            this.value = value;
+            this.des = des;
+        }
+
+        public Integer getValue() {
+            return value;
+        }
+
+        public void setValue(Integer value) {
+            this.value = value;
+        }
+
+        public String getDes() {
+            return des;
+        }
+
+        public void setDes(String des) {
+            this.des = des;
+        }
+    }
+
+
+    /**
+     * 鍏宠仈瀵硅薄绫诲瀷 0娲诲姩杞挱鍥� 1娲诲姩璇︽儏鍥� 2闂ㄥ簵璇勪环3璁㈠崟璇勪环 4骞冲彴鍟嗗搧杞挱 5鎺㈠簵澶氬浘 6搴楅摵鏂伴矞浜嬪鍥� 7鍟嗗鍥剧墖澶氬浘
+     */
+    public  enum MultiFile{
+        ACTIVITY_ROTATION(0, "娲诲姩杞挱鍥�", "娲诲姩杞挱鍥�"),
+        ACTIVITY_DETAIL(1, "娲诲姩璇︽儏鍥�", "娲诲姩璇︽儏鍥�"),
+        SHOP_APPRAISE(2, "闂ㄥ簵璇勪环", "闂ㄥ簵璇勪环"),
+        ORDER_APPRAISE(3, "璁㈠崟璇勪环", "璁㈠崟璇勪环"),
+        PLATFORM_GOOD_ROTATION(4, "骞冲彴鍟嗗搧杞挱", "骞冲彴鍟嗗搧杞挱"),
+        TANDIAN_PICTURE(5, "鎺㈠簵澶氬浘", "鎺㈠簵澶氬浘"),
+        SHOP_HOT_PICTURE(6, "搴楅摵鏂伴矞浜嬪鍥�", "搴楅摵鏂伴矞浜嬪鍥�"),
+        SHOP_PICTURE(7, "鍟嗗鍥剧墖澶氬浘", "鍟嗗鍥剧墖澶氬浘"),
+        AFTERSALE_APPLY(8, "鐢宠鍞悗琛ュ厖璇存槑闄勪欢", "鐢宠鍞悗琛ュ厖璇存槑闄勪欢"),
+        AFTERSALE_KD(9, "鐢宠鍞悗閭瘎璇存槑闄勪欢", "鐢宠鍞悗閭瘎璇存槑闄勪欢"),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        MultiFile(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (MultiFile c : MultiFile.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+
+
+
+    /**
+     * 璁㈠崟绠$悊
+     * 鐘舵�� 0鐢宠涓� 1宸叉敮浠�  2宸插彇娑�
+     */
+    public  enum ActivitySignupStatus{
+        APPLY_ING(0, "鐢宠涓�", "鐢宠涓�"),
+        PAY_DONE(1, "宸叉敮浠�", "宸叉敮浠�"),
+        CANCEL(2, "宸插彇娑�", "宸插彇娑�"),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        ActivitySignupStatus(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (ActivitySignupStatus c : ActivitySignupStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (ActivitySignupStatus c : ActivitySignupStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+
+    /**
+     * 鍞悗鐘舵��
+     * 鐘舵�� 0寰呭鐞� 1寰呴偖瀵� 2宸插瘎鍑� 3鍟嗗宸查��娆� 4鍟嗗宸插彂璐�5鍞悗宸插畬鎴�6鍟嗗鎷掔粷 7宸插彇娑�
+     */
+    public  enum AftersaleStatus{
+        APPLY_ING(0, "寰呭鐞�", "寰呭鐞�"),
+        WAIT_SEND(1, "寰呴偖瀵�", "寰呴偖瀵�"),
+        SENDED(2, "瀹㈡埛宸插瘎鍑�", "瀹㈡埛宸插瘎鍑�"),
+        REFUND(3, "宸查��娆�", "宸查��娆�"),
+        SHOP_SENDED(4, "骞冲彴宸插彂璐�", "骞冲彴宸插彂璐�"),
+        DONE(5, "鍞悗宸插畬鎴�", "鍞悗宸插畬鎴�"),
+        SHOP_REFUSE(6, "宸叉嫆缁�", "骞冲彴鎷掔粷"),
+        CANCEL(7, "宸插彇娑�", "瀹㈡埛鍙栨秷鍞悗"),
+
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        AftersaleStatus(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (AftersaleStatus c : AftersaleStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (AftersaleStatus c : AftersaleStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+    /**
+     * 鍞悗绫诲瀷
+     *  鍞悗绫诲瀷 0閫�娆� 1閫�璐ч��娆� 2鎹㈣揣
+     */
+    public  enum AftersaleType{
+        TK(0, "閫�娆�", "閫�娆�"),
+        THTK(1, "閫�璐ч��娆�", "閫�璐ч��娆�"),
+        HH(2, "鎹㈣揣", "鎹㈣揣"),
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        AftersaleType(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (AftersaleType c : AftersaleType.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (AftersaleType c : AftersaleType.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+    /**
+     * 璁㈠崟绠$悊
+     * 鐘舵�� 0寰呮敮浠� 1寰呭彂璐� 2寰呮敹璐� 3浜ゆ槗瀹屾垚 4宸插叧闂� 5閮ㄥ垎鍙戣揣
+     */
+    public  enum OrderStatus{
+        WAIT_PAY(0, "寰呮敮浠�", "寰呮敮浠�"),
+        PAY_DONE(1, "寰呭彂璐�", "宸叉敮浠樹唬鍙戣揣"),
+        WAIT_RECEIVE(2, "寰呮敹璐�", "宸插彂璐у緟鏀惰揣"),
+        DONE(3, "浜ゆ槗瀹屾垚", "浜ゆ槗瀹屾垚"),
+        CLOSE(4, "宸插叧闂�", "宸插叧闂�"),
+        PART_DONE(5, "閮ㄥ垎鍙戣揣", "閮ㄥ垎鍙戣揣"),
+
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        OrderStatus(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (OrderStatus c : OrderStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (OrderStatus c : OrderStatus.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+
+
+    /**
+     * 璁㈠崟绫诲瀷
+     *  璁㈠崟绫诲瀷 0骞冲彴鍟嗗煄 1鍜栬眴鍟嗗煄 2鍜栧暋璁″垝缂栫爜
+     */
+    public  enum OrderType{
+        ADMINPLAT(0, "骞冲彴鍟嗗煄 ", "骞冲彴鍟嗗煄 "),
+        KADOUPLAT(1, "鍜栬眴鍟嗗煄", "鍜栬眴鍟嗗煄"),
+        COFFERPLAN(2, "2鍜栧暋璁″垝缂栫爜", "2鍜栧暋璁″垝缂栫爜")
+
+
+        ;
+        // 鎴愬憳鍙橀噺
+        private String name;
+        private int key;
+        private String noteinfo;// 鎻忚堪
+
+        // 鏋勯�犳柟娉�
+        OrderType(int key, String name, String noteinfo) {
+            this.name = name;
+            this.key = key;
+            this.noteinfo = noteinfo;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getName(int index) {
+            for (OrderType c : OrderType.values()) {
+                if (c.getKey() == index) {
+                    return c.name;
+                }
+            }
+            return null;
+        }
+
+        // 鏅�氭柟娉�
+        public static String getInfo(int index) {
+            for (OrderType c : OrderType.values()) {
+                if (c.getKey() == index) {
+                    return c.noteinfo;
+                }
+            }
+            return null;
+        }
+
+        // get set 鏂规硶
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getKey() {
+            return key;
+        }
+
+        public void setKey(int key) {
+            this.key = key;
+        }
+
+        public String getNoteinfo() {
+            return noteinfo;
+        }
+
+    }
+
+    public enum ShareType{
+//    0娲诲姩1鎺㈠簵2鍜ㄨ3搴楅摵 4鍟嗗搧5鍒嗕韩閭�璇锋捣鎶�
+        SHARE_ACTIVITY_ACTIVITY(0,"娲诲姩","娲诲姩"),
+        SHARE_ACTIVITY_VISITSHOP(1,"鎺㈠簵","鍜ㄨ"),
+        SHARE_ACTIVITY_NEW(2,"鍜ㄨ","鍜ㄨ"),
+        SHARE_SHOP(3,"搴楅摵","搴楅摵" ),
+        SHARE_GOODS(4,"鍟嗗搧","鍟嗗搧"),
+        SHARE_POSTER(5,"鍒嗕韩閭�璇锋捣鎶�","鍒嗕韩閭�璇锋捣鎶�")
+
+        ;
+        private Integer key;
+
+        private String name;
+
+        private String des;
+
+        ShareType(Integer key, String name, String des) {
+            this.key = key;
+            this.name = name;
+            this.des = des;
+        }
+
+        public Integer getKey() {
+            return key;
+        }
+
+        public void setKey(Integer key) {
+            this.key = key;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getDes() {
+            return des;
+        }
+
+        public void setDes(String des) {
+            this.des = des;
+        }
+    }
+
+    /**
+     * 鍜栬眴浠诲姟
+     */
+    public enum CoffeeBeanTask{
+
+        SIGN_BOARD(1,"SIGN_BOARD","姣忔棩绛惧埌"),
+        SHARE_INFO(6,"SHARE_INFO","鍒嗕韩璧勮"),
+        SHARE_INVITE_BILL(2,"SHARE_INVITE_BILL","鍒嗕韩閭�璇锋捣鎶�"),
+        INVITE_USER_LOGIN(3,"INVITE_USER_LOGIN","閭�璇锋柊鐢ㄦ埛娉ㄥ唽"),
+        EXCHANGE_GOODS(4,"INVITE_USER_LOGIN","鍏戞崲鍟嗗搧"),
+        EXCHANGE_COUPON(5,"INVITE_USER_LOGIN","鍏戞崲浼樻儬鍒�"),
+        POST_COMMENTS(7,"POST_COMMENTS","鍙戝竷璇勮"),
+        COFFEE_MAP_CONSUME(8,"COFFEE_MAP_CONSUME","鍜栧暋鍦板浘娑堣垂"),
+        ;
+
+        //  0骞冲彴娉ㄥ唽 1绛惧埌 2鍒嗕韩閭�璇� 3閭�璇锋柊鐢ㄦ埛 4鍏戞崲鍟嗗搧 5鍏戞崲浼樻儬鍒�
+        // 鎴愬憳鍙橀噺
+        private Integer key;
+
+        private String name;
+
+        private String des;// 鎻忚堪
+
+        CoffeeBeanTask(Integer key, String name, String des) {
+            this.key = key;
+            this.name = name;
+            this.des = des;
+        }
+
+        public Integer getKey() {
+            return key;
+        }
+
+        public void setKey(Integer key) {
+            this.key = key;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getDes() {
+            return des;
+        }
+
+        public void setDes(String des) {
+            this.des = des;
+        }
+    }
+
+
+
+    public enum NoticeType{
+
+//        0璁㈠崟閫氱煡 1绯荤粺娑堟伅 2浜掑姩娑堟伅 3浼樻儬鍒告彁閱� 4瀹樻柟瀹㈡湇 5娲诲姩鎺ㄨ崘 6鎴戠殑鍏虫敞
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java
new file mode 100644
index 0000000..d2e0d23
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/core/wx/WXConstant.java
@@ -0,0 +1,19 @@
+package com.doumee.core.wx;
+
+/**
+ * 鍏紬鍙锋帴鍙e湴鍧�绫�
+ *
+ * @Author : Rk
+ * @create 2023/12/7 10:42
+ */
+public class WXConstant {
+
+    //鑾峰彇鍏紬鍙� access_token
+    public static final String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
+
+    //鑾峰彇鐢ㄦ埛淇℃伅
+    public static final String GET_USER_INFO_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+
+
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/FinishAnswerDTO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/FinishAnswerDTO.java
new file mode 100644
index 0000000..a63e42d
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/reqeust/FinishAnswerDTO.java
@@ -0,0 +1,34 @@
+package com.doumee.dao.web.reqeust;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class FinishAnswerDTO {
+
+    @NotBlank(message = "绛旈鏄庣粏涓虹┖")
+    @ApiModelProperty(value = "绛旈鏄庣粏锛坖son锛�")
+    private String content;
+
+    @NotNull(message = "浣跨敤鍦烘櫙涓虹┖")
+    @ApiModelProperty(value = "浣跨敤鍦烘櫙 0鍔冲姟浜哄憳 1鏅�氳瀹�")
+    private Integer useType;
+
+    @ApiModelProperty(value = "璁垮缂栫爜")
+    private String userId;
+
+    @ApiModelProperty(value = "鐢ㄦ埛openId")
+    private String openId;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java
new file mode 100644
index 0000000..28424f1
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/ProblemsVO.java
@@ -0,0 +1,43 @@
+package com.doumee.dao.web.response;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class ProblemsVO {
+
+    @ApiModelProperty(value = "涓婚敭", example = "1")
+    private Integer id;
+
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    @ApiModelProperty(value = "棰樼洰")
+    private String title;
+
+    @ApiModelProperty(value = "閫夐」闆嗗悎")
+    private String options;
+
+    @ApiModelProperty(value = "姝g‘绛旀")
+    private String answer;
+
+    @ApiModelProperty(value = "绫诲瀷 0鍗曢�� 1澶氶�� ", example = "1")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍒嗗��", example = "1")
+    private BigDecimal score;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java
new file mode 100644
index 0000000..8126fb4
--- /dev/null
+++ b/server/dmvisit_service/src/main/java/com/doumee/dao/web/response/WxAuthorizeVO.java
@@ -0,0 +1,18 @@
+package com.doumee.dao.web.response;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 11:19
+ */
+@Data
+public class WxAuthorizeVO {
+
+    @ApiModelProperty(value = "鎺堟潈OPENID")
+    private String openid;
+
+}
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index eafa71a..8a281a4 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -7,6 +7,8 @@
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.response.MemberInfoDTO;
 import com.doumee.dao.business.model.Member;
+import com.doumee.dao.web.response.WxAuthorizeVO;
+
 import java.util.List;
 
 /**
@@ -132,4 +134,25 @@
      * @return
      */
     void importMemberBatch(LaborEmpowerDTO laborEmpowerDTO);
+
+
+
+
+    /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
+
+
+    /**
+     * 寰俊鎺堟潈鎺ュ彛
+     * @param code
+     * @return
+     */
+    WxAuthorizeVO wxAuthorize(String code);
+
+
+
+
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemLogService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemLogService.java
index 2f41635..7604164 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemLogService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemLogService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.ProblemLog;
+import com.doumee.dao.web.reqeust.FinishAnswerDTO;
+
 import java.util.List;
 
 /**
@@ -94,4 +96,11 @@
      * @return long
      */
     long count(ProblemLog problemLog);
+
+    /**
+     * 淇濆瓨绛旈璁板綍
+     * @param finishAnswerDTO
+     * @return
+     */
+    Integer finishAnswer(FinishAnswerDTO finishAnswerDTO);
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java
index 57bf207..8ce4763 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/ProblemsService.java
@@ -3,6 +3,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.Problems;
+import com.doumee.dao.web.response.ProblemsVO;
+
 import java.util.List;
 
 /**
@@ -95,6 +97,14 @@
      */
     long count(Problems problems);
 
+
+    /**
+     * 鑾峰彇棰樼洰淇℃伅
+     * @param useType
+     * @return
+     */
+    List<ProblemsVO> getProblemsVO(Integer useType);
+
     /**
      * 鑾峰彇涓嶅悓鐢ㄦ埛绫诲瀷鐨勯鐩�
      * @param useType
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 8dca011..fd71f8c 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -4,6 +4,10 @@
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.PhoneUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.config.Jwt.JwtPayLoad;
+import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -11,7 +15,9 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.core.wx.WXConstant;
 import com.doumee.dao.admin.request.LaborEmpowerDTO;
 import com.doumee.dao.admin.request.LaborMemberDTO;
 import com.doumee.dao.admin.response.MemberInfoDTO;
@@ -22,6 +28,7 @@
 import com.doumee.dao.business.model.Empower;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.TrainTime;
+import com.doumee.dao.web.response.WxAuthorizeVO;
 import com.doumee.service.business.MemberService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -54,6 +61,10 @@
 
     @Autowired
     private TrainTimeMapper trainTimeMapper;
+
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
 
     @Override
     public Integer create(Member member) {
@@ -371,4 +382,45 @@
 //
 
     }
+
+
+
+
+    /********************************************鍏紬鍙锋帴鍙�***********************************************************************/
+
+
+
+    /**
+     * 寰俊鎺堟潈鎺ュ彛
+     * @param code
+     * @return
+     */
+    @Override
+    public WxAuthorizeVO wxAuthorize(String code){
+        String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
+        String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
+        String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code)
+                .replace("APPID", appId).replace("SECRET", appSecret);
+        JSONObject tokenJson = JSONObject.parseObject(HttpsUtil.get(getTokenUrl,true));
+        String openId = null;
+        if(!Objects.isNull(tokenJson.get("access_token"))){
+            openId = tokenJson.getString("openid");
+        }
+        WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
+        wxAuthorizeVO.setOpenid(openId);
+        return wxAuthorizeVO;
+    }
+
+
+
+
+
+
+
+
+
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
index e5a37f1..1d303c3 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -1,20 +1,33 @@
 package com.doumee.service.business.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+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.Constants;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CompanyMapper;
+import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.ProblemLogMapper;
+import com.doumee.dao.business.model.Company;
+import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.ProblemLog;
+import com.doumee.dao.web.reqeust.FinishAnswerDTO;
 import com.doumee.service.business.ProblemLogService;
 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 org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
 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;
 
 /**
  * 璁垮绛旈璁板綍琛⊿ervice瀹炵幇
@@ -26,6 +39,12 @@
 
     @Autowired
     private ProblemLogMapper problemLogMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
+
+    @Autowired
+    private CompanyMapper companyMapper;
 
     @Override
     public Integer create(ProblemLog problemLog) {
@@ -157,4 +176,45 @@
         QueryWrapper<ProblemLog> wrapper = new QueryWrapper<>(problemLog);
         return problemLogMapper.selectCount(wrapper);
     }
+
+
+    /**
+     * 淇濆瓨绛旈璁板綍
+     * @param finishAnswerDTO
+     * @return
+     */
+    @Override
+    public Integer finishAnswer(FinishAnswerDTO finishAnswerDTO){
+        ProblemLog problemLog = new ProblemLog();
+        BeanUtils.copyProperties(finishAnswerDTO,problemLog);
+        problemLog.setCreateDate(new Date());
+        problemLog.setIsdeleted(Constants.ZERO);
+        problemLog.setStatus(Constants.ZERO);
+        if(finishAnswerDTO.getUseType().equals(Constants.ZERO)&&StringUtils.isNotBlank(finishAnswerDTO.getUserId())){
+            Member member = memberMapper.selectById(finishAnswerDTO.getUserId());
+            if(Objects.isNull(member)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍔冲姟浜哄憳");
+            }
+            if(!member.getType().equals(Constants.memberType.lw_visitor)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲姵鍔′汉鍛樼被鍨嬶紝绛旈澶辫触");
+            }
+            if(!member.getStatus().equals(Constants.ZERO)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璐﹀彿宸茬粡" + (member.getStatus().equals(Constants.ONE)?"绂佺敤":"鎷夐粦/鍒犻櫎") );
+            }
+            problemLog.setName(member.getName());
+            problemLog.setPhone(member.getPhone());
+            problemLog.setCompanyId(member.getCompanyId());
+            Company company = companyMapper.selectById(member.getCompanyId());
+            if(Objects.isNull(company)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍔冲姟浜哄憳鍏徃");
+            }
+            problemLog.setCompanyName(company.getName());
+        }
+        this.problemLogMapper.insert(problemLog);
+        return problemLog.getId();
+    }
+
+
+
+
 }
diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java
index 532bac6..836e413 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemsServiceImpl.java
@@ -2,18 +2,22 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.ProblemsMapper;
 import com.doumee.dao.business.model.Problems;
+import com.doumee.dao.web.response.ProblemsVO;
 import com.doumee.service.business.ProblemsService;
 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 org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -149,4 +153,27 @@
 
         return null;
     }
+
+
+    /**
+     * 鑾峰彇棰樼洰淇℃伅
+     * @param useType
+     * @return
+     */
+    @Override
+    public List<ProblemsVO> getProblemsVO(Integer useType){
+        List<Problems> problemsList = problemsMapper.selectList(new QueryWrapper<Problems>().lambda().eq(Problems::getUseType,useType)
+                .eq(Problems::getIsdeleted, Constants.ZERO).orderByAsc(Problems::getSortnu));
+        List<ProblemsVO> problemsVOList = new ArrayList<>();
+        for (Problems problems:problemsList) {
+            ProblemsVO problemsVO = new ProblemsVO();
+            BeanUtils.copyProperties(problems,problemsVO);
+            problemsVOList.add(problemsVO);
+        }
+        return problemsVOList;
+    }
+
+
+
+
 }
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java b/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java
new file mode 100644
index 0000000..63d5a5a
--- /dev/null
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/ScheduleTool.java
@@ -0,0 +1,72 @@
+package com.doumee.api;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.core.wx.WXConstant;
+import com.doumee.dao.system.model.SystemDictData;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Date;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * 瀹氭椂浠诲姟
+ * @author jiangping
+ * @date 2021-10-10 14:40:35
+ * https://www.bejson.com/othertools/cron/  cron 琛ㄨ揪寮忕敓鎴愬湴鍧�
+ */
+@Slf4j
+@Component
+@EnableScheduling
+public class ScheduleTool {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    /**
+     * 鏄惁寮�鍙戣��
+     */
+    @Value("${timing}")
+    private Boolean timing;
+
+    /**
+     * 鏇存柊寰俊鍏紬鍙� ACCESS_TOKEN
+     * @throws Exception
+     */
+    @Scheduled(fixedDelay=1000 * 60 * 90)
+    public void updAccessToken(){
+        String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
+        String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
+        //鐢熸垚寰俊token
+        String url = WXConstant.GET_ACCESS_TOKEN_URL.replace("APPID",appId).replace("APPSECRET",appSecret);
+        String response = HttpsUtil.get(url,false);
+        JSONObject json = JSONObject.parseObject(response);
+        SystemDictData systemDictData =  systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN);
+        if(!Objects.isNull(systemDictData)){
+            systemDictData.setCode(json.getString("access_token"));
+            systemDictData.setUpdateTime(new Date());
+            systemDictDataBiz.updateByIdNew(systemDictData);
+            log.info(" 鏇存柊寰俊鍏紬鍙� ACCESS_TOKEN =========> " + systemDictData.getCode() );
+        }
+    }
+
+
+
+}
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
index e7703c9..6f33b73 100644
--- a/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/ApiController.java
@@ -1,6 +1,7 @@
 package com.doumee.api.web;
 
 import com.doumee.config.Jwt.JwtTokenUtil;
+import com.doumee.core.model.PageData;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
@@ -25,6 +26,7 @@
         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
         return request;
     }
+
     /**
      * 鑾峰彇鐢ㄦ埛ID
      *
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
new file mode 100644
index 0000000..70aca8c
--- /dev/null
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/UnitController.java
@@ -0,0 +1,73 @@
+package com.doumee.api.web;
+
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.dao.web.reqeust.FinishAnswerDTO;
+import com.doumee.dao.web.response.ProblemsVO;
+import com.doumee.service.business.ProblemLogService;
+import com.doumee.service.business.ProblemsService;
+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.checkerframework.checker.units.qual.A;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 10:40
+ */
+
+@Api(tags = "99銆佸叾浠�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/unit")
+@Slf4j
+public class UnitController {
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private ProblemsService problemsService;
+
+    @Autowired
+    private ProblemLogService problemLogService;
+
+    @ApiOperation(value = "鏌ヨ瀛楀吀鍊兼暟鎹�", notes = "H5")
+    @GetMapping("/getSystemDictData")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "label", value = "鏁版嵁瀛楀吀鍊�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "dictCode", value = "绯荤粺瀛楀吀鍊�", required = true)
+    })
+    public ApiResponse<SystemDictData> getSystemDictData(@RequestParam String dictCode, @RequestParam String label) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",systemDictDataBiz.queryByCode(dictCode,label));
+    }
+
+
+    @ApiOperation(value = "鑾峰彇棰樼洰鏁版嵁", notes = "H5")
+    @GetMapping("/getProblemsVO")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "useType", value = "浣跨敤鍦烘櫙 0鍔冲姟浜哄憳 1鏅�氳瀹�", required = true)
+    })
+    public ApiResponse<List<ProblemsVO>> getProblemsVO(@RequestParam Integer useType) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",problemsService.getProblemsVO(useType));
+    }
+
+
+    @ApiOperation(value = "淇濆瓨绛旈璁板綍", notes = "H5")
+    @PostMapping("/finishAnswer")
+    public ApiResponse<Integer> finishAnswer(@RequestBody FinishAnswerDTO finishAnswerDTO) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",problemLogService.finishAnswer(finishAnswerDTO));
+    }
+
+
+}
diff --git a/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
new file mode 100644
index 0000000..776f797
--- /dev/null
+++ b/server/dmvisit_web/src/main/java/com/doumee/api/web/VisitorController.java
@@ -0,0 +1,47 @@
+package com.doumee.api.web;
+
+import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.web.response.WxAuthorizeVO;
+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.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2023/12/7 10:40
+ */
+
+@Api(tags = "1銆佽瀹笟鍔�")
+@Trace(exclude = true)
+@RestController
+@RequestMapping("/web/visitor")
+@Slf4j
+public class VisitorController {
+
+    @Autowired
+    private MemberService memberService;
+
+    @ApiOperation(value = "璁垮寰俊鎺堟潈", notes = "璁垮寰俊鎺堟潈鑾峰彇openId")
+    @GetMapping("/wxAuthorize")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "鎺堟潈鐮�", required = true)
+    })
+    public ApiResponse<WxAuthorizeVO> wxAuthorize(@RequestParam String code) {
+        WxAuthorizeVO wxAuthorizeVO =  memberService.wxAuthorize(code);
+        return ApiResponse.success("鏌ヨ鎴愬姛",wxAuthorizeVO);
+    }
+
+
+}

--
Gitblit v1.9.3