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,406 @@
// ==========================================================================
// GFast自动生成logic操作代码。
// 生成日期2025-03-27 14:14:25
// 生成路径: internal/app/wxApplet/logic/bus_askforleave.go
// 生成人gfast
// desc:请假
// company:云南奇讯科技有限公司
// ==========================================================================
package logic
import (
"context"
"errors"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/gconv"
"github.com/tiger1103/gfast/v3/api/wxApplet/wxApplet"
"github.com/tiger1103/gfast/v3/internal/app/system/consts"
sysDao "github.com/tiger1103/gfast/v3/internal/app/system/dao"
logic "github.com/tiger1103/gfast/v3/internal/app/system/logic/busReissueACard"
ct "github.com/tiger1103/gfast/v3/internal/app/system/logic/context"
"github.com/tiger1103/gfast/v3/internal/app/wxApplet/dao"
"github.com/tiger1103/gfast/v3/internal/app/wxApplet/model"
"github.com/tiger1103/gfast/v3/internal/app/wxApplet/model/do"
"github.com/tiger1103/gfast/v3/internal/app/wxApplet/service"
"github.com/tiger1103/gfast/v3/library/liberr"
"github.com/tiger1103/gfast/v3/third/todo"
"strconv"
)
func init() {
service.RegisterBusAskforleave(New())
}
func New() *sBusAskforleave {
return &sBusAskforleave{}
}
type sBusAskforleave struct{}
func (s *sBusAskforleave) AppBzzAskForLeaveUpdate(ctx context.Context, req *wxApplet.AppBzzAskForLeaveUpdateReq) (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.BusAskforleaveInfoRes
err := dao.BusAskforleave.Ctx(ctx).WherePri(req.Id).Fields("id,openid,team_id,project_id").Scan(&aCard)
liberr.ErrIsNil(ctx, err)
fields, err := dao.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.BusAskforleave.Ctx(ctx).OmitEmpty().WherePri(req.Id).Update(UpdateG2)
liberr.ErrIsNil(ctx, err, "变更班组长失败")
// 标记特定的待办任务为已处理
err = todo.MarkTaskAsProcessed(int(req.Id))
// 然后将数据提交给管理员操作
ids, err := logic.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.ApprovalReminder)
liberr.ErrIsNil(ctx, err)
})
return err
})
return
}
func (s *sBusAskforleave) AppAskForLeaveInfo(ctx context.Context, req *wxApplet.AppAskForLeaveInfoReq) (res *wxApplet.AppAskForLeaveInfoRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
err = dao.BusAskforleave.Ctx(ctx).WithAll().As("a").
LeftJoin(dao.BusConstructionUser.Table(), "b", "b.openid = a.openid").
Fields("a.*,b.user_name").
Where("a."+dao.BusAskforleave.Columns().Id, req.Id).
Scan(&res)
// 获取班组长的名称和管理员名称
if res.Ganger != "" {
var busUser *model.BusConstructionUserInfoRes
err = dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, res.Ganger).Fields("user_name").Scan(&busUser)
liberr.ErrIsNil(ctx, err)
res.GangerName = busUser.UserName
}
if res.Manager != "" {
var busUser *model.BusConstructionUserInfoRes
err = sysDao.SysUser.Ctx(ctx).Where(sysDao.SysUser.Columns().Id, res.Manager).Fields("user_nickname").Scan(&busUser)
liberr.ErrIsNil(ctx, err)
res.ManagerName = busUser.UserName
}
liberr.ErrIsNil(ctx, err, "获取信息失败")
})
return
}
func (s *sBusAskforleave) AppAskForLeaveListPage(ctx context.Context, req *wxApplet.AppAskForLeaveListPageReq) (listRes *wxApplet.AppAskForLeaveListPageRes, err error) {
listRes = new(wxApplet.AppAskForLeaveListPageRes)
err = g.Try(ctx, func(ctx context.Context) {
m := dao.BusAskforleave.Ctx(ctx).WithAll().As("a").
LeftJoin(dao.BusConstructionUser.Table(), "b", "b.openid = a.openid")
if req.Openid != "" {
m = m.Where("a."+dao.BusAskforleave.Columns().Openid+" = ?", req.Openid)
}
if req.ProjectId != "" {
m = m.Where("a."+dao.BusAskforleave.Columns().ProjectId+" = ?", gconv.Int64(req.ProjectId))
}
if req.TeamId != "" {
m = m.Where("a."+dao.BusAskforleave.Columns().TeamId+" = ?", gconv.Int64(req.TeamId))
}
if len(req.DateRange) != 0 {
m = m.Where("a."+dao.BusAskforleave.Columns().CreatedAt+" >=? AND "+"a."+dao.BusAskforleave.Columns().CreatedAt+" <=?", req.DateRange[0], req.DateRange[1])
}
listRes.Total, err = m.Count()
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
}
var res []*model.BusAskforleaveListAppRes
err = m.Fields("a.*,b.user_name").Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取数据失败")
listRes.List = res
})
return
}
func (s *sBusAskforleave) AppAskForLeaveAdd(ctx context.Context, req *wxApplet.AppAskForLeaveAddReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
// 1、根据openid获取到当前小程序用户所在班组的班组长
var busUser *model.BusConstructionUserInfoRes
err := dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, req.Openid).Fields("project_id,team_id").Scan(&busUser)
liberr.ErrIsNil(ctx, err, "添加失败")
if busUser == nil || busUser.TeamId == 0 {
liberr.ErrIsNil(ctx, err, "请先加入班组!")
}
//2、获取项目名称、班组名称
columnsP := sysDao.SysProject.Columns()
valueP, projectNameErr := sysDao.SysProject.Ctx(ctx).Where(columnsP.Id, busUser.ProjectId).Fields(columnsP.ProjectName).Value()
liberr.ErrIsNil(ctx, projectNameErr, "获取项目失败")
columnsT := dao.SysProjectTeam.Columns()
valueT, teamNameErr := dao.SysProjectTeam.Ctx(ctx).Where(columnsT.Id, busUser.TeamId).Fields(columnsT.Name).Value()
liberr.ErrIsNil(ctx, teamNameErr, "获取班组失败")
// 判断当前请假的时间是否重复请假
count, err := dao.BusAskforleave.Ctx(ctx).
Where(dao.BusAskforleave.Columns().ProjectId, busUser.ProjectId).
Where(dao.BusAskforleave.Columns().Openid, req.Openid).
Where("("+
"DATE_FORMAT(start_time,'%Y-%m-%d') BETWEEN DATE_FORMAT(?,'%Y-%m-%d') AND DATE_FORMAT(?,'%Y-%m-%d')"+
" or "+
"DATE_FORMAT(end_time,'%Y-%m-%d') BETWEEN DATE_FORMAT(?,'%Y-%m-%d') AND DATE_FORMAT(?,'%Y-%m-%d')"+
")", req.StartTime, req.EndTime, req.StartTime, req.EndTime).Count()
liberr.ErrIsNil(ctx, err)
if count > 0 {
liberr.ErrIsNil(ctx, errors.New("当前请假时间重复"))
return
}
//3、插入请假数据
info, err := dao.BusAskforleave.Ctx(ctx).Insert(do.BusAskforleave{
ProjectId: busUser.ProjectId,
ProjectName: valueP.String(),
TeamId: busUser.TeamId,
TeamName: valueT.String(),
StartTime: req.StartTime,
EndTime: req.EndTime,
Argument: req.Argument,
Openid: req.Openid,
CreateBy: ct.New().GetLoginUser(ctx).Id,
})
liberr.ErrIsNil(ctx, err, "添加失败")
//4、发送审批
keyId, _ := info.LastInsertId()
openidVal, err := dao.SysProjectTeamMember.Ctx(ctx).
Where(dao.SysProjectTeamMember.Columns().TeamId, busUser.TeamId).
Where(dao.SysProjectTeamMember.Columns().PostId, 10).
Fields(dao.SysProjectTeamMember.Columns().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.ApprovalReminder)
//err = todo.CreateAskForLeaveReminder(openidVal.String(), int(busUser.ProjectId), req.Openid, int(keyId))
liberr.ErrIsNil(ctx, err)
})
return err
})
return err
}
func (s *sBusAskforleave) List(ctx context.Context, req *wxApplet.BusAskforleaveSearchReq) (listRes *wxApplet.BusAskforleaveSearchRes, err error) {
listRes = new(wxApplet.BusAskforleaveSearchRes)
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.BusAskforleave.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")
if req.Name != "" {
m = m.Where("a."+dao.BusAskforleave.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.BusAskforleave.Columns().ManagerOpinion+" = ?", req.ManagerOpinion)
}
if len(req.LeaveDateRange) != 0 {
m = m.Where("date(a.start_time) <= ? AND date(a.end_time) >= ?", req.LeaveDateRange[0], req.LeaveDateRange[1])
}
if len(req.DateRange) != 0 {
m = m.Where("a."+dao.BusAskforleave.Columns().CreatedAt+" >=? AND "+"a."+dao.BusAskforleave.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.BusAskforleaveInfoRes
err = m.Fields(wxApplet.BusAskforleaveSearchRes{}).Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取数据失败")
listRes.List = make([]*model.BusAskforleaveListRes, 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.BusAskforleaveListRes{
Id: v.Id,
ProjectId: v.ProjectId,
ProjectName: v.ProjectName,
TeamId: v.TeamId,
TeamName: v.TeamName,
StartTime: v.StartTime,
EndTime: v.EndTime,
Argument: v.Argument,
Ganger: v.Ganger,
GangerOpinion: v.GangerOpinion,
GangerExplain: v.GangerExplain,
GangerTime: v.GangerTime,
Manager: v.Manager,
ManagerOpinion: v.ManagerOpinion,
ManagerExplain: v.ManagerExplain,
ManagerTime: v.ManagerTime,
CreateBy: v.CreateBy,
UpdateBy: v.UpdateBy,
CreatedAt: v.CreatedAt,
Remark: v.Remark,
CardMode: cardMode,
CardNumber: cardNumber,
UserName: v.UserName,
}
}
})
return
}
func (s *sBusAskforleave) GetById(ctx context.Context, id int64) (res *model.BusAskforleaveInfoRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
err = dao.BusAskforleave.Ctx(ctx).WithAll().As("a").
LeftJoin("bus_construction_user", "b", "a.openid=b.openid").
Fields("a.*,b.user_name").
Where("a."+dao.BusAskforleave.Columns().Id, id).Scan(&res)
if res != nil {
cardMode := ""
cardNumber := ""
if res.GangerOpinion == "1" && res.ManagerOpinion == "1" {
cardMode = "待审核"
cardNumber = "1"
}
if res.GangerOpinion == "2" || res.ManagerOpinion == "2" {
cardMode = "审核中"
cardNumber = "2"
}
if res.GangerOpinion == "3" || res.ManagerOpinion == "3" {
cardMode = "已拒绝"
cardNumber = "3"
}
if res.GangerOpinion == "2" && res.ManagerOpinion == "2" {
cardMode = "已同意"
cardNumber = "4"
}
res.CardMode = cardMode
res.CardNumber = cardNumber
}
liberr.ErrIsNil(ctx, err, "获取信息失败")
})
return
}
func (s *sBusAskforleave) Add(ctx context.Context, req *wxApplet.BusAskforleaveAddReq) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusAskforleave.Ctx(ctx).Insert(do.BusAskforleave{
ProjectId: req.ProjectId,
ProjectName: req.ProjectName,
TeamId: req.TeamId,
TeamName: req.TeamName,
StartTime: req.StartTime,
EndTime: req.EndTime,
Argument: req.Argument,
Ganger: req.Ganger,
GangerOpinion: req.GangerOpinion,
GangerExplain: req.GangerExplain,
GangerTime: req.GangerTime,
Manager: req.Manager,
ManagerOpinion: req.ManagerOpinion,
ManagerExplain: req.ManagerExplain,
ManagerTime: req.ManagerTime,
CreateBy: req.CreateBy,
UpdateBy: req.UpdateBy,
Remark: req.Remark,
})
liberr.ErrIsNil(ctx, err, "添加失败")
})
return
}
func (s *sBusAskforleave) Edit(ctx context.Context, req *wxApplet.BusAskforleaveEditReq) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusAskforleave.Ctx(ctx).WherePri(req.Id).Update(do.BusAskforleave{
ManagerOpinion: req.ManagerOpinion,
ManagerExplain: req.ManagerExplain,
UpdateBy: ct.New().GetLoginUser(ctx).Id,
})
liberr.ErrIsNil(ctx, err, "修改失败")
//批量同意
err2 := todo.MarkTasksAsProcessedByUUID(req.Id)
liberr.ErrIsNil(ctx, err2)
})
return
}
func (s *sBusAskforleave) Delete(ctx context.Context, ids []int64) (err error) {
err = g.Try(ctx, func(ctx context.Context) {
_, err = dao.BusAskforleave.Ctx(ctx).Delete(dao.BusAskforleave.Columns().Id+" in (?)", ids)
liberr.ErrIsNil(ctx, err, "删除失败")
})
return
}