diff --git a/config/application-devel-pg.properties b/config/application-devel-pg.properties
index af555b9..3202dda 100644
--- a/config/application-devel-pg.properties
+++ b/config/application-devel-pg.properties
@@ -3,7 +3,10 @@
 spring.jpa.hibernate.ddl-auto=update
 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
+spring.jpa.properties.hibernate.show_sql=false
 # Postgresql settings
+
+
 spring.datasource.platform=postgresql
 spring.datasource.url=jdbc:postgresql://172.28.201.70:15432/door
 spring.datasource.username=payapi
diff --git a/libs/httpclient-4.5.9-sources.jar b/libs/httpclient-4.5.9-sources.jar
new file mode 100644
index 0000000..84fdc2b
--- /dev/null
+++ b/libs/httpclient-4.5.9-sources.jar
Binary files differ
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfAttendReq.java b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfAttendReq.java
new file mode 100644
index 0000000..aac731a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/bean/ConfAttendReq.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.conference.api.bean;
+
+
+public class ConfAttendReq {
+    private Integer confid;
+    private String userid;
+    private String timestamp;
+    private String devphyid;
+
+    public Integer getConfid() {
+        return confid;
+    }
+
+    public void setConfid(Integer confid) {
+        this.confid = confid;
+    }
+
+    public String getUserid() {
+        return userid;
+    }
+
+    public void setUserid(String userid) {
+        this.userid = userid;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(String timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public String getDevphyid() {
+        return devphyid;
+    }
+
+    public void setDevphyid(String devphyid) {
+        this.devphyid = devphyid;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
index 4942238..86e1299 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/api/controller/ConerenceApiController.java
@@ -3,13 +3,15 @@
 import com.supwisdom.dlpay.api.bean.ApiResponse;
 import com.supwisdom.dlpay.conference.api.bean.*;
 import com.supwisdom.dlpay.conference.bean.ConferenceShowBean;
-import com.supwisdom.dlpay.conference.domain.TConfPeople;
-import com.supwisdom.dlpay.conference.domain.TConference;
+import com.supwisdom.dlpay.conference.domain.*;
 import com.supwisdom.dlpay.conference.service.ConferenceService;
 import com.supwisdom.dlpay.conference.util.ConferenceConstant;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.mainservice.domain.TCustomer;
+import com.supwisdom.dlpay.mainservice.service.WebInterfaceService;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
 import com.supwisdom.dlpay.ncmgr.service.NcService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,7 +28,7 @@
 @RequestMapping("/api/conference")
 public class ConerenceApiController {
   @Autowired
-  private SystemUtilService systemUtilService;
+  private WebInterfaceService webInterfaceService;
   @Autowired
   private ConferenceService conferenceService;
   @Autowired
@@ -98,16 +100,18 @@
       resp.setTotcnt(totcnt);
     }else{
       totcnt=conferenceService.getNolistConfPeopleCount(confid);
+      resp.setActualcnt(0);
       resp.setTotcnt(totcnt);
-
     }
+    resp.setRetcode(0);
+    resp.setRetmsg("ok");
     return  resp;
   }
 
 
   @RequestMapping(value = "/getconfpeople", method = RequestMethod.POST)
   @ResponseBody
-  public ConfPeopleResp getConferenceAttendRate(@ModelAttribute ConfPeopleReq req) {
+  public ConfPeopleResp getConfPeoples(@ModelAttribute ConfPeopleReq req) {
     ConfPeopleResp resp=new ConfPeopleResp();
     String confdate=req.getConfdate();
     if(StringUtil.isEmpty(confdate)){
@@ -131,6 +135,104 @@
   }
 
 
+  @RequestMapping(value = "/doattend", method = RequestMethod.POST)
+  @ResponseBody
+  public ApiResponse doAttend(@ModelAttribute ConfAttendReq req) {
+    ApiResponse resp=new ApiResponse();
+    String userid=req.getUserid();
+    Integer confid=req.getConfid();
+    String timestamp=req.getTimestamp();
+    String devphyid=req.getDevphyid();
+    if(StringUtil.isEmpty(userid)||null==confid||StringUtil.isEmpty(timestamp)||StringUtil.isEmpty(devphyid)){
+      resp.setRetcode(99);
+      resp.setRetmsg("参数传递错误");
+      return resp;
+    }
+    TCustomer customer=webInterfaceService.findCustomerById(userid);
+    if(null==customer){
+      resp.setRetcode(99);
+      resp.setRetmsg("客户不存在");
+      return resp;
+    }
+
+    TConference conference=conferenceService.getConferenceById(confid);
+    if(null==conference){
+      resp.setRetcode(99);
+      resp.setRetmsg("会议不存在");
+      return resp;
+    }
+
+    TNcDevice device=conferenceService.getBindedDevice(confid);
+    if(null==device){
+      resp.setRetcode(99);
+      resp.setRetmsg("请在会议绑定的设备上打卡");
+      return resp;
+    }
+
+    String now= DateUtil.getNow("yyyyMMddHHmmss");
+    String downcheck=DateUtil.getNewTime(now,-60*5);
+    String upcheck=DateUtil.getNewTime(now,60*5);
+
+    if (DateUtil.compareDatetime(timestamp, downcheck) < 0||DateUtil.compareDatetime(timestamp, upcheck)>0) {
+      resp.setRetcode(5);
+      resp.setRetmsg("时间误差过大");
+      return resp;
+    }
+
+    String attdate=DateUtil.getNow("yyyyMMdd");
+    String atttime=DateUtil.getNow("HHmm");
+
+    int compareAttend=DateUtil.compareDatetime(atttime,conference.getAttendtime(),"HHmm");
+    int compareStart=DateUtil.compareDatetime(atttime,conference.getStarttime(),"HHmm");
+
+    if(-1==compareAttend){
+      resp.setRetcode(6);
+      resp.setRetmsg("会议签到时间尚未开始，请在签到时间之后再打卡");
+      return resp;
+    }
+    String attstatus;
+    if(-1==compareStart){
+      attstatus= ConferenceConstant.ATTENDSTATUS_CHECKED;
+    }else{
+      attstatus=ConferenceConstant.ATTENDSTATUS_LATE;
+    }
+    if(ConferenceConstant.CONFTYPE_NOLIST.equals(conference.getConftype())){
+      TNolistConfPeople people=new TNolistConfPeople();
+
+      people.setAttstatus(attstatus);
+   //   people.setCardno(dtl.getCardno());
+      people.setConfid(conference.getConfid());
+      people.setCustid(customer.getCustid());
+      people.setAtttime(atttime);
+      people.setCustname(customer.getCustname());
+      people.setAtttype(ConferenceConstant.ATTTYPE_SELF);
+      people.setLastsaved(DateUtil.getNow());
+      conferenceService.saveNolistConfPeople(people);
+    }else{
+      TConfPeople people=conferenceService.getTConfPeopleByConfidAndCustid(conference.getConfid(),customer.getCustid());
+      if(null==people){
+        resp.setRetcode(7);
+        resp.setRetmsg("打卡人员不在会议名单中");
+        return resp;
+      }
+      people.setAttstatus(attstatus);
+      people.setAtttime(atttime);
+      conferenceService.saveConfPeople(people);
+    }
+   /* TConfDtl dtl=new TConfDtl();
+    dtl.setUpdateflag(0);
+    dtl.setAttdate();
+    dtl.setAtttime();
+    dtl.setCardno();*/
+  /*  resp.setCount(lst.size());
+    resp.setPeoplelist(lst);
+    resp.setRetcode(0);
+    resp.setRetmsg("ok");*/
+    resp.setRetcode(0);
+    resp.setRetmsg("打卡成功");
+    return resp;
+  }
+
     @RequestMapping(value = "/test", method = RequestMethod.POST)
   @ResponseBody
   public ApiResponse test() {
diff --git a/src/main/java/com/supwisdom/dlpay/conference/domain/TConfDtl.java b/src/main/java/com/supwisdom/dlpay/conference/domain/TConfDtl.java
index a6b8d11..c2d4209 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/domain/TConfDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/domain/TConfDtl.java
@@ -23,7 +23,7 @@
   @Column(name="CUSTID", length = 32)
   private String custid;
 
-    @Column(name="CARDNO", length = 8)
+  @Column(name="CARDNO", length = 8)
     private String cardno;
 
   @Column(name="ATTDATE", length = 8)
@@ -38,6 +38,9 @@
   @Column(name="UPDATEFLAG", length = 1)
   private Integer updateflag;
 
+  @Column(name="DEVPHYID", length = 20)
+  private String devphyid;
+
 
   public String getId() {
     return id;
@@ -110,4 +113,12 @@
     public void setCardno(String cardno) {
         this.cardno = cardno;
     }
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
 }
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 12b0334..a25b7bc 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -92,4 +92,6 @@
 
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     List<ConfPeopleApiBean> getConfPeopleListByDevphyid(String devphyid, String confdate) ;
+
+
 }
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 1f65ba8..d765a28 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
@@ -147,7 +147,8 @@
 
     @NotNull
     private Page<TConference> getConferencePage(String confname, String conftype, String deptcode, String confdate,String status, int pageNo, int pageSize) {
-        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by("confdate"));
+        Sort.Order order=new Sort.Order(Sort.Direction.DESC, "confdate");
+        Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(order));
 
 
         return conferenceDao.findAll(new Specification<TConference>() {
@@ -613,7 +614,7 @@
                 "left join tb_conference b on a.confid=b.confid  " +
                 "left join tb_conference_devbind c on b.confid=c.confid " +
                 "left join t_nc_device d on c.deviceid=d.deviceid " +
-                "where b.confdate=:confdate and d.devphyid=:devphyid" +
+                "where b.confdate=:confdate and d.devphyid=:devphyid " +
                 "UNION  " +
                 "select a.custname,a.attstatus,a.atttime from tb_nolist_conf_people a " +
                 "left join tb_conference b on a.confid=b.confid  " +
diff --git a/src/main/java/com/supwisdom/dlpay/conference/task/ConferenceTask.java b/src/main/java/com/supwisdom/dlpay/conference/task/ConferenceTask.java
index 02eec78..15e68b6 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/task/ConferenceTask.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/task/ConferenceTask.java
@@ -76,7 +76,7 @@
         }
     }
 
-    @Scheduled(cron = "${conference.uploaddtl.cron}")//每10秒执行一次
+  /*  @Scheduled(cron = "${conference.uploaddtl.cron}")//每10秒执行一次
     private void uploadConfDtl(){
         List<TConfDtl> dtllist=conferenceService.getUnupdateConfDtl();
         if(!StringUtil.isEmpty(dtllist)){
@@ -142,6 +142,6 @@
             }
         }
 
-    }
+    }*/
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
index dface1d..d967edf 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/util/ConferenceConstant.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.conference.util;
 
 
+import com.supwisdom.dlpay.framework.util.DateUtil;
 
 public class ConferenceConstant {
     //会议类型
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 0748c4f..51867d3 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -198,112 +198,6 @@
 INSERT INTO tb_systemparam(param_key,param_value,param_desc,param_flag) VALUES ('PAYAPI_SECRET','b32309b244904e1789b055eb1da51db1','登录核心平台secret','1');
 
 
-/**
-访客登记相关表sql
- */
- /**
- 访客登记表
-  */
-CREATE TABLE e_visitor_check_dtl (
-id int4 NOT NULL,
-visitorname varchar(40) COLLATE default,
-phone varchar(20) COLLATE default,
-time varchar(14) COLLATE default,
-deptcode varchar(32) COLLATE default,
-custid varchar(32) COLLATE default,
-company varchar(255) COLLATE default,
-remarks varchar(255) COLLATE default,
-sex varchar(1) COLLATE default,
-status int4,
-CONSTRAINT e_visitor_check_dtl_pkey PRIMARY KEY (id)
-)
-WITH (OIDS=FALSE)
-;
-
-ALTER TABLE e_visitor_check_dtl OWNER TO payapi;
-
-/**
-访客扫码登记表
- */
- CREATE TABLE e_visitor_dtl (
-openid varchar(40) COLLATE default,
-nickname varchar(40) COLLATE default,
-sex varchar(40) COLLATE default,
-province varchar(40) COLLATE default,
-city varchar(40) COLLATE default,
-country varchar(40) COLLATE default,
-headimgurl varchar(255) COLLATE default,
-unionid varchar(40) COLLATE default,
-inoutflag int4,
-transdate varchar(8) COLLATE default,
-transtime varchar(6) COLLATE default,
-status int4,
-privilege varchar(40) COLLATE default,
-binddate varchar(14) COLLATE default,
-id int4 NOT NULL,
-trandtime varchar(6) COLLATE default,
-CONSTRAINT e_visitor_dtl_pkey PRIMARY KEY (id)
-)
-WITH (OIDS=FALSE)
-;
-
-ALTER TABLE e_visitor_dtl OWNER TO payapi;
-
-COMMENT ON COLUMN e_visitor_dtl.inoutflag IS '出入标记 进门-1 出门-2';
-
-COMMENT ON COLUMN e_visitor_dtl.status IS '状态';
-
-/**
-微信扫码登记信息表
- */
-CREATE TABLE e_wechat_account (
-wxid varchar(32) COLLATE default NOT NULL,
-userid varchar(32) COLLATE default,
-appkey int4,
-openid varchar(128) COLLATE default,
-stuempno varchar(40) COLLATE default,
-status varchar(1) COLLATE default,
-binddate varchar(14) COLLATE default,
-nickname varchar(100) COLLATE default,
-sex varchar(1) COLLATE default,
-province varchar(60) COLLATE default,
-country varchar(60) COLLATE default,
-headimgurl varchar(200) COLLATE default,
-privilege varchar(40) COLLATE default,
-unionid varchar(128) COLLATE default,
-cardcode varchar(40) COLLATE default,
-city varchar(60) COLLATE default,
-CONSTRAINT e_wechat_account_pkey PRIMARY KEY (wxid)
-)
-WITH (OIDS=FALSE)
-;
-
-ALTER TABLE e_wechat_account OWNER TO payapi;
-
-
-CREATE TABLE e_wechat_config (
-id varchar(40) COLLATE default NOT NULL,
-appid varchar(40) COLLATE default,
-secret varchar(200) COLLATE default,
-shopid varchar(32) COLLATE default,
-shopkey varchar(200) COLLATE default,
-cardid varchar(40) COLLATE default,
-accesstoken varchar(200) COLLATE default,
-refreshtoken varchar(200) COLLATE default,
-tokentime int4,
-domain varchar(200) COLLATE default,
-CONSTRAINT e_wechat_config_pkey PRIMARY KEY (id)
-)
-WITH (OIDS=FALSE)
-;
-
-ALTER TABLE e_wechat_config OWNER TO payapi;
-
-
-
-
-
-
 INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (8, '设备类型', 'H', '会议平板');
 INSERT INTO "t_dictionary"("dicttype", "dicttypename", "dictval", "dictcaption") VALUES (16, '设备使用类别', 'HY', '会议签到');
 
@@ -330,4 +224,4 @@
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (31, NULL, 1, NULL, '', '/system/custtypeindex', '客户类别管理', 9, 3, NULL);
 INSERT INTO "tb_function"("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", "grade") VALUES (29, NULL, 0, NULL, 'layui-icon-app', '#', '会议签到', 8, -1, NULL);
 
-
+INSERT INTO "tb_dept"("deptcode", "deptname", "deptno", "ename", "fdeptcode", "lastsaved", "status") VALUES ('0', '根部门', 'root', NULL, '-1', NULL, 'normal');
