/*
 * @description: 安全巡检审批相关
 * @Author: LanJianRong
 * @Date: 2020-12-18
 * @FilePath: \construction_management\web\api\safe_rpc_api.go
 */

package api

import (
	"fmt"

	"github.com/kataras/iris/v12"
	"go.mod/services"
	"go.mod/web/utils"
)

type SafeAuditApi struct {
	//框架-web应用上下文环境
	Ctx iris.Context
	// 需要用的service
	SafeAuditService services.SafeAuditService
}

// @Summary 添加审批流程
// @Tags 安全巡检-审批
// @Description 增加审批人进审批流程
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   safe_id     body    string     true        "质量巡检id"
// @Param   bidsection_id     body    string     true        "标段id"
// @Param   times     body    string     true        "审批次数"
// @Param   audit_id     body    string     true        "审批人id"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/safe_audit/add [post]
func (c *SafeAuditApi) PostAdd() {
	// 1.规则验证
	safeAuditData, err := c.SafeAuditService.ValidRule(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	bidsectionId, err := utils.GetDecryptId(safeAuditData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}

	auditId, err := utils.GetDecryptId(safeAuditData.AuditId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	safeId, err := utils.GetDecryptId(safeAuditData.SafeId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	err = c.SafeAuditService.AddAuditor(safeId, bidsectionId, auditId, safeAuditData.Times)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "插入成功",
	})
}

// @Summary 开始审批
// @Tags 安全巡检-审批
// @Description 开始审批
// @Accept  json
// @Produce  json
// @Security ApiKeyAuth
// @Param   safe_id     body    string     true        "质量巡检id"
// @Param   bidsection_id     body    string     true        "标段id"
// @Param   auditors     body    array     true        "审核组"
// @Param   reAuditors     body    array     true        "复查组"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/safe_audit/start [post]
func (c *SafeAuditApi) PostStart() {
	// 1.规则验证
	safeAuditData, err := c.SafeAuditService.ValidStart(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	bidsectionId, err := utils.GetDecryptId(safeAuditData.BidsectionId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	safeId, err := utils.GetDecryptId(safeAuditData.SafeId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	var auditors []int
	for _, item := range safeAuditData.Auditors {
		auditId, _ := utils.GetDecryptId(item)
		auditors = append(auditors, auditId)
	}
	var reAuditors []int
	for _, item := range safeAuditData.ReAuditors {
		auditId, _ := utils.GetDecryptId(item)
		reAuditors = append(reAuditors, auditId)
	}
	uid, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	err = c.SafeAuditService.StartAudit(safeId, bidsectionId, safeAuditData.Times, auditors, reAuditors, uid)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "插入成功",
	})
}

// @Summary 关闭审批流程
// @Tags 安全巡检-审批
// @Description 直接停止审批流程
// @Accept  json
// @Produce  json
// @Param   id     body    string     true        "审批id"
// @Param   safe_id     body    string     true        "巡检id"
// @Param   opinion     body    string     true        "审批意见"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/safe_audit/close [post]
func (c *SafeAuditApi) PostClose() {
	// 1.规则验证
	safeAuditData, err := c.SafeAuditService.ValidRule(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 2.获取审批记录id
	id, err := utils.GetDecryptId(safeAuditData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	// 3.获取安全巡检记录id
	safeId, err := utils.GetDecryptId(safeAuditData.SafeId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	// 4.解析登录id
	uid, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 5. 执行sql
	err = c.SafeAuditService.CloseAudit(id, safeAuditData.Opinion, uid, safeId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 6. 返回结果
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "请求成功",
	})
}

// @Summary 审批退回
// @Tags 安全巡检-审批
// @Description
// @Accept  json
// @Produce  json
// @Param   id     body    string     true        "审批id"
// @Param   safe_id     body    string     true        "巡检id"
// @Param   audit_id     body    string     true        "回滚的审批人id"
// @Param   progress     body    string     true        "退回的类型，0审批，1整改，2复查，不传则为原报"
// @Param   opinion     body    string     true        "审批意见"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/safe_audit/back [post]
func (c *SafeAuditApi) PostBack() {
	// 1.规则验证
	safeAuditData, err := c.SafeAuditService.ValidRule(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 2.获取审批记录id
	id, err := utils.GetDecryptId(safeAuditData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	// 3.获取安全巡检记录id、回滚的审批人id
	safeId, err := utils.GetDecryptId(safeAuditData.SafeId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	auditId, err := utils.GetDecryptId(safeAuditData.AuditId)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	// 4.解析登录id
	uid, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 5. 执行sql
	err = c.SafeAuditService.BackAudit(id, safeAuditData.Opinion, uid, safeId, auditId, safeAuditData.Progress)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 6. 返回结果
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "请求成功",
	})
}

// @Summary 审批通过
// @Tags 安全巡检-审批
// @Description
// @Accept  json
// @Produce  json
// @Param   id     			body    string		true		"审批id"
// @Param   safe_id     body    string		true		"巡检id"
// @Param   audit_id    body    string		false		"整改人id"
// @Param 	opinion			body 		string		false		"审批意见"
// @Param   rectifiedInfo body string false "整改情况"
// @Success 200 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Failure 400 {string} string	"{code:0成功,-1参数类错误,-2服务端内部错误,msg:错误信息}"
// @Router /api/safe_audit/pass [post]
func (c *SafeAuditApi) PostPass() {
	// 1.规则验证
	safeAuditData, err := c.SafeAuditService.ValidRule(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 2.获取审批记录id
	id, err := utils.GetDecryptId(safeAuditData.Id)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": "ReadJSON转换异常,请检查参数"})
		return
	}
	var auditId = 0
	if safeAuditData.AuditId != "" {
		aid, err := utils.GetDecryptId(safeAuditData.AuditId)
		if err != nil {
			c.Ctx.JSON(iris.Map{"code": -1, "msg": "解析参数,请检查参数"})
			return
		}
		auditId = aid
	}
	// 3.解析登录id
	uid, err := utils.GetProjectAccountId(c.Ctx)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 4. 执行sql
	err = c.SafeAuditService.PassAudit(id, uid, auditId, safeAuditData.Opinion, safeAuditData.RectifiedInfo)
	if err != nil {
		c.Ctx.JSON(iris.Map{"code": -1, "msg": fmt.Sprintf("%s", err)})
		return
	}
	// 6. 返回结果
	c.Ctx.JSON(iris.Map{
		"code": 0,
		"msg":  "请求成功",
	})
}
