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,340 @@
// ==========================================================================
// GFast自动生成logic操作代码。
// 生成日期2023-08-15 09:34:52
// 生成路径: internal/app/wxApplet/logic/sys_project_team_member.go
// 生成人gfast
// desc:项目班组下的成员
// company:云南奇讯科技有限公司
// ==========================================================================
package logic
import (
"context"
"errors"
"time"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/util/gconv"
"github.com/samber/lo"
"github.com/tiger1103/gfast/v3/api/wxApplet/wxApplet"
"github.com/tiger1103/gfast/v3/internal/app/system/consts"
sdao "github.com/tiger1103/gfast/v3/internal/app/system/dao"
logic2 "github.com/tiger1103/gfast/v3/internal/app/system/logic/busConstructionUser"
"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"
tool "github.com/tiger1103/gfast/v3/utility/coryUtils"
)
func init() {
service.RegisterSysProjectTeamMember(New())
}
func New() *sSysProjectTeamMember {
return &sSysProjectTeamMember{}
}
type sSysProjectTeamMember struct{}
func (s *sSysProjectTeamMember) List(ctx context.Context, req *wxApplet.SysProjectTeamMemberSearchReq) (listRes *wxApplet.SysProjectTeamMemberSearchRes, err error) {
listRes = new(wxApplet.SysProjectTeamMemberSearchRes)
err = g.Try(ctx, func(ctx context.Context) {
// 获取人员名称
var openids []string
if req.UserName != "" {
values, err := dao.BusConstructionUser.Ctx(ctx).Where("user_name like ?", "%"+req.UserName+"%").Fields("openid").Array()
liberr.ErrIsNil(ctx, err, "获取数据失败")
if len(values) > 0 {
for i := range values {
openids = append(openids, values[i].String())
}
}
}
m := dao.SysProjectTeamMember.Ctx(ctx)
m = m.As("a").
RightJoin("bus_construction_user as b on a.openid = b.openid").
LeftJoin("bus_type_of_wage as c on b.type_of_work = c.type_of_work").
Fields("a.*," +
"b.head_icon," +
"b.nick_name,b.user_name," +
"b.phone," +
"c.standard as original,b.salary")
if req.TeamId != "" {
m = m.Where("a."+dao.SysProjectTeamMember.Columns().TeamId+" = ?", gconv.Int64(req.TeamId))
}
if req.Openid != "" {
m = m.Where("a."+dao.SysProjectTeamMember.Columns().Openid+" = ?", req.Openid)
}
if req.PostId != "" {
m = m.Where("a."+dao.SysProjectTeamMember.Columns().PostId+" = ?", gconv.Int64(req.PostId))
}
if req.IsPcSysUser != "" && (req.IsPcSysUser != "1" || req.IsPcSysUser != "2") {
m = m.Where("b.wx_or_pc", req.IsPcSysUser)
}
if len(openids) > 0 {
m = m.Where("a.openid in (?) ", openids)
}
// 创建时间模糊查询
if req.CreateTime != "" {
date := tool.New().GetFormattedDate(gconv.Time(req.CreateTime))
m = m.Where("a."+dao.SysProjectTeam.Columns().CreateTime+" like ?", "%"+date+"%")
}
if req.CreateTime != "" {
m = m.Where("a."+dao.SysProjectTeamMember.Columns().UpdateTime+" = ?", gconv.Time(req.CreateTime))
}
m = m.Where("`a`.`deleted_at` IS NULL")
m = m.Where("`b`.`deleted_at` IS NULL")
array, err := m.Array()
listRes.Total = len(array)
liberr.ErrIsNil(ctx, err, "获取总行数失败")
if req.PageNum == 0 {
req.PageNum = 1
}
listRes.CurrentPage = req.PageNum
if req.PageSize == 0 {
req.PageSize = consts.PageSize
}
order := "id desc"
if req.OrderBy != "" {
order = req.OrderBy
}
var res []*model.SysProjectTeamMemberInfoRes
err = m.Page(req.PageNum, req.PageSize).Order(order).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取数据失败")
listRes.List = make([]*model.SysProjectTeamMemberListRes, len(res))
for k, v := range res {
// var sj *model.BusConstructionUserInfoRes
// dao.BusConstructionUser.Ctx(ctx).Where("openid", v.Openid).Fields("user_name,nick_name").Scan(&sj)
listRes.List[k] = &model.SysProjectTeamMemberListRes{
Id: v.Id,
TeamId: v.TeamId,
Openid: v.Openid,
PostId: v.PostId,
// HeadIcon: v.HeadIcon,
Phone: v.Phone,
UserName: v.UserName,
NickName: v.NickName,
Original: v.Original,
Salary: v.Salary,
}
}
})
return
}
func (s *sSysProjectTeamMember) GetById(ctx context.Context, id int64) (res *model.SysProjectTeamMemberInfoRes, err error) {
err = g.Try(ctx, func(ctx context.Context) {
err = dao.SysProjectTeamMember.Ctx(ctx).WithAll().Where(dao.SysProjectTeamMember.Columns().Id, id).Scan(&res)
liberr.ErrIsNil(ctx, err, "获取信息失败")
})
return
}
func (s *sSysProjectTeamMember) Add(ctx context.Context, req *wxApplet.SysProjectTeamMemberAddReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
// 1、当前成员已经被添加就不允许再次添加
// count, err := dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Where("openid", req.Openid).Count()
count, err := dao.SysProjectTeamMember.Ctx(ctx).Where("openid", req.Openid).Count()
if count > 0 {
err = errors.New("当前成员已分配组!")
liberr.ErrIsNil(ctx, err)
return
}
// 2、获取当前项目的班组长openid
value, err := dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Where("post_id", "10").Fields("openid").Value()
liberr.ErrIsNil(ctx, err)
originalOpenid := value.String()
if req.PostId == 10 {
// 新增数据如果是组长,那么就将当前组的所有成员修改为组员
_, err = dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Update(g.Map{"post_id": 4})
liberr.ErrIsNil(ctx, err, "新增班组长失败")
}
// 删除班组长这个角色,如果当前用户没得班组长也不影响,不管如何先删再说
if originalOpenid != "" {
err := OpenidByDelFunc(ctx, originalOpenid)
liberr.ErrIsNil(ctx, err, "班组长交接失败")
}
// 新增数据
value, err = dao.SysProjectTeam.Ctx(ctx).WherePri(req.TeamId).Fields("project_id").Value()
_, err = dao.SysProjectTeamMember.Ctx(ctx).Insert(do.SysProjectTeamMember{
TeamId: req.TeamId,
Openid: req.Openid,
PostId: req.PostId,
ProjectId: value,
})
openidValue, err := dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Where("post_id", "10").Fields("openid").Value()
liberr.ErrIsNil(ctx, err)
if openidValue.String() != "" {
err := OpenidByAddFunc(ctx, openidValue.String())
liberr.ErrIsNil(ctx, err)
}
////如果与元原来班组长的补卡申请未处理完毕,那么就由新的班组长接任处理
//_, err = g.DB().Model("bus_reissue_a_card").
// Where("ganger", originalOpenid).
// Where("ganger_opinion", "1").
// Update(g.Map{"ganger": req.Openid})
//liberr.ErrIsNil(ctx, err, "新增失败")
//新增完还得操作一下用户的team_id字段
now := time.Now()
date := tool.New().GetFormattedDateTime(now)
g2 := g.Map{
"team_id": req.TeamId,
"project_id": value,
//"type_of_work": req.TypeOfWork,
//"native_place": req.NativePlace,
"entry_date": date,
"leave_date": "",
}
_, err = dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Update(g2)
liberr.ErrIsNil(ctx, err, "修改失败")
subQuery := g.Model("sys_user").As("su").LeftJoin("bus_construction_user bcu", "bcu.phone = su.mobile").Where("bcu.openid", req.Openid).Fields("su.id")
//user_id := lo.Must(subQuery.Value()).Int()
user_ids, err := subQuery.Value()
liberr.ErrIsNil(ctx, err, "修改失败")
user_id := user_ids.Int()
if req.PostId == 4 { // 删除班组长角色菜单,添加施工人员角色菜单
_, err = sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Where("role_id", 1).Where("major_role", 1).Delete()
liberr.ErrIsNil(ctx, err, "修改失败")
sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Data(g.Map{"role_id": 2, "major_role": 1, "user_id": user_id}).Insert()
} else if req.PostId == 10 { // 添加班组长角色菜单
// 添加班组长角色
_, err = sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Where("role_id", 1).Where("major_role", 1).Delete()
_, err := sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Data(g.Map{"role_id": 1, "major_role": 1, "user_id": user_id}).Insert()
liberr.ErrIsNil(ctx, err, "修改失败")
}
})
return err
})
return
}
func (s *sSysProjectTeamMember) Edit(ctx context.Context, req *wxApplet.SysProjectTeamMemberEditReq) (err error) {
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
err = g.Try(ctx, func(ctx context.Context) {
// 1、新增数据如果是组长那么就将当前组的所有成员修改为组员
value, err := dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Where("post_id", "10").Fields("openid").Value()
originalOpenid := value.String()
if req.PostId == 10 {
_, err = dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Update(g.Map{"post_id": 4})
liberr.ErrIsNil(ctx, err, "修改失败")
}
subQuery := g.Model("sys_user").As("su").LeftJoin("bus_construction_user bcu", "bcu.phone = su.mobile").Where("bcu.openid", req.Openid).Fields("su.id")
user_id := lo.Must(subQuery.Value()).Int()
if req.PostId == 4 { // 删除班组长角色菜单,添加施工人员角色菜单
_, err = sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Where("role_id", 1).Where("major_role", 1).Delete()
liberr.ErrIsNil(ctx, err, "修改失败")
sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Data(g.Map{"role_id": 2, "major_role": 1, "user_id": user_id}).Insert()
} else if req.PostId == 10 { // 添加班组长角色菜单
// 添加班组长角色
_, err = sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Where("role_id", 1).Where("major_role", 1).Delete()
_, err := sdao.AppUserRoles.Ctx(ctx).Where("user_id = ?", user_id).Data(g.Map{"role_id": 1, "major_role": 1, "user_id": user_id}).Insert()
liberr.ErrIsNil(ctx, err, "修改失败")
}
// 2、删除班组长角色不管如何先删再说
if originalOpenid != "" {
err := OpenidByDelFunc(ctx, originalOpenid)
liberr.ErrIsNil(ctx, err, "班组长交接失败")
}
// 3、修改用户信息
value, err = dao.SysProjectTeam.Ctx(ctx).WherePri(req.TeamId).Fields("project_id").Value()
_, err = dao.SysProjectTeamMember.Ctx(ctx).WherePri(req.Id).Update(do.SysProjectTeamMember{
TeamId: req.TeamId,
ProjectId: value,
Openid: req.Openid,
PostId: req.PostId,
})
// 4、查询是否有班组长有就增加班组长角色
openidValue, err := dao.SysProjectTeamMember.Ctx(ctx).Where("team_id", req.TeamId).Where("post_id", "10").Fields("openid").Value()
liberr.ErrIsNil(ctx, err)
if openidValue.String() != "" {
err := OpenidByAddFunc(ctx, openidValue.String())
liberr.ErrIsNil(ctx, err)
}
// 5、如果与原来班组长的补卡申请未处理完毕那么就由新的班组长接任处理
_, err = g.DB().Model("bus_reissue_a_card").
Where("ganger", originalOpenid).
Where("ganger_opinion", "1").
Update(g.Map{"ganger": req.Openid})
liberr.ErrIsNil(ctx, err, "新增失败")
////如果是离场就操作一下施工人员,并且删除成员
//if req.SiteNum == "2" {
// g2 := g.Map{
// "leave_date": tool.New().GetFormattedDateTime(time.Now()),
// "team_id": nil,
// "project_id": nil,
// "if_management": nil,
// }
// _, err = dao.BusConstructionUser.Ctx(ctx).Where("openid", req.Openid).Update(g2)
// //1、查询数据
// value, err := dao.SysProjectTeamMember.Ctx(ctx).WherePri(req.Id).Fields("openid").Value()
// //2、更新数据
// _, err = dao.BusConstructionUser.Ctx(ctx).Where("openid", value.String()).Update(g.Map{"team_id": nil, "if_management": ""})
// liberr.ErrIsNil(ctx, err, "删除失败")
// //3、删除成员
// _, err = dao.SysProjectTeamMember.Ctx(ctx).Delete(dao.SysProjectTeamMember.Columns().Id+" = ", req.Id)
// liberr.ErrIsNil(ctx, err, "删除失败")
//}
liberr.ErrIsNil(ctx, err, "修改失败")
})
return err
})
return
}
// OpenidByDelFunc 根据openid查询用户删除班组长角色
func OpenidByDelFunc(ctx context.Context, openid string) error {
v, err := dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, openid).Fields("id").Value()
_, err = g.DB().Model("sys_wechat_user_role").Ctx(ctx).
Where("user_id", v).
Where("role_id = 4").
Delete("user_id", v)
return err
}
// OpenidByAddFunc 根据openid查询用户增加班组长角色
func OpenidByAddFunc(ctx context.Context, openid string) error {
// 根据openid去获取到微信用户的主键ID
v, err := dao.BusConstructionUser.Ctx(ctx).Where(dao.BusConstructionUser.Columns().Openid, openid).Fields("id").Value()
liberr.ErrIsNil(ctx, err)
// 给当前用户追加班组长角色
var roleIds []int64
roleIds = append(roleIds, 4)
err = logic2.InsertRoleModuleFunc(ctx, roleIds, v.Int64())
return err
}
// 删除先不用给干掉
func (s *sSysProjectTeamMember) Delete(ctx context.Context, ids []int64) (err error) {
//err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
// //err = g.Try(ctx, func(ctx context.Context) {
// // for _, dataId := range ids {
// // //1、查询数据
// // value, err := dao.SysProjectTeamMember.Ctx(ctx).WherePri(dataId).Fields("openid").Value()
// // //2、更新数据
// // g2 := g.Map{
// // "leave_date": tool.New().GetFormattedDateTime(time.Now()),
// // "team_id": nil,
// // "if_management": nil,
// // }
// // _, err = dao.BusConstructionUser.Ctx(ctx).Where("openid", value.String()).Update(g2)
// // liberr.ErrIsNil(ctx, err, "删除失败")
// // }
// // //3、删除成员
// // _, err = dao.SysProjectTeamMember.Ctx(ctx).Delete(dao.SysProjectTeamMember.Columns().Id+" in (?)", ids)
// // liberr.ErrIsNil(ctx, err, "删除失败")
// //})
// //return err
//})
return err
}