添加终端报表和个人流水报表
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustReportShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustReportShowBean.java
new file mode 100644
index 0000000..f459401
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/CustReportShowBean.java
@@ -0,0 +1,238 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+
+public class CustReportShowBean {
+ private String custname;
+ private String deptname;
+ private String cardno;
+
+ //普通
+ private Double b_normalamt; //早餐
+ private Integer b_normalcnt;//早餐
+ private Double l_normalamt; //午餐
+ private Integer l_normalcnt;//午餐
+ private Double d_normalamt; //晚餐
+ private Integer d_normalcnt;//晚餐
+
+ //折扣
+ private Double b_discountamt; //早餐
+ private Integer b_discountcnt;//早餐
+ private Double l_discountamt; //午餐
+ private Integer l_discountcnt;//午餐
+ private Double d_discountamt; //晚餐
+ private Integer d_discountcnt;//晚餐
+
+ private Integer totdiscountcnt;//折扣总数
+ private Double totdiscountamt;//折扣总金额
+ private Double totfeeamt;//折扣金额
+
+ private Integer totnormalcnt;//普通总数
+ private Double totnormalamt;//普通总金额
+
+ private Integer totcnt;
+ private Double totamt;
+
+ public CustReportShowBean() {
+ }
+
+ public CustReportShowBean(String custname,String deptname,String cardno, Double b_normalamt, Integer b_normalcnt, Double l_normalamt, Integer l_normalcnt, Double d_normalamt, Integer d_normalcnt, Double b_discountamt, Integer b_discountcnt, Double l_discountamt, Integer l_discountcnt, Double d_discountamt, Integer d_discountcnt, Integer totdiscountcnt, Double totdiscountamt, Double totfeeamt, Integer totnormalcnt, Double totnormalamt, Integer totcnt, Double totamt) {
+ this.custname = custname;
+ this.deptname=deptname;
+ this.cardno=cardno;
+ this.b_normalamt = b_normalamt;
+ this.b_normalcnt = b_normalcnt;
+ this.l_normalamt = l_normalamt;
+ this.l_normalcnt = l_normalcnt;
+ this.d_normalamt = d_normalamt;
+ this.d_normalcnt = d_normalcnt;
+ this.b_discountamt = b_discountamt;
+ this.b_discountcnt = b_discountcnt;
+ this.l_discountamt = l_discountamt;
+ this.l_discountcnt = l_discountcnt;
+ this.d_discountamt = d_discountamt;
+ this.d_discountcnt = d_discountcnt;
+ this.totdiscountcnt = totdiscountcnt;
+ this.totdiscountamt = totdiscountamt;
+ this.totfeeamt = totfeeamt;
+ this.totnormalcnt = totnormalcnt;
+ this.totnormalamt = totnormalamt;
+ this.totcnt = totcnt;
+ this.totamt = totamt;
+ }
+
+ public String getCustname() {
+ return custname;
+ }
+
+ public void setCustname(String custname) {
+ this.custname = custname;
+ }
+
+ public String getDeptname() {
+ return deptname;
+ }
+
+ public void setDeptname(String deptname) {
+ this.deptname = deptname;
+ }
+
+ public String getCardno() {
+ return cardno;
+ }
+
+ public void setCardno(String cardno) {
+ this.cardno = cardno;
+ }
+
+ public Double getB_normalamt() {
+ return b_normalamt;
+ }
+
+ public void setB_normalamt(Double b_normalamt) {
+ this.b_normalamt = b_normalamt;
+ }
+
+ public Integer getB_normalcnt() {
+ return b_normalcnt;
+ }
+
+ public void setB_normalcnt(Integer b_normalcnt) {
+ this.b_normalcnt = b_normalcnt;
+ }
+
+ public Double getL_normalamt() {
+ return l_normalamt;
+ }
+
+ public void setL_normalamt(Double l_normalamt) {
+ this.l_normalamt = l_normalamt;
+ }
+
+ public Integer getL_normalcnt() {
+ return l_normalcnt;
+ }
+
+ public void setL_normalcnt(Integer l_normalcnt) {
+ this.l_normalcnt = l_normalcnt;
+ }
+
+ public Double getD_normalamt() {
+ return d_normalamt;
+ }
+
+ public void setD_normalamt(Double d_normalamt) {
+ this.d_normalamt = d_normalamt;
+ }
+
+ public Integer getD_normalcnt() {
+ return d_normalcnt;
+ }
+
+ public void setD_normalcnt(Integer d_normalcnt) {
+ this.d_normalcnt = d_normalcnt;
+ }
+
+ public Double getB_discountamt() {
+ return b_discountamt;
+ }
+
+ public void setB_discountamt(Double b_discountamt) {
+ this.b_discountamt = b_discountamt;
+ }
+
+ public Integer getB_discountcnt() {
+ return b_discountcnt;
+ }
+
+ public void setB_discountcnt(Integer b_discountcnt) {
+ this.b_discountcnt = b_discountcnt;
+ }
+
+ public Double getL_discountamt() {
+ return l_discountamt;
+ }
+
+ public void setL_discountamt(Double l_discountamt) {
+ this.l_discountamt = l_discountamt;
+ }
+
+ public Integer getL_discountcnt() {
+ return l_discountcnt;
+ }
+
+ public void setL_discountcnt(Integer l_discountcnt) {
+ this.l_discountcnt = l_discountcnt;
+ }
+
+ public Double getD_discountamt() {
+ return d_discountamt;
+ }
+
+ public void setD_discountamt(Double d_discountamt) {
+ this.d_discountamt = d_discountamt;
+ }
+
+ public Integer getD_discountcnt() {
+ return d_discountcnt;
+ }
+
+ public void setD_discountcnt(Integer d_discountcnt) {
+ this.d_discountcnt = d_discountcnt;
+ }
+
+ public Integer getTotdiscountcnt() {
+ return totdiscountcnt;
+ }
+
+ public void setTotdiscountcnt(Integer totdiscountcnt) {
+ this.totdiscountcnt = totdiscountcnt;
+ }
+
+ public Double getTotdiscountamt() {
+ return totdiscountamt;
+ }
+
+ public void setTotdiscountamt(Double totdiscountamt) {
+ this.totdiscountamt = totdiscountamt;
+ }
+
+ public Double getTotfeeamt() {
+ return totfeeamt;
+ }
+
+ public void setTotfeeamt(Double totfeeamt) {
+ this.totfeeamt = totfeeamt;
+ }
+
+ public Integer getTotnormalcnt() {
+ return totnormalcnt;
+ }
+
+ public void setTotnormalcnt(Integer totnormalcnt) {
+ this.totnormalcnt = totnormalcnt;
+ }
+
+ public Double getTotnormalamt() {
+ return totnormalamt;
+ }
+
+ public void setTotnormalamt(Double totnormalamt) {
+ this.totnormalamt = totnormalamt;
+ }
+
+ public Integer getTotcnt() {
+ return totcnt;
+ }
+
+ public void setTotcnt(Integer totcnt) {
+ this.totcnt = totcnt;
+ }
+
+ public Double getTotamt() {
+ return totamt;
+ }
+
+ public void setTotamt(Double totamt) {
+ this.totamt = totamt;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TermReportShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TermReportShowBean.java
index d94958f..5f90bec 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/bean/TermReportShowBean.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/TermReportShowBean.java
@@ -2,7 +2,7 @@
public class TermReportShowBean {
- private Integer termid;
+ private String termid;
//普通
private Double b_normalamt; //早餐
@@ -22,16 +22,45 @@
private Integer totdiscountcnt;//折扣总数
private Double totdiscountamt;//折扣总金额
- private Double totfeetamt;//折扣金额
+ private Double totfeeamt;//折扣金额
private Integer totnormalcnt;//普通总数
private Double totnormalamt;//普通总金额
- public Integer getTermid() {
+ private Integer totcnt;
+ private Double totamt;
+
+ public TermReportShowBean() {
+ }
+
+ public TermReportShowBean(String termid, Double b_normalamt, Integer b_normalcnt, Double l_normalamt, Integer l_normalcnt, Double d_normalamt, Integer d_normalcnt, Double b_discountamt, Integer b_discountcnt, Double l_discountamt, Integer l_discountcnt, Double d_discountamt, Integer d_discountcnt, Integer totdiscountcnt, Double totdiscountamt, Double totfeeamt, Integer totnormalcnt, Double totnormalamt, Integer totcnt, Double totamt) {
+ this.termid = termid;
+ this.b_normalamt = b_normalamt;
+ this.b_normalcnt = b_normalcnt;
+ this.l_normalamt = l_normalamt;
+ this.l_normalcnt = l_normalcnt;
+ this.d_normalamt = d_normalamt;
+ this.d_normalcnt = d_normalcnt;
+ this.b_discountamt = b_discountamt;
+ this.b_discountcnt = b_discountcnt;
+ this.l_discountamt = l_discountamt;
+ this.l_discountcnt = l_discountcnt;
+ this.d_discountamt = d_discountamt;
+ this.d_discountcnt = d_discountcnt;
+ this.totdiscountcnt = totdiscountcnt;
+ this.totdiscountamt = totdiscountamt;
+ this.totfeeamt = totfeeamt;
+ this.totnormalcnt = totnormalcnt;
+ this.totnormalamt = totnormalamt;
+ this.totcnt = totcnt;
+ this.totamt = totamt;
+ }
+
+ public String getTermid() {
return termid;
}
- public void setTermid(Integer termid) {
+ public void setTermid(String termid) {
this.termid = termid;
}
@@ -147,12 +176,12 @@
this.totdiscountamt = totdiscountamt;
}
- public Double getTotfeetamt() {
- return totfeetamt;
+ public Double getTotfeeamt() {
+ return totfeeamt;
}
- public void setTotfeetamt(Double totfeetamt) {
- this.totfeetamt = totfeetamt;
+ public void setTotfeeamt(Double totfeeamt) {
+ this.totfeeamt = totfeeamt;
}
public Integer getTotnormalcnt() {
@@ -170,4 +199,20 @@
public void setTotnormalamt(Double totnormalamt) {
this.totnormalamt = totnormalamt;
}
+
+ public Integer getTotcnt() {
+ return totcnt;
+ }
+
+ public void setTotcnt(Integer totcnt) {
+ this.totcnt = totcnt;
+ }
+
+ public Double getTotamt() {
+ return totamt;
+ }
+
+ public void setTotamt(Double totamt) {
+ this.totamt = totamt;
+ }
}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustReportController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustReportController.java
new file mode 100644
index 0000000..d812301
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/CustReportController.java
@@ -0,0 +1,136 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.domain.TShopSettlement;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.restaurant.bean.CustReportShowBean;
+import com.supwisdom.dlpay.restaurant.bean.TermReportSearchBean;
+import com.supwisdom.dlpay.restaurant.service.CustReportService;
+import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
+import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
+import com.supwisdom.dlpay.restaurant.service.StatementReportService;
+import com.supwisdom.dlpay.system.domain.TOperatorQueryLimit;
+import com.supwisdom.dlpay.system.service.OperatorService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.annotation.AuthenticationPrincipal;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@Controller
+@RequestMapping("/custreport")
+public class CustReportController {
+
+ @Autowired
+ private SystemUtilService systemUtilService;
+ @Autowired
+ private CustReportService custReportService;
+ @Autowired
+ private StatementReportService statementReportService;
+ @Autowired
+ private DeviceDiscountRuleService deviceDiscountRuleService;
+ @Autowired
+ private OperatorService operatorService;
+ @Autowired
+ private ShopSettlementService shopSettlementService;
+
+ @RequestMapping("/index")
+ public String indexView(
+ @ModelAttribute("searchBean") TermReportSearchBean searchBean,
+ @AuthenticationPrincipal UserDetails operUser,
+ ModelMap model) {
+ String settledate = statementReportService.getMaxStatementDate();
+ String maxdate = DateUtil.reformatDatetime(settledate, "yyyyMMdd", "yyyy-MM-dd");
+ searchBean.setStartdate(settledate);
+ searchBean.setEnddate(settledate);
+ TOperator oper = (TOperator) operUser;
+ TOperatorQueryLimit limit=operatorService.getOperatorQueryLimit(oper.getOpercode());
+ if(null!=limit){
+ model.addAttribute("devgroupid",limit.getDevgroupid());
+ searchBean.setDevgroupid(limit.getDevgroupid());
+ }
+ List<TShopSettlement> lst = shopSettlementService.getAllShopSettlement();
+
+ model.addAttribute("shoplistForSelect", lst);
+ model.addAttribute("rulelist", deviceDiscountRuleService.getNormalDiscountRules());
+ model.addAttribute("showlist", custReportService.getCustReportSearchData(searchBean));
+ model.addAttribute("maxdate", maxdate);
+ model.addAttribute("opercode", oper == null ? "unknow" : oper.getOpercode());
+
+ return "restaurant/custreport/index";
+ }
+
+ @RequestMapping("/custreportlist")
+ public String getDataList(
+ @ModelAttribute("searchBean") TermReportSearchBean searchBean,
+ @AuthenticationPrincipal UserDetails operUser,
+ ModelMap map) {
+ try {
+
+ TOperator oper = (TOperator) operUser;
+ map.addAttribute("opercode", oper == null ? "unknow" : oper.getOpercode());
+ TOperatorQueryLimit limit=operatorService.getOperatorQueryLimit(oper.getOpercode());
+ if(null!=limit){
+ searchBean.setDevgroupid(limit.getDevgroupid());
+ }
+ List<CustReportShowBean> bean = custReportService.getCustReportSearchData(searchBean);
+
+ map.addAttribute("showlist",bean);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "restaurant/custreport/index::custreportTable";
+ }
+
+ @GetMapping("/excelexport")
+ public void excelExport(@ModelAttribute("searchBean") TermReportSearchBean searchBean,
+ @AuthenticationPrincipal UserDetails operUser,
+ HttpServletRequest request, HttpServletResponse response, ModelMap map){
+ try {
+ TOperator oper = (TOperator) operUser;
+ TOperatorQueryLimit limit=operatorService.getOperatorQueryLimit(oper.getOpercode());
+ if(null!=limit){
+ searchBean.setDevgroupid(limit.getDevgroupid());
+ }
+ List<CustReportShowBean> datalist = custReportService.getCustReportSearchData(searchBean);
+ String filename="终端消费报表";
+ custReportService.doCreateCustReportExcel(response, datalist, searchBean, filename, oper);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @GetMapping("/print/printcustreport")
+ public String print(@ModelAttribute("searchBean") TermReportSearchBean searchBean,
+ @RequestParam(value = "opercode",required = false) String opercode, ModelMap map) {
+ try {
+ TOperatorQueryLimit limit=operatorService.getOperatorQueryLimit(opercode);
+ if(null!=limit){
+ searchBean.setDevgroupid(limit.getDevgroupid());
+ }
+ map.addAttribute("showlist", custReportService.getCustReportSearchData(searchBean));
+
+ TOperator oper = statementReportService.getOperatorByOpercode(opercode);
+ map.addAttribute("opername", oper == null ? "unknow" : oper.getOpername());
+ map.addAttribute("period", custReportService.getCustReportSearchPeriod(searchBean));
+ map.addAttribute("printdatetime",DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(),DateUtil.DATETIME_FMT,"yyyy-MM-dd HH:mm:ss"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "restaurant/custreport/print/report";
+ }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TermReportController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TermReportController.java
index 0513687..19a2c6e 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TermReportController.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TermReportController.java
@@ -2,11 +2,14 @@
import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.domain.TShopSettlement;
import com.supwisdom.dlpay.framework.service.SystemUtilService;
import com.supwisdom.dlpay.framework.util.DateUtil;
import com.supwisdom.dlpay.restaurant.bean.DailyReportSearchBean;
import com.supwisdom.dlpay.restaurant.bean.TermReportSearchBean;
import com.supwisdom.dlpay.restaurant.bean.TermReportShowBean;
+import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
+import com.supwisdom.dlpay.restaurant.service.ShopSettlementService;
import com.supwisdom.dlpay.restaurant.service.TermReportService;
import com.supwisdom.dlpay.restaurant.service.StatementReportService;
import com.supwisdom.dlpay.system.domain.TOperatorQueryLimit;
@@ -36,7 +39,11 @@
@Autowired
private StatementReportService statementReportService;
@Autowired
+ private DeviceDiscountRuleService deviceDiscountRuleService;
+ @Autowired
private OperatorService operatorService;
+ @Autowired
+ private ShopSettlementService shopSettlementService;
@RequestMapping("/index")
public String indexView(
@@ -53,6 +60,10 @@
model.addAttribute("devgroupid",limit.getDevgroupid());
searchBean.setDevgroupid(limit.getDevgroupid());
}
+ List<TShopSettlement> lst = shopSettlementService.getAllShopSettlement();
+
+ model.addAttribute("shoplistForSelect", lst);
+ model.addAttribute("rulelist", deviceDiscountRuleService.getNormalDiscountRules());
model.addAttribute("showlist", termReportService.getTermReportSearchData(searchBean));
model.addAttribute("maxdate", maxdate);
model.addAttribute("opercode", oper == null ? "unknow" : oper.getOpercode());
@@ -94,7 +105,7 @@
searchBean.setDevgroupid(limit.getDevgroupid());
}
List<TermReportShowBean> datalist = termReportService.getTermReportSearchData(searchBean);
- String filename="客户类别消费报表";
+ String filename="终端消费报表";
termReportService.doCreateTermReportExcel(response, datalist, searchBean, filename, oper);
} catch (Exception e) {
e.printStackTrace();
@@ -119,7 +130,7 @@
} catch (Exception e) {
e.printStackTrace();
}
- return "restaurant/termreport/print/printtermreport";
+ return "restaurant/termreport/print/report";
}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TerminalReportController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/TerminalReportController.java
deleted file mode 100644
index 3e86825..0000000
--- a/src/main/java/com/supwisdom/dlpay/restaurant/controller/TerminalReportController.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.dlpay.restaurant.controller;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-@Controller
-@RequestMapping("/terminalreport")
-public class TerminalReportController {
-
- @RequestMapping("/index")
- public String indexView() {
- return "restaurant/terminalreport/index";
- }
-
-}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/CustReportService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustReportService.java
new file mode 100644
index 0000000..7d0a1fb
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/CustReportService.java
@@ -0,0 +1,25 @@
+package com.supwisdom.dlpay.restaurant.service;
+
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.restaurant.bean.CustReportShowBean;
+import com.supwisdom.dlpay.restaurant.bean.TermReportSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.TermReportShowBean;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+public interface CustReportService {
+
+
+ @Transactional(rollbackFor = Exception.class,readOnly = true)
+ List<CustReportShowBean> getCustReportSearchData(TermReportSearchBean searchBean);
+
+ @Transactional(rollbackFor = Exception.class,readOnly = true)
+ String getCustReportSearchPeriod(TermReportSearchBean searchBean);
+
+ @Transactional(rollbackFor = Exception.class,readOnly = true)
+ void doCreateCustReportExcel(HttpServletResponse response, List<CustReportShowBean> datalist, TermReportSearchBean searchBean, String filename, TOperator oper);
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java
new file mode 100644
index 0000000..3810cb5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/CustReportServiceImpl.java
@@ -0,0 +1,370 @@
+package com.supwisdom.dlpay.restaurant.service.impl;
+
+import com.supwisdom.dlpay.framework.domain.TOperator;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.MoneyUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.restaurant.bean.CustReportShowBean;
+import com.supwisdom.dlpay.restaurant.bean.TermReportSearchBean;
+import com.supwisdom.dlpay.restaurant.bean.CustReportShowBean;
+import com.supwisdom.dlpay.restaurant.service.CustReportService;
+import com.supwisdom.dlpay.restaurant.service.TermReportService;
+import com.supwisdom.dlpay.restaurant.util.ExcelPoiUtil;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.hibernate.query.internal.NativeQueryImpl;
+import org.hibernate.transform.Transformers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CustReportServiceImpl implements CustReportService {
+
+
+ @Autowired
+ private SystemUtilService systemUtilService;
+
+ @PersistenceContext
+ private EntityManager entityManager;
+
+ private static final Logger logger = LoggerFactory.getLogger(CustReportServiceImpl.class);
+
+ @Override
+ public List<CustReportShowBean> getCustReportSearchData(TermReportSearchBean searchBean) {
+ if (null != searchBean) {
+ String startdate = DateUtil.unParseToDateFormat(searchBean.getStartdate());
+ String enddate = DateUtil.unParseToDateFormat(searchBean.getEnddate());
+
+ StringBuffer sb = new StringBuffer("select c.custname,d.deptname,a.cardno ," +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='breakfast' then t.amount else 0 end) as b_normalamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='breakfast' then 1 else 0 end) as int4) as b_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='breakfast' then 1 else 0 end) as int4) as b_discountcnt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='breakfast' then t.amount else 0 end) as b_discountamt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='lunch' then t.amount else 0 end) as l_normalamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='lunch' then 1 else 0 end) as int4) as l_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='lunch' then 1 else 0 end) as int4) as l_discountcnt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='lunch' then t.amount else 0 end) as l_discountamt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='dinner' then t.amount else 0 end) as d_normalamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='dinner' then 1 else 0 end) as int4) as d_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then 1 else 0 end) as int4) as d_discountcnt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then t.amount else 0 end) as d_discountamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then 1 else 0 end) as int4) as totdiscountcnt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then t.amount else 0 end) as totdiscountamt," +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then t.managefee else 0 end) as totfeeamt," +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' then t.amount else 0 end) as totnormalamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' then 1 else 0 end) as int4) as totnormalcnt," +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 else t.amount end) as totamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 else 1 end) as int4) as totcnt" +
+ " from tb_transdtl t " +
+ " left join tb_device dev on t.termid=dev.id " +
+ " left join tb_shopsettlement s on s.shopid=t.shopid" +
+ " left join tb_discount_rule r on r.ruleid=t.ruleid" +
+ " left join tb_customer c on t.custid=c.custid" +
+ " left join tb_dept d on d.deptcode=c.deptcode" +
+ " left join tb_card a on c.custid=a.custid" +
+ " where t.status='success' " +
+ " and t.accdate>=:startdate and t.accdate<=:enddate ") ;
+ if (!StringUtil.isEmpty(searchBean.getShopid())) {
+ sb.append( " and s.shopid = :shopid ");
+ }
+ if (!StringUtil.isEmpty(searchBean.getShopname())) {
+ sb.append( " and s.shopname like :shopname ");
+ }
+ if (null!=searchBean.getDevgroupid()) {
+ sb.append( " and dev.devgroupid = :groupid ");
+ }
+ if (null!=searchBean.getRuleid()) {
+ sb.append( " and r.ruleid = :ruleid ");
+ }
+ sb.append(" group by a.cardno,c.custname,d.deptname");
+ Query query = entityManager.createNativeQuery(sb.toString());
+ query.setParameter("startdate", startdate);
+ query.setParameter("enddate", enddate);
+ if (null!=searchBean.getDevgroupid()) {
+ query.setParameter("groupid", searchBean.getDevgroupid());
+ }
+ if (!StringUtil.isEmpty(searchBean.getShopid())) {
+ query.setParameter("shopid", searchBean.getShopid().trim() );
+ }
+ if (!StringUtil.isEmpty(searchBean.getShopname())) {
+ query.setParameter("shopname","%" + searchBean.getShopname().trim() + "%");
+ }
+ if (null!=searchBean.getRuleid()) {
+ query.setParameter("ruleid", searchBean.getRuleid());
+ }
+ query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(CustReportShowBean.class));
+ List<CustReportShowBean> list = query.getResultList();
+ /*if (null != list){
+ CustReportShowBean tot=new CustReportShowBean("合 计","","",0d,0,0d,0,0d,0,0d,0,0d,0,
+ 0d,0,0,0d,0d,0,0d,0,0d);
+ for(CustReportShowBean b:list){
+ tot.setB_discountamt(tot.getB_discountamt()+b.getB_discountamt());
+ tot.setB_discountcnt(tot.getB_discountcnt()+b.getB_discountcnt());
+ tot.setL_discountamt(tot.getL_discountamt()+b.getL_discountamt());
+ tot.setL_discountcnt(tot.getL_discountcnt()+b.getL_discountcnt());
+ tot.setD_discountamt(tot.getD_discountamt()+b.getD_discountamt());
+ tot.setD_discountcnt(tot.getD_discountcnt()+b.getD_discountcnt());
+ tot.setB_normalamt(tot.getB_normalamt()+b.getB_normalamt());
+ tot.setB_normalcnt(tot.getB_normalcnt()+b.getB_normalcnt());
+ tot.setL_normalamt(tot.getL_normalamt()+b.getL_normalamt());
+ tot.setL_normalcnt(tot.getL_normalcnt()+b.getL_normalcnt());
+ tot.setD_normalamt(tot.getD_normalamt()+b.getD_normalamt());
+ tot.setD_normalcnt(tot.getD_normalcnt()+b.getD_normalcnt());
+ tot.setTotdiscountamt(tot.getTotdiscountamt()+b.getTotdiscountamt());
+ tot.setTotdiscountcnt(tot.getTotnormalcnt()+b.getTotdiscountcnt());
+ tot.setTotfeeamt(tot.getTotfeeamt()+b.getTotfeeamt());
+ tot.setTotnormalamt(tot.getTotnormalamt()+b.getTotnormalamt());
+ tot.setTotnormalcnt(tot.getTotnormalcnt()+b.getTotnormalcnt());
+ tot.setTotcnt(tot.getTotcnt()+b.getTotcnt());
+ tot.setTotamt(tot.getTotamt()+b.getTotamt());
+ }
+ list.add(tot);
+ return list;
+ }*/
+ }
+ return new ArrayList<>(0);
+
+ }
+ @Override
+ public String getCustReportSearchPeriod(TermReportSearchBean searchBean) {
+ String startdate = DateUtil.unParseToDateFormat(searchBean.getStartdate());
+ String enddate = DateUtil.unParseToDateFormat(searchBean.getEnddate());
+ if (startdate.equals(enddate)) {
+ return DateUtil.reformatDatetime(startdate, "yyyyMMdd", "yyyy年MM月dd日");
+ } else {
+ return DateUtil.reformatDatetime(startdate, "yyyyMMdd", "yyyy年MM月dd日") + " ~ " + DateUtil.reformatDatetime(enddate, "yyyyMMdd", "yyyy年MM月dd日");
+ }
+ }
+
+
+ @Override
+ public void doCreateCustReportExcel(HttpServletResponse response, List<CustReportShowBean> datalist, TermReportSearchBean searchBean, String filename, TOperator oper) {
+ HSSFWorkbook workbook = new HSSFWorkbook();
+ HSSFSheet sheet = workbook.createSheet("终端消费报表");
+
+ int columns = 22; //
+ sheet.setColumnWidth(0, ExcelPoiUtil.columnWidth(25)); //日期
+ for (int i = 3; i < columns; i++) {
+ sheet.setColumnWidth(i, ExcelPoiUtil.columnWidth(12));
+ }
+
+ //标题样式
+ HSSFCellStyle titleStyle = ExcelPoiUtil.creatStyle(workbook, "宋体", true, 20, HSSFCellStyle.ALIGN_CENTER, false); //设置单元格样式
+ //表头样式
+ HSSFCellStyle headStyle = ExcelPoiUtil.creatStyle(workbook, "宋体", true, 15, HSSFCellStyle.ALIGN_CENTER, true); //设置单元格样式
+ //正文样式 有边框-textStyle1 无边框-textStyle2
+ HSSFCellStyle textStyle1 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_CENTER, true); //设置单元格样式
+ HSSFCellStyle textStyle2 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_CENTER, false); //设置单元格样式
+
+
+ //TODO:创建标题
+ HSSFRow row0 = ExcelPoiUtil.createRow(sheet, 0, 800); //表格标题
+ ExcelPoiUtil.createCell(row0, 0, titleStyle, filename);
+ sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, columns - 1)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
+
+ //TODO:创建表格页眉
+ HSSFRow row1 = ExcelPoiUtil.createRow(sheet, 1, 400);
+ ExcelPoiUtil.createCell(row1, 0, textStyle2, "区间");
+ ExcelPoiUtil.createCell(row1, 1, textStyle2, getCustReportSearchPeriod(searchBean));
+ ExcelPoiUtil.createCell(row1, 2, textStyle2, null);
+ ExcelPoiUtil.createCell(row1, 3, textStyle2, null);
+ ExcelPoiUtil.createCell(row1, 4, textStyle2, null);
+
+ sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 4));
+ ExcelPoiUtil.createCell(row1, columns - 1, ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_RIGHT, false), "单位:元");
+
+ //TODO:创建表头(poi做多行合并,一定需要先绘制单元格,然后写入数据,最后合并)
+ HSSFRow row2 = ExcelPoiUtil.createRow(sheet, 2, 600);
+ ExcelPoiUtil.createCell(row2, 0, headStyle, "单位");
+ ExcelPoiUtil.createCell(row2, 1, headStyle, "姓名");
+ ExcelPoiUtil.createCell(row2, 2, headStyle, "卡号");
+ ExcelPoiUtil.createCell(row2, 3, headStyle, "非折扣交易");
+
+ ExcelPoiUtil.createCell(row2, 4, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 5, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 6, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 7, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 8, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 9, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 10, headStyle, null);
+
+ sheet.addMergedRegion(new CellRangeAddress(2, 2, 3, 10)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
+
+ ExcelPoiUtil.createCell(row2, 11, headStyle, "折扣交易");
+ ExcelPoiUtil.createCell(row2, 12, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 13, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 14, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 15, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 16, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 17, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 18, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 19, headStyle, null);
+ sheet.addMergedRegion(new CellRangeAddress(2, 2, 11, 19)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
+
+
+ ExcelPoiUtil.createCell(row2, 20, headStyle, "交易笔\n数合计");
+ ExcelPoiUtil.createCell(row2, 21, headStyle, "交易金\n额合计");
+
+ HSSFRow row3 = ExcelPoiUtil.createRow(sheet, 3, 800);
+ HSSFRow row4 = ExcelPoiUtil.createRow(sheet, 4, 800);
+ ExcelPoiUtil.createCell(row4, 0, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 1, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 2, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 3, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 4, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 5, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 6, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 7, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 8, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 11, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 12, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 13, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 14, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 15, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 16, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 19, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 20, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 21, headStyle, null);
+
+ ExcelPoiUtil.createCell(row3, 0, headStyle, null);
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 0, 0)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 1, 1)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 2, 2)); //合并列
+
+ ExcelPoiUtil.createCell(row3, 3, headStyle, "早餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 4, headStyle, "早餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 5, headStyle, "午餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 6, headStyle, "午餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 7, headStyle, "晚餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 8, headStyle, "晚餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 9, headStyle, "非折扣\n交易小计");
+ ExcelPoiUtil.createCell(row3, 10, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 9, headStyle, "交易笔数小计");
+ ExcelPoiUtil.createCell(row4, 10, headStyle, "交易金额小计");
+
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 3, 3)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 4, 4)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 5, 5)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 6, 6)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 7, 7)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 8, 8)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 3, 9, 10));
+
+ ExcelPoiUtil.createCell(row3, 11, headStyle, "早餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 12, headStyle, "早餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 13, headStyle, "午餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 14, headStyle, "午餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 15, headStyle, "晚餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 16, headStyle, "晚餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 17, headStyle, "折扣\n交易小计");
+ ExcelPoiUtil.createCell(row3, 18, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 17, headStyle, "交易笔数小计");
+ ExcelPoiUtil.createCell(row4, 18, headStyle, "交易金额小计");
+
+ ExcelPoiUtil.createCell(row3, 19, headStyle, "餐补金额");
+ ExcelPoiUtil.createCell(row3, 20, headStyle, null);
+ ExcelPoiUtil.createCell(row3, 21, headStyle, null);
+
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 11, 11));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 12, 12));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 13, 13));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 14, 14));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 15, 15));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 16, 16));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 19, 19));
+ sheet.addMergedRegion(new CellRangeAddress(3, 3, 17, 18));
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 20, 20));
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 21, 21));
+
+ //TODO: 数据
+ int rowNum = 5;
+ if (StringUtil.isEmpty(datalist)) {
+ //无数据
+ HSSFRow row5 = ExcelPoiUtil.createRow(sheet, rowNum, 500);
+ ExcelPoiUtil.createCell(row4, 0, textStyle1, "无数据");
+ for (int n = 1; n < columns; n++) ExcelPoiUtil.createCell(row4, n, textStyle1, null);
+ sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, columns - 1)); //合并列
+ } else {
+ //有数据
+ for (int i = 0; i < datalist.size(); i++) {
+ CustReportShowBean detail = datalist.get(i);
+ HSSFRow row = ExcelPoiUtil.createRow(sheet, rowNum++, 500);
+ ExcelPoiUtil.createCell(row, 0, textStyle1, detail.getDeptname());
+ ExcelPoiUtil.createCell(row, 1, textStyle1, detail.getCustname());
+ ExcelPoiUtil.createCell(row, 2, textStyle1, detail.getCardno());
+ ExcelPoiUtil.createCell(row, 3, textStyle1, detail.getB_normalcnt()+"");
+ ExcelPoiUtil.createCell(row, 4, textStyle1, MoneyUtil.formatYuanToString(detail.getB_normalamt()));
+ ExcelPoiUtil.createCell(row, 5, textStyle1, detail.getL_normalcnt().toString());
+ ExcelPoiUtil.createCell(row, 6, textStyle1, MoneyUtil.formatYuanToString(detail.getL_normalamt())); //午餐
+ ExcelPoiUtil.createCell(row, 7, textStyle1, detail.getD_normalcnt().toString());
+ ExcelPoiUtil.createCell(row, 8, textStyle1, MoneyUtil.formatYuanToString(detail.getD_normalamt())); //晚餐
+ ExcelPoiUtil.createCell(row, 9, textStyle1, detail.getTotnormalcnt().toString());
+ ExcelPoiUtil.createCell(row, 10, textStyle1,MoneyUtil.formatYuanToString(detail.getTotnormalamt()));
+ ExcelPoiUtil.createCell(row, 11, textStyle1, detail.getB_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 12, textStyle1, MoneyUtil.formatYuanToString(detail.getB_discountamt()));
+ ExcelPoiUtil.createCell(row, 13, textStyle1, detail.getL_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 14, textStyle1, MoneyUtil.formatYuanToString(detail.getL_discountamt())); //午餐
+ ExcelPoiUtil.createCell(row, 15, textStyle1, detail.getD_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 16, textStyle1, MoneyUtil.formatYuanToString(detail.getD_discountamt())); //晚餐
+ ExcelPoiUtil.createCell(row, 17, textStyle1, detail.getTotdiscountcnt().toString());
+ ExcelPoiUtil.createCell(row, 18, textStyle1,MoneyUtil.formatYuanToString(detail.getTotdiscountamt()));
+ ExcelPoiUtil.createCell(row, 19, textStyle1, MoneyUtil.formatYuanToString(detail.getTotfeeamt()));
+ ExcelPoiUtil.createCell(row, 20, textStyle1, detail.getTotcnt().toString());
+ ExcelPoiUtil.createCell(row, 21, textStyle1,MoneyUtil.formatYuanToString(detail.getTotamt()));
+
+ }
+
+
+ }
+
+ //TODO: 表格页脚
+ HSSFCellStyle textStyle3 = ExcelPoiUtil.creatStyle(workbook, "宋体", false, 10, HSSFCellStyle.ALIGN_LEFT, false); //设置单元格样式
+ HSSFRow buttom = ExcelPoiUtil.createRow(sheet, ++rowNum, 400);
+ ExcelPoiUtil.createCell(buttom, 0, textStyle3, "制表人:" + (oper == null ? "unknow" : oper.getOpername()) + " " + DateUtil.reformatDatetime(systemUtilService.getSysdatetime().getHostdatetime(), DateUtil.DATETIME_FMT, "yyyy-MM-dd HH:mm:ss"));
+ sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, 2)); //合并列
+
+ //TODO: 审核信息
+ HSSFRow signRow10 = ExcelPoiUtil.createRow(sheet, rowNum + 3, 400);
+ ExcelPoiUtil.createCell(signRow10, 0, textStyle3, "大理州公安局警务保障处审核盖章:");
+ ExcelPoiUtil.createCell(signRow10, 6, textStyle3, "苍山饭店审核盖章:");
+ sheet.addMergedRegion(new CellRangeAddress(rowNum + 3, rowNum + 3, 0, 5)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(rowNum + 3, rowNum + 3, 6, columns - 1)); //合并列
+ HSSFRow signRow11 = ExcelPoiUtil.createRow(sheet, rowNum + 4, 400);
+ ExcelPoiUtil.createCell(signRow11, 0, textStyle3, "经办人:");
+ ExcelPoiUtil.createCell(signRow11, 6, textStyle3, "审核人:");
+ sheet.addMergedRegion(new CellRangeAddress(rowNum + 4, rowNum + 4, 0, 5)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(rowNum + 4, rowNum + 4, 6, columns - 1)); //合并列
+
+ HSSFRow signRow12 = ExcelPoiUtil.createRow(sheet, rowNum + 5, 400);
+ ExcelPoiUtil.createCell(signRow12, 0, textStyle3, "审核人:");
+ sheet.addMergedRegion(new CellRangeAddress(rowNum + 5, rowNum + 5, 0, 5)); //合并列
+
+
+ try {
+ response.setContentType("application/x-msdownload");
+ response.setHeader("Content-Disposition", "attachment;" + " filename=" + new String(filename.getBytes(), "ISO-8859-1") + ".xls");
+ OutputStream out = response.getOutputStream();
+ workbook.write(out);
+ out.flush();
+ out.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TermReportServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TermReportServiceImpl.java
index 88476b5..2493657 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TermReportServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/TermReportServiceImpl.java
@@ -42,42 +42,43 @@
private static final Logger logger = LoggerFactory.getLogger(TermReportServiceImpl.class);
-
@Override
public List<TermReportShowBean> getTermReportSearchData(TermReportSearchBean searchBean) {
if (null != searchBean) {
String startdate = DateUtil.unParseToDateFormat(searchBean.getStartdate());
String enddate = DateUtil.unParseToDateFormat(searchBean.getEnddate());
- StringBuffer sb = new StringBuffer("select t.termid," +
+ StringBuffer sb = new StringBuffer("select cast (t.termid as VARCHAR) termid," +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='breakfast' then t.amount else 0 end) as b_normalamt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='breakfast' then 1 else 0 end) as b_normalcnt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='breakfast' then 1 else 0 end) as b_discountcnt, " +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='breakfast' then 1 else 0 end) as int4) as b_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='breakfast' then 1 else 0 end) as int4) as b_discountcnt, " +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='breakfast' then t.amount else 0 end) as b_discountamt, " +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='lunch' then t.amount else 0 end) as l_normalamt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='lunch' then 1 else 0 end) as l_normalcnt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='lunch' then 1 else 0 end) as l_discountcnt, " +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='lunch' then 1 else 0 end) as int4) as l_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='lunch' then 1 else 0 end) as int4) as l_discountcnt, " +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='lunch' then t.amount else 0 end) as l_discountamt, " +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='dinner' then t.amount else 0 end) as d_normalamt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='dinner' then 1 else 0 end) as d_normalcnt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then 1 else 0 end) as d_discountcnt, " +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then t.amount else 0 end) as d_discountmt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then 1 else 0 end) as totdiscountcnt, " +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' and t.mealtype='dinner' then 1 else 0 end) as int4) as d_normalcnt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then 1 else 0 end) as int4) as d_discountcnt, " +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') and t.mealtype='dinner' then t.amount else 0 end) as d_discountamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then 1 else 0 end) as int4) as totdiscountcnt, " +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then t.amount else 0 end) as totdiscountamt," +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype in ('discount','reduction','quota') then t.managefee else 0 end) as totfeeamt," +
" sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' then t.amount else 0 end) as totnormalamt," +
- " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' then 1 else 0 end) as totnormalcnt" +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 when t.managefeetype ='normal' then 1 else 0 end) as int4) as totnormalcnt," +
+ " sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 else t.amount end) as totamt," +
+ " cast(sum(case when t.revflag=1 then 0 when t.transtype='revert' then 0 else 1 end) as int4) as totcnt" +
" from tb_transdtl t " +
" left join tb_device dev on t.termid=dev.id " +
" left join tb_shopsettlement s on s.shopid=t.shopid" +
" left join tb_discount_rule r on r.ruleid=t.ruleid" +
" where t.status='success' " +
" and t.accdate>=:startdate and t.accdate<=:enddate ") ;
- if (StringUtil.isEmpty(searchBean.getShopid())) {
+ if (!StringUtil.isEmpty(searchBean.getShopid())) {
sb.append( " and s.shopid = :shopid ");
}
- if (StringUtil.isEmpty(searchBean.getShopname())) {
- sb.append( " and s.shopid like :shopname ");
+ if (!StringUtil.isEmpty(searchBean.getShopname())) {
+ sb.append( " and s.shopname like :shopname ");
}
if (null!=searchBean.getDevgroupid()) {
sb.append( " and dev.devgroupid = :groupid ");
@@ -85,17 +86,17 @@
if (null!=searchBean.getRuleid()) {
sb.append( " and r.ruleid = :ruleid ");
}
- sb.append(" group by dev.devgroupid,t.termid,s.shopname");
+ sb.append(" group by t.termid");
Query query = entityManager.createNativeQuery(sb.toString());
query.setParameter("startdate", startdate);
query.setParameter("enddate", enddate);
if (null!=searchBean.getDevgroupid()) {
query.setParameter("groupid", searchBean.getDevgroupid());
}
- if (StringUtil.isEmpty(searchBean.getShopid())) {
+ if (!StringUtil.isEmpty(searchBean.getShopid())) {
query.setParameter("shopid", searchBean.getShopid().trim() );
}
- if (StringUtil.isEmpty(searchBean.getShopname())) {
+ if (!StringUtil.isEmpty(searchBean.getShopname())) {
query.setParameter("shopname","%" + searchBean.getShopname().trim() + "%");
}
if (null!=searchBean.getRuleid()) {
@@ -103,7 +104,33 @@
}
query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(TermReportShowBean.class));
List<TermReportShowBean> list = query.getResultList();
- if (null != list) return list;
+ if (null != list){
+ TermReportShowBean tot=new TermReportShowBean("合 计",0d,0,0d,0,0d,0,0d,0,0d,0,
+ 0d,0,0,0d,0d,0,0d,0,0d);
+ for(TermReportShowBean b:list){
+ tot.setB_discountamt(tot.getB_discountamt()+b.getB_discountamt());
+ tot.setB_discountcnt(tot.getB_discountcnt()+b.getB_discountcnt());
+ tot.setL_discountamt(tot.getL_discountamt()+b.getL_discountamt());
+ tot.setL_discountcnt(tot.getL_discountcnt()+b.getL_discountcnt());
+ tot.setD_discountamt(tot.getD_discountamt()+b.getD_discountamt());
+ tot.setD_discountcnt(tot.getD_discountcnt()+b.getD_discountcnt());
+ tot.setB_normalamt(tot.getB_normalamt()+b.getB_normalamt());
+ tot.setB_normalcnt(tot.getB_normalcnt()+b.getB_normalcnt());
+ tot.setL_normalamt(tot.getL_normalamt()+b.getL_normalamt());
+ tot.setL_normalcnt(tot.getL_normalcnt()+b.getL_normalcnt());
+ tot.setD_normalamt(tot.getD_normalamt()+b.getD_normalamt());
+ tot.setD_normalcnt(tot.getD_normalcnt()+b.getD_normalcnt());
+ tot.setTotdiscountamt(tot.getTotdiscountamt()+b.getTotdiscountamt());
+ tot.setTotdiscountcnt(tot.getTotnormalcnt()+b.getTotdiscountcnt());
+ tot.setTotfeeamt(tot.getTotfeeamt()+b.getTotfeeamt());
+ tot.setTotnormalamt(tot.getTotnormalamt()+b.getTotnormalamt());
+ tot.setTotnormalcnt(tot.getTotnormalcnt()+b.getTotnormalcnt());
+ tot.setTotcnt(tot.getTotcnt()+b.getTotcnt());
+ tot.setTotamt(tot.getTotamt()+b.getTotamt());
+ }
+ list.add(tot);
+ return list;
+ }
}
return new ArrayList<>(0);
@@ -125,7 +152,7 @@
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("终端消费报表");
- int columns = 10; //
+ int columns = 20; //
sheet.setColumnWidth(0, ExcelPoiUtil.columnWidth(25)); //日期
for (int i = 3; i < columns; i++) {
sheet.setColumnWidth(i, ExcelPoiUtil.columnWidth(12));
@@ -158,58 +185,106 @@
//TODO:创建表头(poi做多行合并,一定需要先绘制单元格,然后写入数据,最后合并)
HSSFRow row2 = ExcelPoiUtil.createRow(sheet, 2, 600);
- ExcelPoiUtil.createCell(row2, 0, headStyle, "序号");
- ExcelPoiUtil.createCell(row2, 1, headStyle, "食堂");
+ ExcelPoiUtil.createCell(row2, 0, headStyle, "终端号");
+ ExcelPoiUtil.createCell(row2, 1, headStyle, "非折扣交易");
- ExcelPoiUtil.createCell(row2, 2, headStyle, "含餐补消费支付");
+ ExcelPoiUtil.createCell(row2, 2, headStyle, null);
ExcelPoiUtil.createCell(row2, 3, headStyle, null);
ExcelPoiUtil.createCell(row2, 4, headStyle, null);
ExcelPoiUtil.createCell(row2, 5, headStyle, null);
ExcelPoiUtil.createCell(row2, 6, headStyle, null);
ExcelPoiUtil.createCell(row2, 7, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 8, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 2, 2, 7)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
+ sheet.addMergedRegion(new CellRangeAddress(2, 2, 1, 8)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
- ExcelPoiUtil.createCell(row2, 8, headStyle, "无餐补消费支付");
- ExcelPoiUtil.createCell(row2, 9, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 9, headStyle, "折扣交易");
ExcelPoiUtil.createCell(row2, 10, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 2, 8, 10)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
+ ExcelPoiUtil.createCell(row2, 11, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 12, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 13, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 14, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 15, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 16, headStyle, null);
+ ExcelPoiUtil.createCell(row2, 17, headStyle, null);
+ sheet.addMergedRegion(new CellRangeAddress(2, 2, 9, 17)); //合并单元格CellRangeAddress构造参数依次表示 起始行,截至行,起始列, 截至列
- ExcelPoiUtil.createCell(row2, 11, headStyle, "合计 消费金额");
- ExcelPoiUtil.createCell(row2, 12, headStyle, "合计 消费笔数");
- HSSFRow row3 = ExcelPoiUtil.createRow(sheet, 3, 800); //表头第二行
+ ExcelPoiUtil.createCell(row2, 18, headStyle, "交易笔\n数合计");
+ ExcelPoiUtil.createCell(row2, 19, headStyle, "交易金\n额合计");
+
+ HSSFRow row3 = ExcelPoiUtil.createRow(sheet, 3, 800);
+ HSSFRow row4 = ExcelPoiUtil.createRow(sheet, 4, 800);
+ ExcelPoiUtil.createCell(row4, 0, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 1, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 2, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 3, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 4, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 5, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 6, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 9, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 10, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 11, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 12, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 13, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 14, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 17, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 18, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 19, headStyle, null);
+
ExcelPoiUtil.createCell(row3, 0, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 0)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 0, 0)); //合并列
- ExcelPoiUtil.createCell(row3, 1, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 3, 1, 1)); //合并列
+ ExcelPoiUtil.createCell(row3, 1, headStyle, "早餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 2, headStyle, "早餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 3, headStyle, "午餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 4, headStyle, "午餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 5, headStyle, "晚餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 6, headStyle, "晚餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 7, headStyle, "非折扣\n交易小计");
+ ExcelPoiUtil.createCell(row3, 8, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 7, headStyle, "交易笔数小计");
+ ExcelPoiUtil.createCell(row4, 8, headStyle, "交易金额小计");
- ExcelPoiUtil.createCell(row3, 11, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 3, 11, 11)); //合并列
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 1, 1)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 2, 2)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 3, 3)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 4, 4)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 5, 5)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 6, 6)); //合并行
+ sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 8));
- ExcelPoiUtil.createCell(row3, 12, headStyle, null);
- sheet.addMergedRegion(new CellRangeAddress(2, 3, 12, 12)); //合并列
+ ExcelPoiUtil.createCell(row3, 9, headStyle, "早餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 10, headStyle, "早餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 11, headStyle, "午餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 12, headStyle, "午餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 13, headStyle, "晚餐累计\n交易笔数");
+ ExcelPoiUtil.createCell(row3, 14, headStyle, "晚餐累计\n交易金额");
+ ExcelPoiUtil.createCell(row3, 15, headStyle, "折扣\n交易小计");
+ ExcelPoiUtil.createCell(row3, 16, headStyle, null);
+ ExcelPoiUtil.createCell(row4, 15, headStyle, "交易笔数小计");
+ ExcelPoiUtil.createCell(row4, 16, headStyle, "交易金额小计");
- ExcelPoiUtil.createCell(row3, 2, headStyle, "早餐 金额");
- ExcelPoiUtil.createCell(row3, 3, headStyle, "早餐 份数");
- ExcelPoiUtil.createCell(row3, 4, headStyle, "午餐 金额");
- ExcelPoiUtil.createCell(row3, 5, headStyle, "午餐 份数");
- ExcelPoiUtil.createCell(row3, 6, headStyle, "晚餐 金额");
- ExcelPoiUtil.createCell(row3, 7, headStyle, "晚餐 份数");
+ ExcelPoiUtil.createCell(row3, 17, headStyle, "餐补金额");
+ ExcelPoiUtil.createCell(row3, 18, headStyle, null);
+ ExcelPoiUtil.createCell(row3, 19, headStyle, null);
- // ExcelPoiUtil.createCell(row3, 8, headStyle, "早餐 金额");
- ExcelPoiUtil.createCell(row3, 8, headStyle, "早餐 份数");
- // ExcelPoiUtil.createCell(row3, 10, headStyle, "午餐 金额");
- ExcelPoiUtil.createCell(row3, 9, headStyle, "午餐 份数");
- // ExcelPoiUtil.createCell(row3, 12, headStyle, "晚餐 金额");
- ExcelPoiUtil.createCell(row3, 10, headStyle, "晚餐 份数");
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 9, 9));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 10, 10));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 11, 11));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 12, 12));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 13, 13));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 14, 14));
+ sheet.addMergedRegion(new CellRangeAddress(3, 4, 17, 17));
+ sheet.addMergedRegion(new CellRangeAddress(3, 3, 15, 16));
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 18, 18));
+ sheet.addMergedRegion(new CellRangeAddress(2, 4, 19, 19));
//TODO: 数据
- int rowNum = 4;
+ int rowNum = 5;
if (StringUtil.isEmpty(datalist)) {
//无数据
- HSSFRow row4 = ExcelPoiUtil.createRow(sheet, rowNum, 500);
+ HSSFRow row5 = ExcelPoiUtil.createRow(sheet, rowNum, 500);
ExcelPoiUtil.createCell(row4, 0, textStyle1, "无数据");
for (int n = 1; n < columns; n++) ExcelPoiUtil.createCell(row4, n, textStyle1, null);
sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, 0, columns - 1)); //合并列
@@ -218,22 +293,26 @@
for (int i = 0; i < datalist.size(); i++) {
TermReportShowBean detail = datalist.get(i);
HSSFRow row = ExcelPoiUtil.createRow(sheet, rowNum++, 500);
- /* ExcelPoiUtil.createCell(row, 0, textStyle1,""+ detail.getRownum());
- ExcelPoiUtil.createCell(row, 1, textStyle1, detail.getGroupname());
- ExcelPoiUtil.createCell(row, 2, textStyle1, MoneyUtil.formatYuanToString(detail.getIbtotalamt()));
- ExcelPoiUtil.createCell(row, 3, textStyle1, detail.getIbtotalcnt().toString());
- ExcelPoiUtil.createCell(row, 4, textStyle1, MoneyUtil.formatYuanToString(detail.getIltotalamt())); //午餐
- ExcelPoiUtil.createCell(row, 5, textStyle1, detail.getIltotalcnt().toString());
- ExcelPoiUtil.createCell(row, 6, textStyle1, MoneyUtil.formatYuanToString(detail.getIdtotalamt())); //晚餐
- ExcelPoiUtil.createCell(row, 7, textStyle1, detail.getIdtotalcnt().toString());
-
- ExcelPoiUtil.createCell(row, 8, textStyle1, detail.getObtotalcnt().toString());
- ExcelPoiUtil.createCell(row, 9, textStyle1, detail.getOltotalcnt().toString());
- ExcelPoiUtil.createCell(row, 10, textStyle1, detail.getOdtotalcnt().toString());
-
- ExcelPoiUtil.createCell(row, 11, textStyle1, MoneyUtil.formatYuanToString(detail.getIdtotalamt()+detail.getIbtotalamt()+detail.getIltotalamt())); //总计
- ExcelPoiUtil.createCell(row, 12, textStyle1, detail.getIdtotalcnt()+detail.getIbtotalcnt()+detail.getIltotalcnt()+detail.getOdtotalcnt()+detail.getOltotalcnt()+detail.getObtotalcnt()+"");
-*/
+ ExcelPoiUtil.createCell(row, 0, textStyle1, detail.getTermid());
+ ExcelPoiUtil.createCell(row, 1, textStyle1, detail.getB_normalcnt()+"");
+ ExcelPoiUtil.createCell(row, 2, textStyle1, MoneyUtil.formatYuanToString(detail.getB_normalamt()));
+ ExcelPoiUtil.createCell(row, 3, textStyle1, detail.getL_normalcnt().toString());
+ ExcelPoiUtil.createCell(row, 4, textStyle1, MoneyUtil.formatYuanToString(detail.getL_normalamt())); //午餐
+ ExcelPoiUtil.createCell(row, 5, textStyle1, detail.getD_normalcnt().toString());
+ ExcelPoiUtil.createCell(row, 6, textStyle1, MoneyUtil.formatYuanToString(detail.getD_normalamt())); //晚餐
+ ExcelPoiUtil.createCell(row, 7, textStyle1, detail.getTotnormalcnt().toString());
+ ExcelPoiUtil.createCell(row, 8, textStyle1,MoneyUtil.formatYuanToString(detail.getTotnormalamt()));
+ ExcelPoiUtil.createCell(row, 9, textStyle1, detail.getB_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 10, textStyle1, MoneyUtil.formatYuanToString(detail.getB_discountamt()));
+ ExcelPoiUtil.createCell(row, 11, textStyle1, detail.getL_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 12, textStyle1, MoneyUtil.formatYuanToString(detail.getL_discountamt())); //午餐
+ ExcelPoiUtil.createCell(row, 13, textStyle1, detail.getD_discountcnt().toString());
+ ExcelPoiUtil.createCell(row, 14, textStyle1, MoneyUtil.formatYuanToString(detail.getD_discountamt())); //晚餐
+ ExcelPoiUtil.createCell(row, 15, textStyle1, detail.getTotdiscountcnt().toString());
+ ExcelPoiUtil.createCell(row, 16, textStyle1,MoneyUtil.formatYuanToString(detail.getTotdiscountamt()));
+ ExcelPoiUtil.createCell(row, 17, textStyle1, MoneyUtil.formatYuanToString(detail.getTotfeeamt()));
+ ExcelPoiUtil.createCell(row, 18, textStyle1, detail.getTotcnt().toString());
+ ExcelPoiUtil.createCell(row, 19, textStyle1,MoneyUtil.formatYuanToString(detail.getTotamt()));
}
diff --git a/src/main/resources/templates/restaurant/custreport/index.html b/src/main/resources/templates/restaurant/custreport/index.html
new file mode 100644
index 0000000..87e4681
--- /dev/null
+++ b/src/main/resources/templates/restaurant/custreport/index.html
@@ -0,0 +1,252 @@
+<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">
+ <input type="hidden" id="custreport-hidden-maxdate" th:value="${maxdate}"/>
+
+ <div class="layui-form" lay-filter="custreport-search-form">
+ <div class="layui-form-item" style="margin-bottom: 0;">
+ <div class="layui-inline">
+ <label class="layui-form-label"> 商户:</label>
+ <div class="layui-input-inline">
+ <select name="shopid" id="custreport-search-shopid">
+ <option value="" selected>全部</option>
+ <option th:each="shop : ${shoplistForSelect}" th:value="${shop.shopid}">[[${shop.shopname}]]</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label">餐补规则:</label>
+ <div class="layui-input-inline" style="height: 38px">
+ <select id="custreport-search-ruleid">
+ <option value="" selected>全部</option>
+ <option th:each="rl:${rulelist}" th:value="${rl.ruleid}"
+ th:text="${rl.rulename}"></option>
+ </select>
+ </div>
+ </div>
+
+ </div>
+
+ <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="custreport-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="custreport-search-enddate" placeholder="截止日期"
+ th:value="${maxdate}"
+ autocomplete="off" class="layui-input"/>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <button id="custreport-search-btn" class="layui-btn icon-btn" data-type="search"><i
+ class="layui-icon"></i>搜索
+ </button>
+ </div>
+
+ </div>
+
+ </div>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ <div class="layui-btn-group">
+ <button id="shopreport-custreport-export-excel"
+ class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
+ class="layui-icon layui-icon-export"></i>导出
+ </button>
+ <button id="shopreport-custreport-print-table"
+ class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
+ class="layui-icon layui-icon-print"></i>打印
+ </button>
+ </div>
+ </div>
+ <table class="layui-table sw-table" id="shopreport-custreport-table"
+ th:fragment="custreportTable">
+ <thead>
+ <tr>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">部门</th>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">姓名</th>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">卡号</th>
+ <th colspan="8" style="text-align: center;min-width: 100px;">非折扣交易</th>
+ <th colspan="9" style="text-align: center;">折扣交易</th>
+ <th rowspan="4" style="text-align: center;">交易笔数<br/>合计</th>
+ <th rowspan="4" style="text-align: center;">交易金额<br/>合计</th>
+ </tr>
+ <tr>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">非折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">餐补金额</th>
+ </tr>
+ <tr>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ </tr>
+ </thead>
+
+ <tbody id="shopreport-custreport-tbody" th:data-startdate="${searchBean.startdate}" th:data-enddate="${searchBean.enddate}" th:data-opercode="${opercode}">
+ <tr th:if="${null==showlist || showlist.size()==0}">
+ <td colspan="23">无数据</td>
+ </tr>
+ <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}">
+ <tr>
+ <td style="font-weight: bold;" th:text="${data.deptname}"></td>
+ <td style="font-weight: bold;" th:text="${data.custname}"></td>
+ <td style="font-weight: bold;" th:text="${data.cardno}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totnormalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totnormalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totdiscountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totdiscountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totfeeamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totamt,1,2)}"></td>
+
+ </tr>
+
+ </div>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+
+<script>
+ layui.use(['form', 'layer', 'element', 'laydate', 'treeSelect'], function () {
+ var layer = layui.layer;
+ var $ = layui.jquery;
+ var treeSelect = layui.treeSelect;
+ var laydate = layui.laydate;
+
+
+ laydate.render({
+ elem: '#custreport-search-startdate',
+ max: $("#custreport-hidden-maxdate").val(),
+ trigger: 'click'
+ });
+ laydate.render({
+ elem: '#shopreport-labercount-search-enddate',
+ max: $("#custreport-hidden-maxdate").val(),
+ trigger: 'click'
+ });
+
+ $('#custreport-search-btn').click(function () {
+ var shopid = $("#custreport-search-shopid").val();
+ var ruleid = $("#custreport-search-ruleid").val();
+ var startdate = $("#custreport-search-startdate").val();
+ var enddate = $("#custreport-search-enddate").val();
+ $.ajax({
+ url: '[[@{/custreport/custreportlist}]]',
+ type: "POST",
+ data: {
+ shopid: shopid,
+ startdate:startdate,
+ enddate:enddate,
+ ruleid: ruleid,
+ _csrf: $("meta[name='_csrf_token']").attr("value")
+ },
+ success: function (data) {
+ $("#shopreport-custreport-table").html(data);
+ layer.closeAll('loading');
+ },
+ error: function (status, err) {
+ layer.closeAll('loading');
+ layer.msg('查询失败了', {icon: 2});
+ }
+ });
+ });
+
+ $("#shopreport-custreport-export-excel").click(function(){
+ var startdate= $("#shopreport-custreport-tbody").attr("data-startdate");
+ var enddate= $("#shopreport-custreport-tbody").attr("data-enddate");
+ var shopid = $("#custreport-search-shopid").val();
+ var ruleid = $("#custreport-search-ruleid").val();
+ var dataUrl='[[@{/custreport/excelexport}]]?startdate='+startdate+'&enddate='+enddate+'&shopid='+shopid+'&ruleid='+ruleid;
+ var xhr = new XMLHttpRequest();
+ xhr.responseType = "blob"; //设置响应类型为blob类型
+ xhr.onload = function () {
+ debugger
+ if (this.status == "200") {
+ //获取响应文件流
+ var blob = this.response;
+ // 转换完成,创建一个a标签用于下载
+ var aElem = document.createElement('a');
+ aElem.href = window.URL.createObjectURL(blob);
+ aElem.download = "客户类别消费报表.xls";
+ aElem.onload = function (e) {
+ window.URL.revokeObjectURL(aElem.href);
+ };
+ $("body").append(aElem); // 修复firefox中无法触发click
+ aElem.click();
+ $(aElem).remove();
+
+ }else if(this.status == "403"){
+ layer.msg('无导出资源权限', {icon: 2});
+ } else {
+ layer.msg('导出excel失败了', {icon: 2});
+ }
+ }
+ xhr.open("GET", dataUrl, true);
+ xhr.send();
+ });
+
+ var LODOP; //声明为全局变量
+ $("#shopreport-custreport-print-table").click(function(){
+ var startdate= $("#shopreport-custreport-tbody").attr("data-startdate");
+ var enddate= $("#shopreport-custreport-tbody").attr("data-enddate");
+ var shopid = $("#custreport-search-shopid").val();
+ var ruleid = $("#custreport-search-ruleid").val();
+
+ var opercode = $("#shopreport-custreport-tbody").attr("data-opercode");
+ var url = '/custreport/print/printcustreport?startdate=' + startdate + '&enddate=' + enddate +'&shopid='+shopid+'&ruleid='+ruleid+ '&opercode=' + opercode;
+
+ LODOP = getLodop();
+ LODOP.PRINT_INIT("个人流水报表");
+ LODOP.SET_PRINT_PAGESIZE(2, 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'> ##</span></font>");
+ LODOP.SET_PRINT_STYLEA(0, "ItemType", 1);
+ LODOP.SET_PRINT_STYLEA(0, "HOrient", 3);
+ LODOP.SET_PRINT_STYLEA(0, "VOrient", 3);
+ LODOP.SET_SHOW_MODE("NP_NO_RESULT", true);
+ LODOP.SET_PRINT_MODE("FULL_WIDTH_FOR_OVERFLOW",true);
+ LODOP.PREVIEW();
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/custreport/print/report.html b/src/main/resources/templates/restaurant/custreport/print/report.html
new file mode 100644
index 0000000..7dfecd6
--- /dev/null
+++ b/src/main/resources/templates/restaurant/custreport/print/report.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<head>
+ <meta charset="UTF-8">
+ <title>客户消费报表</title>
+
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/custom.css}"/>
+</head>
+<body>
+<div class="layui-card">
+ <div class="layui-card-header" style="text-align: center;">
+ <h1>客户消费报表</h1>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ <div style="float: left;padding-left: 3px;" th:text="${'区间:'+period}"></div>
+ <div style="float: right;" th:text="'单位:元'"></div>
+ </div>
+ <table class="layui-table sw-table sw-print">
+ <thead>
+ <tr>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">单位</th>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">姓名</th>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">卡号</th>
+ <th colspan="8" style="text-align: center;min-width: 100px;">非折扣交易</th>
+ <th colspan="9" style="text-align: center;">折扣交易</th>
+ <th rowspan="4" style="text-align: center;">交易笔数<br/>合计</th>
+ <th rowspan="4" style="text-align: center;">交易金额<br/>合计</th>
+ </tr>
+ <tr>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">非折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">餐补金额</th>
+ </tr>
+ <tr>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr th:if="${null==showlist || showlist.size()==0}">
+ <td colspan="23">无数据</td>
+ </tr>
+ <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}">
+ <tr>
+ <td style="font-weight: bold;" th:text="${data.deptname}"></td>
+ <td style="font-weight: bold;" th:text="${data.custname}"></td>
+ <td style="font-weight: bold;" th:text="${data.cardno}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totnormalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totnormalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totdiscountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totdiscountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totfeeamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totamt,1,2)}"></td>
+ </tr>
+ </div>
+ </tbody>
+ </table>
+ <div class="layui-form toolbar">
+ <div style="float: left;padding-left: 3px;"
+ th:text="${'制表人:'+opername+' '+ printdatetime}"></div>
+ </div>
+ </div>
+ <div class="layui-card-body" style="margin-top: 25px;">
+ <table class="sw-print-sign">
+ <tr>
+ <td width="50%">大理州公安局警务保障处审核盖章:</td>
+ <td width="50%">苍山饭店审核盖章:</td>
+ </tr>
+ <tr>
+ <td>经办人:</td>
+ <td>审核人:</td>
+ </tr>
+ <tr>
+ <td>审核人:</td>
+
+ </tr>
+ </table>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/terminalreport/index.html b/src/main/resources/templates/restaurant/terminalreport/index.html
deleted file mode 100644
index 301dc5e..0000000
--- a/src/main/resources/templates/restaurant/terminalreport/index.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<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="terminalreport-search-form">
- <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="shopno" id="terminalreport-search-shopno"
- autocomplete="off" class="layui-input"/>
- </div>
-
- </div>
- <div class="layui-inline">
- <label class="layui-form-label">商户名称</label>
- <div class="layui-input-inline">
- <input type="text" name="shopname" id="terminalreport-search-shopname"
- autocomplete="off" class="layui-input"/>
- </div>
- </div>
- </div>
- <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="interval" id="terminalreport-search-interval"
- autocomplete="off" class="layui-input"/>
- </div>
- </div>
- <div class="layui-inline">
- <label class="layui-form-label">餐补规则</label>
- <div class="layui-input-inline">
- <select name="ruleid" id="terminalreport-search-ruleid">
- <option value="" selected>全部</option>
- </select>
- </div>
- </div>
-
- <div class="layui-inline">
- <button id="terminalreport-search-btn" class="layui-btn icon-btn" data-type="search"><i
- class="layui-icon"></i>搜索
- </button>
- </div>
- </div>
- </div>
- </div>
- <div class="layui-card-body">
- <div class="layui-form toolbar">
- <div class="layui-btn-group">
- <button id="shopreport-terminalreport-export-excel"
- class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
- class="layui-icon layui-icon-export"></i>导出
- </button>
- <button id="shopreport-terminalreport-print-table"
- class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
- class="layui-icon layui-icon-print"></i>打印
- </button>
- </div>
- </div>
- <table class="layui-table sw-table" id="shopreport-terminalreport-table"
- th:fragment="terminalreportTable">
- <thead>
- <tr>
- <th rowspan="4" style="text-align: center;min-width: 60px;" >终端编号</th>
- <th colspan="8" style="text-align: center;min-width: 100px;">非折扣交易</th>
- <th colspan="9" style="text-align: center;">折扣交易</th>
- <th rowspan="4" style="text-align: center;">交易笔数<br/>合计</th>
- <th rowspan="4" style="text-align: center;">交易金额<br/>合计</th>
- </tr>
- <tr>
- <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
- <th colspan="2" style="text-align: center;min-width: 60px;">非折扣交易小计</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
- <th colspan="2" style="text-align: center;min-width: 60px;">折扣交易小计</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">餐补金额</th>
- </tr>
- <tr>
- <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
- <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
- <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
- <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
- </tr>
- </thead>
- <tr th:if="${null==showlist || showlist.size()==0}">
- <td colspan="23">无数据</td>
- </tr>
- <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}">
- <tr>
-
- </tr>
- </div>
- </tbody>
- </table>
- </div>
-</div>
-
-
-<script>
- layui.use(['form', 'layer', 'element', 'laydate', 'treeSelect'], function () {
- var layer = layui.layer;
- var $ = layui.jquery;
- var treeSelect = layui.treeSelect;
-
- $('#terminalreport-search-btn').click(function () {
- var shopno = $("#terminalreport-search-shopno").val();
- var shopname = $("#terminalreport-search-shopname").val();
- var interval = $("#terminalreport-search-interval").val();
- var ruleid = $("#terminalreport-search-ruleid").val();
-
- $.ajax({
- url: '[[@{/terminalreport/terminalreportlist}]]',
- type: "POST",
- data: {
- shopno: shopno,
- shopname: shopname,
- interval: interval,
- ruleid: ruleid,
- _csrf: $("meta[name='_csrf_token']").attr("value")
- },
- success: function (data) {
- $("#shopreport-terminalreport-table").html(data);
- layer.closeAll('loading');
- },
- error: function (status, err) {
- layer.closeAll('loading');
- layer.msg('查询失败了', {icon: 2});
- }
- });
- });
-
- });
-</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/termreport/index.html b/src/main/resources/templates/restaurant/termreport/index.html
index 653cb67..6a0c31b 100644
--- a/src/main/resources/templates/restaurant/termreport/index.html
+++ b/src/main/resources/templates/restaurant/termreport/index.html
@@ -1,104 +1,140 @@
<div class="layui-card">
<div class="layui-card-header">
- <h2 class="header-title">终端消费表</h2>
+ <h2 class="header-title">终端消费报表</h2>
<span class="layui-breadcrumb pull-right">
<a href="#">报表中心</a>
- <a><cite>终端消费表</cite></a>
+ <a><cite>终端消费报表</cite></a>
</span>
</div>
<div class="layui-card-body">
+ <input type="hidden" id="termreport-hidden-maxdate" th:value="${maxdate}"/>
+
<div class="layui-form" lay-filter="termreport-search-form">
- <input type="hidden" id="termreport-hidden-maxdate" th:value="${maxdate}" />
- <input type="hidden" id="termreport-hidden-devgroupid" th:value="${devgroupid}"/>
<div class="layui-form-item" style="margin-bottom: 0;">
<div class="layui-inline">
- <label class="layui-form-label">记账日期</label>
+ <label class="layui-form-label"> 商户:</label>
<div class="layui-input-inline">
- <input type="text" name="startdate" id="termreport-search-startdate" placeholder="起始日期" th:value="${maxdate}"
+ <select name="shopid" id="termreport-search-shopid">
+ <option value="" selected>全部</option>
+ <option th:each="shop : ${shoplistForSelect}" th:value="${shop.shopid}">[[${shop.shopname}]]</option>
+ </select>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label">餐补规则:</label>
+ <div class="layui-input-inline" style="height: 38px">
+ <select id="termreport-search-ruleid">
+ <option value="" selected>全部</option>
+ <option th:each="rl:${rulelist}" th:value="${rl.ruleid}"
+ th:text="${rl.rulename}"></option>
+ </select>
+ </div>
+ </div>
+
+ </div>
+
+ <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="termreport-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="termreport-search-enddate" placeholder="截止日期" th:value="${maxdate}"
+ <input type="text" name="enddate" id="termreport-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="termreport-search-devgroup" lay-filter="termreport-search-devgroup-filter"
- autocomplete="off" class="layui-input"/>
- </div>
- </div>
-
<div class="layui-inline">
<button id="termreport-search-btn" class="layui-btn icon-btn" data-type="search"><i
class="layui-icon"></i>搜索
</button>
</div>
+
</div>
+
</div>
</div>
<div class="layui-card-body">
<div class="layui-form toolbar">
<div class="layui-btn-group">
- <button id="shopreport-termreport-export-excel" class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i class="layui-icon layui-icon-export"></i>导出</button>
- <button id="shopreport-termreport-print-table" class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i class="layui-icon layui-icon-print"></i>打印</button>
+ <button id="shopreport-termreport-export-excel"
+ class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
+ class="layui-icon layui-icon-export"></i>导出
+ </button>
+ <button id="shopreport-termreport-print-table"
+ class="layui-btn layui-btn-sm layui-btn-primary sw-print"><i
+ class="layui-icon layui-icon-print"></i>打印
+ </button>
</div>
</div>
- <table class="layui-table sw-table" id="shopreport-termreport-table" th:fragment="termreportTable">
+ <table class="layui-table sw-table" id="shopreport-termreport-table"
+ th:fragment="termreportTable">
<thead>
<tr>
- <th rowspan="3" style="text-align: center;min-width: 60px;">序号</th>
- <th rowspan="3" style="text-align: center;min-width: 100px;">食堂</th>
- <th colspan="6" style="text-align: center;">含餐补消费支付</th>
- <th colspan="3" style="text-align: center;">无餐补消费支付</th>
- <th rowspan="3" style="text-align: center;">消费金额</th>
- <th rowspan="3" style="text-align: center;">合计消费次数</th>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">终端编号</th>
+ <th colspan="8" style="text-align: center;min-width: 100px;">非折扣交易</th>
+ <th colspan="9" style="text-align: center;">折扣交易</th>
+ <th rowspan="4" style="text-align: center;">交易笔数<br/>合计</th>
+ <th rowspan="4" style="text-align: center;">交易金额<br/>合计</th>
</tr>
<tr>
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>份数</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>份数</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>份数</th>
- <!--<th rowspan="2" style="text-align: center;min-width: 60px;">正价金额<br/>小计</th>-->
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>份数</th>
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>份数</th>
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>份数</th>
-
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">非折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">餐补金额</th>
+ </tr>
+ <tr>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
</tr>
</thead>
+
<tbody id="shopreport-termreport-tbody" th:data-startdate="${searchBean.startdate}" th:data-enddate="${searchBean.enddate}" th:data-opercode="${opercode}">
<tr th:if="${null==showlist || showlist.size()==0}">
- <td colspan="13">无数据</td>
+ <td colspan="23">无数据</td>
</tr>
- <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}" >
-
+ <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}">
<tr>
- <td style="font-weight: bold;" th:text="${data.rownum}"></td>
- <td style="font-weight: bold;" th:text="${data.groupname}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.ibtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.ibtotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.iltotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.iltotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.idtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.idtotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.obtotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.obtotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.oltotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.oltotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.odtotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.odtotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.ibtotalamt+data.iltotalamt+data.idtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.ibtotalcnt+data.iltotalcnt+data.idtotalcnt+data.obtotalcnt+data.oltotalcnt+data.odtotalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${data.termid}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totnormalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totnormalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totdiscountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totdiscountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totfeeamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totamt,1,2)}"></td>
</tr>
+
</div>
</tbody>
</table>
@@ -107,45 +143,11 @@
<script>
- layui.use(['form', 'layer', 'element', 'laydate','treeSelect'], function () {
- var laydate = layui.laydate;
+ layui.use(['form', 'layer', 'element', 'laydate', 'treeSelect'], function () {
var layer = layui.layer;
var $ = layui.jquery;
var treeSelect = layui.treeSelect;
-
- treeSelect.render({
- elem: '#termreport-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.grouptype == 'branch'){
- layer.msg("请选择末级商户", {icon: 2, time:1500});
- $("#dailyreport-search-devgroup").val("");
- treeSelect.revokeNode('termreport-search-devgroup-filter');
- return false;
- }
- return true;
- },
- success: function (d) {
- let limit= $("#termreport-hidden-devgroupid").val();
- treeSelect.checkNode(
- 'termreport-search-devgroup-filter',
- limit);
- }
- });
+ var laydate = layui.laydate;
laydate.render({
@@ -154,31 +156,24 @@
trigger: 'click'
});
laydate.render({
- elem: '#termreport-search-enddate',
+ elem: '#shopreport-labercount-search-enddate',
max: $("#termreport-hidden-maxdate").val(),
trigger: 'click'
});
$('#termreport-search-btn').click(function () {
+ var shopid = $("#termreport-search-shopid").val();
+ var ruleid = $("#termreport-search-ruleid").val();
var startdate = $("#termreport-search-startdate").val();
var enddate = $("#termreport-search-enddate").val();
- var groupid = $("#termreport-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;
- }
-
$.ajax({
url: '[[@{/termreport/termreportlist}]]',
type: "POST",
data: {
- startdate: startdate,
- enddate: enddate,
- groupid: groupid,
+ shopid: shopid,
+ startdate:startdate,
+ enddate:enddate,
+ ruleid: ruleid,
_csrf: $("meta[name='_csrf_token']").attr("value")
},
success: function (data) {
@@ -195,9 +190,9 @@
$("#shopreport-termreport-export-excel").click(function(){
var startdate= $("#shopreport-termreport-tbody").attr("data-startdate");
var enddate= $("#shopreport-termreport-tbody").attr("data-enddate");
- var groupid = $("#termreport-search-devgroup").val();
-
- var dataUrl='[[@{/termreport/excelexport}]]?startdate='+startdate+'&enddate='+enddate+'&groupid='+groupid;
+ var shopid = $("#termreport-search-shopid").val();
+ var ruleid = $("#termreport-search-ruleid").val();
+ var dataUrl='[[@{/termreport/excelexport}]]?startdate='+startdate+'&enddate='+enddate+'&shopid='+shopid+'&ruleid='+ruleid;
var xhr = new XMLHttpRequest();
xhr.responseType = "blob"; //设置响应类型为blob类型
xhr.onload = function () {
@@ -230,13 +225,14 @@
$("#shopreport-termreport-print-table").click(function(){
var startdate= $("#shopreport-termreport-tbody").attr("data-startdate");
var enddate= $("#shopreport-termreport-tbody").attr("data-enddate");
- var groupid = $("#termreport-search-devgroup").val();
+ var shopid = $("#termreport-search-shopid").val();
+ var ruleid = $("#termreport-search-ruleid").val();
var opercode = $("#shopreport-termreport-tbody").attr("data-opercode");
- var url = '/termreport/print/printtermreport?startdate=' + startdate + '&enddate=' + enddate +'&groupid=' + groupid+ '&opercode=' + opercode;
+ var url = '/termreport/print/printtermreport?startdate=' + startdate + '&enddate=' + enddate +'&shopid='+shopid+'&ruleid='+ruleid+ '&opercode=' + opercode;
LODOP = getLodop();
- LODOP.PRINT_INIT("客户类别消费报表");
+ LODOP.PRINT_INIT("终端消费报表");
LODOP.SET_PRINT_PAGESIZE(2, 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'> ##</span></font>");
diff --git a/src/main/resources/templates/restaurant/termreport/print/printcusttypereport.html b/src/main/resources/templates/restaurant/termreport/print/printcusttypereport.html
deleted file mode 100644
index db3c0b2..0000000
--- a/src/main/resources/templates/restaurant/termreport/print/printcusttypereport.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
-<head>
- <meta charset="UTF-8">
- <title>人员类别消费表</title>
-
- <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
- <link rel="stylesheet" th:href="@{/static/custom/css/custom.css}"/>
-</head>
-<body>
-<div class="layui-card">
- <div class="layui-card-header" style="text-align: center;">
- <h1>人员类别消费表</h1>
- </div>
- <div class="layui-card-body">
- <div class="layui-form toolbar">
- <div style="float: left;padding-left: 3px;" th:text="${'区间:'+period}"></div>
- <div style="float: right;" th:text="'单位:元'"></div>
- </div>
- <table class="layui-table sw-table sw-print">
- <thead>
- <tr>
- <th rowspan="3" style="text-align: center;min-width: 60px;">序号<br/> <br/> </th>
- <th rowspan="3" style="text-align: center;min-width: 160px;">食堂<br/> <br/> </th>
- <th colspan="6" style="text-align: center;">含餐补消费支付</th>
- <th colspan="6" style="text-align: center;">无餐补消费支付</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">合计<br/>消费<br/>金额</th>
- <th rowspan="3" style="text-align: center;min-width: 60px;">合计<br/>消费<br/>次数</th>
- </tr>
- <tr>
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>份数</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>份数</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>金额</th>
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>份数</th>
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">早餐<br/>份数</th>
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">午餐<br/>份数</th>
- <!-- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>金额</th>-->
- <th rowspan="2" style="text-align: center;min-width: 60px;">晚餐<br/>份数</th>
-
- </tr>
- </thead>
- <tbody>
- <tr th:if="${null==showlist || showlist.size()==0}">
- <td colspan="16">无数据</td>
- </tr>
- <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}" >
-
- <tr>
- <td style="font-weight: bold;" th:text="${data.rownum}"></td>
- <td style="font-weight: bold;" th:text="${data.groupname}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.ibtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.ibtotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.iltotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.iltotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.idtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.idtotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.obtotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.obtotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.oltotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.oltotalcnt}"></td>
- <!-- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.odtotalamt,1,2)}"></td>-->
- <td style="font-weight: bold;" th:text="${data.odtotalcnt}"></td>
- <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.ibtotalamt+data.iltotalamt+data.idtotalamt,1,2)}"></td>
- <td style="font-weight: bold;" th:text="${data.ibtotalcnt+data.iltotalcnt+data.idtotalcnt+data.obtotalcnt+data.oltotalcnt+data.odtotalcnt}"></td>
-
- </tr>
- </div>
- </tbody>
- </table>
- <div class="layui-form toolbar">
- <div style="float: left;padding-left: 3px;" th:text="${'制表人:'+opername+' '+ printdatetime}"></div>
- </div>
- </div>
- <div class="layui-card-body" style="margin-top: 25px;">
- <table class="sw-print-sign">
- <tr>
- <td width="50%">大理州公安局警务保障处审核盖章:</td>
- <td width="50%">苍山饭店审核盖章:</td>
- </tr>
- <tr>
- <td>经办人:</td>
- <td>审核人:</td>
- </tr>
- <tr>
- <td>审核人:</td>
-
- </tr>
- <tr>
- <td colspan="2"> </td>
- </tr>
- <tr>
- <td colspan="2"> </td>
- </tr>
- <!-- <tr>-->
- <!-- <td>市民卡公司审核盖章:</td>-->
- <!-- <td>建桥园审核盖章:</td>-->
- <!-- </tr>-->
- <!-- <tr>-->
- <!-- <td>审核人:</td>-->
- <!-- <td>审核人:</td>-->
- <!-- </tr>-->
- </table>
- </div>
-</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/termreport/print/report.html b/src/main/resources/templates/restaurant/termreport/print/report.html
new file mode 100644
index 0000000..7184207
--- /dev/null
+++ b/src/main/resources/templates/restaurant/termreport/print/report.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<head>
+ <meta charset="UTF-8">
+ <title>终端消费报表</title>
+
+ <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}"/>
+ <link rel="stylesheet" th:href="@{/static/custom/css/custom.css}"/>
+</head>
+<body>
+<div class="layui-card">
+ <div class="layui-card-header" style="text-align: center;">
+ <h1>终端消费报表</h1>
+ </div>
+ <div class="layui-card-body">
+ <div class="layui-form toolbar">
+ <div style="float: left;padding-left: 3px;" th:text="${'区间:'+period}"></div>
+ <div style="float: right;" th:text="'单位:元'"></div>
+ </div>
+ <table class="layui-table sw-table sw-print">
+ <thead>
+ <tr>
+ <th rowspan="4" style="text-align: center;min-width: 60px;">终端编号</th>
+ <th colspan="8" style="text-align: center;min-width: 100px;">非折扣交易</th>
+ <th colspan="9" style="text-align: center;">折扣交易</th>
+ <th rowspan="4" style="text-align: center;">交易笔数<br/>合计</th>
+ <th rowspan="4" style="text-align: center;">交易金额<br/>合计</th>
+ </tr>
+ <tr>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">非折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">早餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">午餐累计<br/>交易金额</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易笔数</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">晚餐累计<br/>交易金额</th>
+ <th colspan="2" style="text-align: center;min-width: 60px;">折扣交易小计</th>
+ <th rowspan="3" style="text-align: center;min-width: 60px;">餐补金额</th>
+ </tr>
+ <tr>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易笔数<br/>小计</th>
+ <th style="text-align: center;min-width: 60px;">交易金额<br/>小计</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr th:if="${null==showlist || showlist.size()==0}">
+ <td colspan="23">无数据</td>
+ </tr>
+ <div th:remove="tag" th:if="${null!=showlist && showlist.size()>0}" th:each="data:${showlist}">
+ <tr>
+ <td style="font-weight: bold;" th:text="${data.termid}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_normalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_normalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totnormalcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totnormalamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.b_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.b_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.l_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.l_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.d_discountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.d_discountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totdiscountcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totdiscountamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totfeeamt,1,2)}"></td>
+ <td style="font-weight: bold;" th:text="${data.totcnt}"></td>
+ <td style="font-weight: bold;" th:text="${#numbers.formatDecimal(data.totamt,1,2)}"></td>
+ </tr>
+ </div>
+ </tbody>
+ </table>
+ <div class="layui-form toolbar">
+ <div style="float: left;padding-left: 3px;"
+ th:text="${'制表人:'+opername+' '+ printdatetime}"></div>
+ </div>
+ </div>
+ <div class="layui-card-body" style="margin-top: 25px;">
+ <table class="sw-print-sign">
+ <tr>
+ <td width="50%">大理州公安局警务保障处审核盖章:</td>
+ <td width="50%">苍山饭店审核盖章:</td>
+ </tr>
+ <tr>
+ <td>经办人:</td>
+ <td>审核人:</td>
+ </tr>
+ <tr>
+ <td>审核人:</td>
+
+ </tr>
+ </table>
+ </div>
+</div>
+</body>
+</html>
\ No newline at end of file