餐补规则
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountRuleShowBean.java b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountRuleShowBean.java
new file mode 100644
index 0000000..4cac7ff
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/bean/DiscountRuleShowBean.java
@@ -0,0 +1,76 @@
+package com.supwisdom.dlpay.restaurant.bean;
+
+public class DiscountRuleShowBean {
+ private Integer ruleid;
+ private String rulename;
+ private String timeperiod;
+ private String ruletype;
+ private Integer limitcnt;
+ private Double amount;
+ private String status;
+ private String remark;
+
+ public Integer getRuleid() {
+ return ruleid;
+ }
+
+ public void setRuleid(Integer ruleid) {
+ this.ruleid = ruleid;
+ }
+
+ public String getRulename() {
+ return rulename;
+ }
+
+ public void setRulename(String rulename) {
+ this.rulename = rulename;
+ }
+
+ public String getTimeperiod() {
+ return timeperiod;
+ }
+
+ public void setTimeperiod(String timeperiod) {
+ this.timeperiod = timeperiod;
+ }
+
+ public String getRuletype() {
+ return ruletype;
+ }
+
+ public void setRuletype(String ruletype) {
+ this.ruletype = ruletype;
+ }
+
+ public Integer getLimitcnt() {
+ return limitcnt;
+ }
+
+ public void setLimitcnt(Integer limitcnt) {
+ this.limitcnt = limitcnt;
+ }
+
+ public Double getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Double amount) {
+ this.amount = amount;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
new file mode 100644
index 0000000..f9026f1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceDiscountRuleController.java
@@ -0,0 +1,137 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.restaurant.bean.DiscountRuleShowBean;
+import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+public class DeviceDiscountRuleController {
+ @Autowired
+ private DeviceDiscountRuleService deviceDiscountRuleService;
+
+ @GetMapping("/discountrule/index")
+ public String DiscountRuleView() {
+ return "restaurant/discountrule/rule";
+ }
+
+ @GetMapping("/discountrule/rulelist")
+ @PreAuthorize("hasPermission('/discountrule/index','')")
+ @ResponseBody
+ public PageResult<DiscountRuleShowBean> searchDiscountRules(@RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize,
+ @RequestParam(value = "rulename", required = false) String rulename,
+ @RequestParam(value = "ruletype", required = false) String ruletype) {
+ try {
+ if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+ if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+ return deviceDiscountRuleService.getDiscountRuleInfos(rulename, ruletype, pageNo, pageSize);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+ @PostMapping("/discountrule/deleterule")
+ @PreAuthorize("hasPermission('/discountrule/deleterule','')")
+ @ResponseBody
+ public JsonResult deleteDiscountRule(@RequestParam("ruleid") Integer ruleid) {
+ try {
+ if (null == ruleid) {
+ return JsonResult.error("参数传递错误");
+ }
+ if (deviceDiscountRuleService.deleteDiscountRule(ruleid)) {
+ return JsonResult.ok("删除成功!");
+ } else {
+ return JsonResult.error("删除失败!");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统处理异常").put("exception", e);
+ }
+ }
+
+ @GetMapping("/discountrule/load4addrule")
+ @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
+ public String load4addDiscountRule() {
+ return "restaurant/discountrule/ruleform";
+ }
+
+ @GetMapping("/discountrule/checkrulename")
+ @PreAuthorize("hasPermission('/discountrule/load4addrule','')")
+ @ResponseBody
+ public JsonResult checkRulename(@RequestParam("rulename") String rulename,
+ @RequestParam(value = "ruleid", required = false) Integer ruleid) {
+ try {
+ if (StringUtil.isEmpty(rulename)) {
+ return JsonResult.error("餐补规则名称不能为空");
+ }
+ if (deviceDiscountRuleService.checkDiscountRulenameExist(rulename.trim(), ruleid)) {
+ return JsonResult.error("餐补规则名称已存在");
+ } else {
+ return JsonResult.ok("success");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统处理异常").put("exception", e);
+ }
+ }
+
+ @PostMapping("/discountrule/addrule")
+ @PreAuthorize("hasPermission('/discountrule/addrule','')")
+ @ResponseBody
+ public JsonResult addDiscountRule() {
+ try {
+
+ return JsonResult.error("系统处理异常").put("exception", "");
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统处理异常").put("exception", e);
+ }
+ }
+
+ /**
+ * ====================================================
+ * 餐补规则审核
+ * ====================================================
+ */
+ @GetMapping("/discountrule/check")
+ public String checkDiscountRulesView() {
+ return "restaurant/discountrule/rulecheck";
+ }
+
+ @GetMapping("/discountrule/checklist")
+ @PreAuthorize("hasPermission('/discountrule/check','')")
+ @ResponseBody
+ public PageResult<DiscountRuleShowBean> searchCheckDiscountRules(@RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize,
+ @RequestParam(value = "status", required = false) String status) {
+ try {
+ if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+ if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+ return deviceDiscountRuleService.getCheckDiscountRuleInfos(status, pageNo, pageSize);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+
+ /**
+ * ====================================================
+ * 餐补规则绑定设备
+ * ====================================================
+ */
+ @GetMapping("/discountrule/devbind")
+ public String bindDiscountRuleView() {
+ return "restaurant/discountrule/ruledevbind";
+ }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDevbindDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDevbindDao.java
new file mode 100644
index 0000000..f200457
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountDevbindDao.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDiscountDevbind;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+public interface DiscountDevbindDao extends JpaRepository<TDiscountDevbind, String> {
+
+ @Query("select count(t.id) from TDiscountDevbind t where t.ruleid=?1 ")
+ long getBindcntByRuleid(int ruleid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java
new file mode 100644
index 0000000..9e2150e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DiscountRuleDao.java
@@ -0,0 +1,16 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDiscountRule;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
+
+public interface DiscountRuleDao extends JpaRepository<TDiscountRule, Integer>, JpaSpecificationExecutor<TDiscountRule> {
+ TDiscountRule findByRuleid(int ruleid);
+
+ @Query("select count(t.ruleid) from TDiscountRule t where t.rulename=?1 ")
+ long checkRulenameExists(String rulename);
+
+ @Query("select count(t.ruleid) from TDiscountRule t where t.rulename=?1 and t.ruleid<>?2 ")
+ long checkRulenameExists(String rulename, int ruleid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountDevbind.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountDevbind.java
new file mode 100644
index 0000000..617e1ce
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountDevbind.java
@@ -0,0 +1,68 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_DISCOUNT_DEVBIND",
+ indexes = {@Index(name = "discount_devbind_uk", unique = true, columnList = "deviceid,ruleid")})
+public class TDiscountDevbind {
+ @Id
+ @GenericGenerator(name = "idGenerator", strategy = "uuid")
+ @GeneratedValue(generator = "idGenerator")
+ @Column(name = "ID", nullable = false, length = 32)
+ private String id;
+
+ @Column(name = "DEVICEID", nullable = false, precision = 9)
+ private Integer deviceid;
+
+ @Column(name = "RULEID", nullable = false, precision = 9)
+ private Integer ruleid;
+
+ @Column(name = "CREATE_OPERID", length = 32)
+ private String createOperid;
+
+ @Column(name = "CREATETIME", length = 14)
+ private String createtime;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public Integer getDeviceid() {
+ return deviceid;
+ }
+
+ public void setDeviceid(Integer deviceid) {
+ this.deviceid = deviceid;
+ }
+
+ public Integer getRuleid() {
+ return ruleid;
+ }
+
+ public void setRuleid(Integer ruleid) {
+ this.ruleid = ruleid;
+ }
+
+ public String getCreateOperid() {
+ return createOperid;
+ }
+
+ public void setCreateOperid(String createOperid) {
+ this.createOperid = createOperid;
+ }
+
+ public String getCreatetime() {
+ return createtime;
+ }
+
+ public void setCreatetime(String createtime) {
+ this.createtime = createtime;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountRule.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountRule.java
new file mode 100644
index 0000000..9cdd8b9
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDiscountRule.java
@@ -0,0 +1,166 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_DISCOUNT_RULE")
+public class TDiscountRule {
+ @Id
+ @SequenceGenerator(name = "discount_ruleid", sequenceName = "SEQ_DISCOUNTRULEID", allocationSize = 1)
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "discount_ruleid")
+ @Column(name="RULEID", nullable = false, precision = 9)
+ private Integer ruleid;
+
+ @Column(name = "rulename", nullable = false, length = 200)
+ private String rulename;
+
+ @Column(name = "STARTTIME", nullable = false, length = 4)
+ private String starttime;
+
+ @Column(name = "ENDTIME", nullable = false, length = 4)
+ private String endtime;
+
+ @Column(name = "RULETYPE", nullable = false, length = 10)
+ private String ruletype;
+
+ @Column(name = "AMOUNT", nullable = false, precision = 9, scale = 2)
+ private Double amount;
+
+ @Column(name = "LIMITCNT", nullable = false, precision = 9)
+ private Integer limitcnt;
+
+ @Column(name = "STATUS", nullable = false, length = 10)
+ private String status;
+
+ @Version
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name="VERNO", nullable = false, precision = 9)
+ private Integer verno;
+
+ @Column(name = "CREATE_OPERID", length = 32)
+ private String createOperid;
+
+ @Column(name = "CHECK_OPERID", length = 32)
+ private String checkOperid;
+
+ @Column(name = "CREATETIME", length = 14)
+ private String createtime;
+
+ @Column(name = "LASTSAVED", length = 14)
+ private String lastsaved;
+
+ @Column(name = "REMARK", length = 600)
+ private String remark;
+
+ public Integer getRuleid() {
+ return ruleid;
+ }
+
+ public void setRuleid(Integer ruleid) {
+ this.ruleid = ruleid;
+ }
+
+ public String getRulename() {
+ return rulename;
+ }
+
+ public void setRulename(String rulename) {
+ this.rulename = rulename;
+ }
+
+ public String getStarttime() {
+ return starttime;
+ }
+
+ public void setStarttime(String starttime) {
+ this.starttime = starttime;
+ }
+
+ public String getEndtime() {
+ return endtime;
+ }
+
+ public void setEndtime(String endtime) {
+ this.endtime = endtime;
+ }
+
+ public String getRuletype() {
+ return ruletype;
+ }
+
+ public void setRuletype(String ruletype) {
+ this.ruletype = ruletype;
+ }
+
+ public Double getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Double amount) {
+ this.amount = amount;
+ }
+
+ public Integer getLimitcnt() {
+ return limitcnt;
+ }
+
+ public void setLimitcnt(Integer limitcnt) {
+ this.limitcnt = limitcnt;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getCreateOperid() {
+ return createOperid;
+ }
+
+ public void setCreateOperid(String createOperid) {
+ this.createOperid = createOperid;
+ }
+
+ public String getCheckOperid() {
+ return checkOperid;
+ }
+
+ public void setCheckOperid(String checkOperid) {
+ this.checkOperid = checkOperid;
+ }
+
+ public String getCreatetime() {
+ return createtime;
+ }
+
+ public void setCreatetime(String createtime) {
+ this.createtime = createtime;
+ }
+
+ public String getLastsaved() {
+ return lastsaved;
+ }
+
+ public void setLastsaved(String lastsaved) {
+ this.lastsaved = lastsaved;
+ }
+
+ public Integer getVerno() {
+ return verno;
+ }
+
+ public void setVerno(Integer verno) {
+ this.verno = verno;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
new file mode 100644
index 0000000..363f1a6
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceDiscountRuleService.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.restaurant.service;
+
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.restaurant.bean.DiscountRuleShowBean;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface DeviceDiscountRuleService {
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ PageResult<DiscountRuleShowBean> getDiscountRuleInfos(String rulename, String ruletype, int pageNo, int pageSize);
+
+ @Transactional(rollbackFor = Exception.class)
+ boolean deleteDiscountRule(int ruleid)throws WebCheckException;
+
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ boolean checkDiscountRulenameExist(String rulename,Integer ruleid);
+
+
+
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ PageResult<DiscountRuleShowBean> getCheckDiscountRuleInfos(String status, int pageNo, int pageSize);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
new file mode 100644
index 0000000..78321dd
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceDiscountRuleServiceImpl.java
@@ -0,0 +1,124 @@
+package com.supwisdom.dlpay.restaurant.service.impl;
+
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.restaurant.bean.DiscountRuleShowBean;
+import com.supwisdom.dlpay.restaurant.dao.DiscountDevbindDao;
+import com.supwisdom.dlpay.restaurant.dao.DiscountRuleDao;
+import com.supwisdom.dlpay.restaurant.domain.TDiscountRule;
+import com.supwisdom.dlpay.restaurant.service.DeviceDiscountRuleService;
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class DeviceDiscountRuleServiceImpl implements DeviceDiscountRuleService {
+ @Autowired
+ private DiscountRuleDao discountRuleDao;
+ @Autowired
+ private DiscountDevbindDao discountDevbindDao;
+ @Autowired
+ private SystemUtilService systemUtilService;
+
+
+ @PersistenceContext
+ private EntityManager entityManager;
+
+ private PageResult<DiscountRuleShowBean> getDiscountRuleBySearch(String rulename, String ruletype, String status, Pageable pageable) {
+ Page<TDiscountRule> page = discountRuleDao.findAll(new Specification<TDiscountRule>() {
+ @Override
+ public Predicate toPredicate(Root<TDiscountRule> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+ List<Predicate> predicates = new ArrayList<>();
+ if (!StringUtil.isEmpty(rulename)) {
+ predicates.add(criteriaBuilder.like(root.get("rulename").as(String.class), "%" + rulename.trim() + "%"));
+ }
+ if (!StringUtil.isEmpty(ruletype)) {
+ predicates.add(criteriaBuilder.equal(root.get("ruletype").as(String.class), ruletype));
+
+ }
+ if (!StringUtil.isEmpty(status)) {
+ predicates.add(criteriaBuilder.equal(root.get("status").as(String.class), status));
+ }
+ return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+ }
+ }, pageable);
+ List<DiscountRuleShowBean> result = new ArrayList<>(0);
+ if (null != page && page.getTotalElements() > 0) {
+ for (TDiscountRule rule : page.getContent()) {
+ DiscountRuleShowBean bean = new DiscountRuleShowBean();
+ bean.setRuleid(rule.getRuleid());
+ bean.setRulename(rule.getRulename());
+ bean.setRuletype(rule.getRuletype());
+ bean.setAmount(rule.getAmount());
+ bean.setStatus(rule.getStatus());
+ bean.setLimitcnt(rule.getLimitcnt());
+ bean.setRemark(rule.getRemark());
+ String period = rule.getStarttime().substring(0, 2) + ":" + rule.getStarttime().substring(2) + "~" + rule.getEndtime().substring(0, 2) + ":" + rule.getEndtime().substring(2);
+ bean.setTimeperiod(period);
+ result.add(bean);
+ }
+ }
+ return new PageResult<>(page.getTotalElements(), result);
+ }
+
+ @Override
+ public PageResult<DiscountRuleShowBean> getDiscountRuleInfos(String rulename, String ruletype, int pageNo, int pageSize) {
+ Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by("ruleid"));
+ return getDiscountRuleBySearch(rulename, ruletype, null, pageable);
+ }
+
+ @Override
+ public boolean deleteDiscountRule(int ruleid) throws WebCheckException {
+ TDiscountRule rule = discountRuleDao.findByRuleid(ruleid);
+ if (null == rule) {
+ throw new WebCheckException("餐补规则不存在!");
+ } else if (RestaurantConstant.STATUS_DISCOUNTRULE_CLOSED.equals(rule.getStatus())) {
+ throw new WebCheckException("餐补规则已经失效!");
+ }
+ if (discountDevbindDao.getBindcntByRuleid(ruleid) > 0) {
+ throw new WebCheckException("有设备正在使用该餐补规则,请先解绑设备");
+ }
+
+ rule.setStatus(RestaurantConstant.STATUS_DISCOUNTRULE_CLOSED);
+ rule.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+ discountRuleDao.save(rule);
+ return true;
+ }
+
+ @Override
+ public boolean checkDiscountRulenameExist(String rulename, Integer ruleid) {
+ if (null == ruleid) {
+ if (discountRuleDao.checkRulenameExists(rulename) > 0) {
+ return true;
+ }
+ } else {
+ if (discountRuleDao.checkRulenameExists(rulename, ruleid) > 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public PageResult<DiscountRuleShowBean> getCheckDiscountRuleInfos(String status, int pageNo, int pageSize) {
+ Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "createtime"));
+ return getDiscountRuleBySearch(null, null, status, pageable);
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
new file mode 100644
index 0000000..c0f7343
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -0,0 +1,12 @@
+package com.supwisdom.dlpay.restaurant.util;
+
+public class RestaurantConstant {
+ public static final String STATUS_DISCOUNTRULE_UNCHECK = "uncheck"; //待审核
+ public static final String STATUS_DISCOUNTRULE_NORMAL = "normal"; //有效
+ public static final String STATUS_DISCOUNTRULE_CLOSED = "closed"; //无效
+ public static final String STATUS_DISCOUNTRULE_REJECT = "reject"; //驳回
+
+ public static final String RULETYPE_QUOTA = "quota"; //定额
+ public static final String RULETYPE_REDUCTION = "reduction"; //减免
+
+}
diff --git a/src/main/resources/templates/restaurant/discountrule/rule.html b/src/main/resources/templates/restaurant/discountrule/rule.html
new file mode 100644
index 0000000..1cf7a9a
--- /dev/null
+++ b/src/main/resources/templates/restaurant/discountrule/rule.html
@@ -0,0 +1,147 @@
+<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 toolbar">
+ 搜索:
+ <select id="search-discountrule-ruletype">
+ <option value=""> 选择餐补类型 </option>
+ <option value="quota"> 定额 </option>
+ <option value="reduction"> 减免 </option>
+ </select> 
+ <input id="search-discountrule-rulename" class="layui-input search-input" maxlength="20" type="text" placeholder="输入名称查询"/> 
+ <button id="btn-search-discountrule" class="layui-btn icon-btn" data-type="search"><i class="layui-icon"></i>搜索
+ </button>
+ <button id="btn-discountrule-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>新 增</button>
+ </div>
+ <table class="layui-table" id="discountruleTable" lay-filter="discountruleTable-filter"></table>
+ </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="discountrule-table-bar">
+ <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit">修改</a>
+</script>
+
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+
+ form.render("select");
+ // 渲染表格
+ table.render({
+ elem: '#discountruleTable',
+ url: '[[@{/discountrule/rulelist}]]',
+ page: true,
+ cols: [
+ [
+ {field: 'rulename', title: '餐补名称', align: 'center', fixed: 'left' },
+ {field: 'timeperiod', title: '优惠时间段', align: 'center'},
+ {
+ field: 'ruletype', title: '餐补类型', align: 'center', width: 120, sort: true, templet: function (d) {
+ if ('quota' == d.ruletype) {
+ return '定额';
+ } else if ('reduction' == d.ruletype) {
+ return '减免';
+ } else {
+ return d.ruletype;
+ }
+ }
+ },
+ {
+ field: 'amount', title: '金额(元)', align: 'center', sort: true, templet: function (d) {
+ return parseFloat(d.amount).toFixed(2);
+ }
+ },
+ {field: 'limitcnt', title: '可使用次数/人', align: 'center'},
+ {
+ field: 'status', title: '状态', align: 'center', width: 120, sort: true, templet: function (d) {
+ if ('uncheck' == d.status) {
+ return '<span class="layui-badge layui-bg-orange">待审核</span>'
+ } else if ('normal' == d.status) {
+ return '<span class="layui-badge layui-bg-green">有效</span>';
+ } else if ('closed' == d.status) {
+ return '<span class="layui-badge layui-bg-gray">无效</span>';
+ } else if ('reject' == d.status) {
+ return '<span class="layui-badge">驳回</span>';
+ } else {
+ return d.status;
+ }
+ }
+ },
+ {align: 'center', title: '操作', width: 250, toolbar: '#discountrule-table-bar', fixed: 'right'}
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#btn-search-discountrule').click(function () {
+ var ruletype = $("#search-discountrule-ruletype").val();
+ var rulename = $("#search-discountrule-rulename").val();
+ table.reload('discountruleTable', {where: {ruletype: ruletype, rulename: rulename}, page: {curr: 1}});
+ });
+
+ $('#btn-discountrule-add').click(function () {
+ admin.popupCenter({
+ title: "新增餐补规则",
+ path: '[[@{/discountrule/load4addrule}]]',
+ area: '500px',
+ finish: function () {
+ table.reload('discountruleTable');
+ }
+ });
+ });
+
+ //监听单元格
+ table.on('tool(discountruleTable-filter)', function (obj) {
+ var data = obj.data;
+
+ if('del' == obj.event){
+ layer.confirm('确定要删除设备参数组【'+data.groupname+'】?', {
+ btn: ['确定', '取消']
+ },function(){
+ layer.closeAll('dialog');
+ layer.load(2);
+ admin.go('[[@{/device/deletedevpara}]]', {
+ groupid: data.groupid,
+ _csrf: $("meta[name='_csrf_token']").attr("value")
+ }, function (data) {
+ console.log(data.code);
+ layer.closeAll('loading');
+ if (data.code == 200) {
+ layer.msg(data.msg, {icon: 1});
+ } else if (data.code == 401) {
+ layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ layer.msg(data.msg, {icon: 2});
+ }
+ table.reload('devparagroupTable');
+ }, function (err) {
+ admin.errorBack(err)
+ });
+ });
+ }else if('edit' == obj.event){
+ admin.popupCenter({
+ title: "修改参数组【" + data.groupid + "_" + data.groupname + "】",
+ path: '[[@{/device/load4editdevpara}]]?groupid=' + data.groupid,
+ area: '1200px',
+ finish: function () {
+ table.reload('devparagroupTable');
+ }
+ });
+ }
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/discountrule/rulecheck.html b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
new file mode 100644
index 0000000..71121d2
--- /dev/null
+++ b/src/main/resources/templates/restaurant/discountrule/rulecheck.html
@@ -0,0 +1,104 @@
+<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 toolbar">
+ 搜索:
+ <select id="search-discountrule-check-status">
+ <option value=""> 选择餐补规则状态</option>
+ <option value="uncheck" selected> 待审核</option>
+ <option value="normal"> 有效</option>
+ <option value="closed"> 无效</option>
+ <option value="reject"> 驳回</option>
+ </select> 
+ <button id="btn-search-discountrule-check" class="layui-btn icon-btn" data-type="search"><i
+ class="layui-icon"></i>搜索
+ </button>
+ </div>
+ <table class="layui-table" id="discountrulecheckTable" lay-filter="discountrulecheckTable-filter"></table>
+ </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="discountrule-check-table-bar">
+ <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit">修改</a>
+</script>
+
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+
+ form.render("select");
+ // 渲染表格
+ table.render({
+ elem: '#discountrulecheckTable',
+ url: '[[@{/discountrule/checklist}]]',
+ page: true,
+ cols: [
+ [
+ {field: 'rulename', title: '餐补名称', align: 'center', fixed: 'left'},
+ {field: 'timeperiod', title: '优惠时间段', align: 'center'},
+ {
+ field: 'ruletype',
+ title: '餐补类型',
+ align: 'center',
+ width: 120,
+ sort: true,
+ templet: function (d) {
+ if ('quota' == d.ruletype) {
+ return '定额';
+ } else if ('reduction' == d.ruletype) {
+ return '减免';
+ } else {
+ return d.ruletype;
+ }
+ }
+ },
+ {
+ field: 'amount', title: '金额(元)', align: 'center', sort: true, templet: function (d) {
+ return parseFloat(d.amount).toFixed(2);
+ }
+ },
+ {field: 'limitcnt', title: '可使用次数/人', align: 'center'},
+ {
+ field: 'status', title: '状态', align: 'center', width: 120, sort: true, templet: function (d) {
+ if ('uncheck' == d.status) {
+ return '<span class="layui-badge layui-bg-orange">待审核</span>'
+ } else if ('normal' == d.status) {
+ return '<span class="layui-badge layui-bg-green">有效</span>';
+ } else if ('closed' == d.status) {
+ return '<span class="layui-badge layui-bg-gray">无效</span>';
+ } else if ('reject' == d.status) {
+ return '<span class="layui-badge">驳回</span>';
+ } else {
+ return d.status;
+ }
+ }
+ },
+ {align: 'center', title: '操作', width: 250, toolbar: '#discountrule-check-table-bar', fixed: 'right'}
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#btn-search-discountrule-check').click(function () {
+ var state = $("#search-discountrule-check-status").val();
+ table.reload('discountrulecheckTable', {where: {status: state}, page: {curr: 1}});
+ });
+
+ //监听单元格
+ table.on('tool(discountrulecheckTable-filter)', function (obj) {
+ var data = obj.data;
+
+ });
+
+ });
+</script>
\ No newline at end of file
diff --git a/src/main/resources/templates/restaurant/discountrule/ruledevbind.html b/src/main/resources/templates/restaurant/discountrule/ruledevbind.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/main/resources/templates/restaurant/discountrule/ruledevbind.html
diff --git a/src/main/resources/templates/restaurant/discountrule/ruleform.html b/src/main/resources/templates/restaurant/discountrule/ruleform.html
new file mode 100644
index 0000000..aaf81ba
--- /dev/null
+++ b/src/main/resources/templates/restaurant/discountrule/ruleform.html
@@ -0,0 +1,137 @@
+<form id="discountrule-form" lay-filter="discountrule-form-filter" class="layui-form model-form" style="padding: 30px 25px 10px 25px;">
+ <input name="ruleid" id="form-discountrule-ruleid" type="hidden"/>
+ <div class="layui-form-item">
+ <label class="layui-form-label">餐补类型</label>
+ <div class="layui-input-block">
+ <input type="radio" name="ruletype" id="form-discountrule-ruletype-quota" lay-filter="discountrule-ruletype-filter" value="quota" title="定额" checked/>
+ <input type="radio" name="ruletype" id="form-discountrule-ruletype-reduction" lay-filter="discountrule-ruletype-filter" value="reduction" title="减免"/>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">餐补名称</label>
+ <div class="layui-input-block">
+ <input type="text" class="layui-input" name="rulename" id="form-discountrule-rulename" maxlength="20" style="width: 90%;"
+ autocomplete="off" lay-verify="required|Rulename"/>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">可用时间段</label>
+ <div class="layui-input-inline" style="width: 100px;">
+ <input type="text" name="starttime" placeholder="9:00" id="form-discountrule-starttime" autocomplete="off" maxlength="5"
+ class="layui-input" lay-verify="required"/>
+ </div>
+ <div class="layui-form-mid">-</div>
+ <div class="layui-input-inline" style="width: 100px;">
+ <input type="text" name="endtime" placeholder="12:00" id="form-discountrule-endtime" autocomplete="off" maxlength="5"
+ class="layui-input" lay-verify="required"/>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label" id="form-discountrule-amount-text">固定金额(元)</label>
+ <div class="layui-input-block">
+ <input type="text" name="amount" id="form-discountrule-amount" maxlength="9" autocomplete="off" style="width: 90%;"
+ class="layui-input" lay-verify="required|Amount"/>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">可以次数/人</label>
+ <div class="layui-input-block">
+ <input type="text" name="limitcnt" id="form-discountrule-limitcnt" maxlength="9" autocomplete="off" style="width: 90%;"
+ class="layui-input" lay-verify="required|number"/>
+ </div>
+ </div>
+
+
+ <div class="layui-form-item">
+ <label class="layui-form-label">餐补对象</label>
+ <div class="layui-input-inline" style="width: auto;">
+ <button type="button" class="layui-btn" id="form-discountrule-records">
+ <i class="layui-icon"></i>上传名单
+ </button>
+ </div>
+ <div class="layui-input-inline" style="padding-top: 15px;">
+ <a style="color: blue;text-decoration: none;cursor: pointer;">下载名单模板</a>
+ </div>
+ </div>
+
+ <div class="layui-form-item model-form-footer">
+ <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
+ <button class="layui-btn" lay-filter="discountrule-form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form', 'laydate', 'upload'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ var laydate = layui.laydate;
+ var upload = layui.upload;
+
+ laydate.render({
+ elem: '#form-discountrule-starttime',
+ type: 'time',
+ format: 'HH:mm'
+ });
+ laydate.render({
+ elem: '#form-discountrule-endtime',
+ type: 'time',
+ format: 'HH:mm'
+ });
+
+ // 表单提交事件
+ form.render("radio");
+ form.verify({
+ "Amount": function (e) {
+ if (null != e && e.length > 0 && !(/^\d+(\.)?(\.\d{1,2})?$/.test(e))) {
+ return "请正确输入金额(单位:元,最多两位小数)";
+ }
+ },
+ "Rulename": function (e) {
+ if(""==e|| ""==$.trim(e)){
+ return "餐补名称不能为空";
+ }
+
+ var msg = "";
+ $.ajax({
+ type: "GET",
+ url: '[[@{/discountrule/checkrulename}]]',
+ async: false, //同步提交。不设置则默认异步,异步的话,最后执行ajax
+ data: {
+ rulename: e,
+ ruleid: $("#form-discountrule-ruleid").val()
+ },
+ success: function (result) {
+ if (result.code != 200) {
+ msg = result.msg;
+ }
+ },
+ error: function (error) {
+ msg = "请求服务器校验账号失败";
+ }
+ });
+ if (msg != "") {
+ return msg;
+ }
+ }
+ });
+ form.on('radio(discountrule-ruletype-filter)', function (data) {
+ if ('reduction' == data.value) {
+ $("#form-discountrule-amount-text").text("减免金额(元)");
+ } else {
+ $("#form-discountrule-amount-text").text("固定金额(元)");
+ }
+ });
+
+
+
+
+ form.on('submit(discountrule-form-submit)', function (data) {
+ var vdata = data.field;
+ });
+ });
+</script>
\ No newline at end of file