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,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
}