初始
This commit is contained in:
701
internal/app/system/logic/busReissueACard/bus_reissue_a_card.go
Normal file
701
internal/app/system/logic/busReissueACard/bus_reissue_a_card.go
Normal file
@ -0,0 +1,701 @@
|
||||
// ==========================================================================
|
||||
// GFast自动生成logic操作代码。
|
||||
// 生成日期:2024-02-02 15:18:48
|
||||
// 生成路径: internal/app/system/logic/bus_reissue_a_card.go
|
||||
// 生成人:gfast
|
||||
// desc:施工人员补卡申请
|
||||
// company:云南奇讯科技有限公司
|
||||
// ==========================================================================
|
||||
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"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"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/consts"
|
||||
"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/do"
|
||||
"github.com/tiger1103/gfast/v3/internal/app/system/service"
|
||||
wxDao "github.com/tiger1103/gfast/v3/internal/app/wxApplet/dao"
|
||||
wxModel "github.com/tiger1103/gfast/v3/internal/app/wxApplet/model"
|
||||
"github.com/tiger1103/gfast/v3/library/liberr"
|
||||
"github.com/tiger1103/gfast/v3/third/todo"
|
||||
)
|
||||
|
||||
func init() {
|
||||
service.RegisterBusReissueACard(New())
|
||||
}
|
||||
|
||||
func New() *sBusReissueACard {
|
||||
return &sBusReissueACard{}
|
||||
}
|
||||
|
||||
type sBusReissueACard struct{}
|
||||
|
||||
//func (s *sBusReissueACard) AdministratorApprovalFunc(ctx context.Context, req *wxApplet.AdministratorApprovalReq) (res *wxApplet.AdministratorApprovalRes, err error) {
|
||||
// //TODO implement me
|
||||
// panic("implement me")
|
||||
//}
|
||||
|
||||
func (s *sBusReissueACard) AppApprovalRecordDetailsFunc(ctx context.Context, req *wxApplet.AppApprovalRecordDetailsReq) (res *wxApplet.AppApprovalRecordDetailsRes, err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
// 1、获取打卡数据
|
||||
err := dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Scan(&res)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
if res == nil {
|
||||
return
|
||||
}
|
||||
// 2、获取申请补卡人信息
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).
|
||||
Where(dao.BusConstructionUser.Columns().Openid, res.Openid).
|
||||
Fields("user_name").Value()
|
||||
res.UserName = value.String()
|
||||
// 3、获取当前申请补卡人所在项目
|
||||
sql := `SELECT GROUP_CONCAT(( SELECT project_name FROM sys_project WHERE id = ` + strconv.FormatInt(res.ProjectId, 10) + ` ),"-",( SELECT name FROM sys_project_team WHERE id = ` + strconv.FormatInt(res.TeamId, 10) + ` ) ) AS a`
|
||||
v1, _ := g.DB().GetValue(ctx, sql)
|
||||
res.ProjectWhereYouWork = v1.String()
|
||||
// 4、获取班组长的信息
|
||||
if res.GangerOpinion != "1" && res.Ganger != "" {
|
||||
var bzzEntity *model.BusConstructionUserInfoRes
|
||||
err = dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, res.Ganger).
|
||||
Fields("user_name,pace_photo").Scan(&bzzEntity)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
res.GangerHead = bzzEntity.PacePhoto
|
||||
res.GangerName = bzzEntity.UserName
|
||||
}
|
||||
// 5、获取管理员的信息
|
||||
if res.ManagerOpinion != "1" && res.UpdateBy != "" {
|
||||
type gly struct {
|
||||
Avatar string `json:"avatar" dc:"头像"`
|
||||
UserNickname string `json:"userNickname" dc:"昵称"`
|
||||
}
|
||||
var glyEntity *gly
|
||||
err = dao.SysUser.Ctx(ctx).Where(dao.SysUser.Columns().Id, res.UpdateBy).
|
||||
Fields("user_nickname,avatar").Scan(&glyEntity)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
flag := isHttpPath(glyEntity.Avatar)
|
||||
if !flag && glyEntity.Avatar != "" {
|
||||
glyEntity.Avatar = "/file/" + glyEntity.Avatar
|
||||
}
|
||||
res.ManagerHead = glyEntity.Avatar
|
||||
res.ManagerName = glyEntity.UserNickname
|
||||
}
|
||||
// 6、 两个未读=待审核,一个同意=审核中,一个拒绝=拒绝,两个同意=已同意
|
||||
if res.GangerOpinion == "1" && res.ManagerOpinion == "1" {
|
||||
res.CardMode = "待审核"
|
||||
res.CardNumber = "1"
|
||||
}
|
||||
if res.GangerOpinion == "2" || res.ManagerOpinion == "2" {
|
||||
res.CardMode = "审核中"
|
||||
res.CardNumber = "2"
|
||||
}
|
||||
if res.GangerOpinion == "3" || res.ManagerOpinion == "3" {
|
||||
res.CardMode = "已拒绝"
|
||||
res.CardNumber = "3"
|
||||
}
|
||||
if res.GangerOpinion == "2" && res.ManagerOpinion == "2" {
|
||||
res.CardMode = "已同意"
|
||||
res.CardNumber = "4"
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func isHttpPath(path string) bool {
|
||||
return strings.HasPrefix(path, "http://") || strings.HasPrefix(path, "https://")
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) AppTheTeamLeaderSupplementCardApprovalListFun(ctx context.Context, req *model.AppTheTeamLeaderSupplementCardApprovalRes) (listRes *wxApplet.AppTheTeamLeaderSupplementCardApprovalListRes, err error) {
|
||||
listRes = new(wxApplet.AppTheTeamLeaderSupplementCardApprovalListRes)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).
|
||||
Where(dao.BusConstructionUser.Columns().Openid, req.Openid).Fields("team_id").Value()
|
||||
// 1、去获取班组的班组长是否是当前openid
|
||||
if value.String() != "" && value.String() != "0" {
|
||||
count, _ := wxDao.SysProjectTeamMember.Ctx(ctx).
|
||||
Where("team_id", value.String()).
|
||||
Where("post_id", 10).
|
||||
Where("openid", req.Openid).Count()
|
||||
if count == 0 {
|
||||
err = errors.New("请联系管理员,将您设置为班组长!")
|
||||
}
|
||||
} else {
|
||||
err = errors.New("您还未加入班组!")
|
||||
}
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
// 2、查询主体数据
|
||||
m := dao.BusReissueACard.Ctx(ctx).
|
||||
As("a").
|
||||
LeftJoin("bus_construction_user", "b", "a.openid=b.openid").
|
||||
Fields("a.id,a.scope,a.explain,a.ganger_opinion,a.manager_opinion,a.ganger_time as ganger_time,a.created_at as createdAt,b.head_icon,b.user_name").
|
||||
Where("a.team_id", value.String())
|
||||
if req.Type == "1" {
|
||||
m = m.Where("a.ganger_opinion = 1")
|
||||
}
|
||||
if req.Type == "2" {
|
||||
m = m.Where("a.ganger_opinion = 2 ")
|
||||
}
|
||||
if req.YearAndMonth != "" {
|
||||
m = m.Where("DATE_FORMAT(a.created_at,'%Y-%m-%d') = ?", req.YearAndMonth)
|
||||
}
|
||||
if len(req.DateRange) != 0 {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().CreatedAt+" >=? AND "+"a."+dao.BusReissueACard.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.created_at desc"
|
||||
if req.OrderBy != "" {
|
||||
order = req.OrderBy
|
||||
}
|
||||
var wbraclr []*model.AppTheTeamLeaderSupplementCardApprovalList
|
||||
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&wbraclr)
|
||||
liberr.ErrIsNil(ctx, err, "获取数据失败")
|
||||
for i := range wbraclr {
|
||||
|
||||
// 两个未读=待审核,一个同意=审核中,一个拒绝=拒绝,两个同意=已同意
|
||||
if wbraclr[i].GangerOpinion == "1" {
|
||||
wbraclr[i].CardMode = "待审核"
|
||||
wbraclr[i].CardNumber = "1"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "2" {
|
||||
wbraclr[i].CardMode = "已同意"
|
||||
wbraclr[i].CardNumber = "4"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "3" {
|
||||
wbraclr[i].CardMode = "已拒绝"
|
||||
wbraclr[i].CardNumber = "3"
|
||||
}
|
||||
}
|
||||
listRes.List = wbraclr
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) JobForemanSumnumberFunc(ctx context.Context, req *wxApplet.JobForemanSumnumberReq) (number int, err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).
|
||||
Where(dao.BusConstructionUser.Columns().Openid, req.Openid).Fields("team_id").Value()
|
||||
if value.String() != "" && value.String() != "0" {
|
||||
number, err = dao.BusReissueACard.Ctx(ctx).Where("team_id", value.String()).Where("ganger_opinion = 1").Count()
|
||||
liberr.ErrIsNil(ctx, err, "获取总数失败")
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) ReissueACardWxEditTeam(ctx context.Context, req *wxApplet.ReissueACardWxEditTeamReq) (err error) {
|
||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
// 获取当前数据的班组,然后根据班组获取到班组长的openid
|
||||
var aCard model.BusReissueACardInfoRes
|
||||
err := dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Fields("id,openid,team_id,project_id").Scan(&aCard)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
fields, err := wxDao.SysProjectTeamMember.Ctx(ctx).
|
||||
Where("team_id", aCard.TeamId).
|
||||
Where("post_id", 10).
|
||||
Fields("openid").Value()
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
if fields.String() == "" {
|
||||
err = errors.New("变更失败,申请人所在的班组未设置班组长")
|
||||
return
|
||||
}
|
||||
UpdateG2 := g.Map{"ganger": fields, "ganger_opinion": req.GangerOpinion, "ganger_explain": req.GangerExplain, "ganger_time": gtime.Now()}
|
||||
if req.GangerOpinion == "3" {
|
||||
UpdateG2["attendance_id"] = nil
|
||||
}
|
||||
// 变更班组长对补卡的状态,并且填写班组长的openid
|
||||
_, err = dao.BusReissueACard.Ctx(ctx).OmitEmpty().WherePri(req.Id).Update(UpdateG2)
|
||||
liberr.ErrIsNil(ctx, err, "变更班组长失败")
|
||||
// 标记特定的待办任务为已处理
|
||||
err = todo.MarkTaskAsProcessed(int(req.Id))
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
if req.GangerOpinion == "3" {
|
||||
_, err = dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Update(g.Map{"attendance_id": nil})
|
||||
liberr.ErrIsNil(ctx, err, "修改失败")
|
||||
return
|
||||
}
|
||||
// 然后将数据提交给管理员操作
|
||||
ids, err := GetAdministrator(ctx, aCard.ProjectId)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
if len(ids) == 0 {
|
||||
liberr.ErrIsNil(ctx, errors.New("当前项目暂无后台管理人员可以进行审批,需要联系管理人员解决!"))
|
||||
return
|
||||
}
|
||||
var listReissueReminder []todo.ReissueReminder
|
||||
for i := range ids {
|
||||
listReissueReminder = append(listReissueReminder, todo.ReissueReminder{
|
||||
UserID: strconv.Itoa(int(ids[i])),
|
||||
Role: 0,
|
||||
ProjectID: int(aCard.ProjectId),
|
||||
CreatorID: aCard.Openid,
|
||||
TargetID: int(aCard.Id),
|
||||
})
|
||||
}
|
||||
err = todo.CreateAttendanceApprovalGroup(listReissueReminder, todo.AttendanceApproval)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
})
|
||||
return err
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// @Title getAdministrator 2024/7/29 14:11:00
|
||||
// @Description 获取所有的管理员
|
||||
// @Auth Cory
|
||||
// @param 输入参数名 ---> "参数解释"
|
||||
// @Return error ---> "错误信息"
|
||||
func GetAdministrator(ctx context.Context, projectId int64) (ids []int64, err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
array, err := g.DB().Model("sys_user_project_relevancy").Ctx(ctx).Where("project_id", projectId).Fields("user_id").Array()
|
||||
//array, err := dao.SysUser.Ctx(ctx).Unscoped().Where("project_id", projectId)
|
||||
liberr.ErrIsNil(ctx, err, "获取管理员失败")
|
||||
for i := range array {
|
||||
ids = append(ids, array[i].Int64())
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) ReissueACardWxGetByIdTeam(ctx context.Context, req *wxApplet.ReissueACardWxGetByIdTeamReq) (listRes *wxApplet.ReissueACardWxGetByIdTeamRes, err error) {
|
||||
listRes = new(wxApplet.ReissueACardWxGetByIdTeamRes)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
// 1、获取当前用户所在班组
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).
|
||||
Where(dao.BusConstructionUser.Columns().Openid, req.Openid).Fields("team_id").Value()
|
||||
// 2、去获取班组的班组长是否是当前openid
|
||||
if value.String() != "" && value.String() != "0" {
|
||||
count, _ := wxDao.SysProjectTeamMember.Ctx(ctx).
|
||||
Where("team_id", value.String()).
|
||||
Where("post_id", 10).
|
||||
Where("openid", req.Openid).Count()
|
||||
if count == 0 {
|
||||
err = errors.New("请联系管理员,将您设置为班组长!")
|
||||
}
|
||||
} else {
|
||||
err = errors.New("您还未加入班组!")
|
||||
}
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
// 3、根据班组ID去获取申请补卡的数据
|
||||
m := dao.BusReissueACard.Ctx(ctx).
|
||||
As("a").
|
||||
LeftJoin("bus_construction_user", "b", "a.openid=b.openid").
|
||||
Fields("a.*,b.head_icon,b.user_name").
|
||||
Where("a.team_id", value.String())
|
||||
if len(req.DateRange) != 0 {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().CreatedAt+" >=? AND "+"a."+dao.BusReissueACard.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.manager_opinion asc,a.id desc"
|
||||
if req.OrderBy != "" {
|
||||
order = req.OrderBy
|
||||
}
|
||||
var wbraclr []*model.WxBusReissueACardListRes
|
||||
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&wbraclr)
|
||||
liberr.ErrIsNil(ctx, err, "获取数据失败")
|
||||
for i := range wbraclr {
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Fields("user_name").Value()
|
||||
wbraclr[i].GangerName = value.String()
|
||||
// 两个未读=待审核,一个同意=审核中,一个拒绝=拒绝,两个同意=已同意
|
||||
if wbraclr[i].GangerOpinion == "1" {
|
||||
wbraclr[i].CardMode = "待审核"
|
||||
wbraclr[i].CardNumber = "1"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "2" {
|
||||
wbraclr[i].CardMode = "已同意"
|
||||
wbraclr[i].CardNumber = "4"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "3" {
|
||||
wbraclr[i].CardMode = "已拒绝"
|
||||
wbraclr[i].CardNumber = "3"
|
||||
}
|
||||
}
|
||||
listRes.List = wbraclr
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) ReissueACardWxGetByIdFunc(ctx context.Context, req *wxApplet.ReissueACardWxGetByIdReq) (listRes *wxApplet.ReissueACardWxGetByIdRes, err error) {
|
||||
listRes = new(wxApplet.ReissueACardWxGetByIdRes)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
//value, _ := dao.BusConstructionUser.Ctx(ctx).
|
||||
// Where(dao.BusConstructionUser.Columns().Openid, req.Openid).Fields("team_id").Value()
|
||||
//if value.String() == "" || value.String() == "0" {
|
||||
// return
|
||||
//}
|
||||
m := dao.BusReissueACard.Ctx(ctx).As("a").
|
||||
LeftJoin("bus_construction_user", "b", "a.openid=b.openid").
|
||||
Fields("a.*,b.head_icon,b.user_name").
|
||||
Where("a."+dao.BusReissueACard.Columns().Openid, req.Openid)
|
||||
if len(req.DateRange) != 0 {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().CreatedAt+" >=? AND "+"a."+dao.BusReissueACard.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.created_at desc"
|
||||
if req.OrderBy != "" {
|
||||
order = req.OrderBy
|
||||
}
|
||||
var wbraclr []*model.WxBusReissueACardListRes
|
||||
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&wbraclr)
|
||||
liberr.ErrIsNil(ctx, err, "获取数据失败")
|
||||
for i := range wbraclr {
|
||||
// 获取项目+班组
|
||||
sql := `SELECT GROUP_CONCAT(( SELECT project_name FROM sys_project WHERE id = ` + strconv.FormatInt(wbraclr[i].ProjectId, 10) + ` ),"-",( SELECT name FROM sys_project_team WHERE id = ` + strconv.FormatInt(wbraclr[i].TeamId, 10) + ` ) ) AS a`
|
||||
v, _ := g.DB().GetValue(ctx, sql)
|
||||
wbraclr[i].ProjectWhereYouWork = v.String()
|
||||
// 获取用户姓名
|
||||
value, _ := dao.BusConstructionUser.Ctx(ctx).Where("openid", wbraclr[i].Ganger).Fields("user_name").Value()
|
||||
wbraclr[i].GangerName = value.String()
|
||||
// 两个未读=待审核,一个同意=审核中,一个拒绝=拒绝,两个同意=已同意
|
||||
if wbraclr[i].GangerOpinion == "1" && wbraclr[i].ManagerOpinion == "1" {
|
||||
wbraclr[i].CardMode = "待审核"
|
||||
wbraclr[i].CardNumber = "1"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "2" || wbraclr[i].ManagerOpinion == "2" {
|
||||
wbraclr[i].CardMode = "审核中"
|
||||
wbraclr[i].CardNumber = "2"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "3" || wbraclr[i].ManagerOpinion == "3" {
|
||||
wbraclr[i].CardMode = "已拒绝"
|
||||
wbraclr[i].CardNumber = "3"
|
||||
}
|
||||
if wbraclr[i].GangerOpinion == "2" && wbraclr[i].ManagerOpinion == "2" {
|
||||
wbraclr[i].CardMode = "已同意"
|
||||
wbraclr[i].CardNumber = "4"
|
||||
}
|
||||
}
|
||||
listRes.List = wbraclr
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) ReissueACardWxAdd(ctx context.Context, req *wxApplet.ReissueACardWxAddReq) (err error) {
|
||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
// 新增数据只获取到班组的ID,具体班组长是谁,要等班组长同意了过后才知道(此逻辑可以防止班组长变更,数据还在上一个班组长那里)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
// 1、根据openid获取到当前小程序用户所在班组的班组长
|
||||
var busUser *model.BusConstructionUserInfoRes
|
||||
err := dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Fields("project_id,team_id").Scan(&busUser)
|
||||
liberr.ErrIsNil(ctx, err, "添加失败")
|
||||
if busUser == nil || busUser.TeamId == 0 {
|
||||
liberr.ErrIsNil(ctx, err, "请先加入班组!")
|
||||
}
|
||||
// 3、创建补卡申请信息
|
||||
info, err := dao.BusReissueACard.Ctx(ctx).OmitEmpty().Insert(do.BusReissueACard{
|
||||
Openid: req.Openid,
|
||||
Scope: req.Scope,
|
||||
Explain: req.Explain,
|
||||
Type: req.Type,
|
||||
// Ganger: gangerOpenid,
|
||||
ProjectId: busUser.ProjectId,
|
||||
TeamId: busUser.TeamId,
|
||||
AttendanceId: req.AttendanceId,
|
||||
})
|
||||
liberr.ErrIsNil(ctx, err, "添加失败")
|
||||
aId, _ := strconv.Atoi(req.AttendanceId)
|
||||
// 标记特定的待办任务为已处理
|
||||
err = todo.MarkTaskAsProcessed(aId)
|
||||
if err != nil {
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
return
|
||||
}
|
||||
// 4、发布一条考勤审批提醒
|
||||
keyId, _ := info.LastInsertId()
|
||||
openidVal, err := wxDao.SysProjectTeamMember.Ctx(ctx).
|
||||
Where("team_id", busUser.TeamId).
|
||||
Where("post_id", 10).
|
||||
Fields("openid").Value()
|
||||
if openidVal.String() == "" || err != nil {
|
||||
liberr.ErrIsNil(ctx, errors.New("当前班组未发现班组长职位"))
|
||||
return
|
||||
}
|
||||
var listReissueReminder []todo.ReissueReminder
|
||||
listReissueReminder = append(listReissueReminder, todo.ReissueReminder{
|
||||
UserID: openidVal.String(),
|
||||
Role: 1,
|
||||
ProjectID: int(busUser.ProjectId),
|
||||
CreatorID: req.Openid,
|
||||
TargetID: int(keyId),
|
||||
})
|
||||
err = todo.CreateAttendanceApprovalGroup(listReissueReminder, todo.AttendanceApproval)
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
})
|
||||
return err
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) List(ctx context.Context, req *system.BusReissueACardSearchReq) (listRes *system.BusReissueACardSearchRes, err error) {
|
||||
listRes = new(system.BusReissueACardSearchRes)
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
values, err2 := dao.BusConstructionUser.Ctx(ctx).Where("user_name like ?", "%"+req.Name+"%").Fields("openid").Array()
|
||||
liberr.ErrIsNil(ctx, err2)
|
||||
m := dao.BusReissueACard.Ctx(ctx).WithAll().As("a").
|
||||
LeftJoin("bus_construction_user", "b", "a.openid=b.openid").
|
||||
LeftJoin("sys_project", "c", "c.id=b.project_id").
|
||||
LeftJoin("sys_project_team", "d", "d.id=b.team_id").
|
||||
Fields("a.*,b.user_name,c.project_name,d.name as team_name")
|
||||
if req.Name != "" {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().Openid+" in (?)", values)
|
||||
}
|
||||
if req.ProjectId > 0 {
|
||||
m = m.Where("a.project_id", req.ProjectId)
|
||||
}
|
||||
if req.TeamId > 0 {
|
||||
m = m.Where("a.team_id", req.TeamId)
|
||||
}
|
||||
if req.ManagerOpinion != "" {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().ManagerOpinion+" = ?", req.ManagerOpinion)
|
||||
}
|
||||
if len(req.DateRange) != 0 {
|
||||
m = m.Where("a."+dao.BusReissueACard.Columns().CreatedAt+" >=? AND "+"a."+dao.BusReissueACard.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 := "id desc"
|
||||
if req.OrderBy != "" {
|
||||
order = req.OrderBy
|
||||
}
|
||||
var res []*model.BusReissueACardInfoRes
|
||||
err = m.Fields(system.BusReissueACardSearchRes{}).Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
|
||||
liberr.ErrIsNil(ctx, err, "获取数据失败")
|
||||
listRes.List = make([]*model.BusReissueACardListRes, len(res))
|
||||
for k, v := range res {
|
||||
cardMode := ""
|
||||
cardNumber := ""
|
||||
if v.GangerOpinion == "1" && v.ManagerOpinion == "1" {
|
||||
cardMode = "待审核"
|
||||
cardNumber = "1"
|
||||
}
|
||||
if v.GangerOpinion == "2" || v.ManagerOpinion == "2" {
|
||||
cardMode = "审核中"
|
||||
cardNumber = "2"
|
||||
}
|
||||
if v.GangerOpinion == "3" || v.ManagerOpinion == "3" {
|
||||
cardMode = "已拒绝"
|
||||
cardNumber = "3"
|
||||
}
|
||||
if v.GangerOpinion == "2" && v.ManagerOpinion == "2" {
|
||||
cardMode = "已同意"
|
||||
cardNumber = "4"
|
||||
}
|
||||
|
||||
listRes.List[k] = &model.BusReissueACardListRes{
|
||||
Id: v.Id,
|
||||
Openid: v.Openid,
|
||||
Scope: v.Scope,
|
||||
Explain: v.Explain,
|
||||
Ganger: v.Ganger,
|
||||
GangerOpinion: v.GangerOpinion,
|
||||
GangerExplain: v.GangerExplain,
|
||||
GangerTime: v.GangerTime,
|
||||
ManagerOpinion: v.ManagerOpinion,
|
||||
ManagerExplain: v.ManagerExplain,
|
||||
UpdateBy: v.UpdateBy,
|
||||
CreatedAt: v.CreatedAt,
|
||||
UpdatedAt: v.UpdatedAt,
|
||||
ProjectId: v.ProjectId,
|
||||
TeamId: v.TeamId,
|
||||
UserName: v.UserName,
|
||||
ProjectName: v.ProjectName,
|
||||
TeamName: v.TeamName,
|
||||
CardMode: cardMode,
|
||||
CardNumber: cardNumber,
|
||||
}
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) GetById(ctx context.Context, id int64) (res *model.BusReissueACardInfoRes, err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
err = dao.BusReissueACard.Ctx(ctx).WithAll().Where(dao.BusReissueACard.Columns().Id, id).Scan(&res)
|
||||
by := coryCommon.New().CreateByOrUpdateBy(ctx, res)
|
||||
infoRes := by.(model.BusReissueACardInfoRes)
|
||||
res = &infoRes
|
||||
liberr.ErrIsNil(ctx, err, "获取信息失败")
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) Add(ctx context.Context, req *system.BusReissueACardAddReq) (err error) {
|
||||
//err = g.Try(ctx, func(ctx context.Context) {
|
||||
// //判断当前人是否有加入项目及班组,如果没有无法进行补卡申请
|
||||
// var entity *model.BusConstructionUserInfoRes
|
||||
// dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Fields("project_id,team_id").Scan(&entity)
|
||||
// if entity == nil || entity.ProjectId == 0 || entity.TeamId == 0 {
|
||||
// err = errors.New("未检查到您有加入项目及班组,无法进入补卡流程!")
|
||||
// liberr.ErrIsNil(ctx, err)
|
||||
// return
|
||||
// }
|
||||
// _, err = dao.BusReissueACard.Ctx(ctx).Insert(do.BusReissueACard{
|
||||
// Openid: req.Openid,
|
||||
// Scope: req.Scope,
|
||||
// Explain: req.Explain,
|
||||
// Ganger: req.Ganger,
|
||||
// GangerOpinion: req.GangerOpinion,
|
||||
// GangerExplain: req.GangerExplain,
|
||||
// GangerTime: req.GangerTime,
|
||||
// ManagerOpinion: req.ManagerOpinion,
|
||||
// ManagerExplain: req.ManagerExplain,
|
||||
// })
|
||||
// liberr.ErrIsNil(ctx, err, "添加失败")
|
||||
//})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) Edit(ctx context.Context, req *system.BusReissueACardEditReq) (err error) {
|
||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
|
||||
// 1、更改打卡记录
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
_, err = dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Update(do.BusReissueACard{
|
||||
ManagerOpinion: req.ManagerOpinion,
|
||||
ManagerExplain: req.ManagerExplain,
|
||||
UpdateBy: ct.New().GetLoginUser(ctx).Id,
|
||||
})
|
||||
liberr.ErrIsNil(ctx, err, "修改失败")
|
||||
})
|
||||
// 2、查询打卡记录
|
||||
var br *model.BusReissueACardInfoRes
|
||||
err = dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Scan(&br)
|
||||
liberr.ErrIsNil(ctx, err, "修改失败")
|
||||
// 3、判断是否都同意,都同意就修改考勤打卡的数据
|
||||
if br.GangerOpinion == "2" && br.ManagerOpinion == "2" {
|
||||
split := strings.Split(br.Scope, ",")
|
||||
scope := br.Scope[0:10]
|
||||
var balr []*wxModel.BusAttendanceListRes
|
||||
sql := g.DB().Model("bus_attendance").
|
||||
Where("openid", br.Openid).
|
||||
Where("printing_date", scope)
|
||||
if br.Type != "3" {
|
||||
sql = sql.Where("commuter", br.Type)
|
||||
}
|
||||
err = sql.Scan(&balr)
|
||||
liberr.ErrIsNil(ctx, err, "补卡失败,请稍后从试")
|
||||
if len(balr) > 0 {
|
||||
for i := range balr {
|
||||
if balr[i].Commuter == "1" {
|
||||
_, err = g.DB().Model("bus_attendance").
|
||||
WherePri(balr[i].Id).
|
||||
Where("commuter = 1").
|
||||
Update(g.Map{"clock_on": split[0], "is_pinch": 5})
|
||||
liberr.ErrIsNil(ctx, err, "补卡失败,请稍后从试")
|
||||
} else {
|
||||
var timeStr string
|
||||
if len(split) > 2 {
|
||||
timeStr = split[1]
|
||||
} else {
|
||||
timeStr = split[0]
|
||||
}
|
||||
_, err = g.DB().Model("bus_attendance").
|
||||
WherePri(balr[i].Id).
|
||||
Where("commuter = 2").
|
||||
Update(g.Map{"clock_on": timeStr, "is_pinch": 5})
|
||||
liberr.ErrIsNil(ctx, err, "补卡失败,请稍后从试")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 获取此次打卡的日薪
|
||||
vl, err := dao.BusConstructionUser.Ctx(ctx).As("a").
|
||||
LeftJoin("bus_type_of_wage as f on a.type_of_work = f.type_of_work").
|
||||
Fields("if (a.salary>0, a.salary,f.standard) as salary").
|
||||
Where("a.openid", br.Openid).Value()
|
||||
liberr.ErrIsNil(ctx, err, "获取薪资错误,补卡失败")
|
||||
// 名字、项目id、打卡时间、打卡日期、5补卡、openid、上班or下班
|
||||
name, err := dao.BusConstructionUser.Ctx(ctx).Where("openid", br.Openid).Fields("user_name").Value()
|
||||
liberr.ErrIsNil(ctx, err, "补卡失败,请稍后从试")
|
||||
scope := br.Scope[0:10]
|
||||
timeStr := strings.Split(br.Scope, ",")
|
||||
var attendance []*wxModel.BusAttendanceListRes
|
||||
one := wxModel.BusAttendanceListRes{
|
||||
UserName: name.String(),
|
||||
ProjectId: br.ProjectId,
|
||||
ClockOn: timeStr[0],
|
||||
PrintingDate: scope,
|
||||
IsPinch: "5",
|
||||
Openid: br.Openid,
|
||||
Commuter: "1",
|
||||
DailyWage: vl.Float64(),
|
||||
}
|
||||
two := wxModel.BusAttendanceListRes{
|
||||
UserName: name.String(),
|
||||
ProjectId: br.ProjectId,
|
||||
ClockOn: timeStr[1],
|
||||
PrintingDate: scope,
|
||||
IsPinch: "5",
|
||||
Openid: br.Openid,
|
||||
Commuter: "2",
|
||||
DailyWage: vl.Float64(),
|
||||
}
|
||||
attendance = append(attendance, &one, &two)
|
||||
_, err = g.DB().Model("bus_attendance").OmitEmpty().Ctx(ctx).Insert(attendance)
|
||||
liberr.ErrIsNil(ctx, err, "补卡失败,请稍后从试")
|
||||
}
|
||||
//批量同意
|
||||
err2 := todo.MarkTasksAsProcessedByUUID(req.Id)
|
||||
liberr.ErrIsNil(ctx, err2)
|
||||
} else {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
_, err = dao.BusReissueACard.Ctx(ctx).WherePri(req.Id).Update(g.Map{"attendance_id": nil})
|
||||
liberr.ErrIsNil(ctx, err, "修改失败")
|
||||
// 标记特定的待办任务为已处理
|
||||
err = todo.MarkTaskAsProcessed(int(req.Id))
|
||||
liberr.ErrIsNil(ctx, err)
|
||||
})
|
||||
}
|
||||
return err
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
func (s *sBusReissueACard) Delete(ctx context.Context, ids []int64) (err error) {
|
||||
err = g.Try(ctx, func(ctx context.Context) {
|
||||
_, err = dao.BusReissueACard.Ctx(ctx).Delete(dao.BusReissueACard.Columns().Id+" in (?)", ids)
|
||||
liberr.ErrIsNil(ctx, err, "删除失败")
|
||||
})
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user