diff --git a/zhyc-admin/src/main/java/com/zhyc/web/controller/system/SysLoginController.java b/zhyc-admin/src/main/java/com/zhyc/web/controller/system/SysLoginController.java
index f3b318a..edfc953 100644
--- a/zhyc-admin/src/main/java/com/zhyc/web/controller/system/SysLoginController.java
+++ b/zhyc-admin/src/main/java/com/zhyc/web/controller/system/SysLoginController.java
@@ -51,7 +51,7 @@ public class SysLoginController
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
- loginBody.getUuid());
+ loginBody.getUuid(),loginBody.getFlag());
ajax.put(Constants.TOKEN, token);
return ajax;
}
diff --git a/zhyc-admin/src/main/resources/application.yml b/zhyc-admin/src/main/resources/application.yml
index 49cc5ba..641e1c3 100644
--- a/zhyc-admin/src/main/resources/application.yml
+++ b/zhyc-admin/src/main/resources/application.yml
@@ -99,7 +99,7 @@ token:
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期(默认30分钟)
- expireTime: 30
+ expireTime: 120
# MyBatis配置
mybatis:
diff --git a/zhyc-common/src/main/java/com/zhyc/common/core/domain/model/LoginBody.java b/zhyc-common/src/main/java/com/zhyc/common/core/domain/model/LoginBody.java
index fda8f5b..7de3fc6 100644
--- a/zhyc-common/src/main/java/com/zhyc/common/core/domain/model/LoginBody.java
+++ b/zhyc-common/src/main/java/com/zhyc/common/core/domain/model/LoginBody.java
@@ -26,6 +26,10 @@ public class LoginBody
* 唯一标识
*/
private String uuid;
+ /**
+ * 登录参数
+ */
+ private boolean flag;
public String getUsername()
{
@@ -66,4 +70,12 @@ public class LoginBody
{
this.uuid = uuid;
}
+
+ public boolean getFlag() {
+ return flag;
+ }
+
+ public void setFlag(boolean flag) {
+ this.flag = flag;
+ }
}
diff --git a/zhyc-common/src/main/resources/mapper/embryo/ScEmbryoFlushMapper.xml b/zhyc-common/src/main/resources/mapper/embryo/ScEmbryoFlushMapper.xml
new file mode 100644
index 0000000..448874e
--- /dev/null
+++ b/zhyc-common/src/main/resources/mapper/embryo/ScEmbryoFlushMapper.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, flush_time, donor_female_no, donor_male_no, grade_a_plus, grade_a, grade_b, grade_c, grade_d, cell_2_4, cell_8, cell_16, unfertilized, degenerated, transferred, recipient_cnt, embryo_type, embryo_source, destination, storage_method, flush_operator, collect_operator, remark, created_by, created_at from sc_embryo_flush
+
+
+
+
+
+
+
+ insert into sc_embryo_flush
+
+ flush_time,
+ donor_female_no,
+ donor_male_no,
+ grade_a_plus,
+ grade_a,
+ grade_b,
+ grade_c,
+ grade_d,
+ cell_2_4,
+ cell_8,
+ cell_16,
+ unfertilized,
+ degenerated,
+ transferred,
+ recipient_cnt,
+ embryo_type,
+ embryo_source,
+ destination,
+ storage_method,
+ flush_operator,
+ collect_operator,
+ remark,
+ created_by,
+ created_at,
+
+
+ #{flushTime},
+ #{donorFemaleNo},
+ #{donorMaleNo},
+ #{gradeAPlus},
+ #{gradeA},
+ #{gradeB},
+ #{gradeC},
+ #{gradeD},
+ #{cell24},
+ #{cell8},
+ #{cell16},
+ #{unfertilized},
+ #{degenerated},
+ #{transferred},
+ #{recipientCnt},
+ #{embryoType},
+ #{embryoSource},
+ #{destination},
+ #{storageMethod},
+ #{flushOperator},
+ #{collectOperator},
+ #{remark},
+ #{createdBy},
+ #{createdAt},
+
+
+
+
+ update sc_embryo_flush
+
+ flush_time = #{flushTime},
+ donor_female_no = #{donorFemaleNo},
+ donor_male_no = #{donorMaleNo},
+ grade_a_plus = #{gradeAPlus},
+ grade_a = #{gradeA},
+ grade_b = #{gradeB},
+ grade_c = #{gradeC},
+ grade_d = #{gradeD},
+ cell_2_4 = #{cell24},
+ cell_8 = #{cell8},
+ cell_16 = #{cell16},
+ unfertilized = #{unfertilized},
+ degenerated = #{degenerated},
+ transferred = #{transferred},
+ recipient_cnt = #{recipientCnt},
+ embryo_type = #{embryoType},
+ embryo_source = #{embryoSource},
+ destination = #{destination},
+ storage_method = #{storageMethod},
+ flush_operator = #{flushOperator},
+ collect_operator = #{collectOperator},
+ remark = #{remark},
+ created_by = #{createdBy},
+ created_at = #{createdAt},
+
+ where id = #{id}
+
+
+
+ delete from sc_embryo_flush where id = #{id}
+
+
+
+ delete from sc_embryo_flush where id in
+
+ #{id}
+
+
+
\ No newline at end of file
diff --git a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysLoginService.java b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysLoginService.java
index 854517f..581b332 100644
--- a/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysLoginService.java
+++ b/zhyc-framework/src/main/java/com/zhyc/framework/web/service/SysLoginService.java
@@ -54,17 +54,18 @@ public class SysLoginService
/**
* 登录验证
- *
+ *
* @param username 用户名
* @param password 密码
- * @param code 验证码
- * @param uuid 唯一标识
+ * @param code 验证码
+ * @param uuid 唯一标识
+ * @param flag 是否开启验证
* @return 结果
*/
- public String login(String username, String password, String code, String uuid)
+ public String login(String username, String password, String code, String uuid, boolean flag)
{
// 验证码校验
- validateCaptcha(username, code, uuid);
+ validateCaptcha(username, code, uuid,flag);
// 登录前置校验
loginPreCheck(username, password);
// 用户验证
@@ -106,12 +107,13 @@ public class SysLoginService
* @param username 用户名
* @param code 验证码
* @param uuid 唯一标识
+ * @param flag 是否进行验证码校验
* @return 结果
*/
- public void validateCaptcha(String username, String code, String uuid)
+ public void validateCaptcha(String username, String code, String uuid,boolean flag)
{
boolean captchaEnabled = configService.selectCaptchaEnabled();
- if (captchaEnabled)
+ if (captchaEnabled && !flag)
{
String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
String captcha = redisCache.getCacheObject(verifyKey);
diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java b/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java
index 6302bb3..6cd5a62 100644
--- a/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java
+++ b/zhyc-module/src/main/java/com/zhyc/module/base/controller/SheepFileController.java
@@ -13,7 +13,9 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* 羊只档案Controller
@@ -32,23 +34,155 @@ public class SheepFileController extends BaseController
* 查询羊只档案列表
*/
@PreAuthorize("@ss.hasPermi('sheep_file:sheep_file:list')")
- @GetMapping("/list")
- public TableDataInfo list(SheepFile sheepFile)
+ @PostMapping("/list") // 改为 POST 请求
+ public TableDataInfo list(@RequestBody(required = false) Map queryParams)
{
- startPage();
- List list = sheepFileService.selectSheepFileList(sheepFile);
+ // 解析查询参数
+ SheepFile sheepFile = new SheepFile();
+ Map customParams = new HashMap<>();
+
+ if (queryParams != null && !queryParams.isEmpty()) {
+ // 提取常规查询参数到 SheepFile 对象
+ if (queryParams.containsKey("bsManageTags") && queryParams.get("bsManageTags") != null) {
+ sheepFile.setBsManageTags(queryParams.get("bsManageTags").toString());
+ }
+ if (queryParams.containsKey("electronicTags") && queryParams.get("electronicTags") != null) {
+ sheepFile.setElectronicTags(queryParams.get("electronicTags").toString());
+ }
+ if (queryParams.containsKey("drRanch") && queryParams.get("drRanch") != null) {
+ sheepFile.setDrRanch(queryParams.get("drRanch").toString());
+ }
+ if (queryParams.containsKey("variety") && queryParams.get("variety") != null) {
+ sheepFile.setVariety(queryParams.get("variety").toString());
+ }
+ if (queryParams.containsKey("name") && queryParams.get("name") != null) {
+ sheepFile.setName(queryParams.get("name").toString());
+ }
+ if (queryParams.containsKey("gender") && queryParams.get("gender") != null) {
+ sheepFile.setGender(convertToLong(queryParams.get("gender")));
+ }
+ if (queryParams.containsKey("statusId") && queryParams.get("statusId") != null) {
+ sheepFile.setStatusId(convertToLong(queryParams.get("statusId")));
+ }
+ if (queryParams.containsKey("breed") && queryParams.get("breed") != null) {
+ sheepFile.setBreed(queryParams.get("breed").toString());
+ }
+
+ // 移除已经处理的参数,剩下的作为自定义筛选参数
+ // 注意:不直接修改原参数,而是复制到新Map中
+ for (Map.Entry entry : queryParams.entrySet()) {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+
+ // 跳过常规参数
+ if ("bsManageTags".equals(key) || "electronicTags".equals(key) ||
+ "drRanch".equals(key) || "variety".equals(key) ||
+ "name".equals(key) || "gender".equals(key) ||
+ "statusId".equals(key) || "breed".equals(key) ||
+ "pageNum".equals(key) || "pageSize".equals(key)) {
+ continue;
+ }
+
+ // 添加到自定义参数中
+ if (value != null) {
+ customParams.put(key, value);
+ }
+ }
+ }
+
+ startPage(); // 分页处理
+
+ // 调用支持复杂查询的Service方法
+ List list = sheepFileService.selectSheepFileListByCondition(customParams, sheepFile);
return getDataTable(list);
}
+ /**
+ * 转换对象为Long类型
+ */
+ private Long convertToLong(Object obj) {
+ if (obj == null) {
+ return null;
+ }
+ if (obj instanceof Long) {
+ return (Long) obj;
+ }
+ if (obj instanceof Integer) {
+ return ((Integer) obj).longValue();
+ }
+ if (obj instanceof String) {
+ try {
+ return Long.parseLong((String) obj);
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
/**
* 导出羊只档案列表
*/
@PreAuthorize("@ss.hasPermi('sheep_file:sheep_file:export')")
@Log(title = "羊只档案", businessType = BusinessType.EXPORT)
- @PostMapping("/export")
- public void export(HttpServletResponse response, SheepFile sheepFile)
+ @PostMapping("/export") // 改为 POST 请求
+ public void export(HttpServletResponse response, @RequestBody(required = false) Map queryParams)
{
- List list = sheepFileService.selectSheepFileList(sheepFile);
+ // 解析查询参数
+ SheepFile sheepFile = new SheepFile();
+ Map customParams = new HashMap<>();
+
+ if (queryParams != null && !queryParams.isEmpty()) {
+ // 提取常规查询参数到 SheepFile 对象
+ if (queryParams.containsKey("bsManageTags") && queryParams.get("bsManageTags") != null) {
+ sheepFile.setBsManageTags(queryParams.get("bsManageTags").toString());
+ }
+ if (queryParams.containsKey("electronicTags") && queryParams.get("electronicTags") != null) {
+ sheepFile.setElectronicTags(queryParams.get("electronicTags").toString());
+ }
+ if (queryParams.containsKey("drRanch") && queryParams.get("drRanch") != null) {
+ sheepFile.setDrRanch(queryParams.get("drRanch").toString());
+ }
+ if (queryParams.containsKey("variety") && queryParams.get("variety") != null) {
+ sheepFile.setVariety(queryParams.get("variety").toString());
+ }
+ if (queryParams.containsKey("name") && queryParams.get("name") != null) {
+ sheepFile.setName(queryParams.get("name").toString());
+ }
+ if (queryParams.containsKey("gender") && queryParams.get("gender") != null) {
+ sheepFile.setGender(convertToLong(queryParams.get("gender")));
+ }
+ if (queryParams.containsKey("statusId") && queryParams.get("statusId") != null) {
+ sheepFile.setStatusId(convertToLong(queryParams.get("statusId")));
+ }
+ if (queryParams.containsKey("breed") && queryParams.get("breed") != null) {
+ sheepFile.setBreed(queryParams.get("breed").toString());
+ }
+
+ // 提取自定义筛选参数
+ for (Map.Entry entry : queryParams.entrySet()) {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+
+ // 跳过常规参数和分页参数
+ if ("bsManageTags".equals(key) || "electronicTags".equals(key) ||
+ "drRanch".equals(key) || "variety".equals(key) ||
+ "name".equals(key) || "gender".equals(key) ||
+ "statusId".equals(key) || "breed".equals(key) ||
+ "pageNum".equals(key) || "pageSize".equals(key)) {
+ continue;
+ }
+
+ // 添加到自定义参数中
+ if (value != null) {
+ customParams.put(key, value);
+ }
+ }
+ }
+
+ // 调用支持复杂查询的Service方法获取数据(不分页)
+ List list = sheepFileService.selectSheepFileListByCondition(customParams, sheepFile);
+
ExcelUtil util = new ExcelUtil(SheepFile.class);
util.exportExcel(response, list, "羊只档案数据");
}
@@ -99,4 +233,45 @@ public class SheepFileController extends BaseController
return success(sheepFileService.countInGroup());
}
+ /**
+ * 新增API:获取字段的唯一值列表
+ *
+ * 这个API为前端自定义筛选功能提供数据支持
+ * 当用户选择某个字段进行筛选时,前端调用此接口获取该字段的所有可能值
+ *
+ * @param fieldName 字段名(数据库列名)
+ * @return AjaxResult 包含字段值列表的响应结果
+ *
+ * 接口地址:GET /sheep_file/sheep_file/field/{fieldName}
+ *
+ * 使用示例:
+ * 前端请求:GET /sheep_file/sheep_file/field/bs_manage_tags
+ * 后端返回:{ "code": 200, "msg": "操作成功", "data": ["AF00001", "AF00002", "AF00003"] }
+ *
+ * 安全说明:
+ * - 使用白名单机制防止SQL注入
+ * - 只有预定义的字段名可以被查询
+ */
+ @GetMapping("/field/{fieldName}")
+ public AjaxResult getFieldValues(@PathVariable String fieldName) {
+ try {
+ // 调用Service层获取字段唯一值
+ List fieldValues = sheepFileService.getFieldValues(fieldName);
+
+ // 返回成功响应,包含字段值列表
+ return AjaxResult.success("获取字段值成功", fieldValues);
+
+ } catch (IllegalArgumentException e) {
+ // 处理字段名不合法的异常
+ // 这种情况通常是因为前端传入了不在白名单中的字段名
+ return AjaxResult.error("请求的字段名不合法: " + e.getMessage());
+
+ } catch (Exception e) {
+ // 处理其他未知异常
+ // 记录日志并返回友好的错误信息
+ logger.error("获取字段值失败,字段名: " + fieldName, e);
+ return AjaxResult.error("系统错误,获取字段值失败");
+ }
+ }
+
}
diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java b/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java
index 460ab2d..bd85d0b 100644
--- a/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java
+++ b/zhyc-module/src/main/java/com/zhyc/module/base/domain/SheepFile.java
@@ -101,11 +101,20 @@ public class SheepFile extends BaseEntity
/** 断奶体重 */
@Excel(name = "断奶体重")
- private Long weaningWeight;
+ private Double weaningWeight;
/** 当前体重 */
@Excel(name = "当前体重")
- private Long currentWeight;
+ private Double currentWeight;
+
+
+ /** 断奶日龄 */
+ @Excel(name = "断奶日龄")
+ private Long weaningDayAge;
+
+ /** 断奶日增重 */
+ @Excel(name = "断奶日增重")
+ private Double weaningDailyGain;
/** 繁育状态id */
@Excel(name = "繁育状态id")
diff --git a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/SheepFileMapper.java b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/SheepFileMapper.java
index 9d4fc5a..1a95888 100644
--- a/zhyc-module/src/main/java/com/zhyc/module/base/mapper/SheepFileMapper.java
+++ b/zhyc-module/src/main/java/com/zhyc/module/base/mapper/SheepFileMapper.java
@@ -2,6 +2,7 @@ package com.zhyc.module.base.mapper;
import com.zhyc.module.base.domain.SheepFile;
import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@@ -58,6 +59,32 @@ public interface SheepFileMapper
List