设备参数组
diff --git a/src/main/java/com/supwisdom/dlpay/exception/WebCheckException.java b/src/main/java/com/supwisdom/dlpay/exception/WebCheckException.java
new file mode 100644
index 0000000..d0b3b6c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/exception/WebCheckException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.exception;
+
+public class WebCheckException extends Exception {
+ public WebCheckException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
index a6b733e..80097c6 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/DateUtil.java
@@ -239,7 +239,7 @@
try {
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(pattern);
Date d = sdf.parse(datetime);
- return true;
+ return datetime.trim().equals(sdf.format(d));
} catch (Exception e) {
}
return false;
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceParamController.java b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceParamController.java
new file mode 100644
index 0000000..7ffc9b4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/controller/DeviceParamController.java
@@ -0,0 +1,115 @@
+package com.supwisdom.dlpay.restaurant.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.util.NumberUtil;
+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.domain.TDevparaGroup;
+import com.supwisdom.dlpay.restaurant.service.DeviceParamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+@Controller
+public class DeviceParamController {
+ @Autowired
+ private DeviceParamService deviceParamService;
+
+ @GetMapping("/device/devpara")
+ public String devparaView() {
+ return "restaurant/devpara/devpara";
+ }
+
+ @GetMapping("/device/devparalist")
+ @PreAuthorize("hasPermission('/device/devpara','')")
+ @ResponseBody
+ public PageResult<TDevparaGroup> getDataList(@RequestParam("page") Integer pageNo,
+ @RequestParam("limit") Integer pageSize,
+ @RequestParam(value = "groupname", required = false) String groupname) {
+ try {
+ if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+ if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+ return deviceParamService.getDevparaGroupPage(groupname, pageNo, pageSize);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return new PageResult<>(99, "系统查询错误");
+ }
+ }
+
+ @PostMapping("/device/deletedevpara")
+ @PreAuthorize("hasPermission('/device/deletedevpara','')")
+ @ResponseBody
+ public JsonResult deleteDevpara(@RequestParam("groupid") Integer groupid) {
+ if (null == groupid) {
+ return JsonResult.error("参数传递错误");
+ }
+ TDevparaGroup group = deviceParamService.getDevparaGroupByGroupid(groupid);
+ if (null == group) {
+ return JsonResult.error("参数组不存在!");
+ }
+ try {
+ if (deviceParamService.deleteDevparaGroup(group)) {
+ return JsonResult.ok("删除成功");
+ } else {
+ return JsonResult.error("删除失败");
+ }
+ } catch (WebCheckException ex) {
+ return JsonResult.error(ex.getMessage());
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统处理异常").put("exception", e);
+ }
+ }
+
+ @GetMapping("/device/load4editdevpara")
+ @PreAuthorize("hasPermission('/device/load4editdevpara','')")
+ public String editView(@RequestParam(value = "groupid", required = false) Integer groupid, Model model) {
+ TDevparaGroup group = deviceParamService.getDevparaGroupByGroupid(groupid != null ? groupid : -99);
+ if (null == group) {
+ group = new TDevparaGroup();
+ group.setGroupid(0);
+ model.addAttribute("devparaGroup", group);
+ model.addAttribute("devparaConfigList", deviceParamService.getDevparaInfo(0));
+ } else {
+ model.addAttribute("devparaGroup", group);
+ model.addAttribute("devparaConfigList", deviceParamService.getDevparaInfo(group.getGroupid()));
+ }
+ return "restaurant/devpara/devparaform";
+ }
+
+ @PostMapping("/device/editdevpara")
+ @PreAuthorize("hasPermission('/device/editdevpara','')")
+ @ResponseBody
+ public JsonResult editDevpara(@RequestBody Map<String, String> param) {
+ String groupidHtmlKey = "form_devpara_groupid"; //页面上传来groupid的KEY
+ String groupnameHtmlKey = "form_devpara_groupname"; //页面上传来groupname的KEY
+ if (null == param || !NumberUtil.isDigits(param.get(groupidHtmlKey)) || StringUtil.isEmpty(groupnameHtmlKey)) {
+ return JsonResult.error("参数传递错误");
+ }
+
+ try {
+ int groupid = Integer.parseInt(param.get(groupidHtmlKey));
+ String groupname = param.get(groupnameHtmlKey).trim();
+ param.remove(groupidHtmlKey);
+ param.remove(groupnameHtmlKey);
+
+ if (deviceParamService.saveOrUpdateDevpara(groupid, groupname, param)) {
+ return JsonResult.ok(groupid == 0 ? "新增成功" : "修改成功");
+ } else {
+ return JsonResult.ok(groupid == 0 ? "新增失败" : "修改失败");
+ }
+ } catch (WebCheckException ex) {
+ return JsonResult.error(ex.getMessage());
+ } catch (Exception e) {
+ e.printStackTrace();
+ return JsonResult.error("系统处理异常").put("exception", e);
+ }
+ }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaBindDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaBindDao.java
new file mode 100644
index 0000000..67e32a5
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaBindDao.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDevparaBind;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DevparaBindDao extends JpaRepository<TDevparaBind, Integer> {
+
+ @Query("select count(t.deviceid) from TDevparaBind t where t.groupid=?1")
+ long getDevparaBindRecordcnt(int groupid);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaDao.java
new file mode 100644
index 0000000..68af28a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaDao.java
@@ -0,0 +1,23 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDevpara;
+import com.supwisdom.dlpay.restaurant.domain.TDevparaPk;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface DevparaDao extends JpaRepository<TDevpara, TDevparaPk> {
+ void deleteAllByGroupid(int groupid);
+
+ @Query("from TDevpara t where t.groupid=?1 order by t.paraname ")
+ List<TDevpara> findAllByGroupid(int groupid);
+
+ @Query("select t from TDevpara t,TDevparaGroup g where t.groupid=g.groupid and g.globalflag=true order by t.paraname ")
+ List<TDevpara> findSystemDefaultDevpara();
+
+ @Query("from TDevpara t where t.groupid=?1 and t.paraname=?2")
+ TDevpara findById(Integer groupid, String paraname);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java
new file mode 100644
index 0000000..d9b52fe
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DevparaGroupDao.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.restaurant.dao;
+
+import com.supwisdom.dlpay.restaurant.domain.TDevparaGroup;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface DevparaGroupDao extends JpaRepository<TDevparaGroup, Integer> {
+ Page<TDevparaGroup> findAllByGroupnameIsContaining(String groupname, Pageable pageable);
+
+ TDevparaGroup findByGroupid(int groupid);
+
+ @Query("select count(t.groupid) from TDevparaGroup t where t.groupname=?1 ")
+ long checkGroupnameExists(String groupname);
+
+ @Query("select count(t.groupid) from TDevparaGroup t where t.groupname=?1 and t.groupid<>?2")
+ long checkGroupnameExists(String groupname, int groupid);
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevpara.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevpara.java
new file mode 100644
index 0000000..e15124c
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevpara.java
@@ -0,0 +1,237 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.MoneyUtil;
+import com.supwisdom.dlpay.framework.util.NumberUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_DEVPARA")
+@IdClass(TDevparaPk.class)
+public class TDevpara {
+ @Id
+ @Column(name="GROUPID", nullable = false, precision = 9)
+ private Integer groupid;
+
+ @Id
+ @Column(name="PARANAME", nullable = false, length = 60)
+ private String paraname;
+
+ @Column(name="PARAVAL", length = 90)
+ private String paraval;
+
+ @Column(name="PARADESC", length = 600)
+ private String paradesc;
+
+ @Column(name="VALTYPE", length = 10)
+ private String valtype;
+
+ @Column(name="MINVAL", length = 10)
+ private String minval;
+
+ @Column(name="MAXVAL", length = 10)
+ private String maxval;
+
+ @Transient
+ private String errmsg;
+
+ public Integer getGroupid() {
+ return groupid;
+ }
+
+ public void setGroupid(Integer groupid) {
+ this.groupid = groupid;
+ }
+
+ public String getParaname() {
+ return paraname;
+ }
+
+ public void setParaname(String paraname) {
+ this.paraname = paraname;
+ }
+
+ public String getParaval() {
+ return paraval;
+ }
+
+ public void setParaval(String paraval) {
+ this.paraval = paraval;
+ }
+
+ public String getParadesc() {
+ return paradesc;
+ }
+
+ public void setParadesc(String paradesc) {
+ this.paradesc = paradesc;
+ }
+
+ public String getValtype() {
+ return valtype;
+ }
+
+ public void setValtype(String valtype) {
+ this.valtype = valtype;
+ }
+
+ public String getMinval() {
+ return minval;
+ }
+
+ public void setMinval(String minval) {
+ this.minval = minval;
+ }
+
+ public String getMaxval() {
+ return maxval;
+ }
+
+ public void setMaxval(String maxval) {
+ this.maxval = maxval;
+ }
+
+ public String getErrmsg() {
+ return errmsg;
+ }
+
+ public void setErrmsg(String errmsg) {
+ this.errmsg = errmsg;
+ }
+
+ public boolean checkValue() {
+ String paraname = this.paraname == null ? "" : this.paraname;
+
+ if (StringUtil.isEmpty(this.paraval)) {
+ this.errmsg = paraname + " 参数值为空";
+ return false;
+ }
+ this.paraval = this.paraval.trim();
+
+ //B-boolean;N-number;A-amount;S-String;DT-'yyyyMMddHHmmss';D-'yyyyMMdd';T-'HHmmss'
+ if (!StringUtil.isEmpty(this.valtype) && !"S".equals(this.valtype)) {
+ //指定了值类型
+ if ("B".equals(this.valtype)) {
+ //boolean
+ if (!"0".equals(this.paraval) && !"1".equals(this.paraval)) {
+ this.errmsg = paraname + " 只能取0或1 ";
+ return false;
+ }
+ }
+
+ if ("N".equals(this.valtype)) {
+ // number
+ if (!NumberUtil.isDigits(this.paraval)) {
+ this.errmsg = paraname + " 只能取整数 ";
+ return false;
+ }
+ if (NumberUtil.isDigits(this.minval) && Long.parseLong(this.paraval) < Long.parseLong(this.minval)) {
+ this.errmsg = paraname + " 小于最小值(" + Long.parseLong(this.minval) + ") ";
+ return false;
+ }
+ if (NumberUtil.isDigits(this.maxval) && Long.parseLong(this.paraval) > Long.parseLong(this.maxval)) {
+ this.errmsg = paraname + " 大于最大值(" + Long.parseLong(this.maxval) + ") ";
+ return false;
+ }
+ }
+
+ if ("A".equals(this.valtype)) {
+ //金额amount
+ if (!NumberUtil.isAmount(this.paraval)) {
+ this.errmsg = paraname + " 为金额,最多两位小数 ";
+ return false;
+ }
+ if (NumberUtil.isAmount(this.minval) && MoneyUtil.moneyCompare(Double.parseDouble(this.paraval), Double.parseDouble(this.minval)) < 0) {
+ this.errmsg = paraname + " 小于最小值(" + MoneyUtil.formatYuan(Double.parseDouble(this.minval)) + ") ";
+ return false;
+ }
+ if (NumberUtil.isAmount(this.maxval) && MoneyUtil.moneyCompare(Double.parseDouble(this.paraval), Double.parseDouble(this.maxval)) > 0) {
+ this.errmsg = paraname + " 大于最大值(" + MoneyUtil.formatYuan(Double.parseDouble(this.maxval)) + ") ";
+ return false;
+ }
+ }
+
+ if ("DT".equals(this.valtype)) {
+ //时间 yyyyMMddHHmmss
+ if (!DateUtil.checkDatetimeValid(this.paraval, "yyyyMMddHHmmss")) {
+ this.errmsg = paraname + " 格式错误(yyyyMMddHhmmss) ";
+ return false;
+ }
+
+ if (!StringUtil.isEmpty(this.minval) && DateUtil.compareDatetime(this.paraval, this.minval, "yyyyMMddHHmmss") < 0) {
+ this.errmsg = paraname + " 小于最小值(" + this.minval + ") ";
+ return false;
+ }
+ if (!StringUtil.isEmpty(this.maxval) && DateUtil.compareDatetime(this.paraval, this.maxval, "yyyyMMddHHmmss") > 0) {
+ this.errmsg = paraname + " 大于最大值(" + this.maxval + ") ";
+ return false;
+ }
+ }
+
+ if ("D".equals(this.valtype)) {
+ //时间 yyyyMMdd
+ if (!DateUtil.checkDatetimeValid(this.paraval, "yyyyMMdd")) {
+ this.errmsg = paraname + " 格式错误(yyyyMMdd) ";
+ return false;
+ }
+
+ if (!StringUtil.isEmpty(this.minval) && DateUtil.compareDatetime(this.paraval, this.minval, "yyyyMMdd") < 0) {
+ this.errmsg = paraname + " 小于最小值(" + this.minval + ") ";
+ return false;
+ }
+ if (!StringUtil.isEmpty(this.maxval) && DateUtil.compareDatetime(this.paraval, this.maxval, "yyyyMMdd") > 0) {
+ this.errmsg = paraname + " 大于最大值(" + this.maxval + ") ";
+ return false;
+ }
+ }
+
+ if ("T".equals(this.valtype)) {
+ //时间 HHmmss
+ if (!DateUtil.checkDatetimeValid(this.paraval, "HHmmss")) {
+ this.errmsg = paraname + " 格式错误(HHmmss) ";
+ return false;
+ }
+
+ if (!StringUtil.isEmpty(this.minval) && DateUtil.compareDatetime(this.paraval, this.minval, "HHmmss") < 0) {
+ this.errmsg = paraname + " 小于最小值(" + this.minval + ") ";
+ return false;
+ }
+ if (!StringUtil.isEmpty(this.maxval) && DateUtil.compareDatetime(this.paraval, this.maxval, "HHmmss") > 0) {
+ this.errmsg = paraname + " 大于最大值(" + this.maxval + ") ";
+ return false;
+ }
+ }
+
+ if ("TS".equals(this.valtype)){
+ //时间(时分) HHmm
+ if (!DateUtil.checkDatetimeValid(this.paraval, "HHmm")) {
+ this.errmsg = paraname + " 格式错误(HHmm) ";
+ return false;
+ }
+
+ if (!StringUtil.isEmpty(this.minval) && DateUtil.compareDatetime(this.paraval, this.minval, "HHmm") < 0) {
+ this.errmsg = paraname + " 小于最小值(" + this.minval + ") ";
+ return false;
+ }
+ if (!StringUtil.isEmpty(this.maxval) && DateUtil.compareDatetime(this.paraval, this.maxval, "HHmm") > 0) {
+ this.errmsg = paraname + " 大于最大值(" + this.maxval + ") ";
+ return false;
+ }
+ }
+
+ } else {
+ //字符串判断
+ if (!StringUtil.isEmpty(this.minval) && this.paraval.compareToIgnoreCase(this.minval) < 0) {
+ this.errmsg = paraname + " 小于最小值(" + this.minval + ") ";
+ return false;
+ }
+ if (!StringUtil.isEmpty(this.maxval) && this.paraval.compareToIgnoreCase(this.maxval) > 0) {
+ this.errmsg = paraname + " 大于最大值(" + this.maxval + ") ";
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaBind.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaBind.java
new file mode 100644
index 0000000..3b704f3
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaBind.java
@@ -0,0 +1,45 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "TB_DEVPARA_BIND")
+public class TDevparaBind {
+
+ @Id
+ @Column(name = "DEVICEID", nullable = false, precision = 9)
+ private Integer deviceid;
+
+ @Column(name = "GROUPID", nullable = false, precision = 9)
+ private Integer groupid;
+
+ @Column(name = "LASTSAVED", length = 14)
+ private String lastsaved;
+
+ public Integer getDeviceid() {
+ return deviceid;
+ }
+
+ public void setDeviceid(Integer deviceid) {
+ this.deviceid = deviceid;
+ }
+
+ public Integer getGroupid() {
+ return groupid;
+ }
+
+ public void setGroupid(Integer groupid) {
+ this.groupid = groupid;
+ }
+
+ public String getLastsaved() {
+ return lastsaved;
+ }
+
+ public void setLastsaved(String lastsaved) {
+ this.lastsaved = lastsaved;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaGroup.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaGroup.java
new file mode 100644
index 0000000..24f62b1
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaGroup.java
@@ -0,0 +1,67 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_DEVPARA_GROUP")
+public class TDevparaGroup {
+ @Id
+ @SequenceGenerator(name = "devpara_groupid", sequenceName = "SEQ_DEVPARAGROUPID", initialValue=2, allocationSize = 1 )
+ @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "devpara_groupid")
+ @Column(name="GROUPID", nullable = false, precision = 9)
+ private Integer groupid;
+
+ @Column(name="GROUPNAME", length = 200)
+ private String groupname;
+
+ @Column(name="GLOBALFLAG", nullable = false, length = 200)
+ private Boolean globalflag;
+
+ @Version
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ @Column(name="VERNO", nullable = false, precision = 9)
+ private Long verno;
+
+ @Column(name="LASTSAVED", length = 14)
+ private String lastsaved;
+
+ public Integer getGroupid() {
+ return groupid;
+ }
+
+ public void setGroupid(Integer groupid) {
+ this.groupid = groupid;
+ }
+
+ public String getGroupname() {
+ return groupname;
+ }
+
+ public void setGroupname(String groupname) {
+ this.groupname = groupname;
+ }
+
+ public Boolean getGlobalflag() {
+ return globalflag;
+ }
+
+ public void setGlobalflag(Boolean globalflag) {
+ this.globalflag = globalflag;
+ }
+
+ public Long getVerno() {
+ return verno;
+ }
+
+ public void setVerno(Long verno) {
+ this.verno = verno;
+ }
+
+ public String getLastsaved() {
+ return lastsaved;
+ }
+
+ public void setLastsaved(String lastsaved) {
+ this.lastsaved = lastsaved;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaPk.java b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaPk.java
new file mode 100644
index 0000000..f7d12ad
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/domain/TDevparaPk.java
@@ -0,0 +1,59 @@
+package com.supwisdom.dlpay.restaurant.domain;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class TDevparaPk implements Serializable {
+ @Id
+ @Column(name = "GROUPID", nullable = false, precision = 9)
+ private Integer groupid;
+
+ @Id
+ @Column(name = "PARANAME", nullable = false, length = 60)
+ private String paraname;
+
+ public TDevparaPk() {
+ }
+
+ public TDevparaPk(Integer groupid, String paraname) {
+ this.groupid = groupid;
+ this.paraname = paraname;
+ }
+
+ public Integer getGroupid() {
+ return groupid;
+ }
+
+ public void setGroupid(Integer groupid) {
+ this.groupid = groupid;
+ }
+
+ public String getParaname() {
+ return paraname;
+ }
+
+ public void setParaname(String paraname) {
+ this.paraname = paraname;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ TDevparaPk tDevparaPk = (TDevparaPk) o;
+ if (groupid != null ? !groupid.equals(tDevparaPk.getGroupid()) : groupid != null)
+ return false;
+ if (paraname != null ? !paraname.equals(tDevparaPk.getParaname()) : paraname != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = groupid != null ? groupid.hashCode() : 0;
+ result = 31 * result + (paraname != null ? paraname.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceParamService.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceParamService.java
new file mode 100644
index 0000000..9ea1508
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/DeviceParamService.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.restaurant.service;
+
+import com.supwisdom.dlpay.exception.WebCheckException;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.restaurant.domain.TDevpara;
+import com.supwisdom.dlpay.restaurant.domain.TDevparaGroup;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+
+public interface DeviceParamService {
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ PageResult<TDevparaGroup> getDevparaGroupPage(String groupname,int pageNo,int pageSize);
+
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ TDevparaGroup getDevparaGroupByGroupid(int groupid);
+
+ @Transactional(rollbackFor = Exception.class)
+ boolean deleteDevparaGroup(TDevparaGroup group) throws WebCheckException;
+
+ @Transactional(rollbackFor = Exception.class, readOnly = true)
+ List<TDevpara> getDevparaInfo(Integer groupid);
+
+ @Transactional(rollbackFor = Exception.class)
+ boolean saveOrUpdateDevpara(int groupid, String groupname, Map<String, String> param) throws WebCheckException;
+
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java
new file mode 100644
index 0000000..c59cad9
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/service/impl/DeviceParamServiceImpl.java
@@ -0,0 +1,135 @@
+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.dao.DevparaBindDao;
+import com.supwisdom.dlpay.restaurant.dao.DevparaDao;
+import com.supwisdom.dlpay.restaurant.dao.DevparaGroupDao;
+import com.supwisdom.dlpay.restaurant.domain.TDevpara;
+import com.supwisdom.dlpay.restaurant.domain.TDevparaGroup;
+import com.supwisdom.dlpay.restaurant.service.DeviceParamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class DeviceParamServiceImpl implements DeviceParamService {
+ @Autowired
+ private DevparaGroupDao devparaGroupDao;
+ @Autowired
+ private DevparaBindDao devparaBindDao;
+ @Autowired
+ private DevparaDao devparaDao;
+ @Autowired
+ private SystemUtilService systemUtilService;
+
+ @Override
+ public PageResult<TDevparaGroup> getDevparaGroupPage(String groupname, int pageNo, int pageSize) {
+ Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by("groupid"));
+ if (StringUtil.isEmpty(groupname)) {
+ return new PageResult<>(devparaGroupDao.findAll(pageable));
+ }
+ return new PageResult<>(devparaGroupDao.findAllByGroupnameIsContaining(groupname.trim(), pageable));
+ }
+
+ @Override
+ public TDevparaGroup getDevparaGroupByGroupid(int groupid) {
+ return devparaGroupDao.findByGroupid(groupid);
+ }
+
+ @Override
+ public boolean deleteDevparaGroup(TDevparaGroup group) throws WebCheckException {
+ if (null != group) {
+ if (group.getGlobalflag()) {
+ throw new WebCheckException("默认参数组不能删除");
+ }
+ if (devparaBindDao.getDevparaBindRecordcnt(group.getGroupid()) > 0) {
+ throw new WebCheckException("该参数组下绑定了设备,请先解绑。");
+ }
+
+ devparaDao.deleteAllByGroupid(group.getGroupid());
+ devparaGroupDao.delete(group);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public List<TDevpara> getDevparaInfo(Integer groupid) {
+ List<TDevpara> result;
+ if (null != groupid && groupid > 0) {
+ result = devparaDao.findAllByGroupid(groupid);
+ } else {
+ result = devparaDao.findSystemDefaultDevpara(); //默认
+ }
+ if (!StringUtil.isEmpty(result)) {
+ return result;
+ } else {
+ return new ArrayList<>(0);
+ }
+ }
+
+ @Override
+ public boolean saveOrUpdateDevpara(int groupid, String groupname, Map<String, String> param) throws WebCheckException {
+ TDevparaGroup group;
+ if (groupid == 0) {
+ if (devparaGroupDao.checkGroupnameExists(groupname) > 0) {
+ throw new WebCheckException("参数名称已经存在");
+ }
+ group = new TDevparaGroup();
+ group.setGlobalflag(false);
+ group.setGroupname(groupname);
+ group.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+ group.setVerno(1L);
+ group = devparaGroupDao.save(group);
+
+ List<TDevpara> configList = devparaDao.findSystemDefaultDevpara(); //默认
+ for (TDevpara devpara : configList) {
+ TDevpara bean = new TDevpara();
+ bean.setGroupid(group.getGroupid());
+ bean.setParaname(devpara.getParaname());
+ bean.setParaval(param.get(devpara.getParaname()));
+ bean.setParadesc(devpara.getParadesc());
+ bean.setValtype(devpara.getValtype());
+ bean.setMinval(devpara.getMinval());
+ bean.setMaxval(devpara.getMaxval());
+ if (!bean.checkValue()) {
+ throw new WebCheckException(bean.getErrmsg());
+ }
+ devparaDao.save(bean);
+ }
+ } else {
+ group = devparaGroupDao.findByGroupid(groupid);
+ if (null == group) {
+ throw new WebCheckException("原设备参数组不存在");
+ }
+ if (devparaGroupDao.checkGroupnameExists(groupname, groupid) > 0) {
+ throw new WebCheckException("参数名称已经存在");
+ }
+ group.setGroupname(groupname);
+ group.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+ devparaGroupDao.save(group);
+
+ for (String key : param.keySet()) {
+ TDevpara bean = devparaDao.findById(groupid, key);
+ if (null == bean) {
+ throw new WebCheckException("设备参数[" + key + "]在参数组【" + group.getGroupname() + "】中不存在");
+ }
+ bean.setParaval(param.get(key));
+ if (!bean.checkValue()) {
+ throw new WebCheckException(bean.getErrmsg());
+ }
+ devparaDao.save(bean);
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/main/resources/templates/restaurant/devpara/devpara.html b/src/main/resources/templates/restaurant/devpara/devpara.html
new file mode 100644
index 0000000..d460615
--- /dev/null
+++ b/src/main/resources/templates/restaurant/devpara/devpara.html
@@ -0,0 +1,123 @@
+<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">
+ 搜索:
+ <input id="search-devparagroup-groupname" class="layui-input search-input" maxlength="20" type="text" placeholder="输入名称"/> 
+ <button id="btn-search-devparagroup" class="layui-btn icon-btn" data-type="search"><i class="layui-icon"></i>搜索
+ </button>
+ <button id="search-devparagroup-add" class="layui-btn icon-btn" data-type="add"><i class="layui-icon"></i>新 增</button>
+ </div>
+ <table class="layui-table" id="devparagroupTable" lay-filter="devparagroupTable-filter"></table>
+ </div>
+</div>
+
+
+<!-- 表格操作列 -->
+<script type="text/html" id="devparagroup-table-bar">
+ <a class="layui-btn layui-btn layui-btn-xs" lay-event="edit">修改</a>
+ {{# if(!d.globalflag){ }}
+ <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
+ {{# } }}
+</script>
+
+<script>
+ layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+ var form = layui.form;
+ var table = layui.table;
+ var admin = layui.admin;
+ // 渲染表格
+ table.render({
+ elem: '#devparagroupTable',
+ url: '[[@{/device/devparalist}]]',
+ page: true,
+ cols: [
+ [
+ {field: 'groupid', title: '参数组编号', width: 150, align: 'center', fixed: 'left', sort: true},
+ {field: 'groupname', title: '参数组名称', align: 'center', fixed: 'left'},
+ {field: 'verno', title: '参数组版本号', align: 'center'},
+ {field: 'globalflag', title: '默认配置', align: 'center', templet: function(d){
+ if(d.globalflag) {
+ return '是'
+ }else {
+ return '否'
+ }
+ }},
+ {
+ field: 'lastsaved', title: '更新时间', align: 'center', templet: function (d) {
+ return admin.formatDate(d.lastsaved);
+ }
+ },
+ {align: 'center', title: '操作', width: 250, toolbar: '#devparagroup-table-bar', fixed: 'right'}
+ ]
+ ]
+ });
+
+ // 搜索按钮点击事件
+ $('#btn-search-devparagroup').click(function () {
+ var paraname = $("#search-devparagroup-groupname").val();
+ table.reload('devparagroupTable', {where: {groupname: paraname}, page: {curr: 1}});
+ });
+
+ $('#search-devparagroup-add').click(function () {
+ admin.popupCenter({
+ title: "新增设备参数组",
+ path: '[[@{/device/load4editdevpara}]]',
+ area: '1200px',
+ finish: function () {
+ table.reload('devparagroupTable');
+ }
+ });
+ });
+
+ //监听单元格
+ table.on('tool(devparagroupTable-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/devpara/devparaform.html b/src/main/resources/templates/restaurant/devpara/devparaform.html
new file mode 100644
index 0000000..fbc7799
--- /dev/null
+++ b/src/main/resources/templates/restaurant/devpara/devparaform.html
@@ -0,0 +1,123 @@
+<form id="devpara-form" lay-filter="devpara-form-filter" class="layui-form model-form"
+ style="padding: 30px 25px 10px 25px;">
+ <div class="layui-form-item">
+ <div class="layui-inline">
+ <label class="layui-form-label">参数组编号</label>
+ <div class="layui-input-inline">
+ <input name="form_devpara_groupid" id="form-devpara-groupid" type="text" class="layui-input" style="background-color:#fafafa;"
+ th:value="${devparaGroup.groupid}" autocomplete="off" readonly="readonly"/>
+ </div>
+ </div>
+ <div class="layui-inline">
+ <label class="layui-form-label">参数组名称</label>
+ <div class="layui-input-inline">
+ <input name="form_devpara_groupname" id="form-devpara-groupname" type="text" maxlength="20" class="layui-input"
+ th:value="${devparaGroup.groupname}" autocomplete="off" lay-verify="required" required/>
+ </div>
+ </div>
+ </div>
+
+ <div class="layui-form-item">
+ <table class="layui-table" lay-size="sm" style="margin-bottom: 0;">
+ <colgroup>
+ <col width="220">
+ <col width="150">
+ <col width="80">
+ <col>
+ </colgroup>
+ <thead>
+ <tr>
+ <th style="text-align: center">参数名</th>
+ <th style="text-align: center">参数值</th>
+ <th style="text-align: center">值类型</th>
+ <th style="text-align: center">参数描述</th>
+ </tr>
+ </thead>
+ </table>
+ <div style="max-height: 400px;overflow-y: auto;">
+ <table class="layui-table" lay-size="sm" style="margin-top: 0;">
+ <colgroup>
+ <col width="220">
+ <col width="150">
+ <col width="80">
+ <col>
+ </colgroup>
+ <tbody>
+ <tr th:each="config:${devparaConfigList}">
+ <td th:text="${config.paraname}" style="text-align: left;background-color:#fafafa;">参数名</td>
+ <td style="text-align: center"><input type="text" class="layui-input layui-table-edit" style="border: 0;box-shadow: 0px 0px 1px rgba(0,0,0,.15);"
+ th:name="${config.paraname}" th:value="${config.paraval}" /></td>
+ <td style="text-align: center;background-color:#fafafa;" th:switch="${config.valtype}">
+ <span th:case="N">整型</span>
+ <span th:case="B">布尔型</span>
+ <span th:case="A">浮点型</span>
+ <span th:case="D">时间</span>
+ <span th:case="T">时间</span>
+ <span th:case="DT">时间</span>
+ <span th:case="TS">时间</span>
+ <span th:case="*">字符串</span>
+ </td>
+ <td style="text-align: left;background-color:#fafafa;" th:text="${config.paradesc}">参数描述</td>
+ </tr>
+ </tbody>
+ </table>
+ </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="form-submit" lay-submit id="submitbtn">保存</button>
+ </div>
+</form>
+
+<script>
+ layui.use(['layer', 'admin', 'form'], function () {
+ var layer = layui.layer;
+ var admin = layui.admin;
+ var form = layui.form;
+ // 表单提交事件
+ form.on('submit(form-submit)', function (data) {
+ layer.load(2);
+ var vdata = data.field;
+ if(JSON.stringify(vdata)=="{}"){
+ layer.closeAll('loading');
+ admin.closePopupCenter();
+ return; //无配置项,直接关闭
+ }
+ var token=$("meta[name='_csrf_token']").attr("value");
+ console.log('devpara:',vdata);
+ debugger
+ $.ajax({
+ type : "POST",
+ dataType : "json",
+ url : '[[@{/device/editdevpara}]]',
+ headers: {
+ 'Accept': 'application/json',
+ 'Content-Type': 'application/json',
+ 'X-CSRF-TOKEN':token,
+ },
+ data : JSON.stringify(vdata),
+ success : function(result) {
+ layer.closeAll('loading');
+ if (result.code == 200) {
+ layer.msg(result.msg, {icon: 1});
+ admin.finishPopupCenter();
+ } else if (result.code == 401) {
+ layer.msg(result.msg, {icon: 2, time: 1500}, function () {
+ location.replace('[[@{/login}]]');
+ }, 1000);
+ return;
+ } else {
+ console.log('err:' + result.code);
+ layer.msg(result.msg, {icon: 2});
+ }
+ },
+ error : function() {
+ layer.closeAll('loading');
+ layer.msg("请求服务器失败!", {icon: 2});
+ }
+ });
+ return false;
+ });
+ });
+</script>
\ No newline at end of file