厂家管理,系统用户,摄像头页面

This commit is contained in:
ifish7
2017-08-16 18:25:43 +08:00
parent 7de1489e10
commit c67116b3db
32 changed files with 2374 additions and 66 deletions
@@ -56,7 +56,7 @@ public class Admin {
* @param tbl_Security_User
* @return
*/
@RequestMapping(value = {"/insertSecurityUser"}, method = RequestMethod.POST)
@RequestMapping(value = {"/insertSecurityUser"}, method = RequestMethod.POST, produces = " text/html;charset=utf-8")
@ResponseBody
public Object insertUser(Tbl_Security_User tbl_Security_User) {
return adminHelperI.insertUser(tbl_Security_User);
@@ -68,7 +68,7 @@ public class Admin {
* @param tbl_Security_User
* @return
*/
@RequestMapping(value = {"/updateSecurityUser"}, method = RequestMethod.POST)
@RequestMapping(value = {"/updateSecurityUser"}, method = RequestMethod.POST, produces = " text/html;charset=utf-8")
@ResponseBody
public Object updateUser(Tbl_Security_User tbl_Security_User) {
return adminHelperI.updateUser(tbl_Security_User);
@@ -90,7 +90,7 @@ public class Admin {
* @param id
* @return
*/
@RequestMapping(value = {"/deleteSecurityUser"}, method = RequestMethod.POST)
@RequestMapping(value = {"/deleteSecurityUser"}, method = RequestMethod.POST, produces = " text/html;charset=utf-8")
@ResponseBody
public Object deleteSecurityUser(Integer id) {
return adminHelperI.deleteSecurityUser(id);
@@ -0,0 +1,98 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ifish.controller;
import com.ifish.helper.CameraHelperI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
/**
*
* @author Administrator
*/
@Controller
public class Camera {
@Autowired
private CameraHelperI cameraHelperI;
/**
* 摄像头信息页面
*
* @return
*/
@RequestMapping(value = {"/cameralist"}, method = RequestMethod.GET)
public ModelAndView getCameraList() {
return cameraHelperI.getCameraList();
}
/**
* 摄像头信息页面数据
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @param draw
* @param start
* @param length
* @return
*/
@RequestMapping(value = {"/cameralistData"}, method = RequestMethod.POST)
@ResponseBody
public Object getCameralistData(String cameraId, String activateCode, String activateTime, String isActivate, String draw, Integer start, Integer length) {
return cameraHelperI.getCameralistData(cameraId, activateCode, activateTime, isActivate, draw, start, length);
}
/**
* 激活摄像头
*
* @param cameraId
* @param activateCode
* @return
*/
@RequestMapping(value = {"/activateCamera"}, method = RequestMethod.POST, produces = " text/html;charset=utf-8")
@ResponseBody
public Object activateCamera(String cameraId, String activateCode) {
return cameraHelperI.activateCamera(cameraId, activateCode);
}
/**
* 摄像头绑定页面
*
* @return
*/
@RequestMapping(value = {"/camerauserlist"}, method = RequestMethod.GET)
public ModelAndView camerauserlist() {
return cameraHelperI.camerauserlist();
}
/**
* 摄像头绑定页面数据
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @param draw
* @param start
* @param length
* @return
*/
@RequestMapping(value = {"/camerauserlistData"}, method = RequestMethod.POST)
@ResponseBody
public Object camerauserlistData(String cameraId, String userId, String phoneNumber, String showName, String isMaster, String isActiva, String isLive, String draw, Integer start, Integer length) {
return cameraHelperI.camerauserlistData(cameraId, userId, phoneNumber, showName, isMaster, isActiva, isLive, draw, start, length);
}
}
@@ -129,6 +129,18 @@ public class Factory {
return factoryHelperI.authorizationQuery(factoryCode, createTimeBefore, createTimeAfter);
}
/**
* 授权统计操作记录
*
* @param factoryCode
* @param billMonth
* @return
*/
@RequestMapping(value = {"/recorddetail"}, method = RequestMethod.GET)
public ModelAndView recorddetail(String factoryCode, String billMonth) {
return factoryHelperI.recorddetail(factoryCode, billMonth);
}
/**
* 账单列表
*
@@ -188,6 +200,16 @@ public class Factory {
return factoryHelperI.paydetail(factoryCode, billMonth);
}
/**
* 账单列表详情记录
*
* @param factoryCode
* @param billMonth
* @param draw
* @param start
* @param length
* @return
*/
@RequestMapping(value = {"/paydetailDate"}, method = RequestMethod.POST)
@ResponseBody
public Object paydetailDate(String factoryCode, String billMonth, String draw, Integer start, Integer length) {
@@ -58,7 +58,7 @@ public class Index {
@RequestMapping(value = "/test", method = RequestMethod.GET)
public Object test() {
ModelAndView mv = new ModelAndView();
mv.setViewName("index");
mv.setViewName("testj");
return mv;
}
@@ -104,4 +104,34 @@ public class User {
public Object updateRemarks(String userId, String remarks) {
return userHelper.updateRemarks(userId, remarks);
}
/**
* 换水提醒页面
*
* @return
*/
@RequestMapping(value = "/remindWaterList", method = RequestMethod.GET)
public ModelAndView remindWaterList() {
return userHelper.remindWaterList();
}
/**
* 换水提醒页面数据
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @param draw
* @param start
* @param length
* @return
*/
@RequestMapping(value = {"/remindWaterListData"}, method = RequestMethod.POST)
@ResponseBody
public Object remindWaterListData(String ispush, String phoneType, String sortField, String sortMode, String selectField, String selectvalue, String draw, Integer start, Integer length) {
return userHelper.remindWaterListData(ispush, phoneType, sortField, sortMode, selectField, selectvalue, draw, start, length);
}
}
@@ -6,6 +6,7 @@
package com.ifish.helper;
import com.ifish.bean.Tbl_Security_User;
import com.ifish.mapper.Tbl_Factory_List_Mapper;
import com.ifish.mapper.Tbl_User_Mapper;
import java.util.HashMap;
import java.util.List;
@@ -21,9 +22,12 @@ import org.springframework.web.servlet.ModelAndView;
*/
@Component
public class AdminHelper implements AdminHelperI {
@Autowired
private Tbl_User_Mapper tbl_User_Mapper;
@Autowired
private Tbl_Factory_List_Mapper tbl_Factory_List_Mapper;
/**
* 合作账号管理页面
@@ -35,6 +39,10 @@ public class AdminHelper implements AdminHelperI {
ModelAndView mv = new ModelAndView();
mv.setViewName("adminuserlist");
mv.addObject("title", "用户管理");
List<Map> factorylist = tbl_Factory_List_Mapper.getFactoryListData(0, 1000);
mv.addObject("factorylist", factorylist);
List<Map> venderlist = tbl_Factory_List_Mapper.getAllVenderList();
mv.addObject("venderlist", venderlist);
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/sparklines/jquery.sparkline.js\"></script>\n"
@@ -112,8 +120,6 @@ public class AdminHelper implements AdminHelperI {
+ " <script src=\"static/assets/plugins/misc/highlight/highlight.pack.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/countTo/jquery.countTo.js\"></script>\n"
+ " <script src=\"static/assets/js/jquery.sprFlat.js\"></script>\n"
+ " <script src=\"static/switchery/switchery.min.js\"></script>\n"
+ "<link href=\"static/switchery/switchery.min.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/js/app.js\"></script>");
return mv;
}
@@ -130,6 +136,10 @@ public class AdminHelper implements AdminHelperI {
if (tbl_Security_User.getId() != null && tbl_Security_User.getId() >= 0) {
return "失败";
}
if (tbl_User_Mapper.checkUserName(tbl_Security_User.getUsername()) > 0) {
return "失败";
}
tbl_Security_User.setStatus("0");
int i = tbl_User_Mapper.insertSecurityUser(tbl_Security_User);
if (i > 0) {
return "成功";
@@ -148,14 +158,14 @@ public class AdminHelper implements AdminHelperI {
@Override
public Object updateUser(Tbl_Security_User tbl_Security_User) {
try {
if (tbl_Security_User.getId() == null || tbl_Security_User.getId() <= 0) {
if (StringUtils.isBlank(tbl_Security_User.getUsername())) {
return "失败";
}
int i = tbl_User_Mapper.updateSecurityUser(tbl_Security_User);
if (i > 0) {
return "成功";
}
} catch (Exception e) {
}
return "失败";
@@ -180,5 +190,5 @@ public class AdminHelper implements AdminHelperI {
}
return "失败";
}
}
@@ -0,0 +1,194 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ifish.helper;
import com.ifish.bean.Tbl_Device;
import com.ifish.mapper.Tbl_Camera_List_Mapper;
import com.ifish.util.IfishUtil;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
/**
*
* @author Administrator
*/
@Component
public class CameraHelper implements CameraHelperI {
@Autowired
private Tbl_Camera_List_Mapper tbl_Camera_List_Mapper;
@Autowired
private DeviceHelperI deviceHelperI;
/**
* 摄像头信息页面
*
* @return
*/
public ModelAndView getCameraList() {
ModelAndView mv = new ModelAndView();
mv.setViewName("cameralist");
mv.addObject("pagetitle", "摄像头信息");
mv.addObject("title", "摄像头信息");
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/sparklines/jquery.sparkline.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/pie-chart/jquery.easy-pie-chart.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/icheck/jquery.icheck.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tags/jquery.tagsinput.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tinymce/tinymce.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/tables/jquery.dataTables.js\"></script>\n"
+ "<link href=\"static/assets/plugins/tables/jquery.dataTables.css\" rel=\"stylesheet\">"
+ "<link href=\"static/assets/plugins/tables/dataTables.bootstrap.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/plugins/tables/dataTables.bootstrap.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/highlight/highlight.pack.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/countTo/jquery.countTo.js\"></script>\n"
+ " <script src=\"static/assets/js/jquery.sprFlat.js\"></script>\n"
+ " <script src=\"static/assets/js/app.js\"></script>");
return mv;
}
/**
* 摄像头信息页面数据
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @param draw
* @param start
* @param length
* @return
*/
@Override
public Object getCameralistData(String cameraId, String activateCode, String activateTime, String isActivate, String draw, Integer start, Integer length) {
List<Map> list = tbl_Camera_List_Mapper.getCameraListData(cameraId, activateCode, activateTime, isActivate, start, length);
for (Map map : list) {
String date = IfishUtil.format((Date) map.get("activeTime"));
map.put("activeTime", date);
String date2 = IfishUtil.format((Date) map.get("createTime"));
map.put("createTime", date2);
}
Integer count = 0;
Integer allCount = tbl_Camera_List_Mapper.getAllCameraCount();
if (StringUtils.isBlank(cameraId) && StringUtils.isBlank(activateCode) && StringUtils.isBlank(activateTime) && StringUtils.isBlank(isActivate)) {
count = allCount;
} else {
count = tbl_Camera_List_Mapper.getCameraListDataCountBySelect(cameraId, activateCode, activateTime, isActivate);
}
Map map = new HashMap();
map.put("data", list);
map.put("draw", draw);
map.put("recordsTotal", allCount);
map.put("recordsFiltered", count);
return map;
}
/**
* 激活摄像头
*
* @param cameraId
* @param activateCode
* @return
*/
@Override
public Object activateCamera(String cameraId, String activateCode) {
try {
Tbl_Device tbl_Device = deviceHelperI.getDeviceByCameraId(cameraId);
if (tbl_Device != null) {
int i = tbl_Camera_List_Mapper.checkActiveCode(activateCode);
if (i > 0) {
int j = tbl_Camera_List_Mapper.activateCamera(activateCode, cameraId);
if (j > 0) {
return "成功";
}
}
}
} catch (Exception e) {
}
return "失败";
}
/**
* 摄像头绑定页面
*
* @return
*/
@Override
public ModelAndView camerauserlist() {
ModelAndView mv = new ModelAndView();
mv.setViewName("camerauserlist");
mv.addObject("pagetitle", "摄像头绑定");
mv.addObject("title", "摄像头绑定");
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/sparklines/jquery.sparkline.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/pie-chart/jquery.easy-pie-chart.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/icheck/jquery.icheck.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tags/jquery.tagsinput.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tinymce/tinymce.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/tables/jquery.dataTables.js\"></script>\n"
+ "<link href=\"static/assets/plugins/tables/jquery.dataTables.css\" rel=\"stylesheet\">"
+ "<link href=\"static/assets/plugins/tables/dataTables.bootstrap.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/plugins/tables/dataTables.bootstrap.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/highlight/highlight.pack.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/countTo/jquery.countTo.js\"></script>\n"
+ " <script src=\"static/assets/js/jquery.sprFlat.js\"></script>\n"
+ " <script src=\"static/assets/js/app.js\"></script>");
return mv;
}
/**
* 摄像头绑定页面数据
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @param draw
* @param start
* @param length
* @return
*/
@Override
public Object camerauserlistData(String cameraId, String userId, String phoneNumber, String showName, String isMaster, String isActiva, String isLive, String draw, Integer start, Integer length) {
List<Map> list = tbl_Camera_List_Mapper.getCameraUserListData(cameraId, userId, phoneNumber, showName, isMaster, isActiva, isLive, start, length);
for (Map map : list) {
String date = IfishUtil.format((Date) map.get("activeTime"));
map.put("activeTime", date);
String date2 = IfishUtil.format((Date) map.get("createTime"));
map.put("createTime", date2);
}
Integer allCount = tbl_Camera_List_Mapper.getAllCameraUserListDataCount();
Integer count = 0;
if (StringUtils.isBlank(cameraId) && StringUtils.isBlank(userId) && StringUtils.isBlank(phoneNumber) && StringUtils.isBlank(showName) && StringUtils.isBlank(isMaster) && StringUtils.isBlank(isActiva) && StringUtils.isBlank(isLive)) {
count = allCount;
} else {
count = tbl_Camera_List_Mapper.getCameraUserListDataCount(cameraId, userId, phoneNumber, showName, isMaster, isActiva, isLive);
}
Map map = new HashMap();
map.put("data", list);
map.put("draw", draw);
map.put("recordsTotal", allCount);
map.put("recordsFiltered", count);
return map;
}
}
@@ -0,0 +1,70 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ifish.helper;
import org.springframework.web.servlet.ModelAndView;
/**
*
* @author Administrator
*/
public interface CameraHelperI {
/**
* 摄像头信息页面
*
* @return
*/
public ModelAndView getCameraList();
/**
* 摄像头信息页面数据
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @param draw
* @param start
* @param length
* @return
*/
public Object getCameralistData(String cameraId, String activateCode, String activateTime, String isActivate, String draw, Integer start, Integer length);
/**
* 激活摄像头
*
* @param cameraId
* @param activateCode
* @return
*/
public Object activateCamera(String cameraId, String activateCode);
/**
* 摄像头绑定页面
*
* @return
*/
public ModelAndView camerauserlist();
/**
* 摄像头绑定页面数据
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @param draw
* @param start
* @param length
* @return
*/
public Object camerauserlistData(String cameraId, String userId, String phoneNumber, String showName, String isMaster, String isActiva, String isLive, String draw, Integer start, Integer length);
}
@@ -416,6 +416,7 @@ public class FactoryHelper implements FactoryHelperI {
mv.addObject("pagetitle", "授权统计");
List<Map> list = tbl_Factory_List_Mapper.getFactoryListData(0, 1000);
mv.addObject("factorylist", list);
mv.addObject("factoryCode", factoryCode);
mv.addObject("map", authorizationData(factoryCode, createTimeBefore, createTimeAfter));
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
@@ -456,17 +457,67 @@ public class FactoryHelper implements FactoryHelperI {
calendar.set(Calendar.DAY_OF_MONTH, maxDay);
createTimeAfter = format.format(calendar.getTime());
}
//百分比
NumberFormat numberFormat = NumberFormat.getInstance();
//设置精确到小数点后0位
numberFormat.setMaximumFractionDigits(0);
if (StringUtils.isBlank(factoryCode)) {
List<Map> list = tbl_Device_Mapper.getAuthorizationByFactory(createTimeBefore, createTimeAfter);
int deviceNumber = tbl_Device_Mapper.getAuthorizationCountByFactory(createTimeBefore, createTimeAfter);
for (Map map1 : list) {
String factorybindPrice = numberFormat.format(Float.valueOf(map1.get("deviceNumber").toString()) / (float) deviceNumber * 100);
map1.put("factorybindPrice", factorybindPrice);
}
map.put("deviceCount", deviceNumber);
map.put("factorylist", list);
} else {
List<Map> list = tbl_Device_Mapper.getAuthorizationByDate(createTimeBefore, createTimeAfter, factoryCode);
int deviceNumber = tbl_Device_Mapper.getAuthorizationCountByDate(createTimeBefore, createTimeAfter, factoryCode);
for (Map map1 : list) {
String venderbindPrice = numberFormat.format(Float.valueOf(map1.get("deviceNumber").toString()) / (float) deviceNumber * 100);
map1.put("venderbindPrice", venderbindPrice);
}
map.put("deviceCount", deviceNumber);
map.put("datalist", list);
}
return map;
}
/**
* 授权统计操作记录页面
*
* @param factoryCode
* @param billMonth
* @return
*/
@Override
public ModelAndView recorddetail(String factoryCode, String billMonth) {
ModelAndView mv = new ModelAndView();
mv.setViewName("record");
mv.addObject("title", "操作记录");
mv.addObject("pagetitle", "操作记录");
mv.addObject("factoryCode", factoryCode);
mv.addObject("billMonth", billMonth);
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/sparklines/jquery.sparkline.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/pie-chart/jquery.easy-pie-chart.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/icheck/jquery.icheck.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tags/jquery.tagsinput.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tinymce/tinymce.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/tables/jquery.dataTables.js\"></script>\n"
+ "<link href=\"static/assets/plugins/tables/jquery.dataTables.css\" rel=\"stylesheet\">"
+ "<link href=\"static/assets/plugins/tables/dataTables.bootstrap.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/plugins/tables/dataTables.bootstrap.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/highlight/highlight.pack.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/countTo/jquery.countTo.js\"></script>\n"
+ " <script src=\"static/assets/js/jquery.sprFlat.js\"></script>\n"
+ " <script src=\"static/switchery/switchery.min.js\"></script>\n"
+ "<link href=\"static/switchery/switchery.min.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/js/app.js\"></script>");
return mv;
}
/**
* 账单列表
*
@@ -90,6 +90,15 @@ public interface FactoryHelperI {
*/
public ModelAndView authorizationQuery(String factoryCode, String createTimeBefore, String createTimeAfter);
/**
* 授权统计操作记录页面
*
* @param factoryCode
* @param billMonth
* @return
*/
public ModelAndView recorddetail(String factoryCode, String billMonth);
/**
* 账单列表
*
@@ -12,6 +12,7 @@ import com.ifish.bean.Tbl_HardWare_Type;
import com.ifish.bean.Tbl_Security_User;
import com.ifish.bean.Tbl_User;
import com.ifish.bean.Tbl_Vender;
import com.ifish.mapper.Tbl_Push_List_Mapper;
import com.ifish.mapper.Tbl_User_Mapper;
import com.ifish.util.IfishUtil;
import java.util.ArrayList;
@@ -41,6 +42,8 @@ public class UserHelper implements UserHelperI {
private DeviceHelper deviceHelper;
@Autowired
private HardWareTypeHelperI hardWareTypeHelperI;
@Autowired
private Tbl_Push_List_Mapper tbl_Push_List_Mapper;
@Override
public Tbl_Security_User getTbl_Security_User(String usernameSring) {
@@ -313,4 +316,69 @@ public class UserHelper implements UserHelperI {
return mv;
}
/**
* 换水提醒页面
*
* @return
*/
@Override
public ModelAndView remindWaterList() {
ModelAndView mv = new ModelAndView();
mv.setViewName("remindWaterList");
mv.addObject("pagetitle", "换水提醒");
mv.addObject("title", "换水提醒");
mv.addObject("myjs", "<!-- Other plugins ( load only nessesary plugins for every page) -->\n"
+ " <script src=\"static/assets/plugins/core/moment/moment.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/sparklines/jquery.sparkline.js\"></script>\n"
+ " <script src=\"static/assets/plugins/charts/pie-chart/jquery.easy-pie-chart.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/icheck/jquery.icheck.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tags/jquery.tagsinput.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/forms/tinymce/tinymce.min.js\"></script>\n"
+ " <script src=\"static/assets/plugins/tables/jquery.dataTables.js\"></script>\n"
+ "<link href=\"static/assets/plugins/tables/jquery.dataTables.css\" rel=\"stylesheet\">"
+ "<link href=\"static/assets/plugins/tables/dataTables.bootstrap.css\" rel=\"stylesheet\">"
+ " <script src=\"static/assets/plugins/tables/dataTables.bootstrap.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/highlight/highlight.pack.js\"></script>\n"
+ " <script src=\"static/assets/plugins/misc/countTo/jquery.countTo.js\"></script>\n"
+ " <script src=\"static/assets/js/jquery.sprFlat.js\"></script>\n"
+ " <script src=\"static/assets/js/app.js\"></script>");
return mv;
}
/**
* 换水提醒数据
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @param darw
* @param start
* @param length
* @return
*/
@Override
public Object remindWaterListData(String ispush, String phoneType, String sortField, String sortMode, String selectField, String selectvalue, String draw, Integer start, Integer length) {
List<Map> list = tbl_Push_List_Mapper.getRemindWaterList(ispush, phoneType, sortField, sortMode, selectField, selectvalue, start, length);
for (Map map : list) {
String remindDate = IfishUtil.format1((Date) map.get("remindDate"));
map.put("remindDate", remindDate);
}
Integer allCount = tbl_Push_List_Mapper.getAllRemindWaterListCount();
Integer count = 0;
if (StringUtils.isBlank(ispush) && StringUtils.isBlank(phoneType) && StringUtils.isBlank(selectvalue)) {
count = allCount;
} else {
count = tbl_Push_List_Mapper.getRemindWaterListCountBySelect(ispush, phoneType, selectField, selectvalue);
}
Map map = new HashMap();
map.put("data", list);
map.put("draw", draw);
map.put("recordsTotal", allCount);
map.put("recordsFiltered", count);
return map;
}
}
@@ -7,6 +7,7 @@ package com.ifish.helper;
import com.ifish.bean.Tbl_Security_User;
import com.ifish.bean.Tbl_User;
import org.springframework.web.servlet.ModelAndView;
/**
*
@@ -55,4 +56,27 @@ public interface UserHelperI {
*/
public Tbl_User getUserById(Integer userId) throws Exception;
/**
* 换水提醒页面
*
* @return
*/
public ModelAndView remindWaterList();
/**
* 换水提醒数据
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @param darw
* @param start
* @param length
* @return
*/
public Object remindWaterListData(String ispush, String phoneType, String sortField, String sortMode, String selectField, String selectvalue, String draw, Integer start, Integer length);
}
@@ -0,0 +1,110 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ifish.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.Update;
/**
*
* @author Administrator
*/
public interface Tbl_Camera_List_Mapper {
/**
* 摄像头信息页面数据
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @param start
* @param length
* @return
*/
@SelectProvider(type = Tbl_Camera_List_MapperSql.class, method = "getCameraListData")
List<Map> getCameraListData(@Param("cameraId") String cameraId, @Param("activateCode") String activateCode, @Param("activateTime") String activateTime, @Param("isActivate") String isActivate, Integer start, Integer length);
/**
* 摄像头信息页面数据查询数量
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @return
*/
@SelectProvider(type = Tbl_Camera_List_MapperSql.class, method = "getCameraListDataCountBySelect")
Integer getCameraListDataCountBySelect(@Param("cameraId") String cameraId, @Param("activateCode") String activateCode, @Param("activateTime") String activateTime, @Param("isActivate") String isActivate);
/**
* 查询所有摄像头数量
*
* @return
*/
@Select("SELECT count(1) from tbl_device where is_camera='1'")
Integer getAllCameraCount();
/**
* 验证激活码是否使用
*/
@Select("SELECT COUNT(1) from tbl_activa_code where active_code = #{code} and is_used = '0'")
Integer checkActiveCode(@Param("code") String activeCode);
/**
* 激活摄像头
*
* @param activateCode
* @param cameraId
* @return
*/
@Update("UPDATE tbl_device SET active_code = #{code},active_time = NOW() WHERE camera_id = #{cameraId}")
Integer activateCamera(@Param("code") String activateCode, @Param("cameraId") String cameraId);
/**
* 获取摄像头和用户关系列表数据
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @param start
* @param length
* @return
*/
@SelectProvider(type = Tbl_Camera_List_MapperSql.class, method = "getCameraUserListData")
List<Map> getCameraUserListData(String cameraId, @Param("userId") String userId, @Param("phoneNumber") String phoneNumber, String showName, @Param("ismaster") String isMaster, String isActiva, @Param("islive") String isLive, Integer start, Integer length);
/**
* 获取摄像头和用户关系列表数量
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @return
*/
@SelectProvider(type = Tbl_Camera_List_MapperSql.class, method = "getCameraUserListDataCount")
Integer getCameraUserListDataCount(String cameraId, @Param("userId") String userId, @Param("phoneNumber") String phoneNumber, String showName, @Param("ismaster") String isMaster, String isActiva, @Param("islive") String isLive);
/**
* 获取摄像头和用户关系总数
*
* @return
*/
@Select("SELECT count(1) from tbl_device d LEFT JOIN tbl_device_user du ON d.device_id = du.device_id LEFT JOIN tbl_user u ON du.user_id = u.user_id WHERE d.is_camera = '1'")
Integer getAllCameraUserListDataCount();
}
@@ -0,0 +1,178 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.ifish.mapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.annotations.Param;
/**
*
* @author Administrator
*/
public class Tbl_Camera_List_MapperSql {
/**
* 摄像头信息页面数据
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @param start
* @param length
* @return
*/
public String getCameraListData(@Param("cameraId") String cameraId, @Param("activateCode") String activateCode, @Param("activateTime") String activateTime, @Param("isActivate") String isActivate, Integer start, Integer length) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT camera_id cameraId,active_code activeCode,active_time activeTime,create_time createTime from tbl_device where is_camera='1' ");
if (StringUtils.isNotBlank(cameraId)) {
sb.append(" and camera_id like '%").append(cameraId).append("%'");
}
if (StringUtils.isNotBlank(activateCode)) {
sb.append(" and active_code like '%").append(activateCode).append("%'");
}
if (StringUtils.isNotBlank(activateTime)) {
sb.append(" and #{activateTime}=date_format(active_time,'%Y-%m-%d')");
}
if (StringUtils.isNotBlank(isActivate)) {
if (isActivate.equals("1")) {
sb.append(" and active_code is not null");
} else {
sb.append(" and active_code is null");
}
}
sb.append(" ORDER BY device_id DESC limit ").append(start).append(",").append(length);
return sb.toString();
}
/**
* 摄像头信息页面数据查询数量
*
* @param cameraId
* @param activateCode
* @param activateTime
* @param isActivate
* @return
*/
public String getCameraListDataCountBySelect(@Param("cameraId") String cameraId, @Param("activateCode") String activateCode, @Param("activateTime") String activateTime, @Param("isActivate") String isActivate) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT count(1) from tbl_device where is_camera='1' ");
if (StringUtils.isNotBlank(cameraId)) {
sb.append(" and camera_id like '%").append(cameraId).append("%'");
}
if (StringUtils.isNotBlank(activateCode)) {
sb.append(" and active_code like '%").append(activateCode).append("%'");
}
if (StringUtils.isNotBlank(activateTime)) {
sb.append(" and #{activateTime}=date_format(active_time,'%Y-%m-%d')");
}
if (StringUtils.isNotBlank(isActivate)) {
if (isActivate.equals("1")) {
sb.append(" and active_code is not null");
} else {
sb.append(" and active_code is null");
}
}
return sb.toString();
}
/**
* 获取摄像头和用户关系列表数量
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @param start
* @param length
* @return
*/
public String getCameraUserListData(String cameraId, @Param("userId") String userId, @Param("phoneNumber") String phoneNumber, String showName, @Param("ismaster") String isMaster, String isActiva, @Param("islive") String isLive, Integer start, Integer length) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT d.camera_id cameraId,du.user_id userId,u.phone_number phoneNumber,du.show_name showName,du.is_master isMaster,du.is_live isLive,d.active_code activeCode,d.active_time activeTime,");
sb.append("du.create_time createTime from tbl_device d LEFT JOIN tbl_device_user du ON d.device_id = du.device_id");
sb.append(" LEFT JOIN tbl_user u ON du.user_id = u.user_id WHERE d.is_camera = '1'");
if (StringUtils.isNotBlank(cameraId)) {
sb.append(" and d.camera_id like '%").append(cameraId).append("%'");
}
if (StringUtils.isNotBlank(userId)) {
sb.append(" and du.user_id = #{userId}");
}
if (StringUtils.isNotBlank(phoneNumber)) {
sb.append(" and u.phone_number like '%").append(phoneNumber).append("%'");
}
if (StringUtils.isNotBlank(showName)) {
sb.append(" and du.show_name like '%").append(showName).append("%'");
}
if (StringUtils.isNotBlank(isMaster)) {
sb.append(" and du.is_master = #{ismaster}");
}
if (StringUtils.isNotBlank(isActiva)) {
if (isActiva.equals("1")) {
sb.append(" and d.active_code is not null");
} else {
sb.append(" and d.active_code is null");
}
}
if (StringUtils.isNotBlank(isLive)) {
sb.append(" and du.is_live = #{islive}");
}
sb.append(" ORDER BY du.create_time DESC limit ").append(start).append(",").append(length);
return sb.toString();
}
/**
* 获取摄像头和用户关系列表数量
*
* @param cameraId
* @param userId
* @param phoneNumber
* @param showName
* @param isMaster
* @param isActiva
* @param isLive
* @return
*/
public String getCameraUserListDataCount(String cameraId, @Param("userId") String userId, @Param("phoneNumber") String phoneNumber, String showName, @Param("ismaster") String isMaster, String isActiva, @Param("islive") String isLive) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT count(1) from tbl_device d LEFT JOIN tbl_device_user du ON d.device_id = du.device_id");
sb.append(" LEFT JOIN tbl_user u ON du.user_id = u.user_id WHERE d.is_camera = '1'");
if (StringUtils.isNotBlank(cameraId)) {
sb.append(" and d.camera_id like '%").append(cameraId).append("%'");
}
if (StringUtils.isNotBlank(userId)) {
sb.append(" and du.user_id = #{userId}");
}
if (StringUtils.isNotBlank(phoneNumber)) {
sb.append(" and u.phone_number like '%").append(phoneNumber).append("%'");
}
if (StringUtils.isNotBlank(showName)) {
sb.append(" and du.show_name like '%").append(showName).append("%'");
}
if (StringUtils.isNotBlank(isMaster)) {
sb.append(" and du.is_master = #{ismaster}");
}
if (StringUtils.isNotBlank(isActiva)) {
if (isActiva.equals("1")) {
sb.append(" and d.active_code is not null");
} else {
sb.append(" and d.active_code is null");
}
}
if (StringUtils.isNotBlank(isLive)) {
sb.append(" and du.is_live = #{islive}");
}
return sb.toString();
}
}
@@ -281,6 +281,16 @@ public interface Tbl_Device_Mapper {
@SelectProvider(type = Tbl_Device_MapperSql.class, method = "getAuthorizationByFactory")
List<Map> getAuthorizationByFactory(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter);
/**
* 获取电子厂授权统计总数
*
* @param createTimeBefore
* @param createTimeAfter
* @return
*/
@SelectProvider(type = Tbl_Device_MapperSql.class, method = "getAuthorizationCountByFactory")
Integer getAuthorizationCountByFactory(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter);
/**
* 获取对应电子厂对应时间的授权统计
*
@@ -291,4 +301,15 @@ public interface Tbl_Device_Mapper {
*/
@SelectProvider(type = Tbl_Device_MapperSql.class, method = "getAuthorizationByDate")
List<Map> getAuthorizationByDate(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter, @Param("factoryCode") String factoryCode);
/**
* 获取对应电子厂对应时间的授权统计总数
*
* @param createTimeBefore
* @param createTimeAfter
* @param factoryCode
* @return
*/
@SelectProvider(type = Tbl_Device_MapperSql.class, method = "getAuthorizationCountByDate")
Integer getAuthorizationCountByDate(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter, @Param("factoryCode") String factoryCode);
}
@@ -416,7 +416,7 @@ public class Tbl_Device_MapperSql {
sb.append(" SELECT count(1) from tbl_device_user u ");
sb.append(" LEFT JOIN tbl_device d ON u.device_id=d.device_id ");
sb.append(" LEFT JOIN tbl_device_statistics ts ON d.device_id = ts.device_id ");
sb.append(" where d.is_camera='0'");
sb.append(" where d.is_camera='0' and is_master = '1' ");
if (StringUtils.isNotBlank(factoryCode)) {
sb.append(" AND d.factory_code=#{factoryCode}");
}
@@ -453,6 +453,21 @@ public class Tbl_Device_MapperSql {
return sb.toString();
}
/**
* 获取电子厂授权统计
*
* @param createTimeBefore
* @param createTimeAfter
* @return
*/
public String getAuthorizationCountByFactory(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT count(1) FROM tbl_device d ");
sb.append(" LEFT JOIN tbl_device_statistics ts ON d.device_id=ts.device_id ");
sb.append(" WHERE d.is_blacklist='0' AND d.is_camera='0' AND date_format(ts.authorize_time,'%Y-%m-%d') BETWEEN #{createTimeBefore} AND #{createTimeAfter} ");
return sb.toString();
}
/**
* 获取对应电子厂对应时间的授权统计
*
@@ -469,4 +484,20 @@ public class Tbl_Device_MapperSql {
sb.append(" GROUP BY date ORDER BY ts.authorize_time DESC");
return sb.toString();
}
/**
* 获取对应电子厂对应时间的授权统计
*
* @param createTimeBefore
* @param createTimeAfter
* @param factoryCode
* @return
*/
public String getAuthorizationCountByDate(@Param("createTimeBefore") String createTimeBefore, @Param("createTimeAfter") String createTimeAfter, @Param("factoryCode") String factoryCode) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT count(1) FROM tbl_device d ");
sb.append(" LEFT JOIN tbl_device_statistics ts ON ts.device_id = d.device_id WHERE d.is_blacklist=0 AND d.is_camera='0'");
sb.append(" AND d.factory_code= #{factoryCode} AND date_format(ts.authorize_time,'%Y-%m-%d') BETWEEN #{createTimeBefore} AND #{createTimeAfter} ");
return sb.toString();
}
}
@@ -79,7 +79,12 @@ public class Tbl_Pay_Bill_MapperSql {
sb.append(" and factory_code = #{code}");
}
if (StringUtils.isNotBlank(billMonth)) {
sb.append(" AND #{date}=date_format(create_time,'%Y-%m')");
if (billMonth.length() >= 8) {
sb.append(" AND #{date}=date_format(create_time,'%Y-%m-%d')");
} else {
sb.append(" AND #{date}=date_format(create_time,'%Y-%m')");
}
}
sb.append(" ORDER BY create_time DESC limit ").append(start).append(",").append(length);
return sb.toString();
@@ -112,4 +112,41 @@ public interface Tbl_Push_List_Mapper {
@SelectProvider(type = Tbl_Push_List_MapperSql.class, method = "getPushListDataAllCount")
Integer getPushListDataAllCount();
/**
* 获取换水提醒数据
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @param start
* @param length
* @return
*/
@SelectProvider(type = Tbl_Push_List_MapperSql.class, method = "getRemindWaterList")
List<Map> getRemindWaterList(@Param("ispush") String ispush, @Param("phoneType") String phoneType, String sortField, String sortMode, String selectField, @Param("selectvalue") String selectvalue, Integer start, Integer length);
/**
* 获取换水提醒查询数量
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @return
*/
@SelectProvider(type = Tbl_Push_List_MapperSql.class, method = "getRemindWaterListCountBySelect")
Integer getRemindWaterListCountBySelect(@Param("ispush") String ispush, @Param("phoneType") String phoneType, String selectField, @Param("selectvalue") String selectvalue);
/**
* 获取换水提醒总数量
*
* @return
*/
@Select("SELECT COUNT(1) FROM TBL_TMP_PUSH_REMIND")
Integer getAllRemindWaterListCount();
}
@@ -147,4 +147,70 @@ public class Tbl_Push_List_MapperSql {
return sb.toString();
}
/**
* 获取换水提醒数据
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @param start
* @param length
* @return
*/
public String getRemindWaterList(@Param("ispush") String ispush, @Param("phoneType") String phoneType, String sortField, String sortMode, String selectField, @Param("selectvalue") String selectvalue, Integer start, Integer length) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT push_id pushId,device_id deviceId,user_id userId,phone_number phoneNumber,mac_address macAddress,show_name showName,login_type loginType,remind_date remindDate,remind_cycle remindCycle,is_push isPush from tbl_tmp_push_remind WHERE 1=1 ");
if (StringUtils.isNotBlank(ispush)) {
sb.append(" and is_push = #{ispush}");
}
if (StringUtils.isNotBlank(phoneType)) {
sb.append(" and login_type = #{phoneType}");
}
if (StringUtils.isNotBlank(selectvalue)) {
sb.append(" and ").append(selectField).append(" like '%").append(selectvalue).append("%'");
}
if (StringUtils.isNotBlank(sortField)) {
sb.append(" ORDER BY ").append(sortField);
} else {
sb.append(" ORDER BY push_id");
}
if (StringUtils.isNotBlank(sortMode)) {
sb.append(" ").append(sortMode);
} else {
sb.append(" DESC");
}
sb.append(" LIMIT ").append(start).append(",").append(length);
return sb.toString();
}
/**
* 获取换水提醒查询数量
*
* @param ispush
* @param phoneType
* @param sortField
* @param sortMode
* @param selectField
* @param selectvalue
* @return
*/
public String getRemindWaterListCountBySelect(@Param("ispush") String ispush, @Param("phoneType") String phoneType, String selectField, @Param("selectvalue") String selectvalue) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT Count(1) from tbl_tmp_push_remind WHERE 1=1 ");
if (StringUtils.isNotBlank(ispush)) {
sb.append(" and is_push = #{ispush}");
}
if (StringUtils.isNotBlank(phoneType)) {
sb.append(" and login_type = #{phoneType}");
}
if (StringUtils.isNotBlank(selectvalue)) {
sb.append(" and ").append(selectField).append("= #{selectvalue}");
}
return sb.toString();
}
}
@@ -143,13 +143,22 @@ public interface Tbl_User_Mapper {
@Select("SELECT COUNT(1) from tbl_security_user")
Integer getAllSecurity_user();
/**
* 验证用户名是否使用过
*
* @param username
* @return
*/
@Select("SELECT COUNT(1) FROM tbl_security_user WHERE username = #{username}")
Integer checkUserName(@Param("username") String username);
/**
* 插入一条后台用户
*
* @param tbl_Security_User
* @return
*/
@Insert("INSERT INTO tbl_security_user(username,password,email,role,rolename,status,code,create_time) VALUES (#{user.username}#{user.password}#{user.email}#{user.role}#{user.rolename}#{user.status}#{user.code},NOW())")
@Insert("INSERT INTO tbl_security_user(username,password,email,role,rolename,status,code,create_time) VALUES (#{user.username},#{user.password},#{user.email},#{user.role},#{user.rolename},#{user.status},#{user.code},NOW())")
Integer insertSecurityUser(@Param("user") Tbl_Security_User tbl_Security_User);
/**
@@ -225,7 +225,7 @@ public class Tbl_User_MapperSql {
*/
public String getSecurity_UsersList(@Param("role") String role, String username, Integer start, Integer length) {
StringBuilder sb = new StringBuilder();
sb.append("SELECT a.id,a.username,a.rolename,b.factory_name factoryname,a.`status` FROM tbl_security_user a LEFT JOIN tbl_factory_list b ON a.code = b.factory_code where 1=1");
sb.append("SELECT a.id,a.username,a.rolename,b.factory_name factoryname,a.`status`,a.role,a.code FROM tbl_security_user a LEFT JOIN tbl_factory_list b ON a.code = b.factory_code where 1=1");
if (StringUtils.isNotBlank(role)) {
sb.append(" and role = #{role}");
}
@@ -268,27 +268,27 @@ public class Tbl_User_MapperSql {
sb.append("UPDATE tbl_security_user set");
if (StringUtils.isNotBlank(tbl_Security_User.getCode())) {
sb.append(" code = #{user.code}");
sb.append(" code = #{user.code},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getEmail())) {
sb.append(" email = #{user.email}");
sb.append(" email = #{user.email},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getPassword())) {
sb.append(" password = #{user.password}");
sb.append(" password = #{user.password},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getRole())) {
sb.append(" role = #{user.role}");
sb.append(" role = #{user.role},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getRolename())) {
sb.append(" rolename = #{user.rolename}");
sb.append(" rolename = #{user.rolename},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getStatus())) {
sb.append(" status = #{user.status}");
sb.append(" status = #{user.status},");
}
if (StringUtils.isNotBlank(tbl_Security_User.getUsername())) {
sb.append(" username = #{user.username}");
if (sb.lastIndexOf(",") == sb.length() - 1) {
sb.deleteCharAt(sb.length() - 1);
}
sb.append(" WHERE id = #{user.id}");
sb.append(" WHERE username = #{user.username}");
return sb.toString();
}