EasyUI页面缓存三级地址联动例程
前台页面地址三级联动处理方式有很多,可以使用异步加载处理(参考https://blog.****.net/qixiang_chen/article/details/85214034),也可以将数据一次加载到客户端,在客户端实现三级联动处理。本例使用Easyui技术在前台实现缓存三级联动。系统架构如下图:
Maven父工程
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gf</groupId>
<artifactId>Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Parent</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
接口与实体类模块
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Parent</artifactId>
<groupId>com.gf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>CommonLib</artifactId>
<name>CommonLib</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
实体类与接口
AddressInfo.java
package com.gf.bean;
import java.io.Serializable;
public class AddressInfo implements Serializable{
private String code = null;
private String name = null;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
OrderInfo.java
package com.gf.bean;
import java.io.Serializable;
import java.sql.Date;
public class OrderInfo implements Serializable{
private Integer id = null;
private Date orderDt = null;
private String name = null;
private String price = null;
private String saleName = null;
private Integer relationId = null;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getOrderDt() {
return orderDt;
}
public void setOrderDt(Date orderDt) {
this.orderDt = orderDt;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getSaleName() {
return saleName;
}
public void setSaleName(String saleName) {
this.saleName = saleName;
}
public Integer getRelationId() {
return relationId;
}
public void setRelationId(Integer relationId) {
this.relationId = relationId;
}
}
RelationInfo.java
package com.gf.bean;
import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
public class RelationInfo implements Serializable{
private Integer id = null;
private String name = null;
private Date registerDt = null;
private String provinceCode = null;
private String cityCode = null;
private String countyCode = null;
private String asset = null;
private String telNo = null;
private String address = null;
private Integer state = 0;
private byte[] logo = null;
private List<UserInfo> users = new ArrayList<UserInfo>();
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getRegisterDt() {
return registerDt;
}
public void setRegisterDt(Date registerDt) {
this.registerDt = registerDt;
}
public String getProvinceCode() {
return provinceCode;
}
public void setProvinceCode(String provinceCode) {
this.provinceCode = provinceCode;
}
public String getCityCode() {
return cityCode;
}
public void setCityCode(String cityCode) {
this.cityCode = cityCode;
}
public String getCountyCode() {
return countyCode;
}
public void setCountyCode(String countyCode) {
this.countyCode = countyCode;
}
public String getAsset() {
return asset;
}
public void setAsset(String asset) {
this.asset = asset;
}
public String getTelNo() {
return telNo;
}
public void setTelNo(String telNo) {
this.telNo = telNo;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public byte[] getLogo() {
return logo;
}
public void setLogo(byte[] logo) {
this.logo = logo;
}
public List<UserInfo> getUsers() {
return users;
}
public void setUsers(List<UserInfo> users) {
this.users = users;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
}
UserInfo.java
package com.gf.bean;
import java.io.Serializable;
public class UserInfo implements Serializable{
private Integer id = null;
private String name = null;
private String provinceCode = null;
private String cityCode = null;
private String countyCode = null;
private String address = null;
private String qq = null;
private String email = null;
private String telNo = null;
private Integer relationId = null;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProvinceCode() {
return provinceCode;
}
public void setProvinceCode(String provinceCode) {
this.provinceCode = provinceCode;
}
public String getCityCode() {
return cityCode;
}
public void setCityCode(String cityCode) {
this.cityCode = cityCode;
}
public String getCountyCode() {
return countyCode;
}
public void setCountyCode(String countyCode) {
this.countyCode = countyCode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelNo() {
return telNo;
}
public void setTelNo(String telNo) {
this.telNo = telNo;
}
public Integer getRelationId() {
return relationId;
}
public void setRelationId(Integer relationId) {
this.relationId = relationId;
}
}
IRelationServer.java
package com.gf.service;
import java.sql.Date;
import java.util.List;
import java.util.Map;
import com.gf.bean.AddressInfo;
import com.gf.bean.OrderInfo;
import com.gf.bean.RelationInfo;
import com.gf.bean.UserInfo;
public interface IRelationService {
public Map find(Integer page, Integer row,
String province, String city, String county,
String name, Date startDt, Date endDt, String asset);
public void save(RelationInfo ri);
public RelationInfo getRelationById(Integer id);
public List<UserInfo> getUserByRelationId(Integer id);
public List<OrderInfo> getOrderByRelationId(Integer id);
public List<AddressInfo> getAddress();
public void saveRelation(RelationInfo ri);
}
服务模块
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Parent</artifactId>
<groupId>com.gf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Service</artifactId>
<name>Service</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.gf</groupId>
<artifactId>CommonLib</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.0.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
RelationMapper.java
package com.gf.mapper;
import java.sql.Date;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.gf.bean.AddressInfo;
import com.gf.bean.RelationInfo;
@Mapper
public interface RelationMapper {
public List<RelationInfo> find(@Param("provinceCode") String provinceCode,
@Param("cityCode") String cityCode,
@Param("countyCode") String countyCode,
@Param("name") String name,
@Param("startDt") Date startDt,
@Param("endDt") Date endDt,
@Param("asset") String asset);
public List<AddressInfo> getAddress();
public void saveRelation(RelationInfo ri);
}
RelationServiceImpl.java
package com.gf.service;
import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.gf.service.IRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gf.bean.AddressInfo;
import com.gf.bean.OrderInfo;
import com.gf.bean.RelationInfo;
import com.gf.bean.UserInfo;
import com.gf.mapper.RelationMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
@com.alibaba.dubbo.config.annotation.Service(interfaceClass= IRelationService.class)
@Service
public class RelationServiceImpl implements IRelationService{
@Autowired
private RelationMapper mapper;
@Override
public Map find(Integer page, Integer row, String province, String city, String county, String name,
Date startDt, Date endDt, String asset) {
PageHelper.startPage(page, row);
List<RelationInfo> lst = mapper.find(province, city, county,
name, startDt, endDt, asset);
System.out.println("list="+lst.size());
PageInfo pi = new PageInfo(lst);
Map m = new HashMap();
m.put("rows", pi.getList());
m.put("total", pi.getTotal());
return m;
}
@Override
public void save(RelationInfo ri) {
// TODO Auto-generated method stub
}
@Override
public RelationInfo getRelationById(Integer id) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<UserInfo> getUserByRelationId(Integer id) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<OrderInfo> getOrderByRelationId(Integer id) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<AddressInfo> getAddress() {
return mapper.getAddress();
}
@Override
public void saveRelation(RelationInfo ri) {
mapper.saveRelation(ri);
}
}
Server.java
package com.gf;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class Server
{
public static void main( String[] args )
{
SpringApplication.run(Server.class, args);
}
}
Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gf.mapper.RelationMapper">
<select id="find" resultType="com.gf.bean.RelationInfo">
select * from t_relation where provincecode=#{provinceCode} and
citycode=#{cityCode} and countycode=#{countyCode}
<if test="name != null">
and name like '%${name}%'
</if>
<if test="startDt != null">
and registerdt > #{startDt}
</if>
<if test="endDt != null">
and registerdt > #{endDt}
</if>
<if test="asset != null">
and asset = #{asset}
</if>
</select>
<select id="getAddress" resultType="com.gf.bean.AddressInfo">
select * from t_address
</select>
<insert id="saveRelation" parameterType="com.gf.bean.RelationInfo">
insert into t_relation(name,registerdt,provincecode,citycode,countycode,asset,telno,address,state)
values(#{name},#{registerDt},#{provinceCode},#{cityCode},#{countyCode},#{asset},#{telNo},#{address},#{state})
</insert>
</mapper>
SQL.txt
create database w3 character set utf8;
use w3;
charset gbk;
create table t_relation(id int auto_increment primary key,
name varchar(50),registerdt date,provincecode varchar(20),
citycode varchar(20),countycode varchar(20),asset varchar(20),
telno varchar(20),address varchar(50),logo blob);
insert into t_relation(name,registerdt,provincecode,citycode,countycode,
asset,telno,address,logo)
values('Java','2019-04-01','1000','1000','1000','20','131','China',null);
create table t_address(code varchar(10),name varchar(20));
insert into t_address(code,name) values('010000','北京');
insert into t_address(code,name) values('010100','海淀');
insert into t_address(code,name) values('010200','朝阳');
insert into t_address(code,name) values('010101','上地');
insert into t_address(code,name) values('010102','中关村');
insert into t_address(code,name) values('010201','四惠');
insert into t_address(code,name) values('010202','国贸');
insert into t_address(code,name) values('020000','河北');
insert into t_address(code,name) values('020100','石家庄');
insert into t_address(code,name) values('020101','青县');
insert into t_address(code,name) values('020103','涿州');
insert into t_address(code,name) values('020200','保定');
insert into t_address(code,name) values('020201','定州');
insert into t_address(code,name) values('020202','河间');
resources目录下application.properties
#SpringBoot服务端口配置
server.port=6060
server.context-path=/
#spring.resources.static-locations=/css,/images,/img,/js
#SpringMVC JSP目录配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#1.0.1
spring.dubbo.appname=relation-service
spring.dubbo.registry=zookeeper://localhost:2181
spring.dubbo.protocol=dubbo
spring.dubbo.port=20880
#Http编码配置
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
#Rabbitmq配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
#数据源配置
spring.datasource.name=w2
spring.datasource.url=jdbc:mysql://localhost:3306/w3?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
#Mybatis实体类配置
mybatis.mapper-locations=classpath:mapper/*.xml
#Solr配置
spring.data.solr.host=http://localhost:8984/solr/new_core2
#日志配置
logging.file=d:/springboot.log
logging.level.com=DEBUG
Web模块
POM.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Parent</artifactId>
<groupId>com.gf</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>WebApp</artifactId>
<packaging>war</packaging>
<name>WebApp Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>WebApp</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
RelationCtrl.java
package com.gf.ctl;
import java.sql.Date;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.dubbo.config.annotation.Reference;
import com.gf.bean.AddressInfo;
import com.gf.bean.RelationInfo;
import com.gf.bean.UserInfo;
import com.gf.service.IRelationService;
@Controller
public class RalationCtrl {
@Reference(timeout=5000)
private IRelationService serv;
@RequestMapping("/main")
public String main()
{
return "main";
}
@RequestMapping("/getaddress")
@ResponseBody
public List<AddressInfo> getaddress()
{
return serv.getAddress();
}
@RequestMapping("/find")
@ResponseBody
public Map find(Integer page, Integer rows, String province, String city, String county, String name,
String startDt, String endDt, String asset)
{
if(page == null)
page = 1;
if(rows == null)
rows = 4;
Date startDt2 = null;
if(startDt != null && !"".equals(startDt))
startDt2 = Date.valueOf(startDt);
Date endDt2 = null;
if(endDt != null && !"".equals(endDt))
endDt2 = Date.valueOf(endDt);
System.out.println("province="+province);
System.out.println("city="+city);
System.out.println("county="+county);
System.out.println("name="+name);
System.out.println("startDt2="+startDt2);
System.out.println("endDt2="+endDt2);
System.out.println("asset="+asset);
if("".equals(asset))
asset = null;
Map m = serv.find(page, rows, province, city, county, name, startDt2, endDt2, asset);
System.out.println("m="+m.get("total"));
return m;
}
@RequestMapping("/save")
@ResponseBody
public boolean save(RelationInfo ri,UserInfo ui,String uname)
{
System.out.println("ri.name="+ri.getName()+",registerDt="+ri.getRegisterDt());
System.out.println("ui.qq="+ui.getQq());
System.out.println("uname="+uname);
serv.saveRelation(ri);
return true;
}
}
StartWeb.java
package com.gf;
import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableDubboConfiguration
public class StartWeb {
public static void main(String[] args) {
SpringApplication.run(StartWeb.class, args);
}
}
resources目录下application.properties
#SpringBoot服务端口配置
server.port=6062
server.context-path=/
#spring.resources.static-locations=/css,/images,/img,/js
#SpringMVC JSP目录配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#1.0.1
spring.dubbo.appname=relation-web
spring.dubbo.registry=zookeeper://localhost:2181
spring.dubbo.protocol=dubbo
spring.dubbo.port=20880
#Http编码配置
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
#Rabbitmq配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
#数据源配置
spring.datasource.name=w2
spring.datasource.url=jdbc:mysql://localhost:3306/w3?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.maxActive=20
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
#Mybatis实体类配置
mybatis.mapper-locations=classpath:mapper/*.xml
#Solr配置
spring.data.solr.host=http://localhost:8984/solr/new_core2
#日志配置
logging.file=d:/springboot.log
logging.level.com=DEBUG
WEB-INF/jsp/main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="/easyui/themes/default/easyui.css"/>
<link rel="stylesheet" type="text/css" href="/easyui/themes/icon.css"/>
<script type="text/javascript" src="/easyui/jquery.min.js"></script>
<script type="text/javascript" src="/easyui/jquery.easyui.min.js"></script>
<script type="text/javascript" src="/easyui/easyui-lang-zh_CN.js"></script>
<script>
function getTitle(cellValue,rowObj,rowNo)
{
var html = '<div>';
if(rowObj.state == '0')
html=html+' <h4>'+rowObj.name+'<img src="/easyui/new.png"/></h4>';
else
html=html+' <h4>'+rowObj.name+'</h4>';
html=html+' <p>'+rowObj.asset+' '+rowObj.registerDt+'</p>';
html=html+' <p>'+rowObj.address+'</p>';
html=html+'</div>';
return html;
}
function showButton(cellValue,rowObj,rowNo)
{
var html = '<input type="button" value="详情"/>';
html = html + '<input type="button" value="新增"/>';
return html;
}
function doquery()
{
var province = $('#provinceCode1').combobox('getValue');
var city = $('#cityCode1').combobox('getValue');
var county = $('#countyCode1').combobox('getValue');
var name = $('#name').textbox('getValue');
var asset = $('#asset').combobox('getValue');
var startDt = $('#startDt').datebox('getValue');
var endDt = $('#endDt').datebox('getValue');
var url = 'province='+province+'&city='+city+'&county='+county;
url = url + '&name='+name+'&asset='+asset+'&startDt='+startDt+'&endDt='+endDt;
url = '/find?'+url;
$('#dg').datagrid({
url:url
})
}
function fillAddress(data,pname,cname,ctname)
{
var len = data.length;
var provinceData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.indexOf('0000')>0)
provinceData[provinceData.length]=data[i];
}
$('#'+pname).combobox('loadData',provinceData);
$('#'+pname).combobox('setValue',provinceData[0].code);
var selProvice = provinceData[0].code;
var cityData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(4,6)=='00' &&
data[i].code.substring(0,2) == selProvice.substring(0,2)
&& data[i].code !=selProvice )
cityData[cityData.length]=data[i];
}
$('#'+cname).combobox('loadData',cityData);
$('#'+cname).combobox('setValue',cityData[0].code);
var selCity = cityData[0].code;
var countyData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(0,4)==selCity.substring(0,4)
&& data[i].code !=selCity )
countyData[countyData.length]=data[i];
}
$('#'+ctname).combobox('loadData',countyData);
$('#'+ctname).combobox('setValue',countyData[0].code);
}
function selectProvice(record)
{
var data = addressObj;
var len = data.length;
var provinceData = [];
var selProvice = record.code;
var cityData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(4,6)=='00' &&
data[i].code.substring(0,2) == selProvice.substring(0,2)
&& data[i].code !=selProvice )
cityData[cityData.length]=data[i];
}
$('#cityCode').combobox('loadData',cityData);
$('#cityCode').combobox('setValue',cityData[0].code);
var selCity = cityData[0].code;
var countyData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(0,4)==selCity.substring(0,4)
&& data[i].code !=selCity )
countyData[countyData.length]=data[i];
}
$('#countyCode').combobox('loadData',countyData);
$('#countyCode').combobox('setValue',countyData[0].code);
}
function selectProvice1(record)
{
var data = addressObj;
var len = data.length;
var provinceData = [];
var selProvice = record.code;
var cityData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(4,6)=='00' &&
data[i].code.substring(0,2) == selProvice.substring(0,2)
&& data[i].code !=selProvice )
cityData[cityData.length]=data[i];
}
$('#cityCode1').combobox('loadData',cityData);
$('#cityCode1').combobox('setValue',cityData[0].code);
var selCity = cityData[0].code;
var countyData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(0,4)==selCity.substring(0,4)
&& data[i].code !=selCity )
countyData[countyData.length]=data[i];
}
$('#countyCode1').combobox('loadData',countyData);
$('#countyCode1').combobox('setValue',countyData[0].code);
}
function selectCity(record)
{
var data = addressObj;
var len = data.length;
var selCity = record.code;
var countyData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(0,4)==selCity.substring(0,4)
&& data[i].code !=selCity )
countyData[countyData.length]=data[i];
}
$('#countyCode').combobox('loadData',countyData);
$('#countyCode').combobox('setValue',countyData[0].code);
}
function selectCity1(record)
{
var data = addressObj;
var len = data.length;
var selCity = record.code;
var countyData = [];
for(var i=0;i<len;i++)
{
if(data[i].code.substring(0,4)==selCity.substring(0,4)
&& data[i].code !=selCity )
countyData[countyData.length]=data[i];
}
$('#countyCode1').combobox('loadData',countyData);
$('#countyCode1').combobox('setValue',countyData[0].code);
}
function doadd()
{
$('#win').window('open');
}
function dosave()
{
alert('dosave');
$('#frm').form({
url:'/save',
success:function(data){
alert(data);
$('#dg').datagrid('reload');
}
});
$('#frm').submit();
}
var addressObj = null;
$(document).ready(function(){
$.ajax({
url:'/getaddress',
success:function(data)
{
addressObj = data;
fillAddress(data,'provinceCode','cityCode','countyCode');
fillAddress(data,'provinceCode1','cityCode1','countyCode1');
}
});
$('#provinceCode').combobox({'onSelect':selectProvice});
$('#cityCode').combobox({'onSelect':selectCity});
$('#provinceCode1').combobox({'onSelect':selectProvice1});
$('#cityCode1').combobox({'onSelect':selectCity1});
var assetData=[{code:'20',name:'20万'},{code:'50',name:'50万'},{code:'100',name:'100万'}]
$('#asset').combobox('loadData',assetData);
$('#win').window('close');
})
</script>
</head>
<body class="easyui-layout">
<div data-options="region:'center',title:'CRM列表'" style="padding:5px;background:#eee;">
<table id="dg" class="easyui-datagrid" style="width:100%;height:250px"
data-options="url:'/find',singleSelect:true,toolbar:'#tb',pagination:true,pageSize:4,pageList:[4,8,16]">
<thead>
<tr>
<th data-options="field:'code',width:50">编号</th>
<th data-options="field:'logo',width:100">图标</th>
<th data-options="field:'title',width:500,formatter:getTitle">名称</th>
<th data-options="field:'cmd',formatter:showButton">操作</th>
<th data-options="field:'name',hidden:true">名称</th>
<th data-options="field:'registerDt',hidden:true">名称</th>
<th data-options="field:'asset',hidden:true">名称</th>
<th data-options="field:'telNo',hidden:true">名称</th>
<th data-options="field:'address',hidden:true">名称</th>
<th data-options="field:'state',hidden:true">名称</th>
</tr>
</thead>
</table>
<div id="tb">
<div>
<label>查询条件:</label>
<input id="provinceCode1" class="easyui-combobox" name="provinceCode1"
data-options="label:'区域',valueField:'code',textField:'name'" />
<input id="cityCode1" class="easyui-combobox" name="cityCode1"
data-options="valueField:'code',textField:'name'" />
<input id="countyCode1" class="easyui-combobox" name="countyCode1"
data-options="valueField:'code',textField:'name'" />
<input class="easyui-textbox" id="name" name="name" data-options="label:'线索名称'" style="width:300px">
</div>
<div>
<input id="asset" class="easyui-combobox" name="asset"
data-options="label:'注册资本',valueField:'code',textField:'name',url:'get_data.php'" />
</div>
<div>
<input id="startDt" type= "text" class= "easyui-datebox" data-options="label:'注册时间'"> </input>
<input id="endDt" type= "text" class= "easyui-datebox" data-options="label:'至'"> </input>
<a id="btn" "doquery()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">查询</a>
<a id="btn" "doadd()"class="easyui-linkbutton" data-options="iconCls:'icon-search'">新增</a>
</div>
</div>
<div id="win" class="easyui-window" title="新增" style="width:600px;height:500px"
data-options="iconCls:'icon-save',modal:true">
<div class="easyui-layout" data-options="fit:true">
<div data-options="region:'center'">
<form id="frm" method="post">
<div style="margin-left:50px;margin-top:30px">
<input class="easyui-textbox" id="name" name="name" data-options="label:'线索名称'" style="width:300px">
<input id="registerDt" name="registerDt" type= "text" class= "easyui-datebox" data-options="label:'注册时间'"> </input>
</div>
<div style="margin-left:50px;margin-top:30px">
<input id="asset" class="easyui-combobox" name="asset"
data-options="label:'注册资本',valueField:'code',textField:'name',url:'get_data.php'" />
</div>
<div style="margin-left:50px;margin-top:30px">
<input id="provinceCode" class="easyui-combobox" name="provinceCode"
data-options="label:'区域',valueField:'code',textField:'name'" />
<input id="cityCode" class="easyui-combobox" name="cityCode"
data-options="valueField:'code',textField:'name'" />
<input id="countyCode" class="easyui-combobox" name="countyCode"
data-options="valueField:'code',textField:'name'" />
</div>
<div style="margin-left:50px;margin-top:30px">
<h3>联系人</h3>
</div>
<div style="margin-left:50px;margin-top:30px">
<input id="uname" class="easyui-textbox" name="uname"
data-options="label:'联系人姓名'" />
<input id="telNo" class="easyui-textbox" name="telNo"
data-options="label:'联系人手机'" />
</div>
<div style="margin-left:50px;margin-top:30px">
<input id="qq" class="easyui-textbox" name="qq"
data-options="label:'QQ'" />
<input id="email" class="easyui-textbox" name="email"
data-options="label:'邮箱'" />
</div>
<div style="margin-left:50px;margin-top:30px">
<a id="savebtn" "dosave()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">保存</a>
<a id="closebtn" "doclose()" class="easyui-linkbutton" data-options="iconCls:'icon-search'">关闭</a>
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
前台页面效果
代码下载:
https://pan.baidu.com/s/1u2O6TMX1n_ERXwBqC9gtww
提取码 l9ug