会议签到增加人员报表,增加会议名称修改
diff --git a/src/main/java/com/supwisdom/dlpay/conference/controller/ConfViewController.java b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfViewController.java
new file mode 100644
index 0000000..cb6f8ae
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConfViewController.java
@@ -0,0 +1,111 @@
+package com.supwisdom.dlpay.conference.controller;
+
+import com.supwisdom.dlpay.atte.service.AtteClassService;
+import com.supwisdom.dlpay.conference.service.ConferenceService;
+import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.domain.TCustType;
+import com.supwisdom.dlpay.system.service.ManagerService;
+import com.supwisdom.dlpay.system.service.SystemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+@RequestMapping("/confreview")
+public class ConfViewController {
+    @Autowired
+    private AtteClassService atteClassService;
+    @Autowired
+    private ConferenceService conferenceService;
+    @Autowired
+    private SystemService systemService;
+
+    /**
+     *    审核人管理
+     * @param
+     */
+    @GetMapping("/index")
+    public String reviewindex(){
+        return "confreview/index";
+    }
+
+    /**
+     *  获取审核人员名单
+     * @param
+     */
+    @ResponseBody
+    @RequestMapping(value = "/custlist", method = RequestMethod.POST)
+    public Map getReviewerList(
+            @RequestParam(value = "perName", required = false, defaultValue = "") String perName,
+            @RequestParam(value = "custtypeid", required = false, defaultValue = "") String custtypeid,
+            @AuthenticationPrincipal TOperator operUser) {
+        Map map = new HashMap();
+        try {
+
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-99";
+                }
+            }
+            List<TCustomerInfo> allcust=atteClassService.getAllCustomer(perName,deptcode,custtypeid);
+            List<TCustomerInfo> reviewlist=conferenceService.getConferenceReviewList(deptcode);
+            Boolean countIndex = false;
+            if (allcust.size() > 4000) {
+                countIndex = true;
+            }
+            allcust.removeAll(reviewlist);
+            List<TCustType> custtypelist=systemService.findAllCusttype();
+            map.put("custtypelist",custtypelist);
+            map.put("allcust",allcust);
+            map.put("reviewlist",reviewlist);
+            map.put("countIndex", countIndex);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+    /**
+     *     保存审核人员
+     * @param
+     */
+    @ResponseBody
+    @RequestMapping(value="/addreview", method = RequestMethod.POST)
+    public Map saveReview(@RequestParam(value = "idlist") List<String> custids,
+                          @AuthenticationPrincipal TOperator operUser,
+                          HttpServletRequest request, HttpServletResponse response) {
+        Map map=new HashMap();
+
+        try {
+            String opertype=operUser.getOpertype();
+            String deptcode=operUser.getDeptcode();
+            if (!StringUtil.isEmpty(opertype) &&(opertype.equals("S")||opertype.equals("P"))){
+                deptcode=null;
+            }else {
+                if(StringUtil.isEmpty(deptcode)){
+                    deptcode="-99";
+                }
+            }
+            conferenceService.addConfReview(deptcode,operUser.getOpercode(),custids);
+            map.put("errStr","");
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("errStr","保存信息异常!");
+        }
+
+        return map;
+    }
+}
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 735f54a..311fdbb 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/controller/ConferenceController.java
@@ -147,6 +147,22 @@
         return "conference/confform";
     }
 
+    @GetMapping("/conference/load4updateconf")
+    public String load4UpdateConference(   @RequestParam("confid") Integer confid,
+                                           Model model) {
+        TConference conf=conferenceService.getConferenceById(confid);
+
+        String now = DateUtil.getNow("yyyyMMdd");
+        model.addAttribute("maxdate", DateUtil.reformatDatetime(now, "yyyyMMdd", "yyyy-MM-dd"));
+        model.addAttribute("starttime", DateUtil.reformatDatetime(conf.getStarttime(), "HHmm", "HH:mm"));
+        model.addAttribute("endtime", DateUtil.reformatDatetime(conf.getEndtime(), "HHmm", "HH:mm"));
+        model.addAttribute("attendtime", DateUtil.reformatDatetime(conf.getAttendtime(), "HHmm", "HH:mm"));
+        model.addAttribute("confname", conf.getConfname());
+        model.addAttribute("confid",conf.getConfid());
+        model.addAttribute("remark", conf.getRemark());
+        return "conference/confupdate";
+    }
+
 
     @PostMapping("/conference/addconf")
     @ResponseBody
@@ -193,6 +209,47 @@
         }
     }
 
+    @PostMapping("/conference/updateconf")
+    @ResponseBody
+    public JsonResult editConference(@RequestParam("confname") String confname,
+                                     @RequestParam("confid") Integer confid,
+                                     @RequestParam("confdate") String confdate,
+                                     @RequestParam("starttime") String starttime,
+                                     @RequestParam("endtime") String endtime,
+                                     @RequestParam("attendtime") String attendtime,
+                                     @RequestParam("remark") String remark,
+                                     @AuthenticationPrincipal UserDetails operUser,
+                                     HttpServletRequest request) {
+        try {
+            if (StringUtil.isEmpty(confname)
+                    ||null==confid
+                    || !DateUtil.checkDatetimeValid(starttime, "HH:mm")
+                    || !DateUtil.checkDatetimeValid(endtime, "HH:mm")
+                    || !DateUtil.checkDatetimeValid(attendtime, "HH:mm")) {
+                return JsonResult.error("参数传递错误");
+            } else if (DateUtil.compareDatetime(endtime, starttime, "HH:mm") <= 0) {
+                return JsonResult.error("时间范围错误,结束时间必须比起始时间大");
+            } else if (DateUtil.compareDatetime(starttime, attendtime, "HH:mm") <= 0) {
+                return JsonResult.error("时间范围错误,起始时间必须比签到时间大");
+            }
+            TOperator oper = (TOperator) operUser;
+            if (null == oper || StringUtil.isEmpty(oper.getOperid())) {
+                return JsonResult.error("登录过期,请重新登录");
+            }
+
+            if (conferenceService.saveConference(confid,confname.trim(), DateUtil.unParseToDateFormat(confdate), DateUtil.unParseToDateFormat(starttime), DateUtil.unParseToDateFormat(endtime), DateUtil.unParseToDateFormat(attendtime), remark)) {
+                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);
+        }
+    }
+
 
     @GetMapping("/conference/downloadexcel")
     @ResponseBody
diff --git a/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceReviewDao.java b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceReviewDao.java
new file mode 100644
index 0000000..864f320
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/dao/ConferenceReviewDao.java
@@ -0,0 +1,17 @@
+package com.supwisdom.dlpay.conference.dao;
+
+
+import com.supwisdom.dlpay.conference.domain.TConfPeople;
+import com.supwisdom.dlpay.conference.domain.TConferenceReview;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ConferenceReviewDao extends JpaRepository<TConferenceReview, String> {
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceReview.java b/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceReview.java
new file mode 100644
index 0000000..decd59d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/conference/domain/TConferenceReview.java
@@ -0,0 +1,41 @@
+package com.supwisdom.dlpay.conference.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="t_conference_review")
+public class TConferenceReview {
+
+    private String custid;
+    private String opercode;
+    private String updatetime;
+
+    @Id
+    @Column(name="custid",length = 32)
+    public String getCustid() {
+        return custid;
+    }
+
+    public void setCustid(String custid) {
+        this.custid = custid;
+    }
+    @Column(name="opercode",length = 255)
+    public String getOpercode() {
+        return opercode;
+    }
+
+    public void setOpercode(String opercode) {
+        this.opercode = opercode;
+    }
+    @Column(name="updatetime",length = 14)
+    public String getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(String updatetime) {
+        this.updatetime = updatetime;
+    }
+}
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 e2b54aa..75f1613 100644
--- a/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
+++ b/src/main/java/com/supwisdom/dlpay/conference/service/ConferenceService.java
@@ -8,6 +8,7 @@
 import com.supwisdom.dlpay.conference.bean.ConfpeopleReportBean;
 import com.supwisdom.dlpay.conference.bean.ConfpeopleShowBean;
 import com.supwisdom.dlpay.conference.domain.*;
+import com.supwisdom.dlpay.doorlist.bean.TCustomerInfo;
 import com.supwisdom.dlpay.framework.domain.TOperator;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.ncmgr.domain.TNcDevice;
@@ -56,6 +57,10 @@
     @Transactional(rollbackFor = Exception.class)
     boolean saveNewConference(String confname,String confdate, String conftype, String starttime,
                               String endtime, String attendtime, TOperator oper, List<Integer> deviceid,String remark) throws Exception;
+    @Transactional(rollbackFor = Exception.class)
+    boolean saveConference(Integer confid,String confname,String confdate,  String starttime,
+                              String endtime, String attendtime,  String remark) throws Exception;
+
 
     @Transactional(rollbackFor = Exception.class)
     boolean saveConferencePeopleByExcel(Integer confid,String fpath) throws Exception;
@@ -114,4 +119,9 @@
     @Transactional(rollbackFor = Exception.class, readOnly = true)
     List<ConfPeopleApiBean> getConfPeopleListByConfid(Integer confid, String conftype) ;
 
+    @Transactional(rollbackFor = Exception.class, readOnly = true)
+    public List<TCustomerInfo> getConferenceReviewList(String deptcode);
+
+    @Transactional(rollbackFor = Exception.class)
+    public 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 b27841b..5685129 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
@@ -4,6 +4,7 @@
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
 import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.atte.domain.TAtteReview;
 import com.supwisdom.dlpay.conference.api.bean.ConfPeopleApiBean;
 import com.supwisdom.dlpay.conference.api.bean.ConferenceApiBean;
 import com.supwisdom.dlpay.conference.bean.*;
@@ -68,7 +69,8 @@
     private NolistConfPeopleDao nolistConfPeopleDao;
     @Autowired
     private CustomerDao customerDao;
-
+    @Autowired
+    private ConferenceReviewDao conferenceReviewDao;
 
     @PersistenceContext
     private EntityManager entityManager;
@@ -316,6 +318,23 @@
     }
 
     @Override
+    public boolean saveConference(Integer confid, String confname, String confdate, String starttime, String endtime, String attendtime, String remark) throws Exception {
+        TConference conf=conferenceDao.findByConfid(confid);
+        if(null==conf){
+            return false;
+        }
+        conf.setConfname(confname);
+        conf.setConfdate(confdate);
+        conf.setStarttime(starttime);
+        conf.setEndtime(endtime);
+        conf.setAttendtime(attendtime);
+        conf.setRemark(remark);
+        conferenceDao.save(conf);
+        return true;
+    }
+
+
+    @Override
     public boolean saveConferencePeopleByExcel(Integer confid, String fpath) throws Exception {
         TConference conference = conferenceDao.findByConfid(confid);
         if (null == conference) {
@@ -841,5 +860,53 @@
         return cnt.intValue();
     }
 
+    @Override
+    public List<TCustomerInfo> getConferenceReviewList(String deptcode) {
+        String sql = "select a.deptcode,a.custtypeid,a.custid,a.custname,b.cardno,b.bankcardno,b.cardphyid,b.expiredate from T_Customer a left join t_card b on a.custid = b.custid " +
+                " where a.status='1' and b.status='normal' and b.transtatus='normal' ";
+        sql+= " and a.custid in ( select custid from t_conference_review ) ";
+        if(!StringUtil.isEmpty(deptcode)){
+            sql+=" and a.deptcode= :dcode ";
+        }
+        sql +=" order by b.cardno desc ";
+        Query query = entityManager.createNativeQuery(sql, TCustomerInfo.class);
+        if(!StringUtil.isEmpty(deptcode)){
+            query.setParameter("dcode",deptcode);
+        }
+        List<TCustomerInfo> list = query.getResultList();
+        return list;
+    }
 
+    @Override
+    public boolean addConfReview(String deptcode, String opercode, List<String> custidlist) {
+        delConfReview(deptcode);
+        for (String custid:custidlist){
+            TConferenceReview reviewer=new TConferenceReview();
+            reviewer.setCustid(custid);
+            reviewer.setOpercode(opercode);
+            reviewer.setUpdatetime(DateUtil.getNow());
+            conferenceReviewDao.save(reviewer);
+        }
+        return true;
+    }
+
+    public boolean delConfReview(String deptcode) {
+        String sql=" delete from TConferenceReview where custid in (select custid from TCustomer where 1=1  ";
+        if(!StringUtil.isEmpty(deptcode)){
+            sql+=" and deptcode = :dcode";
+        }
+        sql+=" ) ";
+        try {
+            Query query=entityManager.createQuery(sql);
+            if(!StringUtil.isEmpty(deptcode)){
+                query.setParameter("dcode",deptcode);
+            }
+            query.executeUpdate();
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return false;
+    }
 }
diff --git a/src/main/resources/templates/conference/conflist.html b/src/main/resources/templates/conference/conflist.html
index 8c8276c..2165d8a 100644
--- a/src/main/resources/templates/conference/conflist.html
+++ b/src/main/resources/templates/conference/conflist.html
@@ -32,11 +32,13 @@
 
     {{# if(d.status=='unstart'&&d.conftype=='list'){ }}
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit">编辑</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="excel">excel导入</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="people">分配人员</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="qrcode">申请开门码</a>
     {{# } else if(d.status=='unstart'&&d.conftype=='nolist'){ }}
     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+    <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit">编辑</a>
     <a class="layui-btn layui-btn layui-btn-xs" lay-event="qrcode">申请开门码</a>
     {{# } }}
 
@@ -78,7 +80,7 @@
                         }
                     },
                     {
-                        field: 'status', title: '状态', align: 'center', width: 120, sort: true, templet: function (d) {
+                        field: 'status', title: '状态', align: 'center', width: 100, sort: true, templet: function (d) {
                             if ('unstart' == d.status) {
                                 return '<span class="layui-badge layui-bg-orange">未开始</span>'
                             } else if ('start' == d.status) {
@@ -93,7 +95,7 @@
                         }
                     },
                     /*  {field: 'remark', title: '备注',  align: 'center'},*/
-                    {align: 'center', title: '操作', width: 310, toolbar: '#conference-table-bar', fixed: 'right'}
+                    {align: 'center', title: '操作', width: 340, toolbar: '#conference-table-bar', fixed: 'right'}
                 ]
             ]
         });
@@ -183,7 +185,18 @@
                         table.reload('conferenceTable');
                     }
                 });
-            }else if ('people' == obj.event) {
+            } else if ('edit' == obj.event) {
+                admin.putTempData('t_conf', data);
+                admin.popupCenter({
+                    title: "修改会议",
+                    path: '[[@{/conference/load4updateconf}]]?confid='+ data.confid,
+                    area: '500px',
+                    finish: function () {
+                        table.reload('conferenceTable');
+                    }
+                });
+            }
+            else if ('people' == obj.event) {
                 admin.popupCenter({
                     title: "分配人员",
                     area: '900px',
diff --git a/src/main/resources/templates/conference/confupdate.html b/src/main/resources/templates/conference/confupdate.html
new file mode 100644
index 0000000..79b7356
--- /dev/null
+++ b/src/main/resources/templates/conference/confupdate.html
@@ -0,0 +1,188 @@
+<div id="confupdate-form" lay-filter="confupdate-form-filter" class="layui-form model-form" style="padding: 10px 25px;">
+    <input type="hidden" id="confupdate-hidden-maxdate" th:value="${maxdate}"/>
+    <input type="hidden" id="confupdate-hidden-confid" name="confid" th:value="${confid}"/>
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议名称</label>
+        <div class="layui-input-block">
+            <input type="text" class="layui-input" name="confname"  id="form-confupdate-confname"
+                   style="width: 90%;"
+                   autocomplete="off" lay-verify="required|Confname" th:value="${confname}"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议日期</label>
+        <div class="layui-input-inline">
+            <input type="text" name="confdate" id="form-confupdate-confdate" placeholder="会议日期" th:value="${maxdate}"
+                   autocomplete="off" class="layui-input"/>
+        </div>
+    </div>
+
+
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>会议时间段</label>
+        <div class="layui-input-inline" style="width: 100px;">
+            <input type="text" name="starttime" placeholder="9:00" id="form-confupdate-starttime" autocomplete="off"
+                   maxlength="5"
+                   class="layui-input" lay-verify="required" th:value="${starttime}"/>
+        </div>
+        <div class="layui-form-mid">-</div>
+        <div class="layui-input-inline" style="width: 100px;">
+            <input type="text" name="endtime" placeholder="12:00" id="form-confupdate-endtime" autocomplete="off"
+                   maxlength="5"
+                   class="layui-input" lay-verify="required" th:value="${endtime}"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="confinput-label layui-form-label"><span style="color: red">* </span>签到时间</label>
+        <div class="layui-input-inline" style="width: 100px;">
+            <input type="text" name="attendtime" placeholder="8:30" id="form-confupdate-attendtime" autocomplete="off"
+                   maxlength="5"
+                   class="layui-input" lay-verify="required" th:value="${attendtime}"/>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label confinput-label">会议概要</label>
+        <div class="layui-input-block">
+            <textarea name="remark" placeholder="请输入" class="layui-textarea" th:value="${remark}"></textarea>
+        </div>
+    </div>
+
+    <div class="layui-form-item model-form-footer">
+        <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+        <button class="layui-btn" lay-filter="confupdate-form-submit" lay-submit id="submitbtn">保存</button>
+    </div>
+</div>
+
+<script>
+    layui.use(['layer', 'admin', 'form', 'laydate', 'upload','formSelects'], function () {
+        var layer = layui.layer;
+        var admin = layui.admin;
+        var form = layui.form;
+        var laydate = layui.laydate;
+
+        laydate.render({
+            elem: '#form-confupdate-starttime',
+            type: 'time',
+            format: 'HH:mm',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#form-confupdate-endtime',
+            type: 'time',
+            format: 'HH:mm',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#form-confupdate-attendtime',
+            type: 'time',
+            format: 'HH:mm',
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#form-confupdate-confdate',
+            min: $("#confupdate-hidden-maxdate").val(),
+            trigger: 'click'
+        });
+
+       /* form.on('radio(confupdate-conftype-filter)', function (data) {
+            changeDiscountRuletype(data.value);
+            confType = data.value;
+        });*/
+
+     /*   var changeDiscountRuletype = function (val) {
+            if ('nolist' == val) {
+                $("#confupdate-conflist").hide();
+            } else {
+                $("#confupdate-conflist").show();
+            }
+        }*/
+
+        form.on('submit(confupdate-form-submit)', function (data) {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            var vdata = data.field;
+
+            if (null == vdata.starttime || null == vdata.endtime) {
+                layer.msg("请选择时间段", {icon: 2, time: 1500});
+                return;
+            } else if (vdata.endtime <= vdata.starttime) {
+                layer.msg("请正确选择时间段", {icon: 2, time: 1500});
+                return;
+            } else if (vdata.starttime <= vdata.attendtime) {
+                layer.msg("签到时间必须早于开始时间", {icon: 2, time: 1500});
+                return;
+            }
+            var formData = new FormData();
+            formData.append("confid", vdata.confid);
+            formData.append("confname", vdata.confname);
+            formData.append("starttime", vdata.starttime);
+            formData.append("endtime", vdata.endtime);
+            formData.append("attendtime", vdata.attendtime);
+            formData.append("confdate",vdata.confdate);
+
+            formData.append("remark",vdata.remark);
+
+            layer.load(2);
+            $.ajax({
+                type: "POST",
+                url: '[[@{/conference/updateconf}]]',
+                dataType: 'json',
+                processData: false,
+                contentType: false,
+                data: formData,
+                headers: {
+                    'Accept': 'application/json',
+                    'X-CSRF-TOKEN': token,
+                },
+
+                success: function (result) {
+                    layer.closeAll('loading');
+                    if (result.code == 200) {
+                        layer.msg(result.msg, {icon: 1, time: 1500});
+                        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 {
+                        layer.msg(result.msg, {icon: 2, time: 1500});
+                    }
+                },
+                error: function (err) {
+                    admin.errorBack(err);
+                }
+            });
+        });
+    });
+</script>
+
+<style>
+    .confinput-label {
+        width: 24%;
+    }
+
+    .xm-select-parent .xm-select-title div.xm-select-label>span{
+        height: 22px;
+    }
+
+    .upoadfile-btn input {
+        position: absolute;
+        font-size: 100px;
+        right: 0;
+        top: 0;
+        opacity: 0;
+        width: 113px;
+        height: 34px;
+    }
+</style>
+
diff --git a/src/main/resources/templates/confreport/detail.html b/src/main/resources/templates/confreport/detail.html
index 0663470..71e3c06 100644
--- a/src/main/resources/templates/confreport/detail.html
+++ b/src/main/resources/templates/confreport/detail.html
@@ -278,7 +278,7 @@
 
             LODOP = getLodop();
             LODOP.PRINT_INIT("会议报表");
-            LODOP.SET_PRINT_PAGESIZE(2, 0, 0,"A4");
+            LODOP.SET_PRINT_PAGESIZE(1, 0, 0,"A4");
             LODOP.ADD_PRINT_URL(30, 20, "95%", "90%", encodeURI(url));
             LODOP.ADD_PRINT_HTM("95%", "48%", 150, 50, "<font style='font-size:12px'><span tdata='pageNO'>##</span>/<span tdata='pageCount'>&nbsp;&nbsp;##</span></font>");
             LODOP.SET_PRINT_STYLEA(0, "ItemType", 1);
diff --git a/src/main/resources/templates/confreport/print/attindex.html b/src/main/resources/templates/confreport/print/attindex.html
index 6529dfd..5fe49c8 100644
--- a/src/main/resources/templates/confreport/print/attindex.html
+++ b/src/main/resources/templates/confreport/print/attindex.html
@@ -112,7 +112,7 @@
                 <td width="18%"
                     style="text-align: left;" ></td>
                 <td width="5%">&nbsp;</td>
-                <td width="12%" style="text-align: right;padding-right: 5px;">审核人签字:</td>
+                <td width="12%" style="text-align: right;padding-right: 5px;">审核签字:</td>
                 <td width="18%"
                     style="text-align: left;border-bottom: 1px solid #666;"></td>
                 <td width="5%">&nbsp;</td>
diff --git a/src/main/resources/templates/confreview/index.html b/src/main/resources/templates/confreview/index.html
new file mode 100644
index 0000000..3310fa7
--- /dev/null
+++ b/src/main/resources/templates/confreview/index.html
@@ -0,0 +1,570 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">会议报名人管理</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">会议报名</a>
+          <a><cite>会议报名人管理</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body" >
+    <div id="confreviewapp">
+
+
+    <div id="assign_custSelect" >
+        <div>
+            <el-form :inline="true" ref="devform" :model="person_person" data-parsley-validate
+                     class="form-horizontal form-label-left">
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">姓名:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-input v-model="person_person.custname" ></el-input>
+                        </div>
+                    </div>
+                </div>
+                <!--<div class="col-md-3" >-->
+                    <!--<div class="form-group">-->
+                        <!--<label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">部门:</span>-->
+                        <!--</label>-->
+                        <!--<div class="col-md-8 col-sm-12 col-xs-12">-->
+                            <!--<el-select v-model="person_person.deptcode"-->
+                                       <!--filterable-->
+                                       <!--clearable-->
+                                       <!--placeholder="请选择">-->
+                                <!--<el-option-->
+                                        <!--v-for="deptcode in deptlist"-->
+                                        <!--:key="deptcode.value"-->
+                                        <!--:label="deptcode.label"-->
+                                        <!--:value="deptcode.value">-->
+                                <!--</el-option>-->
+                            <!--</el-select>-->
+                        <!--</div>-->
+                    <!--</div>-->
+                <!--</div>-->
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <label class="control-label col-md-4 col-sm-12 col-xs-12" style="font-size: 14px;">人员类别:</span>
+                        </label>
+                        <div class="col-md-8 col-sm-12 col-xs-12">
+                            <el-select v-model="person_person.custtypeid"
+                                       filterable
+                                       clearable
+                                       placeholder="请选择">
+                                <el-option
+                                        v-for="custtypeid in custtypelist"
+                                        :key="custtypeid.value"
+                                        :label="custtypeid.label"
+                                        :value="custtypeid.value">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="col-md-3" >
+                    <div class="form-group">
+                        <button type="button" class="btn btn-info" @click="searchCust" id="cust_qrybtn">查 询</button>
+                    </div>
+                </div>
+            </el-form>
+
+        </div>
+
+
+
+
+
+        <div id="assign_devSel">
+            <div class="layui-row layui-col-space15">
+                <div class="layui-col-md5" style="width: 45%">
+                    <div class="layui-card">
+                        <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_lefttable">
+                            可分配人员({{person_lefttable.length}}人)
+                        </div>
+                        <div id="addDoorlist_pensonS-tb" class="layui-card-body">
+
+                            <template>
+                                <el-table
+                                        height="480"
+                                        ref="multipleTable"
+                                        :data="person_lefttable"
+                                        tooltip-effect="dark"
+                                        style="width: 100%;"
+                                        stripe
+                                        border
+                                        @selection-change="lefttableSelect">
+                                    <el-table-column
+                                            fixed
+                                            type="selection"
+                                           >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="cardno"
+                                            label="卡号"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="custname"
+                                            label="姓名"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            prop="bankcardno"
+                                            label="银行卡号"
+                                            >
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-col-md1" style="width: 10%">
+                    <div style="width:5%;height:400px;display:inline-block;padding:0;margin-left: 5px; float:left">
+                        <div style="position: absolute;top:55%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
+                            <el-button class="el-icon-d-arrow-right" :disabled="per_addBtn_dis" @click="person_addBtn"></el-button>
+                        </div>
+                        <div style="position: absolute;top:80%;width:5%;padding:0;margin: 0;text-align: center;left: 28%">
+                            <el-button class="el-icon-d-arrow-left" :disabled="per_delBtn_dis" @click="person_delBtn"></el-button>
+                        </div>
+                    </div>
+                </div>
+
+                <div class="layui-col-md5" style="width: 45%">
+                    <div class="layui-card">
+
+                        <div class="layui-card-header" style="margin-bottom: 10px" v-if="person_righttable">
+                            报名人员({{person_righttable.length}}人)
+                        </div>
+                        <div  class="layui-card-body">
+                            <template>
+                                <el-table
+                                        height="480"
+                                        ref="multipleTable"
+                                        :data="person_righttable"
+                                        tooltip-effect="dark"
+                                        style="width: 100%;"
+                                        stripe
+                                        border
+                                        @selection-change="rightTableSelect">
+                                    <el-table-column
+                                            fixed
+                                            type="selection"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="cardno"
+                                            label="卡号"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            sortable
+                                            prop="custname"
+                                            label="姓名"
+                                            >
+                                    </el-table-column>
+                                    <el-table-column
+                                            prop="bankcardno"
+                                            label="银行卡号"
+                                            >
+                                    </el-table-column>
+                                </el-table>
+                            </template>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <div class="layui-row layui-col-space15">
+            <div style="float:left;margin:0px 0 0 30%;"></div>
+            <div style="float:left;margin:0px 0 0 10%;"><el-button style="margin-top: 12px;" @click="save_btn">保存</el-button></div>
+        </div>
+    </div>
+    </div>
+    </div>
+
+</div>
+
+<script>
+    var review_vue = new Vue({
+        el: '#confreviewapp',
+        data:{
+            oper:'',
+            readonly:true,
+            dept:'',
+            tableData: [],
+            currPage: 1,
+            pageSize:10,
+            totSize:0,
+            sel_classid:'',
+            currentRow: null,
+            classform:{
+                classname:'',
+            },
+            person_person:{
+                custname:'',
+                custtypeid:'',
+                deptcode:''
+            },
+            devtypes:[],
+            typegrplist:[{value:1,label:'工作日'},{value:2,label:'节假日'},],
+            person_lefttable:[],
+            person_righttable:[],
+            custtypelist:[],
+            timelist:[],
+            deptlist:[],
+            leftTableSelection:[],
+            rightTableSelection:[],
+            per_addBtn_dis:true,
+            per_delBtn_dis:true,
+            dialogFormVisible: false,
+            dlgAllotDevVisible:false,
+            classtitle:'添加班次',
+
+            pickerOptions0: {
+                disabledDate:function(time) {
+                    return time.getTime() <Date.now();
+                }
+            },
+            pickerOptions1: {
+                disabledDate:function(time) {
+                    if(review_vue.classDiaForm.startdate !=''){
+
+                        return time.getTime() < review_vue.classDiaForm.startdate.getTime();
+                    }else {
+                        return time.getTime() < Date.now();
+                    }
+                }
+            },
+            rules:{
+                classname:[
+                    { required: true, message: '请输入班次名称', trigger: 'blur' },
+                    { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
+                ],
+                workorno:[
+                    { required: true, message: ' ',},
+                ],
+                timegrpid:[
+                    { required: true, message: ' '},
+                ],
+                startdate:[
+                    { required: true,message: ' ', },
+                ],
+                enddate:[
+                    { required: true ,message: ' ',},
+                ],
+                deptcode:[
+                    { required: true ,message: ' ',},
+                ],
+            },
+
+        },
+        methods: {
+            handleSizeChange:function(val) {
+                this.pageSize=val;
+                class_commonQuery(this,this.currPage,val);
+            },
+            currPageChange:function(val) {
+                this.currPage=val;
+                class_commonQuery(this,this.currPage,this.pageSize);
+            },
+            currRowChange:function(val) {
+                this.currentRow = val;
+            },
+            query:function () {
+                this.pagesize=10;
+                this.currPage=1;
+                class_commonQuery(this,this.currPage,this.pageSize);
+            },
+            resetForm:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            closeDialog:function(formName) {
+                this.$refs[formName].resetFields();
+                this.dialogFormVisible = false
+            },
+            saveClass:function (formName) {
+                var _that=this;
+                var vali = false;
+                this.$refs[formName].validate(
+                    function(valid){
+                        if (valid){
+                            vali = true;
+                        }else{
+                            vali=false;
+                        }
+                    });
+                if (vali==true){
+                    class_saveData(_that,formName);
+                }
+            },
+            editClass:function (id) {
+                class_getFillData(this,id);
+                this.dialogFormVisible = true;
+                this.classtitle="修改班次"
+            },
+            classtypefor:function (row) {
+
+                return classtype_grpname(row.workorno);
+            },
+            deptfor:function (row) {
+
+                return dept_grpname(row.deptcode);
+            },
+            timefor:function(row){
+                return timegrp_grpname(row.timegrpid);
+            },
+
+            startdatefor:function(row){
+                if(row.startdate != null) {
+                    return dateformatter(row.startdate);
+                }
+            },
+            enddatefor:function(row){
+                if(row.enddate != null) {
+                    return dateformatter(row.enddate);
+                }
+            },
+
+            assignCust:function(id){
+                this.sel_classid=id;
+                $("#classdiv").hide();
+                $("#assign_custSelect").show();
+                $("#cust_qrybtn").click();
+            },
+            searchCust:function(){
+                var that=this;
+                    addAllCustList(that);
+            },
+            lefttableSelect:function(val) {
+                //console.log(val);
+                this.leftTableSelection = val;
+                this.per_addBtn_dis=this.leftTableSelection<=0;
+            },
+            rightTableSelect:function(val) {
+                this.rightTableSelection = val;
+                this.per_delBtn_dis=this.rightTableSelection<=0;
+            },
+            person_addBtn:function(){
+                var _self=this;
+                var left=_self.leftTableSelection;
+                var right=[];
+                right=left.splice(0,left.length);
+                var dev={};
+                for(var i=0;i<right.length;i++){
+                    if($.inArray(right[i],_self.person_righttable)==-1) {
+                        _self.person_righttable.push(right[i]);
+                    }
+                }
+                var leftData=this.person_lefttable;
+                for(var i=0;i<right.length;i++){
+                    var s = $.inArray(right[i],leftData );
+                    if (s != -1) {
+                        leftData.splice(s, 1);
+                    }
+                }
+                this.per_addBtn_dis=true;
+            },
+            person_delBtn:function(){
+                var right=this.rightTableSelection;
+                var rightData=this.person_righttable;
+                for(var i=0;i<right.length;i++) {
+                    var s = $.inArray(right[i], rightData);//判断是否在rightData中存在这个值,存在返回下标,不存在返回-1
+                    if (s != -1) {
+                        rightData.splice(s, 1);
+                    }
+                }
+                for(var i=0;i<right.length;i++) {
+                    this.person_lefttable.push(right[i]);
+                }
+                this.per_delBtn_dis = true;
+            },
+            save_btn: function () {
+                var that=this;
+                save_review(that);
+            },
+            prev_btn:function (){
+                $("#classdiv").show();
+                $("#assign_custSelect").hide();
+                this.person_lefttable=[];
+                this.person_righttable=[];
+            },
+            addClass:function(){
+                class_getFillData(this,"-1");
+                this.dialogFormVisible = true;
+                this.classtitle="添加班次";
+
+
+            },
+            delClass:function(id){
+                class_deletedata(id);
+            }
+        },
+        created:function(){
+            var that=this;
+
+            var token=$("meta[name='_csrf_token']").attr("value");
+            var custname=that.person_person.custname;
+            var custtypeid=that.person_person.custtypeid;
+            that.person_lefttable=[];
+            var url="[[@{/confreview/custlist?}]]"+"perName="+custname+"&custtypeid="+custtypeid
+            ;
+            $.ajax({
+                type: "POST",
+                url: url,
+                dataType: "json",
+                headers: {
+                    'Accept': 'application/json',
+                    'Content-Type': 'application/json',
+                    'X-CSRF-TOKEN':token,
+                },
+                contentType: "application/json",
+                data: "",
+                success: function (data) {
+
+                    if(data.countIndex){
+                        layer.msg('人员数量过大,请输入查询条件!',{icon:2,time:3000});
+                    }else{
+                        // addDoorlist_vue.person_lefttable=data.pNotInResult;
+                        var allcust=data.allcust;
+                        var reviewlist=data.reviewlist;
+                        that.person_righttable=reviewlist;
+                        that.person_lefttable=allcust;
+                    }
+                    var custtypelist = [];
+                    var types=data.custtypelist;
+                    for (var i = 0; i < types.length; i++) {
+                        custtypelist.push({
+                            value: types[i].custtypeid,
+                            label: types[i].custtypename
+                        });
+                    }
+                    that.custtypelist=custtypelist;
+                }
+            });
+        }
+
+    })
+    function save_review(that){
+
+        var token=$("meta[name='_csrf_token']").attr("value");
+
+        var idlist=new Array();
+        var right=that.person_righttable;
+
+        for(var i=0;i<right.length;i++){
+            idlist.push(right[i].custid);
+        }
+
+        $.ajax({
+            type: "POST",
+            url:"[[@{confreview/addreview?}]]"+"idlist="+idlist,
+            dataType: "json",
+            contentType: "application/json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            success: function (data) {
+
+                if (data.errStr == undefined) {
+                    layer.msg('用户认证已过期,请重新登录', {icon: 2, time: 1000});
+                    window.location = "login";
+                    return;
+                }
+                if(data.errStr != ''){
+                    layer.msg(data.errStr, {icon: 2, time: 1000});
+                    return ;
+                }
+                if (data.errStr == ''){
+                    layer.msg('保存成功!', {icon: 1, time: 1000});
+                    $("#cust_qrybtn").click();
+                    return ;
+                }
+            }
+        });
+    }
+    function addAllCustList(that){
+
+        var token=$("meta[name='_csrf_token']").attr("value");
+        var custname=that.person_person.custname;
+        var custtypeid=that.person_person.custtypeid;
+        var url="[[@{/confreview/custlist?}]]"+"perName="+custname+"&custtypeid="+custtypeid;
+
+        $.ajax({
+            type: "POST",
+            url: url,
+            dataType: "json",
+            headers: {
+                'Accept': 'application/json',
+                'Content-Type': 'application/json',
+                'X-CSRF-TOKEN':token,
+            },
+            contentType: "application/json",
+            data: "",
+            success: function (data) {
+                if(data.countIndex){
+                    layer.msg('人员数量过大,请输入查询条件!',{icon:2,time:3000});
+                }else{
+                   // addDoorlist_vue.person_lefttable=data.pNotInResult;
+                    var allcust=data.allcust;
+                    var reviewlist=data.reviewlist;
+                    var num=allcust.length;
+                   that.person_righttable=reviewlist;
+                    that.person_lefttable=allcust;
+                }
+            }
+        });
+
+    }
+
+
+
+
+
+/*
+
+
+
+    function class_commonQuery(_self,pageno,pagesize) {
+       var classname=_self.classform.classname;
+        $.ajax({
+            type:"get",
+            dataType:"json",
+            url:"[[@{/atte/class/list?classname=}]]"+classname+"&pageNo="+pageno+"&pageSize="+pagesize,
+            success:function(ret){
+                _self.totSize=ret.PageResult.totalCount;
+                _self.tableData=ret.PageResult.list;
+                if(_self.totSize == 0 ){
+                    layer.msg("暂无数据", {icon: 2, time: 1000});
+                }
+                if (ret.errStr != ''){
+                    lay.msg(ret.errStr,{icon: 2, time: 1000});
+                }
+            }
+        })
+    }
+
+
+
+
+
+
+
+
+    function class_refreshThisTable(){
+        class_commonQuery(review_vue,review_vue.currPage,review_vue.pageSize);
+    }*/
+
+
+
+
+
+</script>
\ No newline at end of file