JEECG_3.7.2 专业接口开发版发布

jeecg_3.7.2
zhangdaihao 8 years ago
parent 1b84cff14e
commit ec8128d3f6

@ -1,7 +1,7 @@
JEECG 微云快速开发平台
===============
当前最新版本: 3.7.1发布日期20170918
当前最新版本: 3.7.2发布日期20180125
前言:
-----------------------------------
@ -67,7 +67,7 @@ JEECG
* <b>技术点十七:</b>插件开发业务功能组件以插件方式集成平台也可以单独部署发发布有力支撑了SAAS云应用系统需求</br>
* JEECG V3.7, 经过了专业压力测试,性能测试,保证后台数据的准确性和页面访问速度</br>
* JEECG V3.7.2, 经过了专业压力测试,性能测试,保证后台数据的准确性和页面访问速度</br>
* 支持多种浏览器: IE, 火狐, Google 等</br>
* 支持数据库: Mysql,Oracle10g,Postgre,SqlServer等</br>
* 基础权限: 用户,角色,菜单权限,按钮权限,数据权限</br>
@ -79,7 +79,7 @@ JEECG
技术文档
-----------------------------------
* [JEECG_3.7新版开发工具](http://blog.csdn.net/zhangdaiscott/article/details/78072438)
* [JEECG_3.7.2新版开发工具](http://blog.csdn.net/zhangdaiscott/article/details/78072438)
* [JEECG 开发环境搭建入门](http://blog.csdn.net/zhangdaiscott/article/details/50915206)
* [JEECG maven本地仓库下载](http://git.oschina.net/jeecg/jeecg-local-maven)
* [JEECG 开发手册](http://git.oschina.net/jeecg/jeecg/attach_files)
@ -89,7 +89,7 @@ JEECG
* [JEECG 版本更新日志](http://www.jeecg.org/forum.php?mod=viewthread&tid=365&extra=page%3D1)
* JEECG官方Maven镜像配置 : [http://t.cn/RJCp7wO](http://t.cn/RJCp7wO)
* 在线演示地址:[http://demo.jeecg.org](http://demo.jeecg.org)
* JEECG 3.7.1 版本(非maven-myeclipse) 链接http://pan.baidu.com/s/1kVMKWuF 密码b8kf
技术交流
-----------------------------------

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -3,12 +3,12 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.jeecgframework</groupId>
<artifactId>jeecg</artifactId>
<version>3.7.1</version>
<version>3.7.2</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<codegenerate.version>3.6.2</codegenerate.version>
<minidao.version>1.6-SNAPSHOT</minidao.version>
<minidao.version>1.6.1</minidao.version>
<guava.version>16.0.1</guava.version>
<spring.version>4.0.9.RELEASE</spring.version>
@ -40,7 +40,7 @@
<dom4j.version>1.6.1</dom4j.version>
<slf4j.version>1.6.1</slf4j.version>
<log4j.version>1.2.16</log4j.version>
<classmate.version>0.5.4</classmate.version>
<classmate.version>1.1.0</classmate.version>
<commons-beanutils.version>1.7.0</commons-beanutils.version>
<commons-collections.version>3.2.1</commons-collections.version>
<commons-chain.version>1.2</commons-chain.version>
@ -69,11 +69,11 @@
<commons-dbcp.version>1.4</commons-dbcp.version>
<druid.version>0.2.9</druid.version>
<mysql.version>5.1.27</mysql.version>
<!-- sqlserver2005
<!-- sqlserver 2008 -->
<sqlserver.version>4.0</sqlserver.version>
-->
<!-- sqlserver2005 -->
<!-- sqlserver2005
<sqlserver.version>1.0.0</sqlserver.version>
-->
<!-- oracle -->
<ojdbc14.version>10.2.0.5.0</ojdbc14.version>
<!-- jtds for mssql/db2 -->
@ -99,6 +99,8 @@
<!--maven插件变量-->
<tomcat.version>2.2</tomcat.version>
<jetty.version>7.6.14.v20131031</jetty.version>
<spring-data-redis.version>1.6.2.RELEASE</spring-data-redis.version>
<jedis.version>2.9.0</jedis.version>
<webserver.port>8080</webserver.port>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
@ -106,7 +108,7 @@
<!-- 设定主仓库,按设定顺序进行查找 -->
<repositories>
<repository>
<id>nexus-aliyun</id>
<id>aliyun</id>
<name>aliyun Repository</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
@ -359,18 +361,18 @@
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<!-- sqlserver
<!-- sqlserver -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>${sqlserver.version}</version>
</dependency>-->
<dependency>
</dependency>
<!--<dependency>
<groupId>org.jeecgframework</groupId>
<artifactId>jdbc2005</artifactId>
<version>${sqlserver.version}</version>
<scope>runtime</scope>
</dependency>
</dependency>-->
<!-- oracle -->
<dependency>
<groupId>com.oracle</groupId>
@ -493,11 +495,11 @@
<version>${json-lib.version}</version>
<classifier>jdk15</classifier>
</dependency>
<!-- <dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson-lib.version}</version>
</dependency> -->
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
@ -870,11 +872,6 @@
<artifactId>kisso</artifactId>
<version>3.6.11</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.15</version>
</dependency>
<!-- kisso end -->
<!-- cxf webservice
@ -958,6 +955,54 @@
</dependency>
<!-- end 腾讯云-->
<!-- redis cache related.....start -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${spring-data-redis.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- redis cache related.....end -->
<!-- commons-net..ftp..start -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
<!-- commons-net..ftp...end -->
<!-- swagger start -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.1</version>
</dependency>
<!-- swagger end -->
<!-- JWT begin -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
<!-- JWT end -->
</dependencies>
<organization>
@ -966,7 +1011,22 @@
</organization>
<build>
<plugins>
<!-- 多war开发Maven支持-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceExcludes>%regex[^plug-in.+(?:(?&lt;!(?:-|\.)min)\.js)]
,%regex[^plug-in/accordion.+(?:(?&lt;!(?:-|\.)min)\.css)]
,%regex[^plug-in/bootstrap.+(?:(?&lt;!(?:-|\.)min)\.css)]
,%regex[^plug-in/easyui/themes/black.+(?:(?&lt;!(?:-|\.)min)\.css)]
,%regex[^plug-in/easyui/themes/default.+(?:(?&lt;!(?:-|\.)min)\.css)]
,%regex[^plug-in/Validform.+(?:(?&lt;!(?:-|\.)min)\.css)]
</warSourceExcludes>
</configuration>
</plugin>
<!-- tomcat插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
@ -1022,8 +1082,62 @@
</systemProperties>
</configuration>
</plugin>
</plugins>
<!-- 打包跳过单元测试 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<!--<plugin>
YUI Compressor Maven压缩插件
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<goals>
<goal>compress</goal>
</goals>
</execution>
</executions>
<configuration>
读取js,css文件采用UTF-8编码
<encoding>UTF-8</encoding>
不显示js可能的错误
<jswarn>false</jswarn>
若存在已压缩的文件,会先对比源文件是否有改动 有改动便压缩,无改动就不压缩
<force>false</force>
在指定的列号后插入新行
<linebreakpos>-1</linebreakpos>
压缩之前先执行聚合文件操作
<preProcessAggregates>true</preProcessAggregates>
压缩后保存文件后缀 无后缀
<nosuffix>true</nosuffix>
源目录,即需压缩的根目录
<sourceDirectory>src/main/webapp/plug-in</sourceDirectory>
压缩js和css文件
<includes>
<include>plug-in/**/*.js</include>
<include>plug-in/accordion/css/*.css</include>
<include>plug-in/bootstrap/css/*.css</include>
<include>plug-in/easyui/themes/black/*.css</include>
<include>plug-in/easyui/themes/default/*.css</include>
<include>plug-in/Validform/**/*.css</include>
</includes>
以下目录和文件不会被压缩
<excludes>
<exclude>plug-in/**/*.min.js</exclude>
<exclude>plug-in/**/*.dev.js</exclude>
<exclude>plug-in/*/css/*.min.css</exclude>
</excludes>
</configuration>
</plugin>
--></plugins>
<finalName>jeecg</finalName>
<resources>
<resource>

@ -1,69 +1,58 @@
package com.jeecg.black.controller;
import com.jeecg.black.entity.TsBlackListEntity;
import com.jeecg.black.service.TsBlackListServiceI;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.jeecgframework.core.beanvalidator.BeanValidators;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.common.TreeChildCount;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import java.io.OutputStream;
import org.jeecgframework.core.util.BrowserUtils;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.jwt.util.GsonUtil;
import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.TemplateExportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.vo.TemplateExcelConstants;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.jeecgframework.core.util.ResourceUtil;
import java.io.IOException;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import java.util.Map;
import java.util.HashMap;
import org.jeecgframework.core.util.ExceptionUtil;
import org.springframework.http.ResponseEntity;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.system.enums.InterfaceEnum;
import org.jeecgframework.web.system.pojo.base.InterfaceRuleDto;
import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.util.InterfaceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
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.bind.annotation.ResponseStatus;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.jeecgframework.core.beanvalidator.BeanValidators;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.net.URI;
import org.springframework.http.MediaType;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.jeecg.black.entity.TsBlackListEntity;
import com.jeecg.black.service.TsBlackListServiceI;
/**
* @Title: Controller
@ -75,6 +64,7 @@ import org.springframework.web.util.UriComponentsBuilder;
*/
@Controller
@RequestMapping("/tsBlackListController")
@Api(value = "测试用黑名单服务", description = "测试用黑名单服务接口", tags = "sysBlackAPI")
public class TsBlackListController extends BaseController {
/**
* Logger for this class
@ -336,71 +326,117 @@ public class TsBlackListController extends BaseController {
return j;
}
@ApiOperation(value = "黑名单列表数据", produces = "application/json", httpMethod = "GET")
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<TsBlackListEntity> list() {
List<TsBlackListEntity> listTsBlackLists=tsBlackListService.getList(TsBlackListEntity.class);
return listTsBlackLists;
public ResponseMessage<List<TsBlackListEntity>> list(HttpServletRequest request, HttpServletResponse response) {
InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_list);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}
CriteriaQuery query=new CriteriaQuery(TsBlackListEntity.class);
InterfaceUtil.installCriteriaQuery(query, interfaceRuleDto, InterfaceEnum.blacklist_list);
query.add();
List<TsBlackListEntity> listTsBlackLists = this.tsBlackListService.getListByCriteriaQuery(query, false);
return Result.success(listTsBlackLists);
}
@ApiOperation(value = "根据ID获取黑名单信息", notes = "根据ID获取黑名单信息", httpMethod = "GET", produces = "application/json")
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
public ResponseEntity<?> get(@PathVariable("id") String id) {
TsBlackListEntity task = tsBlackListService.get(TsBlackListEntity.class, id);
if (task == null) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
public ResponseMessage<?> get(@PathVariable("id") String id,HttpServletRequest request) {
InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_get);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}
return new ResponseEntity(task, HttpStatus.OK);
// 验证
if (StringUtils.isEmpty(id)) {
return Result.error("ID不能为空");
}
TsBlackListEntity task = tsBlackListService.get(TsBlackListEntity.class, id);
return Result.success(task);
}
@ApiOperation(value = "创建黑名单")
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseEntity<?> create(@RequestBody TsBlackListEntity tsBlackList, UriComponentsBuilder uriBuilder) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
public ResponseMessage<?> create(@RequestBody TsBlackListEntity tsBlackList,HttpServletRequest request) {
InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_add);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}
logger.info("create[{}]" + GsonUtil.toJson(tsBlackList));
//调用JSR303 Bean Validator进行校验如果出错返回1000错误码及json格式的错误信息.
Set<ConstraintViolation<TsBlackListEntity>> failures = validator.validate(tsBlackList);
if (!failures.isEmpty()) {
return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
return Result.errorValid(BeanValidators.extractPropertyAndMessage(failures));
}
//保存
try{
// 验证
// if (StringUtils.isEmpty(tsBlackList.getIp())) {
// return Result.error("IP不能为空");
// }
// 保存
try {
tsBlackListService.save(tsBlackList);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.NO_CONTENT);
return Result.error("黑名单保存失败");
}
//按照Restful风格约定创建指向新任务的url, 也可以直接返回id或对象.
String id = tsBlackList.getId();
URI uri = uriBuilder.path("/rest/tsBlackListController/" + id).build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.setLocation(uri);
return new ResponseEntity(headers, HttpStatus.CREATED);
return Result.success(tsBlackList);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> update(@RequestBody TsBlackListEntity tsBlackList) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
@ApiOperation(value = "更新黑名单", notes = "更新黑名单")
@RequestMapping(method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public ResponseMessage<?> update(@RequestBody TsBlackListEntity tsBlackList,HttpServletRequest request) {
InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_edit);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}
logger.info("update[{}]" + GsonUtil.toJson(tsBlackList));
//调用JSR303 Bean Validator进行校验如果出错返回1000错误码及json格式的错误信息.
Set<ConstraintViolation<TsBlackListEntity>> failures = validator.validate(tsBlackList);
if (!failures.isEmpty()) {
return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
return Result.errorValid(BeanValidators.extractPropertyAndMessage(failures));
}
//保存
try{
// 验证
if (StringUtils.isEmpty(tsBlackList.getId())) {
return Result.error("ID不能为空");
}
// 更新
try {
tsBlackListService.saveOrUpdate(tsBlackList);
} catch (Exception e) {
e.printStackTrace();
return new ResponseEntity(HttpStatus.NO_CONTENT);
return Result.error("黑名单更新失败");
}
//按Restful约定返回204状态码, 无内容. 也可以返回200状态码.
return new ResponseEntity(HttpStatus.NO_CONTENT);
return Result.success(tsBlackList);
}
@ApiOperation(value = "删除黑名单")
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void delete(@PathVariable("id") String id) {
tsBlackListService.deleteEntityById(TsBlackListEntity.class, id);
@ResponseBody
public ResponseMessage<?> delete(@PathVariable("id") String id,HttpServletRequest request) {
InterfaceRuleDto interfaceRuleDto = InterfaceUtil.getInterfaceRuleDto(request, InterfaceEnum.blacklist_delete);
if(interfaceRuleDto==null){
return Result.error("您没有该接口的权限!");
}
logger.info("delete[{}]" + id);
// 验证
if (StringUtils.isEmpty(id)) {
return Result.error("ID不能为空");
}
try {
tsBlackListService.deleteEntityById(TsBlackListEntity.class, id);
} catch (Exception e) {
e.printStackTrace();
return Result.error("黑名单删除失败");
}
return Result.success();
}
}

@ -1,21 +1,14 @@
package com.jeecg.black.entity;
import java.math.BigDecimal;
import java.util.Date;
import java.lang.String;
import java.lang.Double;
import java.lang.Integer;
import java.math.BigDecimal;
import javax.xml.soap.Text;
import java.sql.Blob;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.SequenceGenerator;
import org.jeecgframework.core.common.controller.CustomJsonDateDeserializer;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
@ -122,6 +115,7 @@ public class TsBlackListEntity implements java.io.Serializable {
*: java.util.Date
*@param: java.util.Date
*/
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
@ -165,6 +159,7 @@ public class TsBlackListEntity implements java.io.Serializable {
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
public java.util.Date getUpdateDate(){
return this.updateDate;
}

@ -1,11 +1,15 @@
package com.jeecg.demo.controller;
import java.io.IOException;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.Response;
import net.sf.json.JSONArray;
import org.apache.log4j.Logger;
@ -18,7 +22,13 @@ import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.common.model.json.TreeGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil;
import org.jeecgframework.core.util.*;
import org.jeecgframework.core.util.DateUtils;
import org.jeecgframework.core.util.JSONHelper;
import org.jeecgframework.core.util.MutiLangUtil;
import org.jeecgframework.core.util.MyClassLoader;
import org.jeecgframework.core.util.NumberComparator;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.tag.vo.datatable.SortDirection;
import org.jeecgframework.tag.vo.easyui.ComboTreeModel;
@ -35,7 +45,6 @@ import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@ -262,6 +271,13 @@ public class JeecgFormDemoController extends BaseController {
public AjaxJson saveUploadFile(String documentTitle,String filename,String swfpath){
AjaxJson ajaxJson = new AjaxJson();
try {
if(StringUtil.isEmpty(filename)){
ajaxJson.setSuccess(false);
ajaxJson.setMsg("未上传文件");
return ajaxJson;
}
TSTypegroup tsTypegroup=systemService.getTypeGroup("fieltype","文档分类");
TSType tsType = systemService.getType("files","附件", tsTypegroup);
TSDocument document = new TSDocument();
@ -328,14 +344,15 @@ public class JeecgFormDemoController extends BaseController {
Map<String, Object> attributes = new HashMap<String, Object>();
TSTypegroup tsTypegroup=systemService.getTypeGroup("fieltype","文档分类");
TSType tsType = systemService.getType("files","附件", tsTypegroup);
String fileKey = oConvertUtils.getString(request.getParameter("fileKey"));// 文件ID
String documentId = oConvertUtils.getString(request.getParameter("documentId"));// 文件ID
String documentTitle = oConvertUtils.getString(request.getParameter("documentTitle"));// 文件标题
if (StringUtil.isNotEmpty(fileKey)) {
document.setId(fileKey);
document = systemService.getEntity(TSDocument.class, fileKey);
if (StringUtil.isNotEmpty(documentId)) {
document.setId(documentId);
document = systemService.getEntity(TSDocument.class, documentId);
document.setDocumentTitle(documentTitle);
}
document.setSubclassname(MyClassLoader.getPackPath(document));
document.setCreatedate(DateUtils.gettimestamp());
document.setTSType(tsType);

@ -56,6 +56,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.jeecg.demo.dao.JeecgMinidaoDao;
import com.jeecg.demo.entity.JeecgDemoEntity;
import com.jeecg.demo.entity.JeecgDemoPage;
@ -132,6 +133,15 @@ public class JeecgListDemoController extends BaseController {
return new ModelAndView("com/jeecg/demo/taglist_mysearch");
}
/**
*
*/
@RequestMapping(params = "mysearchListDemo2")
public ModelAndView mysearchListDemo2(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/taglist_mysearch2");
}
/**
*
*
@ -141,7 +151,27 @@ public class JeecgListDemoController extends BaseController {
public ModelAndView broswerStatisticTabs(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/reportDemo");
}
/**
* Demo
* @param request
* @return
*/
@RequestMapping(params = "querysBuilder")
public ModelAndView querysBuilder(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/querysBuilderDemo");
}
/**
*
* @param request
* @return
*/
@RequestMapping(params = "goFormQuerysBuilder")
public ModelAndView goFormQuerysBuilder(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/form_querysBuilder");
}
/**
* datagrid
@ -322,6 +352,11 @@ public class JeecgListDemoController extends BaseController {
@RequestMapping(params = "datagrid")
public void datagrid(JeecgDemoEntity jeecgDemo,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(JeecgDemoEntity.class, dataGrid);
if(oConvertUtils.isNotEmpty(dataGrid.getSqlbuilder())) {
if(dataGrid.getSqlbuilder().indexOf("≤") > 0) {
dataGrid.setSqlbuilder(dataGrid.getSqlbuilder().replace("≤", "<="));
}
}
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jeecgDemo, request.getParameterMap());
try{
@ -346,7 +381,7 @@ public class JeecgListDemoController extends BaseController {
}
//dataGrid.setFooter("extField,salary,age,name:合计");
dataGrid.setFooter("salary,age,name:合计");
TagUtil.datagrid(response, dataGrid,extMap);
TagUtil.datagrid(response, dataGrid, extMap);
}
@RequestMapping(params = "addTab")
@ -367,6 +402,18 @@ public class JeecgListDemoController extends BaseController {
return new ModelAndView("com/jeecg/demo/jeecgDemo-check");
}
/**
*
* @param request
* @return
*/
@RequestMapping(params = "goBuilderDemo")
public ModelAndView goBuilderDemo( HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/superQueryDemo");
}
@RequestMapping(params = "doCheck")
@ResponseBody
@ -555,7 +602,7 @@ public class JeecgListDemoController extends BaseController {
*/
@RequestMapping(params = "upload")
public ModelAndView upload(HttpServletRequest req) {
req.setAttribute("controller_name","JeecgListDemoController");
req.setAttribute("controller_name","jeecgListDemoController");
return new ModelAndView("common/upload/pub_excel_upload");
}

@ -0,0 +1,981 @@
package com.jeecg.demo.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.commons.collections.CollectionUtils;
import org.apache.log4j.Logger;
import org.apache.poi.ss.formula.functions.T;
import org.jeecgframework.core.beanvalidator.BeanValidators;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ReflectHelper;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.cgform.entity.upload.CgUploadEntity;
import org.jeecgframework.web.cgform.service.config.CgFormFieldServiceI;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.jeecgframework.web.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
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.bind.annotation.ResponseStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UriComponentsBuilder;
import com.alibaba.fastjson.JSONObject;
import com.jeecg.demo.entity.JformOrderCustomerEntity;
import com.jeecg.demo.entity.JformOrderMainEntity;
import com.jeecg.demo.entity.JformOrderTicketEntity;
import com.jeecg.demo.page.JformOrderCustomerPage;
import com.jeecg.demo.page.JformOrderMainPage;
import com.jeecg.demo.service.JformOrderMainServiceI;
/**
* @Title: Controller
* @Description:
* @author onlineGenerator
* @date 2017-09-17 11:49:08
* @version V1.0
*
*/
@Controller
@RequestMapping("/jformOrderMainController")
@Api(value="orderMainRest",description="一对多订单管理",tags="JformOrderMainController")
public class JformOrderMainController extends BaseController {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(JformOrderMainController.class);
@Autowired
private JformOrderMainServiceI jformOrderMainService;
@Autowired
private SystemService systemService;
@Autowired
private Validator validator;
@Autowired
private CgFormFieldServiceI cgFormFieldService;
/**
*
*
* @return
*/
@RequestMapping(params = "list")
public ModelAndView list(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderMainList");
}
/**
*
*
* @return
*/
@RequestMapping(params = "mainlist")
public ModelAndView mainlist(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderMainListBase");
}
/**
*
*
* @return
*/
@RequestMapping(params = "customerlist")
public ModelAndView customerlist(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderCustomerListBase");
}
/**
* easyui AJAX
*
* @param request
* @param response
* @param dataGrid
* @param user
*/
@RequestMapping(params = "datagrid")
public void datagrid(JformOrderMainEntity jformOrderMain,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(JformOrderMainEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jformOrderMain);
try{
//自定义追加查询条件
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
cq.add();
this.jformOrderMainService.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid);
}
/**
* easyui AJAX
*
* @param request
* @param response
* @param dataGrid
* @param user
*/
@RequestMapping(params = "customerDatagrid")
public void customerDatagrid(JformOrderCustomerEntity jformCustomer,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(JformOrderCustomerEntity.class, dataGrid);
if(jformCustomer.getFkId() == null || "".equals(jformCustomer.getFkId())){
}else{
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jformCustomer);
cq.add();
this.jformOrderMainService.getDataGridReturn(cq, true);
}
TagUtil.datagrid(response, dataGrid);
}
/**
*
*
* @return
*/
@RequestMapping(params = "doDel")
@ResponseBody
public AjaxJson doDel(JformOrderMainEntity jformOrderMain, HttpServletRequest request) {
AjaxJson j = new AjaxJson();
jformOrderMain = systemService.getEntity(JformOrderMainEntity.class, jformOrderMain.getId());
String message = "订单主信息删除成功";
try{
jformOrderMainService.delMain(jformOrderMain);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "订单主信息删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "doBatchDel")
@ResponseBody
public AjaxJson doBatchDel(String ids,HttpServletRequest request){
AjaxJson j = new AjaxJson();
String message = "订单主信息删除成功";
try{
for(String id:ids.split(",")){
JformOrderMainEntity jformOrderMain = systemService.getEntity(JformOrderMainEntity.class,
id
);
jformOrderMainService.delMain(jformOrderMain);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}
}catch(Exception e){
e.printStackTrace();
message = "订单主信息删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doAdd")
@ResponseBody
public AjaxJson doAdd(JformOrderMainEntity jformOrderMain,JformOrderMainPage jformOrderMainPage, HttpServletRequest request) {
List<JformOrderCustomerEntity> jformOrderCustomerList = jformOrderMainPage.getJformOrderCustomerList();
List<JformOrderTicketEntity> jformOrderTicketList = jformOrderMainPage.getJformOrderTicketList();
AjaxJson j = new AjaxJson();
String message = "添加成功";
try{
jformOrderMainService.addMain(jformOrderMain, jformOrderCustomerList,jformOrderTicketList);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "订单主信息添加失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
j.setObj(jformOrderMain);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doUpdate")
@ResponseBody
public AjaxJson doUpdate(JformOrderMainEntity jformOrderMain,JformOrderMainPage jformOrderMainPage, HttpServletRequest request) {
List<JformOrderCustomerEntity> jformOrderCustomerList = jformOrderMainPage.getJformOrderCustomerList();
List<JformOrderTicketEntity> jformOrderTicketList = jformOrderMainPage.getJformOrderTicketList();
AjaxJson j = new AjaxJson();
String message = "更新成功";
try{
jformOrderMainService.updateMain(jformOrderMain, jformOrderCustomerList,jformOrderTicketList);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "更新订单主信息失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "goAdd")
public ModelAndView goAdd(JformOrderMainEntity jformOrderMain, HttpServletRequest req) {
if (StringUtil.isNotEmpty(jformOrderMain.getId())) {
jformOrderMain = jformOrderMainService.getEntity(JformOrderMainEntity.class, jformOrderMain.getId());
req.setAttribute("jformOrderMainPage", jformOrderMain);
}
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderMain-add");
}
/**
*
*
* @return
*/
@RequestMapping(params = "goUpdate")
public ModelAndView goUpdate(JformOrderMainEntity jformOrderMain, HttpServletRequest req) {
if (StringUtil.isNotEmpty(jformOrderMain.getId())) {
jformOrderMain = jformOrderMainService.getEntity(JformOrderMainEntity.class, jformOrderMain.getId());
req.setAttribute("jformOrderMainPage", jformOrderMain);
}
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderMain-update");
}
/**
* [JformOrderMain]
*
* @return
*/
@RequestMapping(params = "jformOrderCustomerList")
public ModelAndView jformOrderCustomerList(JformOrderMainEntity jformOrderMain, HttpServletRequest req) {
//===================================================================================
//获取参数
Object id0 = jformOrderMain.getId();
//===================================================================================
//查询-JformOrderMain子表
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
try{
List<JformOrderCustomerEntity> jformOrderCustomerEntityList = systemService.findHql(hql0,id0);
req.setAttribute("jformOrderCustomerList", jformOrderCustomerEntityList);
}catch(Exception e){
logger.info(e.getMessage());
}
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderCustomerList");
}
/**
* [JformOrderMain]
*
* @return
*/
@RequestMapping(params = "jformOrderTicketList")
public ModelAndView jformOrderTicketList(JformOrderMainEntity jformOrderMain, HttpServletRequest req) {
//===================================================================================
//获取参数
Object id1 = jformOrderMain.getId();
//===================================================================================
//查询-JformOrderMain子表
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
try{
List<JformOrderTicketEntity> jformOrderTicketEntityList = systemService.findHql(hql1,id1);
req.setAttribute("jformOrderTicketList", jformOrderTicketEntityList);
}catch(Exception e){
logger.info(e.getMessage());
}
return new ModelAndView("com/jeecg/demo/orderOne2Many/jformOrderTicketList");
}
/**
* excel
*
* @param request
* @param response
*/
@RequestMapping(params = "exportXls")
public String exportXls(JformOrderMainEntity jformOrderMain,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,ModelMap map) {
CriteriaQuery cq = new CriteriaQuery(JformOrderMainEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jformOrderMain);
try{
//自定义追加查询条件
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
cq.add();
List<JformOrderMainEntity> list=this.jformOrderMainService.getListByCriteriaQuery(cq, false);
List<JformOrderMainPage> pageList=new ArrayList<JformOrderMainPage>();
if(list!=null&&list.size()>0){
for(JformOrderMainEntity entity:list){
try{
JformOrderMainPage page=new JformOrderMainPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
List<JformOrderCustomerEntity> jformOrderCustomerEntityList = systemService.findHql(hql0,id0);
page.setJformOrderCustomerList(jformOrderCustomerEntityList);
Object id1 = entity.getId();
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
List<JformOrderTicketEntity> jformOrderTicketEntityList = systemService.findHql(hql1,id1);
page.setJformOrderTicketList(jformOrderTicketEntityList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
map.put(NormalExcelConstants.FILE_NAME,"订单主信息");
map.put(NormalExcelConstants.CLASS,JformOrderMainPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("订单主信息列表", "导出人:Jeecg",
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,pageList);
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
* excel
* @param request
* @param
* @return
*/
@RequestMapping(params = "importExcel", method = RequestMethod.POST)
@ResponseBody
public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
AjaxJson j = new AjaxJson();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(2);
params.setNeedSave(true);
try {
List<JformOrderMainPage> list = ExcelImportUtil.importExcel(file.getInputStream(), JformOrderMainPage.class, params);
JformOrderMainEntity entity1=null;
for (JformOrderMainPage page : list) {
entity1=new JformOrderMainEntity();
MyBeanUtils.copyBeanNotNull2Bean(page,entity1);
jformOrderMainService.addMain(entity1, page.getJformOrderCustomerList(),page.getJformOrderTicketList());
}
j.setMsg("文件导入成功!");
} catch (Exception e) {
j.setMsg("文件导入失败!");
logger.error(ExceptionUtil.getExceptionMessage(e));
}finally{
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return j;
}
/**
* excel 使
*/
@RequestMapping(params = "exportXlsByT")
public String exportXlsByT(ModelMap map) {
map.put(NormalExcelConstants.FILE_NAME,"订单主信息");
map.put(NormalExcelConstants.CLASS,JformOrderMainPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("订单主信息列表", "导出人:"+ ResourceUtil.getSessionUser().getRealName(),
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,new ArrayList());
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
*
*
* @return
*/
@RequestMapping(params = "upload")
public ModelAndView upload(HttpServletRequest req) {
req.setAttribute("controller_name", "jformOrderMainController");
return new ModelAndView("common/upload/pub_excel_upload");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="订单列表信息",produces="application/json",httpMethod="GET")
public List<JformOrderMainPage> list() {
List<JformOrderMainEntity> list= jformOrderMainService.getList(JformOrderMainEntity.class);
List<JformOrderMainPage> pageList=new ArrayList<JformOrderMainPage>();
if(list!=null&&list.size()>0){
for(JformOrderMainEntity entity:list){
try{
JformOrderMainPage page=new JformOrderMainPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
Object id1 = entity.getId();
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
List<JformOrderCustomerEntity> jformOrderCustomerOldList = this.jformOrderMainService.findHql(hql0,id0);
page.setJformOrderCustomerList(jformOrderCustomerOldList);
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
List<JformOrderTicketEntity> jformOrderTicketOldList = this.jformOrderMainService.findHql(hql1,id1);
page.setJformOrderTicketList(jformOrderTicketOldList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
return pageList;
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="根据ID获取订单信息",notes="根据ID获取订单信息",httpMethod="GET",produces="application/json")
public ResponseEntity<?> get(@PathVariable("id") String id) {
JformOrderMainEntity task = jformOrderMainService.get(JformOrderMainEntity.class, id);
if (task == null) {
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
JformOrderMainPage page = new JformOrderMainPage();
try {
MyBeanUtils.copyBeanNotNull2Bean(task, page);
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
List<JformOrderCustomerEntity> jformOrderCustomerOldList = this.jformOrderMainService.findHql(hql0,id);
page.setJformOrderCustomerList(jformOrderCustomerOldList);
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
List<JformOrderTicketEntity> jformOrderTicketOldList = this.jformOrderMainService.findHql(hql1,id);
page.setJformOrderTicketList(jformOrderTicketOldList);
} catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity(page, HttpStatus.OK);
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="创建订单")
public ResponseEntity<?> create(@ApiParam(value="订单信息")@RequestBody JformOrderMainPage jformOrderMainPage, UriComponentsBuilder uriBuilder) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<JformOrderMainPage>> failures = validator.validate(jformOrderMainPage);
if (!failures.isEmpty()) {
return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
}
//保存
List<JformOrderCustomerEntity> jformOrderCustomerList = jformOrderMainPage.getJformOrderCustomerList();
List<JformOrderTicketEntity> jformOrderTicketList = jformOrderMainPage.getJformOrderTicketList();
JformOrderMainEntity jformOrderMain = new JformOrderMainEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(jformOrderMainPage,jformOrderMain);
}catch(Exception e){
logger.info(e.getMessage());
}
jformOrderMainService.addMain(jformOrderMain, jformOrderCustomerList,jformOrderTicketList);
//按照Restful风格约定创建指向新任务的url, 也可以直接返回id或对象.
String id = jformOrderMainPage.getId();
URI uri = uriBuilder.path("/rest/jformOrderMainController/" + id).build().toUri();
HttpHeaders headers = new HttpHeaders();
headers.setLocation(uri);
return new ResponseEntity(headers, HttpStatus.CREATED);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="更新订单",notes="更新订单")
public ResponseEntity<?> update(@ApiParam(value="订单信息")@RequestBody JformOrderMainPage jformOrderMainPage) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<JformOrderMainPage>> failures = validator.validate(jformOrderMainPage);
if (!failures.isEmpty()) {
return new ResponseEntity(BeanValidators.extractPropertyAndMessage(failures), HttpStatus.BAD_REQUEST);
}
//保存
List<JformOrderCustomerEntity> jformOrderCustomerList = jformOrderMainPage.getJformOrderCustomerList();
List<JformOrderTicketEntity> jformOrderTicketList = jformOrderMainPage.getJformOrderTicketList();
JformOrderMainEntity jformOrderMain = new JformOrderMainEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(jformOrderMainPage,jformOrderMain);
}catch(Exception e){
logger.info(e.getMessage());
}
jformOrderMainService.updateMain(jformOrderMain, jformOrderCustomerList,jformOrderTicketList);
//按Restful约定返回204状态码, 无内容. 也可以返回200状态码.
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
@ApiOperation(value="删除订单")
public void delete(@PathVariable("id") String id) {
JformOrderMainEntity jformOrderMain = jformOrderMainService.get(JformOrderMainEntity.class, id);
jformOrderMainService.delMain(jformOrderMain);
}
/**
*
*
* @param id jformOrderMainid
*/
@RequestMapping(params = "getFiles")
@ResponseBody
public AjaxJson getFiles(String id){
List<CgUploadEntity> uploadBeans = cgFormFieldService.findByProperty(CgUploadEntity.class, "cgformId", id);
List<Map<String,Object>> files = new ArrayList<Map<String,Object>>(0);
for(CgUploadEntity b:uploadBeans){
String title = b.getAttachmenttitle();//附件名
String fileKey = b.getId();//附件主键
String path = b.getRealpath();//附件路径
String field = b.getCgformField();//表单中作为附件控件的字段
Map<String, Object> file = new HashMap<String, Object>();
file.put("title", title);
file.put("fileKey", fileKey);
file.put("path", path);
file.put("field", field==null?"":field);
files.add(file);
}
AjaxJson j = new AjaxJson();
j.setObj(files);
return j;
}
/**
* URL
* @param request
* @return
*/
@RequestMapping(params = "orderList")
public ModelAndView orderList(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/orderDemo/jform-order-list");
}
/**
* URL
* @param request
* @return
*/
@RequestMapping(params = "goAddOrder")
public ModelAndView addOrder(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/orderDemo/jform-order-add");
}
/**
* URL
* @param jformOrderMain
* @param request
* @return
*/
@RequestMapping(params = "goEditOrder")
public ModelAndView editOrder(JformOrderMainEntity jformOrderMain,HttpServletRequest request) {
if (StringUtil.isNotEmpty(jformOrderMain.getId())) {
//获取参数
String fkId = jformOrderMain.getId();
jformOrderMain = jformOrderMainService.getEntity(JformOrderMainEntity.class, fkId);
request.setAttribute("order", jformOrderMain);
}
return new ModelAndView("com/jeecg/demo/orderDemo/jform-order-edit");
}
/**
*
* @param jformOrderCustomerEntity
* @param req
* @return
*/
@ResponseBody
@RequestMapping(params = "customerList")
public JSONObject customerList(JformOrderCustomerEntity jformOrderCustomerEntity) {
String id0 = jformOrderCustomerEntity.getFkId();
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
return dataFactory(hql0,id0,jformOrderCustomerEntity);
}
/**
*
* @param jformOrderTicketEntity
* @param req
* @return
*/
@ResponseBody
@RequestMapping(params = "ticketList")
public JSONObject ticketList(JformOrderTicketEntity jformOrderTicketEntity) {
String id1 = jformOrderTicketEntity.getFckId();
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
return dataFactory(hql1,id1,jformOrderTicketEntity);
}
/**
*
* @param jformOrderMain
* @param request
* @param dataGrid
* @return
*/
@ResponseBody
@RequestMapping(params = "orderDataGrid")
public JSONObject fgrid(JformOrderMainEntity jformOrderMain,HttpServletRequest request, DataGrid dataGrid) {
return dataFatory(JformOrderMainEntity.class, jformOrderMain, request, dataGrid);
}
/**
*
* @param jformCustomer
* @param request
* @param dataGrid
* @return
*/
@ResponseBody
@RequestMapping(params = "customerDataGrid")
public JSONObject customerFGrid(JformOrderCustomerEntity jformCustomer,HttpServletRequest request, DataGrid dataGrid) {
JSONObject jo = null;
if(jformCustomer.getFkId() == null || "".equals(jformCustomer.getFkId())){
}else{
jo = dataFatory(JformOrderCustomerEntity.class, jformCustomer, request, dataGrid);
}
return jo;
}
/**
* FineUI
* @param clazz
* @param object
* @param request
* @param response
* @param dataGrid
* @return
* json
*/
public JSONObject dataFatory(Class<?> clazz,Object object,HttpServletRequest request, DataGrid dataGrid){
String pageIndex = request.getParameter("pageIndex");
if (StringUtil.isNotEmpty(pageIndex)) {
dataGrid.setPage(Integer.valueOf(pageIndex)+1);
}
String pageSize = request.getParameter("pageSize");
if (StringUtil.isNotEmpty(pageSize)) {
dataGrid.setRows(Integer.valueOf(pageSize));
}
String databaseSorting = request.getParameter("databaseSorting");
if (null != databaseSorting && Boolean.valueOf(databaseSorting)) {
String sortField = request.getParameter("sortField");
if (StringUtil.isNotEmpty(sortField)) {
dataGrid.setField(sortField);
}
String sortDirection = request.getParameter("sortDirection");
if (StringUtil.isNotEmpty(sortDirection)) {
dataGrid.setSort(sortDirection);
}
}
CriteriaQuery cq = new CriteriaQuery(clazz, dataGrid);
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, object);
JSONObject jo = null;
try{
//自定义追加查询条件
cq.add();
this.jformOrderMainService.getDataGridReturn(cq, true);
String[] fieldNames = ReflectHelper.getFiledName(object);
jo = new JSONObject();
jo.put("recordCount", dataGrid.getTotal());
jo.put("fields", fieldNames);
List<String[]> data = new ArrayList<String[]>();
for(Object entity:dataGrid.getResults()){
String[] values = new String[fieldNames.length];
for(int i=0;i<fieldNames.length;i++){
Object o = ReflectHelper.getFieldValueByName(fieldNames[i], entity);
values[i] = o == null ? "" : o.toString();
}
data.add(values);
}
jo.put("data", data);
}catch (Exception e) {
e.printStackTrace();
}
return jo;
}
/**
* FineUI
* @param hql
* @param id
* @param object
* @return
* json
*/
public JSONObject dataFactory(String hql,Object id,Object object){
JSONObject jo = null;
try{
List<T> ticketList = systemService.findHql(hql,id);
String[] fieldNames = ReflectHelper.getFiledName(object);
jo = new JSONObject();
jo.put("recordCount", ticketList.size());
jo.put("fields", fieldNames);
List<String[]> data = new ArrayList<String[]>();
for(Object entity: ticketList){
String[] values = new String[fieldNames.length];
for(int i=0;i<fieldNames.length;i++){
Object o = ReflectHelper.getFieldValueByName(fieldNames[i], entity);
values[i] = o == null ? "" : o.toString();
}
data.add(values);
}
jo.put("data", data);
//System.out.println(JSON.toJSONString(jo,true));
}catch(Exception e){
logger.info(e.getMessage());
}
return jo;
}
/**
*
* @return
*/
@ResponseBody
@RequestMapping(params = "doUpdateCustomer")
public AjaxJson doUpdateCustomer(JformOrderMainEntity jformOrderMain,JformOrderMainPage jformOrderMainPage, HttpServletRequest request) {
List<JformOrderCustomerEntity> jformOrderCustomerList = jformOrderMainPage.getJformOrderCustomerList();
AjaxJson j = new AjaxJson();
String message = "更新成功";
try{
jformOrderMainService.updateCustomers(jformOrderCustomerList);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
j.setSuccess(false);
message = "更新失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
* @param page
* @return
*/
@RequestMapping(params = "saveRows")
@ResponseBody
public AjaxJson saveRows(JformOrderCustomerPage page){
String message = "操作成功!";
List<JformOrderCustomerEntity> demos=page.getDemos();
AjaxJson j = new AjaxJson();
if(CollectionUtils.isNotEmpty(demos)){
for(JformOrderCustomerEntity jeecgDemo:demos){
if (StringUtil.isNotEmpty(jeecgDemo.getId())) {
JformOrderCustomerEntity t =this.systemService.get(JformOrderCustomerEntity.class, jeecgDemo.getId());
try {
MyBeanUtils.copyBeanNotNull2Bean(jeecgDemo, t);
systemService.saveOrUpdate(t);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
} catch (Exception e) {
e.printStackTrace();
}
} else {
try {
//jeecgDemo.setStatus("0");
systemService.save(jeecgDemo);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return j;
}
/**
*
* @param req
* @return
*/
@RequestMapping(params = "departSelect")
public String departSelect(HttpServletRequest req) {
req.setAttribute("defaultName", req.getParameter("name"));
return "com/jeecg/demo/orderOne2Many/departSelect";
}
/**
*
* @param request
* @param response
* @return
*/
@RequestMapping(params = "getDepartInfo3")
@ResponseBody
public AjaxJson getDepartInfo3(HttpServletRequest request, HttpServletResponse response){
AjaxJson j = new AjaxJson();
net.sf.json.JSONArray jsonArray = new net.sf.json.JSONArray();
//String parentid = request.getParameter("parentid");
String sql = "select id,departname as name,ifnull(parentdepartid,0) as ppp_id,org_code as code from t_s_depart where 1=1 ";
List<Map<String,Object>> dateList = this.systemService.findForJdbc(sql);
Map<String,Map<String,Object>> dataMap = new HashMap<String,Map<String,Object>>();
//TODO 不应该每次都需要查询 建议从缓存中取到所有的list
String name = request.getParameter("name");
if(oConvertUtils.isNotEmpty(name)){
for (Map<String, Object> map : dateList) {
String temp = map.get("name").toString();
String id = map.get("id").toString();
if(temp.indexOf(name)>=0){
Object pid = map.get("ppp_id");
if(temp.equals(name)){
map.put("checked", true);
}
//判断是否有子节点 可用isleaf判断
sql = "select count(1) from t_s_depart t where t.parentdepartid = ?";
long count = this.systemService.getCountForJdbcParam(sql, new Object[]{id});
if(count>0){
map.put("isParent",true);
}
dataMap.put(id, map);
upwardQueryParents(dataMap, dateList, pid==null?"":pid.toString());
}
}
jsonArray = net.sf.json.JSONArray.fromObject(dataMap.values());
}else{
jsonArray = net.sf.json.JSONArray.fromObject(dateList);
}
j.setMsg(jsonArray.toString().replace("ppp_id", "pId"));
return j;
}
/**
*
* @param request
* @param response
* @return
*/
@RequestMapping(params = "getSubContent")
@ResponseBody
public AjaxJson getSubContent(HttpServletRequest request, HttpServletResponse response){
AjaxJson j = new AjaxJson();
String parentid = request.getParameter("parentid");
List<TSDepart> tSDeparts = new ArrayList<TSDepart>();
StringBuffer hql = new StringBuffer(" from TSDepart t where 1=1 ");
if(oConvertUtils.isNotEmpty(parentid)){
TSDepart dePart = this.systemService.getEntity(TSDepart.class, parentid);
hql.append(" and TSPDepart = ?");
tSDeparts = this.systemService.findHql(hql.toString(), dePart);
}
//TODO 不应该每次都需要查询 建议从缓存中取到所有的list 再筛选
List<Map<String,Object>> dateList = new ArrayList<Map<String,Object>>();
if(tSDeparts.size()>0){
Map<String,Object> map = null;
String sql = null;
Object[] params = null;
for(TSDepart depart:tSDeparts){
map = new HashMap<String,Object>();
map.put("id", depart.getId());
map.put("name", depart.getDepartname());
map.put("code",depart.getOrgCode());
TSDepart pdepart = depart.getTSPDepart();
if(pdepart!=null){
map.put("pId", pdepart.getId());
} else{
map.put("pId", "0");
}
//根据id判断是否有子节点
sql = "select count(1) from t_s_depart t where t.parentdepartid = ?";
params = new Object[]{depart.getId()};
long count = this.systemService.getCountForJdbcParam(sql, params);
if(count>0){
map.put("isParent",true);
}
dateList.add(map);
}
}
net.sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(dateList);
j.setMsg(jsonArray.toString());
return j;
}
/**
*
*/
private void upwardQueryParents(Map<String,Map<String,Object>> dataMap,List<Map<String,Object>> dateList,String pid){
String pid_next = null;
for (Map<String, Object> map : dateList) {
String id = map.get("id").toString();
if(pid.equals(id)){
pid_next = map.get("ppp_id").toString();
dataMap.put(id, map);
break;
}
}
if(pid_next!=null && !pid_next.equals("0")){
upwardQueryParents(dataMap, dateList, pid_next);
}
}
}

@ -0,0 +1,498 @@
package com.jeecg.demo.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Restrictions;
import org.jeecgframework.core.beanvalidator.BeanValidators;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result;
import org.jeecgframework.p3.core.util.oConvertUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
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.bind.annotation.ResponseStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UriComponentsBuilder;
import com.alibaba.fastjson.JSONArray;
import com.jeecg.demo.entity.JfromOrderEntity;
import com.jeecg.demo.entity.JfromOrderLineEntity;
import com.jeecg.demo.page.JfromOrderPage;
import com.jeecg.demo.service.JfromOrderServiceI;
import com.jeecg.superquery.util.SuperQueryUtil;
/**
* @Title: Controller
* @Description:
* @author onlineGenerator
* @date 2017-12-14 13:36:56
* @version V1.0
*
*/
@Api(value="JfromOrder",description="订单列表",tags="jfromOrderController")
@Controller
@RequestMapping("/jfromOrderController")
public class JfromOrderController extends BaseController {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(JfromOrderController.class);
@Autowired
private JfromOrderServiceI jfromOrderService;
@Autowired
private SystemService systemService;
@Autowired
private Validator validator;
/**
*
*
* @return
*/
@RequestMapping(params = "list")
public ModelAndView list(HttpServletRequest request) {
return new ModelAndView("com/jeecg/demo/jfromOrderList");
}
/**
* easyui AJAX
*
* @param request
* @param response
* @param dataGrid
* @param user
*/
@RequestMapping(params = "datagrid")
public void datagrid(JfromOrderEntity jfromOrder,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(JfromOrderEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jfromOrder);
try{
String sql = SuperQueryUtil.getComplxSuperQuerySQL(request);
if(oConvertUtils.isNotEmpty(sql)) {
cq.add(Restrictions.sqlRestriction(" id in ("+sql+")"));
}
//自定义追加查询条件
}catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
cq.add();
this.jfromOrderService.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid);
}
/**
*
*
* @return
*/
@RequestMapping(params = "doDel")
@ResponseBody
public AjaxJson doDel(JfromOrderEntity jfromOrder, HttpServletRequest request) {
AjaxJson j = new AjaxJson();
jfromOrder = systemService.getEntity(JfromOrderEntity.class, jfromOrder.getId());
String message = "订单列表删除成功";
try{
jfromOrderService.delMain(jfromOrder);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "订单列表删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "doBatchDel")
@ResponseBody
public AjaxJson doBatchDel(String ids,HttpServletRequest request){
AjaxJson j = new AjaxJson();
String message = "订单列表删除成功";
try{
for(String id:ids.split(",")){
JfromOrderEntity jfromOrder = systemService.getEntity(JfromOrderEntity.class,
id
);
jfromOrderService.delMain(jfromOrder);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}
}catch(Exception e){
e.printStackTrace();
message = "订单列表删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doAdd")
@ResponseBody
public AjaxJson doAdd(JfromOrderEntity jfromOrder,JfromOrderPage jfromOrderPage, HttpServletRequest request) {
List<JfromOrderLineEntity> jfromOrderLineList = jfromOrderPage.getJfromOrderLineList();
AjaxJson j = new AjaxJson();
String message = "添加成功";
try{
jfromOrderService.addMain(jfromOrder, jfromOrderLineList);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "订单列表添加失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doUpdate")
@ResponseBody
public AjaxJson doUpdate(JfromOrderEntity jfromOrder,JfromOrderPage jfromOrderPage, HttpServletRequest request) {
List<JfromOrderLineEntity> jfromOrderLineList = jfromOrderPage.getJfromOrderLineList();
AjaxJson j = new AjaxJson();
String message = "更新成功";
try{
jfromOrderService.updateMain(jfromOrder, jfromOrderLineList);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "更新订单列表失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "goAdd")
public ModelAndView goAdd(JfromOrderEntity jfromOrder, HttpServletRequest req) {
if (StringUtil.isNotEmpty(jfromOrder.getId())) {
jfromOrder = jfromOrderService.getEntity(JfromOrderEntity.class, jfromOrder.getId());
req.setAttribute("jfromOrderPage", jfromOrder);
}
return new ModelAndView("com/jeecg/demo/jfromOrder-add");
}
/**
*
*
* @return
*/
@RequestMapping(params = "goUpdate")
public ModelAndView goUpdate(JfromOrderEntity jfromOrder, HttpServletRequest req) {
if (StringUtil.isNotEmpty(jfromOrder.getId())) {
jfromOrder = jfromOrderService.getEntity(JfromOrderEntity.class, jfromOrder.getId());
req.setAttribute("jfromOrderPage", jfromOrder);
}
return new ModelAndView("com/jeecg/demo/jfromOrder-update");
}
/**
* []
*
* @return
*/
@RequestMapping(params = "jfromOrderLineList")
public ModelAndView jfromOrderLineList(JfromOrderEntity jfromOrder, HttpServletRequest req) {
//===================================================================================
//获取参数
Object id0 = jfromOrder.getId();
//===================================================================================
//查询-订单表体
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
try{
List<JfromOrderLineEntity> jfromOrderLineEntityList = systemService.findHql(hql0,id0);
req.setAttribute("jfromOrderLineList", jfromOrderLineEntityList);
}catch(Exception e){
logger.info(e.getMessage());
}
return new ModelAndView("com/jeecg/demo/jfromOrderLineList");
}
/**
* excel
*
* @param request
* @param response
*/
@RequestMapping(params = "exportXls")
public String exportXls(JfromOrderEntity jfromOrder,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,ModelMap map) {
CriteriaQuery cq = new CriteriaQuery(JfromOrderEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, jfromOrder);
try{
//自定义追加查询条件
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
cq.add();
List<JfromOrderEntity> list=this.jfromOrderService.getListByCriteriaQuery(cq, false);
List<JfromOrderPage> pageList=new ArrayList<JfromOrderPage>();
if(list!=null&&list.size()>0){
for(JfromOrderEntity entity:list){
try{
JfromOrderPage page=new JfromOrderPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
List<JfromOrderLineEntity> jfromOrderLineEntityList = systemService.findHql(hql0,id0);
page.setJfromOrderLineList(jfromOrderLineEntityList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
map.put(NormalExcelConstants.FILE_NAME,"订单列表");
map.put(NormalExcelConstants.CLASS,JfromOrderPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("订单列表列表", "导出人:Jeecg",
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,pageList);
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
* excel
* @param request
* @param
* @return
*/
@RequestMapping(params = "importExcel", method = RequestMethod.POST)
@ResponseBody
public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
AjaxJson j = new AjaxJson();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(2);
params.setNeedSave(true);
try {
List<JfromOrderPage> list = ExcelImportUtil.importExcel(file.getInputStream(), JfromOrderPage.class, params);
JfromOrderEntity entity1=null;
for (JfromOrderPage page : list) {
entity1=new JfromOrderEntity();
MyBeanUtils.copyBeanNotNull2Bean(page,entity1);
jfromOrderService.addMain(entity1, page.getJfromOrderLineList());
}
j.setMsg("文件导入成功!");
} catch (Exception e) {
j.setMsg("文件导入失败!");
logger.error(ExceptionUtil.getExceptionMessage(e));
}finally{
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return j;
}
/**
* excel 使
*/
@RequestMapping(params = "exportXlsByT")
public String exportXlsByT(ModelMap map) {
map.put(NormalExcelConstants.FILE_NAME,"订单列表");
map.put(NormalExcelConstants.CLASS,JfromOrderPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("订单列表列表", "导出人:"+ ResourceUtil.getSessionUser().getRealName(),
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,new ArrayList());
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
*
*
* @return
*/
@RequestMapping(params = "upload")
public ModelAndView upload(HttpServletRequest req) {
req.setAttribute("controller_name", "jfromOrderController");
return new ModelAndView("common/upload/pub_excel_upload");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="订单列表列表信息",produces="application/json",httpMethod="GET")
public ResponseMessage<List<JfromOrderPage>> list() {
List<JfromOrderEntity> list= jfromOrderService.getList(JfromOrderEntity.class);
List<JfromOrderPage> pageList=new ArrayList<JfromOrderPage>();
if(list!=null&&list.size()>0){
for(JfromOrderEntity entity:list){
try{
JfromOrderPage page=new JfromOrderPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
List<JfromOrderLineEntity> jfromOrderLineOldList = this.jfromOrderService.findHql(hql0,id0);
page.setJfromOrderLineList(jfromOrderLineOldList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
return Result.success(pageList);
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="根据ID获取订单列表信息",notes="根据ID获取订单列表信息",httpMethod="GET",produces="application/json")
public ResponseMessage<?> get(@ApiParam(required=true,name="id",value="ID")@PathVariable("id") String id) {
JfromOrderEntity task = jfromOrderService.get(JfromOrderEntity.class, id);
if (task == null) {
return Result.error("根据ID获取订单列表信息为空");
}
JfromOrderPage page = new JfromOrderPage();
try {
MyBeanUtils.copyBeanNotNull2Bean(task, page);
Object id0 = task.getId();
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
List<JfromOrderLineEntity> jfromOrderLineOldList = this.jfromOrderService.findHql(hql0,id0);
page.setJfromOrderLineList(jfromOrderLineOldList);
} catch (Exception e) {
e.printStackTrace();
}
return Result.success(page);
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="创建订单列表")
public ResponseMessage<?> create(@ApiParam(name="订单列表对象")@RequestBody JfromOrderPage jfromOrderPage, UriComponentsBuilder uriBuilder) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<JfromOrderPage>> failures = validator.validate(jfromOrderPage);
if (!failures.isEmpty()) {
return Result.error(JSONArray.toJSONString(BeanValidators.extractPropertyAndMessage(failures)));
}
//保存
List<JfromOrderLineEntity> jfromOrderLineList = jfromOrderPage.getJfromOrderLineList();
JfromOrderEntity jfromOrder = new JfromOrderEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(jfromOrderPage,jfromOrder);
}catch(Exception e){
logger.info(e.getMessage());
return Result.error("保存订单列表失败");
}
jfromOrderService.addMain(jfromOrder, jfromOrderLineList);
return Result.success(jfromOrder);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="更新订单列表",notes="更新订单列表")
public ResponseMessage<?> update(@RequestBody JfromOrderPage jfromOrderPage) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<JfromOrderPage>> failures = validator.validate(jfromOrderPage);
if (!failures.isEmpty()) {
return Result.error(JSONArray.toJSONString(BeanValidators.extractPropertyAndMessage(failures)));
}
//保存
List<JfromOrderLineEntity> jfromOrderLineList = jfromOrderPage.getJfromOrderLineList();
JfromOrderEntity jfromOrder = new JfromOrderEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(jfromOrderPage,jfromOrder);
}catch(Exception e){
logger.info(e.getMessage());
return Result.error("订单列表更新失败");
}
jfromOrderService.updateMain(jfromOrder, jfromOrderLineList);
//按Restful约定返回204状态码, 无内容. 也可以返回200状态码.
return Result.success();
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
@ApiOperation(value="删除订单列表")
public ResponseMessage<?> delete(@ApiParam(name="id",value="ID",required=true)@PathVariable("id") String id) {
logger.info("delete[{}]" + id);
// 验证
if (StringUtils.isEmpty(id)) {
return Result.error("ID不能为空");
}
try {
JfromOrderEntity jfromOrder = jfromOrderService.get(JfromOrderEntity.class, id);
jfromOrderService.delMain(jfromOrder);
} catch (Exception e) {
e.printStackTrace();
return Result.error("订单列表删除失败");
}
return Result.success();
}
}

@ -0,0 +1,171 @@
package com.jeecg.demo.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description: JformOrderMain
* @author onlineGenerator
* @date 2017-09-17 11:49:08
* @version V1.0
*
*/
@Entity
@Table(name = "jform_order_customer", schema = "")
@SuppressWarnings("serial")
public class JformOrderCustomerEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**客户名*/
@Excel(name="客户名",width=15)
private java.lang.String name;
/**单价*/
@Excel(name="单价",width=15)
private java.lang.Double money;
/**性别*/
@Excel(name="性别",width=15,dicCode="sex")
private java.lang.String sex;
/**电话*/
@Excel(name="电话",width=15)
private java.lang.String telphone;
/**身份证扫描件*/
@Excel(name="身份证扫描件",width=15)
private java.lang.String sfPic;
/**外键*/
private java.lang.String fkId;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="NAME",nullable=true,length=100)
public java.lang.String getName(){
return this.name;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setName(java.lang.String name){
this.name = name;
}
/**
*: java.lang.Double
*@return: java.lang.Double
*/
@Column(name ="MONEY",nullable=true,scale=2,length=10)
public java.lang.Double getMoney(){
return this.money;
}
/**
*: java.lang.Double
*@param: java.lang.Double
*/
public void setMoney(java.lang.Double money){
this.money = money;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SEX",nullable=true,length=4)
public java.lang.String getSex(){
return this.sex;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSex(java.lang.String sex){
this.sex = sex;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="TELPHONE",nullable=true,length=32)
public java.lang.String getTelphone(){
return this.telphone;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setTelphone(java.lang.String telphone){
this.telphone = telphone;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SF_PIC",nullable=true,length=500)
public java.lang.String getSfPic(){
return this.sfPic;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSfPic(java.lang.String sfPic){
this.sfPic = sfPic;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="FK_ID",nullable=false,length=36)
public java.lang.String getFkId(){
return this.fkId;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setFkId(java.lang.String fkId){
this.fkId = fkId;
}
}

@ -0,0 +1,151 @@
package com.jeecg.demo.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-09-17 11:49:08
* @version V1.0
*
*/
@Entity
@Table(name = "jform_order_main", schema = "")
@SuppressWarnings("serial")
public class JformOrderMainEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**订单号*/
@Excel(name="订单号",width=15)
private java.lang.String orderCode;
/**订单日期*/
@Excel(name="订单日期",width=15,format = "yyyy-MM-dd")
private java.util.Date orderDate;
/**订单金额*/
@Excel(name="订单金额",width=15)
private java.lang.Double orderMoney;
/**备注*/
@Excel(name="备注",width=15)
private java.lang.String content;
/**订单扫描件*/
@Excel(name="订单扫描件",width=15,dicCode="sex")
private java.lang.String ctype;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="ORDER_CODE",nullable=true,length=50)
public java.lang.String getOrderCode(){
return this.orderCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setOrderCode(java.lang.String orderCode){
this.orderCode = orderCode;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="ORDER_DATE",nullable=true,length=20)
public java.util.Date getOrderDate(){
return this.orderDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setOrderDate(java.util.Date orderDate){
this.orderDate = orderDate;
}
/**
*: java.lang.Double
*@return: java.lang.Double
*/
@Column(name ="ORDER_MONEY",nullable=true,scale=3,length=10)
public java.lang.Double getOrderMoney(){
return this.orderMoney;
}
/**
*: java.lang.Double
*@param: java.lang.Double
*/
public void setOrderMoney(java.lang.Double orderMoney){
this.orderMoney = orderMoney;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CONTENT",nullable=true,length=500)
public java.lang.String getContent(){
return this.content;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setContent(java.lang.String content){
this.content = content;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CTYPE",nullable=true,length=500)
public java.lang.String getCtype(){
return this.ctype;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCtype(java.lang.String ctype){
this.ctype = ctype;
}
}

@ -0,0 +1,108 @@
package com.jeecg.demo.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description: JformOrderMain
* @author onlineGenerator
* @date 2017-09-17 11:49:08
* @version V1.0
*
*/
@Entity
@Table(name = "jform_order_ticket", schema = "")
@SuppressWarnings("serial")
public class JformOrderTicketEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**航班号*/
@Excel(name="航班号",width=15)
private java.lang.String ticketCode;
/**航班时间*/
@Excel(name="航班时间",width=15,format = "yyyy-MM-dd")
private java.util.Date tickectDate;
/**外键*/
private java.lang.String fckId;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="TICKET_CODE",nullable=false,length=100)
public java.lang.String getTicketCode(){
return this.ticketCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setTicketCode(java.lang.String ticketCode){
this.ticketCode = ticketCode;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="TICKECT_DATE",nullable=true,length=10)
public java.util.Date getTickectDate(){
return this.tickectDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setTickectDate(java.util.Date tickectDate){
this.tickectDate = tickectDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="FCK_ID",nullable=false,length=36)
public java.lang.String getFckId(){
return this.fckId;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setFckId(java.lang.String fckId){
this.fckId = fckId;
}
}

@ -0,0 +1,362 @@
package com.jeecg.demo.entity;
import java.math.BigDecimal;
import java.util.Date;
import java.lang.String;
import java.lang.Double;
import java.lang.Integer;
import java.math.BigDecimal;
import javax.xml.soap.Text;
import java.sql.Blob;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.SequenceGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-14 13:36:56
* @version V1.0
*
*/
@Entity
@Table(name = "jfrom_order", schema = "")
@SuppressWarnings("serial")
public class JfromOrderEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**收货人*/
@Excel(name="收货人",width=15)
private java.lang.String receiverName;
/**联系电话*/
@Excel(name="联系电话",width=15)
private java.lang.String receiverMobile;
/**收货省*/
@Excel(name="收货省",width=15)
private java.lang.String receiverState;
/**收货市*/
@Excel(name="收货市",width=15)
private java.lang.String receiverCity;
/**收货区*/
@Excel(name="收货区",width=15)
private java.lang.String receiverDistrict;
/**收货地址*/
@Excel(name="收货地址",width=15)
private java.lang.String receiverAddress;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="BPM_STATUS",nullable=true,length=32)
public java.lang.String getBpmStatus(){
return this.bpmStatus;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setBpmStatus(java.lang.String bpmStatus){
this.bpmStatus = bpmStatus;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_NAME",nullable=true,length=56)
public java.lang.String getReceiverName(){
return this.receiverName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverName(java.lang.String receiverName){
this.receiverName = receiverName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_MOBILE",nullable=true,length=32)
public java.lang.String getReceiverMobile(){
return this.receiverMobile;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverMobile(java.lang.String receiverMobile){
this.receiverMobile = receiverMobile;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_STATE",nullable=true,length=32)
public java.lang.String getReceiverState(){
return this.receiverState;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverState(java.lang.String receiverState){
this.receiverState = receiverState;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_CITY",nullable=true,length=32)
public java.lang.String getReceiverCity(){
return this.receiverCity;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverCity(java.lang.String receiverCity){
this.receiverCity = receiverCity;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_DISTRICT",nullable=true,length=32)
public java.lang.String getReceiverDistrict(){
return this.receiverDistrict;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverDistrict(java.lang.String receiverDistrict){
this.receiverDistrict = receiverDistrict;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="RECEIVER_ADDRESS",nullable=true,length=128)
public java.lang.String getReceiverAddress(){
return this.receiverAddress;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverAddress(java.lang.String receiverAddress){
this.receiverAddress = receiverAddress;
}
}

@ -0,0 +1,340 @@
package com.jeecg.demo.entity;
import java.math.BigDecimal;
import java.util.Date;
import java.lang.String;
import java.lang.Double;
import java.lang.Integer;
import java.math.BigDecimal;
import javax.xml.soap.Text;
import java.sql.Blob;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.SequenceGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-14 13:36:56
* @version V1.0
*
*/
@Entity
@Table(name = "jfrom_order_line", schema = "")
@SuppressWarnings("serial")
public class JfromOrderLineEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**订单ID*/
private java.lang.String orderid;
/**商品名称*/
@Excel(name="商品名称",width=15)
private java.lang.String itemName;
/**商品数量*/
@Excel(name="商品数量",width=15)
private java.lang.Integer qty;
/**商品价格*/
@Excel(name="商品价格",width=15)
private java.math.BigDecimal price;
/**金额*/
@Excel(name="金额",width=15)
private java.math.BigDecimal amount;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="BPM_STATUS",nullable=true,length=32)
public java.lang.String getBpmStatus(){
return this.bpmStatus;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setBpmStatus(java.lang.String bpmStatus){
this.bpmStatus = bpmStatus;
}
/**
*: java.lang.String
*@return: java.lang.String ID
*/
@Column(name ="ORDERID",nullable=true,length=36)
public java.lang.String getOrderid(){
return this.orderid;
}
/**
*: java.lang.String
*@param: java.lang.String ID
*/
public void setOrderid(java.lang.String orderid){
this.orderid = orderid;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="ITEM_NAME",nullable=true,length=128)
public java.lang.String getItemName(){
return this.itemName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setItemName(java.lang.String itemName){
this.itemName = itemName;
}
/**
*: java.lang.Integer
*@return: java.lang.Integer
*/
@Column(name ="QTY",nullable=true,length=32)
public java.lang.Integer getQty(){
return this.qty;
}
/**
*: java.lang.Integer
*@param: java.lang.Integer
*/
public void setQty(java.lang.Integer qty){
this.qty = qty;
}
/**
*: java.math.BigDecimal
*@return: java.math.BigDecimal
*/
@Column(name ="PRICE",nullable=true,length=32)
public java.math.BigDecimal getPrice(){
return this.price;
}
/**
*: java.math.BigDecimal
*@param: java.math.BigDecimal
*/
public void setPrice(java.math.BigDecimal price){
this.price = price;
}
/**
*: java.math.BigDecimal
*@return: java.math.BigDecimal
*/
@Column(name ="AMOUNT",nullable=true,length=32)
public java.math.BigDecimal getAmount(){
return this.amount;
}
/**
*: java.math.BigDecimal
*@param: java.math.BigDecimal
*/
public void setAmount(java.math.BigDecimal amount){
this.amount = amount;
}
}

@ -0,0 +1,23 @@
package com.jeecg.demo.page;
import java.util.List;
import com.jeecg.demo.entity.JformOrderCustomerEntity;
/**
*
*/
public class JformOrderCustomerPage {
private List<JformOrderCustomerEntity> demos;
public List<JformOrderCustomerEntity> getDemos() {
return demos;
}
public void setDemos(List<JformOrderCustomerEntity> demos) {
this.demos = demos;
}
}

@ -0,0 +1,152 @@
package com.jeecg.demo.page;
import java.util.ArrayList;
import java.util.List;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import com.jeecg.demo.entity.JformOrderCustomerEntity;
import com.jeecg.demo.entity.JformOrderTicketEntity;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-09-17 11:49:08
* @version V1.0
*
*/
public class JformOrderMainPage implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**订单号*/
@Excel(name="订单号")
private java.lang.String orderCode;
/**订单日期*/
@Excel(name="订单日期",format = "yyyy-MM-dd")
private java.util.Date orderDate;
/**订单金额*/
@Excel(name="订单金额")
private java.lang.Double orderMoney;
/**备注*/
@Excel(name="备注")
private java.lang.String content;
/**订单扫描件*/
@Excel(name="订单扫描件")
private java.lang.String ctype;
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getOrderCode(){
return this.orderCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setOrderCode(java.lang.String orderCode){
this.orderCode = orderCode;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
public java.util.Date getOrderDate(){
return this.orderDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setOrderDate(java.util.Date orderDate){
this.orderDate = orderDate;
}
/**
*: java.lang.Double
*@return: java.lang.Double
*/
public java.lang.Double getOrderMoney(){
return this.orderMoney;
}
/**
*: java.lang.Double
*@param: java.lang.Double
*/
public void setOrderMoney(java.lang.Double orderMoney){
this.orderMoney = orderMoney;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getContent(){
return this.content;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setContent(java.lang.String content){
this.content = content;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getCtype(){
return this.ctype;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCtype(java.lang.String ctype){
this.ctype = ctype;
}
/**保存-JformOrderMain子表*/
@ExcelCollection(name="订单客户信息")
private List<JformOrderCustomerEntity> jformOrderCustomerList = new ArrayList<JformOrderCustomerEntity>();
public List<JformOrderCustomerEntity> getJformOrderCustomerList() {
return jformOrderCustomerList;
}
public void setJformOrderCustomerList(List<JformOrderCustomerEntity> jformOrderCustomerList) {
this.jformOrderCustomerList = jformOrderCustomerList;
}
/**保存-JformOrderMain子表*/
@ExcelCollection(name="订单机票信息")
private List<JformOrderTicketEntity> jformOrderTicketList = new ArrayList<JformOrderTicketEntity>();
public List<JformOrderTicketEntity> getJformOrderTicketList() {
return jformOrderTicketList;
}
public void setJformOrderTicketList(List<JformOrderTicketEntity> jformOrderTicketList) {
this.jformOrderTicketList = jformOrderTicketList;
}
}

@ -0,0 +1,320 @@
package com.jeecg.demo.page;
import com.jeecg.demo.entity.JfromOrderEntity;
import com.jeecg.demo.entity.JfromOrderLineEntity;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.ArrayList;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.SequenceGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-14 13:36:56
* @version V1.0
*
*/
public class JfromOrderPage implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**流程状态*/
private java.lang.String bpmStatus;
/**收货人*/
@Excel(name="收货人")
private java.lang.String receiverName;
/**联系电话*/
@Excel(name="联系电话")
private java.lang.String receiverMobile;
/**收货省*/
@Excel(name="收货省")
private java.lang.String receiverState;
/**收货市*/
@Excel(name="收货市")
private java.lang.String receiverCity;
/**收货区*/
@Excel(name="收货区")
private java.lang.String receiverDistrict;
/**收货地址*/
@Excel(name="收货地址")
private java.lang.String receiverAddress;
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getBpmStatus(){
return this.bpmStatus;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setBpmStatus(java.lang.String bpmStatus){
this.bpmStatus = bpmStatus;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverName(){
return this.receiverName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverName(java.lang.String receiverName){
this.receiverName = receiverName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverMobile(){
return this.receiverMobile;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverMobile(java.lang.String receiverMobile){
this.receiverMobile = receiverMobile;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverState(){
return this.receiverState;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverState(java.lang.String receiverState){
this.receiverState = receiverState;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverCity(){
return this.receiverCity;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverCity(java.lang.String receiverCity){
this.receiverCity = receiverCity;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverDistrict(){
return this.receiverDistrict;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverDistrict(java.lang.String receiverDistrict){
this.receiverDistrict = receiverDistrict;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getReceiverAddress(){
return this.receiverAddress;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setReceiverAddress(java.lang.String receiverAddress){
this.receiverAddress = receiverAddress;
}
/**保存-订单表体*/
@ExcelCollection(name="订单表体")
private List<JfromOrderLineEntity> jfromOrderLineList = new ArrayList<JfromOrderLineEntity>();
public List<JfromOrderLineEntity> getJfromOrderLineList() {
return jfromOrderLineList;
}
public void setJfromOrderLineList(List<JfromOrderLineEntity> jfromOrderLineList) {
this.jfromOrderLineList = jfromOrderLineList;
}
}

@ -0,0 +1,50 @@
package com.jeecg.demo.service;
import com.jeecg.demo.entity.JformOrderMainEntity;
import com.jeecg.demo.entity.JformOrderCustomerEntity;
import com.jeecg.demo.entity.JformOrderTicketEntity;
import java.util.List;
import org.jeecgframework.core.common.service.CommonService;
import java.io.Serializable;
public interface JformOrderMainServiceI extends CommonService{
public <T> void delete(T entity);
/**
*
*
*/
public void addMain(JformOrderMainEntity jformOrderMain,
List<JformOrderCustomerEntity> jformOrderCustomerList,List<JformOrderTicketEntity> jformOrderTicketList) ;
/**
*
*
*/
public void updateMain(JformOrderMainEntity jformOrderMain,
List<JformOrderCustomerEntity> jformOrderCustomerList,List<JformOrderTicketEntity> jformOrderTicketList);
public void delMain (JformOrderMainEntity jformOrderMain);
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(JformOrderMainEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(JformOrderMainEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(JformOrderMainEntity t);
/**
*
* @param jformOrderCustomerList
*/
public void updateCustomers(List<JformOrderCustomerEntity> jformOrderCustomerList);
}

@ -0,0 +1,44 @@
package com.jeecg.demo.service;
import com.jeecg.demo.entity.JfromOrderEntity;
import com.jeecg.demo.entity.JfromOrderLineEntity;
import java.util.List;
import org.jeecgframework.core.common.service.CommonService;
import java.io.Serializable;
public interface JfromOrderServiceI extends CommonService{
public <T> void delete(T entity);
/**
*
*
*/
public void addMain(JfromOrderEntity jfromOrder,
List<JfromOrderLineEntity> jfromOrderLineList) ;
/**
*
*
*/
public void updateMain(JfromOrderEntity jfromOrder,
List<JfromOrderLineEntity> jfromOrderLineList);
public void delMain (JfromOrderEntity jfromOrder);
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(JfromOrderEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(JfromOrderEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(JfromOrderEntity t);
}

@ -0,0 +1,225 @@
package com.jeecg.demo.service.impl;
import com.jeecg.demo.service.JformOrderMainServiceI;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import com.jeecg.demo.entity.JformOrderMainEntity;
import com.jeecg.demo.entity.JformOrderCustomerEntity;
import com.jeecg.demo.entity.JformOrderTicketEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import java.util.ArrayList;
import java.util.UUID;
import java.io.Serializable;
@Service("jformOrderMainService")
@Transactional
public class JformOrderMainServiceImpl extends CommonServiceImpl implements JformOrderMainServiceI {
public <T> void delete(T entity) {
super.delete(entity);
//执行删除操作配置的sql增强
this.doDelSql((JformOrderMainEntity)entity);
}
public void addMain(JformOrderMainEntity jformOrderMain,
List<JformOrderCustomerEntity> jformOrderCustomerList,List<JformOrderTicketEntity> jformOrderTicketList){
//保存主信息
this.save(jformOrderMain);
/**保存-JformOrderMain子表*/
for(JformOrderCustomerEntity jformOrderCustomer:jformOrderCustomerList){
//外键设置
jformOrderCustomer.setFkId(jformOrderMain.getId());
this.save(jformOrderCustomer);
}
/**保存-JformOrderMain子表*/
for(JformOrderTicketEntity jformOrderTicket:jformOrderTicketList){
//外键设置
jformOrderTicket.setFckId(jformOrderMain.getId());
this.save(jformOrderTicket);
}
//执行新增操作配置的sql增强
this.doAddSql(jformOrderMain);
}
public void updateMain(JformOrderMainEntity jformOrderMain,
List<JformOrderCustomerEntity> jformOrderCustomerList,List<JformOrderTicketEntity> jformOrderTicketList) {
//保存主表信息
if(StringUtil.isNotEmpty(jformOrderMain.getId())){
try {
JformOrderMainEntity temp = findUniqueByProperty(JformOrderMainEntity.class, "id", jformOrderMain.getId());
MyBeanUtils.copyBeanNotNull2Bean(jformOrderMain, temp);
this.saveOrUpdate(temp);
} catch (Exception e) {
e.printStackTrace();
}
}else{
this.saveOrUpdate(jformOrderMain);
}
//===================================================================================
//获取参数
Object id0 = jformOrderMain.getId();
Object id1 = jformOrderMain.getId();
//===================================================================================
//1.查询出数据库的明细数据-JformOrderMain子表
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
List<JformOrderCustomerEntity> jformOrderCustomerOldList = this.findHql(hql0,id0);
//2.筛选更新明细数据-JformOrderMain子表
//TODO authorXueLin for: 客户数据全删完size == 0
if(jformOrderCustomerList != null){// && jformOrderCustomerList.size() > 0
for(JformOrderCustomerEntity oldE : jformOrderCustomerOldList){
boolean isUpdate = false;
for(JformOrderCustomerEntity sendE : jformOrderCustomerList){
//需要更新的明细数据-JformOrderMain子表
if(oldE.getId().equals(sendE.getId())){
try {
MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
this.saveOrUpdate(oldE);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
isUpdate = true;
break;
}
}
if(!isUpdate){
//如果数据库存在的明细,前台没有传递过来则是删除-JformOrderMain子表
super.delete(oldE);
}
}
//3.持久化新增的数据-JformOrderMain子表
for(JformOrderCustomerEntity jformOrderCustomer:jformOrderCustomerList){
if(oConvertUtils.isEmpty(jformOrderCustomer.getId())){
//外键设置
jformOrderCustomer.setFkId(jformOrderMain.getId());
this.save(jformOrderCustomer);
}
}
}
//===================================================================================
//1.查询出数据库的明细数据-JformOrderMain子表
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
List<JformOrderTicketEntity> jformOrderTicketOldList = this.findHql(hql1,id1);
//2.筛选更新明细数据-JformOrderMain子表
//TODO authorXueLin for: 机票信息全删完 size == 0
if(jformOrderTicketList != null){// && jformOrderTicketList.size() > 0
for(JformOrderTicketEntity oldE : jformOrderTicketOldList){
boolean isUpdate = false;
for(JformOrderTicketEntity sendE : jformOrderTicketList){
//需要更新的明细数据-JformOrderMain子表
if(oldE.getId().equals(sendE.getId())){
try {
MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
this.saveOrUpdate(oldE);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
isUpdate= true;
break;
}
}
if(!isUpdate){
//如果数据库存在的明细,前台没有传递过来则是删除-JformOrderMain子表
super.delete(oldE);
}
}
//3.持久化新增的数据-JformOrderMain子表
for(JformOrderTicketEntity jformOrderTicket:jformOrderTicketList){
if(oConvertUtils.isEmpty(jformOrderTicket.getId())){
//外键设置
jformOrderTicket.setFckId(jformOrderMain.getId());
this.save(jformOrderTicket);
}
}
}
//执行更新操作配置的sql增强
this.doUpdateSql(jformOrderMain);
}
public void delMain(JformOrderMainEntity jformOrderMain) {
//删除主表信息
this.delete(jformOrderMain);
//===================================================================================
//获取参数
Object id0 = jformOrderMain.getId();
Object id1 = jformOrderMain.getId();
//===================================================================================
//删除-JformOrderMain子表
String hql0 = "from JformOrderCustomerEntity where 1 = 1 AND fK_ID = ? ";
List<JformOrderCustomerEntity> jformOrderCustomerOldList = this.findHql(hql0,id0);
this.deleteAllEntitie(jformOrderCustomerOldList);
//===================================================================================
//删除-JformOrderMain子表
String hql1 = "from JformOrderTicketEntity where 1 = 1 AND fCK_ID = ? ";
List<JformOrderTicketEntity> jformOrderTicketOldList = this.findHql(hql1,id1);
this.deleteAllEntitie(jformOrderTicketOldList);
}
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(JformOrderMainEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(JformOrderMainEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(JformOrderMainEntity t){
return true;
}
/**
* sql
* @param sql
* @return
*/
public String replaceVal(String sql,JformOrderMainEntity t){
sql = sql.replace("#{id}",String.valueOf(t.getId()));
sql = sql.replace("#{order_code}",String.valueOf(t.getOrderCode()));
sql = sql.replace("#{order_date}",String.valueOf(t.getOrderDate()));
sql = sql.replace("#{order_money}",String.valueOf(t.getOrderMoney()));
sql = sql.replace("#{content}",String.valueOf(t.getContent()));
sql = sql.replace("#{ctype}",String.valueOf(t.getCtype()));
sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
return sql;
}
/**
*
* @param jformOrderCustomerList
*/
public void updateCustomers(List<JformOrderCustomerEntity> jformOrderCustomerList){
for(JformOrderCustomerEntity jformOrderCustomer:jformOrderCustomerList){
this.saveOrUpdate(jformOrderCustomer);
}
}
}

@ -0,0 +1,169 @@
package com.jeecg.demo.service.impl;
import com.jeecg.demo.service.JfromOrderServiceI;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import com.jeecg.demo.entity.JfromOrderEntity;
import com.jeecg.demo.entity.JfromOrderLineEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import java.util.ArrayList;
import java.util.UUID;
import java.io.Serializable;
@Service("jfromOrderService")
@Transactional
public class JfromOrderServiceImpl extends CommonServiceImpl implements JfromOrderServiceI {
public <T> void delete(T entity) {
super.delete(entity);
//执行删除操作配置的sql增强
this.doDelSql((JfromOrderEntity)entity);
}
public void addMain(JfromOrderEntity jfromOrder,
List<JfromOrderLineEntity> jfromOrderLineList){
//保存主信息
this.save(jfromOrder);
/**保存-订单表体*/
for(JfromOrderLineEntity jfromOrderLine:jfromOrderLineList){
//外键设置
jfromOrderLine.setOrderid(jfromOrder.getId());
this.save(jfromOrderLine);
}
//执行新增操作配置的sql增强
this.doAddSql(jfromOrder);
}
public void updateMain(JfromOrderEntity jfromOrder,
List<JfromOrderLineEntity> jfromOrderLineList) {
//保存主表信息
if(StringUtil.isNotEmpty(jfromOrder.getId())){
try {
JfromOrderEntity temp = findUniqueByProperty(JfromOrderEntity.class, "id", jfromOrder.getId());
MyBeanUtils.copyBeanNotNull2Bean(jfromOrder, temp);
this.saveOrUpdate(temp);
} catch (Exception e) {
e.printStackTrace();
}
}else{
this.saveOrUpdate(jfromOrder);
}
//===================================================================================
//获取参数
Object id0 = jfromOrder.getId();
//===================================================================================
//1.查询出数据库的明细数据-订单表体
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
List<JfromOrderLineEntity> jfromOrderLineOldList = this.findHql(hql0,id0);
//2.筛选更新明细数据-订单表体
if(jfromOrderLineList!=null&&jfromOrderLineList.size()>0){
for(JfromOrderLineEntity oldE:jfromOrderLineOldList){
boolean isUpdate = false;
for(JfromOrderLineEntity sendE:jfromOrderLineList){
//需要更新的明细数据-订单表体
if(oldE.getId().equals(sendE.getId())){
try {
MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
this.saveOrUpdate(oldE);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
isUpdate= true;
break;
}
}
if(!isUpdate){
//如果数据库存在的明细,前台没有传递过来则是删除-订单表体
super.delete(oldE);
}
}
//3.持久化新增的数据-订单表体
for(JfromOrderLineEntity jfromOrderLine:jfromOrderLineList){
if(oConvertUtils.isEmpty(jfromOrderLine.getId())){
//外键设置
jfromOrderLine.setOrderid(jfromOrder.getId());
this.save(jfromOrderLine);
}
}
}
//执行更新操作配置的sql增强
this.doUpdateSql(jfromOrder);
}
public void delMain(JfromOrderEntity jfromOrder) {
//删除主表信息
this.delete(jfromOrder);
//===================================================================================
//获取参数
Object id0 = jfromOrder.getId();
//===================================================================================
//删除-订单表体
String hql0 = "from JfromOrderLineEntity where 1 = 1 AND oRDERID = ? ";
List<JfromOrderLineEntity> jfromOrderLineOldList = this.findHql(hql0,id0);
this.deleteAllEntitie(jfromOrderLineOldList);
}
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(JfromOrderEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(JfromOrderEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(JfromOrderEntity t){
return true;
}
/**
* sql
* @param sql
* @return
*/
public String replaceVal(String sql,JfromOrderEntity t){
sql = sql.replace("#{id}",String.valueOf(t.getId()));
sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
sql = sql.replace("#{bpm_status}",String.valueOf(t.getBpmStatus()));
sql = sql.replace("#{receiver_name}",String.valueOf(t.getReceiverName()));
sql = sql.replace("#{receiver_mobile}",String.valueOf(t.getReceiverMobile()));
sql = sql.replace("#{receiver_state}",String.valueOf(t.getReceiverState()));
sql = sql.replace("#{receiver_city}",String.valueOf(t.getReceiverCity()));
sql = sql.replace("#{receiver_district}",String.valueOf(t.getReceiverDistrict()));
sql = sql.replace("#{receiver_address}",String.valueOf(t.getReceiverAddress()));
sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
return sql;
}
}

@ -49,6 +49,9 @@ public interface JeecgP3demoDao{
@Sql("DELETE from jeecg_p3demo WHERE ID = :jeecgP3demo.id")
public void delete(@Param("jeecgP3demo") JeecgP3demoEntity jeecgP3demo);
@ResultType(JeecgP3demoEntity.class)
MiniDaoPage<JeecgP3demoEntity> getAllByOrder(@Param("jeecgP3demo")JeecgP3demoEntity query,@Param("page") int page,@Param("rows") int rows,@Param("sortName") String sort,@Param("sortOrder") String order);
}

@ -21,5 +21,7 @@ public interface JeecgP3demoService {
public MiniDaoPage<JeecgP3demoEntity> getAll(JeecgP3demoEntity jeecgP3demo,int page,int rows);
public void delete(JeecgP3demoEntity jeecgP3demo);
public MiniDaoPage<JeecgP3demoEntity> getAllByOrder(JeecgP3demoEntity query, int offset, int limit, String sort,String order);
}

@ -47,4 +47,11 @@ public class JeecgP3demoServiceImpl implements JeecgP3demoService {
jeecgP3demoDao.delete(jeecgP3demo);
}
@Override
public MiniDaoPage<JeecgP3demoEntity> getAllByOrder(JeecgP3demoEntity query, int page, int rows, String sort,
String order) {
return jeecgP3demoDao.getAllByOrder(query,page,rows,sort,order);
}
}

@ -0,0 +1,3 @@
SELECT * FROM jeecg_p3demo jp where 1=1
<#include "JeecgP3demoDao_condition.sql">
ORDER BY ${sortName} ${sortOrder}

@ -6,6 +6,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.VelocityContext;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.minidao.pojo.MiniDaoPage;
import org.jeecgframework.p3.core.common.utils.AjaxJson;
import org.jeecgframework.p3.core.page.SystemTools;
@ -33,7 +34,43 @@ import com.jeecg.p3.demo.service.JeecgP3demoService;
public class JeecgP3demoController extends BaseController{
@Autowired
private JeecgP3demoService jeecgP3demoService;
@RequestMapping(params="dataList")
@ResponseBody
public MiniDaoPage<JeecgP3demoEntity> dataList(JeecgP3demoEntity query,
@RequestParam(required = false, value = "offset", defaultValue = "1") int offset,
@RequestParam(required = false, value = "limit", defaultValue = "10") int limit,
String sort,String order){
MiniDaoPage<JeecgP3demoEntity> list = null;
if(StringUtil.isNotEmpty(sort)){
list = jeecgP3demoService.getAllByOrder(query,offset,limit,sort,order);
}else{
//分页数据
list = jeecgP3demoService.getAll(query,offset,limit);
}
return list;
}
/**
*
* @return
*/
@RequestMapping(params = "bootstrapList",method = {RequestMethod.GET,RequestMethod.POST})
public void bootstrapList(@ModelAttribute JeecgP3demoEntity query,HttpServletRequest request,HttpServletResponse response,
@RequestParam(required = false, value = "pageNo", defaultValue = "1") int pageNo,
@RequestParam(required = false, value = "pageSize", defaultValue = "10") int pageSize) throws Exception{
try {
LOG.info(request, " back list");
VelocityContext velocityContext = new VelocityContext();
velocityContext.put("jeecgP3demo",query);
String viewName = "demo/p3/jeecgP3demo-bootstrap-list.vm";
ViewVelocity.view(request,response,viewName,velocityContext);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @return

@ -0,0 +1,897 @@
package com.jeecg.superquery.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Restrictions;
import org.jeecgframework.core.beanvalidator.BeanValidators;
import org.jeecgframework.core.common.controller.BaseController;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.common.hibernate.qbc.CriteriaQuery;
import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.DataGrid;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.core.util.ExceptionUtil;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result;
import org.jeecgframework.p3.core.util.oConvertUtils;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants;
import org.jeecgframework.tag.core.easyui.TagUtil;
import org.jeecgframework.web.system.service.MutiLangServiceI;
import org.jeecgframework.web.system.service.SystemService;
import org.jeecgframework.web.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.UriComponentsBuilder;
import com.alibaba.fastjson.JSONArray;
import com.jeecg.superquery.entity.SuperQueryFieldEntity;
import com.jeecg.superquery.entity.SuperQueryHistoryEntity;
import com.jeecg.superquery.entity.SuperQueryMainEntity;
import com.jeecg.superquery.entity.SuperQueryTableEntity;
import com.jeecg.superquery.page.SuperQueryMainPage;
import com.jeecg.superquery.service.SuperQueryMainServiceI;
import com.jeecg.superquery.util.SuperQueryUtil;
/**
* @Title: Controller
* @Description:
* @author onlineGenerator
* @date 2017-12-04 18:10:18
* @version V1.0
*
*/
@Api(value="SuperQueryMain",description="高级查询",tags="superQueryMainController")
@Controller
@RequestMapping("/superQueryMainController")
public class SuperQueryMainController extends BaseController {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(SuperQueryMainController.class);
@Autowired
private SuperQueryMainServiceI superQueryMainService;
@Autowired
private SystemService systemService;
@Autowired
private Validator validator;
@Autowired
private UserService userService;
/**
*
*
* @return
*/
@RequestMapping(params = "list")
public ModelAndView list(HttpServletRequest request) {
return new ModelAndView("com/jeecg/superquery/superQueryMainList");
}
//高级查询
//TODO
@RequestMapping(params = "queryBuilder")
public ModelAndView queryBuilder(HttpServletRequest request) {
return new ModelAndView("com/jeecg/superquery/queryBuilder");
}
/**
* easyui AJAX
*
* @param request
* @param response
* @param dataGrid
* @param user
*/
@RequestMapping(params = "datagrid")
public void datagrid(SuperQueryMainEntity superQueryMain,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid) {
CriteriaQuery cq = new CriteriaQuery(SuperQueryMainEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, superQueryMain);
try{
//自定义追加查询条件
String sql = SuperQueryUtil.getComplxSuperQuerySQL(request);
if(oConvertUtils.isNotEmpty(sql)) {
cq.add(Restrictions.sqlRestriction(" id in ("+sql+")"));
}
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
cq.add();
this.superQueryMainService.getDataGridReturn(cq, true);
TagUtil.datagrid(response, dataGrid);
}
/**
*
*
* @return
*/
@RequestMapping(params = "doDel")
@ResponseBody
public AjaxJson doDel(SuperQueryMainEntity superQueryMain, HttpServletRequest request) {
AjaxJson j = new AjaxJson();
superQueryMain = systemService.getEntity(SuperQueryMainEntity.class, superQueryMain.getId());
String message = "高级查询删除成功";
try{
superQueryMainService.delMain(superQueryMain);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "高级查询删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "doBatchDel")
@ResponseBody
public AjaxJson doBatchDel(String ids,HttpServletRequest request){
AjaxJson j = new AjaxJson();
String message = "高级查询删除成功";
try{
for(String id:ids.split(",")){
SuperQueryMainEntity superQueryMain = systemService.getEntity(SuperQueryMainEntity.class,
id
);
superQueryMainService.delMain(superQueryMain);
systemService.addLog(message, Globals.Log_Type_DEL, Globals.Log_Leavel_INFO);
}
}catch(Exception e){
e.printStackTrace();
message = "高级查询删除失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doAdd")
@ResponseBody
public AjaxJson doAdd(SuperQueryMainEntity superQueryMain,SuperQueryMainPage superQueryMainPage, HttpServletRequest request) {
List<SuperQueryTableEntity> superQueryTableList = superQueryMainPage.getSuperQueryTableList();
List<SuperQueryFieldEntity> superQueryFieldList = superQueryMainPage.getSuperQueryFieldList();
AjaxJson j = new AjaxJson();
String message = "添加成功";
try{
superQueryMainService.addMain(superQueryMain, superQueryTableList,superQueryFieldList);
systemService.addLog(message, Globals.Log_Type_INSERT, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "高级查询添加失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @param ids
* @return
*/
@RequestMapping(params = "doUpdate")
@ResponseBody
public AjaxJson doUpdate(SuperQueryMainEntity superQueryMain,SuperQueryMainPage superQueryMainPage, HttpServletRequest request) {
List<SuperQueryTableEntity> superQueryTableList = superQueryMainPage.getSuperQueryTableList();
List<SuperQueryFieldEntity> superQueryFieldList = superQueryMainPage.getSuperQueryFieldList();
AjaxJson j = new AjaxJson();
String message = "更新成功";
try{
superQueryMainService.updateMain(superQueryMain, superQueryTableList,superQueryFieldList);
systemService.addLog(message, Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
}catch(Exception e){
e.printStackTrace();
message = "更新高级查询失败";
throw new BusinessException(e.getMessage());
}
j.setMsg(message);
return j;
}
/**
*
*
* @return
*/
@RequestMapping(params = "goAdd")
public ModelAndView goAdd(SuperQueryMainEntity superQueryMain, HttpServletRequest req) {
if (StringUtil.isNotEmpty(superQueryMain.getId())) {
superQueryMain = superQueryMainService.getEntity(SuperQueryMainEntity.class, superQueryMain.getId());
req.setAttribute("superQueryMainPage", superQueryMain);
}
/* String hql2="select tableName from SuperQueryTableEntity";
List<SuperQueryTableEntity> superQueryTableList=systemService.findHql(hql2);
req.setAttribute("superQueryTableList", superQueryTableList);*/
return new ModelAndView("com/jeecg/superquery/superQueryMain-add");
}
/**
*
*
* @return
*/
@RequestMapping(params = "goUpdate")
public ModelAndView goUpdate(SuperQueryMainEntity superQueryMain, HttpServletRequest req) {
if (StringUtil.isNotEmpty(superQueryMain.getId())) {
superQueryMain = superQueryMainService.getEntity(SuperQueryMainEntity.class, superQueryMain.getId());
req.setAttribute("superQueryMainPage", superQueryMain);
}
return new ModelAndView("com/jeecg/superquery/superQueryMain-update");
}
/**
* []
*
* @return
*/
@RequestMapping(params = "superQueryTableList")
public ModelAndView superQueryTableList(SuperQueryMainEntity superQueryMain, HttpServletRequest req) {
//===================================================================================
//获取参数
Object id0 = superQueryMain.getId();
//===================================================================================
//查询-表集合
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
try{
List<SuperQueryTableEntity> superQueryTableEntityList = systemService.findHql(hql0,id0);
req.setAttribute("superQueryTableList", superQueryTableEntityList);
}catch(Exception e){
logger.info(e.getMessage());
}
return new ModelAndView("com/jeecg/superquery/superQueryTableList");
}
/**
* []
*
* @return
*/
@RequestMapping(params = "superQueryFieldList")
public ModelAndView superQueryFieldList(SuperQueryMainEntity superQueryMain, HttpServletRequest req) {
//===================================================================================
//获取参数
Object id1 = superQueryMain.getId();
//===================================================================================
//查询-字段配置
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
try{
List<SuperQueryFieldEntity> superQueryFieldEntityList = systemService.findHql(hql1,id1);
req.setAttribute("superQueryFieldList", superQueryFieldEntityList);
}catch(Exception e){
logger.info(e.getMessage());
}
return new ModelAndView("com/jeecg/superquery/superQueryFieldList");
}
/**
* excel
*
* @param request
* @param response
*/
@RequestMapping(params = "exportXls")
public String exportXls(SuperQueryMainEntity superQueryMain,HttpServletRequest request, HttpServletResponse response, DataGrid dataGrid,ModelMap map) {
CriteriaQuery cq = new CriteriaQuery(SuperQueryMainEntity.class, dataGrid);
//查询条件组装器
org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, superQueryMain);
try{
//自定义追加查询条件
}catch (Exception e) {
throw new BusinessException(e.getMessage());
}
cq.add();
List<SuperQueryMainEntity> list=this.superQueryMainService.getListByCriteriaQuery(cq, false);
List<SuperQueryMainPage> pageList=new ArrayList<SuperQueryMainPage>();
if(list!=null&&list.size()>0){
for(SuperQueryMainEntity entity:list){
try{
SuperQueryMainPage page=new SuperQueryMainPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryTableEntity> superQueryTableEntityList = systemService.findHql(hql0,id0);
page.setSuperQueryTableList(superQueryTableEntityList);
Object id1 = entity.getId();
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryFieldEntity> superQueryFieldEntityList = systemService.findHql(hql1,id1);
page.setSuperQueryFieldList(superQueryFieldEntityList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
map.put(NormalExcelConstants.FILE_NAME,"高级查询");
map.put(NormalExcelConstants.CLASS,SuperQueryMainPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("高级查询列表", "导出人:Jeecg",
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,pageList);
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
* excel
* @param request
* @param
* @return
*/
@RequestMapping(params = "importExcel", method = RequestMethod.POST)
@ResponseBody
public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
AjaxJson j = new AjaxJson();
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
MultipartFile file = entity.getValue();// 获取上传文件对象
ImportParams params = new ImportParams();
params.setTitleRows(2);
params.setHeadRows(2);
params.setNeedSave(true);
try {
List<SuperQueryMainPage> list = ExcelImportUtil.importExcel(file.getInputStream(), SuperQueryMainPage.class, params);
SuperQueryMainEntity entity1=null;
for (SuperQueryMainPage page : list) {
entity1=new SuperQueryMainEntity();
MyBeanUtils.copyBeanNotNull2Bean(page,entity1);
superQueryMainService.addMain(entity1, page.getSuperQueryTableList(),page.getSuperQueryFieldList());
}
j.setMsg("文件导入成功!");
} catch (Exception e) {
j.setMsg("文件导入失败!");
logger.error(ExceptionUtil.getExceptionMessage(e));
}finally{
try {
file.getInputStream().close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return j;
}
/**
* excel 使
*/
@SuppressWarnings( "rawtypes" )
@RequestMapping(params = "exportXlsByT")
public String exportXlsByT(ModelMap map) {
map.put(NormalExcelConstants.FILE_NAME,"高级查询");
map.put(NormalExcelConstants.CLASS,SuperQueryMainPage.class);
map.put(NormalExcelConstants.PARAMS,new ExportParams("高级查询列表", "导出人:"+ ResourceUtil.getSessionUser().getRealName(),
"导出信息"));
map.put(NormalExcelConstants.DATA_LIST,new ArrayList());
return NormalExcelConstants.JEECG_EXCEL_VIEW;
}
/**
*
*
* @return
*/
@RequestMapping(params = "upload")
public ModelAndView upload(HttpServletRequest req) {
req.setAttribute("controller_name", "superQueryMainController");
return new ModelAndView("common/upload/pub_excel_upload");
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="高级查询列表信息",produces="application/json",httpMethod="GET")
public ResponseMessage<List<SuperQueryMainPage>> list() {
List<SuperQueryMainEntity> list= superQueryMainService.getList(SuperQueryMainEntity.class);
List<SuperQueryMainPage> pageList=new ArrayList<SuperQueryMainPage>();
if(list!=null&&list.size()>0){
for(SuperQueryMainEntity entity:list){
try{
SuperQueryMainPage page=new SuperQueryMainPage();
MyBeanUtils.copyBeanNotNull2Bean(entity,page);
Object id0 = entity.getId();
Object id1 = entity.getId();
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryTableEntity> superQueryTableOldList = this.superQueryMainService.findHql(hql0,id0);
page.setSuperQueryTableList(superQueryTableOldList);
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryFieldEntity> superQueryFieldOldList = this.superQueryMainService.findHql(hql1,id1);
page.setSuperQueryFieldList(superQueryFieldOldList);
pageList.add(page);
}catch(Exception e){
logger.info(e.getMessage());
}
}
}
return Result.success(pageList);
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@ResponseBody
@ApiOperation(value="根据ID获取高级查询信息",notes="根据ID获取高级查询信息",httpMethod="GET",produces="application/json")
public ResponseMessage<?> get(@ApiParam(required=true,name="id",value="ID")@PathVariable("id") String id) {
SuperQueryMainEntity task = superQueryMainService.get(SuperQueryMainEntity.class, id);
if (task == null) {
return Result.error("根据ID获取高级查询信息为空");
}
SuperQueryMainPage page = new SuperQueryMainPage();
try {
MyBeanUtils.copyBeanNotNull2Bean(task, page);
Object id0 = task.getId();
Object id1 = task.getId();
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryTableEntity> superQueryTableOldList = this.superQueryMainService.findHql(hql0,id0);
page.setSuperQueryTableList(superQueryTableOldList);
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryFieldEntity> superQueryFieldOldList = this.superQueryMainService.findHql(hql1,id1);
page.setSuperQueryFieldList(superQueryFieldOldList);
} catch (Exception e) {
e.printStackTrace();
}
return Result.success(page);
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="创建高级查询")
public ResponseMessage<?> create(@ApiParam(name="高级查询对象")@RequestBody SuperQueryMainPage superQueryMainPage, UriComponentsBuilder uriBuilder) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<SuperQueryMainPage>> failures = validator.validate(superQueryMainPage);
if (!failures.isEmpty()) {
return Result.error(JSONArray.toJSONString(BeanValidators.extractPropertyAndMessage(failures)));
}
//保存
List<SuperQueryTableEntity> superQueryTableList = superQueryMainPage.getSuperQueryTableList();
List<SuperQueryFieldEntity> superQueryFieldList = superQueryMainPage.getSuperQueryFieldList();
SuperQueryMainEntity superQueryMain = new SuperQueryMainEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(superQueryMainPage,superQueryMain);
}catch(Exception e){
logger.info(e.getMessage());
return Result.error("保存高级查询失败");
}
superQueryMainService.addMain(superQueryMain, superQueryTableList,superQueryFieldList);
return Result.success(superQueryMain);
}
@RequestMapping(value = "/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
@ApiOperation(value="更新高级查询",notes="更新高级查询")
public ResponseMessage<?> update(@RequestBody SuperQueryMainPage superQueryMainPage) {
//调用JSR303 Bean Validator进行校验如果出错返回含400错误码及json格式的错误信息.
Set<ConstraintViolation<SuperQueryMainPage>> failures = validator.validate(superQueryMainPage);
if (!failures.isEmpty()) {
return Result.error(JSONArray.toJSONString(BeanValidators.extractPropertyAndMessage(failures)));
}
//保存
List<SuperQueryTableEntity> superQueryTableList = superQueryMainPage.getSuperQueryTableList();
List<SuperQueryFieldEntity> superQueryFieldList = superQueryMainPage.getSuperQueryFieldList();
SuperQueryMainEntity superQueryMain = new SuperQueryMainEntity();
try{
MyBeanUtils.copyBeanNotNull2Bean(superQueryMainPage,superQueryMain);
}catch(Exception e){
logger.info(e.getMessage());
return Result.error("高级查询更新失败");
}
superQueryMainService.updateMain(superQueryMain, superQueryTableList,superQueryFieldList);
//按Restful约定返回204状态码, 无内容. 也可以返回200状态码.
return Result.success();
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
@ApiOperation(value="删除高级查询")
public ResponseMessage<?> delete(@ApiParam(name="id",value="ID",required=true)@PathVariable("id") String id) {
logger.info("delete[{}]" + id);
// 验证
if (StringUtils.isEmpty(id)) {
return Result.error("ID不能为空");
}
try {
SuperQueryMainEntity superQueryMain = superQueryMainService.get(SuperQueryMainEntity.class, id);
superQueryMainService.delMain(superQueryMain);
} catch (Exception e) {
e.printStackTrace();
return Result.error("高级查询删除失败");
}
return Result.success();
}
//TODO
/**
*
* @param request
* @return
*/
@RequestMapping(params = "querysBuilder" ,method = { RequestMethod.GET, RequestMethod.POST } )
public ModelAndView querysBuilder(HttpServletRequest request) {
return new ModelAndView("com/jeecg/superquery/querysBuilder");
}
/***
* Ztree result list<Map<String,Object>>
*
* @param depatr
* @param response
* @param request
* @return
*/
@RequestMapping(params = "getTreeData", method = { RequestMethod.GET, RequestMethod.POST })
@ResponseBody
public AjaxJson getTreeData(SuperQueryTableEntity table, HttpServletResponse response, HttpServletRequest request) {
AjaxJson j = new AjaxJson();
try {
String queryCode = request.getParameter("queryCode");
String hql = " select a FROM SuperQueryTableEntity a ,SuperQueryMainEntity b WHERE a.mainId=b.id and b.queryCode=?";
//String query="select * FROM super_query_main a ,super_query_table b where a.id=b.main_id and a.query_code=?";
List<SuperQueryTableEntity> findHql = systemService.findHql(hql, queryCode);
// 定义一个map集合用于分组
Map<String, List<SuperQueryTableEntity>> mapList = new HashMap<String, List<SuperQueryTableEntity>>();
for (Iterator it = findHql.iterator(); it.hasNext();) {
// 将循环读取的结果放入对象中
SuperQueryTableEntity tab = (SuperQueryTableEntity) it.next();
// 如果在这个map中包含有相同的键这创建一个集合将其存起来
if (mapList.containsKey(tab.getMainId())) {
List<SuperQueryTableEntity> syn = mapList.get(tab.getMainId());
syn.add(tab);
// 如果没有包含相同的键,在创建一个集合保存数据
} else {
List<SuperQueryTableEntity> syns = new ArrayList<SuperQueryTableEntity>();
syns.add(tab);
mapList.put(tab.getMainId(), syns);
}
}
// 遍历map
List<Map<String, Object>> json = new ArrayList<Map<String, Object>>();
for (Map.Entry<String, List<SuperQueryTableEntity>> m : mapList.entrySet()) {
List<SuperQueryTableEntity> value = m.getValue();
Map<String, Object> map = null;
String id = "";
for (SuperQueryTableEntity superQueryTableEntity : value) {
map = new HashMap<String, Object>();
map.put("id", superQueryTableEntity.getId());
map.put("chkDisabled", false);
map.put("click", true);
map.put("name", superQueryTableEntity.getInstruction());
map.put("nocheck", false);
map.put("struct", "TREE");
map.put("title", superQueryTableEntity.getTableName());
map.put("queryCode", queryCode);
if (superQueryTableEntity.getIsMain().equals("Y")) {
map.put("parentId", "0");
map.put("level", 1);
map.put("icon", "plug-in/easyui/themes/metrole/images/icon_tree_folder.png");
id = superQueryTableEntity.getId();
} else {
map.put("parentId", id);
map.put("level", 2);
map.put("icon", "plug-in/easyui/themes/metrole/images/tag.png");
}
json.add(map);
}
j.setObj(json);
}
} catch (Exception e) {
e.printStackTrace();
}
return j;
}
/**
* tableName
* @param request
* @param response
* @return
*/
@ResponseBody
@RequestMapping(params = "getTextByTabelName" , method = { RequestMethod.GET, RequestMethod.POST })
public AjaxJson getTextById(HttpServletRequest request,HttpServletResponse response) {
AjaxJson json=new AjaxJson();
String tableName = request.getParameter("tableName");
String sql=" SELECT table_name, `name`, txt,ctype,stype,dict_code,dict_table ,dict_text,main_id from super_query_field where table_name= ? GROUP BY `name`,txt";
List<Map<String, Object>> findForJdbc = systemService.findForJdbc(sql,tableName);
json.setObj(findForJdbc);
return json;
}
/**
*
* @param param
* @param request
* @param response
* @return
*/
@ResponseBody
@RequestMapping(params = "saveHistory" , method = { RequestMethod.GET, RequestMethod.POST })
public AjaxJson saveHistory(@RequestParam Map<String,Object> param, HttpServletRequest request,HttpServletResponse response) {
AjaxJson ajaxJson=new AjaxJson();
String queryCode = request.getParameter("queryCode");
try {
if(StringUtil.isNotEmpty(param)){
String name = param.get("name").toString();
String userId = ResourceUtil.getSessionUser().getId();
String [] obj=new String[]{name,userId,queryCode};
List<SuperQueryHistoryEntity> list = systemService.findHql("from SuperQueryHistoryEntity where historyName=? and userId=? and queryCode = ?", obj);
if(list != null && list.size() > 0 ){
ajaxJson.setSuccess(false);
}else{
String json=param.get("json").toString();
String substring = json.substring(json.indexOf("[")+1, json.length()-1);
SuperQueryHistoryEntity historyEntity=new SuperQueryHistoryEntity();
historyEntity.setHistoryName(name);
historyEntity.setRecord(substring );
historyEntity.setUserId(userId);
historyEntity.setQueryCode(queryCode);
systemService.save(historyEntity);
ajaxJson.setSuccess(true);
}
}
} catch (Exception e) {
e.printStackTrace();
ajaxJson.setSuccess(false);
}
return ajaxJson;
}
/**
*
*
*/
@ResponseBody
@RequestMapping(params= "getHistoryByUserId", method = RequestMethod.POST )
public AjaxJson getHistoryByUserId( HttpServletRequest request,HttpServletResponse response) {
AjaxJson json=new AjaxJson();
String queryCode = request.getParameter("queryCode");
try {
List<String>list=new ArrayList<String>();
String userId = ResourceUtil.getSessionUser().getId();
String hql="from SuperQueryHistoryEntity where user_id=? and queryCode=?";
String[] param=new String[]{userId,queryCode};
List<SuperQueryHistoryEntity> findHql = systemService.findHql(hql, param);
if(findHql != null && findHql.size() >0){
for (SuperQueryHistoryEntity superQueryHistoryEntity : findHql) {
list.add(superQueryHistoryEntity.getHistoryName());
}
String[] array = new String[list.size()];
String[] s=list.toArray(array);
json.setSuccess(true);
json.setObj(s);
}
} catch (Exception e) {
e.printStackTrace();
json.setSuccess(false);
}
return json;
}
/**
*
*/
@ResponseBody
@RequestMapping(params= "getHistoryByText", method = RequestMethod.POST )
public AjaxJson getHistoryById( HttpServletRequest request,HttpServletResponse response) {
AjaxJson json=new AjaxJson();
String record="";
try {
String name = request.getParameter("name");
String userId = ResourceUtil.getSessionUser().getId();
String[] arr=new String[]{name,userId};
String hql=" from SuperQueryHistoryEntity where history_name=? and user_id=?";
List<SuperQueryHistoryEntity> findHql = systemService.findHql(hql, arr);
if(findHql != null && findHql.size() >0){
for (SuperQueryHistoryEntity history : findHql) {
record = history.getRecord();
}
json.setSuccess(true);
json.setObj(record);
}
} catch (Exception e) {
e.printStackTrace();
json.setSuccess(false);
}
return json;
}
/***
*
*/
@ResponseBody
@RequestMapping(params= "updateHistoryByName", method = RequestMethod.POST )
public AjaxJson updateHistoryByName( HttpServletRequest request,HttpServletResponse response) {
AjaxJson json=new AjaxJson();
try {
if(StringUtil.isNotEmpty(request.getParameter("name"))){
String name = request.getParameter("name");//修改后的名称
String userId=ResourceUtil.getSessionUser().getId();
String [] par=new String []{name,userId};
String hql="from SuperQueryHistoryEntity where history_name=? and userId=?";
List<SuperQueryHistoryEntity> historyList = systemService.findHql(hql, par);
if(historyList!=null&&historyList.size()>0){
json.setSuccess(false);
}else{
String nodeName = request.getParameter("nodeName");//要修改的名称
String sql = "update super_query_history set history_name="+"'"+name+"' where user_id="+"'"+userId+"' and history_name="+"'"+nodeName+"'";
int updateByName = systemService.updateBySqlString(sql);
if(updateByName==1){
json.setSuccess(true);
}
}
}
} catch (Exception e) {
e.printStackTrace();
json.setSuccess(false);
json.setMsg("修改失败");
}
return json;
}
/**
* byName
*/
@ResponseBody
@RequestMapping(params= "deleteHistoryByName", method = RequestMethod.POST )
public AjaxJson deleteHistoryByName( HttpServletRequest request,HttpServletResponse response) {
AjaxJson json=new AjaxJson();
try {
if(StringUtil.isNotEmpty(request.getParameter("name"))){
String name = request.getParameter("name");
String userId=ResourceUtil.getSessionUser().getId();
String sql = "delete from super_query_history where history_name="+"'"+name+"' and user_id="+"'"+userId+"'";
int deletebyName = systemService.updateBySqlString(sql);
if(deletebyName==1){
json.setSuccess(true);
}
}
} catch (Exception e) {
e.printStackTrace();
json.setSuccess(false);
json.setMsg("删除失败");
}
return json;
}
/**
* filed
* @param field Value
* @param mainId ID
* @param request
* @param response
* @return
*/
@ResponseBody
@RequestMapping(params = "getFieldType" , method = { RequestMethod.GET, RequestMethod.POST })
public AjaxJson getFieldType(String field,String mainId, HttpServletRequest request,HttpServletResponse response) {
AjaxJson json = new AjaxJson();
try {
// step.1 获取mainId和字段名称查询数据
String sql = "select stype,`name`,txt,dict_table,dict_code,dict_text from super_query_field where `name`=? AND main_id = ?";
List<Map<String, Object>> page = systemService.findForJdbc(sql,field,mainId);
if(page.size()>0) {
json.setObj(page);
}
} catch(Exception e) {
e.printStackTrace();
json.setSuccess(false);
}
return json;
}
/**
* CODETYPE
* @param typegroup CODE
* @param request
* @param response
* @return
*/
@RequestMapping(params = "getSelectType",method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public AjaxJson getSelectType(String typegroup,HttpServletRequest request,HttpServletResponse response) {
AjaxJson json = new AjaxJson();
try {
//step.1 根据数据字典Code查询结果
String sql = "select t.typecode,t.typename from t_s_type t where typegroupid = (select tg.id from t_s_typegroup tg where tg.typegroupcode=?)";
List<Map<String, Object>> selectType = systemService.findForJdbc(sql,typegroup);
//step.2 根据查询的结果判断是否是国际化语言,是的话转换
List<Map<String, Object>> listMap = new ArrayList<Map<String,Object>>();
MutiLangServiceI mutiLangService = ApplicationContextUtil.getContext().getBean(MutiLangServiceI.class);
if(selectType.size()>0) {
for (Map<String, Object> map : selectType) {
Map<String, Object> mutiMap = new HashMap<String, Object>();
mutiMap.put("typecode", map.get("typecode"));
mutiMap.put("typename", mutiLangService.getLang(map.get("typename").toString()));
listMap.add(mutiMap);
}
json.setObj(listMap);
}
} catch(Exception e) {
e.printStackTrace();
json.setSuccess(false);
}
return json;
}
/**
* QueryCodeMainID
* @param queryCode
* @param request
* @param response
* @return
*/
@RequestMapping(params = "getMainIdByQueryCode",method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public AjaxJson getMainIdByQueryCode(String queryCode,HttpServletRequest request,HttpServletResponse response) {
AjaxJson json = new AjaxJson();
try {
String sql = "select id from super_query_main where query_code = ?";
List<Map<String,Object>> main = systemService.findForJdbc(sql, queryCode);
if(main != null && main.size() > 0) {
json.setObj(main.get(0).get("id"));
}
} catch(Exception e) {
e.printStackTrace();
json.setSuccess(false);
}
return json;
}
}

@ -0,0 +1,415 @@
package com.jeecg.superquery.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-04 18:10:18
* @version V1.0
*
*/
@Entity
@Table(name = "super_query_field", schema = "")
@SuppressWarnings("serial")
public class SuperQueryFieldEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**序号*/
@Excel(name="序号",width=15)
private java.lang.String seq;
/**表名*/
@Excel(name="表名",width=15)
private java.lang.String tableName;
/**字段名*/
@Excel(name="字段名",width=15)
private java.lang.String name;
/**字段文本*/
@Excel(name="字段文本",width=15)
private java.lang.String txt;
/**字段类型*/
@Excel(name="字段类型",width=15,dicCode="field_type")
private java.lang.String ctype;
/**控件类型*/
@Excel(name="控件类型",width=15,dicCode="s_type")
private java.lang.String stype;
/**字典Table*/
@Excel(name="字典Table",width=15)
private java.lang.String dictTable;
/**字典Code*/
@Excel(name="字典Code",width=15)
private java.lang.String dictCode;
/**字典Text*/
@Excel(name="字典Text",width=15)
private java.lang.String dictText;
/**外键*/
private java.lang.String mainId;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SEQ",nullable=true,length=32)
public java.lang.String getSeq(){
return this.seq;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSeq(java.lang.String seq){
this.seq = seq;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="TABLE_NAME",nullable=true,length=32)
public java.lang.String getTableName(){
return this.tableName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setTableName(java.lang.String tableName){
this.tableName = tableName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="NAME",nullable=true,length=32)
public java.lang.String getName(){
return this.name;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setName(java.lang.String name){
this.name = name;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="TXT",nullable=true,length=32)
public java.lang.String getTxt(){
return this.txt;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setTxt(java.lang.String txt){
this.txt = txt;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CTYPE",nullable=true,length=32)
public java.lang.String getCtype(){
return this.ctype;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCtype(java.lang.String ctype){
this.ctype = ctype;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="STYPE",nullable=true,length=32)
public java.lang.String getStype(){
return this.stype;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setStype(java.lang.String stype){
this.stype = stype;
}
/**
*: java.lang.String
*@return: java.lang.String Table
*/
@Column(name ="DICT_TABLE",nullable=true,length=32)
public java.lang.String getDictTable(){
return this.dictTable;
}
/**
*: java.lang.String
*@param: java.lang.String Table
*/
public void setDictTable(java.lang.String dictTable){
this.dictTable = dictTable;
}
/**
*: java.lang.String
*@return: java.lang.String Code
*/
@Column(name ="DICT_CODE",nullable=true,length=32)
public java.lang.String getDictCode(){
return this.dictCode;
}
/**
*: java.lang.String
*@param: java.lang.String Code
*/
public void setDictCode(java.lang.String dictCode){
this.dictCode = dictCode;
}
/**
*: java.lang.String
*@return: java.lang.String Text
*/
@Column(name ="DICT_TEXT",nullable=true,length=32)
public java.lang.String getDictText(){
return this.dictText;
}
/**
*: java.lang.String
*@param: java.lang.String Text
*/
public void setDictText(java.lang.String dictText){
this.dictText = dictText;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="MAIN_ID",nullable=true,length=32)
public java.lang.String getMainId(){
return this.mainId;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setMainId(java.lang.String mainId){
this.mainId = mainId;
}
}

@ -0,0 +1,285 @@
package com.jeecg.superquery.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date
* @version V1.0
*
*/
@Entity
@Table(name = "super_query_history", schema = "")
@SuppressWarnings("serial")
public class SuperQueryHistoryEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**用户id*/
@Excel(name="用户id",width=15)
private java.lang.String userId;
/**查询规则编码*/
@Excel(name="查询规则编码",width=15)
private java.lang.String queryCode;
/**查询类型*/
@Excel(name="查询类型",width=15,dicCode="sel_type")
private java.lang.String queryType;
/**说明*/
@Excel(name="记录",width=15)
private java.lang.String record;
@Excel(name="名称",width=15)
private java.lang.String historyName;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=50)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="QUERY_CODE",nullable=true,length=50)
public java.lang.String getQueryCode(){
return this.queryCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryCode(java.lang.String queryCode){
this.queryCode = queryCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="QUERY_TYPE",nullable=true,length=50)
public java.lang.String getQueryType(){
return this.queryType;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryType(java.lang.String queryType){
this.queryType = queryType;
}
@Column(name ="user_id",nullable=true,length=50)
public java.lang.String getUserId() {
return userId;
}
public void setUserId(java.lang.String userId) {
this.userId = userId;
}
@Column(name ="record",nullable=true,length=255)
public java.lang.String getRecord() {
return record;
}
public void setRecord(java.lang.String record) {
this.record = record;
}
@Column(name ="history_name",nullable=true,length=255)
public java.lang.String getHistoryName() {
return historyName;
}
public void setHistoryName(java.lang.String historyName) {
this.historyName = historyName;
}
}

@ -0,0 +1,290 @@
package com.jeecg.superquery.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-04 18:10:18
* @version V1.0
*
*/
@Entity
@Table(name = "super_query_main", schema = "")
@SuppressWarnings("serial")
public class SuperQueryMainEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**查询规则名称*/
@Excel(name="查询规则名称",width=15)
private java.lang.String queryName;
/**查询规则编码*/
@Excel(name="查询规则编码",width=15)
private java.lang.String queryCode;
/**查询类型*/
@Excel(name="查询类型",width=15,dicCode="sel_type")
private java.lang.String queryType;
/**说明*/
@Excel(name="说明",width=15)
private java.lang.String content;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="QUERY_NAME",nullable=true,length=50)
public java.lang.String getQueryName(){
return this.queryName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryName(java.lang.String queryName){
this.queryName = queryName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="QUERY_CODE",nullable=true,length=50)
public java.lang.String getQueryCode(){
return this.queryCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryCode(java.lang.String queryCode){
this.queryCode = queryCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="QUERY_TYPE",nullable=true,length=50)
public java.lang.String getQueryType(){
return this.queryType;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryType(java.lang.String queryType){
this.queryType = queryType;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CONTENT",nullable=true,length=32)
public java.lang.String getContent(){
return this.content;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setContent(java.lang.String content){
this.content = content;
}
}

@ -0,0 +1,324 @@
package com.jeecg.superquery.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-04 18:10:17
* @version V1.0
*
*/
@Entity
@Table(name = "super_query_table", schema = "")
@SuppressWarnings("serial")
public class SuperQueryTableEntity implements java.io.Serializable {
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**序号*/
@Excel(name="序号",width=15)
private java.lang.String seq;
/**表名*/
@Excel(name="表名",width=15)
private java.lang.String tableName;
/**说明*/
@Excel(name="说明",width=15)
private java.lang.String instruction;
/**是否是主表*/
@Excel(name="是否是主表",width=15,dicCode="is_main")
private java.lang.String isMain;
/**外键字段*/
@Excel(name="外键字段",width=15)
private java.lang.String fkField;
/**外键id*/
private java.lang.String mainId;
/**
*: java.lang.String
*@return: java.lang.String
*/
@Id
@GeneratedValue(generator = "paymentableGenerator")
@GenericGenerator(name = "paymentableGenerator", strategy = "uuid")
@Column(name ="ID",nullable=false,length=36)
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_NAME",nullable=true,length=50)
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="CREATE_BY",nullable=true,length=50)
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="CREATE_DATE",nullable=true,length=20)
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_NAME",nullable=true,length=50)
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="UPDATE_BY",nullable=true,length=50)
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
@Column(name ="UPDATE_DATE",nullable=true,length=20)
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_ORG_CODE",nullable=true,length=50)
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SYS_COMPANY_CODE",nullable=true,length=50)
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="SEQ",nullable=true,length=32)
public java.lang.String getSeq(){
return this.seq;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSeq(java.lang.String seq){
this.seq = seq;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="TABLE_NAME",nullable=true,length=32)
public java.lang.String getTableName(){
return this.tableName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setTableName(java.lang.String tableName){
this.tableName = tableName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="IS_MAIN",nullable=true,length=32)
public java.lang.String getIsMain(){
return this.isMain;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setIsMain(java.lang.String isMain){
this.isMain = isMain;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
@Column(name ="FK_FIELD",nullable=true,length=32)
public java.lang.String getFkField(){
return this.fkField;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setFkField(java.lang.String fkField){
this.fkField = fkField;
}
/**
*: java.lang.String
*@return: java.lang.String id
*/
@Column(name ="MAIN_ID",nullable=true,length=32)
public java.lang.String getMainId(){
return this.mainId;
}
/**
*: java.lang.String
*@param: java.lang.String id
*/
public void setMainId(java.lang.String mainId){
this.mainId = mainId;
}
@Column(name ="instruction",nullable=true,length=32)
public java.lang.String getInstruction() {
return instruction;
}
public void setInstruction(java.lang.String instruction) {
this.instruction = instruction;
}
}

@ -0,0 +1,270 @@
package com.jeecg.superquery.page;
import com.jeecg.superquery.entity.SuperQueryFieldEntity;
import com.jeecg.superquery.entity.SuperQueryTableEntity;
import java.util.List;
import java.util.ArrayList;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
/**
* @Title: Entity
* @Description:
* @author onlineGenerator
* @date 2017-12-04 18:10:18
* @version V1.0
*
*/
public class SuperQueryMainPage implements java.io.Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
/**主键*/
private java.lang.String id;
/**创建人名称*/
private java.lang.String createName;
/**创建人登录名称*/
private java.lang.String createBy;
/**创建日期*/
private java.util.Date createDate;
/**更新人名称*/
private java.lang.String updateName;
/**更新人登录名称*/
private java.lang.String updateBy;
/**更新日期*/
private java.util.Date updateDate;
/**所属部门*/
private java.lang.String sysOrgCode;
/**所属公司*/
private java.lang.String sysCompanyCode;
/**查询规则名称*/
@Excel(name="查询规则名称")
private java.lang.String queryName;
/**查询规则编码*/
@Excel(name="查询规则编码")
private java.lang.String queryCode;
/**查询类型*/
@Excel(name="查询类型")
private java.lang.String queryType;
/**说明*/
@Excel(name="说明")
private java.lang.String content;
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getId(){
return this.id;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setId(java.lang.String id){
this.id = id;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getCreateName(){
return this.createName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateName(java.lang.String createName){
this.createName = createName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getCreateBy(){
return this.createBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setCreateBy(java.lang.String createBy){
this.createBy = createBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
public java.util.Date getCreateDate(){
return this.createDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setCreateDate(java.util.Date createDate){
this.createDate = createDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getUpdateName(){
return this.updateName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateName(java.lang.String updateName){
this.updateName = updateName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getUpdateBy(){
return this.updateBy;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setUpdateBy(java.lang.String updateBy){
this.updateBy = updateBy;
}
/**
*: java.util.Date
*@return: java.util.Date
*/
public java.util.Date getUpdateDate(){
return this.updateDate;
}
/**
*: java.util.Date
*@param: java.util.Date
*/
public void setUpdateDate(java.util.Date updateDate){
this.updateDate = updateDate;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getSysOrgCode(){
return this.sysOrgCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysOrgCode(java.lang.String sysOrgCode){
this.sysOrgCode = sysOrgCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getSysCompanyCode(){
return this.sysCompanyCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setSysCompanyCode(java.lang.String sysCompanyCode){
this.sysCompanyCode = sysCompanyCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getQueryName(){
return this.queryName;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryName(java.lang.String queryName){
this.queryName = queryName;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getQueryCode(){
return this.queryCode;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryCode(java.lang.String queryCode){
this.queryCode = queryCode;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getQueryType(){
return this.queryType;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setQueryType(java.lang.String queryType){
this.queryType = queryType;
}
/**
*: java.lang.String
*@return: java.lang.String
*/
public java.lang.String getContent(){
return this.content;
}
/**
*: java.lang.String
*@param: java.lang.String
*/
public void setContent(java.lang.String content){
this.content = content;
}
/**保存-表集合*/
@ExcelCollection(name="表集合")
private List<SuperQueryTableEntity> superQueryTableList = new ArrayList<SuperQueryTableEntity>();
public List<SuperQueryTableEntity> getSuperQueryTableList() {
return superQueryTableList;
}
public void setSuperQueryTableList(List<SuperQueryTableEntity> superQueryTableList) {
this.superQueryTableList = superQueryTableList;
}
/**保存-字段配置*/
@ExcelCollection(name="字段配置")
private List<SuperQueryFieldEntity> superQueryFieldList = new ArrayList<SuperQueryFieldEntity>();
public List<SuperQueryFieldEntity> getSuperQueryFieldList() {
return superQueryFieldList;
}
public void setSuperQueryFieldList(List<SuperQueryFieldEntity> superQueryFieldList) {
this.superQueryFieldList = superQueryFieldList;
}
}

@ -0,0 +1,44 @@
package com.jeecg.superquery.service;
import com.jeecg.superquery.entity.SuperQueryFieldEntity;
import com.jeecg.superquery.entity.SuperQueryMainEntity;
import com.jeecg.superquery.entity.SuperQueryTableEntity;
import java.util.List;
import org.jeecgframework.core.common.service.CommonService;
public interface SuperQueryMainServiceI extends CommonService{
public <T> void delete(T entity);
/**
*
*
*/
public void addMain(SuperQueryMainEntity superQueryMain,
List<SuperQueryTableEntity> superQueryTableList,List<SuperQueryFieldEntity> superQueryFieldList) ;
/**
*
*
*/
public void updateMain(SuperQueryMainEntity superQueryMain,
List<SuperQueryTableEntity> superQueryTableList,List<SuperQueryFieldEntity> superQueryFieldList);
public void delMain (SuperQueryMainEntity superQueryMain);
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(SuperQueryMainEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(SuperQueryMainEntity t);
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(SuperQueryMainEntity t);
}

@ -0,0 +1,215 @@
package com.jeecg.superquery.service.impl;
import com.jeecg.superquery.service.SuperQueryMainServiceI;
import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import com.jeecg.superquery.entity.SuperQueryFieldEntity;
import com.jeecg.superquery.entity.SuperQueryMainEntity;
import com.jeecg.superquery.entity.SuperQueryTableEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.util.MyBeanUtils;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.core.util.oConvertUtils;
import java.util.UUID;
@Service("superQueryMainService")
@Transactional
public class SuperQueryMainServiceImpl extends CommonServiceImpl implements SuperQueryMainServiceI {
public <T> void delete(T entity) {
super.delete(entity);
//执行删除操作配置的sql增强
this.doDelSql((SuperQueryMainEntity)entity);
}
public void addMain(SuperQueryMainEntity superQueryMain,
List<SuperQueryTableEntity> superQueryTableList,List<SuperQueryFieldEntity> superQueryFieldList){
//保存主信息
this.save(superQueryMain);
/**保存-表集合*/
for(SuperQueryTableEntity superQueryTable:superQueryTableList){
//外键设置
superQueryTable.setMainId(superQueryMain.getId());
this.save(superQueryTable);
}
/**保存-字段配置*/
for(SuperQueryFieldEntity superQueryField:superQueryFieldList){
//外键设置
superQueryField.setMainId(superQueryMain.getId());
this.save(superQueryField);
}
//执行新增操作配置的sql增强
this.doAddSql(superQueryMain);
}
public void updateMain(SuperQueryMainEntity superQueryMain,
List<SuperQueryTableEntity> superQueryTableList,List<SuperQueryFieldEntity> superQueryFieldList) {
//保存主表信息
if(StringUtil.isNotEmpty(superQueryMain.getId())){
try {
SuperQueryMainEntity temp = findUniqueByProperty(SuperQueryMainEntity.class, "id", superQueryMain.getId());
MyBeanUtils.copyBeanNotNull2Bean(superQueryMain, temp);
this.saveOrUpdate(temp);
} catch (Exception e) {
e.printStackTrace();
}
}else{
this.saveOrUpdate(superQueryMain);
}
//===================================================================================
//获取参数
Object id0 = superQueryMain.getId();
Object id1 = superQueryMain.getId();
//===================================================================================
//1.查询出数据库的明细数据-表集合
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryTableEntity> superQueryTableOldList = this.findHql(hql0,id0);
//2.筛选更新明细数据-表集合
if(superQueryTableList!=null&&superQueryTableList.size()>0){
for(SuperQueryTableEntity oldE:superQueryTableOldList){
boolean isUpdate = false;
for(SuperQueryTableEntity sendE:superQueryTableList){
//需要更新的明细数据-表集合
if(oldE.getId().equals(sendE.getId())){
try {
MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
this.saveOrUpdate(oldE);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
isUpdate= true;
break;
}
}
if(!isUpdate){
//如果数据库存在的明细,前台没有传递过来则是删除-表集合
super.delete(oldE);
}
}
//3.持久化新增的数据-表集合
for(SuperQueryTableEntity superQueryTable:superQueryTableList){
if(oConvertUtils.isEmpty(superQueryTable.getId())){
//外键设置
superQueryTable.setMainId(superQueryMain.getId());
this.save(superQueryTable);
}
}
}
//===================================================================================
//1.查询出数据库的明细数据-字段配置
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryFieldEntity> superQueryFieldOldList = this.findHql(hql1,id1);
//2.筛选更新明细数据-字段配置
if(superQueryFieldList!=null&&superQueryFieldList.size()>0){
for(SuperQueryFieldEntity oldE:superQueryFieldOldList){
boolean isUpdate = false;
for(SuperQueryFieldEntity sendE:superQueryFieldList){
//需要更新的明细数据-字段配置
if(oldE.getId().equals(sendE.getId())){
try {
MyBeanUtils.copyBeanNotNull2Bean(sendE,oldE);
this.saveOrUpdate(oldE);
} catch (Exception e) {
e.printStackTrace();
throw new BusinessException(e.getMessage());
}
isUpdate= true;
break;
}
}
if(!isUpdate){
//如果数据库存在的明细,前台没有传递过来则是删除-字段配置
super.delete(oldE);
}
}
//3.持久化新增的数据-字段配置
for(SuperQueryFieldEntity superQueryField:superQueryFieldList){
if(oConvertUtils.isEmpty(superQueryField.getId())){
//外键设置
superQueryField.setMainId(superQueryMain.getId());
this.save(superQueryField);
}
}
}
//执行更新操作配置的sql增强
this.doUpdateSql(superQueryMain);
}
public void delMain(SuperQueryMainEntity superQueryMain) {
//删除主表信息
this.delete(superQueryMain);
//===================================================================================
//获取参数
Object id0 = superQueryMain.getId();
Object id1 = superQueryMain.getId();
//===================================================================================
//删除-表集合
String hql0 = "from SuperQueryTableEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryTableEntity> superQueryTableOldList = this.findHql(hql0,id0);
this.deleteAllEntitie(superQueryTableOldList);
//===================================================================================
//删除-字段配置
String hql1 = "from SuperQueryFieldEntity where 1 = 1 AND mAIN_ID = ? ";
List<SuperQueryFieldEntity> superQueryFieldOldList = this.findHql(hql1,id1);
this.deleteAllEntitie(superQueryFieldOldList);
}
/**
* -sql-
* @param id
* @return
*/
public boolean doAddSql(SuperQueryMainEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doUpdateSql(SuperQueryMainEntity t){
return true;
}
/**
* -sql-
* @param id
* @return
*/
public boolean doDelSql(SuperQueryMainEntity t){
return true;
}
/**
* sql
* @param sql
* @return
*/
public String replaceVal(String sql,SuperQueryMainEntity t){
sql = sql.replace("#{id}",String.valueOf(t.getId()));
sql = sql.replace("#{create_name}",String.valueOf(t.getCreateName()));
sql = sql.replace("#{create_by}",String.valueOf(t.getCreateBy()));
sql = sql.replace("#{create_date}",String.valueOf(t.getCreateDate()));
sql = sql.replace("#{update_name}",String.valueOf(t.getUpdateName()));
sql = sql.replace("#{update_by}",String.valueOf(t.getUpdateBy()));
sql = sql.replace("#{update_date}",String.valueOf(t.getUpdateDate()));
sql = sql.replace("#{sys_org_code}",String.valueOf(t.getSysOrgCode()));
sql = sql.replace("#{sys_company_code}",String.valueOf(t.getSysCompanyCode()));
sql = sql.replace("#{query_name}",String.valueOf(t.getQueryName()));
sql = sql.replace("#{query_code}",String.valueOf(t.getQueryCode()));
sql = sql.replace("#{query_type}",String.valueOf(t.getQueryType()));
sql = sql.replace("#{content}",String.valueOf(t.getContent()));
sql = sql.replace("#{UUID}",UUID.randomUUID().toString());
return sql;
}
}

@ -0,0 +1,121 @@
package com.jeecg.superquery.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.p3.core.util.oConvertUtils;
import org.jeecgframework.web.system.service.SystemService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
* @Title:
* @Description:
* @date 2017-12-29 10:00:00
* @version V1.0
* @author LiShaoQing
*
*/
public class SuperQueryUtil {
private static final Logger logger = Logger.getLogger(SuperQueryUtil.class);
/**
* SqlBuilderJSONSQL
* @param request
* @param dataGrid
* @return
*/
public static String getComplxSuperQuerySQL(HttpServletRequest request) {
SystemService systemService = ApplicationContextUtil.getContext().getBean(SystemService.class);
StringBuffer superQuerySQL = new StringBuffer("");
//step.1 获取DataGrid中SqlBuilder的JSON串
String complexSqlbuilder = request.getParameter("complexSqlbuilder");
if (oConvertUtils.isNotEmpty(complexSqlbuilder)) {
JSONArray array = JSON.parseArray(complexSqlbuilder);
JSONObject parseObject = array.getJSONObject(0);
//step.2遍历获取JSON里的数据拿到主表编码
String queryCode = parseObject.get("queryCode").toString();
//获取relation条件是AND还是OR
String relation = parseObject.get("relation").toString();
//step.3根据queryCode查询数据返回主表
String sql = "select sqt.table_name from super_query_table sqt where sqt.is_main = 'Y' and sqt.main_id = (select sqm.id from super_query_main sqm where sqm.query_code = ?)";
List<Map<String,Object>> tableName = systemService.findForJdbc(sql, queryCode);
//根据queryCode查询数据库返回从表
String sql1 = "select sqt.table_name,sqt.fk_field from super_query_table sqt where sqt.is_main = 'N' and sqt.main_id = (select sqm.id from super_query_main sqm where sqm.query_code = ?)";
List<Map<String,Object>> fromName = systemService.findForJdbc(sql1, queryCode);
//queryRules为所查询的所有信息。
JSONArray queryRules = (JSONArray) parseObject.get("children");
logger.info("------" + queryRules.toString() + "------");
//step.4 拼接主从表
String mainTable = "";//主表
List<String> fromTable = new ArrayList<String>();//从表
if(tableName.size() > 0) {
if(oConvertUtils.isNotEmpty(tableName.get(0).get("table_name").toString())) {
mainTable = tableName.get(0).get("table_name").toString();
}
}
if(fromName.size() > 0) {
for (int i = 0; i < fromName.size(); i++) {
if(oConvertUtils.isNotEmpty(fromName.get(i).get("table_name").toString())) {
fromTable.add(fromName.get(i).get("table_name").toString());
}
}
}
if(queryRules != null && queryRules.size()>0) {
//step.5 拼接前段SELECT语句
superQuerySQL.append("SELECT " + mainTable + ".id FROM " + mainTable + " ");
//flag用来区分单条记录还是多条记录
boolean flag = false;
//遍历从表追加
if(fromTable.size() > 0) {
flag = true;
for (String s : fromTable) {
superQuerySQL.append("," + s);
}
superQuerySQL.append(" WHERE");
//遍历取得主从表关联关系
for (int i = 0; i < fromTable.size(); i++) {
if(fromName.size() > 0) {
if(i == 0) {
superQuerySQL.append(" " + mainTable + ".id = " + fromTable.get(i) + "." + fromName.get(0).get("fk_field").toString());
} else {
superQuerySQL.append(" AND " + mainTable + ".id = " + fromTable.get(i) + "." + fromName.get(i).get("fk_field").toString());
}
}
}
}
//step.6 拼接高级查询构造器中的条件
for (int i = 0; i < queryRules.size(); i++) {
// 遍历 JSONArray数组把每一个对象转成JSON对象
JSONObject rule = queryRules.getJSONObject(i);
String table = rule.getString("table"); //表名
String field = rule.getString("field"); //字段
String condition = rule.getString("condition"); //条件
String value = rule.getString("value"); //值
if(i == 0) {
if(flag) {
superQuerySQL.append(" AND(");
} else {
superQuerySQL.append(" WHERE");
}
superQuerySQL.append(" " + table + "." + field + " " + condition + " '" + value + "' ");
} else {
superQuerySQL.append(" " + relation + " " + table + "." + field + " " + condition + " '" + value + "' ");
}
}
if(flag) {
superQuerySQL.append(")");
}
}
}
return superQuerySQL.toString();
}
}

@ -0,0 +1,111 @@
package org.jeecgframework.core.aop;
import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;
import org.apache.commons.lang.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.jeecgframework.core.annotation.Ehcache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSON;
/**
* redisAOP
* @author Yandong
*/
//@Component
//@Aspect
public class RedisCacheAspect {
private RedisTemplate redisTemplate;
@Autowired
public void setRedis(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
//泛型设置成Long后必须更改对应的序列化方案
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
}
@Pointcut("@annotation(org.jeecgframework.core.annotation.Ehcache)")
public void simplePointcut() {}
@Around("simplePointcut()")
public Object aroundLogCalls(ProceedingJoinPoint joinPoint)
throws Throwable {
String targetName = joinPoint.getTarget().getClass().toString();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class[] argTypes=new Class[arguments.length];
if (arguments!=null && arguments.length>0) {
for (int i = 0; i < arguments.length; i++) {
argTypes[i]=arguments[i].getClass();
}
}
Method method=joinPoint.getTarget().getClass().getMethod(methodName, argTypes);
//试图得到标注的Ehcache类
Ehcache flag = method.getAnnotation(Ehcache.class);
if(flag==null){
return null;
}
String cacheKey ="";
if(StringUtils.isNotBlank(flag.cacheName())){
cacheKey=flag.cacheName();
}else{
cacheKey=getCacheKey(targetName, methodName, arguments);
}
Object result=null;
BoundValueOperations<String,Object> valueOps = redisTemplate.boundValueOps(cacheKey);
if(flag.eternal()){
//永久缓存
result = valueOps.get();
}else{
//临时缓存
result = valueOps.get();
valueOps.expire(20, TimeUnit.MINUTES);
}
if (result == null) {
if ((arguments != null) && (arguments.length != 0)) {
result = joinPoint.proceed(arguments);
} else {
result = joinPoint.proceed();
}
if(flag.eternal()){
//永久缓存
valueOps.set(result);
}else{
//临时缓存
valueOps.set(result,20, TimeUnit.MINUTES);
}
}
return result;
}
/**
* cache keycache keyCacheElement cache key
* ++com.co.cache.service.UserServiceImpl.getAllUser
*/
private String getCacheKey(String targetName, String methodName,
Object[] arguments) {
StringBuffer sb = new StringBuffer();
sb.append(targetName).append(".").append(methodName);
if ((arguments != null) && (arguments.length != 0)) {
for (int i = 0; i < arguments.length; i++) {
sb.append(".").append(JSON.toJSONString(arguments[i]));
}
}
return sb.toString();
}
}

@ -0,0 +1,45 @@
package org.jeecgframework.core.common.controller;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
import org.springframework.util.StringUtils;
/**
* @RequestBodyjsonJackson Date
* @author scott
*
*/
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> {
private SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String text = jp.getText();
if (StringUtils.hasText(text)) {
try {
if (text.indexOf(":") == -1 && text.length() == 10) {
return this.dateFormat.parse(text);
} else if (text.indexOf(":") > 0 && text.length() == 19) {
return this.datetimeFormat.parse(text);
} else {
throw new IllegalArgumentException("Could not parse date, date format is error ");
}
} catch (ParseException ex) {
IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage());
iae.initCause(ex);
throw iae;
}
} else {
return null;
}
}
}

@ -0,0 +1,38 @@
package org.jeecgframework.core.common.controller;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.ser.CustomSerializerFactory;
/**
* @description @ResponseBodyjsonDATE
* @author scott
* @date 2013-5-28
*/
public class CustomObjectMapper extends ObjectMapper {
public CustomObjectMapper() {
CustomSerializerFactory factory = new CustomSerializerFactory();
factory.addGenericMapping(Date.class, new JsonSerializer<Date>() {
@Override
public void serialize(Date value, JsonGenerator jsonGenerator, SerializerProvider provider) throws IOException, JsonProcessingException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(value);
if (dateStr.endsWith(" 00:00:00")) {
dateStr = dateStr.substring(0, 10);
} else if (dateStr.endsWith(":00")) {
dateStr = dateStr.substring(0, 16);
}
jsonGenerator.writeString(dateStr);
}
});
this.setSerializerFactory(factory);
}
}

@ -29,6 +29,7 @@ public interface ICommonDao extends IGenericBaseCommonDao{
*
* */
public TSUser getUserByUserIdAndUserNameExits(TSUser user);
public TSUser findUserByAccountAndPassword(String username,String password);
public String getUserRole(TSUser user);
/**
*

@ -69,6 +69,23 @@ public class CommonDao extends GenericBaseCommonDao implements ICommonDao, IGene
return null;
}
/**
*
* */
public TSUser findUserByAccountAndPassword(String username,String inpassword) {
String password = PasswordUtil.encrypt(username, inpassword, PasswordUtil.getStaticSalt());
String query = "from TSUser u where u.userName = :username and u.password=:passowrd";
Query queryObject = getSession().createQuery(query);
queryObject.setParameter("username", username);
queryObject.setParameter("passowrd", password);
@SuppressWarnings("unchecked")
List<TSUser> users = queryObject.list();
if (users != null && users.size() > 0) {
return users.get(0);
}
return null;
}
/**
* admin
*/
@ -106,9 +123,7 @@ public class CommonDao extends GenericBaseCommonDao implements ICommonDao, IGene
@SuppressWarnings("unchecked")
public Object uploadFile(UploadFile uploadFile) {
Object object = uploadFile.getObject();
if(uploadFile.getFileKey()!=null && !"TSDocument".equals(object.getClass().getSimpleName()))
if(uploadFile.getFileKey()!=null)
{
updateEntitie(object);
}

@ -5,10 +5,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.lang.model.util.ElementScanner6;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
@ -702,29 +705,36 @@ public abstract class GenericBaseCommonDao<T, PK extends Serializable>
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
}
if (StringUtils.isNotBlank(cq.getDataGrid().getSort())) {
String []sortArr = cq.getDataGrid().getSort().split(",");
Map<String, Object> ordermap = cq.getOrdermap();
if(ordermap==null){
ordermap = new LinkedHashMap<String, Object>();
}
String sort = cq.getDataGrid().getSort();
if (StringUtils.isNotBlank(sort)) {
String []sortArr = sort.split(",");
String []orderArr = cq.getDataGrid().getOrder().split(",");
if(sortArr.length==orderArr.length){
for(int i=0;i<sortArr.length;i++){
// cq.addOrder(sortArr[i], SortDirection.toEnum(orderArr[i]));
if (SortDirection.asc.equals(SortDirection.toEnum(orderArr[i]))) {
cq.getDetachedCriteria().addOrder(Order.asc(sortArr[i]));
} else {
cq.getDetachedCriteria().addOrder(Order.desc(sortArr[i]));
if(sortArr.length != orderArr.length && orderArr.length > 0){
for (int i = 0; i < sortArr.length; i++) {
if(SortDirection.asc.equals(SortDirection.toEnum(orderArr[0]))){
ordermap.put(sortArr[i], SortDirection.asc);
}else{
ordermap.put(sortArr[i], SortDirection.desc);
}
}
}else if(orderArr.length>0){
for(int i=0;i<sortArr.length;i++){
// cq.addOrder(sortArr[i], SortDirection.toEnum(orderArr[0]));
if (SortDirection.asc.equals(SortDirection.toEnum(orderArr[0]))) {
cq.getDetachedCriteria().addOrder(Order.asc(sortArr[i]));
} else {
cq.getDetachedCriteria().addOrder(Order.desc(sortArr[i]));
}else if(sortArr.length == orderArr.length){
for (int i = 0; i < sortArr.length; i++) {
if(SortDirection.asc.equals(SortDirection.toEnum(orderArr[i]))){
ordermap.put(sortArr[i], SortDirection.asc);
}else{
ordermap.put(sortArr[i], SortDirection.desc);
}
}
}
}
if(!ordermap.isEmpty() && ordermap.size()>0){
cq.setOrder(ordermap);
}
// 判断是否有排序字段

@ -132,7 +132,10 @@ public class GlobalExceptionResolver implements HandlerExceptionResolver {
} catch (IOException e) {
e.printStackTrace();
}finally{
pw.close();
try {
pw.close();
} catch (Exception e2) {
}
}
empty.clear();
return empty;

@ -2,6 +2,7 @@ package org.jeecgframework.core.common.hibernate.qbc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@ -100,7 +101,9 @@ public class CriteriaQuery {
public CriteriaQuery(Class<?> c) {
this.detachedCriteria = DetachedCriteria.forClass(c);
this.map = new HashMap<String, Object>();
this.ordermap = new HashMap<String, Object>();
this.ordermap = new LinkedHashMap<String, Object>();
}
public CriteriaQuery(Class<?> c, int curPage, String myAction, String myForm) {
@ -115,7 +118,9 @@ public class CriteriaQuery {
this.curPage = curPage;
this.detachedCriteria = DetachedCriteria.forClass(c);
this.map = new HashMap<String, Object>();
this.ordermap = new HashMap<String, Object>();
this.ordermap = new LinkedHashMap<String, Object>();
}
public CriteriaQuery(Class<?> entityClass, int curPage) {
@ -136,7 +141,9 @@ public class CriteriaQuery {
this.dataGrid=dg;
this.pageSize=dg.getRows();
this.map = new HashMap<String, Object>();
this.ordermap = new HashMap<String, Object>();
this.ordermap = new LinkedHashMap<String, Object>();
}
public CriteriaQuery(Class entityClass,DataTables dataTables) {
this.curPage = dataTables.getDisplayStart();
@ -149,7 +156,9 @@ public class CriteriaQuery {
this.dataTables=dataTables;
this.pageSize=dataTables.getDisplayLength();
this.map = new HashMap<String, Object>();
this.ordermap = new HashMap<String, Object>();
this.ordermap = new LinkedHashMap<String, Object>();
addJqCriteria(dataTables);
}

@ -41,12 +41,7 @@ public class UploadFile {
public UploadFile(HttpServletRequest request, Object object) {
String fileKey = oConvertUtils.getString(request.getParameter("fileKey"));// 文件ID
if("TSDocument".equals(object.getClass().getSimpleName()) && StringUtil.isNotEmpty(fileKey)){
this.fileKey = fileKey;
this.multipartRequest =(MultipartHttpServletRequest) request;
}else if (StringUtil.isNotEmpty(fileKey)) {
if (StringUtil.isNotEmpty(fileKey)) {
this.fileKey = fileKey;
this.request = request;
} else {

@ -45,6 +45,11 @@ public class DataGrid {
}
public void setSqlbuilder(String sqlbuilder) {
if(sqlbuilder.indexOf("≤") > 0) {
sqlbuilder = sqlbuilder.replace("≤", "<=");
}
this.sqlbuilder = sqlbuilder;
}

@ -8,6 +8,7 @@ import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.jeecgframework.core.common.dao.ICommonDao;
@ -17,6 +18,7 @@ import org.jeecgframework.core.common.hibernate.qbc.PageList;
import org.jeecgframework.core.common.model.common.DBTable;
import org.jeecgframework.core.common.model.common.UploadFile;
import org.jeecgframework.core.common.model.json.ComboTree;
import org.jeecgframework.core.common.model.json.DataGridReturn;
import org.jeecgframework.core.common.model.json.ImportFile;
import org.jeecgframework.core.common.model.json.TreeGrid;
import org.jeecgframework.core.common.service.CommonService;
@ -24,7 +26,6 @@ import org.jeecgframework.tag.vo.datatable.DataTableReturn;
import org.jeecgframework.tag.vo.easyui.Autocomplete;
import org.jeecgframework.tag.vo.easyui.ComboTreeModel;
import org.jeecgframework.tag.vo.easyui.TreeGridModel;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@ -24,8 +24,11 @@ public enum OnlineGenerateEnum {
ONLINE_DIV_SINGLE("div.single","DIV风格表单","single","ext"),
ONLINE_NOPOP_SINGLE("nopop.single","NOPOP风格表单","single","ext"),
ONLINE_ROW_SINGLE("rowedit.single","行编辑风格表单","single","ext");
ONLINE_ROW_SINGLE("rowedit.single","行编辑风格表单","single","ext"),
ONLINE_TAB_ONETOMANY("tab.onetomany","TAB风格表单","onetomany","ext");
// ONLINE_DEFAULT_SINGLE("default.single","用户扩展风格示例","single","ext"),
// ONLINE_DEFAULT_ONETOMANY("default.onetomany","用户扩展风格示例","onetomany","ext");

@ -15,8 +15,8 @@ public enum SysThemesEnum {
ACE_STYLE("ace","main/ace_main","metro", "ACE平面风格"),
ACE_LE_STYLE("acele","main/ace_main","metrole", "ACE2风格"),
DIY("diy","main/diy","default","diy风格"),
HPLUS("hplus","main/hplus_main","metrole","H+风格");
HPLUS("hplus","main/hplus_main","metrole","H+风格"),
FINEUI_STYLE("fineui","main/fineui_main","metrole", "fineUI风格");
/**
*
@ -79,7 +79,7 @@ public enum SysThemesEnum {
public static SysThemesEnum toEnum(String style) {
if (StringUtil.isEmpty(style)) {
//默认风格
return HPLUS;
return FINEUI_STYLE;
}
for(SysThemesEnum item : SysThemesEnum.values()) {
if(item.getStyle().equals(style)) {
@ -87,7 +87,7 @@ public enum SysThemesEnum {
}
}
//默认风格
return HPLUS;
return FINEUI_STYLE;
}
public String toString() {

@ -7,8 +7,12 @@ import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.persistence.Column;
@ -90,6 +94,7 @@ public class HqlGenerateUtil {
List<QueryCondition> list = JSONHelper.toList(json , QueryCondition.class);
String sql=getSql(list,"",searchObj.getClass());
LogUtil.debug("DEBUG sqlbuilder:"+sql);
//TODO 此用法在多表关联查询两个表存在相同字段的时候会存在问题hibernate维护的实体关系
cq.add(Restrictions.sqlRestriction(sql));
}
}catch(Exception e){
@ -121,7 +126,7 @@ public class HqlGenerateUtil {
cq.add(Restrictions.sqlRestriction("1=1"));
addPreCondition = false;
}
cq.add(Restrictions.sqlRestriction("("+ruleMap.get(c).getRuleValue()+")"));
cq.add(Restrictions.sqlRestriction("("+getSqlRuleValue(ruleMap.get(c).getRuleValue())+")"));
}
}
@ -267,6 +272,36 @@ public class HqlGenerateUtil {
}
}
private static String getSqlRuleValue(String sqlRule){
try {
Set<String> varParams = getSqlRuleParams(sqlRule);
for(String var:varParams){
String tempValue = ResourceUtil.converRuleValue(var);
sqlRule = sqlRule.replace("#{"+var+"}",tempValue);
}
} catch (Exception e) {
e.printStackTrace();
}
return sqlRule;
}
private static Set<String> getSqlRuleParams(String sql) {
if(oConvertUtils.isEmpty(sql)){
return null;
}
Set<String> varParams = new HashSet<String>();
String regex = "\\#\\{\\w+\\}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sql);
while(m.find()){
String var = m.group();
varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}")));
}
return varParams;
}
/**
*
*
@ -405,7 +440,13 @@ public class HqlGenerateUtil {
*/
public static String getSql(List<QueryCondition> list,String tab,Class claszz){
StringBuffer sb=new StringBuffer();
sb.append(" 1=1 ");
if(list.get(0).getRelation().equals("or")) {
sb.append(" 1=0 ");
} else {
sb.append(" 1=1 ");
}
for(QueryCondition c :list){
String column = invokeFindColumn(claszz,c.getField());
String type = invokeFindType(claszz,c.getField());
@ -413,7 +454,6 @@ public class HqlGenerateUtil {
c.setField(column);
sb.append(tab+c);sb.append("\r\n");
if(c.getChildren()!=null){
List list1= JSONHelper.toList(c.getChildren(), QueryCondition.class);
sb.append(tab);
sb.append(c.getRelation()+"( ");
@ -450,7 +490,16 @@ public class HqlGenerateUtil {
String column=null;
Field field;
try {
field = clazz.getDeclaredField(field_name);
//TODO 只能向上找一级,其他则失败。
boolean flag = getSuperDeclaredField(clazz,field_name);
if(flag) {
field = clazz.getDeclaredField(field_name);
} else {
Class cla = clazz.getSuperclass();
field = cla.getDeclaredField(field_name);
}
PropertyDescriptor pd = new PropertyDescriptor(field.getName(),clazz);
Method getMethod = pd.getReadMethod();//获得get方法
Column col=getMethod.getAnnotation(Column.class);
@ -526,4 +575,24 @@ public class HqlGenerateUtil {
}
return cq;
}
/**
* field
* @param clazz
* @param fieldName
* @return
*/
public static boolean getSuperDeclaredField(Class clazz,String fieldName) {
Field[] fields=clazz.getDeclaredFields();
boolean b=false;
for (int i = 0; i < fields.length; i++) {
if(fields[i].getName().equals(fieldName))
{
b=true;
break;
}
}
return b;
}
}

@ -1,7 +1,15 @@
package org.jeecgframework.core.extend.hqlsearch;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jeecgframework.core.extend.hqlsearch.parse.vo.HqlRuleEnum;
import org.jeecgframework.core.util.DateUtils;
import org.jeecgframework.core.util.ResourceUtil;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.web.system.pojo.base.TSDataRule;
/**
@ -37,7 +45,7 @@ public class SysContextSqlConvert {
HqlRuleEnum ruleEnum=HqlRuleEnum.getByValue(dataRule.getRuleConditions());
if(ruleEnum == HqlRuleEnum.SQL_RULES){
sqlValue +=" and ("+ dataRule.getRuleValue()+")";
sqlValue +=" and ("+ getSqlRuleValue(dataRule.getRuleValue())+")";
return sqlValue;
}
@ -94,6 +102,36 @@ public class SysContextSqlConvert {
return sqlValue;
}
private static String getSqlRuleValue(String sqlRule){
try {
Set<String> varParams = getSqlRuleParams(sqlRule);
for(String var:varParams){
String tempValue = ResourceUtil.converRuleValue(var);
sqlRule = sqlRule.replace("#{"+var+"}",tempValue);
}
} catch (Exception e) {
e.printStackTrace();
}
return sqlRule;
}
private static Set<String> getSqlRuleParams(String sql) {
if(oConvertUtils.isEmpty(sql)){
return null;
}
Set<String> varParams = new HashSet<String>();
String regex = "\\#\\{\\w+\\}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sql);
while(m.find()){
String var = m.group();
varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}")));
}
return varParams;
}
// /**
// *

@ -91,7 +91,7 @@ public class AuthInterceptor implements HandlerInterceptor {
* controller
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
//update-begin--Author:taoYan Date:201706028 for注解实现排除拦截
//判断是否被注解跳过权限认证 先判断类注解然后方法注解 都没有则走原来逻辑
HandlerMethod handlerMethod=(HandlerMethod)object;
JAuth jauthType =handlerMethod.getBean().getClass().getAnnotation(JAuth.class);
@ -109,25 +109,23 @@ public class AuthInterceptor implements HandlerInterceptor {
}
}
}
//update-end--Author:taoYan Date:201706028 for注解实现排除拦截
//update-begin--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
Boolean isAjax=isAjax(request,response);
//update-end--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
String requestPath = ResourceUtil.getRequestPath(request);// 用户访问的资源地址
//logger.info("-----authInterceptor----requestPath------"+requestPath);
//步骤一: 判断是否是排除拦截请求直接返回TRUE
//update-begin--Author:dangzhenghui Date:20170402 for对外接口改造 api 设置为默认对外路径不用进行登陆验证
if (requestPath.length()>3&&"api/".equals(requestPath.substring(0,4))) {
return true;
}
//update-begin--Author:end Date:20170402 for对外接口改造 api 设置为默认对外路径不用进行登陆验证
if (excludeUrls.contains(requestPath)) {
return true;
//update-begin--Author:zhoujf Date:20170426 forTASK #1867 【改造】权限拦截器支持模糊匹配
} else if(moHuContain(excludeContainUrls, requestPath)){
return true;
//update-end--Author:zhoujf Date:20170426 forTASK #1867 【改造】权限拦截器支持模糊匹配
} else {
//步骤二: 权限控制优先重组请求URL(考虑online请求前缀一致问题)
String clickFunctionId = request.getParameter("clickFunctionId");
@ -141,23 +139,23 @@ public class AuthInterceptor implements HandlerInterceptor {
if(requestPath.equals("cgAutoListController.do?list")) {
requestPath += "&id=" + request.getParameter("id");
}
//update-start--author:scott date:20170311 foronline新请求方式,权限控制------------
if(requestPath.endsWith("?olstylecode=")) {
requestPath = requestPath.replace("?olstylecode=", "");
}
//步骤三: 根据重组请求URL,进行权限授权判断
if((!hasMenuAuth(requestPath,clickFunctionId,currLoginUser)) && !currLoginUser.getUserName().equals("admin")){
//update-begin--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
if((!(hasMenuAuth(requestPath,clickFunctionId,currLoginUser)) && !currLoginUser.getUserName().equals("admin"))){
if(isAjax){
processAjax(response);
}else {
response.sendRedirect(request.getSession().getServletContext().getContextPath()+"/loginController.do?noAuth");
}
//update-end--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
return false;
}
//update-end--author:scott date:20170311 foronline新请求方式,权限控制------------
//解决rest风格下 权限失效问题
String functionId="";
@ -168,28 +166,28 @@ public class AuthInterceptor implements HandlerInterceptor {
}else {
realRequestPath=uri;
}
//update-begin--author:zhoujf date:20170307 forTASK #1745 【bug】自定义表单数据权限控制方式 1. 普通控件通过“控件名称”来控制 2. 列表控件,通过“控件名称.表头”来控制
// if(!oConvertUtils.isEmpty(clickFunctionId)){
// functionId = clickFunctionId;
// }else{
//update-begin--author:zhoujf date:20170304 for自定义表单页面控件权限控制-------------
if(realRequestPath.indexOf("autoFormController/af/")>-1 && realRequestPath.indexOf("?")!=-1){
realRequestPath = realRequestPath.substring(0, realRequestPath.indexOf("?"));
}
//update-end--author:scott date:20170304 for自定义表单页面控件权限控制---------------
List<TSFunction> functions = systemService.findByProperty(TSFunction.class, "functionUrl", realRequestPath);
if (functions.size()>0){
functionId = functions.get(0).getId();
}
// }
//update-begin--author:zhoujf date:20170307 forTASK #1745 【bug】自定义表单数据权限控制方式 1. 普通控件通过“控件名称”来控制 2. 列表控件,通过“控件名称.表头”来控制
//Step.1 第一部分处理页面表单和列表的页面控件权限(页面表单字段+页面按钮等控件)
if(!oConvertUtils.isEmpty(functionId)){
//update-begin-author:taoYan date:20170829 for:admin不作数据权限控制
if(!currLoginUser.getUserName().equals("admin")){
//获取菜单对应的页面控制权限(包括表单字段和操作按钮)
//update-begin-author:taoYan date:20170814 for:TASK #2207 【权限bug】多个角色权限并集问题因为是反的控制导致有admin的最大权限反而受小权限控制
List<TSOperation> operations = systemService.getOperationsByUserIdAndFunctionId(currLoginUser.getId(), functionId);
List<TSOperation> operations = systemService.getOperationsByUserIdAndFunctionId(currLoginUser, functionId);
request.setAttribute(Globals.NOAUTO_OPERATIONCODES, operations);
if(operations==null){
request.setAttribute(Globals.OPERATIONCODES, null);
@ -201,15 +199,13 @@ public class AuthInterceptor implements HandlerInterceptor {
request.setAttribute(Globals.OPERATIONCODES, operationCodes);
}
}
//update-end-author:taoYan date:20170829 for:admin不作数据权限控制
//Set<String> operationCodes = systemService.getOperationCodesByUserIdAndFunctionId(currLoginUser.getId(), functionId);
//request.setAttribute(Globals.OPERATIONCODES, operationCodes);
//}
//if(!oConvertUtils.isEmpty(functionId)){
//update-begin--Author:scott Date:20170330 for[online表单按钮\链接权限]jeecg 统一规则采用反的控制,授权的进行按钮或者字段 隐藏\禁用--------------------
// List<TSOperation> allOperation=this.systemService.findByProperty(TSOperation.class, "TSFunction.id", functionId);
// List<TSOperation> newall = new ArrayList<TSOperation>();
// if(allOperation.size()>0){
@ -217,10 +213,9 @@ public class AuthInterceptor implements HandlerInterceptor {
// //s=s.replaceAll(" ", "");
// newall.add(s);
// }
// //---author:jg_xugj----start-----date:20151210--------for#781 【oracle兼容】兼容问题fun.operation!='' 在oracle 数据下不正确
// String hasOperSql="SELECT operation FROM t_s_role_function fun, t_s_role_user role WHERE " +
// "fun.functionid='"+functionId+"' AND fun.operation is not null AND fun.roleid=role.roleid AND role.userid='"+currLoginUser.getId()+"' ";
// //---author:jg_xugj----end-----date:20151210--------for#781 【oracle兼容】兼容问题fun.operation!='' 在oracle 数据下不正确
// List<String> hasOperList = this.systemService.findListbySql(hasOperSql);
// for(String operationIds:hasOperList){
// for(String operationId:operationIds.split(",")){
@ -246,8 +241,7 @@ public class AuthInterceptor implements HandlerInterceptor {
}
}
request.setAttribute(Globals.NOAUTO_OPERATIONCODES, newall);*/
//update-end--Author:scott Date:20170330 for[online表单按钮权限\链接]jeecg 统一规则采用反的控制,授权的进行按钮或者字段 隐藏\禁用--------------------
//update-end-author:taoYan date:20170814 for:TASK #2207 【权限bug】多个角色权限并集问题因为是反的控制导致有admin的最大权限反而受小权限控制
//Step.2 第二部分处理列表数据级权限 (菜单数据规则集合)
List<TSDataRule> MENU_DATA_AUTHOR_RULES = new ArrayList<TSDataRule>();
@ -256,10 +250,10 @@ public class AuthInterceptor implements HandlerInterceptor {
//数据权限规则的查询
//查询所有的当前这个用户所对应的角色和菜单的datarule的数据规则id
//update-begin-author:taoYan date:20170829 for:admin不作数据权限控制
if(!currLoginUser.getUserName().equals("admin")){
//Globals.BUTTON_AUTHORITY_CHECK
Set<String> dataruleCodes = systemService.getOperationCodesByUserIdAndDataId(currLoginUser.getId(), functionId);
Set<String> dataruleCodes = systemService.getOperationCodesByUserIdAndDataId(currLoginUser, functionId);
request.setAttribute("dataRulecodes", dataruleCodes);
for (String dataRuleId : dataruleCodes) {
TSDataRule dataRule = systemService.getEntity(TSDataRule.class, dataRuleId);
@ -267,7 +261,7 @@ public class AuthInterceptor implements HandlerInterceptor {
MENU_DATA_AUTHOR_RULE_SQL += SysContextSqlConvert.setSqlModel(dataRule);
}
}
//update-end-author:taoYan date:20170829 for:admin不作数据权限控制
JeecgDataAutorUtils.installDataSearchConditon(request, MENU_DATA_AUTHOR_RULES);//菜单数据规则集合
JeecgDataAutorUtils.installDataSearchConditon(request, MENU_DATA_AUTHOR_RULE_SQL);//菜单数据规则sql
@ -281,8 +275,7 @@ public class AuthInterceptor implements HandlerInterceptor {
}
}
//update-start--author:scott date:20170225 for重构权限判断提高效率---------------
/**
* 访
* @param requestPath
@ -292,7 +285,7 @@ public class AuthInterceptor implements HandlerInterceptor {
*/
private boolean hasMenuAuth(String requestPath,String clickFunctionId,TSUser currLoginUser){
String userid = currLoginUser.getId();
//update-start--author:scott -------- date:20170330 -------- for菜单访问权限由模糊匹配改成精确匹配TODO ---------------
//step.1 先判断请求是否配置菜单,没有配置菜单默认不作权限控制[注意:这里不限制权限类型菜单]
String hasMenuSql = "select count(*) from t_s_function where functiontype = 0 and functionurl = '"+requestPath+"'";
Long hasMenuCount = systemService.getCountForJdbc(hasMenuSql);
@ -318,9 +311,9 @@ public class AuthInterceptor implements HandlerInterceptor {
}else{
return true;
}
//update-end--author:scott -------- date:20170330 -------- 菜单访问权限由模糊匹配改成精确匹配TODO ---------------
}
//update-end--author:scott date:20170225 for重构权限判断提高效率---------------
/**
*
@ -335,14 +328,14 @@ public class AuthInterceptor implements HandlerInterceptor {
}
private void forward(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//update-start--Author:scott Date:20160803 for无登陆情况跳转登陆页
//超时,未登陆页面跳转
//response.sendRedirect(request.getServletContext().getContextPath()+"/loginController.do?login");
// update-start--Author:chenjin Date:20160828 forTASK #1324 【bug】Session超时后重新登录页面显示在标签里,让它重新显示登录页面
response.sendRedirect(request.getSession().getServletContext().getContextPath()+"/webpage/login/timeout.jsp");
// update-end--Author:chenjin Date:20160828 forTASK #1324 【bug】Session超时后重新登录页面显示在标签里,让它重新显示登录页面
//request.getRequestDispatcher("loginController.do?login").forward(request, response);
//update-start--Author:scott Date:20160803 for无登陆情况跳转登陆页
}
/**
@ -367,7 +360,7 @@ public class AuthInterceptor implements HandlerInterceptor {
private boolean isAjax(HttpServletRequest request, HttpServletResponse response){
return oConvertUtils.isNotEmpty(request.getHeader("X-Requested-With"));
}
//update-begin--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
private void processAjax(HttpServletResponse response){
AjaxJson json = new AjaxJson();
json.setSuccess(false);
@ -383,5 +376,5 @@ public class AuthInterceptor implements HandlerInterceptor {
pw.close();
}
}
//update-end--Author:dangzhenghui Date:20170627 forTASK #2157 【bug】拦截器需要判断过来的请求是否ajax,如果ajax则返回无权限json,非跳转页面
}

@ -3,17 +3,23 @@ package org.jeecgframework.core.interceptors;
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.util.StringUtils;
/**
*
* @author
*
* @author
*
*/
public class DateConvertEditor extends PropertyEditorSupport {
private SimpleDateFormat datetimeFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
private SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/**
* date
* 2014-05-26 00:00:00
*/
public void setAsText(String text) throws IllegalArgumentException {
if (StringUtils.hasText(text)) {
try {
@ -28,13 +34,11 @@ public class DateConvertEditor extends PropertyEditorSupport {
} else if (text.indexOf(":") > 0 && text.indexOf(".") > 0 && text.length() > 21) {
text = text.substring(0, text.indexOf("."));
setValue(this.datetimeFormat.parse(text));
}else {
throw new IllegalArgumentException(
"Could not parse date, date format is error ");
} else {
throw new IllegalArgumentException("Could not parse date, date format is error ");
}
} catch (ParseException ex) {
IllegalArgumentException iae = new IllegalArgumentException(
"Could not parse date: " + ex.getMessage());
IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage());
iae.initCause(ex);
throw iae;
}
@ -42,4 +46,29 @@ public class DateConvertEditor extends PropertyEditorSupport {
setValue(null);
}
}
/**
*
*/
@Override
public String getAsText() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date value = (Date) getValue();
String dateStr = null;
if (value == null) {
return "";
} else {
try {
dateStr = sdf.format(value);
if (dateStr.endsWith(" 00:00:00")) {
dateStr = dateStr.substring(0, 10);
} else if (dateStr.endsWith(":00")) {
dateStr = dateStr.substring(0, 16);
}
return dateStr;
} catch (Exception ex) {
throw new IllegalArgumentException("转换日期失败: " + ex.getMessage(), ex);
}
}
}
}

@ -31,7 +31,7 @@ public class SignInterceptor implements HandlerInterceptor {
if (StringUtil.isEmpty(body)){
throw new BusinessException("body不能为空");
}
Map paramMap =new HashMap();
Map<String, String> paramMap =new HashMap<String, String>();
paramMap.put("body",body);
if(!SignatureUtil.checkSign(paramMap, SIGN_KEY, sign)){
throw new BusinessException("签名验证失败");

@ -22,9 +22,9 @@ public class FreemarkerHelper {
_tplConfig.setSharedVariable("DictData", (TemplateDirectiveModel)ApplicationContextUtil.getContext().getBean("dictDataTag"));
_tplConfig.setSharedVariable("mutiLang", (TemplateDirectiveModel)ApplicationContextUtil.getContext().getBean("mutiLangTag"));
_tplConfig.setClassForTemplateLoading(FreemarkerHelper.class, "/");
_tplConfig.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");
_tplConfig.setDateFormat("yyyy-MM-dd");
_tplConfig.setTimeFormat("HH:mm:ss");
_tplConfig.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");
_tplConfig.setDateFormat("yyyy-MM-dd");
_tplConfig.setTimeFormat("HH:mm:ss");
}
/**

@ -0,0 +1,60 @@
package org.jeecgframework.core.swagger;
import java.util.ArrayList;
import java.util.List;
import org.jeecgframework.jwt.def.JwtConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.annotations.ApiOperation;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import springfox.documentation.service.Parameter;
/**
* swagger
* @author
* @date 20171030
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.pathMapping("/rest/")//对请求的路径增加rest前缀
.globalOperationParameters(setHeaderToken())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //只过滤包含有ApiOperation注解的方法
.paths(PathSelectors.any()) //对所有的路径进行监控
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("基础平台 RESTful APIs")
.description("基础平台 RESTful 风格的接口文档,内容详细,极大的减少了前后端的沟通成本,同时确保代码与文档保持高度一致,极大的减少维护文档的时间。")
.termsOfServiceUrl("http://www.jeeecg.org")
.contact("JEECG")
.version("1.0.0")
.build();
}
private List<Parameter> setHeaderToken() {
ParameterBuilder tokenPar = new ParameterBuilder();
List<Parameter> pars = new ArrayList<Parameter>();
tokenPar.name(JwtConstants.AUTHORIZATION).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build();
pars.add(tokenPar.build());
return pars;
}
}

@ -128,7 +128,7 @@ public class DynamicTask {
try {
String newExpression = task.getCronExpression();
task = timeTaskService.get(TSTimeTaskEntity.class, task.getId());
//任务运行中
if("1".equals(task.getIsStart())){
CronTriggerBean trigger = (CronTriggerBean)schedulerFactory.getTrigger("cron_" + task.getId(), Scheduler.DEFAULT_GROUP);
@ -138,13 +138,16 @@ public class DynamicTask {
trigger.setCronExpression(newExpression);
schedulerFactory.rescheduleJob("cron_" + task.getId(), Scheduler.DEFAULT_GROUP, trigger);
}
}else{
//立即生效
startTask(task);
task.setIsEffect("1");
task.setIsStart("1");
timeTaskService.updateEntitie(task);
systemService.addLog(("立即生效开启任务")+task.getTaskId(), Globals.Log_Type_UPDATE, Globals.Log_Leavel_INFO);
logger.info(("立即生效开启任务")+"-------TaskId:"+task.getTaskId()+"-------Describe:"+task.getTaskDescribe()+"-----ClassName:"+task.getClassName() );
}
//检查数据库中的任务触发规则与新规则是否一致
if (!task.getCronExpression().equalsIgnoreCase(newExpression)) {
task.setCronExpression(newExpression);
timeTaskService.updateEntitie(task);
}
return true;
} catch (SchedulerException e) {

@ -1,5 +1,6 @@
package org.jeecgframework.core.util;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -21,8 +22,18 @@ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
*/
public class DynamicDBUtil {
private static final Logger logger = Logger.getLogger(DynamicDBUtil.class);
/**
*
*/
private static Map<String,BasicDataSource> dbSources = new HashMap<String,BasicDataSource>();
private static BasicDataSource getDataSource(final DynamicDataSourceEntity dynamicSourceEntity) {
/**
* 便
* @param dynamicSourceEntity
* @return
*/
@Deprecated
private static BasicDataSource getJdbcDataSource(final DynamicDataSourceEntity dynamicSourceEntity) {
BasicDataSource dataSource = new BasicDataSource();
String driverClassName = dynamicSourceEntity.getDriverClass();
@ -41,23 +52,48 @@ public class DynamicDBUtil {
return dataSource;
}
private static JdbcTemplate getJdbcTemplate(String dbKey) {
/**
* dbkey,
* @param dbKey
* @return
*/
public static BasicDataSource getDbSourceBydbKey(final String dbKey) {
//获取多数据源配置
DynamicDataSourceEntity dynamicSourceEntity = ResourceUtil.dynamicDataSourceMap.get(dbKey);
BasicDataSource dataSource = getDataSource(dynamicSourceEntity);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
//先判断缓存中是否存在数据库链接
BasicDataSource cacheDbSource = dbSources.get(dbKey);
if(cacheDbSource!=null && !cacheDbSource.isClosed()){
return cacheDbSource;
}else{
BasicDataSource dataSource = getJdbcDataSource(dynamicSourceEntity);
dbSources.put(dbKey, dataSource);
return dataSource;
}
}
/**
* 便main
* @param dynamicSourceEntity
* @return JdbcTemplate
/**
*
* @param dbKey
* @return
* @return
*/
@SuppressWarnings("unused")
private static JdbcTemplate getJdbcTemplate(DynamicDataSourceEntity dynamicSourceEntity) {
BasicDataSource dataSource = getDataSource(dynamicSourceEntity);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
public static void closeDBkey(final String dbKey){
BasicDataSource dataSource = getDbSourceBydbKey(dbKey);
try {
if(dataSource!=null && !dataSource.isClosed()){
dataSource.getConnection().commit();
dataSource.getConnection().close();
dataSource.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
private static JdbcTemplate getJdbcTemplate(String dbKey) {
BasicDataSource dataSource = getDbSourceBydbKey(dbKey);
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
return jdbcTemplate;
}
@ -77,7 +113,6 @@ public class DynamicDBUtil {
} else {
effectCount = jdbcTemplate.update(sql, param);
}
return effectCount;
}

@ -1038,4 +1038,95 @@ public class ListtoMenu {
}
return menuString.toString();
}
/**
* fineUI
* @param map
* @return
*/
public static String getFineuiMultistageTree(Map<Integer, List<TSFunction>> map) {
if(map==null||map.size()==0||!map.containsKey(0)){return "不具有任何权限,\n请找管理员分配权限";}
StringBuffer menuString = new StringBuffer();
List<TSFunction> list = map.get(0);
int curIndex = 0;
for (TSFunction function : list) {
String order = function.getFunctionOrder();
menuString.append("<li class='menu-item'>");
if(function.getFunctionIconStyle()!=null&&!function.getFunctionIconStyle().trim().equals("")){
menuString.append("<a href><i class=\"fa "+function.getFunctionIconStyle()+"\"></i>");
}else{
menuString.append("<a href><i class=\"fa fa-columns\"></i>");
}
menuString.append("<span class=\"menu-text\">");
menuString.append(getMutiLang(function.getFunctionName()));
menuString.append("</span>");
if(!function.hasSubFunction(map)){
menuString.append("</a></li>");
//menuString.append(getSubMenu(function,1,map));
}else{
menuString.append("<i class=\"icon-font icon-right\"></i>");
/**/
//menuString.append("<b class=\"arrow icon-angle-down\"></b></a><ul class=\"submenu\" >");
//class="" id="3" style='display: block;'
menuString.append("</a><ul class=\"menu-item-child\" id='menu-child-"+order+ "' >");
menuString.append(getFineuiSubMenu(function,1,map));
menuString.append("</ul></li>");
}
curIndex++;
}
return menuString.toString();
}
private static String getFineuiSubMenu(TSFunction parent, int level, Map<Integer, List<TSFunction>> map) {
StringBuffer menuString = new StringBuffer();
List<TSFunction> list = map.get(level);
for (TSFunction function : list) {
if (function.getTSFunction().getId().equals(parent.getId())){
if(!function.hasSubFunction(map)){
menuString.append(getLeafOfFineuiTree(function,map));
}else{
menuString.append(getLeafOfFineuiTree(function,map));
}
}
}
return menuString.toString();
}
private static String getLeafOfFineuiTree(TSFunction function,Map<Integer, List<TSFunction>> map) {
StringBuffer menuString = new StringBuffer();
String icon = "folder";
if (function.getTSIcon() != null) {
icon = ResourceUtil.allTSIcons.get(function.getTSIcon().getId()).getIconClas();
}
//addTabs({id:'home',title:'首页',close: false,url: 'loginController.do?home'});
String name = getMutiLang(function.getFunctionName()) ;
menuString.append("<li> <a class=\"F_menuItem\" href=\"").append(function.getFunctionUrl()).append("\">");
if(!function.hasSubFunction(map)){
if(function.getFunctionIconStyle()!=null&&!function.getFunctionIconStyle().trim().equals("")){
menuString.append("<i class=\"fa "+function.getFunctionIconStyle()+"\"></i>");
}
menuString.append("<span>");
menuString.append(name);
menuString.append("</span>");
menuString.append("</a>");
menuString.append("</li>");
}else {
if(function.getFunctionIconStyle()!=null&&!function.getFunctionIconStyle().trim().equals("")){
menuString.append("<i class=\"fa "+function.getFunctionIconStyle()+"\"></i>");
}else{
menuString.append("<i class=\"fa fa-columns\"></i>");
}
menuString.append("<span>");
menuString.append(name);
menuString.append("</span>");
menuString.append("<i class=\"icon-font icon-right\"></i>");
menuString.append("</a>");
menuString.append("<ul class=\"menu-item-child\" >");
menuString.append(getFineuiSubMenu(function,2,map));
menuString.append("</ul></li>");
}
return menuString.toString();
}
}

@ -9,8 +9,8 @@ import com.qcloud.cos.sign.Credentials;
public class QCloudUtils {
private static long appId = 1251108935;
private static String secretId = "AKIDeCYoxueSxIQW0PHzVqz3NhuwoYN34Y7W";
private static String secretKey = "NkARfmtpcDnIgssupY7Zs0zpeMwCJJ9q";
private static String secretId = "?";
private static String secretKey = "?";
private static String bucketName="jeecg";
private static Credentials cred=new Credentials(appId, secretId, secretKey);
private static ClientConfig clientConfig = new ClientConfig();

@ -0,0 +1,51 @@
package org.jeecgframework.core.util;
import java.util.Set;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
/**
* radis
* @author Yandong
*
*/
@SuppressWarnings("unchecked")
public class RedisCacheUtil {
private static RedisTemplate redisTemplate;
static{
redisTemplate=(RedisTemplate) ApplicationContextUtil.getContext().getBean("redisTemplate");
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
}
public static Object get(String cacheName, Object key) {
return redisTemplate.boundValueOps(cacheName+"_"+key).get();
}
public static void put(String cacheName, Object key, Object value) {
redisTemplate.boundValueOps(cacheName+"_"+key).set(value);
}
public static boolean remove(String cacheName, Object key) {
if(redisTemplate.hasKey(cacheName+"_"+key)){
redisTemplate.delete(cacheName+"_"+key);
return true;
}
return false;
}
/**
* redis cache
*/
public static void clean() {
Set dictKeys = redisTemplate.keys(EhcacheUtil.DictCache+"*");
Set eternalKeys = redisTemplate.keys(EhcacheUtil.EternalCache+"*");
Set tagKeys = redisTemplate.keys(EhcacheUtil.TagCache+"*");
if(dictKeys!=null && !dictKeys.isEmpty())redisTemplate.delete(dictKeys);
if(eternalKeys!=null && !eternalKeys.isEmpty())redisTemplate.delete(eternalKeys);
if(tagKeys!=null && !tagKeys.isEmpty())redisTemplate.delete(tagKeys);
}
}

@ -0,0 +1,317 @@
package org.jeecgframework.core.util;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.data.redis.core.BoundKeyOperations;
import org.springframework.data.redis.core.BoundListOperations;
import org.springframework.data.redis.core.BoundValueOperations;
import org.springframework.data.redis.core.RedisTemplate;
/**
* redis
* yugw 20170929 v2.0
* redisredis.properties
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public class RedisUtil {
private static RedisTemplate redisTemplate;
private static ConcurrentHashMap<String, BoundKeyOperations> boundKeyOperations = new ConcurrentHashMap<String, BoundKeyOperations>();
/**
*
*/
private static String StringRKey = "StringR.";
private static String ObjectRKey = "ObjectR.";
private static String ListRKey = "ListR.";
static {
if (redisTemplate == null) {
AbstractApplicationContext ac = new ClassPathXmlApplicationContext(
"classpath:/redis.xml");
redisTemplate = (RedisTemplate) ac.getBean("redisTemplate");
ac.close();
}
}
/**
* StringRedis
* getBoundsetIfAbsentsetdeletehasKeygetgetAndRemove
* getBound
* setIfAbsent
* set
* delete
* hasKey
* get
* getAndRemove
*/
public static class StringR {
/**getBound用来缓存处理类防止多次处理生成多个处理类*/
public static BoundValueOperations<String, String> getBound(String oldkey){
cleanOperas();
String key = StringRKey + oldkey;
BoundKeyOperations boundKeyOperation = boundKeyOperations.get(key);
if(boundKeyOperation == null){
boundKeyOperation = redisTemplate.boundValueOps(key);
boundKeyOperations.put(key, boundKeyOperation);
}
return (BoundValueOperations<String, String>)boundKeyOperation;
}
/**setIfAbsent 如果不存在就添加缓存*/
public static Boolean setIfAbsent(String key, String value) {
return setIfAbsent(key, value, 30L, TimeUnit.MINUTES);
}
/**setIfAbsent 如果不存在就添加缓存,并设置缓存超时时间*/
public static Boolean setIfAbsent(String key, String value, long expire,
TimeUnit timeUnit) {
if(hasKey(key)){
return false;
}else{
return set(key, value, expire, timeUnit);
}
}
/**set 添加或更改缓存内容*/
public static Boolean set(String key, String value) {
return set(key, value, 30L, TimeUnit.MINUTES);
}
/**set 添加或更改缓存内容,并设置过期时间*/
public static Boolean set(String key, String value, long expire,
TimeUnit timeUnit) {
Boolean rt = Boolean.FALSE;
getBound(key).set(value);
if (rt) {
redisTemplate.expire(StringRKey + key, expire, timeUnit);
}
return rt;
}
/**get 获取缓存内容*/
public static String get(String key) {
return getBound(key).get();
}
/**getAndRemove 获取缓存内容并删除缓存*/
public static String getAndRemove(String key) {
String rt = get(key);
delete(key);
return rt;
}
/**delete 删除缓存*/
public static void delete(String key) {
RedisUtil.delete(StringRKey, key);
}
/**hasKey 是否存在缓存*/
public static Boolean hasKey(String key) {
return RedisUtil.hasKey(StringRKey, key);
}
}
/**
* ObjectRedis
*/
public static class ObjectR {
/**getBound用来缓存处理类防止多次处理生成多个处理类*/
public static BoundValueOperations getBound(String oldkey){
cleanOperas();
String key = ObjectRKey + oldkey;
BoundKeyOperations boundKeyOperation = boundKeyOperations.get(key);
if(boundKeyOperation == null){
boundKeyOperation = redisTemplate.boundValueOps(key);
boundKeyOperations.put(key, boundKeyOperation);
}
return (BoundValueOperations)boundKeyOperation;
}
/**setIfAbsent 如果不存在就添加缓存*/
public static Boolean setIfAbsent(String key, Object value) {
return setIfAbsent(key, value, 30L, TimeUnit.MINUTES);
}
/**setIfAbsent 如果不存在就添加缓存,并设置缓存超时时间*/
public static Boolean setIfAbsent(String key, Object value, long expire,
TimeUnit timeUnit) {
if(hasKey(key)){
return false;
}else{
return set(key, value, expire, timeUnit);
}
}
/**set 添加或更改缓存内容*/
public static Boolean set(String key, Object value) {
return set(key, value, 30L, TimeUnit.MINUTES);
}
/**set 添加或更改缓存内容,并设置过期时间*/
public static Boolean set(String key, Object value, long expire,
TimeUnit timeUnit) {
Boolean rt = Boolean.FALSE;
if (value == null) {
return rt;
}
getBound(key).set(value);
if (rt) {
redisTemplate.expire(ObjectRKey + key, expire, timeUnit);
}
return rt;
}
/**get 获取缓存内容*/
public static Object get(String key) {
return getBound(key).get();
}
/**getAndRemove 获取缓存内容并删除缓存*/
public static Object getAndRemove(String key) {
Object rt = get(key);
delete(key);
return rt;
}
/**delete 删除缓存*/
public static void delete(String key) {
RedisUtil.delete(ObjectRKey, key);
}
/**hasKey 是否存在缓存*/
public static Boolean hasKey(String key) {
return RedisUtil.hasKey(ObjectRKey, key);
}
}
/**
* ListRedis
* add list
* size listsize
* get listindex
* getAll list
* getAllAndRemove list
*/
public static class ListR {
/**getBound用来缓存处理类防止多次处理生成多个处理类*/
public static BoundListOperations getBound(String oldkey){
cleanOperas();
String key = ListRKey + oldkey;
BoundKeyOperations boundKeyOperation = boundKeyOperations.get(key);
if(boundKeyOperation == null){
boundKeyOperation = redisTemplate.boundListOps(key);
boundKeyOperations.put(key, boundKeyOperation);
}
return (BoundListOperations)boundKeyOperation;
}
/**setIfAbsent 如果不存在就添加缓存*/
public static Boolean setIfAbsent(String key, List value) {
return setIfAbsent(key, value, 30L, TimeUnit.MINUTES);
}
/**setIfAbsent 如果不存在就添加缓存,并设置缓存超时时间*/
public static Boolean setIfAbsent(String key, List value, long expire,
TimeUnit timeUnit) {
if(hasKey(key)){
return false;
}else{
return set(key, value, expire, timeUnit);
}
}
/**set 添加或更改缓存内容*/
public static Boolean set(String key, List value) {
return set(key, value, 30L, TimeUnit.MINUTES);
}
/**set 添加或更改缓存内容,并设置过期时间*/
public static Boolean set(String key, List value, long expire,
TimeUnit timeUnit) {
Boolean rt = Boolean.FALSE;
if (value == null || value.size() <= 0) {
return rt;
}
BoundListOperations boundListOperations = getBound(key);
for(Object obj : value){
boundListOperations.rightPush(obj);
}
if (rt) {
redisTemplate.expire(ListRKey + key, expire, timeUnit);
}
return rt;
}
/**add 在list末添加新实体e*/
public static Boolean add(String key, Object value) {
return add(key, value, 30L, TimeUnit.MINUTES);
}
/**add 在list末添加新实体并设置过期时间*/
public static Boolean add(String key, Object value, long expire,
TimeUnit timeUnit) {
Boolean rt = Boolean.FALSE;
if (value == null) {
return rt;
}
getBound(key).rightPush(value);
if (rt) {
redisTemplate.expire(ListRKey + key, expire, timeUnit);
}
return rt;
}
/**size 当前list的size*/
public static Long size(String key) {
return getBound(key).size();
}
/**get 当前list的第index个数据*/
public static Object get(String key, long index) {
return getBound(key).index(index);
}
/**getAll 获取当前list数据*/
public static ArrayList getAll(String key) {
if(!hasKey(key)){
return null;
}
List<String> list = getBound(key).range(0, size(key) - 1);
ArrayList result = new ArrayList();
for(Object single : list){
result.add(single);
}
return result;
}
/**getAllAndRemove 获取当前list数据并删除缓存*/
public static ArrayList getAllAndRemove(String key) {
ArrayList rt = getAll(key);
delete(key);
return rt;
}
/**delete 删除缓存*/
public static void delete(String key) {
RedisUtil.delete(ListRKey, key);
}
/**hasKey 是否存在缓存*/
public static Boolean hasKey(String key) {
return RedisUtil.hasKey(ListRKey, key);
}
}
private static Long lastGet;
/**清理boundKeyOperations*/
public static void cleanOperas(){
if(lastGet == null){
lastGet = System.currentTimeMillis();
return;
}
//每过20分钟清理一次防止无效Opera占用内存
if(System.currentTimeMillis() - lastGet > 20*60*1000){
boundKeyOperations = new ConcurrentHashMap<String, BoundKeyOperations>();
}
}
/**
*
* @param area
* @param key
*/
public static void delete(String area, String key) {
redisTemplate.delete(area + key);
}
/**
* hasKey
* @param area
* @param key
*/
public static Boolean hasKey(String area, String key) {
return redisTemplate.hasKey(area + key);
}
/**
* redis
*/
public static void cleanAll(){
redisTemplate.getConnectionFactory().getConnection().flushAll();
}
}

@ -1,7 +1,9 @@
package org.jeecgframework.core.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
@ -173,4 +175,64 @@ public class ReflectHelper {
return list;
}
/**
*
* */
public static Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
*
* */
public static String[] getFiledName(Object o){
Field[] fields=o.getClass().getDeclaredFields();
String[] fieldNames=new String[fields.length];
for(int i=0;i<fields.length;i++){
//System.out.println(fields[i].getType());
fieldNames[i]=fields[i].getName();
}
return fieldNames;
}
/**
* (type)(name)(value)maplist
* */
public static List<Map> getFiledsInfo(Object o){
Field[] fields=o.getClass().getDeclaredFields();
String[] fieldNames=new String[fields.length];
List<Map> list = new ArrayList<Map>();
Map<String, Object> infoMap=null;
for(int i=0;i<fields.length;i++){
infoMap = new HashMap<String, Object>();
infoMap.put("type", fields[i].getType().toString());
infoMap.put("name", fields[i].getName());
infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
list.add(infoMap);
}
return list;
}
/**
*
* */
public static Object[] getFiledValues(Object o){
String[] fieldNames=getFiledName(o);
Object[] value=new Object[fieldNames.length];
for(int i=0;i<fieldNames.length;i++){
value[i]=getFieldValueByName(fieldNames[i], o);
}
return value;
}
}

@ -46,7 +46,7 @@ public class ResourceUtil {
*/
public static Map<String, TSIcon> allTSIcons = new HashMap<String,TSIcon>();
/**
*
*
*/
public static Map<String, DynamicDataSourceEntity> dynamicDataSourceMap = new HashMap<String, DynamicDataSourceEntity>();
@ -120,7 +120,13 @@ public class ResourceUtil {
}
if(requestPath.indexOf("=")!=-1){
requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3);
if(requestPath.indexOf(".do")!=-1){
requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3);
}else{
requestPath = requestPath.substring(0,requestPath.indexOf("?"));
}
}
requestPath = requestPath.substring(request.getContextPath().length() + 1);// 去掉项目路径

@ -450,6 +450,28 @@ public class StringUtil {
return null;
}
/**
* = {"a":"1","b":"2"}
* @param map
* @return
*/
public static String HashMapToJsonContent(HashMap<String, String> map) {
if (map != null && map.size() > 0) {
String result = "{";
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String name = (String) it.next();
String value = (String) map.get(name);
result += (result.equals("{")) ? "" : ", ";
result += String.format("\"%s\":\"%s\"", name, value);
}
result += "}";
return result;
}
return null;
}
/**
* = (a=1&b=2 => a=1,b=2)
*

@ -18,9 +18,6 @@ import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
*
* @author
@ -393,5 +390,67 @@ public class oConvertUtils {
private static boolean isInner(long userIp, long begin, long end) {
return (userIp >= begin) && (userIp <= end);
}
/**
* 线
* 线</br>
* hello_world->helloWorld
*
* @param name
* 线
* @return
*/
public static String camelName(String name) {
StringBuilder result = new StringBuilder();
// 快速检查
if (name == null || name.isEmpty()) {
// 没必要转换
return "";
} else if (!name.contains("_")) {
// 不含下划线,仅将首字母小写
return name.substring(0, 1).toLowerCase() + name.substring(1);
}
// 用下划线将原始字符串分割
String camels[] = name.split("_");
for (String camel : camels) {
// 跳过原始字符串中开头、结尾的下换线或双重下划线
if (camel.isEmpty()) {
continue;
}
// 处理真正的驼峰片段
if (result.length() == 0) {
// 第一个驼峰片段,全部字母都小写
result.append(camel.toLowerCase());
} else {
// 其他的驼峰片段,首字母大写
result.append(camel.substring(0, 1).toUpperCase());
result.append(camel.substring(1).toLowerCase());
}
}
return result.toString();
}
/**
* 线
* 线</br>
* hello_world,test_id->helloWorld,testId
*
* @param name
* 线
* @return
*/
public static String camelNames(String names) {
if(names==null||names.equals("")){
return null;
}
StringBuffer sf = new StringBuffer();
String[] fs = names.split(",");
for (String field : fs) {
field = camelName(field);
sf.append(field + ",");
}
String result = sf.toString();
return result.substring(0, result.length() - 1);
}
}

@ -3,7 +3,7 @@ package org.jeecgframework.easypoi.service;
import java.util.ArrayList;
import java.util.List;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.apache.log4j.Logger;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.web.system.dao.JeecgDictDao;
import org.jeecgframework.web.system.pojo.base.DictEntity;
@ -19,6 +19,8 @@ import org.springframework.stereotype.Service;
*/
@Service("easypoiDictService")
public class EasypoiDictService implements EasypoiDictServiceI {
private Logger log = Logger.getLogger(EasypoiDictService.class);
@Autowired
private JeecgDictDao jeecgDictDao;
@Autowired
@ -38,8 +40,12 @@ public class EasypoiDictService implements EasypoiDictServiceI {
if(StringUtil.isEmpty(dicTable)){
dictList = jeecgDictDao.querySystemDict(dicCode);
}else {
dicText = StringUtil.isEmpty(dicText, dicCode);
dictList = jeecgDictDao.queryCustomDict(dicTable, dicCode, dicText);
try {
dicText = StringUtil.isEmpty(dicText, dicCode);
dictList = jeecgDictDao.queryCustomDict(dicTable, dicCode, dicText);
} catch (Exception e) {
log.error(e.toString());
}
}
for(DictEntity t:dictList){
dictReplace.add(mutiLangService.getLang(t.getTypename())+"_"+t.getTypecode());

@ -0,0 +1,117 @@
package org.jeecgframework.jwt.aop;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.jwt.def.JwtConstants;
import org.jeecgframework.jwt.model.TokenModel;
import org.jeecgframework.jwt.service.TokenManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* Restful TokenJWT
*
* @author scott
* @date 2015/7/30.
*/
@Component
public class RestAuthTokenInterceptor implements HandlerInterceptor {
@Autowired
private TokenManager manager;
@Override
public void afterCompletion(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj, Exception exception) throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
String requestPath = request.getRequestURI().substring(request.getContextPath().length());
if(requestPath.indexOf("/rest/")==-1 || excludeUrls.contains(requestPath) ||moHuContain(excludeContainUrls, requestPath)){
return true;
}
//从header中得到token
String authHeader = request.getHeader(JwtConstants.AUTHORIZATION);
if (authHeader == null) {
throw new ServletException("Missing or invalid X-AUTH-TOKEN header.");
}
// 验证token
Claims claims = null;
try {
claims = Jwts.parser().setSigningKey(JwtConstants.JWT_SECRET).parseClaimsJws(authHeader).getBody();
}catch (final SignatureException e) {
throw new ServletException("Invalid token.");
}
Object username = claims.getId();
if (oConvertUtils.isEmpty(username)) {
throw new ServletException("Invalid X-AUTH-TOKEN Subject no exist username.");
}
TokenModel model = manager.getToken(authHeader,username.toString());
if (manager.checkToken(model)) {
//如果token验证成功将对象传递给下一个请求
request.setAttribute(JwtConstants.CURRENT_TOKEN_CLAIMS, claims);
//如果token验证成功将token对应的用户id存在request中便于之后注入
request.setAttribute(JwtConstants.CURRENT_USER_NAME, model.getUsername());
return true;
} else {
// 如果验证token失败则返回401错误
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
}
@Override
public void postHandle(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse, Object obj, ModelAndView modelandview) throws Exception {
// TODO Auto-generated method stub
}
private List<String> excludeUrls;
/**
*
*/
private List<String> excludeContainUrls;
public List<String> getExcludeUrls() {
return excludeUrls;
}
public void setExcludeUrls(List<String> excludeUrls) {
this.excludeUrls = excludeUrls;
}
public List<String> getExcludeContainUrls() {
return excludeContainUrls;
}
public void setExcludeContainUrls(List<String> excludeContainUrls) {
this.excludeContainUrls = excludeContainUrls;
}
/**
*
* @param list
* @param key
* @return
*/
private boolean moHuContain(List<String> list,String key){
for(String str : list){
if(key.contains(str)){
return true;
}
}
return false;
}
}

@ -0,0 +1,15 @@
package org.jeecgframework.jwt.def;
public class JwtConstants {
/**
* 线
*/
public static final String JWT_SECRET = "JYJ5Qv2WF4lA6jPl5GKuAG";
public static final String AUTHORIZATION = "X-AUTH-TOKEN";
public static final String CURRENT_USER_NAME = "CURRENT_TOKEN_USER_NAME";
public static final String CURRENT_TOKEN_CLAIMS = "CURRENT_TOKEN_CLAIMS";
public static final long TOKEN_EXPIRES_HOUR = 2;
}

@ -0,0 +1,36 @@
package org.jeecgframework.jwt.model;
/**
* TokenModelurl
* @author ScienJus
* @date 2015/7/31.
*/
public class TokenModel {
//用户id
private String username;
//随机生成的uuid
private String token;
public TokenModel(String username, String token) {
this.username = username;
this.token = token;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}

@ -0,0 +1,65 @@
package org.jeecgframework.jwt.service;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import org.jeecgframework.jwt.def.JwtConstants;
import org.jeecgframework.jwt.model.TokenModel;
import org.jeecgframework.web.system.pojo.base.TSUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.stereotype.Component;
/**
* Redistoken
* @author ScienJus
* @date 2015/7/31.
*/
@Component
public class RedisTokenManager implements TokenManager {
private RedisTemplate redisTemplate;
@Autowired
public void setRedis(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
//泛型设置成Long后必须更改对应的序列化方案
redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer());
}
/**
* TOKEN
*/
public String createToken(TSUser user) {
//使用uuid作为源token
String token = Jwts.builder().setId(user.getUserName()).setSubject(user.getUserName()).setIssuedAt(new Date()).signWith(SignatureAlgorithm.HS256, JwtConstants.JWT_SECRET).compact();
//存储到redis并设置过期时间
redisTemplate.boundValueOps(user.getUserName()).set(token, JwtConstants.TOKEN_EXPIRES_HOUR, TimeUnit.HOURS);
return token;
}
public TokenModel getToken(String token,String userid) {
return new TokenModel(userid, token);
}
public boolean checkToken(TokenModel model) {
if (model == null) {
return false;
}
String token = (String) redisTemplate.boundValueOps(model.getUsername()).get();
if (token == null || !token.equals(model.getToken())) {
return false;
}
//如果验证成功说明此用户进行了一次有效操作延长token的过期时间
redisTemplate.boundValueOps(model.getUsername()).expire(JwtConstants.TOKEN_EXPIRES_HOUR, TimeUnit.HOURS);
return true;
}
public void deleteToken(String username) {
redisTemplate.delete(username);
}
}

@ -0,0 +1,41 @@
package org.jeecgframework.jwt.service;
import org.jeecgframework.jwt.model.TokenModel;
import org.jeecgframework.web.system.pojo.base.TSUser;
/**
* token
* @author ScienJus
* @date 2015/7/31.
*/
public interface TokenManager {
/**
* token
* @param username
* @param userpaswd
* @return token
*/
public String createToken(TSUser user);
/**
* token
* @param model token
* @return
*/
public boolean checkToken(TokenModel model);
/**
* token
* @param authentication
* @return
*/
public TokenModel getToken(String token,String userid);
/**
* token
* @param username
*/
public void deleteToken(String username);
}

@ -0,0 +1,73 @@
package org.jeecgframework.jwt.util;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
/**
* Created by ChenSS on 2016/9/28.
*/
public class GsonUtil {
private static final Gson gson = new Gson();
/**
* Json
*/
public static String toJson(Object object) {
return gson.toJson(object);
}
/**
* JsonJava
*/
public static <T> T fromJson(String json, Class<T> clz) {
return gson.fromJson(json, clz);
}
/**
* JsonList
*/
public static <T> List<T> jsonToList(String json, Class<T> clz) {
Type type = new TypeToken<List<T>>() {
}.getType();
return gson.fromJson(json, type);
}
/**
* JsonList,使
*/
public static <T> List<T> fromJsonList(String json, Class<T> cls) {
List<T> mList = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
Gson mGson = new Gson();
for (final JsonElement elem : array) {
mList.add(mGson.fromJson(elem, cls));
}
return mList;
}
/**
* JsonMapList
*/
public static <T> List<Map<String, T>> toListMap(String json, Class<T> clz) {
Type type = new TypeToken<List<Map<String, T>>>() {
}.getType();
return gson.fromJson(json, type);
}
/**
* JsonMap
*/
public static <T> Map<String, T> toMap(String json, Class<T> clz) {
Type type = new TypeToken<Map<String, T>>() {
}.getType();
return gson.fromJson(json, type);
}
}

@ -0,0 +1,165 @@
package org.jeecgframework.jwt.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.jeecgframework.core.util.LogUtil;
import com.alibaba.fastjson.JSONObject;
/**
* JWT
* @author qinfeng
*
*/
public class JwtHttpUtil {
/**
* https
*
* @param requestUrl
*
* @param requestMethod
* GETPOST
* @param outputStr
*
* @return JSONObject(JSONObject.get(key)json)
*/
public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr, String sign) {
JSONObject jsonObject = null;
StringBuffer buffer = new StringBuffer();
HttpURLConnection httpUrlConn = null;
try {
// 创建SSLContext对象并使用我们指定的信任管理器初始化
URL url = new URL(requestUrl);
httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestProperty("X-AUTH-TOKEN", sign);
httpUrlConn.setRequestProperty("Accept", "*/*");
httpUrlConn.setRequestProperty("Content-Type", "application/json");
// 设置请求方式GET/POST
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
System.out.println(buffer.toString());
jsonObject = JSONObject.parseObject(buffer.toString());
// jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
LogUtil.info("Weixin server connection timed out.");
} catch (Exception e) {
e.printStackTrace();
org.jeecgframework.core.util.LogUtil.info("https request error:{}" + e.getMessage());
} finally {
try {
httpUrlConn.disconnect();
} catch (Exception e) {
e.printStackTrace();
org.jeecgframework.core.util.LogUtil.info("http close error:{}" + e.getMessage());
}
}
return jsonObject;
}
/**
* https
*
* @param requestUrl
*
* @param requestMethod
* GETPOST
* @param outputStr
*
* @return JSONObject(JSONObject.get(key)json)
*/
public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {
String res = "";
StringBuffer buffer = new StringBuffer();
HttpURLConnection httpUrlConn = null;
try {
// 创建SSLContext对象并使用我们指定的信任管理器初始化
URL url = new URL(requestUrl);
httpUrlConn = (HttpURLConnection) url.openConnection();
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
httpUrlConn.setRequestProperty("Accept", "text/plain");
httpUrlConn.setRequestProperty("Content-Type", "application/json");
// 设置请求方式GET/POST
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream = null;
httpUrlConn.disconnect();
res = buffer.toString();
System.out.println(res);
// jsonObject = JSONObject.parseObject(buffer.toString());
// jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
LogUtil.info("Weixin server connection timed out.");
} catch (Exception e) {
e.printStackTrace();
org.jeecgframework.core.util.LogUtil.info("https request error:{}" + e.getMessage());
} finally {
try {
httpUrlConn.disconnect();
} catch (Exception e) {
e.printStackTrace();
org.jeecgframework.core.util.LogUtil.info("http close error:{}" + e.getMessage());
}
}
return res;
}
}

@ -0,0 +1,59 @@
package org.jeecgframework.jwt.util;
import org.jeecgframework.jwt.util.menu.ResponseMessageCodeEnum;
/**
* restful
* @author scott
* @param <T>
*/
public class ResponseMessage<T> {
private String respCode;
private String respMsg;
private T data;
private boolean ok;
public ResponseMessage() {
}
public ResponseMessage(ResponseMessageCodeEnum codeEnum, String message) {
this.respCode = codeEnum.getCode();
this.respMsg = message;
}
public ResponseMessage(ResponseMessageCodeEnum codeEnum, String message, boolean ok, T data) {
this.respCode = codeEnum.getCode();
this.respMsg = message;
this.ok = ok;
this.data = data;
}
public String getRespCode() {
return respCode;
}
public void setRespCode(String respCode) {
this.respCode = respCode;
}
public String getMessage() {
return respMsg;
}
public void setMessage(String message) {
this.respMsg = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public boolean isOk() {
return ok;
}
}

@ -0,0 +1,55 @@
package org.jeecgframework.jwt.util;
import org.jeecgframework.jwt.util.menu.ResponseMessageCodeEnum;
/**
* restful
* @author scott
*
*/
public class Result {
private static final ResponseMessage RESPONSE_MESSAGE_SUCCESS = new ResponseMessage(ResponseMessageCodeEnum.SUCCESS, "成功",true,null);
public static ResponseMessage success() {
return RESPONSE_MESSAGE_SUCCESS;
}
public static <T> ResponseMessage<T> success(T t) {
return new ResponseMessage(ResponseMessageCodeEnum.SUCCESS, "成功", true, t);
}
public static <T> ResponseMessage<T> success(ResponseMessageCodeEnum codeEnum, T t) {
return new ResponseMessage(codeEnum, "", true, t);
}
public static <T> ResponseMessage<T> success(ResponseMessageCodeEnum codeEnum, String message, T t) {
return new ResponseMessage(codeEnum, message, true, t);
}
public static ResponseMessage error() {
return error("失败");
}
public static ResponseMessage error(String message) {
return error(ResponseMessageCodeEnum.ERROR, message);
}
public static ResponseMessage error(ResponseMessageCodeEnum codeEnum, String message) {
return error(codeEnum, message, null);
}
public static <T> ResponseMessage<T> error(ResponseMessageCodeEnum codeEnum, String message, T t) {
return new ResponseMessage(codeEnum, message, false, t);
}
/**
*
* @param <T>
* @param t
* @return
*/
public static <T> ResponseMessage<T> errorValid(T t) {
return new ResponseMessage(ResponseMessageCodeEnum.VALID_ERROR, "校验失败", false, t);
}
}

@ -0,0 +1,44 @@
package org.jeecgframework.jwt.util;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;
import org.jeecgframework.jwt.def.JwtConstants;
public class TestJwtSignToken {
public static void main1(String[] args) {
// 生成JWT签名
String compactJws = Jwts.builder().setId("8a8ab0b246dc81120146dc8181950052").setSubject("admin").claim("age", "999").signWith(SignatureAlgorithm.HS512, JwtConstants.JWT_SECRET).compact();
System.out.println(compactJws);
try {
// 验证JWT签名
Jws<Claims> parseClaimsJws = Jwts.parser().setSigningKey(JwtConstants.JWT_SECRET).parseClaimsJws(compactJws);// compactJws为jwt字符串
Claims body = parseClaimsJws.getBody();// 得到body后我们可以从body中获取我们需要的信息
// 比如 获取主题,当然这是我们在生成jwt字符串的时候就已经存进来的
String subject = body.getSubject();
System.out.println("subject:" + subject);
System.out.println("body:" + body);
System.out.println("id:" + body.getId());
// OK, we can trust this JWT
} catch (SignatureException e) {
// TODO: handle exception
// don't trust the JWT!
// jwt 解析错误
e.printStackTrace();
} catch (ExpiredJwtException e) {
// TODO: handle exception
// jwt
// 已经过期在设置jwt的时候如果设置了过期时间这里会自动判断jwt是否已经过期如果过期则会抛出这个异常我们可以抓住这个异常并作相关处理。
e.printStackTrace();
}
}
}

@ -0,0 +1,30 @@
package org.jeecgframework.jwt.util.menu;
/**
*
* @author scott
*
*/
public enum ResponseMessageCodeEnum {
SUCCESS("0"),
ERROR("-1"),
VALID_ERROR("1000"),//校验失败
SAVE_SUCCESS("r0001"),
UPDATE_SUCCESS("r0002"),
REMOVE_SUCCESS("r0003");
private String code;
ResponseMessageCodeEnum(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}

@ -0,0 +1,87 @@
package org.jeecgframework.jwt.web;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.jeecgframework.jwt.service.TokenManager;
import org.jeecgframework.jwt.util.ResponseMessage;
import org.jeecgframework.jwt.util.Result;
import org.jeecgframework.web.system.pojo.base.TSUser;
import org.jeecgframework.web.system.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* token
* Restful退
*
* @author scott
* @date 2015/7/30.
*/
@Api(value = "token", description = "鉴权token接口", tags = "tokenAPI")
@Controller
@RequestMapping("/tokens")
public class TokenController {
private static final Logger logger = Logger.getLogger(TokenController.class);
@Autowired
private UserService userService;
@Autowired
private TokenManager tokenManager;
@ApiOperation(value = "获取TOKEN")
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<?> login(@RequestParam String username, @RequestParam String password) {
logger.info("获取TOKEN[{}]" + username);
// 验证
if (StringUtils.isEmpty(username)) {
return new ResponseEntity("用户账号不能为空!", HttpStatus.NOT_FOUND);
}
// 验证
if (StringUtils.isEmpty(username)) {
return new ResponseEntity("用户密码不能为空!", HttpStatus.NOT_FOUND);
}
Assert.notNull(username, "username can not be empty");
Assert.notNull(password, "password can not be empty");
TSUser user = userService.checkUserExits(username, password);
if (user == null) {
// 提示用户名或密码错误
logger.info("获取TOKEN,户账号密码错误[{}]" + username);
return new ResponseEntity("用户账号密码错误!", HttpStatus.NOT_FOUND);
}
// 生成一个token保存用户登录状态
String token = tokenManager.createToken(user);
return new ResponseEntity(token, HttpStatus.OK);
}
@ApiOperation(value = "销毁TOKEN")
@RequestMapping(value = "/{username}", method = RequestMethod.DELETE)
@ResponseBody
public ResponseMessage<?> logout(@ApiParam(name = "username", value = "用户账号", required = true) @PathVariable("username") String username) {
logger.info("deleteToken[{}]" + username);
// 验证
if (StringUtils.isEmpty(username)) {
return Result.error("用户账号,不能为空!");
}
try {
tokenManager.deleteToken(username);
} catch (Exception e) {
e.printStackTrace();
return Result.error("销毁TOKEN失败");
}
return Result.success();
}
}

@ -112,6 +112,7 @@ public class BaseTag extends JeecgTag {
//插入多语言脚本
String lang = (String)((HttpServletRequest) this.pageContext.getRequest()).getSession().getAttribute("lang");
if(lang==null){lang="zh-cn";}
String langjs = StringUtil.replace("<script type=\"text/javascript\" src=\"plug-in/mutiLang/{0}.js\"></script>", "{0}", lang);
sb.append(langjs);

@ -2,9 +2,7 @@ package org.jeecgframework.tag.core.easyui;
import java.io.IOException;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@ -22,6 +20,7 @@ import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.jeecgframework.core.constant.Globals;
import org.jeecgframework.core.online.util.FreemarkerHelper;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.core.util.ContextHolderUtils;
import org.jeecgframework.core.util.MutiLangUtil;
@ -34,6 +33,11 @@ import org.jeecgframework.tag.vo.easyui.ColumnValue;
import org.jeecgframework.tag.vo.easyui.DataGridColumn;
import org.jeecgframework.tag.vo.easyui.DataGridUrl;
import org.jeecgframework.tag.vo.easyui.OptTypeDirection;
import org.jeecgframework.web.cgform.common.CgAutoListConstant;
import org.jeecgframework.web.cgform.entity.config.CgFormHeadEntity;
import org.jeecgframework.web.cgform.entity.config.CgSubTableVO;
import org.jeecgframework.web.cgform.service.config.CgFormFieldServiceI;
import org.jeecgframework.web.cgform.util.PublicUtil;
import org.jeecgframework.web.system.pojo.base.TSOperation;
import org.jeecgframework.web.system.pojo.base.TSType;
import org.jeecgframework.web.system.service.SystemService;
@ -80,6 +84,7 @@ public class DataGridTag extends JeecgTag {
private boolean openFirstNode = false;//是不是展开第一个节点
private boolean fit = true;// 是否允许表格自动缩放,以适应父容器
private boolean fitColumns = true;// 当为true时自动展开/合同列的大小,以适应的宽度,防止横向滚动.
private boolean collapsible = false;// 当为true时开启收起/展开,默认不启动.
private String sortName;//定义的列进行排序
private String sortOrder = "asc";//定义列的排序顺序,只能是"递增"或"降序".
private boolean showRefresh = true;// 定义是否显示刷新按钮
@ -108,6 +113,25 @@ public class DataGridTag extends JeecgTag {
private String treeField;//树形列表展示列
private String btnCls;//列表上方button样式class属性
protected CgFormHeadEntity head;
protected Map<String, Object> tableData = new HashMap<String, Object>();
private String configId = "";
private boolean isShowSubGrid=false;//是否显示表体数据 值为true 或者false
public String getConfigId() {
return configId;
}
public void setConfigId(String configId) {
this.configId = configId;
}
public boolean getIsShowSubGrid() {
return isShowSubGrid;
}
public void setIsShowSubGrid(boolean isShowSubGrid) {
this.isShowSubGrid = isShowSubGrid;
}
public String getBtnCls() {
return btnCls;
@ -139,6 +163,23 @@ public class DataGridTag extends JeecgTag {
this.queryBuilder = queryBulder;
}
private boolean superQuery = false; //高级查询器
public boolean getSuperQuery() {
return superQuery;
}
public void setSuperQuery(boolean superQuery) {
this.superQuery = superQuery;
}
private String complexSuperQuery = ""; //根据表的编码是否存在展示高级查询构造器
public String getComplexSuperQuery() {
return complexSuperQuery;
}
public void setComplexSuperQuery(String complexSuperQuery) {
this.complexSuperQuery = complexSuperQuery;
}
public void setTreeField(String treeField) {
this.treeField = treeField;
}
@ -455,7 +496,6 @@ public class DataGridTag extends JeecgTag {
dataGridColumn.setShowMode(showMode);
columnList.add(dataGridColumn);
Set<String> operationCodes = (Set<String>) super.pageContext.getRequest().getAttribute(Globals.OPERATIONCODES);
if (null!=operationCodes) {
for (String MyoperationCode : operationCodes) {
@ -469,7 +509,6 @@ public class DataGridTag extends JeecgTag {
}
}
}
if (field != "opt") {
fields += field + ",";
if ("group".equals(queryMode)) {
@ -518,7 +557,7 @@ public class DataGridTag extends JeecgTag {
text += MutiLangUtil.doMutiLang(type.getTypename(), "") + ",";
value += type.getTypecode() + ",";
}
setColumn(field, text, value);
setColumn(field, text, value);
}
}
}
@ -787,7 +826,6 @@ public class DataGridTag extends JeecgTag {
}
sb.append("<div class=\"tool_bar_div bg-info\"></div>");
sb.append("');");
//表格顶部查询
if(hasQueryColum(columnList) && !columnList.isEmpty()){
for (DataGridColumn column : columnList) {
@ -879,7 +917,7 @@ public class DataGridTag extends JeecgTag {
sb.append("<select name=\"");
sb.append(column.getField());
sb.append("\">");
sb.append("<option value=\"\">---请选择---</option>");
sb.append("<option value=\"\">-- 请选择 --</option>");
if(dictionary.indexOf(",")>-1){
//表格数据信息
try{
@ -996,7 +1034,6 @@ public class DataGridTag extends JeecgTag {
}
}
}
//工具栏的处理方式
if(toolBarList.size() > 0){
@ -1205,7 +1242,10 @@ public class DataGridTag extends JeecgTag {
.append(", cssTheme=").append(cssTheme)
.append(",treeField=").append(treeField)
.append(",btnCls=").append(btnCls)
.append(",queryBuilder=").append(queryBuilder);
.append(",queryBuilder=").append(queryBuilder)
.append(",collapsible=").append(collapsible)
.append(",superQuery=").append(superQuery)
.append(",complexSuperQuery=").append(complexSuperQuery);
key.append(",urlList=[");
for(DataGridUrl url : urlList){
key.append(url.toString()+",");
@ -1266,10 +1306,73 @@ public class DataGridTag extends JeecgTag {
if(btnCls!=null && btnCls.indexOf("bootstrap")==0){
sb.append("<link rel=\"stylesheet\" href=\"plug-in/bootstrap/css/bootstrap-btn.css\" type=\"text/css\"></link>");
}
width = (width == null) ? "auto" : width;
height = (height == null) ? "auto" : height;
sb.append("<script type=\"text/javascript\">");
if(!treegrid && isShowSubGrid){
sb.append("<script type=\"text/javascript\" src=\"plug-in/easyui/extends/datagrid-detailview.js\"></script>");
}
sb.append("<script type=\"text/javascript\">");
if(!treegrid && isShowSubGrid){
loadSubData(configId);
sb.append("function detailFormatterFun(){");
sb.append("var s = '<div class=\"orderInfoHidden\" style=\"padding:2px;\">'+");
sb.append("'<div class=\"easyui-tabs\" style=\"height:230px;width:1850px\">'+");
String subtableids[] = null;
if(head.getSubTableStr()!=null && head.getSubTableStr().length()>=0){
subtableids = head.getSubTableStr().split(",");
for (String subtable : subtableids) {
sb.append("'<div title=\""+((CgSubTableVO)tableData.get(subtable)).getHead().getContent()+"\" style=\"padding:2px;\">'+");
sb.append("'<table class=\""+((CgSubTableVO)tableData.get(subtable)).getHead().getTableName()+"tablelines\" ></table>'+");
}
}
sb.append("'</div>'+");
sb.append("'</div>'+");
sb.append("'</div>'; return s;}");
sb.append("function onExpandRowFun(index,row){");
sb.append("var tabs = $(this).datagrid('getRowDetail',index).find('div.easyui-tabs');");
sb.append("tabs.tabs();");
if(subtableids!=null){
for (String ss : subtableids) {
CgSubTableVO submap = ((CgSubTableVO)tableData.get(ss));
String linkid = "";
String subfield = "";
String columns = "";
List<Map<String, Object>> subfieldlist = submap.getFieldList();
for (Map<String, Object> map : subfieldlist) {
subfield+=map.get("field_name")+",";
if(map.get("main_field")!=null && map.get("main_field").toString().length()>0 && "".equals(linkid)){
linkid = (String)map.get("field_name");
}
columns += "{title:'"+map.get("content")+"',field:'"+map.get("field_name")+"',align:'left'},";
}
sb.append("var "+submap.getHead().getTableName()+"durl = 'cgAutoListController.do?datagrid&configId="+submap.getHead().getTableName()+"&"+linkid+"='+row.id+'&field="+subfield+"&page=1&rows=100';");
sb.append("var "+submap.getHead().getTableName()+"tablelines = $(this).datagrid('getRowDetail',index).find('table."+submap.getHead().getTableName()+"tablelines');");
sb.append(""+submap.getHead().getTableName()+"tablelines.datagrid({");
sb.append("singleSelect:true,");
sb.append("loadMsg:'正在加载',");
sb.append("fitColumns:true,");
sb.append("height:'180',");
sb.append("pageSize : 50,");
sb.append("pageList : [ 50, 150, 200, 250, 300 ],");
sb.append("border:false,");
sb.append("loadMsg:\"\",");
sb.append("url: "+submap.getHead().getTableName()+"durl,");
sb.append("idField : 'id',");
sb.append("rownumbers : true,");
sb.append("pagination : false,");
sb.append("onLoadSuccess : function(a,b,c) {},");
sb.append("columns:[[");
sb.append(columns);
sb.append("{field:'0000',hidden:true}");
sb.append("]]");
sb.append("});");
}}
sb.append("}");
}
sb.append("$(function(){ storage=$.localStorage;if(!storage)storage=$.cookieStorage;");
sb.append(this.getNoAuthOperButton());
if (treegrid) {
@ -1281,22 +1384,27 @@ public class DataGridTag extends JeecgTag {
}else{
sb.append("treeField:'text',");
}
sb.append(" onBeforeLoad: function(row,param){\n" +
" if (!row) { \n" +
" delete param.id; \n" +
" }\n" +
" },");
} else {
grid = "datagrid";
sb.append("$(\'#" + name + "\').datagrid({");
if (this.isFilter()) {
sb.append("onHeaderContextMenu: function(e, field){headerMenu(e, field);},");
}
sb.append("idField: '" + idField + "',");
}
if (title != null) {
sb.append("title: \'" + title + "\',");
}
if(isShowSubGrid){
sb.append("view: detailview,");
sb.append("detailFormatter:detailFormatterFun,");
sb.append("onExpandRow: onExpandRowFun,");
}
if(autoLoadData)
sb.append("url:\'" + actionUrl + "&field=" + fields + "\',");
@ -1319,6 +1427,9 @@ public class DataGridTag extends JeecgTag {
}
sb.append("rownumbers: true,");
if(collapsible){
sb.append("collapsible: true,");
}
if(hasQueryColum(columnList)){
String queryParams = "";
@ -1370,7 +1481,7 @@ public class DataGridTag extends JeecgTag {
sb.append("]],");
sb.append("onLoadSuccess:function(data){$(\"#"+name+"\")."+grid+"(\"clearSelections\");");
sb.append(" $(this).datagrid(\"fixRownumber\");");
//sb.append(" $(this).datagrid(\"fixRownumber\");");
if(openFirstNode&&treegrid){
sb.append(" if(data==null){");
@ -1530,33 +1641,50 @@ public class DataGridTag extends JeecgTag {
sb.append("<input id=\"columsShow\" type=\"image\" src=\"plug-in/easyui/themes/default/images/accordion_collapse.png\" onclick=\"isShowBut()\">");
}
if(hasQueryColum(columnList)){
sb.append("<div name=\"searchColums\" id=\"searchColums\" >");
boolean blink = false;
if(hasQueryColum(columnList) && "group".equals(getQueryMode())){
blink = true;
String searchColumStyle = toolBarList!=null&&toolBarList.size()!=0?"":"style='border-bottom: 0px'";
sb.append("<div name=\"searchColums\" id=\"searchColums\" "+searchColumStyle+">");
sb.append("<input id=\"isShowSearchId\" type=\"hidden\" value=\""+isShowSearch+"\"/>");
//-----longjb1 增加用于高级查询的参数项
sb.append("<input id=\"_sqlbuilder\" name=\"sqlbuilder\" type=\"hidden\" />");
sb.append("<input id=\"_complexSqlbuilder\" name=\"complexSqlbuilder\" type=\"hidden\" />");
//update by jg_renjie at 2016/1/11 for:TASK #823 增加form实现Form表单验证
sb.append("<form onkeydown='if(event.keyCode==13){" + name + "search();return false;}' id='"+name+"Form'>");
sb.append("<link rel=\"stylesheet\" href=\"plug-in/Validform/css/style.css\" type=\"text/css\">");
sb.append("<link rel=\"stylesheet\" href=\"plug-in/Validform/css/tablefrom.css\" type=\"text/css\">");
sb.append("<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_v5.3.1_min_zh-cn.js\"></script>");
sb.append("<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_Datatype_zh-cn.js\"></script>");
sb.append("<script type=\"text/javascript\" src=\"plug-in/Validform/js/datatype_zh-cn.js\"></script>");
//update by jg_renjie at 2016/1/11 for:TASK #823
sb.append("<span style=\"max-width: 83%;display: inline-block;display:-moz-inline-box;\">");
getSearchFormInfo(sb);
sb.append("</span>");
sb.append("<span>");
getSearchButton(sb);
sb.append("</span>");
sb.append("</form></div>");
}
if(toolBarList.size()==0 && !hasQueryColum(columnList)){
if(toolBarList==null || toolBarList.size()==0){
sb.append("<div style=\"height:0px;\" >");
}else{//TODO
sb.append("<div style=\"border-bottom-width:0;height:auto;\" class=\"datagrid-toolbar\">");
sb.append("<div style=\"border-bottom-width:0;\" class=\"datagrid-toolbar\">");
}
sb.append("<span style=\"float:left;\" >");
@ -1651,9 +1779,88 @@ public class DataGridTag extends JeecgTag {
}
}
sb.append("</span>");
if("group".equals(getQueryMode()) && hasQueryColum(columnList)){//如果表单是组合查询
if("single".equals(getQueryMode())&& hasQueryColum(columnList)){//如果表单是单查询
sb.append("<span style=\"float:right\">");
sb.append("<input id=\""+name+"searchbox\" class=\"easyui-searchbox\" data-options=\"searcher:"+name+ StringUtil.replaceAll("searchbox,prompt:\'{0}\',menu:\'#", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.please.input.keyword")) +name+"mm\'\"></input>");
sb.append("<div id=\""+name+"mm\" style=\"width:120px\">");
for (DataGridColumn col : columnList) {
if (col.isQuery()) {
sb.append("<div data-options=\"name:\'"+col.getField().replaceAll("_","\\.")+"\',iconCls:\'icon-ok\' "+extendAttribute(col.getExtend())+" \">"+col.getTitle()+"</div> ");
}
}
sb.append("</div>");
sb.append("</span>");
}
sb.append("<div style=\"clear:both\"></div>");
sb.append("</div>");
if(blink){
sb.insert(0, "<link rel=\"stylesheet\" href=\"plug-in/Validform/css/style.css\" type=\"text/css\">" +
"<link rel=\"stylesheet\" href=\"plug-in/Validform/css/tablefrom.css\" type=\"text/css\">" +
"<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_v5.3.1_min_zh-cn.js\"></script>" +
"<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_Datatype_zh-cn.js\"></script>" +
"<script type=\"text/javascript\" src=\"plug-in/Validform/js/datatype_zh-cn.js\"></script>");
}
if(queryBuilder){
if (btnCls != null && !btnCls.equals("easyui")) {//自定以样式 bootstrap按钮样式
addQueryBuilder(sb,btnCls);
}else{//默认使用easyUI按钮样式
addQueryBuilder(sb,"easyui-linkbutton");
}
}
if(superQuery) {
if(btnCls != null && !btnCls.equals("easyui")) {//自定义bootstrap按钮样式
addSuperQuery(sb,btnCls,columnList);
} else {
addSuperQuery(sb,"easyui-linkbutton",columnList);
}
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)){
if(btnCls != null && !btnCls.equals("easyui")) {//自定义bootstrap按钮样式
addAdvancedQuery(sb,btnCls);
} else {
addAdvancedQuery(sb,"easyui-linkbutton");
}
}
this.getFilter(sb);
this.putTagCache(sb);
return sb;
}
private void loadSubData(String id){
CgFormFieldServiceI cgFormFieldService = (CgFormFieldServiceI)ApplicationContextUtil.getContext().getBean("cgFormFieldService");
String tableName = id;
String tablename = PublicUtil.replaceTableName(tableName);
Map<String, Object> data = new HashMap<String, Object>();
Map configData = null;
String jversion = cgFormFieldService.getCgFormVersionByTableName(id);
configData = cgFormFieldService.getFtlFormConfig(tableName,jversion);
data = new HashMap(configData);
//如果该表是主表查出关联的附表
CgFormHeadEntity head = (CgFormHeadEntity)data.get("head");
this.tableData = (Map<String, Object>)data.get("field");
this.head = head;
}
private void getSearchButton(StringBuffer sb) {
if("group".equals(getQueryMode()) && hasQueryColum(columnList)){//如果表单是组合查询
sb.append("<span style=\"float:right;\">");
if (btnCls != null && !btnCls.equals("easyui")) {//自定以样式 bootstrap按钮样式
if(btnCls.indexOf("bootstrap")==0){
String defalutCls = "btn btn-info btn-xs";
@ -1662,28 +1869,52 @@ public class DataGridTag extends JeecgTag {
defalutCls = btnCls.replace("bootstrap", "").trim();
}
sb.append("<button class=\""+defalutCls+"\" onclick=\"" + name + "search()\">");
sb.append("<button class=\""+defalutCls+"\" type=\"button\" onclick=\"" + name + "search()\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.query")+"</span>");
sb.append("</button>");
sb.append("<button class=\""+defalutCls+"\" onclick=\"searchReset('" + name + "')\">");
sb.append("<button class=\""+defalutCls+"\" type=\"button\" onclick=\"searchReset('" + name + "')\">");
sb.append("<i class=\"fa fa-refresh\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.reset")+"</span>");
sb.append("</button>");
if(queryBuilder){
sb.append("<button class=\""+defalutCls+"\" onclick=\"queryBuilder()\">");
sb.append("<button class=\""+defalutCls+"\" type=\"button\" onclick=\"queryBuilder()\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")+"</span>");
sb.append("</button>");
}
if(superQuery) {
sb.append("<button class=\""+defalutCls+"\" type=\"button\" onclick=\"queryBuilder()\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.superquery")+"</span>");
sb.append("</button>");
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)) {
sb.append("<button class=\""+defalutCls+"\" type=\"button\" onclick=\"superQuery('"+complexSuperQuery+"')\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</span>");
sb.append("</button>");
}
}else{//自定以样式
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\""+ name+ StringUtil.replaceAll("search()\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.query")));
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"searchReset('"+name+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.reset")) );
if(queryBuilder){
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")) );
}
if(superQuery) {
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.superquery")) );
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)) {
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"superQuery('"+complexSuperQuery+"')\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</a>");
}
}
}else{//默认使用easyUI按钮样式
sb.append("<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-search\" onclick=\""+ name+ StringUtil.replaceAll("search()\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.query")));
@ -1691,39 +1922,19 @@ public class DataGridTag extends JeecgTag {
if(queryBuilder){
sb.append("<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-search\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")) );
}
}
sb.append("</span>");
}else if("single".equals(getQueryMode())&& hasQueryColum(columnList)){//如果表单是单查询
sb.append("<span style=\"float:right\">");
sb.append("<input id=\""+name+"searchbox\" class=\"easyui-searchbox\" data-options=\"searcher:"+name+ StringUtil.replaceAll("searchbox,prompt:\'{0}\',menu:\'#", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.please.input.keyword")) +name+"mm\'\"></input>");
sb.append("<div id=\""+name+"mm\" style=\"width:120px\">");
for (DataGridColumn col : columnList) {
if (col.isQuery()) {
sb.append("<div data-options=\"name:\'"+col.getField().replaceAll("_","\\.")+"\',iconCls:\'icon-ok\' "+extendAttribute(col.getExtend())+" \">"+col.getTitle()+"</div> ");
if(superQuery) {
sb.append("<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-search\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.superquery")) );
}
}
sb.append("</div>");
sb.append("</span>");
}
sb.append("<div style=\"clear:both\"></div>");
sb.append("</div>");
if(queryBuilder){
if (btnCls != null && !btnCls.equals("easyui")) {//自定以样式 bootstrap按钮样式
addQueryBuilder(sb,btnCls);
}else{//默认使用easyUI按钮样式
if(oConvertUtils.isNotEmpty(complexSuperQuery)) {
sb.append("<a href=\"#\" class=\"easyui-linkbutton\" iconCls=\"icon-search\" onclick=\"superQuery('"+complexSuperQuery+"')\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</a>");
}
addQueryBuilder(sb,"easyui-linkbutton");
}
sb.append("</span>");
}
this.putTagCache(sb);
return sb;
}
/**
@ -1731,16 +1942,17 @@ public class DataGridTag extends JeecgTag {
* @param sb
*/
private void getSearchFormInfo(StringBuffer sb) {
//如果表单是组合查询
if("group".equals(getQueryMode())){
for (DataGridColumn col : columnList) {
if (col.isQuery()) {
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;\">");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;margin-bottom:2px;text-align:justify;\">");
sb.append("<span style=\"vertical-align:middle;display:-moz-inline-box;display:inline-block;width: 90px;text-align:right;text-overflow:ellipsis;-o-text-overflow:ellipsis; overflow: hidden;white-space:nowrap; \" title=\""+col.getTitle()+"\">"+col.getTitle()+"</span>");
if("single".equals(col.getQueryMode())){
if(!StringUtil.isEmpty(col.getReplace())){
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"100\" style=\"width: 104px\"> ");
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.please.select")));
String[] test = col.getReplace().split(",");
String text = "";
@ -1818,7 +2030,7 @@ public class DataGridTag extends JeecgTag {
sb.append(map.get("text"));
}
}else{
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"100\" style=\"width: 104px\"> ");
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.please.select")));
for (Map<String, Object> map : list){
@ -1877,7 +2089,7 @@ public class DataGridTag extends JeecgTag {
}
}
}else{
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"100\" style=\"width: 104px\"> ");
sb.append("<select name=\""+col.getField().replaceAll("_","\\.")+"\" WIDTH=\"120\" style=\"width: 120px\"> ");
sb.append(StringUtil.replaceAll("<option value =\"\" >{0}</option>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.please.select")));
if (types != null) {
for (TSType type : types) {
@ -1906,7 +2118,7 @@ public class DataGridTag extends JeecgTag {
sb.append("<input onkeypress=\"EnterPress(event)\" onkeydown=\"EnterPress()\" type=\"text\" name=\""+col.getField().replaceAll("_","\\.")+"\" "+extendAttribute(col.getExtend())+" ");
if(this.DATE_FORMATTER.equals(col.getFormatter())){
sb.append(" style=\"width: 160px\" class=\"Wdate\" onClick=\"WdatePicker()\" ");
sb.append(" style=\"width: 120px\" class=\"Wdate\" onClick=\"WdatePicker()\" ");
}else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){
sb.append(" style=\"width: 160px\" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\" ");
}else{
@ -1924,17 +2136,17 @@ public class DataGridTag extends JeecgTag {
}else if("group".equals(col.getQueryMode())){
if(this.DATE_FORMATTER.equals(col.getFormatter())){
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 94px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 94px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker()\"/>");
}else if(this.DATETIME_FORMATTER.equals(col.getFormatter())){
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin1\" style=\"width: 140px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end2\" style=\"width: 140px\" "+extendAttribute(col.getExtend())+" class=\"Wdate\" onClick=\"WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})\"/>");
}else{
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 94px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_begin\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>");
sb.append("<span style=\"display:-moz-inline-box;display:inline-block;width: 8px;text-align:right;\">~</span>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 94px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>");
sb.append("<input type=\"text\" name=\""+col.getField()+"_end\" style=\"width: 100px\" "+extendAttribute(col.getExtend())+" class=\"inuptxt\"/>");
}
}
@ -1942,7 +2154,6 @@ public class DataGridTag extends JeecgTag {
}
}
}
}
@ -2581,7 +2792,6 @@ public class DataGridTag extends JeecgTag {
}
public String getNoAuthOperButton(){
StringBuffer sb = new StringBuffer();
if(ResourceUtil.getSessionUser().getUserName().equals("admin")|| !Globals.BUTTON_AUTHORITY_CHECK){
}else{
@ -2607,7 +2817,6 @@ public class DataGridTag extends JeecgTag {
}
}
//org.jeecgframework.core.util.LogUtil.info("----getNoAuthOperButton-------"+sb.toString());
return sb.toString();
}
@ -2686,6 +2895,12 @@ public class DataGridTag extends JeecgTag {
this.fitColumns = fitColumns;
}
public boolean isCollapsible() {
return collapsible;
}
public void setCollapsible(boolean collapsible) {
this.collapsible = collapsible;
}
public String getSortName() {
return sortName;
}
@ -2750,7 +2965,6 @@ public class DataGridTag extends JeecgTag {
sb.append("<link rel=\"stylesheet\" href=\"plug-in/bootstrap/css/bootstrap-btn.css\" type=\"text/css\"></link>");
}
width = (width == null) ? "auto" : width;
height = (height == null) ? "auto" : height;
// sb.append("<link rel=\"stylesheet\" href=\"plug-in/easyui/themes/metro/main.css\" />");
@ -2765,6 +2979,9 @@ public class DataGridTag extends JeecgTag {
} else {
grid = "datagrid";
sb.append("$(\'#" + name + "\').datagrid({");
if (this.isFilter()) {
sb.append("onHeaderContextMenu: function(e, field){headerMenu(e, field);},");
}
sb.append("idField: '" + idField + "',");
}
if (title != null) {
@ -2815,7 +3032,7 @@ public class DataGridTag extends JeecgTag {
sb.append("]],");
sb.append("onLoadSuccess:function(data){$(\"#"+name+"\")."+grid+"(\"clearSelections\");");
sb.append(" $(this).datagrid(\"fixRownumber\");");
//sb.append(" $(this).datagrid(\"fixRownumber\");");
if(openFirstNode&&treegrid){
sb.append(" if(data==null){");
@ -2998,8 +3215,10 @@ public class DataGridTag extends JeecgTag {
}
sb.append("</div>");
}
if(toolBarList.size()==0 && !hasQueryColum(columnList)){
sb.append("<div style=\"height:0px;\" >");
if(toolBarList==null || toolBarList.size()==0){
sb.append("<div style=\"height:0px;\" >");
}else{//TODO
sb.append("<div style=\"border-bottom-width:0;height:auto;\" class=\"datagrid-toolbar\">");
@ -3104,12 +3323,36 @@ public class DataGridTag extends JeecgTag {
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")+"</span>");
sb.append("</button>");
}
if(superQuery) {
sb.append("<button class=\""+defalutCls+"\" onclick=\"queryBuilder()\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.superquery")+"</span>");
sb.append("</button>");
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)) {
sb.append("<button class=\""+defalutCls+"\" onclick=\"superQuery('"+complexSuperQuery+"')\">");
sb.append("<i class=\"fa fa-search\"></i>");
sb.append("<span class=\"bigger-110 no-text-shadow\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</span>");
sb.append("</button>");
}
}else{//自定以样式
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\""+ name+ StringUtil.replaceAll("search()\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.query")));
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"searchReset('"+name+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.reset")) );
if(queryBuilder){
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")) );
}
if(superQuery){
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.superquery")) );
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)){
sb.append("<a href=\"#\" class=\""+btnCls+"\" onclick=\"superQuery('"+complexSuperQuery+"')\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</a>");
}
}
}else{//默认使用easyUI按钮样式
sb.append("<a href=\"#\" class=\"button\" iconCls=\"icon-search\" onclick=\""+ name+ StringUtil.replaceAll("search()\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.query")));
@ -3117,6 +3360,15 @@ public class DataGridTag extends JeecgTag {
if(queryBuilder){
sb.append("<a href=\"#\" class=\"button\" iconCls=\"icon-search\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.querybuilder")) );
}
if(superQuery){
sb.append("<a href=\"#\" class=\"button\" iconCls=\"icon-search\" onclick=\"queryBuilder('"+ StringUtil.replaceAll("')\">{0}</a>", "{0}", MutiLangUtil.getMutiLangInstance().getLang("common.superQuery")) );
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)){
sb.append("<a href=\"#\" class=\"button\" iconCls=\"icon-search\" onclick=\"superQuery('"+complexSuperQuery+"')\">"+MutiLangUtil.getMutiLangInstance().getLang("common.advancedQuery")+"</a>");
}
}
sb.append("</span>");
@ -3149,6 +3401,23 @@ public class DataGridTag extends JeecgTag {
}
}
if(superQuery) {
if(btnCls != null && !btnCls.equals("easyui")) {
addSuperQuery(sb,btnCls,columnList);
} else {
addSuperQuery(sb,"button",columnList);
}
}
if(oConvertUtils.isNotEmpty(complexSuperQuery)) {
if(btnCls != null && !btnCls.equals("easyui")) {
addAdvancedQuery(sb,btnCls);
} else {
addAdvancedQuery(sb,"button");
}
}
return sb;
}
@ -3321,7 +3590,6 @@ appendLine(sb," }}\">关系</th>");
appendLine(sb," </table>");
appendLine(sb,"</div>");
appendLine(sb,"<div data-options=\"region:'south',border:false\" style=\"text-align:right;padding:5px 0 3px;\">");
if (btnCls != null && !btnCls.equals("easyui")) {
String defalutCls = "btn btn-default btn-xs";
if (btnCls.replace("bootstrap", "").trim().length() > 0) {
@ -3334,7 +3602,6 @@ appendLine(sb," }}\">关系</th>");
appendLine(sb,"<a class=\""+buttonSytle+"\" data-options=\"iconCls:'icon-ok'\" href=\"javascript:void(0)\" onclick=\"javascript:queryBuilderSearch()\">确定</a>");
appendLine(sb,"<a class=\""+buttonSytle+"\" data-options=\"iconCls:'icon-cancel'\" href=\"javascript:void(0)\" onclick=\"javascript:$('#"+name+"_qbwin').window('close')\">取消</a>");
}
appendLine(sb," </div>");
appendLine(sb," </div> ");
@ -3363,14 +3630,12 @@ appendLine(sb," }}\">关系</th>");
if (btnCls.replace("bootstrap", "").trim().length() > 0) {
defalutCls = btnCls.replace("bootstrap", "").trim();
}
sb.append("var toolbar = '<div>");
sb.append("<button class=\""+defalutCls+"\" onclick=\"append()\">&nbsp;<i class=\"fa fa-plus\"></i>&nbsp;</button>");
sb.append("<button class=\""+defalutCls+"\" onclick=\"edit()\">&nbsp;<i class=\"fa fa-pencil-square-o\"></i></button>");
sb.append("<button class=\""+defalutCls+"\" onclick=\"removeIt()\">&nbsp;<i class=\"fa fa-trash\"></i></button>");
sb.append("<button class=\""+defalutCls+"\" onclick=\"save()\">&nbsp;<i class=\"fa fa-save\"></i></button>");
sb.append("</div>';");
}else{
appendLine(sb,"var toolbar = [{");
@ -3546,4 +3811,55 @@ appendLine(sb," }}\">关系</th>");
return sb.toString();
}
/**
*
* @param sb
*/
private void addSuperQuery(StringBuffer sb,String buttonSytle,List<DataGridColumn> columnList) {
FreemarkerHelper free = new FreemarkerHelper();
Map<String, Object> mainConfig = new HashMap<String, Object>();
mainConfig.put("fields", columnList);
mainConfig.put("tableName", name);
mainConfig.put("valueList", columnValueList);
String superQuery = free.parseTemplate("/org/jeecgframework/tag/ftl/superquery.ftl", mainConfig);
appendLine(sb,superQuery);
}
//是否启用过滤
protected boolean filter = false;
public boolean isFilter() {
return filter;
}
public void setFilter(boolean filter) {
this.filter = filter;
}
public void getFilter(StringBuffer sb){
if (this.isFilter()) {
FreemarkerHelper free = new FreemarkerHelper();
Map<String, Object> mainConfig = new HashMap<String, Object>();
mainConfig.put("gridId", name);
String superQuery = free.parseTemplate("/org/jeecgframework/tag/ftl/filter.ftl", mainConfig);
appendLine(sb,superQuery);
}
}
/**
*
* @param sb
*/
private void addAdvancedQuery(StringBuffer sb,String buttonSytle) {
FreemarkerHelper free = new FreemarkerHelper();
Map<String, Object> mainConfig = new HashMap<String, Object>();
mainConfig.put("queryCode", complexSuperQuery);
mainConfig.put("tableName", name);
String complexSuperQuery = free.parseTemplate("/org/jeecgframework/tag/ftl/complexSuperQuery.ftl", mainConfig);
appendLine(sb,complexSuperQuery);
}
}

@ -151,13 +151,13 @@ public class DepartSelectTag extends TagSupport {
if(hasLabel && oConvertUtils.isNotEmpty(title)){
sb.append(title + "");
}
sb.append("<input readonly=\"true\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" onclick=\"openDepartmentSelect()\" ");
sb.append("<input class=\"inuptxt\" readonly=\"true\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" onclick=\"openDepartmentSelect()\" ");
if(StringUtils.isNotBlank(departNamesDefalutVal)){
sb.append(" value=\""+departNamesDefalutVal+"\"");
}
sb.append(" />");
String orgIds = "";
sb.append("<input id=\"" + selectedIdsInputId + "\" name=\"" + selectedIdsInputId + "\" type=\"hidden\" ");
sb.append("<input class=\"inuptxt\" id=\"" + selectedIdsInputId + "\" name=\"" + selectedIdsInputId + "\" type=\"hidden\" ");
if(StringUtils.isNotBlank(departIdsDefalutVal)){
sb.append(" value=\""+departIdsDefalutVal+"\"");
orgIds = "&orgIds=" + departIdsDefalutVal;

@ -32,9 +32,9 @@ public class FormValidationTag extends JeecgTag {
protected String action;// 表单提交路径
protected String tabtitle;// 表单选项卡
protected String tiptype = "4";//校验方式
// update-start--Author:longjb Date:20150317 for修改增加css样式类属性
protected String styleClass ;//table 样式
// update-start--Author:longjb Date:20150323 for修改增加css主题类属性
protected String cssTheme;//主题样式目录默认为空
public String getCssTheme() {
@ -44,7 +44,7 @@ public class FormValidationTag extends JeecgTag {
public void setCssTheme(String cssTheme) {
this.cssTheme = cssTheme;
}
// update-end--Author:longjb Date:20150323 for修改增加css主题类属性
public String getStyleClass() {
return styleClass;
}
@ -52,7 +52,7 @@ public class FormValidationTag extends JeecgTag {
public void setStyleClass(String styleClass) {
this.styleClass = styleClass;
}
// update-end--Author:longjb Date:20150317 for修改增加css样式类属性
public void setTabtitle(String tabtitle) {
this.tabtitle = tabtitle;
}
@ -80,7 +80,7 @@ public class FormValidationTag extends JeecgTag {
public void setAction(String action) {
this.action = action;
}
//add-start--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
/**
* key
* @param key
@ -97,11 +97,11 @@ public class FormValidationTag extends JeecgTag {
public void putTagCache(String key, StringBuffer tagCache){
EhcacheUtil.put(EhcacheUtil.TagCache, key, tagCache);
}
//add-end--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
public int doStartTag() throws JspException {
JspWriter out = null;
//update-start--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
StringBuffer sb = this.getTagCache("doStartTag"+"_"+toString());
try {
out = this.pageContext.getOut();
@ -110,7 +110,7 @@ public class FormValidationTag extends JeecgTag {
out.flush();
return EVAL_PAGE;
}
//update-end--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
sb = new StringBuffer();
/*// if(cssTheme==null){//手工设置值优先
Cookie[] cookies = ((HttpServletRequest) super.pageContext
@ -131,18 +131,17 @@ public class FormValidationTag extends JeecgTag {
sb.append("<div id=\"steps\">");
}
sb.append("<form id=\"" + formid + "\" " );
// update-start--Author:longjb Date:20150317 for修改增加css样式类属性
if(this.getStyleClass()!=null){
sb.append("class=\""+this.getStyleClass()+"\" ");
}
// update-end--Author:longjb Date:20150317 for修改增加css样式类属性
sb.append(" action=\"" + action + "\" name=\"" + formid + "\" method=\"post\">");
if ("btn_sub".equals(btnsub) && dialog)
sb.append("<input type=\"hidden\" id=\"" + btnsub + "\" class=\"" + btnsub + "\"/>");
//update-start--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
this.putTagCache("doStartTag"+"_"+toString(), sb);
//update-end--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
out.print(sb.toString());
out.flush();
} catch (IOException e) {
@ -160,7 +159,7 @@ public class FormValidationTag extends JeecgTag {
public int doEndTag() throws JspException {
String lang = (String)((HttpServletRequest) this.pageContext.getRequest()).getSession().getAttribute("lang");
//update-start--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
StringBuffer sb = this.getTagCache("doEndTag"+"_"+lang+"_"+toString());
JspWriter out = null;
try {
@ -170,7 +169,7 @@ public class FormValidationTag extends JeecgTag {
out.flush();
return EVAL_PAGE;
}
//update-end--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
SysThemesEnum sysThemesEnum = null;
if(StringUtil.isEmpty(cssTheme)||"null".equals(cssTheme)){
sysThemesEnum = SysThemesUtil.getSysTheme((HttpServletRequest) super.pageContext.getRequest());
@ -179,7 +178,7 @@ public class FormValidationTag extends JeecgTag {
}
sb = new StringBuffer();
if (layout.equals("div")) {
// update-start--Author:longjb Date:20150323 for修改增加css主题类属性
// if("metro".equals(cssTheme)){
// sb.append("<link rel=\"stylesheet\" href=\"plug-in/Validform/css/"+cssTheme+"/divfrom.css\" type=\"text/css\"/>");
// }else{
@ -201,8 +200,7 @@ public class FormValidationTag extends JeecgTag {
sb.append(SysThemesUtil.getValidformStyleTheme(sysThemesEnum));
//tablefrom.css
sb.append(SysThemesUtil.getValidformTablefrom(sysThemesEnum));
// update-end--Author:longjb Date:20150323 for修改增加css主题类属性
sb.append(StringUtil.replace("<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_v5.3.1_min_{0}.js\"></script>", "{0}", lang));
sb.append(StringUtil.replace("<script type=\"text/javascript\" src=\"plug-in/Validform/js/Validform_Datatype_{0}.js\"></script>", "{0}", lang));
sb.append(StringUtil.replace("<script type=\"text/javascript\" src=\"plug-in/Validform/js/datatype_{0}.js\"></script>", "{0}", lang));
@ -216,35 +214,35 @@ public class FormValidationTag extends JeecgTag {
sb.append("<SCRIPT type=\"text/javascript\" src=\"plug-in/Validform/plugin/passwordStrength/passwordStrength-min.js\"></SCRIPT>");
}
}
//update--begin---author:zhangjiaqiang date:20170223 for:提示弹出框修订
sb.append("<script src=\"plug-in/layer/layer.js\"></script>");
//update--begin---author:zhangjiaqiang date:20170223 for:提示弹出框修订
sb.append("<script type=\"text/javascript\">");
//update--begin--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("var subDlgIndex = null;");
//update--end--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("$(function(){");
sb.append("$(\"#" + formid + "\").Validform({");
if(this.getTiptype()!=null && !"".equals(this.getTiptype())){
//update--begin---author:zhangjiaqiang date:20170223 for:提示弹出框修订
if(tiptype.equals("1")){
sb.append("tiptype:function(msg,o,cssctl){");
sb.append("if(o.type == 3){");
sb.append("layer.open({");
sb.append("title:'提示信息',");
//update--begin--author:zhangjiaqiang date:20170320 for:修订提示框去除阴影显示时间5秒
sb.append("content:msg,icon:5,shift:6,btn:false,shade:false,time:5000,");
//update--end--author:zhangjiaqiang date:20170320 for:修订提示框去除阴影显示时间5秒
sb.append("cancel:function(index){o.obj.focus();layer.close(index);},");
//update--begin--author:zhangjiaqiang date:20170509 for:修订IE浏览器下面js异常
sb.append("yes:function(index){o.obj.focus();layer.close(index);}");
//update--end--author:zhangjiaqiang date:20170509 for:修订IE浏览器下面js异常
sb.append("})");
sb.append("}},");
}else{
sb.append("tiptype:"+this.getTiptype()+",");
}
//update--end---author:zhangjiaqiang date:20170223 for:提示弹出框修订
}else{
sb.append("tiptype:1,");
}
@ -274,22 +272,26 @@ public class FormValidationTag extends JeecgTag {
sb.append("btnReset:\"#" + btnreset + "\",");
sb.append("ajaxPost:true,");
if (beforeSubmit != null) {
sb.append("beforeSubmit:function(curform){var tag=false;");
//update--begin--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
submitLoading(sb);
//update--end--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("return " + beforeSubmit );
sb.append("beforeSubmit:function(curform){var tag=true;");
sb.append("tag = " + beforeSubmit );
if(beforeSubmit.indexOf("(") < 0){
sb.append("(curform);");
}else if(!beforeSubmit.endsWith(";")){
sb.append(";");
}
sb.append("},");
//update--begin--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("if(tag || tag!=false){");
submitLoading(sb);
sb.append("}else{ return false;}");
}else{
sb.append("beforeSubmit:function(curform){var tag=false;");
submitLoading(sb);
sb.append("},");
}
//update--end--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("},");
if (usePlugin != null) {
StringBuffer passsb = new StringBuffer();
if (usePlugin.indexOf("password") >= 0) {
@ -311,7 +313,7 @@ public class FormValidationTag extends JeecgTag {
passsb.append("}");// trigger结尾
passsb.append("}");// passwordstrength结尾
}
// update-start--Author:gaofeng Date:20140711 for修改在使用jptransform时的逗号","拼接错误
sb.append("usePlugin:{");
if (usePlugin.indexOf("password") >= 0) {
sb.append(passsb);
@ -323,19 +325,19 @@ public class FormValidationTag extends JeecgTag {
}
jqsb.append("jqtransform :{selector:\"select\"}");
}
// update-end--Author:gaofeng Date:20140711 for修改在使用jptransform时的逗号","拼接错误
if (usePlugin.indexOf("jqtransform") >= 0) {
sb.append(jqsb);
}
sb.append("},");
}
sb.append("callback:function(data){");
//update--begin--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
sb.append("if(subDlgIndex && subDlgIndex != null){");
sb.append("$('#infoTable-loading').hide();");
sb.append("subDlgIndex.close();");
sb.append("}");
//update--end--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
if (dialog) {
if(callback!=null&&callback.contains("@Override")){//复写默认callback
sb.append(callback.replaceAll("@Override", "") + "(data);");
@ -376,27 +378,26 @@ public class FormValidationTag extends JeecgTag {
}
sb.append("</div></div>");
}
//update-start--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
this.putTagCache("doEndTag"+"_"+lang+"_"+toString(), sb);
//update-end--Author:yugwu Date:20170828 for:TASK #2258 【优化系统】jeecg的jsp页面采用标签方式每次都生成html很慢----
out.print(sb.toString());
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//update-begin--Author:scott Date:20160530 for清空降低缓存占用
// sb.setLength(0);
// sb = null;
//update-end--Author:scott Date:20160530 for清空降低缓存占用
out.clearBuffer();
} catch (Exception e2) {
}
}
return EVAL_PAGE;
}
//update--begin--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
/**
*
* @param sb
@ -417,7 +418,7 @@ public class FormValidationTag extends JeecgTag {
sb.append("infoTable.parent().append('<div id=\"infoTable-loading\" style=\"text-align:center;\"><img src=\"plug-in/layer/skin/default/loading-0.gif\"/></div>');");
sb.append("infoTable.css('display','none');");
}
//update--end--author:zhangjiaqiang Date:20170424 for:修订页面加载数据
public void setUsePlugin(String usePlugin) {
this.usePlugin = usePlugin;
}
@ -442,7 +443,6 @@ public class FormValidationTag extends JeecgTag {
this.tiptype = tiptype;
}
//update-start--Author:yugwu Date:20170830 for:key生成逻辑重新编写----
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
@ -461,6 +461,6 @@ public class FormValidationTag extends JeecgTag {
.append("]");
return builder.toString();
}
//update-end--Author:yugwu Date:20170830 for:key生成逻辑重新编写----
}

@ -124,6 +124,8 @@ public class MenuTag extends JeecgTag {
}
if(style.equals("hplus")){
sb.append(ListtoMenu.getHplusMultistageTree(menuFun));
}else if (style.equals("fineui")){
sb.append(ListtoMenu.getFineuiMultistageTree(menuFun));
}
this.putTagCache(sb);

@ -174,6 +174,12 @@ public class TagUtil {
int i;
String fieldName;
if(list==null){
list = new ArrayList();
}
for (int j = 0; j < list.size(); ++j) {
//jsonTemp.append("{");

@ -0,0 +1,410 @@
package org.jeecgframework.tag.core.easyui;
import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import org.jeecgframework.core.common.exception.BusinessException;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.web.system.pojo.base.TSCategoryEntity;
import org.jeecgframework.web.system.service.SystemService;
import org.openxmlformats.schemas.drawingml.x2006.chart.impl.STScatterStyleImpl;
import org.springframework.beans.factory.annotation.Autowired;
/**
*
* @author
*
* @Date 20170909
*/
public class TreeSelectTag extends TagSupport {
private static final long serialVersionUID = -7715140680053001649L;
private String id;
private String field;//字段值
private String defaultVal;//选中的值
private String divClass;//默认的class名称
private String inputClass;//input输入框对应的样式
private boolean multiCheck = true;//是否可以多选
private String code;
@Autowired
private SystemService systemService;
/**
* HTML
* @return
*/
public StringBuffer end() {
StringBuffer resultSb = new StringBuffer();
//text input
textInput(resultSb);
//code input
codeInput(resultSb);
//tree div
tree(resultSb);
//js
initScriptResource(resultSb);
return resultSb;
}
private void tree(StringBuffer resultSb) {
resultSb.append("<div id=\"");
resultSb.append("show" + StringUtil.firstUpperCase(field) + "TreeContent\" ");
if(StringUtil.isNotEmpty(divClass)){
resultSb.append("class=\""+divClass+"\" ");
}else{
resultSb.append("class=\"menuContent\" ");
}
resultSb.append(" style=\"display: none; position: absolute; border: 1px #CCC solid; background-color: #F0F6E4;z-index:9999;\"> ");
resultSb.append("<ul id=\"show" + StringUtil.firstUpperCase(field) + "Tree\" class=\"ztree\" style=\"margin-top:0;\"></ul></div>");
}
/**
*
* @param resultSb
*/
private void textInput(StringBuffer resultSb) {
resultSb.append("<input type=\"text\" style=\"width: 150px\" ");
if(StringUtil.isNotEmpty(inputClass)){
resultSb.append("class=\""+inputClass+"\" ");
}else{
resultSb.append("class=\"inputxt\" ");
}
if(StringUtil.isEmpty(field)){
throw new BusinessException("field字段不能为空");
}
resultSb.append(" name=\"");
resultSb.append(field);
resultSb.append("Text\" id=\"");
if(StringUtil.isEmpty(id)){
resultSb.append(field);
}else{
resultSb.append(id);
}
resultSb.append("Text\" ");
resultSb.append(" onclick=\"");
resultSb.append("show" + StringUtil.firstUpperCase(field) + "Tree();");
resultSb.append("\" ");
if(StringUtil.isNotEmpty(defaultVal)){
resultSb.append(" value = \"");
resultSb.append(parseDefaultVal());
resultSb.append("\" ");
}
resultSb.append("/>");
}
/**
* code input
* @param resultSb
*/
private void codeInput(StringBuffer resultSb) {
resultSb.append("<input type=\"hidden\" ");
resultSb.append(" name=\"");
resultSb.append(field);
resultSb.append("\" id=\"");
if(StringUtil.isEmpty(id)){
resultSb.append(field);
}else{
resultSb.append(id);
}
resultSb.append("\" ");
if(StringUtil.isNotEmpty(defaultVal)){
resultSb.append(" value=\"");
resultSb.append(defaultVal);
resultSb.append("\" ");
}
resultSb.append("/>");
}
/**
* js
* @param resultSb
*/
private void initScriptResource(StringBuffer resultSb) {
resultSb.append("<script>");
resultSb.append("$(function(){");
//是否已引入ztree资源
zTreeInit(resultSb);
resultSb.append("$(\"body\").bind(\"mousedown\", onBodyDownBy"+StringUtil.firstUpperCase(field)+");");
resultSb.append("});");
//setting资源
getZTreeSeting(resultSb);
//checkFunction
getCheckFunction(resultSb);
//click function
resultSb.append("function "+field+"OnClick(e, treeId, treeNode) { ");
resultSb.append(" var zTree = $.fn.zTree.getZTreeObj(\"show"+StringUtil.firstUpperCase(field)+"Tree\");");
resultSb.append("zTree.checkNode(treeNode, !treeNode.checked, true,true);");
resultSb.append("e.stopPropagation();");
resultSb.append("}");
//show tree function
showTreeFunction(resultSb);
//body down
resultSb.append("function onBodyDownBy"+StringUtil.firstUpperCase(field)+"(event){");
resultSb.append("if(event.target.id == '' || (event.target.id.indexOf('switch') == -1 ");
resultSb.append("&& event.target.id.indexOf('check') == -1 && event.target.id.indexOf('span') == -1 ");
resultSb.append("&& event.target.id.indexOf('ico') == -1)){ ");
resultSb.append("$(\"#show"+StringUtil.firstUpperCase(field)+"TreeContent\").fadeOut(\"fast\");");
resultSb.append("}}");
resultSb.append("</script>");
}
/**
*
* @param resultSb
*/
private void showTreeFunction(StringBuffer resultSb) {
resultSb.append("function show"+StringUtil.firstUpperCase(field)+"Tree(){");
resultSb.append("if($(\"#show"+StringUtil.firstUpperCase(field)+"TreeContent\").is(\":hidden\")){");
resultSb.append("$.ajax({ ");
resultSb.append("url:'categoryController.do?tree',");
resultSb.append("type:'POST', dataType:'JSON', async:false, ");
if(StringUtil.isNotEmpty(code)){
resultSb.append("data:{selfCode:\"" + code + "\"},");
}
resultSb.append("success:function(res){");
resultSb.append(" var obj = res;");
resultSb.append("$.fn.zTree.init($(\"#show"+StringUtil.firstUpperCase(field)+"Tree\"),"+field+"Setting, obj); ");
if(StringUtil.isNotEmpty(id)){
resultSb.append("var deptObj = $(\"#" + id + "Text\"); ");
resultSb.append("var deptOffset = $(\"#"+id+"Text\").offset();");
}else{
resultSb.append("var deptObj = $(\"#" + field + "Text\"); ");
resultSb.append("var deptOffset = $(\"#"+field+"Text\").offset();");
}
resultSb.append(" $(\"#show"+StringUtil.firstUpperCase(field)+"TreeContent\").css({left:deptOffset.left + \"px\", top:deptOffset.top + deptObj.outerHeight() + \"px\"}).slideDown(\"fast\"); ");
resultSb.append("$('#show"+StringUtil.firstUpperCase(field)+"Tree').css({width:deptObj.outerWidth() - 12 + \"px\"}); ");
resultSb.append(" var zTree = $.fn.zTree.getZTreeObj(\"show"+StringUtil.firstUpperCase(field)+"Tree\"); ");
if(StringUtil.isNotEmpty(id)){
resultSb.append("var idVal = $(\"#"+id+"\").val();");
}else{
resultSb.append("var idVal = $(\"#"+field+"\").val();");
}
resultSb.append("if(idVal != null && idVal != ''){");
resultSb.append("if(idVal.indexOf(\",\") > -1){");
resultSb.append("var idArray = idVal.split(\",\");");
resultSb.append("for(var i = 0; i < idArray.length; i++){");
resultSb.append("var node = zTree.getNodeByParam(\"id\", idArray[i], null);");
resultSb.append("zTree.checkNode(node, true, true);");
resultSb.append("}}else{");
resultSb.append("var node = zTree.getNodeByParam(\"id\", idVal, null);");
resultSb.append("zTree.checkNode(node, true, true);");
resultSb.append("}");
resultSb.append("}");
resultSb.append("}");
resultSb.append("});");
resultSb.append("}");
resultSb.append("}");
}
private void getCheckFunction(StringBuffer resultSb) {
resultSb.append("function " + field + "OnCheck(e, treeId, treeNode) {");
if(StringUtil.isNotEmpty(id)){
resultSb.append("var idVal = $(\"#"+id+"\").val();");
resultSb.append(" var textVal = $(\"#"+id+"Text\").val();");
}else{
resultSb.append("var idVal = $(\"#"+field+"\").val();");
resultSb.append(" var textVal = $(\"#"+field+"Text\").val();");
}
resultSb.append(" if(treeNode.checked){");
resultSb.append("if(idVal != null && idVal != ''){");
if(StringUtil.isNotEmpty(id)){
resultSb.append("$(\"#"+id+"\").val(idVal + ',' +treeNode.id); ");
}else{
resultSb.append("$(\"#"+field+"\").val(idVal + ',' +treeNode.id); ");
}
resultSb.append("}else{");
if (StringUtil.isNotEmpty(id)) {
resultSb.append(" $(\"#"+id+"\").val(treeNode.id); ");
}else{
resultSb.append(" $(\"#"+field+"\").val(treeNode.id); ");
}
resultSb.append("}");
resultSb.append("if(textVal != null && textVal != ''){");
if(StringUtil.isNotEmpty(id)){
resultSb.append("$(\"#"+id+"Text\").val(textVal + ',' + treeNode.text); ");
}else{
resultSb.append("$(\"#"+field+"Text\").val(textVal + ',' + treeNode.text); ");
}
resultSb.append("}else{");
if(StringUtil.isNotEmpty(id)){
resultSb.append("$(\"#"+id+"Text\").val(treeNode.text); ");
}else{
resultSb.append("$(\"#"+field+"Text\").val(treeNode.text); ");
}
resultSb.append("}");
resultSb.append("}else{");
resultSb.append("idVal = idVal.replace(treeNode.id,'');");
resultSb.append("if(idVal.indexOf(',') == 0){");
resultSb.append("idVal = idVal.substring(1);");
resultSb.append("}else if(idVal.indexOf(',,') > -1){");
resultSb.append("idVal = idVal.replace(',,',',');");
resultSb.append("}else if(idVal.indexOf(',') == idVal.length -1){");
resultSb.append("idVal = idVal.substring(0,idVal.length - 1);");
resultSb.append("}");
resultSb.append("textVal = textVal.replace(treeNode.text,'');");
resultSb.append("if(textVal.indexOf(',') == 0){");
resultSb.append("textVal = textVal.substring(1);");
resultSb.append("}else if(textVal.indexOf(',,') > -1){");
resultSb.append("textVal = textVal.replace(',,',',');");
resultSb.append("}else if(textVal.indexOf(',') == textVal.length -1){");
resultSb.append("textVal = textVal.substring(0,textVal.length - 1);");
resultSb.append("}");
if(StringUtil.isNotEmpty(id)){
resultSb.append("$(\"#"+id+"Text\").val(textVal);");
resultSb.append(" $(\"#"+id+"\").val(idVal);");
}else{
resultSb.append("$(\"#"+field+"Text\").val(textVal);");
resultSb.append(" $(\"#"+field+"\").val(idVal);");
}
resultSb.append("}");
resultSb.append(" e.stopPropagation();");
resultSb.append("}");
}
private void zTreeInit(StringBuffer resultSb) {
resultSb.append("if(!$.fn.zTree){");
resultSb.append("$('head').append('<link rel=\"stylesheet\" href=\"plug-in/ztree/css/zTreeStyle.css\"/>');");
resultSb.append("$('head').append('<script type=\\\"text/javascript\\\" src=\\\"plug-in/ztree/js/jquery.ztree.core-3.5.min.js\\\"><\\/script>');");
resultSb.append("$('head').append('<script type=\\\"text/javascript\\\" src=\\\"plug-in/ztree/js/jquery.ztree.excheck-3.5.min.js\\\"><\\/script>');");
resultSb.append("}");
}
private void getZTreeSeting(StringBuffer resultSb) {
resultSb.append("var "+field+"Setting = {");
resultSb.append("check: {");
resultSb.append("enable: true");
resultSb.append("},");
resultSb.append("view: {dblClickExpand: false},");
resultSb.append("data: {simpleData: { enable: true }, key:{name:'text' }},");
resultSb.append("callback: {");
resultSb.append("onClick: " + field + "OnClick,");
resultSb.append("onCheck: " + field + "OnCheck");
resultSb.append("}");
resultSb.append("};");
}
/**
*
* @return
*/
private String parseDefaultVal() {
if(StringUtil.isNotEmpty(defaultVal)){
String result = "";
if(systemService == null){
systemService = ApplicationContextUtil.getContext().getBean(SystemService.class);
}
if(defaultVal.indexOf(",") > -1){
String[] defaultValArray = defaultVal.split(",");
for (int i = 0; i < defaultValArray.length; i++) {
if(StringUtil.isNotEmpty(defaultValArray[i])){
List<TSCategoryEntity> categoryList = systemService.findByProperty(TSCategoryEntity.class, "code", defaultValArray[i]);
if(categoryList != null && !categoryList.isEmpty()){
TSCategoryEntity categoryEntity = categoryList.get(0);
if(StringUtil.isEmpty(result)){
result = categoryEntity.getName();
}else{
result += "," + categoryEntity.getName();
}
}
}
}
}else{
List<TSCategoryEntity> categoryList = systemService.findByProperty(TSCategoryEntity.class, "code", defaultVal);
if(categoryList != null && !categoryList.isEmpty()){
TSCategoryEntity categoryEntity = categoryList.get(0);
result = categoryEntity.getName();
}
}
return result;
}
return null;
}
public int doStartTag() throws JspTagException {
return EVAL_PAGE;
}
public int doEndTag() throws JspTagException {
JspWriter out = null;
try {
out = this.pageContext.getOut();
out.print(end().toString());
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
out.clear();
out.close();
end().setLength(0);
} catch (Exception e2) {
}
}
return EVAL_PAGE;
}
public boolean isMultiCheck() {
return multiCheck;
}
public void setMultiCheck(boolean multiCheck) {
this.multiCheck = multiCheck;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String getDefaultVal() {
return defaultVal;
}
public void setDefaultVal(String defaultVal) {
this.defaultVal = defaultVal;
}
public String getDivClass() {
return divClass;
}
public void setDivClass(String divClass) {
this.divClass = divClass;
}
public String getInputClass() {
return inputClass;
}
public void setInputClass(String inputClass) {
this.inputClass = inputClass;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}

@ -162,14 +162,14 @@ public class UserSelectTag extends TagSupport {
if(hasLabel && oConvertUtils.isNotEmpty(title)){
sb.append(title + "");
}
sb.append("<input readonly=\""+readonly+"\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" onclick=\"openUserSelect()\" ");
sb.append("<input class=\"inuptxt\" readonly=\""+readonly+"\" type=\"text\" id=\"" + selectedNamesInputId + "\" name=\"" + selectedNamesInputId + "\" style=\"width: "+inputWidth+"\" onclick=\"openUserSelect()\" ");
if(StringUtils.isNotBlank(userNamesDefalutVal)){
sb.append(" value=\""+userNamesDefalutVal+"\"");
}
sb.append(" />");
if(oConvertUtils.isNotEmpty(selectedIdsInputId)){
sb.append("<input id=\"" + selectedIdsInputId + "\" name=\"" + selectedIdsInputId + "\" type=\"hidden\" ");
sb.append("<input class=\"inuptxt\" id=\"" + selectedIdsInputId + "\" name=\"" + selectedIdsInputId + "\" type=\"hidden\" ");
if(StringUtils.isNotBlank(userIdsDefalutVal)){
sb.append(" value=\""+userIdsDefalutVal+"\"");
}

@ -20,6 +20,7 @@ public class WebUploaderTag extends TagSupport {
private boolean auto=false;//是否自动上传上传按钮风格
private String buttonStyle;//默认绿色小号按钮
private String url = "systemController/filedeal.do";//文件上传处理url
// private String url = "systemController/ftpUploader.do";//ftp文件上传处理url
private int fileNumLimit =3;//fileNumLimit 最大文件数
private int fileSingleSizeLimit=5242880;//fileSingleSizeLimit单个文件最大5M[1024*1024*5]
private int size;//文件总大小
@ -136,7 +137,7 @@ public class WebUploaderTag extends TagSupport {
if("true".equals(readOnly)||"readOnly".equals(readOnly)){
sb.append("trhtml+=' style=\"display:none;\"';");
}
sb.append("trhtml+=' class=\"del icon-cha\">'+delflag+'</span></td><td></td></tr>';$list.children('table').append(trhtml);}");
sb.append("trhtml+=' class=\"del icon-cha\" style=\"overflow:hidden;\">'+delflag+'</span></td><td></td></tr>';$list.children('table').append(trhtml);}");
//获取文件名
sb.append("\r\nvar mygetFileName=function(filepath){if(filepath.lastIndexOf('\\\\')>0){return filepath.substring(filepath.lastIndexOf('\\\\')+1);\r\n}else if(filepath.lastIndexOf('/')>0){return filepath.substring(filepath.lastIndexOf('/')+1);}else{return filepath;}}");
//如果dataType有值

@ -0,0 +1,974 @@
<script type="text/javascript" src="plug-in/ztree/js/ztreeCreator.js" ></script>
<link rel="stylesheet" href="plug-in/ztree/css/zTreeStyle.css" type="text/css"/>
<script type="text/javascript" src="plug-in/ztree/js/jquery.ztree.core-3.5.min.js"></script>
<script type="text/javascript" src="plug-in/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript" src="plug-in/tools/curdtools_zh-cn.js"></script>
<style>
.menuContent{
filter:alpha(Opacity=100);
}
.conditionType{
display: block;
margin-bottom: 6px;
padding: 6px 0 8px;
width: 100%;
}
</style>
<!--高级查询器的弹窗 -->
<div id="w" scroll="no" class="easyui-window" data-options="closed:true,
resizable:false, title:'高级查询构造器'" style="width: 880px; height: 400px; padding: 0px;">
<div class="easyui-layout" fit="true">
<!--查询历史 -->
<div data-options="region:'east',split:false" style="width: 128px;">
<div class="easyui-accordion" style="width: 126px; height: 316px;">
<div title="查询历史" data-options="iconCls:'icon-search'"
style="padding: 0px;">
<ul id="tt" class="easyui-tree"
data-options="onClick:function(node){//单击事件
historyQuery( node );
},ondbClick: function(node){
$(this).tree('beginEdit',node.target);
},onContextMenu: function(e,node){
e.preventDefault();
$(this).tree('select',node.target);
$('#mmTree').menu('show',{
left: e.pageX,
top: e.pageY
});
},
onAfterEdit:function(node){
if(node.text!=''){
//his[node.id].name=node.text;
//saveHistory();
updateHistory(node);
}
}">
</ul>
</div>
</div>
</div>
<!--查询历史 -->
<div region="center" style="padding: 1px;">
<div style="float: left;">
<div style="float: left; top: 1px">
<ul id="dsUL">
<input type="hidden" name="cons[0].mainId" value=""/>
<li id="anyAll" class="conditionType">
<span class="anyAll">
过滤条件匹配:
<select id="anyallSelect" name="mchtyp" style="width: 200px" class="select">
<option value="and" selected="selected">And(所有条件都要求匹配)</option>
<option value="or">Or(条件中的任何一个匹配)</option>
</select>
</span>
</li>
<li id="dsLI" name="dsLI" class="conditions oop" data-index="0">
<span>
<input id="citySel" name="cons[0].tree" onclick="treeClick(this)" type="text" style="width:120px;" class=" queryTree" readonly="readonly" /> &nbsp;
<input id="tableVal" name="cons[0].hidd" type="hidden" value=""/>
<input name="cons[0].tableCode" type="hidden" value=""/>
</span>
<span >
<select id="field" name="cons[0].fld" onchange="changeField(this)">
</select>
</span>
<span>
<select id="condition" name="cons[0].ctyp" class="compareType" style="width: 150px">
<option>&nbsp;</option>
<option value="=">等于</option>
<option value="!=">不等于</option>
<option value=">">大于</option>
<option value=">=">大于等于</option>
<option value="lt">小于</option>
<option value="lte">小于等于</option>
<option value="likeBegin">以...开始</option>
<option value="likeEnd">以...结束</option>
<option value="like">包含</option>
<option value="not like">不包含</option>
<option value="in">在...中</option>
<option value="not in">不在...中</option>
</select>
</span> <span class="spanVal" style="position: relative; z-index: 2000;">
<input id="conValue" name="cons[0].val" type="text" style="width:165px;" class="text conditionValue" title="">
</span>
<span>
<a id="add" href="javascript:addULChild()" class="fa fa-plus-square" title="添加一个新的过滤条件" style="margin-left: 3px;"></a>
<a id="delete" href="javascript:void(0)" onclick="deleteULChild(this)" class="fa fa-minus-square" title="删除此过滤条件" style="margin-left: 23px;"></a>
</span>
</li>
</ul>
</div>
</div>
</div>
<div data-options="region:'south',border:false"
style="text-align: right; padding: 5px 0 0;">
<a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" href="javascript:void(0)" onclick="javascript:mySearch()">查询</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-reload" onclick="searchReset()">重置</a>
<a class="easyui-linkbutton" data-options="iconCls:'icon-save'" href="javascript:void(0)" onclick="saveBySelect()">另存为查询方案</a>
</div>
<div id="mmTree" class="easyui-menu" style="width: 100px;">
<div onclick="editTree()" data-options="iconCls:'icon-edit'">编辑</div>
<div onclick="deleteTree()" data-options="iconCls:'icon-remove'">删除</div>
</div>
</div>
<div id="menuContent" class="menuContent" style="display:none; position: absolute;background:#FFF;overflow:auto;height:120px;border:1px solid #9a848445;">
<ul id="orgTree" class="ztree" style="margin-top:-7px; width:112px;height:100px;"></ul>
</div>
<input type="hidden" name="treeValue" value="" id="treeValue" />
<input type="hidden" name="selectValue" value="" id="selectValue" />
<input type="hidden" name="queryCode" value="${queryCode}" id="queryCode"/>
<!--隐藏-->
<ul id="dsUL_template" style="display:none">
<li class="conditions oop" data-index="#index#">
<span>
<input name="cons[#index#].tree" onclick="treeClick(this)" type="text" style="width:120px;" class="tree queryTree" readonly="readonly" /> &nbsp;
<input name="cons[#index#].hidd" type="hidden" value=""/>
<input name="cons[#index#].tableCode" type="hidden" value=""/>
</span>
<span>
<select class="field" id="field" name="cons[#index#].fld" onchange="changeField(this)">
</select>
</span>
<span>
<select id="condition" name="cons[#index#].ctyp" class="compareType" style="width: 150px">
<option >&nbsp;</option>
<option value="=">等于</option>
<option value="!=">不等于</option>
<option value=">">大于</option>
<option value=">=">大于等于</option>
<option value="lt;">小于</option>
<option value="lte;">小于等于</option>
<option value="likeBegin">以...开始</option>
<option value="likeEnd">以...结束</option>
<option value="like">包含</option>
<option value="not like">不包含</option>
<option value="in">在...中</option>
<option value="not in">不在...中</option>
</select>
</span>
<span class="spanVal" style="position: relative; z-index: 2000;">
<input id="conValue1" name="cons[#index#].val" style="width:165px;" type="text" class="text conditionValue" title="">
</span>
<span>
<a id="add" href="javascript:addULChild()" class="fa fa-plus-square" title="添加一个新的过滤条件" style="margin-left: 3px;"></a>
<a id="delete" href="javascript:void(0)" onclick="deleteULChild(this)" class="fa fa-minus-square" title="删除此过滤条件" style="margin-left: 23px;"></a>
</span>
</li>
</ul>
</div>
<script type="text/javascript">
//高级查询器
var rowsData;
function superQuery(queryCode) {
//打开弹窗
$('#w').window('open');
if(queryCode !== null || queryCode !== "") {
$("#queryCode").val(queryCode);
}
//重置 清空所有的 input select 并删除li
searchReset();
loadTree();
//加载当前用户下的历史记录 根据选中的一条数据
loadHistory();
}
</script>
<!-- 弹出框页面js -->
<script type="text/javascript">
/* 获取所有的option 放在数组中 */
var optionArr=new Array();
var saveJson;
var nArr=new Array();
//历史查询获取json数据 保存在 数据库
function gethistoryDsli(){
var select1=new Array();
var relation = $("#anyallSelect").val();
//获取queryCode
var queryCode=$("#queryCode").val();
var json = new StringBuffer();
$("#dsUL li").each(function(i){
if(i<1){
return;
}
//获取表
var table=$(this).find("input[name='cons["+(i-1)+"].tree']").val();
var table1=$(this).find("input[name='cons["+(i-1)+"].hidd']").val();
//获取条件
var condition = $(this).find("select[name='cons["+(i-1)+"].ctyp']").val();
//获取值
var cValue = $(this).find("[name='cons["+(i-1)+"].val']").val();
//判断输入的是否为时期格式
/*if (CheckDate(cValue)) {
if (condition == "=") {
condition = "like";
cValue = "%" + cValue;
}
}*/
//判断table
if(table==null){
table="";
}
if(table1==null){
table1="";
}
//判断field
if(field==null){
field="";
}
//判断condition条件改变sql查询条件
if (condition == "lt") {
condition = "<";
} else if (condition == "lte") {
condition = "<="
} else if (condition == "like") {
condition = "like";
cValue = "%" + cValue + "%";
} else if (condition == "not like") {
condition = "not like";
cValue = "%" + cValue + "%";
} else if (condition == "likeBegin") {
condition = "like";
cValue = cValue + "%";
} else if (condition == "likeEnd") {
condition = "like";
cValue = "%" + cValue;
} else if (condition == "in") {
condition = "in";
cValue = "\(" + cValue + "\)"
}
//如果是新添加的 获取所有的option 放在数组里
/*if(!flg){
//获取所有的option
if(i==1){
var a = saveOption(optionArr,i);
select1= a.split(",");
select1.pop();
}
} */
//如果是回显的 修改添加 删除时 重新获取所有的option
var optionList=getoption();
var a = saveOption(optionList,i);
var bb=a.replace(/"/g,"'");
select1=bb.split(",");
select1.pop();
if (i-1 == 0) {
json.append("{\"table\":\"" + table + "\",\"table1\":\"" + table1+"\",\"field\":\""
+ select1[0]+ "\",\"condition\":\"" + condition
+ "\",\"value\":\"" + cValue
+ "\",\"relation\":\"" + relation
+ "\",\"state\":\"open\"}");
}
if (i-1 != 0) {
json.append("{\"table\":\"" + table + "\",\"table1\":\"" + table1+ "\",\"field\":\""
+ select1[i-1] + "\",\"condition\":\"" + condition
+ "\",\"value\":\"" + cValue
+ "\",\"relation\":\"" + relation
+ "\",\"state\":\"open\"}");
}
})
return json;
}
//获取当前页面上所有的option
function getoption(){
nArr.splice(0,nArr.length);
$("#dsUL li").each(function(i){
if(i<1) return
var field = $(this).find("select[name='cons["+(i-1)+"].fld']") ;
var tmp=field.html()
nArr.push(tmp);
})
return nArr;
}
//拼接“selected='selected'”
function saveOption(options,i){
var selectOption="";
var sel="";
var selected=" selected='selected'";
for (var j = 0; j < options.length; j++) {
selectOption=options[j];
//获取select中的值
$("select[name$='.fld'] option:selected").each(function(m){
var text=$(this).text();
if(j==m){
//回显时去掉 select='selected';
if(selectOption != null && selectOption != ""){
if(selectOption.indexOf("selected")>0){
var remove1=selectOption.substring(0,selectOption.indexOf(' selected="selected"'));
var remove2=selectOption.substring(selectOption.indexOf(' selected="selected"')+20,selectOption.length);
selectOption=remove1+remove2;
}
}
//重新添加
if(selectOption != null && selectOption != "") {
if(selectOption.indexOf(text)>0){
var sub= selectOption.substring(0,selectOption.indexOf(text)-1);
var sub2=sub+selected;
var sub3=selectOption.substring(selectOption.indexOf(text)-1,selectOption.length);
var sub4=sub2+sub3+",";
sel+=sub4;
}
}
}
})
}
return sel;
}
//查询获取json数据
function getDsLi(){
var relation = $("#anyallSelect").val();
//获取queryCode
var queryCode=$("#queryCode").val();
var json = new StringBuffer();
$("#dsUL li").each(function(i){
if(i<1){
return;
}
//获取表
var table=$(this).find("input[name='cons["+(i-1)+"].tree']").val();
var table1=$(this).find("input[name='cons["+(i-1)+"].hidd']").val();
//获取字段
var field = $(this).find("select[name='cons["+(i-1)+"].fld']").val();
//获取条件
var condition = $(this).find("select[name='cons["+(i-1)+"].ctyp']").val();
//获取值
var cValue = $(this).find("[name='cons["+(i-1)+"].val']").val();
//判断输入的是否为时期格式
/*if (CheckDate(cValue)) {
if (condition == "=") {
condition = "like";
cValue = "%" + cValue;
}
}*/
if(table==null){
table="";
}
if(table1==null){
table="";
}
//判断field
if(field==null){
field="";
}
//判断condition条件改变sql查询条件
if (condition == "lt") {
condition = "<";
} else if (condition == "lte") {
condition = "<="
} else if (condition == "like") {
condition = "like";
cValue = "%" + cValue + "%";
} else if (condition == "not like") {
condition = "not like";
cValue = "%" + cValue + "%";
} else if (condition == "likeBegin") {
condition = "like";
cValue = cValue + "%";
} else if (condition == "likeEnd") {
condition = "like";
cValue = "%" + cValue;
} else if (condition == "in") {
condition = "in";
cValue = "\(" + cValue + "\)"
}
//拼接json格式数据
if(i-1 == 0){
json.append("[{\"queryCode\":\"" + queryCode
+ "\",\"relation\":\""+relation
+"\","
+"\"children\":[{\"table\":\"" + table1
+ "\",\"field\":\"" + field
+ "\",\"condition\":\"" + condition
+ "\",\"relation\":\""+relation
+ "\",\"value\":\"" + cValue+"\"}");
}
//json格式数据追加
if (i-1 != 0) {
json.append(",{\"table\":\"" + table1
+ "\",\"field\":\"" + field
+ "\",\"condition\":\"" + condition
+ "\",\"relation\":\""+relation
+ "\",\"value\":\"" + cValue+"\"}");
}
})
json.append("]}]");
return json;
}
//查询按钮 点击事件
function mySearch() {
var jsonData= getDsLi();
$("#_complexSqlbuilder").val(jsonData.toString());
${tableName}search();
}
//添加StringBuffer
function StringBuffer() {
this.strings = new Array;
}
StringBuffer.prototype.append = function(str) {
this.strings.push(str); //追加指定元素
};
StringBuffer.prototype.toString = function() {
return this.strings.join(""); //向数组之间的元素插入指定字符串(此处为空字符串),并返回。
};
//添加相同的li
function addULChild() {
var dsUL_template = $("#dsUL_template").html();
$("#dsUL").append(dsUL_template);
resetTrNum();
}
//初始化下标
function resetTrNum() {
$('#dsUL').find('li').each( function(i) {
var index=$(this).attr("data-index");
if(!!index){
$(this).attr("data-index",i-1);
}
$(':input,select', this).each( function() {
var thisli = $(this);
var name = thisli.attr('name');
if (name != null) {
var reg = new RegExp("^cons");
if (reg.test(name)) {
if (name.indexOf("#index#") >= 0) {
thisli.attr("name", name.replace(
'#index#', i - 1));
} else {
var s = name.indexOf("[");
var e = name.indexOf("]");
var new_name = name.substring( s + 1, e);
thisli.attr("name", name.replace( new_name, i - 1));
}
}
}
});
});
}
//删除当前li
function deleteULChild(obj) {
var len = $("#dsUL").find("li").length;
if (len > 2) {
$(obj).parent().parent().remove();
resetTrNum();
}
}
//重置按钮,清空所有
function searchReset() {
$("#dsUL").find(".oop:gt(0)").remove();
$("#dsLI").find(":input").val("");
var spanVal = $("#dsUL>li").find("span.spanVal");
spanVal.html("<input name='cons[0].val' type='text' class='text conditionValue'>");
$("#field").empty();
$("#_complexSqlbuilder").val(null);
${tableName}search();
resetTrNum();
}
//判断输入的是否为日期格式
/*function CheckDate(strInputDate) {
if (strInputDate == "") return false;
strInputDate = strInputDate.replace(/-/g, "/");
var d = new Date(strInputDate);
if (isNaN(d)) return false;
var arr = strInputDate.split("/");
return ((parseInt(arr[0], 10) == d.getFullYear()) && (parseInt(arr[1], 10) == (d.getMonth() + 1)) && (parseInt(
arr[2], 10) == d.getDate()));
}*/
/* 加载ztree */
var orgTree ;
function loadTree() {
//获取queryCode编码规则
var queryCode = $("#queryCode").val();
var zNodes;
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
url: 'superQueryMainController.do?getTreeData',
data:{
"queryCode":queryCode
},
error: function () {
tip('服务器未响应, 请稍后再试!');
},
success:function(data){
zNodes = data.obj;
}
});
//ztree初始化
var ztreeCreator = new ZtreeCreator('orgTree',"superQueryMainController.do?getTreeData",zNodes)
.setCallback({ onClick:zTreeOnLeftClick})
.initZtree({},function(treeObj){orgTree = treeObj});
};
var indexGlobal = "";
/*ztree点击事件*/
function zTreeOnLeftClick(e, treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("orgTree"),
nodes = zTree.getSelectedNodes(),
v = "";
nodes.sort(function compare(a,b){return a.id-b.id;});
for (var i=0, l=nodes.length; i<l; i++) {
v += nodes[i].name + ",";
}
if (v.length > 0 ) v = v.substring(0, v.length-1);
var a =$("#treeValue").val();
var hidden=a.split(".")[0]+".hidd";
$("input[name='"+a+"']").val(v);
$("input[name='"+hidden+"']").val(treeNode.title);
//获取下拉框
linkAge(treeNode,indexGlobal);
//隐藏按钮
hideMenu();
}
/*显示ztree菜单 */
function showMenu() {
//获取当前最大DIV位置
var w = $("#w").parent(".window").offset();
var val=$("#treeValue").val();
if(!val) {
return false;
}
//获取当前Input位置
var cityOffset=$("input[name='"+val+"']").offset();
//计算文本框相对DIV的位置
var top = cityOffset.top-w.top+28;
$("#menuContent").css({top:top +"px"}).slideDown("fast");
$("body").bind("mousedown", onBodyDown);
}
/*隐藏ztree菜单*/
function hideMenu() {
$("#menuContent").fadeOut("fast");
$("body").unbind("mousedown", onBodyDown);
}
/*点击空白处隐藏ztree*/
function onBodyDown(event) {
if (!(event.target.id == "menuBtn" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length>0)) {
hideMenu();
}
}
/* 点击input输入框 显示ztree 并获取当前input的 name值*/
var treeName=""
function treeClick(item){
//TODO 获取文本框的位置显示菜单位置
var index=$(item).closest("#dsUL>li").data("index");
indexGlobal = index;
treeName=item.name;
$("#treeValue").val(treeName);
var selName=treeName.split(".")[0];
//清空下拉框
var sName=selName+".fld";
$("select[name='"+sName+"']").val("");
showMenu();
}
//下拉框ajax请求数据 联动
function linkAge(treeNode,indexGlobal){
if(treeNode.title == null || treeNode.title == ""){
tip("请选择当前表");
return false;
}else{
var tableName=treeNode.title;
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{"tableName":tableName},
url: 'superQueryMainController.do?getTextByTabelName',
success:function(data){
var arr = iterators(data);
//下拉框内容 组装option
var content="<option value=''></option>";
if(arr!=null&&arr.length>0){
for (var i = 0; i < arr.length; i++) {
//获取树形获取所有下拉框
content+="<option value='"+arr[i+1]+"'>"+arr[i]+"</option>";
i+=1;
}
//存"<option value='xxx'>xxx</option>"字符串 放在一个数组里
optionArr.push(content);
$("select[name='cons["+indexGlobal+"].fld']").html(content);
}else{
tip("请根据当前表选择字段 ");
return false;
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
}
}
//Object转数组
function iterators(item){
var arr=new Array();
var mainId = "";
$.each( item.obj, function(i, n){
arr.push(n.txt);
arr.push(n.name);
mainId = n.main_id;
});
$("input[name='cons[0].mainId']").val(mainId);
return arr;
}
/*-------------------------------以下是查询历史记录 -------------------------------*/
function onContextMenu(e, row) {
e.preventDefault();
$(this).treegrid('select', row.id);
$('#mmTree').menu('show', {
left : e.pageX,
top : e.pageY
});
}
//将json存放到数组里
var his = new Array();
var h;
$(document).ready(
function() {
resetTrNum();
});
//加载history
function loadHistory(){
var queryCode = $("#queryCode").val();
//根据queryCode获取MainId
jQuery.ajax({
type: 'POST',
dataType : "json",
data:{
"queryCode":queryCode
},
url: 'superQueryMainController.do?getMainIdByQueryCode',
success:function(data){
if (data.success){
$("input[name='cons[0].mainId']").val(data.obj);
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
//获取当前用户的查询历史
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{
"queryCode":queryCode
},
url: 'superQueryMainController.do?getHistoryByUserId',
success:function(data){
if (data.success){
h=data.obj;
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
$('#tt li').remove();
if (h) {
for ( var i = 0; i < h.length; i++) {
if (h[i]) {
appendTree(i, h[i]);
}
}
}
}
//另存为查询记录
function saveBySelect() {
//获取queryCode编码规则
var queryCode = $("#queryCode").val();
var hisJson=gethistoryDsli();
var name = prompt("请输入保存方案的名称","");
if(name!=null && name != "") {
his.push({
name:name,
json : hisJson
});
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{name:name,json:JSON.stringify(his),"queryCode":queryCode},
url: 'superQueryMainController.do?saveHistory',
success:function(data){
if (data.success){
appendTree(his.length - 1, name);
}else{
tip("系统中已存在此方案名称");
return ;
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
his.length=0;
}
}
//添加右侧历史记录
function appendTree(id, name) {
$('#tt').tree('append', {
data : [ {
id : id,
text : name,
iconCls:"icon-history-search"
} ]
});
}
//历史查询记录删除
function deleteTree() {
var node = $('#tt').tree('getSelected');
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{"name":node.text},
url: 'superQueryMainController.do?deleteHistoryByName',
success:function(data){
if(data.success=true){
$('#tt').tree('remove', node.target);
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
}
var nodeName;
//历史查询记录编辑名称
function editTree() {
var node = $('#tt').tree('getSelected');
$('#tt').tree('beginEdit', node.target);
nodeName=node.text;
}
//历史记录名称修改
function updateHistory(node){
if(node.text != null){
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{"name":node.text,"nodeName":nodeName},
url: 'superQueryMainController.do?updateHistoryByName',
success:function(data){
if(data.success==false){
tip("系统中已存在此方案名称");
editTree();
return ;
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
}
}
//添加模版li
function addULChild_template(i,value,condition,table,field,table1) {
var dsUL_template = $("#dsUL_template").html();
$("#dsUL").append(dsUL_template);
resetTrNum();
$("#dsUL").find("input[name='cons["+i+"].tree']").val(table);
$("#dsUL").find("input[name='cons["+i+"].hidd']").val(table1);
$("#dsUL").find("select[name='cons["+i+"].fld']").html(field);
var eField = $("select[name='cons["+i+"].fld']").val();
echoField(eField,i,value);
$("#dsUL").find("select[name='cons["+i+"].ctyp']").val(condition);
}
//点击历史记录触发事件回显到页面
var flg=false;
var hisData="";
function historyQuery(node) {
$("#dsUL").find(".oop:gt(0)").remove();
$("#dsLI").find(":input").val("");
jQuery.ajax({
async : false,
cache:false,
type: 'POST',
dataType : "json",
data:{"name":node.text},
url: 'superQueryMainController.do?getHistoryByText',
success:function(data){
if (data.success){
hisData=data.obj;
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
var jsonData=JSON.parse(hisData);
var data1="["+jsonData.json.strings+"]";
var data=JSON.parse(data1);
var t = $('#dsUL');
for(var i = 0; i<data.length; i++){
var v = data[i].value;
//获取value值
var begin = v.indexOf("%")==0; //表示value是以%开头
var end = v.charAt(v.length - 1);//表示value是以%结束
var condition = data[i].condition; //获取条件字段
var table=data[i].table;
var table1=data[i].table1;
var field=data[i].field;
/* 判断'%'以开头还是结束 */
if(begin && end != "%") {
condition = "likeEnd";
} else if(!begin && end == "%") {
condition = "likeBegin";
}
/* 判断Value值是否包含'%','(',')',有则去掉 */
if(v != null && v != "") {
v = v.replace("%","").replace("%","");
while(v.indexOf("(")>0 || v.indexOf(")")>0) {
v = v.replace("(","");
v = v.replace(")","");
}
}
if(i==0) {
$("#dsUL").find("input[name='cons[0].tree']").val(data[i].table);
$("#dsUL").find("input[name='cons[0].hidd']").val(data[i].table1);
$("#dsUL").find("select[name='cons[0].fld']").html(data[i].field);
$("#dsUL").find("select[name='cons[0].ctyp']").val(condition);
var eField = $("select[name='cons[0].fld']").val();
echoField(eField,i,v);
$("#anyallSelect").val(data[i].relation);
} else {
addULChild_template(i,v,condition,data[i].table,data[i].field,data[i].table1);
}
}
flg=true;
}
//根据字段回显最后值的类型框
function echoField(field,i,v) {
var spanVal = $(".oop").eq(i).find("span.spanVal");
var mainId = $("input[name='cons[0].mainId']").val();
jQuery.ajax({
type: 'POST',
dataType : "json",
data:{
"field":field,
"mainId":mainId
},
url: 'superQueryMainController.do?getFieldType',
success:function(data){
if("input" == data.obj[0].stype) {
spanVal.html("<input name='cons["+i+"].val' value='"+v+"' style='width:165px' type='text' class='text conditionValue'>");
}else if("date" == data.obj[0].stype) {
spanVal.html("<input name='cons["+i+"].val' type='text' value='"+v+"' style='background: url(\"plug-in/ace/images/datetime.png\") no-repeat scroll right center transparent; width:165px' class='form-control' onClick='WdatePicker({dateFmt:\"yyyy-MM-dd\"})'/>");
}else if("datetime" == data.obj[0].stype) {
spanVal.html("<input name='cons["+i+"].val' type='text' value='"+v+"' style='background: url(\"plug-in/ace/images/datetime.png\") no-repeat scroll right center transparent; width:165px' class='form-control' onClick='WdatePicker({dateFmt:\"yyyy-MM-dd HH:mm:ss\"})'/>");
}else if("select" == data.obj[0].stype) {
var selectContent = "<select name=\"cons["+i+"].val\" class=\"compareType conditionValue\" style=\"width: 165px\">";
jQuery.ajax({
type: 'POST',
dataType : "json",
data:{
"typegroup":data.obj[0].dict_code,
},
url: 'superQueryMainController.do?getSelectType',
success:function(type){
$.each(type.obj, function(index, item){
selectContent += "<option value='"+item.typecode+"' "+(item.typecode==v?"selected":"")+">"+item.typename+"</option>";
});
selectContent += "</select>";
spanVal.html(selectContent);
},
error:function(){
tip("服务器请求失败,请稍后重试!");
}
});
}else if("popup" == data.obj[0].stype) {
spanVal.html("<input name=\"cons["+i+"].val\" value='"+v+"' type=\"text\" style=\"width: 150px\" class=\"searchbox-inputtext\" onclick=\"popupClick(this,'"+data.obj[0].dict_text+"','val','"+data.obj[0].dict_table+"')\"/>");
$("input[name='cons["+i+"].val']").css({"background":"url(\"plug-in/diy/icons/search.png\") no-repeat 140px","width":"165px"});
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
}
//----------字段选择改变字段类型---------
function changeField(field) {
var index = $(field).closest("#dsUL>li").data("index");
var spanVal = $(field).closest("#dsUL>li").find("span.spanVal");
var mainId = $("input[name='cons[0].mainId']").val();
var fieldValue = field.value;
jQuery.ajax({
type: 'POST',
dataType : "json",
data:{
"field":fieldValue,
"mainId":mainId
},
url: 'superQueryMainController.do?getFieldType',
success:function(data){
if("input" == data.obj[0].stype) {
spanVal.html("<input name='cons["+index+"].val' type='text' style='width:165px' class='text conditionValue'>");
}else if("date" == data.obj[0].stype) {
spanVal.html("<input name='cons["+index+"].val' type='text' style='background: url(\"plug-in/ace/images/datetime.png\") no-repeat scroll right center transparent; width:165px' class='form-control' onClick='WdatePicker({dateFmt:\"yyyy-MM-dd\"})'/>");
}else if("datetime" == data.obj[0].stype) {
spanVal.html("<input name='cons["+index+"].val' type='text' style='background: url(\"plug-in/ace/images/datetime.png\") no-repeat scroll right center transparent; width:165px' class='form-control' onClick='WdatePicker({dateFmt:\"yyyy-MM-dd HH:mm:ss\"})'/>");
}else if("select" == data.obj[0].stype) {
var selectContent = "<select name=\"cons["+index+"].val\" class=\"compareType conditionValue\" style=\"width: 165px\">";
jQuery.ajax({
type: 'POST',
dataType : "json",
data:{
"typegroup":data.obj[0].dict_code,
},
url: 'superQueryMainController.do?getSelectType',
success:function(type){
$.each(type.obj, function(index, item){
selectContent += "<option value='"+item.typecode+"'>"+item.typename+"</option>";
});
selectContent += "</select>";
spanVal.html(selectContent);
},
error:function(){
tip("服务器请求失败,请稍后重试!");
}
});
}else if("popup" == data.obj[0].stype) {
spanVal.html("<input name=\"cons["+index+"].val\" type=\"text\" style=\"width: 150px\" class=\"searchbox-inputtext\" onclick=\"popupClick(this,'"+data.obj[0].dict_text+"','val','"+data.obj[0].dict_table+"')\"/>");
$("input[name='cons["+index+"].val']").css({"background":"url(\"plug-in/diy/icons/search.png\") no-repeat 140px","width":"165px"});
}
},
error: function () {
tip('服务器未响应,请稍后再试!');
}
});
}
</script>

@ -0,0 +1,116 @@
<div id='mm' class='easyui-menu' style='width:120px;'>
<div data-options="iconCls:'icon-filter'">
<span>过滤</span>
<div class='menu-content filter-content'>
<div id='curField'></div>
<div style='width:218px;'>
<select name='ruler' id='ruler'>
<option value='0'>等于</option>
<option value='1'>不含</option>
<option value='2'>包含</option>
</select>
<input name='keyword' id='keyword'>
<div class='btnDiv'>
<a href='javascript:void(0)' onclick='doFilter()' class='easyui-linkbutton'>&nbsp;&nbsp;确认&nbsp;&nbsp;</a>
<a href='javascript:void(0)' onclick='cancleFilter()' class='easyui-linkbutton'>&nbsp;&nbsp;取消&nbsp;&nbsp;</a>
</div>
</div>
</div>
</div>
<div class='menu-sep'></div>
</div>
<script type='text/javascript'>
var cmenu;
var curFiled;
function doFilter(){
$('#${gridId}').datagrid({
rowStyler: function(index,row){
var ruler = $('#ruler').val();
var keyword = $('#keyword').val();
var field = row[curFiled];
if(ruler == 0){
<#--update-begin--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 -->
var objRegExp = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/;
if(objRegExp.test(keyword)){
field = field.substring(0,10);
}
<#--update-end--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 -->
if (field != keyword){
return 'display:none;';
}
return 'display:block;';
}else if(ruler == 1){
if(field.indexOf(keyword) > -1){
return 'display:none;';
}
return 'display:block;';
}else if(ruler == 2){
if(field.indexOf(keyword) == -1){
return 'display:none;';
}
return 'display:block;';
}
}
});
$('#mm').menu('hide');
}
function cancleFilter(){
<#--update-begin--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 -->
$('#keyword').val('');
$('#${gridId}').datagrid({
rowStyler: function(index,row){
return 'display:block;';
}
});
<#--update-end--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 -->
$('#mm').menu('hide');
}
function createMenu(){
cmenu = $('#mm').menu({
onClick: function(item){
if (item.iconCls == 'icon-ok'){
$('#${gridId}').datagrid('hideColumn', item.name);
cmenu.menu('setIcon', {
target: item.target,
iconCls: 'icon-empty'
});
} else if(item.iconCls == 'icon-empty'){
$('#${gridId}').datagrid('showColumn', item.name);
cmenu.menu('setIcon', {
target: item.target,
iconCls: 'icon-ok'
});
}
}
});
var fields = $('#${gridId}').datagrid('getColumnFields');
for(var i=0; i<fields.length; i++){
var field = fields[i];
var col = $('#${gridId}').datagrid('getColumnOption', field);
if(col.title != '主键'){
cmenu.menu('appendItem', {
text: col.title,
name: field,
iconCls: 'icon-ok'
});
}
}
}
<#--update-begin--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 --加载多次问题 -->
function headerMenu(e, field){
e.preventDefault();
if (!cmenu){
createMenu();
}
curFiled = field;
var col = $('#${gridId}').datagrid('getColumnOption', field);
$('#curField').html('当前字段:'+col.title);
$('#mm').menu('show', {
left: e.pageX,
top: e.pageY
});
}
<#--update-end--Author:xuelin Date:20171128 for[#2421]【bug】字段过滤功能 --加载多次问题 -->
</script>

@ -0,0 +1,565 @@
<script type="text/javascript" src="plug-in/tools/curdtools_zh-cn.js"></script>
<div style="position: relative; overflow: auto;">
<div id="w" class="easyui-window" data-options="closed:true,title:'高级查询构造器'" style="width: 780px; height: 370px; padding: 0px">
<div class="easyui-layout" data-options="fit:true">
<div data-options="region:'east',split:false" style="width: 128px;">
<div class="easyui-accordion" style="width: 126px; height: 284px;">
<div title="查询历史" data-options="iconCls:'icon-search'"
style="padding: 0px;">
<ul id="tt" class="easyui-tree"
data-options="onClick:function(node){//单击事件
historyQuery( node.id);
},ondbClick: function(node){
$(this).tree('beginEdit',node.target);
},onContextMenu: function(e,node){
e.preventDefault();
$(this).tree('select',node.target);
$('#mmTree').menu('show',{
left: e.pageX,
top: e.pageY
});
},
onAfterEdit:function(node){
if(node.text!=''){
his[node.id].name=node.text;
saveHistory();
}
}">
</ul>
</div>
</div>
</div>
<div data-options="region:'center'" style="padding: 0px;">
<ul id="dsUL">
<li id="anyAll" class="conditionType">
<span class="anyAll">
过滤条件匹配:
<select id="anyallSelect" name="mchtyp"
style="width: 200px" class="select">
<option value="and" selected="selected">And(所有条件都要求匹配)</option>
<option value="or">Or(条件中的任何一个匹配)</option>
</select>
</span>
</li>
<li><hr style="border: 1px dotted #036" /></li>
<li class="conditions oop" id="dsLI" style="height: 29px;" data-index="0">
<span>
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<select class="field" id="field" name="cons[0].fld" onchange="setConsModel(this)" >
<option value="">&nbsp;</option>
<#list fields as column>
<#--update-begin--Author:xuelin Date:20171108 for[#2404]【平台UI改造】UI样式改造点--高级查询弹出窗口遮挡 -->
<#if '${column.hidden?string("true", "false")}' != "true">
<#--update-begin--Author:LiShaoQing Date:20180110 for[#2452]【新功能】高级查询支持popup功能 -->
<option value="${column.field}" data-popup="${column.popup}" data-dictionary="${column.dictionary}">${column.title}</option>
<#--update-end--Author:LiShaoQing Date:20180110 for[#2452]【新功能】高级查询支持popup功能 -->
</#if>
<#--update-end--Author:xuelin Date:20171108 for[#2404]【平台UI改造】UI样式改造点--高级查询弹出窗口遮挡 -->
</#list>
</select>
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
</span>
<span>
<select id="condition" name="cons[0].ctyp" class="compareType" style="width: 150px;margin: 1px;">
<option value="">&nbsp;</option>
<option value="=">等于</option>
<option value="!=">不等于</option>
<option value=">">大于</option>
<option value=">=">大于等于</option>
<option value="&lt;">小于</option>
<option value="&le;">小于等于</option>
<option value="likeBegin">以...开始</option>
<option value="likeEnd">以...结束</option>
<option value="like">包含</option>
<option value="not like">不包含</option>
<option value="in">在...中</option>
<option value="not in">不在...中</option>
</select>
</span>
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<span style="position: relative; z-index: 2000;" class="conVal">
<input id="conValue" name="cons[0].val" type="text" class="text conditionValue" title="" style="width:130px;height:27px;">
</span>
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<span>
<a id="add" href="javascript:addULChild()" class="fa fa-plus-square" title="添加一个新的过滤条件" style="margin-left: 3px;"></a>
<a id="delete" href="javascript:void(0)" onclick="deleteULChild(this)" class="fa fa-minus-square" title="删除此过滤条件" style="margin-left: 23px;"></a>
</span>
</li>
</ul>
</div>
<div data-options="region:'south',border:false"
style="text-align: right; padding: 5px 0 0;">
<a class="easyui-linkbutton" data-options="iconCls:'icon-ok'" href="javascript:void(0)" onclick="javascript:mySearch()">OK</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-reload" onclick="searchReset()">重置</a>
<a class="easyui-linkbutton" data-options="iconCls:'icon-save'" href="javascript:void(0)" onclick="saveBySelect()">另存为查询方案</a>
</div>
</div>
</div>
</div>
<ul id="dsUL_template" style="display:none">
<li class="conditions oop" style="height: 29px;" data-index="#index#">
<span>
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<select class="field" id="field" name="cons[#index#].fld" onchange="setConsModel(this)" >
<option value="">&nbsp;</option>
<#list fields as column>
<#--update-begin--Author:xuelin Date:20171108 for[#2404]【平台UI改造】UI样式改造点--高级查询弹出窗口遮挡 -->
<#if '${column.hidden?string("true", "false")}' != "true">
<option value="${column.field}" data-popup="${column.popup}" data-dictionary="${column.dictionary}">${column.title}</option>
</#if>
<#--update-end--Author:xuelin Date:20171108 for[#2404]【平台UI改造】UI样式改造点--高级查询弹出窗口遮挡 -->
</#list>
</select>
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
</span>
<span>
<select id="condition" name="cons[#index#].ctyp" class="compareType" style="width: 150px;margin: 1px;">
<option value="">&nbsp;</option>
<option value="=">等于</option>
<option value="!=">不等于</option>
<option value=">">大于</option>
<option value=">=">大于等于</option>
<option value="&lt;">小于</option>
<option value="&le;">小于等于</option>
<option value="likeBegin">以...开始</option>
<option value="likeEnd">以...结束</option>
<option value="like">包含</option>
<option value="not like">不包含</option>
<option value="in">在...中</option>
<option value="not in">不在...中</option>
</select>
</span>
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<span style="position: relative; z-index: 2000;" class="conVal">
<input id="conValue1" name="cons[#index#].val" type="text" class="text conditionValue" title="" style="width:130px;height:27px;">
</span>
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<span>
<a id="add" href="javascript:addULChild()" class="fa fa-plus-square" title="添加一个新的过滤条件" style="margin-left: 3px;"></a>
<a id="delete" href="javascript:void(0)" onclick="deleteULChild(this)" class="fa fa-minus-square" title="删除此过滤条件" style="margin-left: 23px;"></a>
</span>
</li>
</ul>
<div id="mmTree" class="easyui-menu" style="width: 100px;">
<div onclick="editTree()" data-options="iconCls:'icon-edit'">编辑</div>
<div onclick="deleteTree()" data-options="iconCls:'icon-remove'">删除</div>
</div>
<script type="text/javascript" src="plug-in/jquery/jquery.cookie.js"></script>
<script type="text/javascript" src="plug-in/jquery-plugs/storage/jquery.storageapi.min.js"></script>
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<span style="display:none;">
<#list fields as column>
<#if column.formatter??>
<span id="field_${column.field}">
<input id="conValue1" name="cons[#index#].val" type="text" style="width:130px;height:27px;" onclick="WdatePicker({dateFmt:'${column.formatter}'})" class="Wdate text conditionValue" title="">
</span>
<#elseif column.dictionary??>
<#list valueList as val>
<#if '${column.field}' == '${val.name}'>
<span id="field_${column.field}">
<select id="conValue1" name="cons[#index#].val" style="width:130px;margin: 1px;">
<#list val.value?split(',') as x>
<#-- update-begin-Author:LiShaoQing -- date:20180111 for:Option的Value为Text,存储取值为VAL---- -->
<option value="${x}">${val.text?split(",")[x_index]}</option>
<#-- update-end-Author:LiShaoQing -- date:20180111 for:Option的Value为Text,存储取值为VAL---- -->
</#list>
</select>
</span>
</#if>
</#list>
<#else>
<span id="field_${column.field}"><input id="conValue1" name="cons[#index#].val" type="text" class="text conditionValue" title="" style="width:130px;height:27px;"></span>
</#if>
</#list>
</span>
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<script type="text/javascript">
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
function setConsModel(field){
$(field).parent().parent().find(".conVal").html($("#field_"+$(field).val()).html());
<#-- update-begin--Author:LiShaoQing Date:20180110 for[#2452]【新功能】高级查询支持popup功能 -->
var index = $(field).closest("#dsUL>li").data("index");
//获取select选中值的data属性
var popup = $(field).find("option:selected").data("popup");
var dictionary = $(field).find("option:selected").data("dictionary");
if(popup&&dictionary.indexOf(',')>0) {
var splitArr = new Array();
splitArr = dictionary.split(",");
var spanVal = $(field).closest("#dsUL>li").find("span.conVal");
//splitArr=dictionary 0为表编码,1为查询字段,2为返回字段
spanVal.html("<input name=\"cons["+index+"].val\" type=\"text\" class=\"searchbox-inputtext\" onclick=\"popupClick(this,'"+splitArr[1]+"','val','"+splitArr[0]+"')\"/>");
$("input[name='cons["+index+"].val']").css({"background":"url(\"plug-in/diy/icons/search.png\") no-repeat 105px","width":"130px"});
}
<#--update-end--Author:LiShaoQing Date:20180110 for[#2452]【新功能】高级查询支持popup功能 -->
resetTrNum();
}
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
function onContextMenu(e, row) {
e.preventDefault();
$(this).treegrid('select', row.id);
$('#mm').menu('show', {
left : e.pageX,
top : e.pageY
});
}
var his = new Array();
var saveAsJson;
//查询并保存数据
function mySearch() {
//多条件查询
//-----------------------
var idIndex = 100;
//获取页面上AndOr
var relation = $("#anyallSelect").val();
var dsli = $("#dsLI");
var json = new StringBuffer();
$("#dsUL li").each(
function(i) {
idIndex++;
if(i<=1){
return;
}
var field = $(this).find("select[name='cons["+(i-2)+"].fld']").val();
var condition = $(this).find("select[name='cons["+(i-2)+"].ctyp']").val();
<#-- update-begin-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
var cValue = $(this).find("input[name='cons["+(i-2)+"].val'],select[name='cons["+(i-2)+"].val']").val();
<#-- update-end-Author:xuelin Date:20171211 forTASK #2441 【改造】高级查询目前只支持输入框,不支持下拉和时间控件 -->
<#-- update-begin-Author:xuelin Date:20171221 forTASK #2399 【bug】高级查询条件为空的情况下点击查询报错 -->
if(field === '' && condition === '' && cValue === ''){
return ture;
}
<#-- update-end-Author:xuelin Date:20171221 forTASK #2399 【bug】高级查询条件为空的情况下点击查询报错 -->
//判断输入的是否为时期格式
/*if (CheckDate(cValue)) {
if (condition == "=") {
condition = "like";
cValue = "%" + cValue;
}
}*/
//判断condition条件改变sql查询条件
if (condition == "like") {
condition = "like";
cValue = "%" + cValue + "%";
} else if (condition == "not like") {
condition = "not like";
cValue = "%" + cValue + "%";
} else if (condition == "likeBegin") {
condition = "like";
cValue = cValue + "%";
} else if (condition == "likeEnd") {
condition = "like";
cValue = "%" + cValue;
} else if (condition == "in") {
condition = "in";
cValue = "\(" + cValue + "\)";
} else if(condition == "not in") {
condition = "not in";
cValue = "\(" + cValue + "\)";
}
if ((i-2) == 0) {
json.append("{\"id\":" + idIndex + ",\"field\":\""
+ field + "\",\"condition\":\"" + condition
+ "\",\"value\":\"" + cValue
+ "\",\"relation\":\"" + relation
+ "\",\"state\":\"open\"}");
}
if ((i-2) != 0) {
json.append("{\"id\":" + idIndex + ",\"field\":\""
+ field + "\",\"condition\":\"" + condition
+ "\",\"value\":\"" + cValue
+ "\",\"relation\":\"" + relation
+ "\",\"state\":\"open\"}");
}
});
$("#_sqlbuilder").val(json.toString());
saveAsJson = json;
/*var isnew = true;
//验证右侧是否存在相同的记录
for ( var i = 0; i < his.length; i++) {
//比较JSON
if (his[i] && his[i].json == json.toString()) {
isnew = false;
}
}
if (isnew) {
his.push({
name : 'Query' + his.length,
json : json
});
saveHistory();
var name = 'Query' + (his.length - 1);
appendTree(his.length - 1, name);
}*/
//-----------------------
${tableName}search();
}
//添加StringBuffer
function StringBuffer() {
this.strings = new Array;
}
StringBuffer.prototype.append = function(str) {
this.strings.push(str); //追加指定元素
};
StringBuffer.prototype.toString = function() {
return "["+this.strings.join(",")+"]"; //向数组之间的元素插入指定字符串(此处为空字符串),并返回。
};
//添加相同的li
function addULChild() {
var dsUL_template = $("#dsUL_template").html();
$("#dsUL").append(dsUL_template);
resetTrNum();
}
//添加模版li
function addULChild_template(i,value,condition,field) {
var dsUL_template = $("#dsUL_template").html();
$("#dsUL").append(dsUL_template);
resetTrNum();
$("#dsUL").find("select[name='cons["+i+"].fld']").val(field);
$("#dsUL").find("select[name='cons["+i+"].ctyp']").val(condition);
$("#dsUL").find("input[name='cons["+i+"].val']").val(value);
var field = $("#dsUL").find("select[name='cons["+i+"].fld']").find("option:selected");
echoField(i,field,value);
}
//初始化下标
function resetTrNum() {
$('#dsUL').find('li').each(
function(i) {
var index=$(this).attr("data-index");
if(!!index){
$(this).attr("data-index",i-2);
}
$(':input,select', this).each(
function() {
var thisli = $(this);
var name = thisli.attr('name');
if (name != null) {
var reg = new RegExp("^cons");
if (reg.test(name)) {
if (name.indexOf("#index#") >= 0) {
thisli.attr("name", name.replace(
'#index#', i - 2));
} else {
var s = name.indexOf("[");
var e = name.indexOf("]");
var new_name = name.substring(
s + 1, e);
thisli.attr("name", name.replace(
new_name, i - 2));
}
}
}
});
});
}
//删除当前li
function deleteULChild(obj) {
var len = $("#dsUL").find("li").length;
if (len > 3) {
$(obj).parent().parent().remove();
resetTrNum();
}
}
//重置按钮,清空所有
function searchReset() {
$("#dsUL").find(".oop:gt(0)").remove();
$("#dsLI").find(":input").val("");
var spanVal = $("#dsUL>li").find("span.conVal");
spanVal.html("<input name='cons[0].val' type='text' style='width:130px;' class='text conditionValue'>");
$("#_sqlbuilder").val(null);
${tableName}search();
resetTrNum();
}
//判断输入的是否为日期格式
/*function CheckDate(strInputDate) {
if (strInputDate == "")
return false;
if(strInputDate!="" && strInputDate!=null){
strInputDate = strInputDate.replace(/-/g, "/");
}
var d = new Date(strInputDate);
if (isNaN(d))
return false;
var arr = strInputDate.split("/");
return ((parseInt(arr[0], 10) == d.getFullYear())
&& (parseInt(arr[1], 10) == (d.getMonth() + 1)) && (parseInt(
arr[2], 10) == d.getDate()));
}*/
//update-begin--Author:xuelin Date:20171101 forTASK #2404 【平台UI改造】UI样式改造点---高级查询弹出窗口遮挡----
//让window居中
var easyuiPanelOnOpen = function (left, top) {
var iframeWidth = $(this).parent().parent().width();
var iframeHeight = $(this).parent().parent().height();
var windowWidth = $(this).parent().width();
var windowHeight = $(this).parent().height();
var setWidth = (iframeWidth - windowWidth) / 2;
var setHeight = (iframeHeight - windowHeight) / 2;
$(this).parent().css({//修正面板位置
left: setWidth,
top: setHeight
});
if (iframeHeight < windowHeight)
{
$(this).parent().css({//修正面板位置
left: setWidth,
top: 0
});
}
$(".window-shadow").hide();
};
$.fn.window.defaults.onOpen = easyuiPanelOnOpen;
//update-end--Author:xuelin Date:20171101 forTASK #2404 【平台UI改造】UI样式改造点---高级查询弹出窗口遮挡----
$(document).ready(
function() {
resetTrNum();
storage = $.localStorage;
if (!storage)
storage = $.cookieStorage;
var h = storage.get('${tableName}'+'his');
if (h) {
his = h;
$('#tt li').remove();
for ( var i = 0; i < his.length; i++) {
if (his[i]) {
appendTree(i, his[i].name);
}
}
}
});
//打开高级查询框
function queryBuilder() {
$('#w').window('open');
}
//点击历史记录触发事件
function historyQuery(index) {
$("#dsUL").find(".oop:gt(0)").remove();
$("#dsLI").find(":input").val("");
var queryCons = "["+his[index].json.strings+"]";
var queryCondition = queryCons;
var data = JSON.parse(queryCons);
var t = $('#dsUL');
for(var i = 0; i < data.length; i++) {
var v = data[i].value; //获取value值
var begin = v.indexOf("%")==0; //表示value是以%开头
var end = v.charAt(v.length - 1);//表示value是以%结束
var condition = data[i].condition; //获取条件字段
/* 判断'%'以开头还是结束 */
if(begin && end != "%") {
condition = "likeEnd";
} else if(!begin && end == "%") {
condition = "likeBegin";
}
/* 判断Value值是否包含'%','(',')',有则去掉 */
if(v != null && v != "") {
while(v.indexOf("%")>=0){
v = v.replace("%","");
}
while(v.indexOf("(")>0 || v.indexOf(")")>0) {
v = v.replace("(","");
v = v.replace(")","");
}
}
if(i==0) {
$("#dsUL").find("select[name='cons[0].fld']").val(data[i].field);
$("#dsUL").find("select[name='cons[0].ctyp']").val(condition);
$("#dsUL").find("input[name='cons[0].val']").val(v);
$("#anyallSelect").val(data[i].relation);
var field = $("#dsUL").find("select[name='cons[0].fld']").find("option:selected");
echoField(i,field,v);
} else {
addULChild_template(i,v,condition,data[i].field);
}
}
$('#_sqlbuilder').val(queryCondition);
${tableName}search();
}
//回显字段类型
function echoField(i,field,v) {
//获取当前field的data属性
var popup = $(field).data("popup");
var dictionary = $(field).data("dictionary");
//sel为字段名称
var sel = $(field).val();
var spanVal = $(field).closest("#dsUL>li").find("span.conVal");
//判断popup是否为TRUE和dictionary是否有逗号
var spanHtml="";
if(popup&&dictionary.indexOf(',')>0) {
var splitArr = new Array();
splitArr = dictionary.split(",");
//splitArr=dictionary 0为表编码,1为查询字段,2为返回字段
spanHtml+="<input name=\"cons["+i+"].val\" value='"+v+"' type=\"text\" class=\"searchbox-inputtext\" onclick=\"popupClick(this,'"+splitArr[1]+"','val','"+splitArr[0]+"')\"/>";
spanVal.html(spanHtml);
$("input[name='cons["+i+"].val']").css({"background":"url(\"plug-in/diy/icons/search.png\") no-repeat 105px","width":"130px"});
} else {
//除了popup通用写法
var tempSpan=$("span#field_"+sel).html();
spanVal.html(tempSpan);
$(spanVal).find("[name='cons[#index#].val']").attr("name","cons["+i+"].val").removeAttr("id").val(v);
}
}
//查询历史操作
function saveHistory() {
var history = new Array();
for ( var i = 0; i < his.length; i++) {
if (his[i]) {
history.push(his[i]);
}
}
var tableName = '${tableName}'+'his'; //存储数据区分
storage.set(tableName, JSON.stringify(history));
}
//历史查询记录删除
function deleteTree() {
var node = $('#tt').tree('getSelected');
his[node.id] = null;
saveHistory();
$('#tt').tree('remove', node.target);
}
//历史查询记录编辑名称
function editTree() {
var node = $('#tt').tree('getSelected');
$('#tt').tree('beginEdit', node.target);
his[node.id].name = null;
saveHistory();
}
//另存为查询记录
function saveBySelect() {
var name = prompt("查询方案名称","");
if(name!=null && name != "") {
his.push({
name : name,
json : saveAsJson
});
saveHistory();
appendTree(his.length - 1, name);
}
}
//添加右侧历史记录
function appendTree(id, name) {
$('#tt').tree('append', {
data : [ {
id : id,
text : name,
iconCls:"icon-history-search"
} ]
});
}
</script>

@ -0,0 +1,92 @@
package org.jeecgframework.tag.vo.superquery;
/**
*
* @author qinfeng
*
*/
public class Field {
/**
*
*/
private String name;
/**
*
*/
private String txt;
/**
* n: int; c: ;d: ;
*/
private String dtype;
/**
* select: ; input: ; popup: ; date: ;datetime: ;
*/
private String stype;
/**
* codecodepopup
*/
private String dicCode;
/**
* tablecode
*/
private String dicTable;
/**
* Text ,
*/
private String dictTxt;
/**
*
*/
private int seq;
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDtype() {
return dtype;
}
public void setDtype(String dtype) {
this.dtype = dtype;
}
public String getStype() {
return stype;
}
public void setStype(String stype) {
this.stype = stype;
}
public String getDicCode() {
return dicCode;
}
public void setDicCode(String dicCode) {
this.dicCode = dicCode;
}
public String getDicTable() {
return dicTable;
}
public void setDicTable(String dicTable) {
this.dicTable = dicTable;
}
public String getDictTxt() {
return dictTxt;
}
public void setDictTxt(String dictTxt) {
this.dictTxt = dictTxt;
}
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
}
}

@ -0,0 +1,46 @@
package org.jeecgframework.tag.vo.superquery;
import java.util.ArrayList;
import java.util.List;
public class SuperQueryJson {
/**
* M:S:
*/
private String type;
/**
*
*/
private List<Table> tabs = new ArrayList<Table>();
/**
*
*/
private List<TConfig> configs = new ArrayList<TConfig>();
public void addTable(Table e){
tabs.add(e);
}
public void addTconfig(TConfig t){
configs.add(t);
}
public List<Table> getTabs() {
return tabs;
}
public void setTabs(List<Table> tabs) {
this.tabs = tabs;
}
public List<TConfig> getConfigs() {
return configs;
}
public void setConfigs(List<TConfig> configs) {
this.configs = configs;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}

@ -0,0 +1,37 @@
package org.jeecgframework.tag.vo.superquery;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author scott
*
*/
public class TConfig {
/**
*
*/
private String table;
/**
*
*/
private List<Field> fields = new ArrayList<Field>();
public void addField(Field f){
fields.add(f);
}
public String getTable() {
return table;
}
public void setTable(String table) {
this.table = table;
}
public List<Field> getFields() {
return fields;
}
public void setFields(List<Field> fields) {
this.fields = fields;
}
}

@ -0,0 +1,58 @@
package org.jeecgframework.tag.vo.superquery;
/**
*
* @author qinfeng
*
*/
public class Table {
/**
*
*/
private String table;
/**
* Y N
*/
private String isMain;
/**
*
*/
private String fKey;
/**
*
*/
private int seq;
public int getSeq() {
return seq;
}
public void setSeq(int seq) {
this.seq = seq;
}
public String getTable() {
return table;
}
public void setTable(String table) {
this.table = table;
}
public String getIsMain() {
return isMain;
}
public void setIsMain(String isMain) {
this.isMain = isMain;
}
public String getfKey() {
return fKey;
}
public void setfKey(String fKey) {
this.fKey = fKey;
}
}

@ -0,0 +1,86 @@
package org.jeecgframework.tag.vo.superquery;
import org.jeecgframework.jwt.util.GsonUtil;
public class TestMain {
public static void main(String[] args) {
SuperQueryJson sqm = new SuperQueryJson();
sqm.setType("M");
Table t = new Table();
t.setIsMain("Y");
t.setTable("jeecg_order_main");
//表结构配置
Table sb1 = new Table();
sb1.setIsMain("N");
sb1.setTable("jeecg_order_product");
// Table sb2 = new Table();
// sb2.setIsMain("Y");
// sb2.setTable("jeecg_order_custom");
sqm.addTable(t);
sqm.addTable(sb1);
//订单表字段配置
TConfig tc = new TConfig();
tc.setTable("jeecg_order_main");
Field f = new Field();
f.setName("GO_ORDER_CODE");
f.setTxt("订单号");
f.setDtype("c");
f.setStype("input");
f.setSeq(1);
Field f1 = new Field();
f1.setName("GODER_TYPE");
f1.setDtype("c");
f1.setTxt("订单类型");
f1.setStype("select");
f1.setDicCode("sex");
f1.setSeq(2);
Field f2 = new Field();
f2.setName("CREATE_DT");
f2.setDtype("d");
f2.setTxt("订单时间");
f2.setStype("date");
f2.setSeq(3);
tc.addField(f);
tc.addField(f1);
tc.addField(f2);
//订单表字段配置
TConfig tc1 = new TConfig();
tc1.setTable("jeecg_order_product");
Field ff = new Field();
ff.setName("GOP_PRODUCT_NAME");
ff.setTxt("产品名称");
ff.setDtype("c");
ff.setStype("input");
ff.setSeq(1);
Field ff1 = new Field();
ff1.setName("GOP_PRODUCT_TYPE");
ff1.setTxt("产品类型");
ff1.setDtype("c");
ff1.setStype("select");
ff1.setDicCode("sex");
ff1.setSeq(2);
Field ff2 = new Field();
ff2.setName("MODIFY_DT");
ff2.setDtype("d");
ff2.setStype("date");
ff2.setTxt("产品出厂时间");
ff2.setSeq(3);
tc1.addField(ff);
tc1.addField(ff1);
tc1.addField(ff2);
sqm.addTconfig(tc);
sqm.addTconfig(tc);
System.out.println(GsonUtil.toJson(sqm));
}
}

@ -266,7 +266,7 @@
<#if x['search_mode']=="single">
<#if (x['field_dictlist']?size >0)>
<select name = "${x['field_name']}" WIDTH="100" style="width: 104px">
<option value = "">---请选择---</option>
<option value = "">-- 请选择 --</option>
<#list x['field_dictlist'] as xd>
<option value = "${xd['typecode']}">${xd['typename']}</option>
</#list>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save