diff --git a/sql/rysqlite3.db b/sql/rysqlite3.db index e8cfea9..4e888e9 100644 Binary files a/sql/rysqlite3.db and b/sql/rysqlite3.db differ diff --git a/src/main/java/com/ruoyi/project/project/cases/controller/CaseController.java b/src/main/java/com/ruoyi/project/project/cases/controller/CaseController.java index 1bbc006..8e5b7e1 100644 --- a/src/main/java/com/ruoyi/project/project/cases/controller/CaseController.java +++ b/src/main/java/com/ruoyi/project/project/cases/controller/CaseController.java @@ -10,6 +10,7 @@ import com.ruoyi.project.project.cases.domain.Case; import com.ruoyi.project.project.cases.service.ICaseService; import com.ruoyi.project.project.item.domain.Item; import com.ruoyi.project.project.item.service.IItemService; +import com.ruoyi.project.project.util.ValidatorUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -32,6 +33,9 @@ public class CaseController extends BaseController @Autowired private ICaseService caseService; + @Autowired + private IItemService itemService; + @RequiresPermissions("system:case:view") @GetMapping() public String cases() @@ -70,6 +74,18 @@ public class CaseController extends BaseController @ResponseBody public AjaxResult addSave(Case cases) { + int i = caseService.selectCaseByCaseNo(cases.getCaseNo()); + if(i != 0){ + return error("案件编号重复,请检查!!!!"); + } + boolean phone = ValidatorUtils.isValidPhone(cases.getPhone()); + if (!phone){ + return error("手机号格式错误请检查,请检查!!!!"); + } + boolean userNo = ValidatorUtils.isValidIdCard(cases.getUserNo()); + if (!userNo){ + return error("身份证号格式错误请检查,请检查!!!!"); + } return toAjax(caseService.insertCase(cases)); } @@ -93,10 +109,10 @@ public class CaseController extends BaseController * 修改案件信息 */ @RequiresPermissions("system:case:edit") - @GetMapping("/edit/{caseNo}") - public String edit(@PathVariable("caseNo") String caseNo, ModelMap mmap) + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Integer id, ModelMap mmap) { - mmap.put("case", caseService.selectCaseById(caseNo)); + mmap.put("case", caseService.selectCaseById(id)); return prefix + "/edit"; } @@ -109,6 +125,14 @@ public class CaseController extends BaseController @ResponseBody public AjaxResult editSave(Case cases) { + boolean phone = ValidatorUtils.isValidPhone(cases.getPhone()); + if (!phone){ + return error("手机号格式错误请检查,请检查!!!!"); + } + boolean userNo = ValidatorUtils.isValidIdCard(cases.getUserNo()); + if (!userNo){ + return error("身份证号格式错误请检查,请检查!!!!"); + } return toAjax(caseService.updateCase(cases)); } @@ -121,6 +145,16 @@ public class CaseController extends BaseController @ResponseBody public AjaxResult remove(String ids) { + //查询是否有物品信息 + String[] idStr = ids.split(","); + for (String id : idStr) { + Case acase = caseService.selectCaseById(Integer.parseInt(id)); + int i = itemService.selectItemByCaseId(id); + if (i != 0){ + return error(acase.getCaseNo()+"案件中存在物品,请先删除物品!!!"); + } + } + return toAjax(caseService.deleteCaseByIds(ids)); } diff --git a/src/main/java/com/ruoyi/project/project/cases/domain/Case.java b/src/main/java/com/ruoyi/project/project/cases/domain/Case.java index 50347cd..3c3ed4c 100644 --- a/src/main/java/com/ruoyi/project/project/cases/domain/Case.java +++ b/src/main/java/com/ruoyi/project/project/cases/domain/Case.java @@ -19,6 +19,9 @@ public class Case extends BaseEntity { private static final long serialVersionUID = 1L; + /** 主键 */ + private Integer id; + /** 案件编号 */ private String caseNo; diff --git a/src/main/java/com/ruoyi/project/project/cases/mapper/CaseMapper.java b/src/main/java/com/ruoyi/project/project/cases/mapper/CaseMapper.java index 72350f9..336e656 100644 --- a/src/main/java/com/ruoyi/project/project/cases/mapper/CaseMapper.java +++ b/src/main/java/com/ruoyi/project/project/cases/mapper/CaseMapper.java @@ -14,10 +14,10 @@ public interface CaseMapper /** * 查询案件信息 * - * @param caseNo 案件编号 + * @param id * @return 案件信息 */ - public Case selectCaseById(String caseNo); + public Case selectCaseById(Integer id); /** * 查询案件列表 @@ -47,8 +47,10 @@ public interface CaseMapper /** * 批量删除案件 * - * @param caseNos 需要删除的数据ID + * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteCaseByIds(String[] caseNos); + public int deleteCaseByIds(Integer[] ids); + + int selectCaseByCaseNo(String caseNo); } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/project/cases/service/CaseServiceImpl.java b/src/main/java/com/ruoyi/project/project/cases/service/CaseServiceImpl.java index d35e65b..49b781d 100644 --- a/src/main/java/com/ruoyi/project/project/cases/service/CaseServiceImpl.java +++ b/src/main/java/com/ruoyi/project/project/cases/service/CaseServiceImpl.java @@ -24,13 +24,13 @@ public class CaseServiceImpl implements ICaseService /** * 查询案件信息 * - * @param caseNo 案件ID + * @param id 案件ID * @return 案件信息 */ @Override - public Case selectCaseById(String caseNo) + public Case selectCaseById(Integer id) { - return caseMapper.selectCaseById(caseNo); + return caseMapper.selectCaseById(id); } /** @@ -80,6 +80,11 @@ public class CaseServiceImpl implements ICaseService @Override public int deleteCaseByIds(String ids) { - return caseMapper.deleteCaseByIds(Convert.toStrArray(ids)); + return caseMapper.deleteCaseByIds(Convert.toIntArray(ids)); + } + + @Override + public int selectCaseByCaseNo(String caseNo) { + return caseMapper.selectCaseByCaseNo(caseNo); } } diff --git a/src/main/java/com/ruoyi/project/project/cases/service/ICaseService.java b/src/main/java/com/ruoyi/project/project/cases/service/ICaseService.java index 5879721..c355411 100644 --- a/src/main/java/com/ruoyi/project/project/cases/service/ICaseService.java +++ b/src/main/java/com/ruoyi/project/project/cases/service/ICaseService.java @@ -14,10 +14,10 @@ public interface ICaseService /** * 查询信息 * - * @param caseNo 案件ID + * @param id 案件ID * @return 案件信息 */ - public Case selectCaseById(String caseNo); + public Case selectCaseById(Integer id); /** * 查询案件列表 @@ -50,4 +50,6 @@ public interface ICaseService * @return 结果 */ public int deleteCaseByIds(String ids); + + int selectCaseByCaseNo(String caseNo); } diff --git a/src/main/java/com/ruoyi/project/project/item/controller/ItemController.java b/src/main/java/com/ruoyi/project/project/item/controller/ItemController.java index e676843..e8b867d 100644 --- a/src/main/java/com/ruoyi/project/project/item/controller/ItemController.java +++ b/src/main/java/com/ruoyi/project/project/item/controller/ItemController.java @@ -74,6 +74,10 @@ public class ItemController extends BaseController @ResponseBody public AjaxResult addSave(Item item) { + int i = itemService.selectItemByItemNo(item); + if (i != 0){ + return error("物品编号重复,请检查!!!"); + } return toAjax(itemService.insertItem(item)); } @@ -95,10 +99,10 @@ public class ItemController extends BaseController * 修改物品信息 */ @RequiresPermissions("system:case:edit") - @GetMapping("/edit/{itemNo}") - public String edit(@PathVariable("itemNo") String itemNo, ModelMap mmap) + @GetMapping("/edit/{id}") + public String edit(@PathVariable("id") Integer id, ModelMap mmap) { - mmap.put("item", itemService.selectItemById(itemNo)); + mmap.put("item", itemService.selectItemById(id)); return prefix + "/edit"; } @@ -111,6 +115,10 @@ public class ItemController extends BaseController @ResponseBody public AjaxResult editSave(Item item) { + int i = itemService.selectItemByItemNo(item); + if (i != 0){ + return error("物品编号重复,请检查!!!"); + } return toAjax(itemService.updateItem(item)); } diff --git a/src/main/java/com/ruoyi/project/project/item/domain/Item.java b/src/main/java/com/ruoyi/project/project/item/domain/Item.java index 0ce5b53..d803755 100644 --- a/src/main/java/com/ruoyi/project/project/item/domain/Item.java +++ b/src/main/java/com/ruoyi/project/project/item/domain/Item.java @@ -19,6 +19,9 @@ public class Item extends BaseEntity { private static final long serialVersionUID = 1L; + /** 主键 */ + private Integer id; + /** 案件编号 */ private String caseNo; diff --git a/src/main/java/com/ruoyi/project/project/item/mapper/ItemMapper.java b/src/main/java/com/ruoyi/project/project/item/mapper/ItemMapper.java index 46e6fae..2bf4e46 100644 --- a/src/main/java/com/ruoyi/project/project/item/mapper/ItemMapper.java +++ b/src/main/java/com/ruoyi/project/project/item/mapper/ItemMapper.java @@ -14,10 +14,10 @@ public interface ItemMapper /** * 查询物品信息 * - * @param itemNo 物品编号 + * @param id * @return 物品信息 */ - public Item selectItemById(String itemNo); + public Item selectItemById(Integer id); /** * 查询物品列表 @@ -49,8 +49,17 @@ public interface ItemMapper /** * 批量删除物品 * - * @param itemNos 需要删除的数据ID + * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteItemByIds(String[] itemNos); + public int deleteItemByIds(String[] ids); + + /** + * + * @param id + * @return + */ + public int selectItemByCaseId(String id); + + int selectItemByItemNo(Item item); } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/project/project/item/service/IItemService.java b/src/main/java/com/ruoyi/project/project/item/service/IItemService.java index 773713a..d0da26f 100644 --- a/src/main/java/com/ruoyi/project/project/item/service/IItemService.java +++ b/src/main/java/com/ruoyi/project/project/item/service/IItemService.java @@ -14,10 +14,10 @@ public interface IItemService /** * 查询信息 * - * @param itemNo 物品ID + * @param id 物品ID * @return 物品信息 */ - public Item selectItemById(String itemNo); + public Item selectItemById(Integer id); /** * 查询物品列表 @@ -52,4 +52,20 @@ public interface IItemService * @return 结果 */ public int deleteItemByIds(String ids); + + /** + * 根据案件查询是否有物品 + * @param id + * @return + */ + public int selectItemByCaseId(String id); + + /** + * + * @param item + * @return + */ + int selectItemByItemNo(Item item); + + } diff --git a/src/main/java/com/ruoyi/project/project/item/service/ItemServiceImpl.java b/src/main/java/com/ruoyi/project/project/item/service/ItemServiceImpl.java index c99a387..0dc22e7 100644 --- a/src/main/java/com/ruoyi/project/project/item/service/ItemServiceImpl.java +++ b/src/main/java/com/ruoyi/project/project/item/service/ItemServiceImpl.java @@ -22,13 +22,13 @@ public class ItemServiceImpl implements IItemService /** * 查询物品信息 * - * @param itemNo 物品ID + * @param id 物品ID * @return 物品信息 */ @Override - public Item selectItemById(String itemNo) + public Item selectItemById(Integer id) { - return itemMapper.selectItemById(itemNo); + return itemMapper.selectItemById(id); } /** @@ -85,4 +85,14 @@ public class ItemServiceImpl implements IItemService { return itemMapper.deleteItemByIds(Convert.toStrArray(ids)); } + + @Override + public int selectItemByCaseId(String id) { + return itemMapper.selectItemByCaseId(id); + } + + @Override + public int selectItemByItemNo(Item item) { + return itemMapper.selectItemByItemNo(item); + } } diff --git a/src/main/java/com/ruoyi/project/project/util/ValidatorUtils.java b/src/main/java/com/ruoyi/project/project/util/ValidatorUtils.java new file mode 100644 index 0000000..e75edc6 --- /dev/null +++ b/src/main/java/com/ruoyi/project/project/util/ValidatorUtils.java @@ -0,0 +1,72 @@ +package com.ruoyi.project.project.util; +import java.util.regex.Pattern; + +/** + * ClassName: ValidatorUtils + * Package: com.ruoyi.project.project.util + * Description: + * + * @Author zhaodw + * @Create 2025/7/11 17:08 + * @Version 1.0 + */ +public class ValidatorUtils { + // 手机号正则(中国大陆) + private static final Pattern PHONE_PATTERN = Pattern.compile( + "^1[3-9]\\d{9}$" + ); + + // 18位身份证号正则(包含校验码验证) + private static final Pattern ID_CARD_PATTERN = Pattern.compile( + "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[0-9Xx]$" + ); + + // 身份证号校验码权重因子 + private static final int[] WEIGHTS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; + + // 身份证号校验码对应表 + private static final char[] CHECK_CODES = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; + + /** + * 校验手机号格式 + * @param phone 手机号 + * @return 是否有效 + */ + public static boolean isValidPhone(String phone) { + if (phone == null || phone.isEmpty()) { + return false; + } + return PHONE_PATTERN.matcher(phone).matches(); + } + + /** + * 校验身份证号格式(包含校验码验证) + * @param idCard 身份证号 + * @return 是否有效 + */ + public static boolean isValidIdCard(String idCard) { + if (idCard == null || idCard.isEmpty()) { + return false; + } + + // 长度校验 + if (idCard.length() != 18) { + return false; + } + + // 格式校验 + if (!ID_CARD_PATTERN.matcher(idCard).matches()) { + return false; + } + + // 校验码验证 + char[] chars = idCard.toUpperCase().toCharArray(); + int sum = 0; + for (int i = 0; i < 17; i++) { + sum += (chars[i] - '0') * WEIGHTS[i]; + } + int mod = sum % 11; + return chars[17] == CHECK_CODES[mod]; + } + +} \ No newline at end of file diff --git a/src/main/resources/mybatis/project/CaseMapper.xml b/src/main/resources/mybatis/project/CaseMapper.xml index 5c6bac3..739ca6f 100644 --- a/src/main/resources/mybatis/project/CaseMapper.xml +++ b/src/main/resources/mybatis/project/CaseMapper.xml @@ -5,6 +5,7 @@ + @@ -19,13 +20,13 @@ - select case_no, name, user_no, sex, age, position, department, rank, phone, filing_time, creat_time + select id,case_no, name, user_no, sex, age, position, department, rank, phone, filing_time, creat_time from cases - - where case_no = #{caseNo} + where id = #{id} @@ -71,6 +73,7 @@ update cases + case_No = #{caseNo}, name = #{name}, user_no = #{userNo}, sex = #{sex}, @@ -81,14 +84,17 @@ phone = #{phone}, filing_time = #{filingTime} - where case_no = #{caseNo} + where id = #{id} - delete from cases where case_no in - - #{caseNo} + delete from cases where id in + + #{id} + \ No newline at end of file diff --git a/src/main/resources/mybatis/project/ItemMapper.xml b/src/main/resources/mybatis/project/ItemMapper.xml index ce75f71..dbeb4ad 100644 --- a/src/main/resources/mybatis/project/ItemMapper.xml +++ b/src/main/resources/mybatis/project/ItemMapper.xml @@ -5,6 +5,7 @@ + @@ -16,13 +17,13 @@ - select case_no, item_no, item_type, brand, number, price, source, creat_time + select id,case_no, item_no, item_type, brand, number, price, source, creat_time from item - - where item_no = #{itemNo} + where id = #{id} + select COUNT(*) from item where case_no = (SELECT case_no FROM cases where id = #{id}) + + \ No newline at end of file diff --git a/src/main/resources/templates/project/case/case.html b/src/main/resources/templates/project/case/case.html index 2d032e2..a146743 100644 --- a/src/main/resources/templates/project/case/case.html +++ b/src/main/resources/templates/project/case/case.html @@ -64,6 +64,11 @@ columns: [{ checkbox: true }, + { + field: 'id', + title: '主键', + visible: false + }, { field: 'caseNo', title: '案件编号', @@ -114,8 +119,8 @@ formatter: function(value, row, index) { var actions = []; actions.push('物品登记 '); - actions.push('编辑 '); - actions.push('删除'); + actions.push('编辑 '); + actions.push('删除'); return actions.join(''); } }] diff --git a/src/main/resources/templates/project/case/edit.html b/src/main/resources/templates/project/case/edit.html index 93b8c09..05cbd77 100644 --- a/src/main/resources/templates/project/case/edit.html +++ b/src/main/resources/templates/project/case/edit.html @@ -7,10 +7,11 @@
+
- +
diff --git a/src/main/resources/templates/project/item/edit.html b/src/main/resources/templates/project/item/edit.html index 43e3255..d484d61 100644 --- a/src/main/resources/templates/project/item/edit.html +++ b/src/main/resources/templates/project/item/edit.html @@ -7,6 +7,7 @@
+
diff --git a/src/main/resources/templates/project/item/item.html b/src/main/resources/templates/project/item/item.html index 97e7eb9..4451880 100644 --- a/src/main/resources/templates/project/item/item.html +++ b/src/main/resources/templates/project/item/item.html @@ -71,6 +71,11 @@ columns: [{ checkbox: true }, + { + field: 'id', + title: '主键', + visible: false + }, { field: 'caseNo', title: '案件编号', @@ -107,8 +112,8 @@ align: 'center', formatter: function(value, row, index) { var actions = []; - actions.push('编辑 '); - actions.push('删除'); + actions.push('编辑 '); + actions.push('删除'); return actions.join(''); } }]