片区(WIP)
片区表:
T_JC_PQ -片区表 (住房、住户)
ID 主键 varchar(50) (主键、自增) (绝对不够吧喂)
PQBH 片区编号 varchar(50) (唯一)
PQMC 片区名称 varchar(200) (唯一)
ZXBZ 注销标志 varchar(2) (默认为0正常,1注销)
BZ 备注 varchar(500)
KZ1 扩展1
KZ2 扩展2
片区类:
**成员变量**
String
主键 ID
片区编号 pqbh
片区名称 pqmc
注销标志 zxbz
备注 bz
扩展1 kz1
扩展2 kz2
List<TJcPqJd> 片区街道 存入片区中的街道
**成员方法**
getter&&setter 方法
toString方法
片区查询:
排序:
在District.html script脚本栏配置项option中加入json语句
// 在script下添加
$(FUNCTION(){
var options = {
sortable: true // 启用排序
columns:[
{
field: 'districtCode',
title: '片区编号',
sortable: true // 开启排序
},
{
field: 'districtName',
title: '片区名称',
sortable: true // 开启排序
}
]
}
}
)
片区页面 – 片区编号与片区名称出现排序按钮
片区添加:
添加功能:
点击添加按钮后,弹出添加窗口。 在添加窗口中点击确认按钮后,会将数据用表单发给后端,由后端在数据库中添加数据
必填项标识:
在 label 中加入 is-required 标识
<label class="col-sm-3 control-label is-required">片区编号:</label>
<label class="col-sm-3 control-label is-required">片区名称:</label>
必填项校验:
在对应的文本框中加入 **required **标识
// 片区编号
<input id="districtCode" name="districtCode" class="form-control" type="text" required>
//片区名称
<input id="districtName" name="districtName" class="form-control" type="text" required>
重复校验:
controller 中创建新方法 用以表单编号与表单名称的重复校验
// 注解1 请求url
// 注解2 返回响应体给前端页面
@PostMapping("/checkDistrictCodeUnique")
@ResponseBody
public String checkDistrictCodeUnique(District district){
String back = districtService.checkDistrictCodeUnique(district.getId(),district.getDistrictCode());
return back;
}
@PostMapping("/checkDistrictNameUnique")
@ResponseBody
public String checkDistrictNameUnique(District district){
String back = districtService.checkDistrictNameUnique(district.getId(),district.getDistrictName());
return back;
}
service 将数据封装成 map<String[id] , String[Code]> 并传送给 mapper
@Override
public String checkDistrictNameUnique(String id, String districtName) {
if (id != null && id.length() != 0) {
}
else {
id = "1";
}
Map<String , String> map = new HashMap<String , String>();
map.put("id", id);
map.put("districtName", districtName);
int count = districtMapper.checkDistrictNameUnique(map);
if (count > 0){
return "1";
}
return "0";
}
mapper 将 service 传入的 DistrictCode / DistrictName 与数据库中的 District_Code / District_Name 进行比对,并返回匹配到数据数量 需要考虑 新增片区 与 修改片区 的不同情况。
-- id!=#{id}
-- 在新增片区时,#{id}为null,id一定匹配不上,会匹配所有数据
-- 在修改片区时,#{id}为需要回显的片区数据的id值,会被count忽略掉
-- district_Name=#{districtName}
-- 表单中的片区名称与数据库中的片区名称匹配时,count会+1
-- 最后一句为oracle语法 约定了不论有多少符合条件的数据
-- 只返回匹配到的数据里第一条符合条件的数据 在此例中可以删去
<select id="checkDistrictNameUnique" resultType="java.lang.Integer">
select count(1) from t_jc_pq_fl_1 where id != #{id} and district_Name=#{districtName} and rownum <![CDATA[ <= ]]> 1
</select>
在片区添加页面 add.html 中 脚本栏script 加入表单自定义校验(data? dataFilter?
https://doc.ruoyi.vip/ruoyi/document/qdsc.html#%E8%A1%A8%E5%8D%95%E6%A0%A1%E9%AA%8C
$("#form-District-add").validate({
//数据校验 Jquery实现
onkeyup: false,
rules:{
districtCode:{
minlength: 2,
maxlength: 20,
digits:true,
remote: {
//请求url 提交方式 数据类型
url: prefix + "/checkDistrictCodeUnique",
type: "post",
dataType: "json",
data: {
"id": function() {
return $("#id").val();
},
"districtCode": function() {
return $.common.trim($("#districtCode").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
},
districtName:{
remote: {
url: prefix + "/checkDistrictNameUnique",
type: "post",
dataType: "json",
//外部引入的数据,需要对应json中的变量名
data: {
"id": function() {
return $("#id").val();
},
"districtName": function() {
return $.common.trim($("#districtName").val());
}
},
dataFilter: function(data, type) {
return $.validate.unique(data);
}
}
}
},
messages: {
// 反馈给前端页面文本框中的信息
"districtCode": {
remote: "片区编号已经存在!"
},
"districtName": {
remote: "片区名称已经存在!"
}
},
focusCleanup: true
});
再打开页面,文本框失焦后调用对应方法,并将结果反馈给页面
片区修改:
暂无(代码工具生成
数据回显:
点击修改按钮后,弹出修改窗口,自动加载数据库中对应片区的数据,并预填进文本框
Controller:
//GET方法,请求url
//shiro权限标识
@GetMapping("/edit/{id}")
@RequiresPermissions("Estate:District:edit")
/**
* id 从url中获取要修改的片区主键
* mmap Thymeleaf的ModelMap 把对应id的片区传给Thymeleaf前端调用
*/
public String edit(@PathVariable("id") String id, ModelMap mmap)
{
// 调用Serivce中的根据id查找对应片区数据方法
District district = districtService.selectDistrictById(id);
mmap.put("district", district);
return "Estate/District/edit";
}
Service:
调用mapper中的方法查找到id对应的片区数据
Mapper:
<sql id="selectDistrictVo">
select id, district_code, district_name, delete_flag, bz, kz1, kz2 from t_jc_pq_fl_1
</sql>
<select id="selectDistrictById" parameterType="java.lang.String" resultMap="DistrictResult">
<include refid="selectDistrictVo"/>
where id = #{id}
</select>
前端页面:
<!-- 使用 th:field="*{变量名}" 将thymeleaf中的数据获取到表单中 -->
<input id="id" name="id" th:field="*{id}" type="hidden">
... ...
数据修改:
在修改窗口中点击确认后,将数据封装并提交给后端,由后端更新数据库中的数据
数据校验:
方法同本文中 片区添加 – 重复校验,可以使用控制器中的同一方法
片区删除:
暂无(街道功能还在开发中)
确认提示框:
点击删除按钮后,页面弹出提示框,是否确认删除该片区,并在用户操作后继续
判断可否删除:
若片区下包含街道,则事务回滚,不能删除该片区
Service:
// cnt计数变量
// 调用mapper检查片区下街道数量
// cnt不为0时,返回0给前端
// cnt为0是,调用mapper删除该片区
@Override
public int deleteDistrictByIds(String ids)
{
int cnt = districtMapper.checkDistrictEmpty(Convert.toStrArray(ids));
if(cnt>0) return 0;
return districtMapper.deleteDistrictByIds(Convert.toStrArray(ids));
}
Mapper:
-- foreach标签 --
-- id要从集合中获取的变量名 --
-- collection指定要遍历的集合数据类型 --
-- open语句起始 separator分隔符 close语句结尾
-- foreach 返回结果例:(1,2,3)
<select id="checkDistrictEmpty" resultType="java.lang.Integer">
select count(*) from t_jc_pq_fl_1 pq
join t_jc_pq_jd_fl jd
on pq.id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
and pq.DISTRICT_CODE = jd.DISTRICT_ID
</select>
片区条件查询:
能根据片区类的成员变量 条件查询对应的片区
暂无(代码工具生成