第五天的内容

将省市区列表保存到数据库中t_dict_district  数据库中的parent表示父代码号是什么,就比如忻州依赖于山西,山西依赖于中国,code代表本身的代码号是多少。

@Data
@AllArgsConstructor
@NoArgsConstructor
public class District{
    private Integer id;
    private String parent;
    private String code;
    private String name;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        District district = (District) o;
        return Objects.equals(id, district.id) && Objects.equals(parent, district.parent) && Objects.equals(code, district.code) && Objects.equals(name, district.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, parent, code, name);
    }
}

 编写mapper层

public interface DistrictMapper {
    //根据用户的父代号进行查询
    List<District> findByParent(String parent);
    //根据本身的code来获取当前省市的名称
    String getNameByCode(String code);
}
<?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.cy.store.mapper.DistrictMapper">
    <select id="findByParent" resultType="com.cy.store.entity.District">
        select * from t_dict_district where parent=#{parent} order by code asc
    </select>
    <select id="getNameByCode" resultType="java.lang.String">
        select name from t_dict_district where code=#{code}
    </select>
</mapper>


编写service层

public interface IDistrictService {
    //根据父区域对应的代号查询区域的信息
    List<District> getByParent(String parent);
    //根据code查询对应的name
    String getNameByCode(String code);
}
@Service
public class IDistrictServiceImpl implements IDistrictService {
    @Autowired
    private DistrictMapper districtMapper;
    @Override
    public List<District> getByParent(String parent) {
        List<District> districts = districtMapper.findByParent(parent);
        /*在进行网络传输的时候,为了尽量避免无效数据的传递,可以将无效数据设置为null
        * 可以节省流量,另一方面提升了效率*/
        for (District d:districts){
            d.setId(null);
            d.setParent(null);
        }
        return districts;
    }

    @Override
    public String getNameByCode(String code) {
        String name = districtMapper.getNameByCode(code);
        return name;
    }
}

因为这个省市区是需要在地址中用到的,所以地址的业务逻辑层需要添加内容

//对省市区进行补全
        String provinceName = districtService.getNameByCode(address.getProvinceCode());
        String cityName = districtService.getNameByCode(address.getCityCode());
        String areaName = districtService.getNameByCode(address.getAreaCode());
        address.setUid(uid);
        Integer isDefault = count == 0 ? 1 : 0;
        address.setIsDefault(isDefault);
        address.setProvinceName(provinceName);
        address.setCityName(cityName);
        address.setAreaName(areaName);
        address.setCreatedUser(username);
        address.setCreatedTime(new Date());
        address.setModifiedUser(username);
        address.setModifiedTime(new Date());

编写controller层

@RequestMapping("districts")
@RestController
public class DistrictController extends BaseController{
    @Autowired
    private IDistrictService districtService;
    //写两个的话用大括号括起来
    @RequestMapping({"/",""})
    public JsonResult<List<District>> getByParent(String parent){
        List<District> data = districtService.getByParent(parent);
        return new JsonResult<>(OK,data);
    }
}

前端代码

let defaultOption = '<option value="0">---- 请选择 ----</option>';
		$(document).ready(function (){
			showProvinceList();
			//设置默认的请选择的值,作为控件的默认值
			$("#city-list").append(defaultOption);
			$("#area-list").append(defaultOption);
		})
		//省的下拉列表数据展示
		function showProvinceList(){
			$.ajax({
				url:"/districts/",
				dataType:"json",
				data:"parent=86",
				type:"post",
				success:function (data){
					if (data.state==200){
						let list = data.data;
						for (let i = 0 ; i < list.length;i++){
							let opt = "<option value='"+list[i].code+"'>"+list[i].name+"</option>";
							$("#province-list").append(opt);
						}
					}else{
						alert("省/直辖市加载失败")
					}
				},
				error:function (data){
					alert("产生未知错误"+data.status)
				}
			})
		}
		//监听某个值发生改变-此时需要根据用户点的省份来加载对应的市区
		//所以需要监听用户是否点击省份
		$("#province-list").change(function (){
			//先获取省的父代码
			let parent = $("#province-list").val();
			$("#city-list").empty();
			$("#city-list").append(defaultOption);
			if (parent == 0){
				return;
			}
			$.ajax({
				url:"/districts/",
				dataType:"json",
				data:"parent="+parent,
				type:"get",
				success:function (data){
					if (data.state==200){
						let list = data.data;
						for (let i = 0 ; i < list.length;i++){
							let opt = "<option value='"+list[i].code+"'>"+list[i].name+"</option>";
							$("#city-list").append(opt);
						}
					}else{
						alert("市加载失败")
					}
				},
				error:function (data){
					alert("产生未知错误"+data.status)
				}
			})
		})
		$("#city-list").change(function (){
			//先获取省的父代码
			let parent = $("#city-list").val();
			$("#area-list").empty();
			$("#area-list").append(defaultOption);
			if (parent == 0){
				return;
			}
			$.ajax({
				url:"/districts/",
				dataType:"json",
				data:"parent="+parent,
				type:"get",
				success:function (data){
					if (data.state==200){
						let list = data.data;
						for (let i = 0 ; i < list.length;i++){
							let opt = "<option value='"+list[i].code+"'>"+list[i].name+"</option>";
							$("#area-list").append(opt);
						}
					}else{
						alert("区加载失败")
					}
				},
				error:function (data){
					alert("产生未知错误"+data.status)
				}
			})
		})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值