保存地区

main
tamguo 7 years ago
parent 447e375427
commit e72109b2bb

@ -4,8 +4,11 @@ import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.annotations.TableName;
import com.tamguo.modules.sys.model.enums.SysAreaStatusEnum;
/** /**
@ -25,7 +28,10 @@ public class SysAreaEntity implements Serializable {
private String parentCode; private String parentCode;
private String parentCodes; private String parentCodes;
private String remarks; private String remarks;
private String status;
@JSONField(serialzeFeatures= SerializerFeature.WriteEnumUsingToString)
private SysAreaStatusEnum status;
private Boolean treeLeaf; private Boolean treeLeaf;
private BigDecimal treeLevel; private BigDecimal treeLevel;
private String treeNames; private String treeNames;
@ -101,14 +107,6 @@ public class SysAreaEntity implements Serializable {
this.remarks = remarks; this.remarks = remarks;
} }
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}
public BigDecimal getTreeLevel() { public BigDecimal getTreeLevel() {
return this.treeLevel; return this.treeLevel;
} }
@ -168,4 +166,12 @@ public class SysAreaEntity implements Serializable {
public void setTreeLeaf(Boolean treeLeaf) { public void setTreeLeaf(Boolean treeLeaf) {
this.treeLeaf = treeLeaf; this.treeLeaf = treeLeaf;
} }
public SysAreaStatusEnum getStatus() {
return status;
}
public void setStatus(SysAreaStatusEnum status) {
this.status = status;
}
} }

@ -0,0 +1,34 @@
package com.tamguo.modules.sys.model.enums;
import java.io.Serializable;
import com.baomidou.mybatisplus.enums.IEnum;
/**
*
*/
public enum SysAreaStatusEnum implements IEnum {
NORMAL("0", "正常"),
DELETE("1" , "删除"),
DISABLED("2" , "停用");
private String value;
private String desc;
SysAreaStatusEnum(final String value, final String desc) {
this.value = value;
this.desc = desc;
}
public Serializable getValue() {
return this.value;
}
public String getDesc(){
return this.desc;
}
@Override
public String toString() {
return this.value;
}
}

@ -13,4 +13,7 @@ public interface ISysAreaService extends IService<SysAreaEntity>{
JSONArray treeData(String excludeId); JSONArray treeData(String excludeId);
/** 保存地区*/
void save(SysAreaEntity area);
} }

@ -1,8 +1,11 @@
package com.tamguo.modules.sys.service.impl; package com.tamguo.modules.sys.service.impl;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
@ -11,8 +14,11 @@ import com.baomidou.mybatisplus.mapper.Condition;
import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.tamguo.modules.sys.dao.SysAreaMapper; import com.tamguo.modules.sys.dao.SysAreaMapper;
import com.tamguo.modules.sys.model.SysAreaEntity; import com.tamguo.modules.sys.model.SysAreaEntity;
import com.tamguo.modules.sys.model.SysOfficeEntity;
import com.tamguo.modules.sys.model.condition.SysAreaCondition; import com.tamguo.modules.sys.model.condition.SysAreaCondition;
import com.tamguo.modules.sys.model.enums.SysAreaStatusEnum;
import com.tamguo.modules.sys.service.ISysAreaService; import com.tamguo.modules.sys.service.ISysAreaService;
import com.tamguo.modules.sys.utils.ShiroUtils;
@Service @Service
public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysAreaEntity> implements ISysAreaService{ public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysAreaEntity> implements ISysAreaService{
@ -54,4 +60,52 @@ public class SysAreaServiceImpl extends ServiceImpl<SysAreaMapper, SysAreaEntity
} }
return null; return null;
} }
@Transactional(readOnly=false)
@Override
public void save(SysAreaEntity area) {
area.setCreateBy(ShiroUtils.getUserCode());
area.setCreateDate(new Date());
area.setUpdateBy(ShiroUtils.getUserCode());
area.setUpdateDate(new Date());
area.setStatus(SysAreaStatusEnum.NORMAL);
this.handleTreeData(area);
sysAreaMapper.insert(area);
}
// 处理树形结构
@SuppressWarnings("unchecked")
private SysAreaEntity handleTreeData(SysAreaEntity area) {
if(StringUtils.isEmpty(area.getParentCode())) {
area.setParentCode(SysOfficeEntity.ROOT_OFFICE_CODE);
area.setParentCodes(SysOfficeEntity.ROOT_OFFICE_CODE + SysOfficeEntity.TREE_CODE_OFFICE_SEPARATE);
area.setTreeLeaf(true);
area.setTreeLevel(new BigDecimal(0));
area.setTreeNames(area.getAreaName());
area.setTreeSorts(area.getTreeSort().multiply(new BigDecimal(10000000)).toString() + SysOfficeEntity.TREE_CODE_OFFICE_SEPARATE);
} else {
SysAreaEntity parentOffice = sysAreaMapper.selectById(area.getParentCode());
area.setParentCodes(parentOffice.getParentCodes() + parentOffice.getAreaCode() + SysOfficeEntity.TREE_CODE_OFFICE_SEPARATE);
area.setTreeLeaf(true);
area.setTreeLevel(parentOffice.getTreeLevel().add(new BigDecimal(1)));
area.setTreeNames(parentOffice.getTreeNames() + SysOfficeEntity.TREE_NAME_OFFICE_SEPARATE + parentOffice.getAreaName());
area.setTreeSorts(parentOffice.getTreeSorts() + area.getTreeSort().multiply(new BigDecimal(10000000)).toString() + SysOfficeEntity.TREE_CODE_OFFICE_SEPARATE);
if(parentOffice.getTreeLeaf()) {
parentOffice.setTreeLeaf(false);
sysAreaMapper.updateById(parentOffice);
}
}
Integer count = sysAreaMapper.selectCount(Condition.create().eq("parent_code", area.getAreaCode()));
if(count > 0) {
area.setTreeLeaf(false);
}else {
area.setTreeLeaf(true);
}
return area;
}
} }

@ -6,17 +6,21 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.tamguo.modules.sys.model.SysAreaEntity; import com.tamguo.modules.sys.model.SysAreaEntity;
import com.tamguo.modules.sys.model.condition.SysAreaCondition; import com.tamguo.modules.sys.model.condition.SysAreaCondition;
import com.tamguo.modules.sys.service.ISysAreaService; import com.tamguo.modules.sys.service.ISysAreaService;
import com.tamguo.modules.sys.utils.ExceptionSupport;
import com.tamguo.modules.sys.utils.Result;
@Controller @Controller
@RequestMapping(path="sys/area") @RequestMapping(path="sys/area")
public class SysAreaController { public class SysAreaController {
private final String AREA_INDEX_PAGE = "modules/sys/area/index"; private final String AREA_INDEX_PAGE = "modules/sys/area/index";
private final String AREA_ADD_PAGE = "modules/sys/area/add";
@Autowired @Autowired
private ISysAreaService iSysAreaService; private ISysAreaService iSysAreaService;
@ -27,6 +31,25 @@ public class SysAreaController {
return AREA_INDEX_PAGE; return AREA_INDEX_PAGE;
} }
@RequestMapping(path="add")
@ResponseBody
public ModelAndView add(String parentCode , ModelAndView model) {
model.setViewName(AREA_ADD_PAGE);
model.addObject("parentArea", iSysAreaService.selectById(parentCode));
return model;
}
@RequestMapping(path="save")
@ResponseBody
public Result save(SysAreaEntity area) {
try {
iSysAreaService.save(area);
return Result.result(0, null, "保存【"+area.getAreaName()+"】地区成功!");
} catch (Exception e) {
return ExceptionSupport.resolverResult("保存地区", this.getClass(), e);
}
}
@RequestMapping(path="listData",method=RequestMethod.POST) @RequestMapping(path="listData",method=RequestMethod.POST)
@ResponseBody @ResponseBody
public List<SysAreaEntity> listData(SysAreaCondition condition) { public List<SysAreaEntity> listData(SysAreaCondition condition) {

@ -0,0 +1,231 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta content="webkit" name="renderer"/><meta http-equiv="X-UA-Compatible"
content="IE=edge"><meta name="keywords" content="PoweredByJeeSiteV4.0"/><meta http-equiv="Cache-Control"
content="no-cache, no-store, must-revalidate"/><meta name="description" content="PoweredByJeeSiteV4.0"/><meta
content="no-cache" http-equiv="Pragma"/><meta http-equiv="Expires" content="0"/><meta
content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<title>行政区划 - JeeSite Demo</title>
<script th:src="${setting.domain + 'global.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-1.12.4.min.js'}"></script>
<script th:src="${setting.domain + 'jquery/jquery-migrate-1.4.1.min.js'}"></script>
<!--[if lt IE 9]><script src="/js/static/common/h5fix.min.js"></script><![endif]-->
<link rel="stylesheet" th:href="${setting.domain + 'fonts/font-icons.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'bootstrap/css/bootstrap.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'select2/4.0/select2.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'icheck/1.0/minimal/grey.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'adminlte/css/AdminLTE.min.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/jeesite.css'}">
<link rel="stylesheet" th:href="${setting.domain + 'common/common.css'}">
</head><body class="hold-transition ">
<div class="wrapper"><div class="main-content">
<div class="box box-main">
<div class="box-header">
<div class="box-title">
<i class="fa icon-map"></i> 新增区域
</div>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button>
</div>
</div>
<form id="inputForm" th:action="${setting.domain + 'sys/area/save'}" method="post" class="form-horizontal">
<div class="box-body">
<div class="form-unit">基本信息</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4">上级区域:</label>
<div class="col-sm-8">
<div class="input-group treeselect" id="parentDiv" th:attr="data-url='sys/area/treeData?excludeCode='">
<input id="parentCode" type="hidden" name="parentCode" th:value="${parentArea == null} ? '' : ${parentArea.areaCode}" class="isReset"/>
<input id="parentName" type="text" name="parentName" th:value="${parentArea == null} ? '' : ${parentArea.areaName}" class="form-control" readonly="readonly"/>
<span class="input-group-btn">
<a id="parentButton" href="javascript:" class="btn btn-default "><i class="fa fa-search"></i></a>
</span>
</div>
<script>
$("#parentButton,#parentName").click(function(){
if ($("#parentButton").hasClass("disabled")){
return true;
}
var options = {
type: 2,
maxmin: true,
shadeClose: true,
title: '上级区域',
area: ['300px', '400px'],
content: 'sys/treeselect',
contentFormData: {
url: $('#parentDiv').attr('data-url'),
checkbox: 'false',
expandLevel: '-1',
selectCodes: $("#parentCode").val(),
isReturnValue: 'false'
},
success: function(layero, index){
if ($(js.layer.window).width() < 300
|| $(js.layer.window).height() < 400){
js.layer.full(index);
}
},
btn: ['<i class="fa fa-check"></i> 确定'],
btn1: function(index, layero){
var win = js.layer.iframeWindow(index);
win.$('#keyword').val('').change(); var codes = [], names = [], nodes;
if ("false" == "true"){
nodes = win.tree.getCheckedNodes(true);
}else{
nodes = win.tree.getSelectedNodes();
}
for(var i=0; i<nodes.length; i++) {
var code = nodes[i]['false'=='true'?'value':'id'], name = nodes[i]['name'];
codes.push(code.replace(/^u_/g,''));
names.push(name.replace(/\([0-9]*\)/g,''));
break;
}
if(typeof treeselectCheck == 'function'){
if (!treeselectCheck('parent', nodes)){
return false;
}
}
$("#parentCode").val(codes.join(',')).change();
$("#parentName").val(names.join(',')).change();
try { $('#parentCode,#parentName').valid(); }catch(e){}
if(typeof treeselectCallback == 'function'){
treeselectCallback('parent', 'ok', index, layero, nodes);
}
}
};
options.btn.push('<i class="fa fa-eraser"></i> 清除');
options['btn'+options.btn.length] = function(index, layero){
$("#parentCode").val('').change();
$("#parentName").val('').change();
if(typeof treeselectCallback == 'function'){
treeselectCallback('parent', 'clear', index, layero);
}
};
options.btn.push('<i class="fa fa-close"></i> 关闭');
options['btn'+options.btn.length] = function(index, layero){
if(typeof treeselectCallback == 'function'){
treeselectCallback('parent', 'cancel', index, layero);
}
};
js.layer.open(options);
});
</script> </div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 区域代码:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<input type="hidden" id="isNewRecord" name="isNewRecord" value="true"/>
<input type="text" id="areaCode" name="areaCode" value="" maxlength="100" class="form-control required abc"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 区域名称:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<input type="text" id="areaName" name="areaName" value="" maxlength="100" class="form-control required "/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 区域类型:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<span id="areaType" class="icheck">
<label><input type="radio" id="areaType1" name="areaType"
value="0" blankOption="true" class="form-control required"> 国家</label><label><input type="radio" id="areaType2" name="areaType"
value="1" blankOption="true" class="form-control required"> 省份直辖市</label><label><input type="radio" id="areaType3" name="areaType"
value="2" blankOption="true" class="form-control required"> 地市</label><label><input type="radio" id="areaType4" name="areaType"
value="3" blankOption="true" class="form-control required"> 区县</label></span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<div class="form-group">
<label class="control-label col-sm-4" title="">
<span class="required ">*</span> 排序号:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<input type="text" id="treeSort" name="treeSort" value="" maxlength="10" class="form-control required digits"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="form-group">
<label class="control-label col-sm-2" title="">
<span class="required hide">*</span> 备注信息:<i class="fa icon-question hide"></i></label>
<div class="col-sm-8">
<textarea id="remarks" name="remarks" rows="4" maxlength="500" class="form-control "></textarea>
</div>
</div>
</div>
</div>
</div>
<div class="box-footer">
<div class="row">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-sm btn-primary" id="btnSubmit"><i class="fa fa-check"></i> 保 存</button>&nbsp;
<button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> 关 闭</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<a id="scroll-up" href="#" class="btn btn-sm"><i class="fa fa-angle-double-up"></i></a>
<script th:src="${setting.domain + 'bootstrap/js/bootstrap.min.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/select2.js'}"></script>
<script th:src="${setting.domain + 'select2/4.0/i18n/zh_CN.js'}"></script>
<script th:src="${setting.domain + 'layer/3.1/layer.js'}"></script>
<script th:src="${setting.domain + 'my97/WdatePicker.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/jquery.validate.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/localization/messages_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'jquery-validation/1.16/jquery.validate.extend.js'}"></script>
<script th:src="${setting.domain + 'common/jeesite.js'}"></script>
<script th:src="${setting.domain + 'common/i18n/jeesite_zh_CN.js'}"></script>
<script th:src="${setting.domain + 'common/common.js'}"></script>
<script>
$("#inputForm").validate({
submitHandler: function(form){
js.ajaxSubmitForm($(form), function(data){
js.showMessage(data.message);
if(data.code == 0){
js.closeCurrentTabPage(function(contentWindow){
contentWindow.$('#dataGrid').dataGrid('refreshTreeChildren',
$('#parentCode').val(), '820001');
});
}
}, "json");
}
});
//选择父级菜单回调方法
function treeselectCallback(id, act, index, layero){
if (id == 'parent' && (act == 'ok' || act == 'clear')){
// 创建并初始化下一个节点信息,如:排序号、默认值
$.get('sys/area/createNextNode?parentCode='
+$('#parentCode').val(), function(data){
$('#treeSort').val(data.treeSort);
});
}
}
</script>

@ -28,7 +28,7 @@ content="width=device-width, initial-scale=1, user-scalable=1" name="viewport"/>
<a href="#" class="btn btn-default" id="btnRefreshTree" title="刷新"><i class="fa fa-refresh"></i> 刷新</a> <a href="#" class="btn btn-default" id="btnRefreshTree" title="刷新"><i class="fa fa-refresh"></i> 刷新</a>
<a href="#" class="btn btn-default" id="btnExpandTreeNode" title="展开一级"><i class="fa fa-angle-double-down"></i> 展开</a> <a href="#" class="btn btn-default" id="btnExpandTreeNode" title="展开一级"><i class="fa fa-angle-double-down"></i> 展开</a>
<a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="折叠全部"><i class="fa fa-angle-double-up"></i> 折叠</a> <a href="#" class="btn btn-default" id="btnCollapseTreeNode" title="折叠全部"><i class="fa fa-angle-double-up"></i> 折叠</a>
<a href="/js/a/sys/area/form" class="btn btn-default btnTool" title="新增区域"><i class="fa fa-plus"></i> 新增</a> <a th:href="${setting.domain + 'sys/area/add'}" class="btn btn-default btnTool" title="新增区域"><i class="fa fa-plus"></i> 新增</a>
</div> </div>
</div> </div>
<div class="box-body"> <div class="box-body">
@ -102,7 +102,7 @@ $('#dataGrid').dataGrid({
actions.push('<a href="/js/a/sys/area/enable?areaCode='+row.areaCode+'" class="btnList" title="启用区域" data-confirm="确认要启用该区域吗?"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;'); actions.push('<a href="/js/a/sys/area/enable?areaCode='+row.areaCode+'" class="btnList" title="启用区域" data-confirm="确认要启用该区域吗?"><i class="glyphicon glyphicon-ok-circle"></i></a>&nbsp;');
} }
actions.push('<a href="/js/a/sys/area/delete?areaCode='+row.areaCode+'" class="btnList" title="删除区域" data-confirm="确认要删除该区域及所有子区域吗?" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a>&nbsp;'); actions.push('<a href="/js/a/sys/area/delete?areaCode='+row.areaCode+'" class="btnList" title="删除区域" data-confirm="确认要删除该区域及所有子区域吗?" data-deltreenode="'+row.id+'"><i class="fa fa-trash-o"></i></a>&nbsp;');
actions.push('<a href="/js/a/sys/area/form?parentCode='+row.id+'" class="btnList" title="新增下级区域"><i class="fa fa-plus-square"></i></a>&nbsp;'); actions.push('<a href="sys/area/add?parentCode='+row.id+'" class="btnList" title="新增下级区域"><i class="fa fa-plus-square"></i></a>&nbsp;');
return actions.join(''); return actions.join('');
}} }}
], ],

Loading…
Cancel
Save