package controller import ( "encoding/json" "fmt" "os" "path/filepath" "strconv" "github.com/samber/lo" "github.com/tiger1103/gfast/v3/api/v1/system" "github.com/gogf/gf/v2/frame/g" "github.com/tiger1103/gfast/v3/library/liberr" "github.com/gogf/gf/v2/database/gdb" "github.com/jinzhu/copier" "github.com/tiger1103/gfast/v3/api/v1/common/coryCommon" "github.com/tiger1103/gfast/v3/api/wxApplet/wxApplet" wxSystem "github.com/tiger1103/gfast/v3/api/wxApplet/wxApplet" systemController "github.com/tiger1103/gfast/v3/internal/app/system/controller" controllerDao "github.com/tiger1103/gfast/v3/internal/app/system/dao" ct "github.com/tiger1103/gfast/v3/internal/app/system/logic/context" "github.com/tiger1103/gfast/v3/internal/app/system/model" "github.com/tiger1103/gfast/v3/internal/app/system/model/entity" serviceController "github.com/tiger1103/gfast/v3/internal/app/system/service" "github.com/tiger1103/gfast/v3/internal/app/wxApplet/dao" wxAppletModel "github.com/tiger1103/gfast/v3/internal/app/wxApplet/model" "github.com/tiger1103/gfast/v3/internal/app/wxApplet/service" "golang.org/x/net/context" ) type appPortController struct { systemController.BaseController } var AppPortController = new(appPortController) // ===========================================APP首页=========================================== // ===========================================APP首页=========================================== // ===========================================APP首页=========================================== // GetsTheAttendanceOfASpecifiedShiftGroupFunc 班组长人员打卡统计 func (c *appPortController) GetsTheAttendanceOfASpecifiedShiftGroupFunc(ctx context.Context, req *wxApplet.GetsTheAttendanceOfASpecifiedShiftGroupReq) (res *wxApplet.GetsTheAttendanceOfASpecifiedShiftGroupRes, err error) { res, err = service.SysProjectTeam().GetsTheAttendanceOfASpecifiedShiftGroupFunc(ctx, req) return } // ListOfAttendancePersonnelFunc 获取用户对应出勤状态的人员列表 func (c *appPortController) ListOfAttendancePersonnelFunc(ctx context.Context, req *wxApplet.ListOfAttendancePersonnelReq) (res *wxApplet.ListOfAttendancePersonnelRes, err error) { res, err = service.SysProjectTeam().ListOfAttendancePersonnelFunc(ctx, req) return } // AppUserMenuFunc 获取用户菜单 func (c *appPortController) AppUserMenuFunc(ctx context.Context, req *wxApplet.AppUserMenusReq) (*wxApplet.AppUserMenusRes, error) { // 获取用户信息 userInfo := ct.New().GetLoginUser(ctx) // 获取用户角色 roleIds, err := getUserRoles(ctx, userInfo, req.UserType) if err != nil { return nil, err } var userMenuList []wxApplet.AppUserMenu // 获取用户菜单 if err := controllerDao.AppMenus.Ctx(ctx).As("menu"). InnerJoin("app_role_menus roleMenu", "menu.menu_id = roleMenu.menu_id"). Where("roleMenu.role_id IN (?)", roleIds). Fields("menu.menu_id, menu.menu_name").Scan(&userMenuList); err != nil { return nil, fmt.Errorf("获取用户菜单失败:%w", err) } userMenuList = lo.UniqBy(userMenuList, func(item wxApplet.AppUserMenu) uint { return item.MenuID }) return &wxApplet.AppUserMenusRes{MenuList: userMenuList}, nil } // getUserRoles 获取用户角色 func getUserRoles(ctx context.Context, user *model.ContextUser, role int) ([]int, error) { rules := []model.Ruler{} query := controllerDao.AppUserRoles.Ctx(ctx).As("aur"). InnerJoin("app_roles ar", "aur.role_id = ar.role_id"). Fields("ar.role_id,ar.role_name,aur.user_id"). Where("aur.user_id", user.Id). Where("aur.major_role", role) if err := query.Scan(&rules); err != nil { return nil, fmt.Errorf("获取用户角色失败:%w", err) } roleID := lo.FilterMap(rules, func(item model.Ruler, _ int) (int, bool) { return item.RoleId, true }) return roleID, nil } // AppMyAttendanceFunc 我的考勤 func (c *appPortController) AppMyAttendanceFunc(ctx context.Context, req *wxApplet.AppMyAttendanceReq) (res *wxApplet.AppMyAttendanceRes, err error) { res = new(wxApplet.AppMyAttendanceRes) res, err = service.BusAttendance().AppMyAttendanceFunc(ctx, req) return } // AppMyAttendanceDetailsFunc 我的考勤详情数据 func (c *appPortController) AppMyAttendanceDetailsFunc(ctx context.Context, req *wxApplet.AppMyAttendanceDetailsReq) (res *wxApplet.AppMyAttendanceDetailsRes, err error) { res = new(wxApplet.AppMyAttendanceDetailsRes) res, err = service.BusAttendance().AppMyAttendanceDetailsFunc(ctx, req) return } // AppProjectOverviewFunc 项目概况 func (c *appPortController) AppProjectOverviewFunc(ctx context.Context, req *wxApplet.AppProjectOverviewReq) (res *wxApplet.AppProjectOverviewRes, err error) { res = new(wxApplet.AppProjectOverviewRes) res, err = service.BusAttendance().AppProjectOverviewFunc(ctx, req) return } // AppSafetyHazardTodayFunc 项目概况>今日AI安全隐患 func (c *appPortController) AppSafetyHazardTodayFunc(ctx context.Context, req *wxApplet.AppSafetyHazardTodayReq) (res *wxApplet.AppSafetyHazardTodayRes, err error) { res, err = serviceController.BusViolationRecord().AppSafetyHazardTodayFunc(ctx, req) return } // AppWeatherFunc 【小程序】获取施工人员天气 func (c *appPortController) AppWeatherFunc(ctx context.Context, req *wxApplet.AppWeatherReq) (res *wxApplet.AppWeatherRes, err error) { res = new(wxApplet.AppWeatherRes) we := coryCommon.Weather(req.Location) bodyData := []byte(we) err = json.Unmarshal(bodyData, &res) if err != nil { fmt.Println("Failed to parse JSON data:", err) return } return } // AppProjectNoticeListFunc 首页获取滚动的项目公告列表 func (c *appPortController) AppProjectNoticeListFunc(ctx context.Context, req *wxApplet.AppProjectNoticeReq) (*wxApplet.AppProjectNoticeRes, error) { userId := ct.New().GetLoginUser(ctx).Id noticeList := []*wxApplet.ProjectNoticeList{} if err := controllerDao.Notifications.Ctx(ctx). Fields(controllerDao.Notifications.Columns().Title). LeftJoin("notification_recipients nf", "notifications.id = nf.notification_id"). Where(controllerDao.Notifications.Columns().ProjectId, req.ProjectId). Where(controllerDao.Notifications.Columns().IsApp, 1). Where("nf.recipient_id", userId). Limit(20).OrderDesc("notifications.id").Scan(¬iceList); err != nil { return nil, fmt.Errorf("获取项目公告失败:%w", err) } return &wxApplet.AppProjectNoticeRes{ List: noticeList, }, nil } // AppRegisteredButNotVerifiedWithRealName 获取所有已注册未实名的用户 func (c *appPortController) AppRegisteredButNotVerifiedWithRealName(ctx context.Context, req *wxApplet.AppRegisteredButNotVerifiedWithRealNameReq) (res *wxApplet.AppRegisteredButNotVerifiedWithRealNameRes, err error) { res, err = serviceController.BusConstructionUser().AppRegisteredButNotVerifiedWithRealNameFunc(ctx, req) return } // ===========================================定位考勤=========================================== // ===========================================定位考勤=========================================== // ===========================================定位考勤=========================================== // AppCodedBackwardsByLatitudeAndLongitudeFunc 根据经度纬度逆编码为省市区信息 func (c *appPortController) AppCodedBackwardsByLatitudeAndLongitudeFunc(ctx context.Context, req *wxApplet.AppCodedBackwardsByLatitudeAndLongitudeReq) (res *wxApplet.AppCodedBackwardsByLatitudeAndLongitudeRes, err error) { res = new(wxApplet.AppCodedBackwardsByLatitudeAndLongitudeRes) we := coryCommon.InverseGeocoding(req.Location) bodyData := []byte(we) err = json.Unmarshal(bodyData, &res) if err != nil { return } return } // AppOpenidByFounderFunc 返回当前用户所在项目的打卡范围 func (c *appPortController) AppOpenidByFounderFunc(ctx context.Context, req *wxApplet.AppOpenidByFounderReq) (res *wxApplet.AppOpenidByFounderRes, err error) { res = new(wxApplet.AppOpenidByFounderRes) founderFunc, err := OpenidByFounderFunc(ctx, req.Openid) err = copier.Copy(&res, founderFunc) return } // AppWhetherToEnterTheClockRangeFunc 判断当前用户是否进入打卡范围 func (c *appPortController) AppWhetherToEnterTheClockRangeFunc(ctx context.Context, req *wxApplet.AppWhetherToEnterTheClockRangeReq) (res *wxApplet.AppWhetherToEnterTheClockRangeRes, err error) { res = new(wxApplet.AppWhetherToEnterTheClockRangeRes) res, err = service.BusAttendance().AppWhetherToEnterTheClockRangeFunc(ctx, req) return } // AppClockingStatusOfTheDayFunc 判断当前用户当天的打卡状态(1未打卡、2已打上班卡、3已打下班卡) func (c *appPortController) AppClockingStatusOfTheDayFunc(ctx context.Context, req *wxApplet.AppClockingStatusOfTheDayReq) (res *wxApplet.AppClockingStatusOfTheDayRes, err error) { res = new(wxApplet.AppClockingStatusOfTheDayRes) res, err = service.BusAttendance().AppClockingStatusOfTheDayFunc(ctx, req) return } // AppFaceDetectionFunc 人脸检测 func (c *appPortController) AppFaceDetectionFunc(ctx context.Context, req *wxApplet.AppFaceDetectionReq) (res *wxApplet.AppFaceDetectionRes, err error) { res = new(wxApplet.AppFaceDetectionRes) res.Path, err = FaceDetectionFunc(ctx, req.File) return } // AppAttendanceCardFunc 考勤打卡 func (c *appPortController) AppAttendanceCardFunc(ctx context.Context, req *wxApplet.AppAttendanceCardReq) (res *wxApplet.AppAttendanceCardRes, err error) { res = new(wxApplet.AppAttendanceCardRes) addReq := wxApplet.BusAttendanceAddReq{} copier.Copy(&addReq, &req) err = service.BusAttendance().Add(ctx, &addReq) return } // AppAllMembersOfTheCurrentGroupFunc 获取当前组的所有成员(除自己) func (c *appPortController) AppAllMembersOfTheCurrentGroupFunc(ctx context.Context, req *wxApplet.AppAllMembersOfTheCurrentGroupReq) (res *wxApplet.AppAllMembersOfTheCurrentGroupRes, err error) { res, err = service.BusConstructionUser().AppAllMembersOfTheCurrentGroupFunc(ctx, req) return } // AppSelectThisUserByCardRecordFunc 为指定用户查询打卡记录 func (c *appPortController) AppSelectThisUserByCardRecordFunc(ctx context.Context, req *wxApplet.AppSelectThisUserByCardRecordReq) (res *wxApplet.AppSelectThisUserByCardRecordRes, err error) { res, err = service.BusAttendance().AppSelectThisUserByCardRecordFunc(ctx, req) return } // AppLocationAttendanceStatisticsFunc 定位考勤统计 func (c *appPortController) AppLocationAttendanceStatisticsFunc(ctx context.Context, req *wxApplet.AppLocationAttendanceStatisticsReq) (res *wxApplet.AppLocationAttendanceStatisticsRes, err error) { res, err = service.BusAttendance().AppLocationAttendanceStatisticsFunc(ctx, req) return } // AppSelectBySiteDateAndTimeFunc 根据openid获取到项目的逆编码地址及项目的上下班打卡时间 func (c *appPortController) AppSelectBySiteDateAndTimeFunc(ctx context.Context, req *wxApplet.AppSelectBySiteDateAndTimeReq) (res *wxApplet.AppSelectBySiteDateAndTimeRes, err error) { res = new(wxApplet.AppSelectBySiteDateAndTimeRes) data, err := serviceController.SysProject().GetById(ctx, req.ProjectId) res.PunchRange = data.PunchRange res.Lng = data.Lng res.Lat = data.Lat // 逆编码 var entity *coryCommon.InverseGeocodingRep we := coryCommon.InverseGeocoding(data.Lng + "," + data.Lat) bodyData := []byte(we) err = json.Unmarshal(bodyData, &entity) if err != nil { return } res.Site = entity.Regeocode.FormattedAddress return } // AppMyProjectListFunc 获取项目列表 func (c *appPortController) AppMyProjectListFunc(ctx context.Context, req *wxApplet.AppMyProjectListReq) (*wxApplet.SysUserProjectRelevancySearchRes, error) { // 获取当前登录用户ID userInfo := ct.New().GetLoginUser(ctx) // 当前登录用户ID userID := userInfo.Id // 用户手机号 phone := userInfo.Mobile var query *gdb.Model fields := `a.*, CASE WHEN (b.short_name IS NULL OR b.project_name = '') THEN b.project_name ELSE b.short_name END AS project_name, b.lng, b.lat, b.type, b.project_site` if req.ProjectType == 0 { // 管理员获取项目时,将获取后台所拥有的项目 query = dao.SysUserProjectRelevancy.Ctx(ctx).As("a"). InnerJoin("sys_project as b on a.project_id = b.id"). Fields(fields).Where("a.user_id", userID) } else { // 当请求者为施工人员时,从 bus_construction_user 表中获取其绑定的项目信息 query = dao.BusConstructionUser.Ctx(ctx).As("a"). InnerJoin("sys_project as b on a.project_id = b.id"). Fields(fields).Where("a.phone", phone) } var projectList []*wxAppletModel.SysUserProjectRelevancyListRes if err := query.Scan(&projectList); err != nil { return nil, fmt.Errorf("获取项目列表失败:%w", err) } return &wxApplet.SysUserProjectRelevancySearchRes{ List: projectList, }, nil } // AppReissueACardListFunc 补卡申请列表(目前只会展示缺卡的数据) func (c *appPortController) AppReissueACardListFunc(ctx context.Context, req *wxApplet.AppReissueACardListReq) (res *wxApplet.AppReissueACardListRes, err error) { res, err = service.BusAttendance().AppReissueACardListFunc(ctx, req) return } // AppReissueACardIdFunc 补卡申请ID查询 func (c *appPortController) AppReissueACardIdFunc(ctx context.Context, req *wxApplet.AppReissueACardIdReq) (res *wxApplet.AppReissueACardIdRes, err error) { res, err = service.BusAttendance().AppReissueACardIdFunc(ctx, req) return } // AppCardReplacementApplicationAddFunc 新增补卡申请 func (c *appPortController) AppCardReplacementApplicationAddFunc(ctx context.Context, req *wxApplet.AppCardReplacementApplicationAddReq) (res *wxApplet.AppCardReplacementApplicationAddRes, err error) { r := wxApplet.ReissueACardWxAddReq{} copier.Copy(&r, &req) err = serviceController.BusReissueACard().ReissueACardWxAdd(ctx, &r) return } // AppReplacementCardApplicationRecordFunc 申请人补卡记录(分页) func (c *appPortController) AppReplacementCardApplicationRecordFunc(ctx context.Context, req *wxApplet.AppReplacementCardApplicationRecordReq) (res *wxApplet.AppReplacementCardApplicationRecordRes, err error) { res = new(wxApplet.AppReplacementCardApplicationRecordRes) // 请求 r := wxApplet.ReissueACardWxGetByIdReq{} copier.Copy(&r, &req) // 返回 idFunc, err := serviceController.BusReissueACard().ReissueACardWxGetByIdFunc(ctx, &r) copier.Copy(&res, &idFunc) return } // AppTheTeamLeaderSupplementCardApprovalListFun 班组长补卡审批列表(分页) func (c *appPortController) AppTheTeamLeaderSupplementCardApprovalListFun(ctx context.Context, req *wxApplet.AppTheTeamLeaderSupplementCardApprovalListReq) (res *wxApplet.AppTheTeamLeaderSupplementCardApprovalListRes, err error) { entity := model.AppTheTeamLeaderSupplementCardApprovalRes{} copier.Copy(&entity, &req) entity.Type = "1" res, err = serviceController.BusReissueACard().AppTheTeamLeaderSupplementCardApprovalListFun(ctx, &entity) return } // AppTheTeamLeaderSupplementCardApprovalRecordListFunc 班组长补卡审批记录列表(分页) func (c *appPortController) AppTheTeamLeaderSupplementCardApprovalRecordListFunc(ctx context.Context, req *wxApplet.AppTheTeamLeaderSupplementCardApprovalRecordListReq) (res *wxApplet.AppTheTeamLeaderSupplementCardApprovalListRes, err error) { entity := model.AppTheTeamLeaderSupplementCardApprovalRes{} copier.Copy(&entity, &req) entity.Type = "2" res, err = serviceController.BusReissueACard().AppTheTeamLeaderSupplementCardApprovalListFun(ctx, &entity) return } // AppApprovalRecordDetailsFunc 审批记录详情 func (c *appPortController) AppApprovalRecordDetailsFunc(ctx context.Context, req *wxApplet.AppApprovalRecordDetailsReq) (res *wxApplet.AppApprovalRecordDetailsRes, err error) { res, err = serviceController.BusReissueACard().AppApprovalRecordDetailsFunc(ctx, req) return } // AppForemanApprovalFunc 班组长审批 func (c *appPortController) AppForemanApprovalFunc(ctx context.Context, req *wxApplet.AppForemanApprovalReq) (res *wxApplet.AppForemanApprovalRes, err error) { entity := wxApplet.ReissueACardWxEditTeamReq{} copier.Copy(&entity, &req) err = serviceController.BusReissueACard().ReissueACardWxEditTeam(ctx, &entity) return } // @Title AdministratorApprovalFunc 2024/7/26 15:20:00 // @Description 管理员审批(仅限于管理员操作) // @Auth Cory func (c *appPortController) AdministratorApprovalFunc(ctx context.Context, req *wxApplet.AdministratorApprovalReq) (res *wxApplet.AdministratorApprovalRes, err error) { editReq := system.BusReissueACardEditReq{} copier.Copy(&editReq, &req) err = serviceController.BusReissueACard().Edit(ctx, &editReq) return } // ===========================================安全(HSE)巡检工单=========================================== // ===========================================安全(HSE)巡检工单=========================================== // ===========================================安全(HSE)巡检工单=========================================== // AppManagementAppletListInformFunc 安全巡检工单列表-全部(分页) func (c *appPortController) AppManagementAppletListInformFunc(ctx context.Context, req *wxApplet.AppManagementAppletListInformReq) (res *wxApplet.AppManagementAppletListRes, err error) { res = new(wxApplet.AppManagementAppletListRes) entity := wxApplet.HseManagementAppletListReq{} copier.Copy(&entity, &req) entity.Status = "0" listFunc, err := serviceController.BusHseManagement().HseManagementAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // AppManagementAppletListAbarbeitungFunc 安全巡检工单列表-整改(分页) func (c *appPortController) AppManagementAppletListAbarbeitungFunc(ctx context.Context, req *wxApplet.AppManagementAppletListAbarbeitungReq) (res *wxApplet.AppManagementAppletListRes, err error) { res = new(wxApplet.AppManagementAppletListRes) entity := wxApplet.HseManagementAppletListReq{} copier.Copy(&entity, &req) entity.Status = "1" listFunc, err := serviceController.BusHseManagement().HseManagementAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // AppManagementAppletListReviewFunc 安全巡检工单列表-复查(分页) func (c *appPortController) AppManagementAppletListReviewFunc(ctx context.Context, req *wxApplet.AppManagementAppletListReviewReq) (res *wxApplet.AppManagementAppletListRes, err error) { res = new(wxApplet.AppManagementAppletListRes) entity := wxApplet.HseManagementAppletListReq{} copier.Copy(&entity, &req) entity.Status = "2" listFunc, err := serviceController.BusHseManagement().HseManagementAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // APPAddedDataSecurityForBackgroundUsersFunc APP的后台用户新增安全数据 func (c *appPortController) APPAddedDataSecurityForBackgroundUsersFunc(ctx context.Context, req *wxApplet.APPAddedDataSecurityForBackgroundUsersReq) (res *wxApplet.APPAddedDataSecurityForBackgroundUsersRes, err error) { entity := system.BusHseManagementAddReq{} copier.Copy(&entity, &req) entity.HseManagementAdd = 1 entity.FileTwo = req.File err = serviceController.BusHseManagement().Add(ctx, &entity) return } // APPReviewDataSecurityForBackgroundUsersFunc APP的后台用户复查安全数据 func (c *appPortController) APPReviewDataSecurityForBackgroundUsersFunc(ctx context.Context, req *wxApplet.APPReviewDataSecurityForBackgroundUsersReq) (res *wxApplet.APPReviewDataSecurityForBackgroundUsersRes, err error) { entity := system.EditReviewReq{} copier.Copy(&entity, &req) err = serviceController.BusHseManagement().EditReview(ctx, &entity) return } // ===========================================质量管理=========================================== // ===========================================质量管理=========================================== // ===========================================质量管理=========================================== // AppInspectionTicketAppletListInformFunc 质量管理列表-全部(分页) func (c *appPortController) AppInspectionTicketAppletListInformFunc(ctx context.Context, req *wxApplet.AppInspectionTicketAppletListInformReq) (res *wxApplet.AppInspectionTicketAppletListRes, err error) { res = new(wxApplet.AppInspectionTicketAppletListRes) entity := wxApplet.InspectionTicketAppletListReq{} copier.Copy(&entity, &req) entity.Status = "0" listFunc, err := serviceController.BusInspectionTicket().InspectionTicketAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // AppInspectionTicketAppletListAbarbeitungFunc 质量管理列表-整改(分页) func (c *appPortController) AppInspectionTicketAppletListAbarbeitungFunc(ctx context.Context, req *wxApplet.AppInspectionTicketAppletListAbarbeitungReq) (res *wxApplet.AppInspectionTicketAppletListRes, err error) { res = new(wxApplet.AppInspectionTicketAppletListRes) entity := wxApplet.InspectionTicketAppletListReq{} copier.Copy(&entity, &req) entity.Status = "1" listFunc, err := serviceController.BusInspectionTicket().InspectionTicketAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // AppInspectionTicketAppletListReviewFunc 质量管理列表-复查(分页) func (c *appPortController) AppInspectionTicketAppletListReviewFunc(ctx context.Context, req *wxApplet.AppInspectionTicketAppletListReviewReq) (res *wxApplet.AppInspectionTicketAppletListRes, err error) { res = new(wxApplet.AppInspectionTicketAppletListRes) entity := wxApplet.InspectionTicketAppletListReq{} copier.Copy(&entity, &req) entity.Status = "2" listFunc, err := serviceController.BusInspectionTicket().InspectionTicketAppletListFunc(ctx, &entity) copier.Copy(&res, listFunc) return } // AppQualityDataIsAddedForBackgroundUsersFunc APP的后台用户新增质量数据 func (c *appPortController) AppQualityDataIsAddedForBackgroundUsersFunc(ctx context.Context, req *wxApplet.AppQualityDataIsAddedForBackgroundUsersReq) (res *wxApplet.AppQualityDataIsAddedForBackgroundUsersRes, err error) { entity := system.BusInspectionTicketAddReq{} copier.Copy(&entity, &req) entity.HseManagementAdd = 1 entity.FileTwo = req.File err = serviceController.BusInspectionTicket().Add(ctx, &entity) return } // AppBackgroundUsersReviewQualityDataFunc APP的后台用户复查质量数据 func (c *appPortController) AppBackgroundUsersReviewQualityDataFunc(ctx context.Context, req *wxApplet.AppBackgroundUsersReviewQualityDataReq) (res *wxApplet.AppBackgroundUsersReviewQualityDataRes, err error) { entity := system.BusInspectionTicketVerificationReq{} copier.Copy(&entity, &req) err = serviceController.BusInspectionTicket().EditVerification(ctx, &entity) return } // ===========================================AI=========================================== // ===========================================AI=========================================== // ===========================================AI=========================================== // AppAiInformFunc 选择处理人 func (c *appPortController) AppAiInformFunc(ctx context.Context, req *wxApplet.AppAiInformReq) (res *wxApplet.AppAiInformRes, err error) { err = serviceController.BusViolationRecord().AppAiInformFunc(ctx, req) return } // AppGetsAllThePeopleUnderTheCurrentPersonsProjectFunc 取当前人所在项目下的所有人 func (c *appPortController) AppGetsAllThePeopleUnderTheCurrentPersonsProjectFunc(ctx context.Context, req *wxApplet.AppGetsAllThePeopleUnderTheCurrentPersonsProjectReq) (res *wxApplet.AppGetsAllThePeopleUnderTheCurrentPersonsProjectRes, err error) { res = new(wxApplet.AppGetsAllThePeopleUnderTheCurrentPersonsProjectRes) projectFunc, err := serviceController.BusViolationRecord().AppGetsAllThePeopleUnderTheCurrentPersonsProjectFunc(ctx, req) res = projectFunc return } // AppWorkOrderPcListFunc AI工单列表(根据pc用户主键ID进行分页获取) func (c *appPortController) AppWorkOrderPcListFunc(ctx context.Context, req *wxApplet.AppWorkOrderPcListReq) (res *wxApplet.AppWorkOrderPcListRes, err error) { res = new(wxApplet.AppWorkOrderPcListRes) projectFunc, err := serviceController.BusViolationRecord().AppWorkOrderPcListFunc(ctx, req) res = projectFunc return } // AppWorkOrderAppListFunc AI工单列表(根据App用户主键ID进行分页获取) func (c *appPortController) AppWorkOrderAppListFunc(ctx context.Context, req *wxApplet.AppWorkOrderAppListReq) (res *wxApplet.AppWorkOrderPcListRes, err error) { res = new(wxApplet.AppWorkOrderPcListRes) projectFunc, err := serviceController.BusViolationRecord().AppWorkOrderAppListFunc(ctx, req) res = projectFunc return } // AppRectificationReplyFunc AI整改回复 func (c *appPortController) AppRectificationReplyFunc(ctx context.Context, req *wxApplet.AppRectificationReplyReq) (res *wxApplet.AppRectificationReplyRes, err error) { res = new(wxApplet.AppRectificationReplyRes) err = serviceController.BusViolationRecord().AppRectificationReplyFunc(ctx, req) return } // AppReviewFuncFunc AI复查 func (c *appPortController) AppReviewFuncFunc(ctx context.Context, req *wxApplet.AppReviewReq) (res *wxApplet.AppReviewRes, err error) { res = new(wxApplet.AppReviewRes) req.Operator = ct.New().GetLoginUser(ctx).OpenId err = serviceController.BusViolationRecord().AppReviewFuncFunc(ctx, req) return } // AppWorkOrderParticularsFunc AI工单详情 func (c *appPortController) AppWorkOrderParticularsFunc(ctx context.Context, req *wxApplet.AppWorkOrderParticularsReq) (res *wxApplet.AppWorkOrderParticularsRes, err error) { res = new(wxApplet.AppWorkOrderParticularsRes) particularsFunc, err := serviceController.BusViolationRecord().AppWorkOrderParticularsFunc(ctx, req) res = particularsFunc return } // =========================================== 消息 =========================================== // =========================================== 消息 =========================================== // =========================================== 消息 =========================================== // AppMessageListFunc 消息列表 func (c *appPortController) AppMessageListFunc(ctx context.Context, req *wxApplet.AppMessageListReq) (res *wxApplet.AppMessageListRes, err error) { // 获取用户信息 user := ct.New().GetLoginUser(ctx) res = new(wxApplet.AppMessageListRes) fields := "title,created_at, (SELECT COUNT(*) FROM reminders WHERE is_read = 0 and user_id = '%s' and project_id = %s) AS unread_count" userID := lo.If(req.OpenID != "", user.OpenId).Else(strconv.Itoa(int(user.Id))) // 查询提醒 controllerDao.Reminders.Ctx(ctx).Fields(fmt.Sprintf(fields, userID, req.ProjectId)). Where("is_read", 0). Where("project_id", req.ProjectId). OrderDesc("id"). Where("user_id", userID). Limit(1).Scan(&res.Remind) fields = "content as title,created_at, (SELECT COUNT(*) FROM comment_list WHERE is_read = 0 and receiver = %d and project_id = %s) AS unread_count" controllerDao.CommentList.Ctx(ctx).Fields(fmt.Sprintf(fields, user.Id, req.ProjectId)). Where("is_read", 0). Where("receiver", user.Id). Where("project_id", req.ProjectId). OrderDesc("id"). Limit(1).Scan(&res.Comment) return } // ===========================================人员管理=========================================== // ===========================================人员管理=========================================== // ===========================================人员管理=========================================== // AppChangeThePunchStatusForTheSpecifiedPersonFunc 给指定人更改打卡状态 func (c *appPortController) AppChangeThePunchStatusForTheSpecifiedPersonFunc(ctx context.Context, req *wxApplet.AppChangeThePunchStatusForTheSpecifiedPersonReq) (res *wxApplet.AppChangeThePunchStatusForTheSpecifiedPersonRes, err error) { entity := system.ClockingConditionReq{} copier.Copy(&entity, &req) err = serviceController.BusConstructionUser().ClockingConditionFunc(ctx, &entity) return } // AppSelectAppointProjectAllTeamFunc 获取指定项目所有班组 func (c *appPortController) AppSelectAppointProjectAllTeamFunc(ctx context.Context, req *wxApplet.AppSelectAppointProjectAllTeamReq) (res *wxApplet.AppSelectAppointProjectAllTeamRes, err error) { res = new(wxApplet.AppSelectAppointProjectAllTeamRes) var entity []*wxAppletModel.SysProjectTeamListRes err = dao.SysProjectTeam.Ctx(ctx).Where(dao.SysProjectTeam.Columns().ProjectId, req.ProjectId).Scan(&entity) res.List = entity return } // AppListOfParticipatingUnitsFunc 参建单位列表 func (c *appPortController) AppListOfParticipatingUnitsFunc(ctx context.Context, req *wxApplet.AppListOfParticipatingUnitsReq) (res *wxApplet.AppListOfParticipatingUnitsRes, err error) { res, err = service.BusLabourservice().AppListOfParticipatingUnitsFunc(ctx, req) return } // AppListOfConstructionPersonnelFunc 施工人员列表(分页) func (c *appPortController) AppListOfConstructionPersonnelFunc(ctx context.Context, req *wxApplet.AppListOfConstructionPersonnelReq) (res *wxApplet.AppListOfConstructionPersonnelRes, err error) { res, err = service.BusConstructionUser().AppListOfConstructionPersonnelFunc(ctx, req) return } // AppExitFunc 退场 func (c *appPortController) AppExitFunc(ctx context.Context, req *wxApplet.AppExitReq) (res *wxApplet.AppExitRes, err error) { res = new(wxApplet.AppExitRes) err = serviceController.BusConstructionUser().AppExitFunc(ctx, req) return } // AppResubmitTheExitAttachmentFunc 补交退场附件 func (c *appPortController) AppResubmitTheExitAttachmentFunc(ctx context.Context, req *wxApplet.AppResubmitTheExitAttachmentReq) (res *wxApplet.AppResubmitTheExitAttachmentRes, err error) { res = new(wxApplet.AppResubmitTheExitAttachmentRes) err = serviceController.BusConstructionUser().AppResubmitTheExitAttachmentFunc(ctx, req) return } // AppTeamAttendanceFunc 团队出勤 func (c *appPortController) AppTeamAttendanceFunc(ctx context.Context, req *wxApplet.AppTeamAttendanceReq) (res *wxApplet.AppTeamAttendanceRes, err error) { res, err = service.BusAttendance().AppTeamAttendanceFunc(ctx, req) return } // AppGetsThePeopleUnderTheSpecifiedProjectFunc 获取指定项目下已实名认证或已退出班组的人 func (c *appPortController) AppGetsThePeopleUnderTheSpecifiedProjectFunc(ctx context.Context, req *wxApplet.AppGetsThePeopleUnderTheSpecifiedProjectReq) (res *wxApplet.AppGetsThePeopleUnderTheSpecifiedProjectRes, err error) { res, err = service.BusConstructionUser().AppGetsThePeopleUnderTheSpecifiedProjectFunc(ctx, req) return } // AppJoinATeamFunc 加入指定项目下的指定班组 func (c *appPortController) AppJoinATeamFunc(ctx context.Context, req *wxApplet.AppJoinATeamReq) (res *wxApplet.AppJoinATeamRes, err error) { err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error { err = g.Try(ctx, func(ctx context.Context) { for _, openid := range req.Openids { r := new(wxSystem.SysProjectTeamMemberAddReq) r.Openid = openid r.PostId = 4 copier.Copy(r, req) err = service.SysProjectTeamMember().Add(ctx, r) liberr.ErrIsNil(ctx, err) } }) return err }) return } // AppGetPersonnelDetailsFunc 获取人员详情 func (c *appPortController) AppGetPersonnelDetailsFunc(ctx context.Context, req *wxApplet.AppGetPersonnelDetailsReq) (res *wxApplet.AppGetPersonnelDetailsRes, err error) { res, err = service.BusConstructionUser().AppGetPersonnelDetailsFunc(ctx, req) return } // ===========================================提醒=========================================== // ===========================================提醒=========================================== // ===========================================提醒=========================================== // AIWorkOrderDetailsFunc AI工单详情 func (c *appPortController) AIWorkOrderDetailsFunc(ctx context.Context, req *wxApplet.AIWorkOrderDetailsReq) (res *wxApplet.AIWorkOrderDetailsRes, err error) { res = new(wxApplet.AIWorkOrderDetailsRes) err = g.Try(ctx, func(ctx context.Context) { // 1、获取主体信息 err = g.DB().Model("reminders").As("e"). LeftJoin("bus_violation_record", "a", "a.id = e.order_id"). LeftJoin("sys_dict_data", "b", "b.dict_type = 'tour_type' and b.dict_value = a.tour_type"). LeftJoin("sys_dict_data", "c", "c.dict_type = 'violation_record_data_source' and c.dict_value = a.data_source"). LeftJoin("sys_project", "d", "d.id = a.project_id"). Fields("a.*,b.dict_label as tt,c.dict_label as ds,d.project_name as projectName,e.status"). Where("e.id", req.Id).Scan(&res) liberr.ErrIsNil(ctx, err, "获取当前AI数据失败") if res.Openid != "" { // 获取处理人名称 value, _ := dao.BusConstructionUser.Ctx(ctx).Where("openid", res.Openid).Fields("user_name").Value() res.OpenidName = value.String() } if res.Status == "3" { // 复查人名称 value, _ := g.DB().Model("sys_user").Ctx(ctx).Where("id", res.SelectPeople).Fields("user_nickname").Value() res.ReviewName = value.String() } i2, _ := g.DB().Model("bus_violation_record_correlation").Ctx(ctx). Where("a.record_id", res.Id).As("a"). LeftJoin("sys_user", "b", "b.id = a.user_id"). Fields("b.user_nickname").Array() for i3 := range i2 { // 哪些人可以复查(只需有一个复查就行了) res.SuperintendName = append(res.SuperintendName, i2[i3].String()) } // 2、获取附件 var pathEntity []*model.BusViolationRecordPathLogicRes err = g.DB().Model("bus_violation_record_path").Ctx(ctx).Where("ticket_id", req.Id).Scan(&pathEntity) liberr.ErrIsNil(ctx, err, "查询失败") // 3、分类附件 var one []*model.BusViolationRecordPathLogicRes var two []*model.BusViolationRecordPathLogicRes 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 }) return } // QualityControlDetailsFunc 质量管理详情 func (c *appPortController) QualityControlDetailsFunc(ctx context.Context, req *wxApplet.QualityControlDetailsReq) (res *wxApplet.QualityControlDetailsRes, err error) { res = new(wxApplet.QualityControlDetailsRes) err = g.Try(ctx, func(ctx context.Context) { m := g.DB().Model("reminders").As("e"). LeftJoin("bus_inspection_ticket", "a", "a.id = e.order_id"). LeftJoin("sys_project", "b", "b.id = a.project_id"). LeftJoin("sys_dict_data", "c", "dict_type = 'inspection_type' and dict_value = a.Inspection_type"). LeftJoin(dao.BusConstructionUser.Table(), "d", "d.openid = a.corrector"). Fields( "a.id,b.project_name as projectName," + // 主键ID、项目名称 "c.dict_label," + // 巡检类型 "a.inspection_headline," + // 巡检主题 "a.inspection_result," + // 巡检结果 "d.user_name as abarbeitung," + // 整改人 "a.is_reply,a.reply_date," + // 是否回复、回复时间 "a.created_by as fill,a.created_at," + // 填报人、填报时间 "a.feedback," + // 整改反馈 "a.verification_result," + // 验证结果 "e.status,a.verification_type," + // 工单状态、验证状态 "a.updated_at as updatedAt," + // 更新时间 "a.rectification_time as rectificationTime", // 整改时间 ) err = m.Where("e.id", req.Id).Scan(&res) liberr.ErrIsNil(ctx, err, "查询失败") // 2、获取附件 var pathEntity []*wxApplet.SecurityManagementDetailsPath err = g.DB().Model("bus_inspection_ticket_path").Ctx(ctx).Where("ticket_id", res.Id).Scan(&pathEntity) liberr.ErrIsNil(ctx, err, "查询失败") // 3、分类附件 var one []*wxApplet.SecurityManagementDetailsPath var two []*wxApplet.SecurityManagementDetailsPath for i := range pathEntity { if pathEntity[i].Type == "1" { one = append(one, pathEntity[i]) } else { two = append(two, pathEntity[i]) } } res.Inspectionccessories = one res.CorrectiveAttachment = two // 3、获取 res.Fill = coryCommon.SelectByString(ctx, coryCommon.IsNumeric(res.Fill), res.Fill) }) return } // SecurityManagementDetailsFunc 安全管理详情 func (c *appPortController) SecurityManagementDetailsFunc(ctx context.Context, req *wxApplet.SecurityManagementDetailsReq) (res *wxApplet.SecurityManagementDetailsRes, err error) { res = new(wxApplet.SecurityManagementDetailsRes) err = g.Try(ctx, func(ctx context.Context) { m := g.DB().Model("reminders").As("f"). LeftJoin("bus_hse_management", "a", "a.id = f.order_id"). LeftJoin("sys_project", "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," + // 复查情况 "f.status," + // 工单状态 "a.review_type," + // 复查状态 "a.created_by as fill," + // 复查状态 "a.created_at") // 创建人(检查、复查) err = m.Where("f.id", req.Id).Scan(&res) liberr.ErrIsNil(ctx, err, "查询失败") // 2、获取附件 var pathEntity []*wxApplet.SecurityManagementDetailsPath err = g.DB().Model("bus_hse_management_path").Ctx(ctx).Where("ticket_id", req.Id).Scan(&pathEntity) liberr.ErrIsNil(ctx, err, "查询失败") // 3、分类附件 var one []*wxApplet.SecurityManagementDetailsPath var two []*wxApplet.SecurityManagementDetailsPath 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 } // ===========================================请假=========================================== // ===========================================请假=========================================== // ===========================================请假=========================================== // AppAskForLeaveAdd 务工者-请假新增 func (c *appPortController) AppAskForLeaveAdd(ctx context.Context, req *wxApplet.AppAskForLeaveAddReq) (res *wxApplet.AppBusAskforleaveAddRes, err error) { err = service.BusAskforleave().AppAskForLeaveAdd(ctx, req) return } // AppAskForLeaveListPage 务工者-请假记录列表-分页 func (c *appPortController) AppAskForLeaveListPage(ctx context.Context, req *wxApplet.AppAskForLeaveListPageReq) (res *wxApplet.AppAskForLeaveListPageRes, err error) { return service.BusAskforleave().AppAskForLeaveListPage(ctx, req) } // AppAskForLeaveInfo 务工者-请假详情 func (c *appPortController) AppAskForLeaveInfo(ctx context.Context, req *wxApplet.AppAskForLeaveInfoReq) (res *wxApplet.AppAskForLeaveInfoRes, err error) { return service.BusAskforleave().AppAskForLeaveInfo(ctx, req) } // AppBzzAskForLeaveListPage 班组长-审批 func (c *appPortController) AppBzzAskForLeaveUpdate(ctx context.Context, req *wxApplet.AppBzzAskForLeaveUpdateReq) (res *wxApplet.AppBzzAskForLeaveUpdateRes, err error) { err = service.BusAskforleave().AppBzzAskForLeaveUpdate(ctx, req) return } // ===========================================其它=========================================== // ===========================================其它=========================================== // ===========================================其它=========================================== // AppBase64ToImgFuncFunc 将图片的base64转成png存储到本地,返回相对路径 func (c *appPortController) AppBase64ToImgFuncFunc(ctx context.Context, req *wxApplet.AppBase64ToImgFuncReq) (res *wxApplet.AppBase64ToImgFuncRes, err error) { res = new(wxApplet.AppBase64ToImgFuncRes) path, err := coryCommon.Base64ToImgFunc(req.Base64Str, "1", coryCommon.Helmet) res.Path = "/" + path return } // AppGetLatestAppVersionFunc 获取最新的App版本号 func (c *appPortController) AppGetLatestAppVersionFunc(ctx context.Context, req *wxApplet.GetLatestAppVersionReq) (*wxApplet.GetLatestAppVersionRes, error) { var AppVersionInfo entity.AppVersions err := controllerDao.AppVersions.Ctx(ctx).Fields(entity.AppVersions{}). Where(controllerDao.AppVersions.Columns().Platform, req.Platform). OrderDesc(controllerDao.AppVersions.Columns().Id).Limit(1).Scan(&AppVersionInfo) if err != nil { return nil, err } return &wxApplet.GetLatestAppVersionRes{ Info: AppVersionInfo, }, nil } // AppReleaseAppVersionFunc 发布一个新的版本 func (c *appPortController) AppReleaseAppVersionFunc(ctx context.Context, req *wxApplet.ReleaseAppVersionReq) (*wxApplet.ReleaseAppVersionRes, error) { var ( path, _ = os.Getwd() Version = req.Version plantType = req.Platform ) // 根据平台类型拼接版本号 var devicePlatform string switch plantType { case 0: devicePlatform = "Android" case 1: devicePlatform = "IOS" } // 拼接文件保存路径: 当前路径 + resource + public + version + 版本号 + 平台类型 filePath := filepath.Join(path, "resource", "public", "version", Version, devicePlatform) // 保存到数据库的静态文件托管路径: file + version + 版本号 + 平台类型 + 文件名 savePath := filepath.Join("file", "version", Version, devicePlatform, req.File.Filename) // 检查版本号是否已存在,如果存在则用新版本替换旧版本 var appVersion entity.AppVersions if err := controllerDao.AppVersions.Ctx(ctx).Where(controllerDao.AppVersions.Columns().Version, Version).Where(controllerDao.AppVersions.Columns().Platform, plantType).Scan(&appVersion); err == nil { // 删除旧版本文件 if err := os.RemoveAll(filepath.Join(filePath, filepath.Base(appVersion.FilePath))); err != nil { return nil, fmt.Errorf("删除以往的版本文件失败:%w", err) } // 保存新版本文件 if _, err := req.File.Save(filePath); err != nil { return nil, err } // 更新数据库中的文件路径 if _, err := controllerDao.AppVersions.Ctx(ctx).Data(gdb.Map{controllerDao.AppVersions.Columns().FilePath: savePath}).Where(controllerDao.AppVersions.Columns().Id, appVersion.Id).Update(); err != nil { return nil, err } return &wxApplet.ReleaseAppVersionRes{}, nil } if _, err := req.File.Save(filePath); err != nil { return nil, err } // 构造数据库记录 appVersionInfo := entity.AppVersions{ Version: Version, // 版本号 FilePath: savePath, // 文件路径 Platform: plantType, // 平台类型 } // 保存到数据库 _, err := controllerDao.AppVersions.Ctx(ctx).Data(appVersionInfo).Insert() if err != nil { return nil, err } return &wxApplet.ReleaseAppVersionRes{}, nil }