diff --git a/build.gradle b/build.gradle
index b57d012..fd8efb1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -93,7 +93,7 @@
     annotationProcessor 'org.projectlombok:lombok:1.18.8'
     compileOnly 'org.projectlombok:lombok:1.18.8'
 
-    compile 'com.supwisdom:payapi-sdk:1.0.17'
+    compile 'com.supwisdom:payapi-sdk:1.0.18'
     
     testImplementation 'org.springframework.boot:spring-boot-starter-test'
     testImplementation 'io.rest-assured:rest-assured:3.3.0'
diff --git a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
index e5ed541..e5be303 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -1,11 +1,22 @@
 package com.supwisdom.dlpay.app.controller;
 
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.app.bean.CustomerInfo;
 import com.supwisdom.dlpay.app.domain.VisitorConfig;
 import com.supwisdom.dlpay.app.domain.WechatResp;
 import com.supwisdom.dlpay.app.service.AppService;
+import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
+import com.supwisdom.dlpay.conference.dao.ConferenceReviewDao;
+import com.supwisdom.dlpay.conference.domain.TConferenceReview;
+import com.supwisdom.dlpay.conference.service.ConferenceService;
+import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
+import com.supwisdom.dlpay.doorlist.bean.TCustomerImportBean;
 import com.supwisdom.dlpay.doorlist.service.DoorlistMgrService;
+import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.WebConstant;
 import com.supwisdom.dlpay.mainservice.domain.TCustomer;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.ncmgr.domain.TNcAllottime;
@@ -14,6 +25,7 @@
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.util.RedisUtil;
+import com.supwisdom.dlpay.util.WebCheckException;
 import com.supwisdom.dlpay.visitormanage.domain.EVisitorCheckDtl;
 import com.supwisdom.dlpay.visitormanage.domain.VisitorCheckBean;
 import com.supwisdom.dlpay.visitormanage.service.VisitormanageService;
@@ -22,6 +34,8 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
@@ -39,6 +53,9 @@
 
     @Autowired
     private AppService appService;
+
+    @Autowired
+    private ConferenceService conferenceService;
     @Autowired
     private NcService ncService;
     @Autowired
@@ -421,11 +438,83 @@
     @RequestMapping("/conference/attendconference")
     public String doAttendConference( @RequestParam(value = "userId", required = true, defaultValue = "") String userId,
             Model model) {
-        model.addAttribute("flag",false);
-        return "apph5/conference/confresult";
+        TConferenceReview review=conferenceService.getReviewerByuserid(userId);
+        if(null==review){
+            return null;
+        }
+        TCustomer cust=webInterfaceService.findCustomerById(userId);
+        if(null==cust){
+            return null;
+        }
+
+        model.addAttribute("deptcode",cust.getDeptcode());
+
+        return "apph5/conference/confreviewlist";
+    }
+
+    @GetMapping("/conference/conflist")
+    @ResponseBody
+    public PageResult<ConferenceShowBean> searchConflist(
+                                                         @RequestParam(value = "confname", required = false) String confname,
+                                                         @RequestParam(value = "confstatus", required = false) String confstatus,
+                                                         @RequestParam(value = "deptcode", required = false) String deptcode ) {
+        try {
+            return conferenceService.getConferenceInfos(confname, "", deptcode, "",confstatus, 1, 100);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    @GetMapping("/conference/loadimport")
+    public String loadimport(@RequestParam("confid") Integer confid,
+                             @RequestParam(value = "deptcode", required = false) String deptcode,
+                           Model model) {
+        model.addAttribute("detailConfid", confid);
+        return "apph5/conference/confpeoplebind";
+    }
+
+    @GetMapping("/conference/listpeopleforimport")
+    @ResponseBody
+    public PageResult<TCustomerImportBean> listConfpeople(
+            @RequestParam(value = "custname", required = false) String custname,
+            @RequestParam(value = "deptcode", required = false) String deptcode,
+            @AuthenticationPrincipal TOperator operUser) {
+        try {
+            CustomerSearchBean searchBean = new CustomerSearchBean();
+            searchBean.setCustname(custname);
+            searchBean.setDeptcode(deptcode);
+            PageResult<TCustomerImportBean> bean = webInterfaceService.getCustomerInfo(searchBean);
+            return bean;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
     }
 
 
+    @PostMapping("/conference/addconfpeople")
+    @ResponseBody
+    public JsonResult addConfpeople(@RequestParam("confid") Integer confid,
+                                    @RequestParam("cardnos[]") List<String> cardnos) {
+        try {
+            if (null == confid || StringUtil.isEmpty(cardnos)) {
+                return JsonResult.error("参数传递错误");
+            }
+
+            if (conferenceService.saveConferencePeople(confid, cardnos)) {
+                return JsonResult.ok("人员添加成功");
+            } else {
+                return JsonResult.error("添加失败");
+            }
+        } catch (WebCheckException e) {
+            return JsonResult.ok(599, e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            return JsonResult.error("系统处理异常").put("exception", e);
+        }
+
+    }
 
     /**
      * App远程开门
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
index 507edf3..bb40eb3 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -93,7 +93,7 @@
             if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
             TOperator oper = (TOperator) operUser;
             String deptcode = oper.getDeptcode();
-            return conferenceService.getConferenceInfos(confname, conftype, deptcode, "", pageNo, pageSize);
+            return conferenceService.getConferenceInfos(confname, conftype, deptcode, "", "",pageNo, pageSize);
         } catch (Exception e) {
             e.printStackTrace();
             return new PageResult<>(99, "系统查询错误");
@@ -209,12 +209,12 @@
                 CommonSendMessageParam param=new CommonSendMessageParam();
                 param.setContent("您有新的会议需要分配，请确认");
                 param.setTitle("会议分配通知");
+                param.setMsgtype("conference");
                 for(TConferenceReview rev:review){
                     param.setUserid(rev.getCustid());
                     ApiResponse resp=commonProxy.sendMsg(param);
                     resp.getRetcode();
                     resp.getRetmsg();
-
                 }
                 return JsonResult.ok("新增成功");
             } else {
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
index 269dda1..9ed6589 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -21,7 +21,7 @@
 public interface ConferenceService {
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
-    PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype,String deptocde,String confdate, int pageNo, int pageSize);
+    PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype,String deptocde,String confdate,String confstatus, int pageNo, int pageSize);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<ConfReportShowBean> getConfReportPage(String confname, String conftype, String deptcode, String startdate,String enddate,String status, int pageNo, int pageSize);
@@ -125,6 +125,9 @@
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     List<TConferenceReview> getAllReviewer(String deptcode);
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    TConferenceReview getReviewerByuserid(String userid);
+
     @Transactional(rollbackFor = Exception.class)
     boolean addConfReview(String deptcode, String opercode, List<String> custidlist);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
index cf69c68..47f0bd5 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/impl/ConferenceServiceImpl.java
@@ -76,8 +76,8 @@
     private EntityManager entityManager;
 
     @Override
-    public PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype, String deptcode, String confdate, int pageNo, int pageSize) {
-        Page<TConference> page = getConferencePage(confname, conftype, deptcode, "", "", "", pageNo, pageSize);
+    public PageResult<ConferenceShowBean> getConferenceInfos(String confname, String conftype, String deptcode, String confdate,String confstatus, int pageNo, int pageSize) {
+        Page<TConference> page = getConferencePage(confname, conftype, deptcode, "", "", confstatus, pageNo, pageSize);
         List<ConferenceShowBean> result = new ArrayList<>(0);
         if (null != page && page.getTotalElements() > 0) {
             for (TConference conf : page.getContent()) {
@@ -171,7 +171,6 @@
                 }
                 if (!StringUtil.isEmpty(childdplist)) {
                     predicates.add(root.get("deptcode").in(childdplist));
-
                 }
                 if (!StringUtil.isEmpty(startdate)) {
                     predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get("confdate").as(String.class), startdate));
@@ -411,7 +410,6 @@
     public boolean saveConferencePeople(Integer confid, List<String> cardnos) throws Exception {
         List<String> successCardnos = new ArrayList<>(0);
         List<String> errmsgList = new ArrayList<>(0);
-
         for (String card : cardnos) {
             String msg = "";
             TCustomerInfo customer = new TCustomerInfo();
@@ -894,6 +892,11 @@
     }
 
     @Override
+    public TConferenceReview getReviewerByuserid(String userid) {
+        return conferenceReviewDao.getOne(userid);
+    }
+
+    @Override
     public boolean addConfReview(String deptcode, String opercode, List<String> custidlist) {
         delConfReview(deptcode);
         for (String custid:custidlist){
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
index 4979e95..4815d9d 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CustomerDaoImpl.java
@@ -180,7 +180,7 @@
             sql+=" and a.deptcode in ('"+ StringUtils.join(childdplist.toArray(),"','")+"') ";
         }
 
-        sql +=" order by b.cardno desc ";
+        sql +=" order by c.deptno desc ";
 
         Query query = entityManager.createNativeQuery(sql);
         if (!StringUtil.isEmpty(perName)){
diff --git a/src/main/resources/templates/apph5/conference/confpeoplebind.html b/src/main/resources/templates/apph5/conference/confpeoplebind.html
new file mode 100644
index 0000000..1d427f3
--- /dev/null
+++ b/src/main/resources/templates/apph5/conference/confpeoplebind.html
@@ -0,0 +1,152 @@
+<div id="confpeoplebind-form" lay-filter="confpeoplebind-filter" class="layui-form model-form"
+     style="padding: 30px 25px 10px 25px;">
+    <input type="hidden" id="confpeoplebind-confid" th:value="${detailConfid}"/>
+
+    <div class="layui-form-item">
+            <div class="layui-card-body">
+                <table class="layui-table" id="confpeoplebind-form-table"
+                       lay-filter="confpeoplebind-form-table-filter"></table>
+            </div>
+        </div>
+    </div>
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button style="margin-right: 30px" class="layui-btn" lay-filter="confpeoplebind-form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</div>
+
+<style type="text/css" id="confpeoplebind-form-css">
+    .layui-form-item .layui-form-checkbox[lay-skin=primary] {
+        margin-top: 0;
+    }
+    .layui-layer-page {
+        left: 10% !important;
+        top:20px ! important;
+        width: 80% ! important;
+    }
+</style>
+
+<script>
+    layui.use(['layer', 'table', 'admin', 'form'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var table = layui.table;
+        var deptcode=$("#conferenceReview-deptcode").val();
+        console.log(deptcode)
+
+        var renderDetailTable = function (obj) {
+            table.render({
+                where: obj,
+                elem: '#confpeoplebind-form-table',
+                url: '[[@{/app/conference/listpeopleforimport}]]',
+                page: false,
+                height:300,
+                cols: [
+                    [
+                        {type: 'checkbox', style: "#confpeoplebind-form-css", fixed: 'left'},
+                        {field: 'custname', title: '姓名', align: 'center'},
+                        {field: 'deptname', title: '部门', align: 'center'}
+                    ]
+                ]
+            });
+        }
+
+        renderDetailTable({ deptcode:deptcode});
+
+        // 搜索按钮点击事件
+        $('#btn-search-confpeoplebind-form').click(function () {
+            var deptcode = $("#search-confpeoplebind-form-deptcode").val();
+            var custname = $("#search-confpeoplebind-form-searchkey").val();
+            table.reload('confpeoplebind-form-table', {
+                where: {
+                    deptcode: deptcode,
+                    custname: custname
+                }
+            });
+        });
+
+        $("#btn-reset-confpeoplebind-form").click(function () {
+            $("#search-confpeoplebind-form-deptcode").val("");
+            $("#search-confpeoplebind-form-searchkey").val("");
+            treeSelect.revokeNode('search-confpeoplebind-form-deptcode-filter');
+        });
+
+        $("#loadimport").click(function () {
+            var confid = $("#confpeoplebind-confid").val();
+            admin.popupCenter({
+                title: "分配人员",
+                //  area: '900px',
+                path: '[[@{/conference/loadimportbyExcel}]]?confid=' + confid,
+                finish: function () {
+                    table.reload('conferenceTable');
+                }
+            });
+        })
+
+        form.on('submit(confpeoplebind-form-submit)', function (el) {
+            var confid = $("#confpeoplebind-confid").val();
+            var checkStatus = table.checkStatus('confpeoplebind-form-table');
+            var data = checkStatus.data;
+            var cardnos = [];
+            var custnames=[];
+            for (var i = 0; i < data.length; i++) {
+                cardnos.push(data[i].cardno);
+                custnames.push(data[i].custname);
+            }
+            if (cardnos.length < 1) {
+                layer.msg("请选择用户", {icon: 2, time: 1500});
+                return;
+            }
+
+            var token = $("meta[name='_csrf_token']").attr("value");
+
+            layer.confirm('确定要添加【' +custnames + '】吗?', {
+                btn: ['确定', '取消']
+            }, function () {
+                layer.load(2);
+                $.ajax({
+                    type: "POST",
+                    dataType: "json",
+                    url: '[[@{/app/conference/addconfpeople}]]',
+                    data: {
+                        "confid": confid,
+                        "cardnos[]": cardnos,
+                        "_csrf": token
+                    },
+                    success: function (result) {
+                        layer.closeAll('loading');
+                        if (result.code == 200) {
+                            layer.msg(result.msg, {icon: 1});
+                            table.reload('confpeoplebind-form-table'); //刷新表格
+                            admin.finishPopupCenter();
+                        } else if (result.code == 401) {
+                            layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                            return;
+                        } else if (result.code == 599) {
+                            //自定义错误
+                            layer.open({
+                                type: 0,
+                                title: "错误信息",
+                                icon: 2,
+                                area: ['600px', '400px'],
+                                content: result.msg
+                            });
+
+                        } else {
+                            console.log('err:' + result.code);
+                            layer.msg(result.msg, {icon: 2});
+                        }
+                    },
+                    error: function (err) {
+                        admin.errorBack(err);
+                    }
+                });
+            });
+
+
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/apph5/conference/confreviewlist.html b/src/main/resources/templates/apph5/conference/confreviewlist.html
new file mode 100644
index 0000000..4d2f92b
--- /dev/null
+++ b/src/main/resources/templates/apph5/conference/confreviewlist.html
@@ -0,0 +1,88 @@
+
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+
+<head>
+    <title>首页</title>
+    <meta name="_csrf_header" th:content="${_csrf.headerName}"/>
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}"/>
+    <meta charset="utf-8"/>
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+    <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
+    <link rel="stylesheet" th:href="@{/static/libs/zTree/css/zTreeStyle/zTreeStyle.css}"/>
+    <link rel="stylesheet" th:href="@{/static/custom/module/formSelects/formSelects-v4.css}"/>
+    <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}"/>
+    <link th:if="${session.theme != null}" rel="stylesheet" th:href="@{/static/custom/css/theme-blue.css}"/>
+
+</head>
+
+<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/q.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>
+
+
+<div class="layui-card">
+    <input type="hidden" id="conferenceReview-deptcode" th:value="${deptcode}"/>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <input id="search-conference-confname" class="layui-input search-input" maxlength="20" type="text"
+                   placeholder="输入名称查询"/>&emsp;
+            <button id="btn-search-conferenceReview" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+        </div>
+        <table class="layui-table" id="conferenceReviewTable" lay-filter="conferenceReviewTable-filter"></table>
+    </div>
+</div>
+
+<script>
+    layui.config({
+        base: '../../static/custom/module/'
+    }).use(['form', 'table', 'layer','admin', 'element'], function () {
+        var table = layui.table;
+        var deptcode=$("#conferenceReview-deptcode").val();
+        var admin = layui.admin;
+        // 渲染表格
+        console.log(deptcode)
+        var renderDetailTable = function (obj) {
+            table.render({
+                where: obj,
+                elem: '#conferenceReviewTable',
+                url: '[[@{/app/conference/conflist}]]',
+                page: false,
+                cols: [
+                    [
+                        {field: 'confname', title: '会议名称', align: 'center', fixed: 'left'},
+                        {field: 'confdate',   title: '会议日期', align: 'center'},
+                        {field: 'timeperoid',  title: '会议时间', align: 'center'}
+                    ]
+                ]
+            });
+        }
+
+        renderDetailTable({confstatus:'unstart',deptcode:deptcode});
+
+        // 搜索按钮点击事件
+        $('#btn-search-conferenceReview').click(function () {
+             var confname = $("#search-conference-confname").val();
+            table.reload('conferenceReviewTable',
+                {where: { confstatus:'unstart', confname: confname,deptcode:deptcode}});
+        });
+        //监听行
+        table.on('row(conferenceReviewTable-filter)', function (obj) {
+            var data = obj.data;
+            admin.popupCenter({
+                title: data.confname,
+                area: '200px',
+                path: '[[@{/app/conference/loadimport}]]?confid=' + data.confid+'&confname='+data.confname,
+                finish: function () {
+                    table.reload('conferenceTable');
+                }
+            });
+        });
+
+    });
+</script>
+
