diff --git a/common/src/main/java/com/jeesite/common/security/AesUtils.java b/common/src/main/java/com/jeesite/common/security/AesUtils.java index 7b710546..77f4716b 100644 --- a/common/src/main/java/com/jeesite/common/security/AesUtils.java +++ b/common/src/main/java/com/jeesite/common/security/AesUtils.java @@ -5,6 +5,7 @@ package com.jeesite.common.security; import java.io.UnsupportedEncodingException; import java.security.GeneralSecurityException; +import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; @@ -24,6 +25,8 @@ public class AesUtils { private static final String AES = "AES"; private static final String AES_CBC = "AES/CBC/PKCS5Padding"; private static final int DEFAULT_AES_KEYSIZE = 128; // 生成AES密钥, 默认长度为128位(16字节). + private static final int DEFAULT_IVSIZE = 16; // 生成随机向量, 默认大小为cipher.getBlockSize(), 16字节 + private static final SecureRandom RANDOM = new SecureRandom(); // 用于 生成 generateIV随机数对象 private static final String DEFAULT_URL_ENCODING = "UTF-8"; private static final byte[] DEFAULT_KEY = new byte[]{-97,88,-94,9,70,-76,126,25,0,3,-20,113,108,28,69,125}; @@ -110,6 +113,15 @@ public class AesUtils { } } + /** + * 生成随机向量,默认大小为cipher.getBlockSize(), 16字节. + */ + public static byte[] genIV() { + byte[] bytes = new byte[DEFAULT_IVSIZE]; + RANDOM.nextBytes(bytes); + return bytes; + } + /** * 使用AES加密原始字符串. * diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx index a9a5cd42..28cd8e4d 100644 Binary files a/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx and b/modules/core/src/main/java/com/jeesite/modules/sys/db/InitCoreData.xlsx differ diff --git a/web/src/main/java/com/jeesite/modules/test/dao/TestDataChildDao.java b/web/src/main/java/com/jeesite/modules/test/dao/TestDataChildDao.java index 17729d0d..2ec80fe5 100644 --- a/web/src/main/java/com/jeesite/modules/test/dao/TestDataChildDao.java +++ b/web/src/main/java/com/jeesite/modules/test/dao/TestDataChildDao.java @@ -10,7 +10,7 @@ import com.jeesite.modules.test.entity.TestDataChild; /** * 测试数据DAO接口 * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @MyBatisDao public interface TestDataChildDao extends CrudDao { diff --git a/web/src/main/java/com/jeesite/modules/test/dao/TestDataDao.java b/web/src/main/java/com/jeesite/modules/test/dao/TestDataDao.java index aaa05da3..b2d65b48 100644 --- a/web/src/main/java/com/jeesite/modules/test/dao/TestDataDao.java +++ b/web/src/main/java/com/jeesite/modules/test/dao/TestDataDao.java @@ -10,7 +10,7 @@ import com.jeesite.modules.test.entity.TestData; /** * 测试数据DAO接口 * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @MyBatisDao public interface TestDataDao extends CrudDao { diff --git a/web/src/main/java/com/jeesite/modules/test/dao/TestTreeDao.java b/web/src/main/java/com/jeesite/modules/test/dao/TestTreeDao.java index bd0fd896..adeb9d5f 100644 --- a/web/src/main/java/com/jeesite/modules/test/dao/TestTreeDao.java +++ b/web/src/main/java/com/jeesite/modules/test/dao/TestTreeDao.java @@ -10,7 +10,7 @@ import com.jeesite.modules.test.entity.TestTree; /** * 测试树表DAO接口 * @author ThinkGem - * @version 2018-02-06 + * @version 2018-02-07 */ @MyBatisDao public interface TestTreeDao extends TreeDao { diff --git a/web/src/main/java/com/jeesite/modules/test/entity/TestData.java b/web/src/main/java/com/jeesite/modules/test/entity/TestData.java index b6e7fbe0..ab54f58d 100644 --- a/web/src/main/java/com/jeesite/modules/test/entity/TestData.java +++ b/web/src/main/java/com/jeesite/modules/test/entity/TestData.java @@ -22,7 +22,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType; /** * 测试数据Entity * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @Table(name="test_data", alias="a", columns={ @Column(name="id", attrName="id", label="编号", isPK=true), diff --git a/web/src/main/java/com/jeesite/modules/test/entity/TestDataChild.java b/web/src/main/java/com/jeesite/modules/test/entity/TestDataChild.java index 634016d1..be1ccb23 100644 --- a/web/src/main/java/com/jeesite/modules/test/entity/TestDataChild.java +++ b/web/src/main/java/com/jeesite/modules/test/entity/TestDataChild.java @@ -20,12 +20,12 @@ import com.jeesite.common.mybatis.mapper.query.QueryType; /** * 测试数据Entity * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @Table(name="test_data_child", alias="a", columns={ @Column(name="id", attrName="id", label="编号", isPK=true), @Column(name="test_sort", attrName="testSort", label="排序号"), - @Column(name="test_data_id", attrName="testDataId.id", label="父表主键"), + @Column(name="test_data_id", attrName="testData.id", label="父表主键"), @Column(name="test_input", attrName="testInput", label="单行文本", queryType=QueryType.LIKE), @Column(name="test_textarea", attrName="testTextarea", label="多行文本", queryType=QueryType.LIKE), @Column(name="test_select", attrName="testSelect", label="下拉框"), @@ -55,7 +55,7 @@ public class TestDataChild extends DataEntity { private static final long serialVersionUID = 1L; private Long testSort; // 排序号 - private TestData testDataId; // 父表主键 父类 + private TestData testData; // 父表主键 父类 private String testInput; // 单行文本 private String testTextarea; // 多行文本 private String testSelect; // 下拉框 @@ -74,8 +74,8 @@ public class TestDataChild extends DataEntity { } - public TestDataChild(TestData testDataId){ - this.testDataId = testDataId; + public TestDataChild(TestData testData){ + this.testData = testData; } public Long getTestSort() { @@ -87,12 +87,12 @@ public class TestDataChild extends DataEntity { } @Length(min=0, max=64, message="父表主键长度不能超过 64 个字符") - public TestData getTestDataId() { - return testDataId; + public TestData getTestData() { + return testData; } - public void setTestDataId(TestData testDataId) { - this.testDataId = testDataId; + public void setTestData(TestData testData) { + this.testData = testData; } @Length(min=0, max=200, message="单行文本长度不能超过 200 个字符") diff --git a/web/src/main/java/com/jeesite/modules/test/entity/TestTree.java b/web/src/main/java/com/jeesite/modules/test/entity/TestTree.java index aa6d0257..aa36f6e0 100644 --- a/web/src/main/java/com/jeesite/modules/test/entity/TestTree.java +++ b/web/src/main/java/com/jeesite/modules/test/entity/TestTree.java @@ -15,12 +15,12 @@ import com.jeesite.common.mybatis.mapper.query.QueryType; /** * 测试树表Entity * @author ThinkGem - * @version 2018-02-06 + * @version 2018-02-07 */ @Table(name="test_tree", alias="a", columns={ @Column(name="tree_code", attrName="treeCode", label="节点编码", isPK=true), @Column(includeEntity=TreeEntity.class), - @Column(name="tree_name", attrName="treeName", label="树节点名", queryType=QueryType.LIKE, isTreeName=true), + @Column(name="tree_name", attrName="treeName", label="节点名称", queryType=QueryType.LIKE, isTreeName=true), @Column(includeEntity=DataEntity.class), }, orderBy="a.tree_sorts, a.tree_code" ) @@ -28,7 +28,7 @@ public class TestTree extends TreeEntity { private static final long serialVersionUID = 1L; private String treeCode; // 节点编码 - private String treeName; // 树节点名 + private String treeName; // 节点名称 public TestTree() { this(null); @@ -54,8 +54,8 @@ public class TestTree extends TreeEntity { this.treeCode = treeCode; } - @NotBlank(message="树节点名不能为空") - @Length(min=0, max=200, message="树节点名长度不能超过 200 个字符") + @NotBlank(message="节点名称不能为空") + @Length(min=0, max=200, message="节点名称长度不能超过 200 个字符") public String getTreeName() { return treeName; } diff --git a/web/src/main/java/com/jeesite/modules/test/service/TestDataChildService.java b/web/src/main/java/com/jeesite/modules/test/service/TestDataChildService.java deleted file mode 100644 index 79b8ff7d..00000000 --- a/web/src/main/java/com/jeesite/modules/test/service/TestDataChildService.java +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - */ -package com.jeesite.modules.test.service; - -import java.util.List; - -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import com.jeesite.common.entity.Page; -import com.jeesite.common.service.CrudService; -import com.jeesite.modules.test.entity.TestDataChild; -import com.jeesite.modules.test.dao.TestDataChildDao; - -/** - * 测试子表Service - * @author ThinkGem - * @version 2018-01-31 - */ -@Service -@Transactional(readOnly=true) -public class TestDataChildService extends CrudService { - - /** - * 获取单条数据 - * @param testDataChild - * @return - */ - public TestDataChild get(TestDataChild testDataChild) { - return super.get(testDataChild); - } - - /** - * 查询分页数据 - * @param page 分页对象 - * @param testDataChild - * @return - */ - public Page findPage(Page page, TestDataChild testDataChild) { - return super.findPage(page, testDataChild); - } - - /** - * 保存数据(插入或更新) - * @param testDataChild - */ - @Transactional(readOnly=false) - public void save(TestDataChild testDataChild) { - super.save(testDataChild); - } - - /** - * 更新状态 - * @param testDataChild - */ - @Transactional(readOnly=false) - public void updateStatus(TestDataChild testDataChild) { - super.updateStatus(testDataChild); - } - - /** - * 删除数据 - * @param testDataChild - */ - @Transactional(readOnly=false) - public void delete(TestDataChild testDataChild) { - super.delete(testDataChild); - } - -} \ No newline at end of file diff --git a/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java b/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java index 21d44725..d396a0e8 100644 --- a/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java +++ b/web/src/main/java/com/jeesite/modules/test/service/TestDataService.java @@ -20,7 +20,7 @@ import com.jeesite.modules.test.dao.TestDataChildDao; /** * 测试数据Service * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @Service @Transactional(readOnly=true) @@ -68,7 +68,7 @@ public class TestDataService extends CrudService { // 保存 TestData子表 for (TestDataChild testDataChild : testData.getTestDataChildList()){ if (!TestDataChild.STATUS_DELETE.equals(testDataChild.getStatus())){ - testDataChild.setTestDataId(testData); + testDataChild.setTestData(testData); if (testDataChild.getIsNewRecord()){ testDataChild.preInsert(); testDataChildDao.insert(testDataChild); @@ -99,7 +99,7 @@ public class TestDataService extends CrudService { public void delete(TestData testData) { super.delete(testData); TestDataChild testDataChild = new TestDataChild(); - testDataChild.setTestDataId(testData); + testDataChild.setTestData(testData); testDataChildDao.delete(testDataChild); } diff --git a/web/src/main/java/com/jeesite/modules/test/service/TestTreeService.java b/web/src/main/java/com/jeesite/modules/test/service/TestTreeService.java index 2b5d3a8b..e112c8be 100644 --- a/web/src/main/java/com/jeesite/modules/test/service/TestTreeService.java +++ b/web/src/main/java/com/jeesite/modules/test/service/TestTreeService.java @@ -17,7 +17,7 @@ import com.jeesite.modules.file.utils.FileUploadUtils; /** * 测试树表Service * @author ThinkGem - * @version 2018-02-06 + * @version 2018-02-07 */ @Service @Transactional(readOnly=true) diff --git a/web/src/main/java/com/jeesite/modules/test/web/TestDataChildController.java b/web/src/main/java/com/jeesite/modules/test/web/TestDataChildController.java deleted file mode 100644 index eec31283..00000000 --- a/web/src/main/java/com/jeesite/modules/test/web/TestDataChildController.java +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - */ -package com.jeesite.modules.test.web; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.shiro.authz.annotation.RequiresPermissions; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; - -import com.jeesite.common.config.Global; -import com.jeesite.common.entity.Page; -import com.jeesite.common.web.BaseController; -import com.jeesite.modules.sys.utils.UserUtils; -import com.jeesite.modules.test.entity.TestDataChild; -import com.jeesite.modules.test.service.TestDataChildService; - -/** - * 测试子表Controller - * @author ThinkGem - * @version 2018-01-31 - */ -@Controller -@RequestMapping(value = "${adminPath}/test/testDataChild") -public class TestDataChildController extends BaseController { - - @Autowired - private TestDataChildService testDataChildService; - - /** - * 获取数据 - */ - @ModelAttribute - public TestDataChild get(String id, boolean isNewRecord) { - return testDataChildService.get(id, isNewRecord); - } - - /** - * 查询列表 - */ - @RequiresPermissions("test:testDataChild:view") - @RequestMapping(value = {"list", ""}) - public String list(TestDataChild testDataChild, Model model) { - model.addAttribute("testDataChild", testDataChild); - return "modules/test/testDataChildList"; - } - - /** - * 查询列表数据 - */ - @RequiresPermissions("test:testDataChild:view") - @RequestMapping(value = "listData") - @ResponseBody - public Page listData(TestDataChild testDataChild, HttpServletRequest request, HttpServletResponse response) { - Page page = testDataChildService.findPage(new Page(request, response), testDataChild); - return page; - } - - /** - * 查看编辑表单 - */ - @RequiresPermissions("test:testDataChild:view") - @RequestMapping(value = "form") - public String form(TestDataChild testDataChild, Model model) { - model.addAttribute("testDataChild", testDataChild); - return "modules/test/testDataChildForm"; - } - - /** - * 保存数据 - */ - @RequiresPermissions("test:testDataChild:edit") - @PostMapping(value = "save") - @ResponseBody - public String save(@Validated TestDataChild testDataChild) { - testDataChildService.save(testDataChild); - return renderResult(Global.TRUE, "保存数据成功!"); - } - - /** - * 删除数据 - */ - @RequiresPermissions("test:testDataChild:edit") - @RequestMapping(value = "delete") - @ResponseBody - public String delete(TestDataChild testDataChild) { - testDataChildService.delete(testDataChild); - return renderResult(Global.TRUE, "删除数据成功!"); - } - -} \ No newline at end of file diff --git a/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java b/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java index d7c656fd..4f38553b 100644 --- a/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java +++ b/web/src/main/java/com/jeesite/modules/test/web/TestDataController.java @@ -19,14 +19,13 @@ import org.springframework.web.bind.annotation.ResponseBody; import com.jeesite.common.config.Global; import com.jeesite.common.entity.Page; import com.jeesite.common.web.BaseController; -import com.jeesite.modules.sys.utils.UserUtils; import com.jeesite.modules.test.entity.TestData; import com.jeesite.modules.test.service.TestDataService; /** * 测试数据Controller * @author ThinkGem - * @version 2018-02-05 + * @version 2018-02-07 */ @Controller @RequestMapping(value = "${adminPath}/test/testData") diff --git a/web/src/main/java/com/jeesite/modules/test/web/TestTreeController.java b/web/src/main/java/com/jeesite/modules/test/web/TestTreeController.java index 16413fbb..42771711 100644 --- a/web/src/main/java/com/jeesite/modules/test/web/TestTreeController.java +++ b/web/src/main/java/com/jeesite/modules/test/web/TestTreeController.java @@ -29,7 +29,7 @@ import com.jeesite.modules.test.service.TestTreeService; /** * 测试树表Controller * @author ThinkGem - * @version 2018-02-06 + * @version 2018-02-07 */ @Controller @RequestMapping(value = "${adminPath}/test/testTree") diff --git a/web/src/main/resources/views/modules/test/testDataForm.html b/web/src/main/resources/views/modules/test/testDataForm.html index 32a39718..937691af 100644 --- a/web/src/main/resources/views/modules/test/testDataForm.html +++ b/web/src/main/resources/views/modules/test/testDataForm.html @@ -205,7 +205,7 @@ $("#testDataChildDataGrid").dataGrid({ {header:'状态', name:'status', editable:true, hidden:true}, {header:'主键', name:'id', editable:true, hidden:true}, {header:'排序号', name:'testSort', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'11', 'class':'form-control digits'}}, - {header:'父表主键', name:'testDataId.id', editable:true, hidden:true}, + {header:'父表主键', name:'testData.id', editable:true, hidden:true}, {header:'单行文本', name:'testInput', width:150, editable:true, edittype:'text', editoptions:{'maxlength':'200', 'class':'form-control'}}, {header:'多行文本', name:'testTextarea', width:150, editable:true, edittype:'textarea', editoptions:{'maxlength':'200', 'class':'form-control', 'rows':'1'}}, {header:'下拉框', name:'testSelect', width:100, @@ -317,7 +317,7 @@ $("#testDataChildDataGrid").dataGrid({ // 编辑表格的提交数据参数 editGridInputFormListName: 'testDataChildList', // 提交的数据列表名 - editGridInputFormListAttrs: 'status,id,testSort,testDataId.id,testInput,testTextarea,testSelect,testSelectMultiple,testRadio,testCheckbox,testDate,testDatetime,testUser.userCode,testOffice.officeCode,testAreaCode,testAreaName,', // 提交数据列表的属性字段 + editGridInputFormListAttrs: 'status,id,testSort,testData.id,testInput,testTextarea,testSelect,testSelectMultiple,testRadio,testCheckbox,testDate,testDatetime,testUser.userCode,testOffice.officeCode,testAreaCode,testAreaName,', // 提交数据列表的属性字段 // 加载成功后执行事件 ajaxSuccess: function(data){ diff --git a/web/src/main/resources/views/modules/test/testDataList.html b/web/src/main/resources/views/modules/test/testDataList.html index 13c0db8e..01654783 100644 --- a/web/src/main/resources/views/modules/test/testDataList.html +++ b/web/src/main/resources/views/modules/test/testDataList.html @@ -139,8 +139,8 @@ $('#dataGrid').dataGrid({ {header:'复选框', name:'testCheckbox', index:'a.test_checkbox', width:150, align:"center", formatter: function(val, obj, row, act){ return js.getDictLabel(${@DictUtils.getDictListJson('sys_menu_type')}, val, '未知', true); }}, - {header:'日期选择', name:'testDate', index:'a.test_date', width:150, align:"left"}, - {header:'日期时间', name:'testDatetime', index:'a.test_datetime', width:150, align:"left"}, + {header:'日期选择', name:'testDate', index:'a.test_date', width:150, align:"center"}, + {header:'日期时间', name:'testDatetime', index:'a.test_datetime', width:150, align:"center"}, {header:'用户选择', name:'testUser.userName', index:'a.test_user_code', width:150, align:"center"}, {header:'部门选择', name:'testOffice.officeName', index:'a.test_office_code', width:150, align:"center"}, {header:'区域选择', name:'testAreaName', index:'a.test_area_code', width:150, align:"center"}, @@ -148,7 +148,7 @@ $('#dataGrid').dataGrid({ {header:'状态', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){ return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '未知', true); }}, - {header:'创建时间', name:'createDate', index:'a.create_date', width:150, align:"left"}, + {header:'创建时间', name:'createDate', index:'a.create_date', width:150, align:"center"}, {header:'备注信息', name:'remarks', index:'a.remarks', width:150, align:"left"}, {header:'操作', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){ var actions = []; diff --git a/web/src/main/resources/views/modules/test/testTreeForm.html b/web/src/main/resources/views/modules/test/testTreeForm.html index e6d89217..4b12d354 100644 --- a/web/src/main/resources/views/modules/test/testTreeForm.html +++ b/web/src/main/resources/views/modules/test/testTreeForm.html @@ -51,7 +51,7 @@
+ * 节点名称:
<#form:input path="treeName" maxlength="200" class="form-control required"/>
diff --git a/web/src/main/resources/views/modules/test/testTreeList.html b/web/src/main/resources/views/modules/test/testTreeList.html index 3d54ffab..658892c2 100644 --- a/web/src/main/resources/views/modules/test/testTreeList.html +++ b/web/src/main/resources/views/modules/test/testTreeList.html @@ -19,7 +19,7 @@ <#form:form id="searchForm" model="${testTree}" action="${ctx}/test/testTree/listData" method="post" class="form-inline hide" data-page-no="${parameter.pageNo}" data-page-size="${parameter.pageSize}" data-order-by="${parameter.orderBy}">
- +
<#form:input path="treeName" maxlength="200" class="form-control width-120"/>
@@ -51,17 +51,15 @@ $('#dataGrid').dataGrid({ searchForm: $("#searchForm"), columnModel: [ - {header:'父级编号', name:'parentCode', index:'a.parent_code', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){ - return ''+(val||row.id)+''; + {header:'节点名称', name:'treeName', index:'a.tree_name', width:250, align:"left", frozen:true, formatter: function(val, obj, row, act){ + return '( '+row.treeCode+' ) '+''+(val||row.id)+''; }}, - {header:'所有父级编号', name:'parentCodes', index:'a.parent_codes', width:150, align:"left"}, - {header:'本级排序号', name:'treeSort', index:'a.tree_sort', width:150, align:"left"}, - {header:'全节点名', name:'treeNames', index:'a.tree_names', width:150, align:"left"}, - {header:'树节点名', name:'treeName', index:'a.tree_name', width:150, align:"left"}, + {header:'本级排序号', name:'treeSort', index:'a.tree_sort', width:150, align:"center"}, + {header:'节点名称', name:'treeName', index:'a.tree_name', width:150, align:"left"}, {header:'状态', name:'status', index:'a.status', width:150, align:"center", formatter: function(val, obj, row, act){ return js.getDictLabel(${@DictUtils.getDictListJson('sys_search_status')}, val, '未知', true); }}, - {header:'创建时间', name:'createDate', index:'a.create_date', width:150, align:"left"}, + {header:'创建时间', name:'createDate', index:'a.create_date', width:150, align:"center"}, {header:'备注信息', name:'remarks', index:'a.remarks', width:150, align:"left"}, {header:'操作', name:'actions', width:120, sortable:false, title:false, formatter: function(val, obj, row, act){ var actions = [];