package com.ruoyi.web.modules.industryservice.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.web.modules.industryservice.domain.BizYakDiseaseWarning;
import com.ruoyi.web.modules.industryservice.service.IBizYakDiseaseWarningService;

/**
 * 牦牛疾病预警（管理端）REST。
 * <p>
 * Base：{@code /dataModel/yakDiseaseWarning}；权限前缀 {@code dataModel:yakDiseaseWarning:*}。<br>
 * 本模块以<strong>查询 + 第三方同步</strong>为主，无手工增删改接口。<br>
 * 预警数据来源：拉取检疫/诊疗/养殖过程健康源 → 落库 → 本地规则分析写入 {@code biz_yak_disease_warning}。<br>
 * 草畜失衡已拆至独立表，不再使用本表 {@code warning_type=6}。
 * </p>
 */
@RestController
@RequestMapping("/dataModel/yakDiseaseWarning")
public class BizYakDiseaseWarningController extends BaseController
{
    @Autowired
    private IBizYakDiseaseWarningService bizYakDiseaseWarningService;

    /**
     * 分页列表。
     * <p>常用筛选：牧场、预警类型、预警日期 {@code startDate}/{@code endDate}（yyyy-MM-dd）。</p>
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakDiseaseWarning:list')")
    @GetMapping("/list")
    public TableDataInfo list(BizYakDiseaseWarning query)
    {
        startPage();
        List<BizYakDiseaseWarning> list = bizYakDiseaseWarningService.selectBizYakDiseaseWarningList(query);
        return getDataTable(list);
    }

    /**
     * 详情（只读）。
     * <p>若能按 {@code yakNo} 关联到牦牛档案，响应中附加 {@code yakAssetId}。</p>
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakDiseaseWarning:query')")
    @GetMapping("/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(bizYakDiseaseWarningService.selectBizYakDiseaseWarningById(id, null));
    }

    /**
     * 手动触发第三方健康源同步并分析生成预警。
     * <p>
     * 流程：检疫 → 诊疗 → 养殖过程落库 → 集中规则分析。<br>
     * 并发互斥：同步进行中再次调用会返回「正在同步，请稍候」。
     * </p>
     */
    @PreAuthorize("@ss.hasPermi('dataModel:yakDiseaseWarning:sync')")
    @Log(title = "牦牛疾病预警", businessType = BusinessType.OTHER)
    @PostMapping("/sync")
    public AjaxResult sync()
    {
        return success(bizYakDiseaseWarningService.syncFromThirdParty());
    }
}
