chore: 同步本地 v9 整改与运营能力

This commit is contained in:
weijuesen
2026-08-17 21:43:26 +08:00
parent 9a426039b7
commit d205d4845b
58 changed files with 4042 additions and 115 deletions
+49 -2
View File
@@ -36,7 +36,7 @@ func RegisterDetectionTaskRoutes(rg *gin.RouterGroup, db *gorm.DB) {
func listDetectionTasks(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
q := db.Model(&model.DetectionTask{})
q := applyRoomScope(db.Model(&model.DetectionTask{}), c, "room_id")
if status := c.Query("status"); status != "" {
q = q.Where("status = ?", status)
}
@@ -55,6 +55,9 @@ func listDetectionTasks(db *gorm.DB) gin.HandlerFunc {
func getDetectionTask(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "detection_task", c.Param("id")) {
return
}
var task model.DetectionTask
if db.Where("id = ?", c.Param("id")).First(&task).Error != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "detection task not found"})
@@ -98,6 +101,16 @@ func createDetectionTask(db *gorm.DB) gin.HandlerFunc {
return
}
}
if body.RoomID != nil && !canAccessRoom(db, c, body.RoomID) {
c.JSON(http.StatusForbidden, gin.H{"error": "无权在该蚕房下创建检测任务"})
return
}
if body.BatchID != nil && !requireObjectAccess(c, db, "batch", *body.BatchID) {
return
}
if body.InspectionID != nil && !requireObjectAccess(c, db, "inspection", *body.InspectionID) {
return
}
sourceKey := body.SourceKey
if sourceKey == "" {
sourceKey = fmt.Sprintf("manual-%d", time.Now().UnixNano())
@@ -141,6 +154,9 @@ func createDetectionTask(db *gorm.DB) gin.HandlerFunc {
func updateDetectionTask(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "detection_task", c.Param("id")) {
return
}
var task model.DetectionTask
if db.Where("id = ?", c.Param("id")).First(&task).Error != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "detection task not found"})
@@ -220,6 +236,9 @@ func updateDetectionTask(db *gorm.DB) gin.HandlerFunc {
func listSamples(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "detection_task", c.Param("id")) {
return
}
var samples []model.Sample
db.Where("detection_task_id = ?", c.Param("id")).Order("created_at ASC").Find(&samples)
c.JSON(http.StatusOK, samples)
@@ -228,6 +247,9 @@ func listSamples(db *gorm.DB) gin.HandlerFunc {
func createSample(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "detection_task", c.Param("id")) {
return
}
var task model.DetectionTask
if db.Where("id = ?", c.Param("id")).First(&task).Error != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "detection task not found"})
@@ -281,6 +303,9 @@ func createSample(db *gorm.DB) gin.HandlerFunc {
func updateSample(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "sample", c.Param("id")) {
return
}
var sample model.Sample
if db.Where("id = ?", c.Param("id")).First(&sample).Error != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "sample not found"})
@@ -335,7 +360,7 @@ func updateSample(db *gorm.DB) gin.HandlerFunc {
func listDiseaseEvents(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
q := db.Model(&model.DiseaseEvent{})
q := applyRoomScope(db.Model(&model.DiseaseEvent{}), c, "room_id")
if status := c.Query("status"); status != "" {
q = q.Where("status = ?", status)
}
@@ -380,6 +405,25 @@ func createDiseaseEvent(db *gorm.DB) gin.HandlerFunc {
return
}
}
if body.RoomID != nil && !canAccessRoom(db, c, body.RoomID) {
c.JSON(http.StatusForbidden, gin.H{"error": "无权在该蚕房下创建发病事件"})
return
}
if body.BatchID != nil && !requireObjectAccess(c, db, "batch", *body.BatchID) {
return
}
if body.DetectionTaskID != nil && !requireObjectAccess(c, db, "detection_task", *body.DetectionTaskID) {
return
}
if body.LampTestID != nil && !requireObjectAccess(c, db, "lamp_test", *body.LampTestID) {
return
}
if body.ConsultationID != nil && !requireObjectAccess(c, db, "consultation", *body.ConsultationID) {
return
}
if body.InspectionID != nil && !requireObjectAccess(c, db, "inspection", *body.InspectionID) {
return
}
if body.Status == "" {
body.Status = "suspected"
}
@@ -429,6 +473,9 @@ func createDiseaseEvent(db *gorm.DB) gin.HandlerFunc {
func updateDiseaseEvent(db *gorm.DB) gin.HandlerFunc {
return func(c *gin.Context) {
if !requireObjectAccess(c, db, "disease_event", c.Param("id")) {
return
}
var event model.DiseaseEvent
if db.Where("id = ?", c.Param("id")).First(&event).Error != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "disease event not found"})