diff --git a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
index d3a0f87..6c46563 100644
--- a/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
+++ b/src/main/java/com/supwisdom/dlpay/api/controller/DoorApiAction.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.api.controller;
 
 import com.supwisdom.dlpay.api.bean.BaseResp;
+import com.supwisdom.dlpay.api.bean.DoorQRCodeParam;
+import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse;
 import com.supwisdom.dlpay.customer.bean.CustomerSearchBean;
 import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
@@ -10,6 +12,7 @@
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.StringUtil;
 import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
+import com.supwisdom.dlpay.paysdk.proxy.ConsumePropxy;
 import com.supwisdom.dlpay.system.domain.TDept;
 import com.supwisdom.dlpay.system.service.SystemService;
 import com.supwisdom.dlpay.visitormanage.domain.EVisitorCheckDtl;
@@ -37,6 +40,8 @@
   private WebInterfaceService webInterfaceService;
   @Autowired
   private VisitormanageService visitormanageService;
+  @Autowired
+  private ConsumePropxy consumePropxy;
 
   @RequestMapping("/checkonline")
   @ResponseBody
@@ -48,7 +53,19 @@
     resp.setRetmsg("连接成功");
     resp.setData(dt);
     return resp;
-  }@RequestMapping("/getdeptlist")
+  }
+
+
+  @RequestMapping("/checkqrcode")
+  @ResponseBody
+  public DoorQrcodeResponse resolveQrcode(@RequestParam(value = "qrcode",required = true,defaultValue = "")String qrcode) {
+      DoorQRCodeParam qrparam = new DoorQRCodeParam();
+      qrparam.setQrcode(qrcode);
+      DoorQrcodeResponse qrcoderesp = consumePropxy.qrcodequery(qrparam);
+      return qrcoderesp;
+  }
+
+  @RequestMapping("/getdeptlist")
   @ResponseBody
   public BaseResp getdeptlist() {
     BaseResp resp = new BaseResp();
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 e5be303..a830922 100644
--- a/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
+++ b/src/main/java/com/supwisdom/dlpay/app/controller/AppController.java
@@ -6,6 +6,7 @@
 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.bean.ConfpeopleShowBean;
 import com.supwisdom.dlpay.conference.dao.ConferenceReviewDao;
 import com.supwisdom.dlpay.conference.domain.TConferenceReview;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
@@ -44,6 +45,7 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.xml.crypto.Data;
 import java.util.*;
 
 @Controller
@@ -435,16 +437,22 @@
         return "apph5/remoteMintUIH5";}
     */
 
-    @RequestMapping("/conference/attendconference")
-    public String doAttendConference( @RequestParam(value = "userId", required = true, defaultValue = "") String userId,
+    /**
+     * 手机会议报名
+     * @param userId
+     * @param model
+     * @return
+     */
+    @GetMapping("/conference/signupconference")
+    public String doSignupConference( @RequestParam(value = "userId", required = true, defaultValue = "") String userId,
             Model model) {
-        TConferenceReview review=conferenceService.getReviewerByuserid(userId);
-        if(null==review){
-            return null;
-        }
         TCustomer cust=webInterfaceService.findCustomerById(userId);
         if(null==cust){
-            return null;
+            return "/error/403";
+        }
+        TConferenceReview review=conferenceService.getReviewerByuserid(userId);
+        if(null==review){
+            return "/error/403";
         }
 
         model.addAttribute("deptcode",cust.getDeptcode());
@@ -517,6 +525,61 @@
     }
 
     /**
+     * 手机会议流水
+     * @param userId
+     * @param model
+     * @return
+     */
+    @GetMapping("/conference/conferencedtl")
+    public String ConferenceDtl( @RequestParam(value = "userId", required = true, defaultValue = "") String userId,
+                                      Model model) {
+        TConferenceReview review=conferenceService.getReviewerByuserid(userId);
+        if(null==review){
+            return "error/403";
+        }
+        TCustomer cust=webInterfaceService.findCustomerById(userId);
+        if(null==cust){
+            return "error/403";
+        }
+    /*    String startdate= DateUtil.getNewDay(-7, "yyyy-MM-dd");
+        model.addAttribute("startdate", startdate);
+
+        String today = DateUtil.getNow("yyyy-MM-dd");
+        model.addAttribute("enddate", today);*/
+        model.addAttribute("custid",userId);
+
+        return "apph5/conference/conferencedtl";
+    }
+
+
+    @GetMapping("/conference/confdtllist")
+    @ResponseBody
+    public PageResult<ConfpeopleShowBean> searchConfdtllist(
+            @RequestParam(value = "custid" ) String custid ,
+            @RequestParam(value = "peroid" ) String peroid ) {
+        try {
+            if(StringUtil.isEmpty(custid)||StringUtil.isEmpty(peroid)){
+                throw new WebCheckException("查询参数不完整");
+            }
+            String startdate;
+            if("year".equals(peroid)){
+                startdate= DateUtil.getNewDay(-365, "yyyy-MM-dd");
+
+            }else if ("month".equals(peroid)){
+                startdate= DateUtil.getNewDay(-30, "yyyy-MM-dd");
+
+            }else{
+                startdate= DateUtil.getNewDay(-7, "yyyy-MM-dd");
+            }
+
+            return conferenceService.getPersonalConfDtl(custid, startdate,"");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+    /**
      * App远程开门
      *
      * @param devId
diff --git a/src/main/java/com/supwisdom/dlpay/conference/bean/ConfpeopleShowBean.java b/src/main/java/com/supwisdom/dlpay/conference/bean/ConfpeopleShowBean.java
index b36dcd9..a873c5c 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/bean/ConfpeopleShowBean.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/bean/ConfpeopleShowBean.java
@@ -9,6 +9,7 @@
     private String conftype;
     private String cardno;
     private String deptname;
+    private String confdate;
     private String attstatus;
     private String atttime;
     private String remark;
@@ -128,4 +129,12 @@
     public void setInsteadcustname(String insteadcustname) {
         this.insteadcustname = insteadcustname;
     }
+
+    public String getConfdate() {
+        return confdate;
+    }
+
+    public void setConfdate(String confdate) {
+        this.confdate = confdate;
+    }
 }
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 bb40eb3..83f82c4 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -31,6 +31,8 @@
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import com.supwisdom.dlpay.paysdk.proxy.ApiCommonProxy;
 import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
+import com.supwisdom.dlpay.system.domain.TDept;
+import com.supwisdom.dlpay.system.service.SystemService;
 import com.supwisdom.dlpay.util.RedisUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
 import com.supwisdom.dlpay.visitormanage.domain.EVisitorConfDtl;
@@ -64,7 +66,7 @@
     @Autowired
     private WebInterfaceService webInterfaceService;
     @Autowired
-    private SystemUtilService systemUtilService;
+    private SystemService systemService;
     @Autowired
     private VisitormanageService visitormanageService;
     @Autowired
@@ -153,6 +155,8 @@
         model.addAttribute("maxdate", DateUtil.reformatDatetime(now, "yyyyMMdd", "yyyy-MM-dd"));
         List<TNcDevice> devices = ncService.getSystemDevByType(ConferenceConstant.DEVICETYPE_CONFERENCE);
         model.addAttribute("confdevice", devices);
+        List<TDept> depts=systemService.findAllDept();
+        model.addAttribute("depts",depts);
         return "conference/confform";
     }
 
@@ -182,6 +186,7 @@
                                      @RequestParam("endtime") String endtime,
                                      @RequestParam("attendtime") String attendtime,
                                      @RequestParam("deviceids") List<Integer> deviceid,
+                                     @RequestParam("deptcodes") List<String> deptcodes,
                                      @RequestParam("remark") String remark,
                                      @AuthenticationPrincipal UserDetails operUser,
                                      HttpServletRequest request) {
@@ -205,7 +210,7 @@
 
 
             if (conferenceService.saveNewConference(confname.trim(), DateUtil.unParseToDateFormat(confdate), conftype, DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), DateUtil.unParseToDateFormat(attendtime), oper, deviceid, remark)) {
-                List<TConferenceReview> review=conferenceService.getAllReviewer(oper.getDeptcode());
+                List<TConferenceReview> review=conferenceService.getReviewerByDeptcodes(deptcodes);
                 CommonSendMessageParam param=new CommonSendMessageParam();
                 param.setContent("您有新的会议需要分配，请确认");
                 param.setTitle("会议分配通知");
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 9ed6589..7a024ce 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -93,6 +93,9 @@
     PageResult<ConfpeopleShowBean> getConfPeoplePage(Integer confid, String attstatus,String atttype, int pageNo, int pageSize);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
+    PageResult<ConfpeopleShowBean> getPersonalConfDtl(String  custid, String startdate,String enddate );
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
     PageResult<ConfpeopleReportBean> getConfPeopleReport(Integer confid, String searchkey,String attstatus, String deptcode,String attflag);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
@@ -126,6 +129,10 @@
     List<TConferenceReview> getAllReviewer(String deptcode);
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
+    List<TConferenceReview> getReviewerByDeptcodes(List<String> deptcode);
+
+
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
     TConferenceReview getReviewerByuserid(String userid);
 
     @Transactional(rollbackFor = Exception.class)
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 47f0bd5..f8c848a 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
@@ -643,6 +643,42 @@
     }
 
     @Override
+    public PageResult<ConfpeopleShowBean> getPersonalConfDtl(String custid, String startdate, String enddate) {
+
+        StringBuffer querySql = new StringBuffer("SELECT g.confname,g.confdate,g.attstatus from " +
+                "(SELECT c.confname,c.confdate,t.attstatus,t.custid,c.status from tb_conf_people t " +
+                "LEFT JOIN tb_conference c " +
+                "on t.confid=c.confid " +
+                "union " +
+                "SELECT c.confname,c.confdate,t.attstatus,t.custid,c.status from tb_nolist_conf_people t " +
+                "LEFT JOIN tb_conference c " +
+                "on t.confid=c.confid) g " +
+                "where g.custid=:custid " +
+                "and g.status='over' ") ;
+
+        if (!StringUtil.isEmpty(startdate)) {
+            querySql.append("and g.confdate >=:startdate ");
+        }
+        if (!StringUtil.isEmpty(enddate)) {
+            querySql.append("and g.confdate <=:enddate  ");
+        }
+        querySql.append(" order by g.confdate desc");
+        Query query = entityManager.createNativeQuery(querySql.toString());
+
+        query.setParameter("custid", custid);
+        if (!StringUtil.isEmpty(startdate)) {
+            query.setParameter("startdate", startdate);
+
+        }
+        if (!StringUtil.isEmpty(enddate)) {
+            query.setParameter("enddate", enddate);
+        }
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(ConfpeopleShowBean.class));
+        List<ConfpeopleShowBean> list = query.getResultList();
+        return new PageResult<>(list);
+    }
+
+    @Override
     public PageResult<ConfpeopleReportBean> getConfPeopleReport(Integer confid, String searchkey, String attstatus, String deptcode, String attflag) {
         TConference conf = conferenceDao.findByConfid(confid);
         if (null == conf) {
@@ -892,6 +928,21 @@
     }
 
     @Override
+    public List<TConferenceReview> getReviewerByDeptcodes(List<String> deptcode) {
+
+        StringBuffer querySql = new StringBuffer("select a.custid,a.opercode,a.updatetime from t_conference_review a  " +
+                "left join t_customer c on a.custid=c.custid where 1=1" );
+
+        if (!StringUtil.isEmpty(deptcode)) {
+            querySql.append(" and c.deptcode in ('" + StringUtils.join(deptcode.toArray(), "','") + "') ");
+        }
+        Query query = entityManager.createNativeQuery(querySql.toString());
+        query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TConferenceReview.class));
+        List<TConferenceReview> list = query.getResultList();
+        return list;
+    }
+
+    @Override
     public TConferenceReview getReviewerByuserid(String userid) {
         return conferenceReviewDao.getOne(userid);
     }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index df6d311..8621dad 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -81,6 +81,22 @@
   }
 
   /**
+   * 获取当天前后的时间
+   *
+   * @param intervalday
+   * @param format
+   * @return
+   */
+  public static String getNewDay(int intervalday, String format) {
+    SimpleDateFormat sdf = new SimpleDateFormat(format);
+    Calendar calendar = Calendar.getInstance();
+    calendar.setTime(new Date());
+    calendar.add(Calendar.DATE, intervalday);
+    return sdf.format(calendar.getTime());
+  }
+
+
+  /**
    * 得到两个日期相差的天数 格式 yyyyMMdd @return diffdays = secondDay - firstDay
    */
   public static long getIntervalDay(String firstDay, String secondDay) {
diff --git a/src/main/resources/templates/apph5/conference/conferencedtl.html b/src/main/resources/templates/apph5/conference/conferencedtl.html
new file mode 100644
index 0000000..a73f48c
--- /dev/null
+++ b/src/main/resources/templates/apph5/conference/conferencedtl.html
@@ -0,0 +1,108 @@
+
+<!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/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>
+<script type="text/javascript" th:src="@{/static/res/assets/plugins/laydate/laydate.js}"></script>
+
+
+<div class="layui-card">
+    <input type="hidden" id="conferenceDtl-custid" th:value="${custid}"/>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            <div class="layui-inline">
+                <select  lay-filter="onChange"  id="conferenceDtl-peroid">
+                    <option value="week"> 最近一周</option>
+                    <option value="month"> 最近一个月</option>
+                    <option value="year"> 最近一年</option>
+                </select>&emsp;
+            </div>
+            </button>
+        </div>
+        <table class="layui-table" id="conferenceDtlTable" lay-filter="conferenceDtlTable-filter"></table>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        form.render("select");
+        // 渲染表格
+        var renderDetailTable = function (obj) {
+            table.render({
+                where: obj,
+                elem: '#conferenceDtlTable',
+                url: '[[@{/app/conference/confdtllist}]]',
+                page: false,
+                cols: [
+                    [
+                        {field: 'confname', title: '会议名称', align: 'center', fixed: 'left'},
+                        {field: 'confdate',   title: '会议日期', align: 'center'},
+                        {
+                            field: 'attstatus', title: '状态', align: 'center', sort: true, templet: function (d) {
+                                if ('uncheck' == d.attstatus) {
+                                    return '<span class="layui-badge layui-bg-orange">未签到</span>'
+                                } else if ('checked' == d.attstatus) {
+                                    return '<span class="layui-badge layui-bg-green">已签到</span>';
+                                } else if ('handcheck' == d.attstatus) {
+                                    return '<span class="layui-badge layui-bg-green">手工签到</span>';
+                                } else if ('late' == d.attstatus) {
+                                    return '<span class="layui-badge layui-bg-cyan">迟到</span>';
+                                } else if ('instead' == d.attstatus) {
+                                    return '<span class="layui-badge">被代签</span>';
+                                }  else if ('closed' == d.attstatus) {
+                                    return '<span class="layui-badge layui-bg-gray">关闭</span>';
+                                }
+                                else {
+                                    return d.attstatus;
+                                }
+                            }
+                        },
+                    ]
+                ]
+            });
+        }
+        var peroid=$("#conferenceDtl-peroid").val()
+        var custid=$("#conferenceDtl-custid").val()
+
+        renderDetailTable({custid:custid,peroid:peroid});
+
+        // 搜索按钮点击事件
+        $('#btn-search-conferenceDtl').click(function () {
+            var peroid=$("#conferenceDtl-peroid").val()
+            var custid=$("#conferenceDtl-custid").val()
+
+            table.reload('conferenceDtlTable',
+                {where: { custid:custid,peroid:peroid}});
+        });
+
+        form.on('select(onChange)', function(data){
+            var peroid=$("#conferenceDtl-peroid").val()
+            var custid=$("#conferenceDtl-custid").val()
+
+            table.reload('conferenceDtlTable',
+                {where: { custid:custid,peroid:peroid}});
+        });
+
+    });
+</script>
+
diff --git a/src/main/resources/templates/conference/confform.html b/src/main/resources/templates/conference/confform.html
index 8f84fc0..7c99fb7 100644
--- a/src/main/resources/templates/conference/confform.html
+++ b/src/main/resources/templates/conference/confform.html
@@ -59,6 +59,17 @@
              </select>&emsp;
          </div>
     </div>
+
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"> </span>参会部门</label>
+        <div class="layui-input-block">
+            <select   name="deptcode" class="layui-select" xm-select-height="36px" xm-select="deptcodes">
+                <option th:each="dept:${depts}" th:value="${dept.deptcode}"
+                        th:text="${dept.deptname}"></option>
+            </select>&emsp;
+        </div>
+    </div>
+
     <div class="layui-form-item">
         <label class="layui-form-label confinput-label">会议概要</label>
         <div class="layui-input-block">
@@ -93,12 +104,12 @@
         var admin = layui.admin;
         var form = layui.form;
         var laydate = layui.laydate;
-        var upload = layui.upload;
 
         var confType = 'list';
 
         var formSelects = layui.formSelects;
         formSelects.btns('deviceids', []);
+        formSelects.btns('deptcodes', []);
 
      //   form.render("select");
         laydate.render({
@@ -155,6 +166,8 @@
                 return;
             }
             var deviceids=formSelects.value('deviceids','val');
+            var deptcodes=formSelects.value('deptcodes','val');
+
             if(deviceids.length==0){
                 layer.msg("请选择设备", {icon: 2, time: 1500});
                 return;
@@ -171,22 +184,7 @@
 
             formData.append("remark",vdata.remark);
             formData.append("deviceids",deviceids);
-          /*  var flag=false;
-            var files = $('#form-conference-records').prop('files');
-            for (var i = 0; i < files.length; i++) {
-                var filename = files[i].name;
-                var suffix = filename.substr(filename.lastIndexOf("."));
-                if ('.xls' != suffix && '.xlsx' != suffix) {
-                    layer.msg("请选择excel文件", {icon: 2, time: 1500});
-                    return;
-                }
-                formData.append('file', files[i]);
-                flag = true;
-            }
-            if (!flag&&"list"==vdata.conftype) {
-                layer.msg("请选择名单", {icon: 2, time: 1500});
-                return;
-            }*/
+            formData.append("deptcodes",deptcodes);
 
             layer.load(2);
             $.ajax({
