diff --git a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/deptdrawershow.vue b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/deptdrawershow.vue
index fb292c56cbe51a7ab269ea503ea75865f92cb7bc..f74f8d44239d6125cace5ec698f60d54464ea894 100644
--- a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/deptdrawershow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/deptdrawershow.vue
@@ -367,9 +367,9 @@ export default {
             width: 100,
             formatter: (row) => {
               if (row.check) {
-                return <span>涓嶉€夋嫨</span>;
+                return <span style="cursor:pointer;color:#ff0000">涓嶉€夋嫨</span>;
               } else {
-                return <span style="cursor:pointer">閫夋嫨</span>;
+                return <span style="cursor:pointer;color:#1890ff">閫夋嫨</span>;
               }
             },
           },
diff --git a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/drawershow.vue b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/drawershow.vue
index de378f33208296d4ca9c1f6e340615223a442daf..100ade2bdb64c5bc8d733137294d72324a9b0f96 100644
--- a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/drawershow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/drawershow.vue
@@ -407,9 +407,9 @@ export default {
             width: 100,
             formatter: (row) => {
               if (row.check) {
-                return <span>涓嶉€夋嫨</span>;
+                return <span style="cursor:pointer;color:#ff0000">涓嶉€夋嫨</span>;
               } else {
-                return <span style="cursor:pointer">閫夋嫨</span>;
+                return <span style="cursor:pointer;color:#1890ff">閫夋嫨</span>;
               }
             },
           },
diff --git a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/windowdrawershow.vue b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/windowdrawershow.vue
index d13964839e80dee24bdf74e0df93bd386288cca2..237f45d0fb372abc613cbd12c8bebbd7dd1bf5a7 100644
--- a/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/windowdrawershow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/perform/staff/conf/windowdrawershow.vue
@@ -193,9 +193,9 @@ export default {
             width: 100,
             formatter: (row) => {
               if (row.check) {
-                return <span>涓嶉€夋嫨</span>;
+                return <span style="cursor:pointer;color:#ff0000">涓嶉€夋嫨</span>;
               } else {
-                return <span style="cursor:pointer">閫夋嫨</span>;
+                return <span style="cursor:pointer;color:#1890ff">閫夋嫨</span>;
               }
             },
           },
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/api/TalkApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/api/TalkApiController.java
index 0a94cf7f190d95306c14eef9e9a8e92d451614af..05ef7ba019ebf1409324f4548326a618ebbe3c3a 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/api/TalkApiController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/api/TalkApiController.java
@@ -13,6 +13,8 @@ import com.mortals.framework.exception.AppException;
 import com.mortals.xhx.busiz.dingtalk.config.TalkConfiguration;
 import com.mortals.xhx.busiz.dingtalk.req.DingTalkBaseReq;
 import com.mortals.xhx.busiz.dingtalk.req.UserPageReq;
+import com.mortals.xhx.busiz.req.CodeReq;
+import com.mortals.xhx.busiz.req.LinkMessageReq;
 import com.mortals.xhx.busiz.req.MobileReq;
 import com.mortals.xhx.busiz.req.ReviewSaveReq;
 import com.mortals.xhx.common.code.YesNoEnum;
@@ -131,9 +133,9 @@ public class TalkApiController {
             if(dingToken == null){
                 dingToken = getToken().getData();
             }
-            req.setDeptId(res.getDeptid());
-            req.setCursor(res.getCursor());
-            req.setSize(res.getSize());
+            req.setDeptId(res.getDeptid());   //閮ㄩ棬id
+            req.setCursor(res.getCursor());   //璧峰椤垫父鏍�
+            req.setSize(res.getSize());    //鍒嗛〉鏉℃暟
             OapiV2UserListResponse rsp = client.execute(req, dingToken);
             if(rsp.getErrcode() == 0){
                 apiRespPdu.setCode(0);
@@ -173,11 +175,12 @@ public class TalkApiController {
             if(dingToken == null){
                 dingToken = getToken().getData();
             }
-            req.setMobile(mobile.getMobile());
+            req.setMobile(mobile.getMobile());   //鐢ㄦ埛鎵嬫満鍙�
+            //鍏堟牴鎹墜鏈哄彿鍘昏幏鍙杣serid  鍐嶉€氳繃userid鑾峰彇璇︽儏    閽夐拤娌℃湁鐩存帴鏍规嵁鐢佃瘽鑾峰彇鐢ㄦ埛璇︽儏鐨勬帴鍙�
             OapiV2UserGetbymobileResponse rsp = client.execute(req, dingToken);
             if(rsp.getErrcode() == 0){
                 //鏍规嵁鑾峰彇鍒扮殑userid鍘昏幏鍙栫敤鎴疯鎯�
-                ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> userRsp = getUserInfo(rsp.getResult().getUserid());
+                ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> userRsp = getUserInfoByUserId(rsp.getResult().getUserid());
                 if(userRsp.getCode() == 0){
                     apiRespPdu.setCode(userRsp.getCode());
                     apiRespPdu.setData(userRsp.getData());
@@ -211,17 +214,17 @@ public class TalkApiController {
      * 鏍规嵁userid鏌ヨ鐢ㄦ埛璇︽儏
      * @return
      */
-    @GetMapping("/dingtalk/getUserInfo")
+    @GetMapping("/dingtalk/getUserInfoByUserId")
     @UnAuth
-    public ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> getUserInfo(@RequestBody String userid){
+    public ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> getUserInfoByUserId(@RequestBody String userid){
         ApiRespPdu<OapiV2UserGetResponse.UserGetResponse> apiRespPdu = new ApiRespPdu<>();
         try {
-            DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetuserinfo());
+            DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetuserinfobyuserid());
             OapiV2UserGetRequest req = new OapiV2UserGetRequest();
             if(dingToken == null){
                 dingToken = getToken().getData();
             }
-            req.setUserid(userid);
+            req.setUserid(userid);   //鐢ㄦ埛id
             OapiV2UserGetResponse rsp = client.execute(req, dingToken);
 
             apiRespPdu.setCode(0);
@@ -236,4 +239,85 @@ public class TalkApiController {
 
         return apiRespPdu;
     }
+
+
+    /**
+     * 鎺ㄩ€侀摼鎺ョ被閽夐拤宸ヤ綔娑堟伅
+     * @return
+     */
+    @PostMapping("/dingtalk/sendLinkMessage")
+    @UnAuth
+    public ApiRespPdu<String> sendLinkMessage(@RequestBody LinkMessageReq linkMessageReq){
+        ApiRespPdu<String> apiRespPdu = new ApiRespPdu<>();
+        try {
+            DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getSendmessage());
+            if(dingToken == null){
+                dingToken = getToken().getData();
+            }
+            OapiMessageCorpconversationAsyncsendV2Request req = new OapiMessageCorpconversationAsyncsendV2Request();
+            req.setAgentId(Long.valueOf(talkConfiguration.getGetAgentId()));
+            req.setUseridList(linkMessageReq.getUserIdList());
+
+            OapiMessageCorpconversationAsyncsendV2Request.Msg obj1 = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+            obj1.setMsgtype("link");   //type涓洪摼鎺ョ被娑堟伅
+            OapiMessageCorpconversationAsyncsendV2Request.Link obj2 = new OapiMessageCorpconversationAsyncsendV2Request.Link();
+            obj2.setPicUrl(linkMessageReq.getPicUrl());    //娑堟伅鍥剧墖鍦板潃
+            obj2.setMessageUrl(linkMessageReq.getMessageUrl());  //璺宠浆閾炬帴鍦板潃
+            obj2.setText(linkMessageReq.getText());    //娑堟伅鎻忚堪
+            obj2.setTitle(linkMessageReq.getTitle());   //娑堟伅title
+            obj1.setLink(obj2);
+            req.setMsg(obj1);
+
+            OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(req, dingToken);
+            if(rsp.getErrcode() == 0){
+                apiRespPdu.setCode(0);
+                apiRespPdu.setData(rsp.getBody());
+                apiRespPdu.setMsg(rsp.getMsg());
+            }else {
+                apiRespPdu.setCode(-1);
+                apiRespPdu.setData(rsp.getBody());
+                apiRespPdu.setMsg(rsp.getMsg());
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            apiRespPdu.setCode(-1);
+            apiRespPdu.setData("");
+            apiRespPdu.setMsg(e.toString());
+        }
+
+        return apiRespPdu;
+    }
+
+
+    /**
+     * 鏍规嵁鍏嶇櫥鐮佹煡璇㈢敤鎴疯鎯�
+     * @return
+     */
+    @GetMapping("/dingtalk/getUserInfoByCode")
+    @UnAuth
+    public ApiRespPdu<OapiV2UserGetuserinfoResponse.UserGetByCodeResponse> getUserInfoByCode(@RequestBody CodeReq codeReq){
+        ApiRespPdu<OapiV2UserGetuserinfoResponse.UserGetByCodeResponse> apiRespPdu = new ApiRespPdu<>();
+        try {
+            DingTalkClient client = new DefaultDingTalkClient(talkConfiguration.getGetuserinfobycode());
+            OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();
+            if(dingToken == null){
+                dingToken = getToken().getData();
+            }
+            req.setCode(codeReq.getCode());    //鍓嶇js鑾峰彇鍒扮殑鍏嶇櫥鐮�  鐢ㄥ厤鐧荤爜鑾峰彇鐢ㄦ埛淇℃伅
+            OapiV2UserGetuserinfoResponse rsp = client.execute(req, dingToken);
+
+            apiRespPdu.setCode(0);
+            apiRespPdu.setData(rsp.getResult());
+            apiRespPdu.setMsg(rsp.getMsg());
+        } catch (Exception e) {
+            e.printStackTrace();
+            apiRespPdu.setCode(-1);
+            apiRespPdu.setData(null);
+            apiRespPdu.setMsg(e.toString());
+        }
+
+        return apiRespPdu;
+    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/config/TalkConfiguration.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/config/TalkConfiguration.java
index ab4fff7a4f72ad62321cbf3bf13b0d8df040d048..57b7d3a29e6185cc64f7a103c5d34f0792638ee0 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/config/TalkConfiguration.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/dingtalk/config/TalkConfiguration.java
@@ -58,8 +58,21 @@ public class TalkConfiguration {
     /**
      * 鏍规嵁userid鏌ヨ鐢ㄦ埛淇℃伅
      */
-    @Value("${dingtalk.getuserinfo:https://oapi.dingtalk.com/topapi/v2/user/get}")
-    private String getuserinfo;
+    @Value("${dingtalk.getuserinfobyuserid:https://oapi.dingtalk.com/topapi/v2/user/get}")
+    private String getuserinfobyuserid;
+
+    /**
+     * 鏍规嵁鍏嶇櫥鐮佹煡璇㈢敤鎴蜂俊鎭�
+     */
+    @Value("${dingtalk.getuserinfobycode:https://oapi.dingtalk.com/topapi/v2/user/getuserinfo}")
+    private String getuserinfobycode;
+
+    /**
+     * 鎺ㄩ€侀拤閽夊伐浣滄秷鎭�
+     */
+    @Value("${dingtalk.sendmessage:https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2}")
+    private String sendmessage;
+
     /**
      * getDeptbyUser
      */
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/CodeReq.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/CodeReq.java
new file mode 100644
index 0000000000000000000000000000000000000000..a71ac19758b3ae9f501890b9869c03ef620bb729
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/CodeReq.java
@@ -0,0 +1,18 @@
+package com.mortals.xhx.busiz.req;
+
+/**
+ * @author ZYW
+ * @date 2023-07-13 20:11
+ */
+
+public class CodeReq {
+    String code;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/LinkMessageReq.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/LinkMessageReq.java
new file mode 100644
index 0000000000000000000000000000000000000000..9864830f656ed5e16e312a00cae38b3377fc28f7
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/LinkMessageReq.java
@@ -0,0 +1,55 @@
+package com.mortals.xhx.busiz.req;
+
+/**
+ * @author ZYW
+ * @date 2023-07-13 19:30
+ * 杩炴帴绫诲伐浣滄秷鎭�
+ */
+
+public class LinkMessageReq {
+    String userIdList;   //鎺ユ敹鑰呯敤鎴穒d鍒楄〃   澶氫釜鎺ユ敹鑰呯敤,闅斿紑
+    String picUrl;   //娑堟伅鍥剧墖鍦板潃
+    String messageUrl;   //閾炬帴鍦板潃
+    String title;   //娑堟伅鏍囬锛屽缓璁�100瀛楃浠ュ唴銆�
+    String text;      //娑堟伅鎻忚堪锛屽缓璁�500瀛楃浠ュ唴銆�
+
+    public String getUserIdList() {
+        return userIdList;
+    }
+
+    public void setUserIdList(String userIdList) {
+        this.userIdList = userIdList;
+    }
+
+    public String getPicUrl() {
+        return picUrl;
+    }
+
+    public void setPicUrl(String picUrl) {
+        this.picUrl = picUrl;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public String getMessageUrl() {
+        return messageUrl;
+    }
+
+    public void setMessageUrl(String messageUrl) {
+        this.messageUrl = messageUrl;
+    }
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/TestController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/TestController.java
index 640787a278423b1d67e5c3395abc776a30ba51b6..a6cb73ea38b2cc1d11ee269670393c399be6a347 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/TestController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/TestController.java
@@ -23,21 +23,22 @@ public class TestController {
     @Autowired
     private IdgeneratorService idgeneratorService;
 
-    @GetMapping("webservice")
+//    @GetMapping("webservice")@GetMapping("idGens")
+//    public String idGens() {
+//        log.info("娴嬭瘯id鐢熸垚");
+//
+//        String stringId = idgeneratorService.getLongId(IdgeneratorServiceImpl.IdGeneratorKey.EFFECT).toString();
+//
+//
+//        return stringId;
+//    }
     public String webservice() {
         log.info("娴嬭瘯");
 
         return "ok";
     }
 
-    @GetMapping("idGens")
-    public String idGens() {
-        log.info("娴嬭瘯id鐢熸垚");
-
-        String stringId = idgeneratorService.getLongId(IdgeneratorServiceImpl.IdGeneratorKey.EFFECT_KEY).toString();
-
-        return stringId;
-    }
+//
 
 
 
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/FeedbackDao.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/FeedbackDao.java
index 2eb9d130e5406a6960385193579c16157aa5cb3d..080e1a815299bbeef624440f44d746340567b395 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/FeedbackDao.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/FeedbackDao.java
@@ -21,10 +21,10 @@ public interface  FeedbackDao extends ICRUDDao<FeedbackEntity,Long>{
 
     /***
      * 闂嵎鍙嶉浜哄憳鍒楄〃
-     * @param feedbackId
+     * @param query
      * @return
      */
-    List<FeedbackStaffInfoVo> getFeedbackStaffList(Long feedbackId);
+    Result<FeedbackStaffInfoVo> getFeedbackStaffList(FeedbackEntity query,PageInfo pageInfo);
 
     /**
      * 闂嵎鍗曢€夊閫夊弽棣堢粺璁�
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/ibatis/FeedbackDaoImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/ibatis/FeedbackDaoImpl.java
index 9603f1609001137719d566f26d82494bb9ffeff2..64befc63f0b3832e56d7de1bebbdc6f41786e7af 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/ibatis/FeedbackDaoImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/dao/ibatis/FeedbackDaoImpl.java
@@ -28,8 +28,29 @@ public class FeedbackDaoImpl extends BaseCRUDDaoMybatis<FeedbackEntity,Long> imp
 
 
     @Override
-    public List<FeedbackStaffInfoVo> getFeedbackStaffList(Long feedbackId) {
-        return this.getSqlSession().selectList(this.getSqlId("getFeedbackStaffList"), feedbackId);
+    public Result<FeedbackStaffInfoVo> getFeedbackStaffList(FeedbackEntity query,PageInfo pageInfo) {
+        String sqlId = "getFeedbackStaffList";
+
+        Result result = new Result();
+        List list = null;
+        int count = this.getFeedbackStaffListCount(query);
+        if (count == 0) {
+            list = new ArrayList();
+        } else if (pageInfo.getPrePageResult() == -1) {
+            list = this.getSqlSession().selectList(this.getSqlId(sqlId), query);
+        } else {
+            if (pageInfo.getBeginIndex() > count) {
+                pageInfo.setCurrPage(1);
+            }
+
+            RowBounds rowBounds = new RowBounds(pageInfo.getBeginIndex(), pageInfo.getPrePageResult());
+            list = this.getSqlSession().selectList(this.getSqlId(sqlId), query, rowBounds);
+        }
+
+        pageInfo.setTotalResult(count);
+        result.setPageInfo(pageInfo);
+        result.setList((List)list);
+        return result;
     }
 
     @Override
@@ -66,4 +87,8 @@ public class FeedbackDaoImpl extends BaseCRUDDaoMybatis<FeedbackEntity,Long> imp
     private int getQuestionAnswerListCount(Long questionId) {
         return (Integer)this.getSqlSession().selectOne(this.getSqlId("getQuestionAnswerListCount"), questionId);
     }
+
+    private int getFeedbackStaffListCount(FeedbackEntity query) {
+        return (Integer)this.getSqlSession().selectOne(this.getSqlId("getFeedbackStaffListCount"), query);
+    }
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/FeedbackVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/FeedbackVo.java
index 42ce0c87c240fa5478ba7856bba7f11768a51d7f..f136166d98289f431b365b1b24565dcf6af56446 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/FeedbackVo.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/FeedbackVo.java
@@ -17,6 +17,10 @@ import java.util.Date;
 public class FeedbackVo extends BaseEntityLong {
 
     private List<Long> staffList;
-
+    /** 闂Id */
     private Long questionId;
+    /** 鍙嶉Id */
+    private Long feedbackId;
+    /** 鍙嶉鐘舵€� */
+    private Integer backStatus;
 }
\ No newline at end of file
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/OptionSummaryVo.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/OptionSummaryVo.java
index 71842ae593de244edaa15dc50391e1caed446ad3..a0decd0629493dc087b68c13eaff18b690579a95 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/OptionSummaryVo.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/model/vo/OptionSummaryVo.java
@@ -2,6 +2,8 @@ package com.mortals.xhx.module.feedback.model.vo;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * 闂嵎鍗曢€夊閫夊弽棣堢粺璁¤鍥�
  */
@@ -36,4 +38,6 @@ public class OptionSummaryVo {
      * 閫夐」缁熻
      */
     private Integer optionCount;
+
+    List<OptionSummaryVo> optionList;
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/FeedbackService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/FeedbackService.java
index e62ae2bb08c826b2b99d82c2a0d39e3fbbb3d4e2..bfca792dbe06b6288ddd00822cb5d23ccfbe5fc7 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/FeedbackService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/FeedbackService.java
@@ -25,10 +25,10 @@ public interface FeedbackService extends ICRUDService<FeedbackEntity,Long>{
 
     /***
      * 闂嵎鍙嶉浜哄憳鍒楄〃
-     * @param feedbackId
+     * @param query
      * @return
      */
-    List<FeedbackStaffInfoVo> getFeedbackStaffList(Long feedbackId) throws AppException;
+    Result<FeedbackStaffInfoVo> getFeedbackStaffList(FeedbackEntity query,PageInfo pageInfo) throws AppException;
 
     /**
      * 闂嵎鍗曢€夊閫夊弽棣堢粺璁�
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackQuestionServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackQuestionServiceImpl.java
index 0d18fb223f9e4f1734915eca8da430ed257f1869..17d40ae50c00ddc8f956c1b6b694c027a7270deb 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackQuestionServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackQuestionServiceImpl.java
@@ -35,8 +35,8 @@ public class FeedbackQuestionServiceImpl extends AbstractCRUDServiceImpl<Feedbac
                 item.setQuestionId(entity.getId());
                 item.setCreateUserId(this.getContextUserId(context));
                 item.setCreateTime(new Date());
-                feedbackOptionService.save(item);
             }).count();
+            feedbackOptionService.save(entity.getFeedbackOptionList());
         }
         super.saveAfter(entity, context);
     }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackServiceImpl.java
index b4951fbb14f72539859d9f49441cf94e23e6a609..2114f0f0706444cd7508ff3188ad1becc1890928 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/service/impl/FeedbackServiceImpl.java
@@ -52,7 +52,9 @@ public class FeedbackServiceImpl extends AbstractCRUDServiceImpl<FeedbackDao, Fe
                 item.setCreateUserId(this.getContextUserId(context));
                 item.setCreateTime(new Date());
             }).count();
-            feedbackQuestionService.save(entity.getFeedbackQuestionList());
+            for(FeedbackQuestionEntity questionEntity:entity.getFeedbackQuestionList()) {
+                feedbackQuestionService.save(questionEntity);
+            }
         }
         if(!ObjectUtils.isEmpty(entity.getStaffList())){
             List<FeedbackStaffEntity> staffEntityList = new ArrayList<>();
@@ -81,7 +83,9 @@ public class FeedbackServiceImpl extends AbstractCRUDServiceImpl<FeedbackDao, Fe
                 item.setUpdateUserId(this.getContextUserId(context));
                 item.setUpdateTime(new Date());
             }).count();
-            feedbackQuestionService.save(entity.getFeedbackQuestionList());
+            for(FeedbackQuestionEntity questionEntity:entity.getFeedbackQuestionList()) {
+                feedbackQuestionService.save(questionEntity);
+            }
         }
         if(!ObjectUtils.isEmpty(entity.getStaffList())){
             Long[] feedbackStaffIds = feedbackStaffService.find(new FeedbackStaffQuery().feedbackId(entity.getId())).stream().map(FeedbackStaffEntity::getId).toArray(Long[]::new);
@@ -110,11 +114,14 @@ public class FeedbackServiceImpl extends AbstractCRUDServiceImpl<FeedbackDao, Fe
     }
 
     @Override
-    public List<FeedbackStaffInfoVo> getFeedbackStaffList(Long feedbackId) throws AppException {
-        if(feedbackId==null){
+    public Result<FeedbackStaffInfoVo> getFeedbackStaffList(FeedbackEntity query,PageInfo pageInfo) throws AppException {
+        if(query.getFeedbackId()==null){
             throw new AppException("缁╂晥鍙嶉璁板綍Id涓嶈兘涓虹┖");
         }
-        return dao.getFeedbackStaffList(feedbackId);
+        if(pageInfo==null){
+            pageInfo = new PageInfo();
+        }
+        return dao.getFeedbackStaffList(query,pageInfo);
     }
 
     @Override
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/web/FeedbackController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/web/FeedbackController.java
index ee189e588c351cd59cf6558bf2adc6f39771130b..2ab3fa683d2089b4dc2ec6d29cf0c8b2aa8a2767 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/web/FeedbackController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/feedback/web/FeedbackController.java
@@ -24,12 +24,10 @@ import com.mortals.xhx.module.feedback.model.FeedbackEntity;
 import com.mortals.xhx.module.feedback.service.FeedbackService;
 import org.apache.commons.lang3.ArrayUtils;
 import com.mortals.framework.util.StringUtils;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
 import java.util.stream.Collectors;
 import com.alibaba.fastjson.JSONObject;
-import java.util.Arrays;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import static com.mortals.framework.ap.SysConstains.*;
@@ -64,12 +62,12 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
 
     /**
      * 鏌ヨ闂嵎鍙嶉浜哄憳鍒楄〃
-     * @param feedbackId
+     * @param query
      * @return
      */
-    @RequestMapping(value = {"getStaffList"},method = {RequestMethod.POST, RequestMethod.GET})
+    @PostMapping({"getStaffList"})
     @UnAuth
-    public Rest<Object> getFeedbackStaffList(Long feedbackId) {
+    public Rest<Object> getFeedbackStaffList(@RequestBody FeedbackEntity query) {
         Rest<Object> ret = new Rest();
         Map<String, Object> model = new HashMap();
         Context context = this.getContext();
@@ -77,9 +75,10 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
 
         int code=1;
         try {
-            List<FeedbackStaffInfoVo> result = this.getService().getFeedbackStaffList(feedbackId);
-            if(CollectionUtils.isNotEmpty(result)) {
-                Map<Integer, List<FeedbackStaffInfoVo>> groupMap = result.stream().collect(Collectors.groupingBy(FeedbackStaffInfoVo::getBackStatus));
+            PageInfo pageInfo = this.buildPageInfo(query);
+            Result<FeedbackStaffInfoVo> result = this.getService().getFeedbackStaffList(query,pageInfo);
+            if(CollectionUtils.isNotEmpty(result.getList())) {
+                Map<Integer, List<FeedbackStaffInfoVo>> groupMap = result.getList().stream().collect(Collectors.groupingBy(FeedbackStaffInfoVo::getBackStatus));
                 if(groupMap.containsKey(1)) {
                     model.put("feedBack", groupMap.get(1).size());
                 }else {
@@ -94,8 +93,9 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
                 model.put("feedBack", 0);
                 model.put("notBack", 0);
             }
-            model.put("data", result);
-            model.put("message_info", busiDesc + "鎴愬姛");
+            model.put("data", result.getList());
+            model.put("pageInfo", result.getPageInfo());
+            this.parsePageInfo(model, result.getPageInfo());
             if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
                 this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
             }
@@ -127,7 +127,21 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
         int code=1;
         try {
             List<OptionSummaryVo> result = this.getService().getOptionSummaryList(feedbackId);
-            model.put("data", result);
+            List<OptionSummaryVo> list = new ArrayList<>();
+            if(CollectionUtils.isNotEmpty(result)) {
+                Map<Long, List<OptionSummaryVo>> groupMap = result.stream().collect(Collectors.groupingBy(OptionSummaryVo::getQuestionId));
+                for (Long key : groupMap.keySet()) {
+                    OptionSummaryVo vo = new OptionSummaryVo();
+                    OptionSummaryVo temp = groupMap.get(key).get(0);
+                    vo.setQuestionId(key);
+                    vo.setQuestion(temp.getQuestion());
+                    vo.setFeedbackId(temp.getFeedbackId());
+                    vo.setQuestionType(temp.getQuestionType());
+                    vo.setOptionList(groupMap.get(key));
+                    list.add(vo);
+                }
+            }
+            model.put("data", list);
             model.put("message_info", busiDesc + "鎴愬姛");
             if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
                 this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
@@ -157,14 +171,13 @@ public class FeedbackController extends BaseCRUDJsonBodyMappingController<Feedba
         Context context = this.getContext();
         String busiDesc = "鏌ヨ闂嵎闂鍙嶉璇︽儏";
 
-        int code=1;
+        int code = 1;
         try {
             PageInfo pageInfo = this.buildPageInfo(query);
             Result<QuestionAnswerVo> result = this.getService().getQuestionAnswerList(query.getQuestionId(), pageInfo);
             model.put("data", result.getList());
             model.put("pageInfo", result.getPageInfo());
             this.parsePageInfo(model, result.getPageInfo());
-            code = this.doListAfter(query, (Map)model, context);
             model.put("message_info", busiDesc + "鎴愬姛");
             if (!ObjectUtils.isEmpty(context) && !ObjectUtils.isEmpty(context.getUser())) {
                 this.recordSysLog(this.request, busiDesc + " 銆愭垚鍔熴€�");
diff --git a/attendance-performance-manager/src/main/resources/bootstrap.yml b/attendance-performance-manager/src/main/resources/bootstrap.yml
index ed19ce2f71544c62cd498de9cc06e22cfb980d6c..b8100a091f91bec1c0c8fa60efe8d760bf080f45 100644
--- a/attendance-performance-manager/src/main/resources/bootstrap.yml
+++ b/attendance-performance-manager/src/main/resources/bootstrap.yml
@@ -62,4 +62,7 @@ hik:
   protocol: @profiles.hik.protocol@
   appSecret: @profiles.hik.appSecret@
 dingtalk:
-  agentId: 123123
+  agentId: 2652674890
+  AppKey: dingpqzradgfr4efdi2j
+  AppSecret: bF2WALmo5_Wuj3hg5gXeWqezrYnZChUJ88HjzNWpkA9ivdOxfBDGOGYcfVRfB3vd
+
diff --git a/attendance-performance-manager/src/main/resources/sqlmap/module/feedback/FeedbackMapperExt.xml b/attendance-performance-manager/src/main/resources/sqlmap/module/feedback/FeedbackMapperExt.xml
index 624148ce1248c2db9c118297d969a37cd3ddb31e..62d20a97103d3b7107fc78c4201209e8f3299e75 100644
--- a/attendance-performance-manager/src/main/resources/sqlmap/module/feedback/FeedbackMapperExt.xml
+++ b/attendance-performance-manager/src/main/resources/sqlmap/module/feedback/FeedbackMapperExt.xml
@@ -4,24 +4,56 @@
 <mapper namespace="com.mortals.xhx.module.feedback.dao.ibatis.FeedbackDaoImpl">
 
     <!-- 闂嵎鍙嶉浜哄憳鍒楄〃 -->
-    <select id="getFeedbackStaffList" parameterType="long" resultType="com.mortals.xhx.module.feedback.model.vo.FeedbackStaffInfoVo">
-        SELECT
-            s.feedbackId,
-            s.staffId,
-            s1.`name`,
-            s1.deptId,
-            s1.deptName,
-            s1.positionName,
-            CASE IFNULL(a.id, 0) WHEN 0 THEN 0 ELSE 1 END AS backStatus,
-            MAX(a.createTime) AS backTime
-        FROM
-            mortals_xhx_feedback_staff s
-            LEFT JOIN mortals_xhx_feedback_answer a ON s.staffId = a.staffId AND s.feedbackId = a.feedbackId
-            LEFT JOIN mortals_xhx_staff s1 ON s.staffId = s1.id
-        WHERE
-            s.feedbackId = #{feedbackId}
-        GROUP BY
-            s.staffId;
+    <select id="getFeedbackStaffList" parameterType="com.mortals.xhx.module.feedback.model.FeedbackEntity" resultType="com.mortals.xhx.module.feedback.model.vo.FeedbackStaffInfoVo">
+        SELECT * FROM (
+            SELECT
+                s.feedbackId,
+                s.staffId,
+                s1.`name`,
+                s1.deptId,
+                s1.deptName,
+                s1.positionName,
+                CASE IFNULL(a.id, 0) WHEN 0 THEN 0 ELSE 1 END AS backStatus,
+                MAX(a.createTime) AS backTime
+            FROM
+                mortals_xhx_feedback_staff s
+                LEFT JOIN mortals_xhx_feedback_answer a ON s.staffId = a.staffId AND s.feedbackId = a.feedbackId
+                LEFT JOIN mortals_xhx_staff s1 ON s.staffId = s1.id
+            WHERE
+                s.feedbackId = #{feedbackId}
+            GROUP BY
+                s.staffId
+        ) AS t WHERE 1=1
+        <if test="backStatus != null">
+            AND t.backStatus = #{backStatus}
+        </if>
+    </select>
+
+    <select id="getFeedbackStaffListCount" parameterType="com.mortals.xhx.module.feedback.model.FeedbackEntity" resultType="int">
+        select count(1) from (
+            SELECT * FROM (
+                SELECT
+                    s.feedbackId,
+                    s.staffId,
+                    s1.`name`,
+                    s1.deptId,
+                    s1.deptName,
+                    s1.positionName,
+                    CASE IFNULL(a.id, 0) WHEN 0 THEN 0 ELSE 1 END AS backStatus,
+                    MAX(a.createTime) AS backTime
+                FROM
+                    mortals_xhx_feedback_staff s
+                    LEFT JOIN mortals_xhx_feedback_answer a ON s.staffId = a.staffId AND s.feedbackId = a.feedbackId
+                    LEFT JOIN mortals_xhx_staff s1 ON s.staffId = s1.id
+                WHERE
+                    s.feedbackId = #{feedbackId}
+                GROUP BY
+                    s.staffId
+            ) AS t WHERE 1=1
+            <if test="backStatus != null">
+                AND t.backStatus = #{backStatus}
+            </if>
+        ) as tt
     </select>
 
     <!-- 闂嵎鍗曢€夊閫夊弽棣堢粺璁� -->