This commit is contained in:
2025-07-07 20:11:59 +08:00
parent ab0fdbc447
commit 06e3aa2eb3
2009 changed files with 193082 additions and 0 deletions

View File

@ -0,0 +1,932 @@
// ==========================================================================
// GFast自动生成logic操作代码。
// 生成日期2024-03-28 14:53:05
// 生成路径: internal/app/system/logic/bus_hse_management.go
// 生成人gfast
// desc:HSE-巡检工单
// company:云南奇讯科技有限公司
// ==========================================================================
package logic
import (
"context"
"errors"
"github.com/gogf/gf/v2/util/gmeta"
"github.com/jinzhu/copier"
"path/filepath"
"sort"
"strconv"
"strings"
"time"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv"
"github.com/tiger1103/gfast/v3/api/v1/common/coryCommon"
"github.com/tiger1103/gfast/v3/api/v1/system"
"github.com/tiger1103/gfast/v3/api/wxApplet/wxApplet"
comModel "github.com/tiger1103/gfast/v3/internal/app/common/model"
"github.com/tiger1103/gfast/v3/internal/app/system/consts"
"github.com/tiger1103/gfast/v3/internal/app/system/dao"
"github.com/tiger1103/gfast/v3/internal/app/system/model"
"github.com/tiger1103/gfast/v3/internal/app/system/model/do"
"github.com/tiger1103/gfast/v3/internal/app/system/service"
systemService "github.com/tiger1103/gfast/v3/internal/app/system/service"
wxDao "github.com/tiger1103/gfast/v3/internal/app/wxApplet/dao"
"github.com/tiger1103/gfast/v3/library/liberr"
"github.com/tiger1103/gfast/v3/third/reminders"
)
func init() {
service.RegisterBusHseManagement(New())
}
func New() *sBusHseManagement {
return &sBusHseManagement{}
}
type sBusHseManagement struct{}
func (s *sBusHseManagement) SafetyLargeScreenDetails(ctx context.Context, req *system.SafetyLargeScreenDetailsReq) (res *system.SafetyLargeScreenDetailsRes, err error) {
res = new(system.SafetyLargeScreenDetailsRes)
err = g.Try(ctx, func(ctx context.Context) {
// 1、获取主体数据
m := dao.BusHseManagement.Ctx(ctx).As("a").
LeftJoin(dao.SysProject.Table(), "b", "b.id = a.project_id").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'study_type' and c.dict_value = a.study_type").
LeftJoin("sys_dict_data", "e", "e.dict_type = 'tour_type' and e.dict_value = a.tour_type").
LeftJoin(dao.BusConstructionUser.Table(), "d", "d.openid = a.corrector").
// LeftJoin("sys_project_team", "f", "f.id = d.team_id").
Fields(
"a.id,b.project_name as projectName," + // 主键ID、项目名称
"c.dict_label as studyTypeName," + // 检查类型
"e.dict_label as tourTypeName," + // 违章类型
"a.inspection_result," + // 巡检结果
"a.check_time," + // 检查时间
"a.reply_date," + // 要求整改期限
//"f.name as teamName," + //班组
"a.team_name as teamName," + // 班组
"d.user_name as abarbeitung," + // 整改人
"a.rectification_time," + // 整改时间
"a.hidden_danger," + // 问题隐患
"a.measure," + // 整改措施
"a.review_time," + // 复查时间
"a.review," + // 复查情况
"a.status," + // 工单状态
"a.review_type," + // 复查状态
"a.created_at," + // 创建人(检查、复查)
"a.created_by as fill") // 创建人(检查、复查)
err = m.Where("a.id", req.Id).Scan(&res)
if err != nil {
return
}
// 2、获取附件
var pathEntity []*model.BusHseManagementPath
err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Where("ticket_id", req.Id).Scan(&pathEntity)
liberr.ErrIsNil(ctx, err, "查询失败")
// 3、分类附件
var one []*model.BusHseManagementPath
var two []*model.BusHseManagementPath
for i := range pathEntity {
if pathEntity[i].Type == "1" {
one = append(one, pathEntity[i])
} else {
two = append(two, pathEntity[i])
}
}
res.CheckAttachment = one
res.AbarbeitungAttachment = two
// 3、获取
res.Fill = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(res.Fill), res.Fill)
})
return
}
func (s *sBusHseManagement) GisSafetyManagementListFunc(ctx context.Context, req *system.GisSafetyManagementListReq) (listRes *system.GisSafetyManagementListRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
listRes = new(system.GisSafetyManagementListRes)
var entity []*system.GisSafetyManagementListEntityRes
if req.Type == "1" {
m := g.DB().Model("sys_project_team_squad").Ctx(ctx).As("a").
LeftJoin("sys_project_team", "b", "b.id = a.team_id").
Fields("a.id,"+
"b.name as studyTypeName,"+
"'站班会' as tourTypeName,"+
"a.created_at as createdAt").
Where("a.project_id", req.ProjectId)
array, err := m.Array()
listRes.Total = len(array)
liberr.ErrIsNil(ctx, err, "获取总行数失败")
if req.PageNum == 0 {
req.PageNum = 1
}
listRes.CurrentPage = req.PageNum
if req.PageSize == 0 {
req.PageSize = consts.PageSize
}
order := "id desc"
if req.OrderBy != "" {
order = req.OrderBy
}
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&entity)
liberr.ErrIsNil(ctx, err, "获取数据失败")
} else {
i, _ := strconv.ParseInt(req.Type, 10, 64)
m := dao.BusHseManagement.Ctx(ctx).As("a").
Fields("a.id,"+
"b.dict_label as studyTypeName,"+
"c.dict_label as tourTypeName,"+
"a.team_name,"+
"a.inspection_result,"+
"a.status,"+
"a.review_type,"+
"a.created_at").
LeftJoin("sys_dict_data", "b", "b.dict_type = 'study_type' and b.dict_value = a.study_type").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'tour_type' and c.dict_value = a.tour_type").
Where("a.project_id", req.ProjectId).
Where("a.is_reply", i-1)
values, err := m.Array()
liberr.ErrIsNil(ctx, err, "获取总行数失败")
listRes.Total = len(values)
if req.PageNum == 0 {
req.PageNum = 1
}
listRes.CurrentPage = req.PageNum
if req.PageSize == 0 {
req.PageSize = consts.PageSize
}
order := "a.created_at desc"
if req.OrderBy != "" {
order = req.OrderBy
}
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&entity)
liberr.ErrIsNil(ctx, err, "获取数据失败")
}
listRes.List = entity
})
return
}
func (s *sBusHseManagement) GisSafetyManagementFunc(ctx context.Context, req *system.GisSafetyManagementReq) (res *system.GisSafetyManagementRes, err error) {
res = new(system.GisSafetyManagementRes)
err = g.Try(ctx, func(ctx context.Context) {
// 1、站班会
count, err := g.DB().Model("sys_project_team_squad").Ctx(ctx).Where("project_id", req.ProjectId).Count()
res.TeamMeeting = count
// 2、获取巡检记录质量工单不需要回复的所有数据
safe := dao.BusHseManagement.Ctx(ctx).
Where("project_id", req.ProjectId).Safe()
countOne, err := safe.Where("is_reply", "2").Count()
liberr.ErrIsNil(ctx, err, "巡检记录统计失败")
res.InspectionRecord = countOne
// 3、整改情况统计百分比
countTwo, err := safe.Where("is_reply", "1").Count()
liberr.ErrIsNil(ctx, err, "情况统计情况统计失败")
countThree, err := safe.Where("is_reply", "1").
Where("status", "3").
Where("review_type", "1").
Count()
liberr.ErrIsNil(ctx, err, "获取数据失败")
if float64(countTwo) == 0 || float64(countThree) == 0 {
res.ReorganizeTheSituation = float64(countTwo)
} else {
consequence, err := coryCommon.PercentageFunc(100, float64(countTwo), float64(countThree))
liberr.ErrIsNil(ctx, err)
res.ReorganizeTheSituation = consequence
}
})
return
}
func (s *sBusHseManagement) HseManagementAppletDetailsFunc(ctx context.Context, req *wxApplet.HseManagementAppletDetailsReq) (res *wxApplet.HseManagementAppletDetailsRes, err error) {
res = new(wxApplet.HseManagementAppletDetailsRes)
err = g.Try(ctx, func(ctx context.Context) {
// 1、获取主体数据
m := dao.BusHseManagement.Ctx(ctx).As("a").
LeftJoin(dao.SysProject.Table(), "b", "b.id = a.project_id").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'study_type' and c.dict_value = a.study_type").
LeftJoin("sys_dict_data", "e", "e.dict_type = 'tour_type' and e.dict_value = a.tour_type").
LeftJoin(dao.BusConstructionUser.Table(), "d", "d.openid = a.corrector").
Fields(
"a.id,b.project_name as projectName," + // 主键ID、项目名称
"c.dict_label as studyTypeName," + // 检查类型
"e.dict_label as tourTypeName," + // 违章类型
"a.inspection_result," + // 巡检结果
"a.check_time," + // 检查时间
"a.reply_date," + // 要求整改期限
"a.team_name as teamName," + // 班组
"d.user_name as abarbeitung," + // 整改人
"a.rectification_time," + // 整改时间
"a.hidden_danger," + // 问题隐患
"a.measure," + // 整改措施
"a.review_time," + // 复查时间
"a.review," + // 复查情况
"a.status," + // 工单状态
"a.review_type," + // 复查状态
"a.created_by as fill," + // 复查状态
"a.created_at") // 创建人(检查、复查)
err = m.Where("a.id", req.Id).Scan(&res)
liberr.ErrIsNil(ctx, err, "查询失败")
// 2、获取附件
var pathEntity []*model.BusHseManagementPath
err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Where("ticket_id", req.Id).Scan(&pathEntity)
liberr.ErrIsNil(ctx, err, "查询失败")
// 3、分类附件
var one []*model.BusHseManagementPath
var two []*model.BusHseManagementPath
for i := range pathEntity {
if pathEntity[i].Type == "1" {
one = append(one, pathEntity[i])
} else {
two = append(two, pathEntity[i])
}
}
res.CheckAttachment = one
res.AbarbeitungAttachment = two
// 3、获取
res.Fill = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(res.Fill), res.Fill)
})
return
}
func (s *sBusHseManagement) HseManagementAppletListFunc(ctx context.Context, req *wxApplet.HseManagementAppletListReq) (listRes *wxApplet.HseManagementAppletListRes, err error) {
listRes = new(wxApplet.HseManagementAppletListRes)
err = g.Try(ctx, func(ctx context.Context) {
// 1、根据名字模糊搜索到项目id
var projectIds []string
if req.ProjectName != "" {
value, err := dao.SysProject.Ctx(ctx).
Where("(project_name like ? or short_name like ?)", "%"+req.ProjectName+"%", "%"+req.ProjectName+"%").
Fields("GROUP_CONCAT(id)").Value()
liberr.ErrIsNil(ctx, err, "模糊查询失败")
split := strings.Split(value.String(), ",")
for i := range split {
projectIds = append(projectIds, split[i])
}
}
// 2、根据项目id+openid获取到数据
var appletList []*model.HseManagementAppletListRes
m := dao.BusHseManagement.Ctx(ctx).As("a").
LeftJoin(dao.SysProject.Table(), "b", "b.id = a.project_id").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'study_type' and c.dict_value = a.study_type").
LeftJoin("sys_dict_data", "e", "e.dict_type = 'tour_type' and e.dict_value = a.tour_type").
LeftJoin(dao.BusConstructionUser.Table(), "d", "d.openid = a.corrector").
Fields(
"a.id,b.project_name as projectName," + // 主键ID、项目名称
"c.dict_label as studyTypeName," + // 检查类型
"e.dict_label as tourTypeName," + // 违章类型
"d.user_name as userName," + // 整改人
"a.status,a.review_type as reviewType," + // 工单状态
"a.created_by as createdBy," +
"a.is_reply as isReply," +
"a.created_at as createdAt", // 创建人、创建时间
)
if req.Flag == true {
m = m.Where("date_format(a.created_at,'%Y-%m-%d') = CURDATE()")
}
if req.StudyType != "" {
m = m.Where("a.study_type", req.StudyType)
}
if req.ProjectId != 0 {
m = m.Where("a.project_id = ?", req.ProjectId)
}
if req.Status != "" && req.Status != "0" {
m = m.Where("a.status", req.Status)
} else {
m = m.Where("a.pid", "0")
}
if req.CreatedAt != "" {
m = m.Where("DATE_FORMAT(a.created_at,'%Y-%m-%d') = ?", req.CreatedAt)
}
if req.ProjectId != 0 {
m = m.Where("a.project_id = ?", req.ProjectId)
}
if req.Type == "1" {
m = m.Where("a.created_by", req.OpenId)
}
if req.Type == "2" {
m = m.Where("a.corrector", req.OpenId).Where("a.is_reply <> 2")
}
if req.Type == "3" {
m = m.Where("a.created_by = ? or a.corrector = ?", req.OpenId, req.OpenId)
}
if len(projectIds) > 0 {
m = m.Where("b.id in (?)", projectIds)
}
array, err := m.Array()
liberr.ErrIsNil(ctx, err, "获取总行数失败")
listRes.Total = len(array)
if req.PageNum == 0 {
req.PageNum = 1
}
listRes.CurrentPage = req.PageNum
if req.PageSize == 0 {
req.PageSize = consts.PageSize
}
order := "a.status asc,a.created_at desc"
if req.OrderBy != "" {
order = req.OrderBy
}
m.Page(req.PageNum, req.PageSize).Order(order).Scan(&appletList)
// 3、获取
for i := range appletList {
//当前工单如若被拒绝那么就查询当前工单下最新的数据信息然后把当前数据给替换掉主要替换id、状态
if appletList[i].ReviewType == "2" {
type zdmp struct {
gmeta.Meta `orm:"table:bus_hse_management"`
Id int64 `orm:"id" json:"id"`
ReviewType string `orm:"review_type" json:"reviewType"`
}
var zdmpData []zdmp
mysql := dao.BusHseManagement.Ctx(ctx).As("a").
Where("a.pid", appletList[i].Id).Safe()
if err := mysql.Fields("a.id,a.review_type").Scan(&zdmpData); err != nil {
liberr.ErrIsNil(ctx, err, "无法获取安全工单拒绝数据")
return
} else {
for i2 := range zdmpData {
if zdmpData[i2].ReviewType == "" || zdmpData[i2].ReviewType == "1" {
zdmpData[i2].ReviewType = "true"
} else {
zdmpData[i2].ReviewType = "false"
}
}
zdmpData = append(zdmpData, zdmp{
Id: appletList[i].Id,
ReviewType: "false",
})
sort.Slice(zdmpData, func(i, j int) bool {
return zdmpData[i].Id > zdmpData[j].Id
})
appletList[i].RefuseList = zdmpData
}
type zd struct {
gmeta.Meta `orm:"table:bus_hse_management"`
Id int64 `orm:"id" json:"id"`
Status string `orm:"status" json:"status"`
ReviewType string `orm:"review_type" json:"reviewType"`
}
zdData := new(zd)
err := mysql.
Where("(a.review_type != '2') OR (a.review_type IS NULL)").
Fields("a.id,a.status,a.review_type").
Scan(&zdData)
if err == nil {
appletList[i].Id = zdData.Id
appletList[i].Status = zdData.Status
appletList[i].ReviewType = zdData.ReviewType
} else {
liberr.ErrIsNil(ctx, err, "无法获取安全工单转换数据")
return
}
}
appletList[i].CreatedBy = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(appletList[i].CreatedBy), appletList[i].CreatedBy)
}
listRes.List = appletList
})
return
}
func (s *sBusHseManagement) HseManagementAppletVerifyFunc(ctx context.Context, req *wxApplet.HseManagementAppletVerifyReq) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
// 1、更新数据
_, err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).OmitEmpty().Update(do.BusHseManagement{
Review: req.Review,
ReviewType: req.ReviewType,
Status: "3", // 整改
UpdatedBy: req.Openid,
})
liberr.ErrIsNil(ctx, err, "验证提交失败")
// 2、查询数据
var aData model.BusHseManagementInfoRes
err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Scan(&aData)
liberr.ErrIsNil(ctx, err)
// 3、消息提醒
value, _ := g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", aData.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Recheck,
Title: value.String(),
Content: aData.InspectionResult,
ProjectID: int(aData.ProjectId),
ReceiverID: aData.Corrector,
TargetID: int(req.Id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return
}
func (s *sBusHseManagement) HseManagementAppletAbarbeitungFunc(ctx context.Context, req *wxApplet.HseManagementAppletAbarbeitungReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
// 1、更新数据
_, err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).OmitEmpty().Update(do.BusHseManagement{
HiddenDanger: req.HiddenDanger,
Measure: req.Measure,
Status: "2", // 整改
RectificationTime: gtime.New(time.Now()),
UpdatedBy: req.Openid,
})
liberr.ErrIsNil(ctx, err, "整改提交失败")
// 2、存储文件
if len(req.File) > 0 {
err = SaveFunc(ctx, req.File, req.Id, "2") // 整改
liberr.ErrIsNil(ctx, err)
}
// 2、查询数据
var aData model.BusHseManagementInfoRes
err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Scan(&aData)
liberr.ErrIsNil(ctx, err)
// 3、消息提醒
value, _ := g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", aData.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Reform,
Title: value.String(),
Content: aData.InspectionResult,
ProjectID: int(aData.ProjectId),
ReceiverID: aData.CreatedBy,
TargetID: int(req.Id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return err
})
return
}
func (s *sBusHseManagement) HseManagementAppletAddFunc(ctx context.Context, req *wxApplet.HseManagementAppletAddReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
var teamName string
value, _ := dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Fields("team_id").Value()
if value != nil {
v, _ := g.DB().Model("sys_project_team").Ctx(ctx).Fields("name").WherePri(value).Value()
teamName = v.String()
}
if teamName == "" {
err = errors.New("无法获取到班组")
liberr.ErrIsNil(ctx, err)
}
isStatus := "1" // 默认为通知
if req.IsReply == "2" {
isStatus = "3"
}
ticket := do.BusHseManagement{
ProjectId: req.ProjectId,
StudyType: req.StudyType,
TourType: req.TourType,
InspectionResult: req.InspectionResult,
TeamName: TeamIdByNameFunc(ctx, req.Corrector),
Corrector: req.Corrector,
IsReply: req.IsReply,
ReplyDate: req.ReplyDate,
Status: isStatus,
CreatedBy: req.Openid,
CheckTime: gtime.New(time.Now()),
}
// 如果回复为否,那么工单状态为验证且通过
if isStatus == "3" {
ticket.ReviewType = "1"
}
// 1、上传文件基本信息
info, err := dao.BusHseManagement.Ctx(ctx).OmitEmpty().Insert(ticket)
liberr.ErrIsNil(ctx, err, "添加失败")
id, _ := info.LastInsertId()
// 2、上传并存储文件
if len(req.File) > 0 {
err = SaveFunc(ctx, req.File, id, "1") // 巡检
liberr.ErrIsNil(ctx, err)
}
// 3、消息提醒
value, _ = g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", req.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Remind,
Title: value.String(),
Content: req.InspectionResult,
ProjectID: int(req.ProjectId),
ReceiverID: req.Corrector,
TargetID: int(id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return err
})
return
}
func (s *sBusHseManagement) List(ctx context.Context, req *system.BusHseManagementSearchReq) (listRes *system.BusHseManagementSearchRes, err error) {
listRes = new(system.BusHseManagementSearchRes)
err = g.Try(ctx, func(ctx context.Context) {
// 根据名称模糊查询到openid 检查人
var fillOpenIds []string
if req.Fill != "" {
array, _ := dao.BusConstructionUser.Ctx(ctx).
Where(dao.BusConstructionUser.Columns().UserName+" like ?", "%"+req.Fill+"%").
Fields(dao.BusConstructionUser.Columns().Openid).Array()
if len(array) > 0 {
for i := range array {
fillOpenIds = append(fillOpenIds, array[i].String())
}
}
}
var abarbeitungOpenIds []string // 整改人
if req.Abarbeitung != "" {
array1, _ := dao.BusConstructionUser.Ctx(ctx).
Where(dao.BusConstructionUser.Columns().UserName+" like ?", "%"+req.Abarbeitung+"%").
Fields(dao.BusConstructionUser.Columns().Openid).Array()
if len(array1) > 0 {
for i := range array1 {
abarbeitungOpenIds = append(abarbeitungOpenIds, array1[i].String())
}
}
array2, _ := dao.SysUser.Ctx(ctx).
Where(dao.SysUser.Columns().UserName+" like ?", "%"+req.Abarbeitung+"%").
Fields(dao.SysUser.Columns().Id).Array()
if len(array2) > 0 {
for i := range array2 {
abarbeitungOpenIds = append(abarbeitungOpenIds, array2[i].String())
}
}
}
m := dao.BusHseManagement.Ctx(ctx).As("a").
LeftJoin(dao.SysProject.Table(), "b", "b.id = a.project_id").
LeftJoin(dao.BusConstructionUser.Table(), "c", "c.openid = a.corrector").
Fields(
"a.*," +
"b.project_name as projectName," +
"c.user_name as abarbeitung")
m = m.Where("a.pid", "0")
if req.ProjectId != "" {
m = m.Where("a."+dao.BusHseManagement.Columns().ProjectId+" = ?", gconv.Int64(req.ProjectId))
}
if req.StudyType != "" {
m = m.Where("a."+dao.BusHseManagement.Columns().StudyType+" = ?", req.StudyType)
}
if req.TourType != "" {
m = m.Where("a."+dao.BusHseManagement.Columns().TourType+" = ?", req.TourType)
}
if len(fillOpenIds) > 0 { // 检查人
m = m.Where("a."+dao.BusHseManagement.Columns().CreatedBy+" in (?)", fillOpenIds)
}
if len(abarbeitungOpenIds) > 0 { // 整改人
m = m.Where("a."+dao.BusHseManagement.Columns().CreatedBy+" in (?)", abarbeitungOpenIds)
}
if len(req.DateRange) != 0 {
m = m.Where("a."+dao.BusHseManagement.Columns().CreatedAt+" >=? AND "+"a."+dao.BusHseManagement.Columns().CreatedAt+" <=?", req.DateRange[0], req.DateRange[1])
}
array, err := m.Array()
liberr.ErrIsNil(ctx, err, "获取总行数失败")
listRes.Total = len(array)
if req.PageNum == 0 {
req.PageNum = 1
}
listRes.CurrentPage = req.PageNum
if req.PageSize == 0 {
req.PageSize = consts.PageSize
}
order := "a.check_time desc"
if req.OrderBy != "" {
order = req.OrderBy
}
var res []*model.BusHseManagementInfoTwoRes
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
for i := range res {
//当前工单如若被拒绝那么就查询当前工单下最新的数据信息然后把当前数据给替换掉主要替换id、状态
if res[i].ReviewType == "2" {
type zdmp struct {
gmeta.Meta `orm:"table:bus_hse_management"`
Id int64 `orm:"id" json:"id"`
ReviewType string `orm:"review_type" json:"reviewType"`
}
var zdmpData []zdmp
mysql := dao.BusHseManagement.Ctx(ctx).As("a").
Where("a.pid", res[i].Id).Safe()
if err := mysql.Fields("a.id,a.review_type").Scan(&zdmpData); err != nil {
liberr.ErrIsNil(ctx, err, "无法获取安全工单拒绝数据")
return
} else {
for i2 := range zdmpData {
if zdmpData[i2].ReviewType == "" || zdmpData[i2].ReviewType == "1" {
zdmpData[i2].ReviewType = "true"
} else {
zdmpData[i2].ReviewType = "false"
}
}
zdmpData = append(zdmpData, zdmp{
Id: res[i].Id,
ReviewType: "false",
})
sort.Slice(zdmpData, func(i, j int) bool {
return zdmpData[i].Id > zdmpData[j].Id
})
res[i].RefuseList = zdmpData
}
type zd struct {
gmeta.Meta `orm:"table:bus_hse_management"`
Id int64 `orm:"id" json:"id"`
Status string `orm:"status" json:"status"`
}
zdData := new(zd)
err := mysql.
Where("(a.review_type != '2') OR (a.review_type IS NULL)").
Fields("a.id,a.status").
Scan(&zdData)
if err == nil {
res[i].Id = zdData.Id
res[i].Status = zdData.Status
res[i].ReviewType = ""
} else {
liberr.ErrIsNil(ctx, err, "无法获取安全工单转换数据")
return
}
}
res[i].Fill = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(res[i].CreatedBy), res[i].CreatedBy)
}
listRes.List = res
liberr.ErrIsNil(ctx, err, "获取数据失败")
})
return
}
func (s *sBusHseManagement) GetById(ctx context.Context, id int64) (res *model.BusHseManagementDetailsRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
// 1、获取主体数据
m := dao.BusHseManagement.Ctx(ctx).As("a").
LeftJoin(dao.SysProject.Table(), "b", "b.id = a.project_id").
LeftJoin("sys_dict_data", "c", "c.dict_type = 'study_type' and c.dict_value = a.study_type").
LeftJoin("sys_dict_data", "e", "e.dict_type = 'tour_type' and e.dict_value = a.tour_type").
LeftJoin(dao.BusConstructionUser.Table(), "d", "d.openid = a.corrector").
Fields(
"a.id,b.project_name as projectName," + // 主键ID、项目名称
"c.dict_label as studyTypeName," + // 检查类型
"e.dict_label as tourTypeName," + // 违章类型
"a.inspection_result," + // 巡检结果
"a.check_time," + // 检查时间
"a.reply_date," + // 要求整改期限
"a.team_name as teamName," + // 班组
"d.user_name as abarbeitung," + // 整改人
"a.rectification_time," + // 整改时间
"a.hidden_danger," + // 问题隐患
"a.measure," + // 整改措施
"a.review_time," + // 复查时间
"a.review," + // 复查情况
"a.status," + // 工单状态
"a.review_type," + // 复查状态
"a.created_by as fill," + // 复查状态
"a.is_reply as isReply," + // 是否回复
"a.created_at") // 创建人(检查、复查)
err = m.Where("a.id", id).Scan(&res)
liberr.ErrIsNil(ctx, err, "查询失败")
// 2、获取附件
var pathEntity []*model.BusHseManagementPath
err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Where("ticket_id", id).Scan(&pathEntity)
liberr.ErrIsNil(ctx, err, "查询失败")
// 3、分类附件
var one []*model.BusHseManagementPath
var two []*model.BusHseManagementPath
for i := range pathEntity {
if pathEntity[i].Type == "1" {
one = append(one, pathEntity[i])
} else {
two = append(two, pathEntity[i])
}
}
res.CheckAttachment = one
res.AbarbeitungAttachment = two
// 3、获取
res.Fill = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(res.Fill), res.Fill)
})
return
}
func TeamIdByNameFunc(ctx context.Context, corrector string) string {
teamIdv, _ := dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, corrector).Fields("team_id").Value()
fields, _ := wxDao.SysProjectTeam.Ctx(ctx).WherePri(teamIdv).Fields("name").Value()
return fields.String()
}
func (s *sBusHseManagement) Add(ctx context.Context, req *system.BusHseManagementAddReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
////获取当前时间的年月日
//date := tool.New().GetFormattedDate(time.Now())
info, err := dao.BusHseManagement.Ctx(ctx).Insert(do.BusHseManagement{
ProjectId: req.ProjectId,
StudyType: req.StudyType,
TourType: req.TourType,
InspectionResult: req.InspectionResult,
CreatedBy: systemService.Context().GetUserId(ctx),
CheckTime: gtime.New(time.Now()),
TeamName: TeamIdByNameFunc(ctx, req.Corrector),
Corrector: req.Corrector,
Status: "1",
IsReply: "1",
ReplyDate: req.ReplyDate,
})
liberr.ErrIsNil(ctx, err, "添加失败")
id, _ := info.LastInsertId()
// 2、上传并存储文件
if req.HseManagementAdd == 1 {
err = SaveFunc(ctx, req.FileTwo, id, "1") // 巡检
liberr.ErrIsNil(ctx, err)
} else {
err = UploadAndSaveFunc(ctx, req.File, id, "1") // 巡检
liberr.ErrIsNil(ctx, err)
}
// 3、消息提醒
value, _ := g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", req.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Remind,
Title: value.String(),
Content: req.InspectionResult,
ProjectID: int(req.ProjectId),
ReceiverID: req.Corrector,
TargetID: int(id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return err
})
return
}
func (s *sBusHseManagement) Edit(ctx context.Context, req *system.BusHseManagementEditReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Update(do.BusHseManagement{
Status: "2",
RectificationTime: gtime.New(time.Now()),
UpdatedBy: systemService.Context().GetUserId(ctx),
})
err = UploadAndSaveFunc(ctx, req.File, req.Id, "1") // 巡检
liberr.ErrIsNil(ctx, err, "修改失败")
// 2、查询数据
var aData model.BusHseManagementInfoRes
err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Scan(&aData)
liberr.ErrIsNil(ctx, err)
// 3、消息提醒
value, _ := g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", aData.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Reform,
Title: value.String(),
Content: aData.InspectionResult,
ProjectID: int(aData.ProjectId),
ReceiverID: aData.CreatedBy,
TargetID: int(req.Id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return err
})
return
}
func (s *sBusHseManagement) EditReview(ctx context.Context, req *system.EditReviewReq) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Update(do.BusHseManagement{
ReviewType: req.ReviewType,
Review: req.Review,
Status: "3",
ReviewTime: gtime.New(time.Now()),
UpdatedBy: systemService.Context().GetUserId(ctx),
})
liberr.ErrIsNil(ctx, err, "修改失败")
// 2-1、查询数据
var aData model.BusHseManagementInfoRes
err = dao.BusHseManagement.Ctx(ctx).WherePri(req.Id).Scan(&aData)
liberr.ErrIsNil(ctx, err)
//2-2、如果拒绝那么就重新写入当前数据到整改人
if req.ReviewType == "2" {
bData := new(model.InsertRejectionRes)
if err := copier.Copy(bData, aData); err != nil {
liberr.ErrIsNil(ctx, err)
return
}
if aData.Pid == 0 {
bData.Pid = aData.Id
} else {
bData.Pid = aData.Pid
}
bData.Status = "1"
bData.CreatedBy = strconv.FormatUint(systemService.Context().GetUserId(ctx), 10)
_, resultErr := dao.BusHseManagement.Ctx(ctx).OmitEmpty().Insert(bData)
if resultErr != nil {
liberr.ErrIsNil(ctx, resultErr)
return
}
}
// 3、消息提醒
value, _ := g.DB().Model("sys_dict_data").Ctx(ctx).Where("dict_type", "study_type").Where("dict_value", aData.StudyType).Fields("dict_label").Value()
message := reminders.Reminder{
Type: reminders.Security,
Status: reminders.Recheck,
Title: value.String(),
Content: aData.InspectionResult,
ProjectID: int(aData.ProjectId),
ReceiverID: aData.Corrector,
TargetID: int(req.Id),
}
err = reminders.PublishReminder(message, false)
if err != nil {
liberr.ErrIsNil(ctx, err)
}
})
return
}
func (s *sBusHseManagement) Delete(ctx context.Context, ids []int64) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusHseManagement.Ctx(ctx).Delete(dao.BusHseManagement.Columns().Id+" in (?)", ids)
liberr.ErrIsNil(ctx, err, "删除失败")
})
return
}
type FileEntity struct {
TicketId int64 `p:"ticket_id" dc:"质量工单主键ID级联删除"`
Type string `p:"type" dc:"类型1巡检 2整改"`
Name string `p:"name" dc:"文件名称"`
Path string `p:"path" dc:"文件路径"`
FileType string `p:"file_type" dc:"文件类型(后缀)"`
}
// UploadAndSaveFunc 上传并存储文件
func UploadAndSaveFunc(ctx context.Context, file []*ghttp.UploadFile, id int64, typeStr string) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
if len(file) == 0 {
return
}
// 2、获取文件数据然后对文件进行上传
var fileEntitys []*FileEntity
for i := range file {
str, err := coryCommon.UploadFileTwo(ctx, file[i], coryCommon.Helmet)
liberr.ErrIsNil(ctx, err, "上传附件失败!")
str = filepath.ToSlash(str)
rpath := coryCommon.ResourcePublicToFunc("/"+str, 0)
_, ext, _ := coryCommon.FileInfo(rpath)
entity := FileEntity{
TicketId: id,
Type: typeStr,
Name: file[i].Filename,
Path: rpath,
FileType: ext,
}
fileEntitys = append(fileEntitys, &entity)
}
// 3、上传文件的附件信息
_, err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Insert(fileEntitys)
liberr.ErrIsNil(ctx, err, "添加失败")
})
return
}
// SaveFunc 存储文件
func SaveFunc(ctx context.Context, fileInfo []*comModel.UpFile, id int64, typeStr string) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
if len(fileInfo) == 0 {
return
}
// 2、获取文件数据然后对文件进行上传
var fileEntitys []*FileEntity
for i := range fileInfo {
rpath := coryCommon.FileToFunc(filepath.ToSlash(fileInfo[i].Url), 3)
entity := FileEntity{
TicketId: id,
Type: typeStr,
Name: fileInfo[i].Name,
Path: rpath,
FileType: fileInfo[i].FileType,
}
fileEntitys = append(fileEntitys, &entity)
}
// 3、上传文件的附件信息
_, err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Insert(fileEntitys)
liberr.ErrIsNil(ctx, err, "添加失败")
})
return
}