package net.honren.material.action;
import net.honren.core.common.Constants;
import net.honren.data.VO.ZTreeVo;
import net.honren.material.domain.Attrcate;
import net.honren.material.domain.CarType;
import net.honren.material.service.CarTypeService;
import net.honren.sys.action.BaseAction;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
public class CarTypeAction extends BaseAction {
private CarTypeService carTypeService;
private CarType carType;
private Long id;
private String treeIds;
private String message;
private List<ZTreeVo> customList;
private List<Integer> carTypeIds = new ArrayList<Integer>();
private List<Long> ids = new ArrayList<Long>();
private Long checkId;
public String index() throws Exception {
return "index";
}
public String user() throws Exception {
return "user";
}
@Override
public String add() throws Exception { //添加子级
return "add";
}
@Override
public String list() throws Exception {
return null;
}
/**
* 车型用材搜索
* @return
* @throws Exception
*/
public String sc() throws Exception {
return "sc";
}
public Map responseJson = new HashMap();
public Map getResponseJson() {
return responseJson;
}
public void setResponseJson(Map responseJson) {
this.responseJson = responseJson;
}
public String getTree() throws IOException {
List<Attrcate> list = this.attrcateService.find("from Attrcate where id>1 order by weight");
this.getResponse().setCharacterEncoding("utf-8");
this.getResponse().setContentType("text/xml;charset=utf-8");
PrintWriter out = this.getResponse().getWriter();
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
out.println("<nodes>");
out.println("<node nodeId='1' parentId='-1' hrefAddress='attrcateshow.do?id=1'>全部属性</node>");
for(Attrcate a : list){ //hrefAddress='matecateinput.do?id=" + a.getId()
out.println("<node nodeId='" + a.getId() + "' parentId='" + a.getParentid() + "' hrefAddress='attrcateshow.do?id=" + a.getId() + "' code='" + a.getName() + "' unit='" + a.getName() + "' price='" + a.getName() + "' count='" + a.getId() + "'>" + a.getName() + "</node>");
}
out.println("</nodes>");
out.close();
return null;
}
public String tree() throws Exception
{
List<CarType> allList = new ArrayList<CarType>();
String root = null;
if(carType != null && carType.getType() == -1){
root = "车型";
allList = carTypeService.find(" from CarType where type != ? order by id ",-1);
}else{
root = "请选择";
allList = carTypeService.find(" from CarType where type = ? ",-1);
}
customList = new ArrayList<ZTreeVo>();
ZTreeVo zTree = new ZTreeVo();
zTree.setId(0L);
zTree.setpId(-1L);
zTree.setName(root);
zTree.setOpen(true);
customList.add(zTree);
for (CarType carType : allList) {
ZTreeVo zTreeVo = new ZTreeVo();
zTreeVo.setId(carType.getId());
zTreeVo.setpId(carType.getPid());
zTreeVo.setName(carType.getName());
customList.add(zTreeVo);
}
this.setCustomList(customList);
return "tree";
}
public String checkTree() throws Exception
{
getChild(id);
carTypeIds.add(0);
responseJson.put("carTypeIds",carTypeIds);
CarType carType = carTypeService.get(id);
responseJson.put("name",carType.getName());
responseJson.put("type",carType.getType());
this.setResponseJson(responseJson);
return "checkTree";
}
private List<CarType> getChild(Long id) {
List<CarType> cs = carTypeService.find(" from CarType where pid = ? ", id);
if(cs != null){
for (CarType c : cs){
carTypeIds.add(c.getType());
ids.add(c.getId());
getChild(c.getId());
}
}
return cs;
}
@Override
public String delete() throws Exception {
try {
if (!this.carTypeService.ishavechild(id)) {
this.carTypeService.deleteById(id);
msg.set(Constants.DELMSG, "carTypeadd.do");
return "msg";
} else {
msg.set("删除失败,请先删除子区域!", "carTypeshow.do?id=" + id);
return "msg";
}
} catch (Exception e) {
msg.set("删除失败,本条记录被关联,不能删除!", "carTypeshow.do?id=" + id);
return "msg";
}
}
@Override
public String input() throws Exception {
this.carType = this.carTypeService.get(id);
return "add";
}
public String show() throws Exception {
this.carType = this.carTypeService.get(id);
return "show";
}
public String manage() throws Exception {
return "manage";
}
public String material() throws Exception {
return "material";
}
@Override
public String save() throws Exception {
String[] treeIdArr = treeIds.split(",");
if(checkId != 0){//修改
//修改车型
CarType ct = carTypeService.get(checkId);
ct.setName(carType.getName());
ct.setType(carType.getType());
this.carTypeService.save(ct);
//update tree
getChild(checkId);
List <String> inputCollection = Arrays.asList(treeIdArr) ;
List <Integer> outputCollection = new ArrayList<Integer>() ;
CollectionUtils.collect(inputCollection,
new Transformer() {
public java.lang.Object transform(java.lang.Object input) {
return new Integer((String) input);
}
}, outputCollection);
//如果勾选的id在数据库中找不到则是添加
for (Integer carTypeId : outputCollection){
if(!carTypeIds.contains(carTypeId)){
CarType carType = carTypeService.get(carTypeId.longValue());
// CarType allList = carTypeService.findByTypeAndIds(" from CarType where type = ? and id in ( ? ) ", carType.getPid().intValue(), ids.toArray());
// System.out.println(allList);
}
}
//如果数据库中不存在勾选的id,则删除
for (Integer carTypeId : carTypeIds){
if(!outputCollection.contains(carTypeId)){
System.out.println("del===============carTypeId========="+carTypeId);
}
}
}else{
carType.setPid(0L);
carType.setTreeLevel(1);
this.carTypeService.save(carType);
id = carType.getId();//车型id
//保存总成
for (String treeId : treeIdArr){
CarType zcCarType = carTypeService.get(Long.valueOf(treeId));
CarType ct = new CarType();
ct.setName(zcCarType.getName());
if(zcCarType.getTreeLevel() == 2){
ct.setPid(carType.getId());
}else{
ct.setPid(id);
}
ct.setTreeLevel(zcCarType.getTreeLevel());
ct.setType(zcCarType.getId().intValue());
this.carTypeService.save(ct);
//如果下面有子节点
if(zcCarType.getTreeLevel() != 4 ){
id = ct.getId();//如果 生成id 让下一个使用
}
}
this.setMessage("添加成功!");
}
return "add";
}
@Override
protected void prepareModel() throws Exception {
// TODO Auto-generated method stub
}
public Object getModel() {
// TODO Auto-generated method stub
return null;
}
public CarTypeService getCarTypeService() {
return carTypeService;
}
public void setCarTypeService(CarTypeService carTypeService) {
this.carTypeService = carTypeService;
}
public CarType getCarType() {
return carType;
}
public void setCarType(CarType carType) {
this.carType = carType;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<ZTreeVo> getCustomList() {
return customList;
}
public void setCustomList(List<ZTreeVo> customList) {
this.customList = customList;
}
public String getTreeIds() {
return treeIds;
}
public void setTreeIds(String treeIds) {
this.treeIds = treeIds;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<Integer> getCarTypeIds() {
return carTypeIds;
}
public void setCarTypeIds(List<Integer> carTypeIds) {
this.carTypeIds = carTypeIds;
}
public Long getCheckId() {
return checkId;
}
public void setCheckId(Long checkId) {
this.checkId = checkId;
}
public List<Long> getIds() {
return ids;
}
public void setIds(List<Long> ids) {
this.ids = ids;
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>车型用材</title>
<link href="matmass/resources/css/carType.css" rel="stylesheet"
type="text/css" />
<link rel="stylesheet" href="csstree/zTreeStyle/zTreeStyle.css" type="text/css"/>
<link rel="stylesheet" href="csstree/demo.css" type="text/css"/>
<script src="/js/jquery-1.8.2.js" type="text/javascript"></script>
<script type="text/javascript" src="matmass/resources/js/public.js" ></script>
<script type="text/javascript" src="jstree/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="jstree/jquery.ztree.excheck-3.5.js"></script>
<style type="text/css">
<!--
.STYLE1 {
font-size: 12px;
color: #2a445e;
}
-->
</style>
</head>
<body>
<form method="post" name="pageform" action="carTypelist.do">
#parse("matmass/include/top.html")
<!-- 主体内容 -->
<div class="w home">
#parse("matmass/carType/carType_left.html")
<!-- 右侧 -->
<div class="body-right">
<!-- 数据核心项 -->
<div class="home-data-container_2">
<div class="ztree" id="ztree1" style="float:left;width:200px;height:200px;border-right:1px solid silver;">
</div>
<div style="float:left;padding: 10px;">
<input type="hidden" name="checkId" value="0"/>
车型 <input type="text" name="carType.name" style="margin-bottom: 10px;"/><br/>
车型种类
<input type="radio" style="margin: 10px;" value="1" name="carType.type"/>新开发
<input type="radio" value="2" name="carType.type" />量产
<input type="radio" value="3" name="carType.type" />停产
<input type="radio" value="4" name="carType.type" />竞品车
<div class="ztree" id="treeDemo" style="width:200px;"/>
</div>
<input type="button" οnclick="saveCarType()" value="保存"/>
</div>
</div>
</div>
</form>
</body>
</html>
#parse("matmass/include/foot.html")
<script language="javascript" src="matmass/resources/js/matmass.js"></script>
<script language="javascript">
function ShowCarTypeTree(val) {
var params = {
"carType.type": val
};
jQuery.ajax({
type: "post",
url: "carTypetree.do",
data:params,
dataType: "json",
cache: false,
success: function (data) {
var zNodes = data;
if(val ==-1){
var setting = {
data: {
simpleData: {
enable: true
}
},
callback: {
onClick: zTreeOnClick
}
};
jQuery.fn.zTree.init($("#ztree1"), setting, zNodes);
}else{
var setting = {
check: {
enable: true,
chkboxType: { "Y": "ps", "N": "ps" }
},
data: {
simpleData: {
enable: true
}
}
};
jQuery.fn.zTree.init($("#treeDemo"), setting, zNodes);
}
},
error: function (data) {
alert("数据加载失败!");
},
complete: function (data) {
}
});
}
jQuery(function(){
ShowCarTypeTree(-1);//显示车型的树
ShowCarTypeTree(1);//显示所有的树
})
function saveCarType(){
var treeObj = jQuery.fn.zTree.getZTreeObj("treeDemo"),
nodes = treeObj.getCheckedNodes(true),
v = "";
var v = new Array();
for (var i = 0; i < nodes.length; i++) {
if (nodes[i].name != '请选择') {
v.push(nodes[i].id);
}
}
var treeIds=v.join(",");
//获取选择树的id
var carTypeName = $("input[name ='carType.name']").val();
var carTypeType = $("input[name='carType.type']:checked").val();
var checkId = $("input[name ='checkId']").val();// 0修改 1 添加
var params = {
"carType.name": carTypeName,
"carType.type": carTypeType,
"treeIds": treeIds,
"checkId": checkId
};
jQuery.ajax({
type: "post",
url:"carTypesave.do",
data:params,// 要提交的表单
success: function(msg) {
ShowCarTypeTree(-1);
alert(msg);
}
});
}
function zTreeOnClick(event, treeId, treeNode) {
var id = treeNode.id;
if(id != 0){
//根据id ajax 去查询 勾选树
$("input[name ='checkId']").val(id);//修改
var params = {
"id": id
};
jQuery.ajax({
type: "post",
url:"carTypecheckTree.do",
data:params,// 要提交的表单
success: function(data) {
$("input[name ='carType.name']").val(data['name']);
$("input[name='carType.type'][value='"+data['type']+"']").attr("checked",true);
var strs = data['carTypeIds'];
var treeObj = jQuery.fn.zTree.getZTreeObj("treeDemo");
//选中模块和组后 加载已经有的权限
for( var i = 0; i < strs.length; i++ ) {
if(treeObj.getNodeByParam( "id",strs[i] )!=null){
treeObj.checkNode( treeObj.getNodeByParam( "id",strs[i] ), true );
}
}
}
});
}else{
ShowCarTypeTree(1);//显示所有的树
$("input[name ='checkId']").val(id);//添加
$("input[name ='carType.name']").val('');
$("input[name='carType.type']:eq(0)").attr("checked",'checked');//默认选中第一个
}
}
</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>车型用材</title>
<link href="matmass/resources/css/carType.css" rel="stylesheet"
type="text/css" />
<link rel="stylesheet" href="csstree/zTreeStyle/zTreeStyle.css" type="text/css"/>
<link rel="stylesheet" href="csstree/demo.css" type="text/css"/>
<script src="matmass/resources/js/jquery-1.4.4.min.js" type="text/javascript"></script>
<script type="text/javascript" src="matmass/resources/js/public.js" ></script>
<script type="text/javascript" src="jstree/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" src="jstree/jquery.ztree.excheck-3.5.js"></script>
<script type="text/javascript" src="jstree/jquery.ztree.exedit-3.5.js"></script>
<style type="text/css">
<!--
.STYLE1 {
font-size: 12px;
color: #2a445e;
}
-->
div#rMenu {position:absolute; visibility:hidden; top:0; text-align: left;padding: 2px;}
div#rMenu ul li{
margin: 1px 0;
padding: 0 5px;
cursor: pointer;
list-style: none outside none;
background-color: #DFDFDF;
}
</style>
</head>
<body>
<form method="post" name="pageform" action="carTypelist.do">
#parse("matmass/include/top.html")
<!-- 主体内容 -->
<div class="w home">
#parse("matmass/carType/carType_left.html")
<!-- 右侧 -->
<div class="body-right">
<!-- 数据核心项 -->
<div class="home-data-container_2">
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div>
</div>
<div id="rMenu">
<ul>
<li id="m_add" οnclick="addTreeNode();">增加节点</li>
<li id="m_del" οnclick="removeTreeNode();">删除节点</li>
<li id="m_check" οnclick="checkTreeNode(true);">Check节点</li>
<li id="m_unCheck" οnclick="checkTreeNode(false);">unCheck节点</li>
<li id="m_reset" οnclick="resetTree();">恢复zTree</li>
</ul>
</div>
</div>
</div>
</div>
<!--<DIV id="menuContent" class="menuContent" style="display:none; position: absolute;">-->
<!--<ul id="treeDemo" class="ztree" style="margin-top:0; width:255px; height: 300px;"></ul>-->
<!--</DIV>-->
</form>
</body>
</html>
#parse("matmass/include/foot.html")
<script language="javascript" src="matmass/resources/js/matmass.js"></script>
<script language="javascript">
<!--
var setting = {
view: {
dblClickExpand: false
},
callback: {
onRightClick: OnRightClick
},
check: {
enable: true,
chkboxType: { "Y": "ps", "N": "ps" }
},
data: {
simpleData: {
enable: true
}
}
};
var zNodes =[];
function OnRightClick(event, treeId, treeNode) {
if (!treeNode && event.target.tagName.toLowerCase() != "button" && jQuery(event.target).parents("a").length == 0) {
zTree.cancelSelectedNode();
showRMenu("root", event.clientX, event.clientY);
} else if (treeNode && !treeNode.noR) {
zTree.selectNode(treeNode);
showRMenu("node", event.clientX, event.clientY);
}
}
function showRMenu(type, x, y) {
jQuery("#rMenu ul").show();
if (type=="root") {
jQuery("#m_del").hide();
jQuery("#m_check").hide();
jQuery("#m_unCheck").hide();
} else {
jQuery("#m_del").show();
jQuery("#m_check").show();
jQuery("#m_unCheck").show();
}
rMenu.css({"top":y+"px", "left":x+"px", "visibility":"visible"});
jQuery("body").bind("mousedown", onBodyMouseDown);
}
function hideRMenu() {
if (rMenu) rMenu.css({"visibility": "hidden"});
jQuery("body").unbind("mousedown", onBodyMouseDown);
}
function onBodyMouseDown(event){
if (!(event.target.id == "rMenu" || jQuery(event.target).parents("#rMenu").length>0)) {
rMenu.css({"visibility" : "hidden"});
}
}
var addCount = 1;
function addTreeNode() {
hideRMenu();
var newNode = { name:"增加" + (addCount++)};
if (zTree.getSelectedNodes()[0]) {
newNode.checked = zTree.getSelectedNodes()[0].checked;
zTree.addNodes(zTree.getSelectedNodes()[0], newNode);
} else {
zTree.addNodes(null, newNode);
}
}
function removeTreeNode() {
hideRMenu();
var nodes = zTree.getSelectedNodes();
if (nodes && nodes.length>0) {
if (nodes[0].children && nodes[0].children.length > 0) {
var msg = "要删除的节点是父节点,如果删除将连同子节点一起删掉。\n\n请确认!";
if (confirm(msg)==true){
zTree.removeNode(nodes[0]);
}
} else {
zTree.removeNode(nodes[0]);
}
}
}
function checkTreeNode(checked) {
var nodes = zTree.getSelectedNodes();
if (nodes && nodes.length>0) {
zTree.checkNode(nodes[0], checked, true);
}
hideRMenu();
}
function resetTree() {
hideRMenu();
jQuery.fn.zTree.init(jQuery("#treeDemo"), setting, zNodes);
}
var zTree, rMenu;
jQuery(document).ready(function(){
zNodes = ShowCarTypeTree();
jQuery.fn.zTree.init(jQuery("#treeDemo"), setting, zNodes);
zTree = jQuery.fn.zTree.getZTreeObj("treeDemo");
rMenu = jQuery("#rMenu");
});
//-->
function ShowCarTypeTree() {
jQuery.ajax({
type: "post",
url: "carTypetree.do",
async : false,
dataType: "json",
cache: false,
success: function (data) {
zNodes = data;
},
error: function (data) {
alert("数据加载失败!");
}
});
return zNodes;
}
</script>
转载于:https://www.cnblogs.com/yaoyao66123/p/5735410.html