diff --git a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
index f05e285..7d42137 100644
--- a/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/api/service/impl/PosPayServiceImpl.java
@@ -395,6 +395,7 @@
             tTransdtl.setManagefeetype(bean.getRuletype());
             tTransdtl.setAmount(cntamount);
         }else{
+            tTransdtl.setManagefeetype(RestaurantConstant.RULETYPE_NORMAL);
             tTransdtl.setAmount(amount);
             tTransdtl.setManagefee(cntamount);
         }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlList.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlList.java
new file mode 100644
index 0000000..a0d84eb
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlList.java
@@ -0,0 +1,21 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+
+public interface MealsDtlList {
+
+    String getCheckdate();
+
+    String getMealtype();
+
+    String getDeptcode();
+
+    String getGroupname();
+
+    Double getAmount();
+
+    Integer getCnt();
+
+    Double getFeeamount();
+
+    Integer getFeecount();
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlSearchBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlSearchBean.java
new file mode 100644
index 0000000..5db77bd
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlSearchBean.java
@@ -0,0 +1,42 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+import com.supwisdom.dlpay.system.bean.PageBean;
+
+public class MealsDtlSearchBean extends PageBean {
+    private String startdate;
+    private String enddate;
+    private Integer groupid;
+
+    public String getStartdate() {
+        return startdate;
+    }
+
+    public void setStartdate(String startdate) {
+        this.startdate = startdate;
+    }
+
+    public String getEnddate() {
+        return enddate;
+    }
+
+    public void setEnddate(String enddate) {
+        this.enddate = enddate;
+    }
+
+    public Integer getGroupid() {
+        return groupid;
+    }
+
+    public void setGroupid(Integer groupid) {
+        this.groupid = groupid;
+    }
+
+    @Override
+    public String toString() {
+        return "MealsDtlSearchBean{" +
+                "startdate='" + startdate + '\'' +
+                ", enddate='" + enddate + '\'' +
+                ", groupid=" + groupid +
+                '}';
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlShowBean.java
new file mode 100644
index 0000000..d1577aa
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/MealsDtlShowBean.java
@@ -0,0 +1,213 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+
+public class MealsDtlShowBean {
+    private String devgroupname;
+    private Integer devicename;
+    private String checkdate;
+    private Double b_amt;
+    private Integer b_cnt;
+    private Integer b_feecnt;
+    private Double b_feeamt;
+    private Double b_getamt;
+    private Double d_amt;
+    private Integer d_cnt;
+    private Integer d_feecnt;
+    private Double d_feeamt;
+    private Double d_getamt;
+    private Double l_amt;
+    private Integer l_cnt;
+    private Integer l_feecnt;
+    private Double l_feeamt;
+    private Double l_getamt;
+    private Double t_amt;
+    private Integer t_cnt;
+    private Integer t_feecnt;
+    private Double t_feeamt;
+    private Double t_getamt;
+
+
+    public String getDevgroupname() {
+        return devgroupname;
+    }
+
+    public void setDevgroupname(String devgroupname) {
+        this.devgroupname = devgroupname;
+    }
+
+    public Integer getDevicename() {
+        return devicename;
+    }
+
+    public void setDevicename(Integer devicename) {
+        this.devicename = devicename;
+    }
+
+    public String getCheckdate() {
+        return checkdate;
+    }
+
+    public void setCheckdate(String checkdate) {
+        this.checkdate = checkdate;
+    }
+
+    public Double getB_amt() {
+        return b_amt;
+    }
+
+    public void setB_amt(Double b_amt) {
+        this.b_amt = b_amt;
+    }
+
+    public Integer getB_cnt() {
+        return b_cnt;
+    }
+
+    public void setB_cnt(Integer b_cnt) {
+        this.b_cnt = b_cnt;
+    }
+
+    public Integer getB_feecnt() {
+        return b_feecnt;
+    }
+
+    public void setB_feecnt(Integer b_feecnt) {
+        this.b_feecnt = b_feecnt;
+    }
+
+    public Double getB_feeamt() {
+        return b_feeamt;
+    }
+
+    public void setB_feeamt(Double b_feeamt) {
+        this.b_feeamt = b_feeamt;
+    }
+
+    public Double getB_getamt() {
+        return b_getamt;
+    }
+
+    public void setB_getamt(Double b_getamt) {
+        this.b_getamt = b_getamt;
+    }
+
+    public Double getD_amt() {
+        return d_amt;
+    }
+
+    public void setD_amt(Double d_amt) {
+        this.d_amt = d_amt;
+    }
+
+    public Integer getD_cnt() {
+        return d_cnt;
+    }
+
+    public void setD_cnt(Integer d_cnt) {
+        this.d_cnt = d_cnt;
+    }
+
+    public Integer getD_feecnt() {
+        return d_feecnt;
+    }
+
+    public void setD_feecnt(Integer d_feecnt) {
+        this.d_feecnt = d_feecnt;
+    }
+
+    public Double getD_feeamt() {
+        return d_feeamt;
+    }
+
+    public void setD_feeamt(Double d_feeamt) {
+        this.d_feeamt = d_feeamt;
+    }
+
+    public Double getD_getamt() {
+        return d_getamt;
+    }
+
+    public void setD_getamt(Double d_getamt) {
+        this.d_getamt = d_getamt;
+    }
+
+    public Double getL_amt() {
+        return l_amt;
+    }
+
+    public void setL_amt(Double l_amt) {
+        this.l_amt = l_amt;
+    }
+
+    public Integer getL_cnt() {
+        return l_cnt;
+    }
+
+    public void setL_cnt(Integer l_cnt) {
+        this.l_cnt = l_cnt;
+    }
+
+    public Integer getL_feecnt() {
+        return l_feecnt;
+    }
+
+    public void setL_feecnt(Integer l_feecnt) {
+        this.l_feecnt = l_feecnt;
+    }
+
+    public Double getL_feeamt() {
+        return l_feeamt;
+    }
+
+    public void setL_feeamt(Double l_feeamt) {
+        this.l_feeamt = l_feeamt;
+    }
+
+    public Double getL_getamt() {
+        return l_getamt;
+    }
+
+    public void setL_getamt(Double l_getamt) {
+        this.l_getamt = l_getamt;
+    }
+
+    public Double getT_amt() {
+        return t_amt;
+    }
+
+    public void setT_amt(Double t_amt) {
+        this.t_amt = t_amt;
+    }
+
+    public Integer getT_cnt() {
+        return t_cnt;
+    }
+
+    public void setT_cnt(Integer t_cnt) {
+        this.t_cnt = t_cnt;
+    }
+
+    public Integer getT_feecnt() {
+        return t_feecnt;
+    }
+
+    public void setT_feecnt(Integer t_feecnt) {
+        this.t_feecnt = t_feecnt;
+    }
+
+    public Double getT_feeamt() {
+        return t_feeamt;
+    }
+
+    public void setT_feeamt(Double t_feeamt) {
+        this.t_feeamt = t_feeamt;
+    }
+
+    public Double getT_getamt() {
+        return t_getamt;
+    }
+
+    public void setT_getamt(Double t_getamt) {
+        this.t_getamt = t_getamt;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
index 2c222d3..f338833 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceGroupController.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.restaurant.service.DeviceService;
 import com.supwisdom.dlpay.framework.util.PageResult;
 import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
 import com.supwisdom.dlpay.system.bean.ZTreeNode;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -76,7 +77,7 @@
     @GetMapping("/loadadd")
     @PreAuthorize("hasPermission('/devicegroup/loadadd','')")
     public String loadadd(Model model) {
-        List<TDeviceGroup> list=groupService.findAll();
+        List<TDeviceGroup> list=groupService.findByGrouptype(RestaurantConstant.DEVICEGROUP_TYPE_BRANCH);
         model.addAttribute("grouplist",list);
 
         return "restaurant/devicegroup/form";
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/MealsDtlController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/MealsDtlController.java
new file mode 100644
index 0000000..6f5e543
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/MealsDtlController.java
@@ -0,0 +1,62 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+
+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.restaurant.bean.MealsDtlSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.CustomerSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.CustomerShowBean;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlShowBean;
+import com.supwisdom.dlpay.restaurant.service.CustomerService;
+import com.supwisdom.dlpay.restaurant.service.MealsdtlService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+@RequestMapping("/mealsdtl")
+public class MealsDtlController {
+
+
+    @Autowired
+    private MealsdtlService mealsdtlService;
+
+    @RequestMapping("/index")
+    public String indexView(ModelMap model) {
+        String settledate = mealsdtlService.getCheckdateToday();
+        if (StringUtil.isEmpty(settledate)) {
+            settledate = DateUtil.getNow("yyyyMMdd");
+        }
+        model.addAttribute("maxdate", DateUtil.parseToDateFormat(DateUtil.getNewDay(settledate, -1)));
+        return "restaurant/mealsdtl/index";
+    }
+
+    @RequestMapping("/mealsdtllist")
+    // @PreAuthorize("hasPermission('/mealsdtl/mealsdtllist','')")
+    @ResponseBody
+    public PageResult<MealsDtlShowBean> getDataList(
+            @RequestParam(value = "startdate", required = false) String startdate,
+            @RequestParam(value = "enddate", required = false) String enddate,
+            @RequestParam(value = "groupid", required = false) Integer groupid) {
+        try {
+            MealsDtlSearchBean searchBean = new MealsDtlSearchBean();
+            searchBean.setEnddate(enddate);
+            searchBean.setStartdate(startdate);
+            searchBean.setGroupid(groupid);
+
+            System.out.println(searchBean.toString());
+
+            PageResult<MealsDtlShowBean> bean = mealsdtlService.getMealsdtlByKey(searchBean);
+
+            return bean;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new PageResult<>(99, "系统查询错误");
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java
index 7f90450..6762816 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceGroupDao.java
@@ -2,6 +2,9 @@
 
 import com.supwisdom.dlpay.restaurant.domain.TDeviceGroup;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
 
 
 public interface DeviceGroupDao  extends  JpaRepository<TDeviceGroup, Integer> {
@@ -15,4 +18,11 @@
 
 
     Integer countByPid(Integer Devgroupid);
+
+    List<TDeviceGroup> findByGrouptype(String grouptype);
+
+    @Query(value = "select distinct devgroupid from tb_devicegroup where devgroupid=?1 or pid=?1",nativeQuery = true)
+    List<Integer> findGroupidByDevgroupid(Integer groupid);
+    @Query(value = "select distinct devgroupid from tb_devicegroup where grouptype='leaf'",nativeQuery = true)
+    List<Integer> findAllGroupid();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/MealsdtlDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/MealsdtlDao.java
new file mode 100644
index 0000000..f57f660
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/MealsdtlDao.java
@@ -0,0 +1,32 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlList;
+import com.supwisdom.dlpay.restaurant.domain.TMealsDtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface MealsdtlDao extends JpaRepository<TMealsDtl, String> {
+
+    @Query(value="select tt.groupname,sum(tt.amount) as amount,sum(tt.count) as cnt,sum(tt.feecount) as feecount " +
+            ",sum(tt.feeamount) as feeamount,tt.mealtype " +
+            "from  " +
+            "(select distinct t.devgroupid,t.groupname,m.amount,m.count,m.feecount,m.feeamount,m.mealtype,m.checkdate from  " +
+            " tb_mealsdtl m " +
+            "left join tb_devicegroup t " +
+            "on t.devgroupid=m.devgroupid " +
+            "where t.grouptype='leaf' " +
+            "and m.checkdate BETWEEN :startdate and :enddate " +
+            "and t.devgroupid =:groupid) tt " +
+            "group by tt.mealtype,tt.groupname,tt.groupname ", nativeQuery = true)
+    List<MealsDtlList> getMealsDtl(@Param("startdate")String startdate, @Param("enddate")String enddate, @Param("groupid")Integer groupid);
+
+    @Query(value = "select max(checkdate) from tb_mealsdtl",nativeQuery = true)
+    String findMaxCheckdate();
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
index 80564dd..67eccce 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDeviceGroup.java
@@ -11,6 +11,7 @@
     private String groupname;
     private Integer pid;
     private String operid;
+    private String grouptype;
 
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_DEVGROUP")
@@ -51,5 +52,12 @@
         this.operid = operid;
     }
 
+    @Column(name = "grouptype", length = 10)
+    public String getGrouptype() {
+        return grouptype;
+    }
 
+    public void setGrouptype(String grouptype) {
+        this.grouptype = grouptype;
+    }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealsDtl.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealsDtl.java
index 85ea576..ce0759c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealsDtl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TMealsDtl.java
@@ -1,6 +1,8 @@
 package com.supwisdom.dlpay.restaurant.domain;
 
 
+import org.hibernate.annotations.GenericGenerator;
+
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 
@@ -21,10 +23,10 @@
     private Integer feecount;
 
     @Id
-    @SequenceGenerator(name = "mealsdtl_id", sequenceName = "SEQ_MEALSDTL", allocationSize = 1)
-    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mealsdtl_id")
+    @GenericGenerator(name = "idGenerator", strategy = "uuid")
+    @GeneratedValue(generator = "idGenerator")
     @NotNull
-    @Column(name = "id", unique = true,  length = 15)
+    @Column(name = "id", unique = true,  length = 32)
     public String getId() {
         return id;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
index 9265b95..dcb2a0c 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceGroupService.java
@@ -15,6 +15,8 @@
 
     List<TDeviceGroup> findAll();
 
+    List<TDeviceGroup> findByGrouptype(String grouptype);
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     JsonResult saveGroup(TDeviceGroup device);
 
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/MealsdtlService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/MealsdtlService.java
new file mode 100644
index 0000000..7932b74
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/MealsdtlService.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.restaurant.service;
+
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlShowBean;
+import com.supwisdom.dlpay.restaurant.domain.TArea;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface MealsdtlService {
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    PageResult<MealsDtlShowBean> getMealsdtlByKey(MealsDtlSearchBean param);
+
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class,readOnly = true)
+    String getCheckdateToday();
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
index 20a4bc9..a990852 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceGroupServiceImpl.java
@@ -29,6 +29,7 @@
             ZTreeNode z=new ZTreeNode();
             z.setId(g.getDevgroupid().toString());
             z.setName(g.getGroupname());
+            z.setGrouptype(g.getGrouptype());
             if(g.getPid()==null){
                 z.setpId("0");
             }else{
@@ -50,6 +51,11 @@
     }
 
     @Override
+    public List<TDeviceGroup> findByGrouptype(String grouptype) {
+        return groupDao.findByGrouptype(grouptype);
+    }
+
+    @Override
     public JsonResult saveGroup(TDeviceGroup device){
         device.setOperid(OperUtil.getCurrentOperid());
         if(device.getPid()==null){
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/MealsdtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/MealsdtlServiceImpl.java
new file mode 100644
index 0000000..7dd02f4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/MealsdtlServiceImpl.java
@@ -0,0 +1,139 @@
+package com.supwisdom.dlpay.restaurant.service.impl;
+
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlList;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.MealsDtlShowBean;
+import com.supwisdom.dlpay.restaurant.dao.DeviceGroupDao;
+import com.supwisdom.dlpay.restaurant.dao.MealTypeDao;
+import com.supwisdom.dlpay.restaurant.dao.MealsdtlDao;
+import com.supwisdom.dlpay.restaurant.domain.TMealsDtl;
+import com.supwisdom.dlpay.restaurant.domain.TMealtype;
+import com.supwisdom.dlpay.restaurant.service.AreaService;
+import com.supwisdom.dlpay.restaurant.service.DeviceGroupService;
+import com.supwisdom.dlpay.restaurant.service.MealsdtlService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class MealsdtlServiceImpl implements MealsdtlService {
+
+    @Autowired
+    private MealsdtlDao mealsdtlDao;
+    @Autowired
+    private DeviceGroupDao deviceGroupDao;
+    @Autowired
+    private MealTypeDao mealTypeDao;
+
+    private static final Logger logger = LoggerFactory.getLogger(MealsdtlServiceImpl.class);
+
+    @Override
+    public PageResult<MealsDtlShowBean> getMealsdtlByKey(MealsDtlSearchBean param) {
+        List<Integer> groupids;
+        if (null != param.getGroupid()) {
+            groupids = deviceGroupDao.findGroupidByDevgroupid(param.getGroupid());
+        } else {
+            groupids = deviceGroupDao.findAllGroupid();
+        }
+
+        List<MealsDtlShowBean> showBeans = new ArrayList<>();
+
+        for (Integer groupid : groupids) {
+            MealsDtlShowBean bean = new MealsDtlShowBean();
+            List<MealsDtlList> dtls = mealsdtlDao.getMealsDtl(param.getStartdate(), param.getEnddate(), groupid);
+
+            if(dtls.size()<=0){
+                continue;
+            }
+
+            Double totamt=0d;
+            Integer totcnt=0;
+            Double totfeeamt=0d;
+            Integer totfeecnt=0;
+
+            for(MealsDtlList dtl:dtls){
+                String groupname=dtl.getGroupname();
+               /* if(StringUtil.isEmpty(groupname)){
+                    groupname=deviceGroupDao.findById(groupid).get().getGroupname();
+                }*/
+                bean.setDevgroupname(groupname);
+             /*   if(null==dtl.getAmount()){
+                    bean.setB_amt(0d);
+                    bean.setB_cnt(0);
+                    bean.setB_feeamt(0d);
+                    bean.setB_feecnt(0);
+                    bean.setB_getamt(0d);
+                    bean.setD_amt(0d);
+                    bean.setD_cnt(0);
+                    bean.setD_feeamt(0d);
+                    bean.setD_feecnt(0);
+                    bean.setD_getamt(0d);
+                    bean.setL_amt(0d);
+                    bean.setL_cnt(0);
+                    bean.setL_feeamt(0d);
+                    bean.setL_feecnt(0);
+                    bean.setL_getamt(0d);
+                    bean.setT_amt(0d);
+                    bean.setT_cnt(0);
+                    bean.setT_feeamt(0d);
+                    bean.setT_feecnt(0);
+                    bean.setT_getamt(0d);
+                    break;
+                }*/
+
+                totamt+=dtl.getAmount();
+                totcnt+=dtl.getCnt();
+                totfeeamt+=dtl.getFeeamount();
+                totfeecnt+=dtl.getFeecount();
+
+
+                if(dtl.getMealtype().equalsIgnoreCase(RestaurantConstant.MEALTYPE_BREAKFAST)){
+
+                    bean.setB_amt(dtl.getAmount());
+                    bean.setB_cnt(dtl.getCnt());
+                    bean.setB_feeamt(dtl.getFeeamount());
+                    bean.setB_feecnt(dtl.getFeecount());
+                    bean.setB_getamt(dtl.getAmount()-dtl.getFeeamount());
+                }else if(dtl.getMealtype().equalsIgnoreCase(RestaurantConstant.MEALTYPE_LUNCH)){
+                    bean.setL_amt(dtl.getAmount());
+                    bean.setL_cnt(dtl.getCnt());
+                    bean.setL_feeamt(dtl.getFeeamount());
+                    bean.setL_feecnt(dtl.getFeecount());
+                    bean.setL_getamt(dtl.getAmount()-dtl.getFeeamount());
+                }else if(dtl.getMealtype().equalsIgnoreCase(RestaurantConstant.MEALTYPE_DINNER)){
+                    bean.setD_amt(dtl.getAmount());
+                    bean.setD_cnt(dtl.getCnt());
+                    bean.setD_feeamt(dtl.getFeeamount());
+                    bean.setD_feecnt(dtl.getFeecount());
+                    bean.setD_getamt(dtl.getAmount()-dtl.getFeeamount());
+                }
+            }
+
+            Double totgetamt=totamt-totfeeamt;
+            bean.setT_amt(totamt);
+            bean.setT_cnt(totcnt);
+            bean.setT_feeamt(totfeeamt);
+            bean.setT_feecnt(totfeecnt);
+            bean.setT_getamt(totgetamt);
+
+            showBeans.add(bean);
+        }
+
+        return new PageResult<>(showBeans);
+
+    }
+
+    @Override
+    public String getCheckdateToday() {
+        String date=mealsdtlDao.findMaxCheckdate();
+
+        return null;
+    }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
index d19ee55..f5f5344 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TransDtlServiceImpl.java
@@ -201,7 +201,10 @@
         revDtl.setTermid(targetDtl.getTermid());
         revDtl.setShopid(targetDtl.getShopid());
         revDtl.setMealtype(targetDtl.getMealtype());
-        revDtl.setManagefee(targetDtl.getManagefee());
+        Double managefee=targetDtl.getManagefee();
+        if(null!=managefee){
+            revDtl.setManagefee(managefee*-1.00);
+        }
         revDtl.setRuleid(targetDtl.getRuleid());
         revDtl.setCustid(targetDtl.getCustid());
         revDtl.setCardno(targetDtl.getCardno());
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
index 80933c7..d5732cc 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -14,6 +14,9 @@
     public static final String TRANSMODE_CARD = "card";  //卡消费
     public static final String TRANSMODE_CODE = "code";  //二维码消费
 
+    public static final String DEVICEGROUP_TYPE_BRANCH = "branch";   //驳回
+    public static final String DEVICEGROUP_TYPE_LEAF = "leaf";   //驳回
+
 
     public static final String STATUS_TRANSDTL_INIT = "init";   //初始化
     public static final String STATUS_TRANSDTL_WAIT = "wip";   //提交中
@@ -43,6 +46,7 @@
     public static final String RULETYPE_QUOTA = "quota"; //定额
     public static final String RULETYPE_REDUCTION = "reduction"; //减免
     public static final String RULETYPE_DISCOUNT = "discount"; //折扣
+    public static final String RULETYPE_NORMAL = "normal"; //普通
 
 
     public static final int POS_TIME_ERROR_DIFFMINS = 10; //设备时钟误差
diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java b/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
index 9d50273..c6cd95e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/ZTreeNode.java
@@ -5,6 +5,7 @@
     private String id;
     private String pId;
     private String name;
+    private String grouptype;
     private boolean checked;
     private boolean open;
 
@@ -44,6 +45,14 @@
         return checked;
     }
 
+    public String getGrouptype() {
+        return grouptype;
+    }
+
+    public void setGrouptype(String grouptype) {
+        this.grouptype = grouptype;
+    }
+
     public void setChecked(boolean checked) {
         this.checked = checked;
     }
diff --git a/src/main/resources/templates/restaurant/devicegroup/form.html b/src/main/resources/templates/restaurant/devicegroup/form.html
index 281367a..aaa6ed2 100644
--- a/src/main/resources/templates/restaurant/devicegroup/form.html
+++ b/src/main/resources/templates/restaurant/devicegroup/form.html
@@ -17,6 +17,15 @@
             </select>
         </div>
     </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label"><span style="color: red">* </span>设备组类型</label>
+        <div class="layui-input-block">
+            <select name="grouptype"  lay-verify="required">
+                <option value="branch">枝</option>
+                <option value="leaf">叶</option>
+            </select>
+        </div>
+    </div>
 
     <div class="layui-form-item model-form-footer">
         <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
diff --git a/src/main/resources/templates/restaurant/devicegroup/index.html b/src/main/resources/templates/restaurant/devicegroup/index.html
index a26b228..157accd 100644
--- a/src/main/resources/templates/restaurant/devicegroup/index.html
+++ b/src/main/resources/templates/restaurant/devicegroup/index.html
@@ -41,6 +41,7 @@
 <script>
     var groupid=null;
     var groupname=null;
+    var grouptype=null;
     layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
         let form = layui.form;
         let table = layui.table;
@@ -94,12 +95,18 @@
             });
         };
 
-        let showDeviceModel = function (data) {
+        let showDeviceModel = function () {
             if(groupid==null){
                 layer.msg('请先选择设备组', {icon: 2});
                 return;
             }
-            let title = groupname;
+            console.log(grouptype);
+            if(grouptype=='branch'){
+                layer.msg('枝类型的设备组不能添加设备', {icon: 2});
+                return;
+            }
+            var title = groupname;
+
             admin.putTempData('t_groupname', groupname);
             admin.putTempData('t_groupid', groupid);
             admin.popupCenter({
@@ -154,6 +161,7 @@
         function OnGrpClick(e, treeId, treeNode) {
             console.log(treeNode.id);
             groupid=treeNode.id;
+            grouptype=treeNode.grouptype;
             groupname=treeNode.name;
             table.reload('devicegroup-table', {where: {searchkey: treeNode.id}, page: {curr: 1}});
 
@@ -259,7 +267,8 @@
             var data = {
                 'devgroupid': treeNode.id,
                 'pid': treeNode.pId,
-                'groupname': treeNode.name
+                'groupname': treeNode.name,
+                'grouptype':treeNode.grouptype
             };
             let token = $("meta[name='_csrf_token']").attr("value");
             var url = '[[@{devicegroup/add}]]';
diff --git a/src/main/resources/templates/restaurant/mealsdtl/index.html b/src/main/resources/templates/restaurant/mealsdtl/index.html
new file mode 100644
index 0000000..cc6fbc8
--- /dev/null
+++ b/src/main/resources/templates/restaurant/mealsdtl/index.html
@@ -0,0 +1,310 @@
+<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 class="layui-form" lay-filter="mealsdtl-search-form">
+            <input type="hidden" id="mealsdtl-hidden-maxdate" th:value="${maxdate}" />
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">记账日期</label>
+                    <div class="layui-input-inline">
+                        <input type="text" name="startdate" id="mealsdtl-search-startdate" placeholder="起始日期" th:value="${maxdate}"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline">
+                        <input type="text" name="enddate" id="mealsdtl-search-enddate" placeholder="截止日期" th:value="${maxdate}"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">选择设备组</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="groupid" id="mealsdtl-search-devgroup"  lay-filter="mealsdtl-search-devgroup-filter"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <button id="mealsdtl-search-btn" class="layui-btn icon-btn" data-type="search"><i
+                            class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <!--<div class="layui-btn-group">-->
+        <!--<button class="layui-btn" id="btn-fold-mealsdtl">仅看一级</button>-->
+        <!--<button class="layui-btn" id="btn-expand-mealsdtl">查看二级</button>-->
+        <!--</div>-->
+        <table class="layui-table" id="mealsdtlTable" lay-filter="mealsdtlTable-filter"></table>
+    </div>
+</div>
+
+<!--<script type="text/html" id="mealsdtl-toolbar">
+    <div class="layui-btn-container">
+        <button class="layui-btn layui-btn-sm" id="btn-fold-mealsdtl" lay-event="mealsdtlShowFold">仅看一级</button>
+        <button class="layui-btn layui-btn-sm" id="btn-expand-mealsdtl" lay-event="mealsdtlExpandAll">查看二级</button>
+    </div>
+</script>-->
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate', 'treetable','treeSelect'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        var treetable = layui.treetable;
+        var treeSelect = layui.treeSelect;
+
+        form.render("checkbox");
+        laydate.render({
+            elem: '#mealsdtl-search-startdate',
+            max: $("#mealsdtl-hidden-maxdate").val(),
+            trigger: 'click'
+        });
+        laydate.render({
+            elem: '#mealsdtl-search-enddate',
+            max: $("#mealsdtl-hidden-maxdate").val(),
+            trigger: 'click'
+        });
+
+        treeSelect.render({
+            elem: '#mealsdtl-search-devgroup',
+            data: '[[@{/whitelistbind/devgrouptree}]]',
+            type: 'get',
+            placeholder: '选择设备组',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                console.log(treeNode);
+                if(treeNode.accno == '0'){
+                    layer.msg("请选择末级科目", {icon: 2, time:1500});
+                    $("#mealsdtl-search-devgroup").val("");
+                    treeSelect.revokeNode('mealsdtl-search-devgroup-filter');
+                    return false;
+                }
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });
+
+        var renderTable = function (obj) {
+            layer.load(2);
+            table.render({
+                id: 'mealsdtlReport',
+                title: '食堂分餐表',
+                 // treeColIndex: 0,
+                 // treeSpid: '-1',
+                // treeIdName: 'subjno',
+                // treePidName: 'fsubjno',
+                // treeDefaultClose: false,
+                // treeLinkage: false,
+                elem: '#mealsdtlTable',
+                url: '[[@{/mealsdtl/mealsdtllist}]]',
+                page: false,
+                where: obj,
+            //    showicon: false,
+              //  toolbar:'#mealsdtl-toolbar',
+                cols: [
+                    [
+                        {
+                            field: 'devgroupname', title: '商户名称', align: 'left', rowspan: 2, width:150,templet: function (d) {
+                                if (d.subjlevel == 1) {
+                                    return '<span>' + d.devgroupname + '</span>';
+                                } else {
+                                    return '<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + d.devgroupname + '</span>';
+                                }
+
+                            }
+                        },
+                        // {align: 'center', title: '期初余额', colspan: 2},
+                        {align: 'center', title: '早餐', colspan: 5},
+                        {align: 'center', title: '午餐', colspan: 5},
+                        {align: 'center', title: '晚餐', colspan: 5},
+                        {align: 'center', title: '合计', colspan: 5},
+                    ], [
+                        // {field: 'lastdaydrbal', title: '借方', align: 'center'},
+                        // {field: 'lastdaycrbal', title: '贷方', align: 'center'},
+                        {
+                            field: 'b_amt', title: '金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.b_amt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'b_cnt', title: '份数', width:150, align: 'center', templet: function (e) {
+                                return e.b_cnt;
+                            }
+                        },
+                        {
+                            field: 'b_feeamt', title: '餐补金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.b_feeamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'b_feecnt', title: '餐补份数', width:150, align: 'center', templet: function (e) {
+                                return e.b_feecnt;
+                            }
+                        },
+                        {
+                            field: 'b_getamt', title: '劳务费金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.b_getamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'l_amt', title: '金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.l_amt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'l_cnt', title: '份数', width:150, align: 'center', templet: function (e) {
+                                return e.l_cnt;
+                            }
+                        },
+                        {
+                            field: 'l_feeamt', title: '餐补金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.l_feeamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'l_feecnt', title: '餐补份数', width:150, align: 'center', templet: function (e) {
+                                return e.l_feecnt;
+                            }
+                        },
+                        {
+                            field: 'l_getamt', title: '劳务费金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.l_getamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'd_amt', title: '金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.d_amt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'd_cnt', title: '份数', width:150, align: 'center', templet: function (e) {
+                                return e.d_cnt;
+                            }
+                        },
+                        {
+                            field: 'd_feeamt', title: '餐补金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.d_feeamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 'd_feecnt', title: '餐补份数', width:150, align: 'center', templet: function (e) {
+                                return e.d_feecnt;
+                            }
+                        },
+                        {
+                            field: 'd_getamt', title: '劳务费金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.d_getamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 't_amt', title: '金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.t_amt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 't_cnt', title: '份数', width:150, align: 'center', templet: function (e) {
+                                return e.t_cnt;
+                            }
+                        },
+                        {
+                            field: 't_feeamt', title: '餐补金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.t_feeamt).toFixed(2);
+                            }
+                        },
+                        {
+                            field: 't_feecnt', title: '餐补份数', width:150, align: 'center', templet: function (e) {
+                                return e.t_feecnt;
+                            }
+                        },
+                        {
+                            field: 't_getamt', title: '劳务费金额', width:150, align: 'center', templet: function (e) {
+                                return parseFloat(e.t_getamt).toFixed(2);
+                            }
+                        }
+
+                    ]
+                ],
+                done: function (res, curr, count) {
+                    console.log(res);
+                    layer.closeAll('loading');
+                }
+            });
+        }
+       /* renderTable({
+            startdate: $("#mealsdtl-search-startdate").val(),
+            enddate: $("#mealsdtl-search-enddate").val(),
+       //     nodealshow: false
+        });*/
+
+        $('#btn-expand-mealsdtl').click(function () {
+            treetable.expandAll('#mealsdtlTable');
+        });
+
+        $('#btn-fold-mealsdtl').click(function () {
+            treetable.foldAll('#mealsdtlTable');
+        });
+
+
+
+
+
+
+        $('#mealsdtl-search-btn').click(function () {
+            var startdate = $("#mealsdtl-search-startdate").val();
+            var enddate = $("#mealsdtl-search-enddate").val();
+       //     var nodealshow = $("#mealsdtl-search-nodealshow").is(':checked');
+            var groupid=$("#mealsdtl-search-devgroup").val();
+            if (null == startdate || "" == $.trim(startdate)) {
+                layer.msg('请选择起始日期', {icon: 2, time: 1500});
+                return;
+            }
+            if (null == enddate || "" == $.trim(enddate)) {
+                layer.msg('请选择截止日期', {icon: 2, time: 1500});
+                return;
+            }
+            if (null == groupid || "" == $.trim(groupid)) {
+                layer.msg('请选择设备组', {icon: 2, time: 1500});
+                return;
+            }
+            renderTable({
+                startdate: startdate,
+                enddate: enddate,
+                groupid: groupid
+            });
+        });
+
+        table.on('toolbar(mealsdtlTable-filter)', function(obj){
+            switch(obj.event){
+                case 'mealsdtlShowFold':
+                    treetable.foldAll('#mealsdtlTable');
+                    break;
+                case 'mealsdtlExpandAll':
+                    treetable.expandAll('#mealsdtlTable');
+                    break;
+            }
+        });
+    });
+</script>
\ No newline at end of file
