fonchain-fiee/pkg/service/account/account.go

2990 lines
73 KiB
Go
Raw Normal View History

2025-02-19 06:24:15 +00:00
package account
import (
"context"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"encoding/base64"
"errors"
"fmt"
"github.com/fonchain_enterprise/fonchain-main/api/account"
"github.com/fonchain_enterprise/fonchain-main/api/department"
"github.com/fonchain_enterprise/fonchain-main/api/e_card"
"github.com/fonchain_enterprise/fonchain-main/api/employee"
"github.com/fonchain_enterprise/fonchain-main/api/position"
"github.com/fonchain_enterprise/fonchain-main/api/rule"
"github.com/fonchain_enterprise/fonchain-main/pkg/config"
"github.com/fonchain_enterprise/fonchain-main/pkg/e"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/dto"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/login"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/query"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/request"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/union"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/vo"
"github.com/fonchain_enterprise/fonchain-main/pkg/model/vo/turnstile"
"github.com/fonchain_enterprise/fonchain-main/pkg/serializer"
"github.com/fonchain_enterprise/fonchain-main/pkg/service"
"github.com/fonchain_enterprise/fonchain-main/pkg/utils/secret"
"github.com/fonchain_enterprise/utils/objstorage"
"github.com/fonchain_enterprise/utils/utils"
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
uuid "github.com/satori/go.uuid"
"net/http"
"net/url"
"strconv"
"time"
)
// UserRegister 用户注册操作
func UserRegister(c *gin.Context) {
var req union.User
var res *account.RequestStatus
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err, res := UserRegisters(c, req)
if err != nil && err.Error() == "账号已存在" && req.Source == "exam" {
handleExistingAccountForExam(c, req)
service.Success(c, &res)
return
}
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
func handleExistingAccountForExam(c *gin.Context, req union.User) {
var Tel account.UsersByTelRequest
var res account.RequestStatus
// 初始化 Tels 切片
Tel.Tels = make([]string, 1)
// 赋值
Tel.Tels[0] = req.TelNum
// 查询用户信息
telRes, _ := service.AccountProvider.UsersByTel(c, &Tel)
// 更新 res 对象
res.ID = telRes.Data[0].ID
res.Status = "success"
// 返回成功响应
service.Success(c, &res)
return
}
func UserRegisters(c *gin.Context, req union.User) (err error, res *account.RequestStatus) {
if req.Avatar == "" {
req.Avatar = "https://dci-file-new.bj.bcebos.com/fonchain-main/test/runtime/image/avatar/40/b8ed6fea-6662-416d-8bb3-1fd8a8197061.jpg"
}
if req.Source == "exam" {
req.PositionUsers = []*position.PositionUser{
{
DepartmentName: "考试管理",
PositionName: "学员",
},
}
req.Password = e.DEFAULT_PWD
}
//账号服务
registRequest := account.RegistRequest{
Domain: req.Domain,
NickName: req.NickName,
TelNum: req.TelNum,
Password: req.Password,
JobNum: req.JobNum,
Status: req.Status,
Avatar: req.Avatar,
EnterDate: req.EnterDate,
Extend: &account.Extend{JumpTo: req.JumpTo},
RecentImg: req.RecentImg,
Source: req.Source,
}
if req.Operator != nil {
registRequest.Operator = req.Operator
}
res, err = service.AccountProvider.Register(c, &registRequest)
if err != nil {
return err, res
}
if len(req.PositionUsers) <= 0 {
return nil, res
}
//岗位服务 绑定岗位
positionReq := &position.BindUserRequest{
Domain: req.Domain,
UserID: res.ID,
UserName: req.NickName,
Avatar: req.Avatar,
PositionUsers: req.PositionUsers,
}
var err1 error // 声明 err1 变量
if len(req.PositionUsers) > 0 && req.PositionUsers[0].DepartmentName != "" && req.PositionUsers[0].PositionName != "" {
_, err1 = service.PositionProvider.BindUserForName(c, positionReq)
} else {
_, err1 = service.PositionProvider.BindUser(c, positionReq)
}
if err1 != nil {
return err1, res
}
return err, res
}
// RefreshToken token
func RefreshToken(c *gin.Context) {
var jumpToWhere = "setting"
var isDriverAuth = false
var isDriverSupervisorAuth = false
var req account.RefreshTokenRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
req.Ip = c.ClientIP()
res, err := service.AccountProvider.RefreshToken(context.Background(), &req)
if err != nil {
c.JSON(e.Success, serializer.Response{
Code: 201,
Status: 1,
Msg: err.Error(),
Data: nil,
})
c.Abort()
return
}
//获取用户的岗位信息
uReq := rule.RulesRequest{
AccountID: res.AccountInfo.ID,
}
qres, err1 := service.RuleProvider.UserInfo(c, &uReq)
if err1 != nil {
service.Error(c, e.Error, err1)
return
}
if len(qres.PositionUsers) >= 1 {
isDriverAuth = isHaveDriverAuth(c, res.AccountInfo.ID, qres.PositionUsers[0].DepartmentId)
isDriverSupervisorAuth = isHaveDriverSupervisorAuth(c, res.AccountInfo.ID, qres.PositionUsers[0].DepartmentId)
}
accountInfo := &union.AccountInfo{
ID: res.AccountInfo.ID,
Account: res.AccountInfo.Account,
NickName: res.AccountInfo.NickName,
Domain: res.AccountInfo.Domain,
TelNum: res.AccountInfo.TelNum,
Status: res.AccountInfo.Status,
Avatar: res.AccountInfo.Avatar,
CreatedAt: res.AccountInfo.CreateAt,
IsNeedChange: res.AccountInfo.IsNeedChange,
EnterDate: res.AccountInfo.EnterDate,
WorkYear: res.AccountInfo.WorkYear,
IsAdmin: qres.IsAdmin,
PositionUsers: qres.PositionUsers,
JumpTo: res.AccountInfo.Extend.JumpTo,
DepartmentName: "",
JobNum: res.AccountInfo.JobNum,
BirthDate: res.AccountInfo.BirthDate,
Age: res.AccountInfo.Age,
Sex: res.AccountInfo.Sex,
Title: res.AccountInfo.Title,
IDNum: res.AccountInfo.IDNum,
DriverAuth: isDriverAuth,
DriverSupervisorAuth: isDriverSupervisorAuth,
}
code := "xxx"
if len(qres.PositionUsers) >= 1 {
accountInfo.DepartmentName = qres.PositionUsers[0].DepartmentName
code = secret.GetPositionCode(qres.PositionUsers[0].PositionName)
}
token, err := secret.CombineSecret(code, accountInfo.DepartmentName, res.Token)
if err != nil {
service.Error(c, e.Error, err)
return
}
ruleUrlReq := rule.FindRuleByUrlRequest{
AccountID: accountInfo.ID,
Type: "menu",
Domain: accountInfo.Domain,
Url: "/home",
Method: "*",
}
ruleInfo, ruleErr := service.RuleProvider.FindUserRule(c, &ruleUrlReq)
if ruleInfo.IsPass == true {
jumpToWhere = "home"
}
if ruleErr != nil {
service.Error(c, e.Error, ruleErr)
return
}
resInfo := &union.Login{
Token: token,
RefreshToken: res.RefreshToken,
AccountInfo: accountInfo,
JumpToWhere: jumpToWhere,
}
service.Success(c, resInfo)
return
}
// Offline 下线
func Offline(c *gin.Context) {
intStr := c.DefaultQuery("id", "0")
intNum, err := strconv.Atoi(intStr)
if err != nil {
service.Error(c, e.Error, err)
return
}
req := account.CommonRequest{
ID: uint64(intNum),
}
res, err := service.AccountProvider.OffLine(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// OnlineInfoById 获取登陆信息
func OnlineInfoById(c *gin.Context) {
intStr := c.DefaultQuery("id", "0")
id, err := strconv.Atoi(intStr)
if err != nil {
service.Error(c, e.Error, err)
return
}
req := account.OnlineLogByIdRequest{
ID: uint64(id),
}
res, err := service.AccountProvider.OnlineLogById(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// OnlineInfos 用户登录操作
func OnlineInfos(c *gin.Context) {
intStr := c.DefaultQuery("UserId", "0")
id, err := strconv.Atoi(intStr)
if err != nil {
service.Error(c, e.Error, err)
return
}
req := account.LoginInfosByUserIdRequest{
UserId: uint64(id),
}
res, err := service.AccountProvider.OnlineLog(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// SendMsg 用户登录操作
func SendMsg(c *gin.Context) {
var req account.SendMsgRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
req.SignNo = uint32(config.DefaultSignNo)
res, err := service.AccountProvider.SendMsg(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// CheckMsg 验证码是否正确
func CheckMsg(c *gin.Context) {
var req account.CheckMsgRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.CheckMsg(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
func UserLogout(c *gin.Context) {
req := account.DecryptJwtRequest{}
//获取jwt
authorization := c.GetHeader(e.Authorization)
if authorization == "" {
service.Error(c, e.Error, errors.New("请求数据为空,请直接重新登录"))
return
}
jwt, err := secret.GetJwtFromStr(authorization)
if err != nil {
service.Error(c, e.Error, err, "解析秘钥失败")
return
}
req.Token = jwt
//退出登陆
res, err := service.AccountProvider.Logout(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// UserLogin 用户登录操作
func UserLogin(c *gin.Context) {
var jumpToWhere = "setting"
var isDriverAuth = false
var isDriverSupervisorAuth = false
var req account.LoginRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
req.Ip = c.ClientIP()
res, err := service.AccountProvider.Login(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
//获取用户的岗位信息
uReq := rule.RulesRequest{
AccountID: res.AccountInfo.ID,
}
qres, err1 := service.RuleProvider.UserInfo(c, &uReq)
if err1 != nil {
service.Error(c, e.Error, err1)
return
}
if len(qres.PositionUsers) >= 1 {
isDriverAuth = isHaveDriverAuth(c, res.AccountInfo.ID, qres.PositionUsers[0].DepartmentId)
isDriverSupervisorAuth = isHaveDriverSupervisorAuth(c, res.AccountInfo.ID, qres.PositionUsers[0].DepartmentId)
}
accountInfo := &union.AccountInfo{
ID: res.AccountInfo.ID,
Account: res.AccountInfo.Account,
NickName: res.AccountInfo.NickName,
Domain: res.AccountInfo.Domain,
TelNum: res.AccountInfo.TelNum,
Status: res.AccountInfo.Status,
Avatar: res.AccountInfo.Avatar,
CreatedAt: res.AccountInfo.CreateAt,
IsNeedChange: res.AccountInfo.IsNeedChange,
EnterDate: res.AccountInfo.EnterDate,
WorkYear: res.AccountInfo.WorkYear,
IsAdmin: qres.IsAdmin,
PositionUsers: qres.PositionUsers,
JumpTo: res.AccountInfo.Extend.JumpTo,
DepartmentName: "",
JobNum: res.AccountInfo.JobNum,
BirthDate: res.AccountInfo.BirthDate,
Age: res.AccountInfo.Age,
Sex: res.AccountInfo.Sex,
Title: res.AccountInfo.Title,
IDNum: res.AccountInfo.IDNum,
DriverAuth: isDriverAuth,
DriverSupervisorAuth: isDriverSupervisorAuth,
MailAccount: res.AccountInfo.MailAccount,
Train: res.AccountInfo.Train,
Certificate: res.AccountInfo.Certificate,
TrainVideos: res.AccountInfo.TrainVideos,
}
code := "xxx"
if len(qres.PositionUsers) >= 1 {
accountInfo.DepartmentName = qres.PositionUsers[0].DepartmentName
code = secret.GetPositionCode(qres.PositionUsers[0].PositionName)
}
token, err := secret.CombineSecret(code, accountInfo.DepartmentName, res.Token)
if err != nil {
service.Error(c, e.Error, err)
return
}
ruleUrlReq := rule.FindRuleByUrlRequest{
AccountID: accountInfo.ID,
Type: "menu",
Domain: accountInfo.Domain,
Url: "/home",
Method: "*",
}
ruleInfo, ruleErr := service.RuleProvider.FindUserRule(c, &ruleUrlReq)
if ruleInfo.IsPass == true {
jumpToWhere = "home"
}
if ruleErr != nil {
service.Error(c, e.Error, ruleErr)
return
}
resInfo := &union.Login{
Token: token,
RefreshToken: res.RefreshToken,
AccountInfo: accountInfo,
JumpToWhere: jumpToWhere,
}
fmt.Println("是否相同:", res.IsSampleAddress, res.AccountInfo.NowLogId)
if res.IsSampleAddress == false && res.AccountInfo.NowLogId != 0 { //登陆地址异常
url := fmt.Sprintf("https://erpapi.fontree.cn/off7524164487E?id=%d", res.AccountInfo.NowLogId)
shortUrl, err := utils.CreateShortUrl(url)
if err == nil {
url = shortUrl
}
msgReq := account.SendCustomMsgRequest{
ID: res.AccountInfo.ID,
TelNum: res.AccountInfo.TelNum,
MId: 134802,
SigNo: uint32(config.DefaultSignNo),
}
msgReq.Url = res.NowAddress + "|" + url
fmt.Println("发送短信", msgReq)
service.AccountProvider.SendCustomMsg(c, &msgReq)
}
service.Success(c, resInfo)
return
}
// Authentication 用户实名认证操作
func Authentication(c *gin.Context) {
//创建一个UserLoginService对象
var req account.AuthenticationRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
authorization := c.GetHeader(e.Authorization)
jwt, err := secret.GetJwtFromStr(authorization)
if err != nil {
service.Error(c, e.Error, err, "解析秘钥失败")
return
}
req.Token = jwt
res, err := service.AccountProvider.Authentication(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
func List(c *gin.Context) {
//创建一个UserLoginService对象
var req account.ListRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.List(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
//查询部门
puRequest := &rule.PositionUserListRequest{}
puRes, err := service.RuleProvider.PositionUserList(c, puRequest)
if err != nil {
service.Error(c, e.Error, err)
return
}
if len(puRes.Data) > 0 {
for index, t := range res.Data {
var departments []*account.Department
var positions []*account.PositionUser
md := make(map[uint64]bool)
mp := make(map[uint64]bool)
for _, tt := range puRes.Data {
if tt.UserId == t.ID {
if _, ok := md[tt.DepartmentId]; !ok {
temp := &account.Department{
ID: tt.DepartmentId,
Name: tt.DepartmentName,
}
departments = append(departments, temp)
md[tt.DepartmentId] = true
}
if _, ok := mp[tt.PositionID]; !ok {
temp := &account.PositionUser{
PositionID: tt.PositionID,
PositionName: tt.PositionName,
}
positions = append(positions, temp)
md[tt.PositionID] = true
}
}
}
res.Data[index].Departments = departments
res.Data[index].Positions = positions
}
}
/* ES 操作 */
//go es.BulkIndexAccountInfo(es.OaIndex)
/* ES 操作 */
service.Success(c, res)
return
}
// PrivacyInfo 获取私密信息
func PrivacyInfo(c *gin.Context) {
//创建一个UserLoginService对象
var req account.PrivacyInfoRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.PrivacyInfo(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// Remove 用户删除
func Remove(c *gin.Context) {
//创建一个UserLoginService对象
var req account.RemoveRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.Remove(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
//岗位删除
positionReq := &position.RemoveUserRequest{
Domain: req.Domain,
ID: req.ID,
}
_, err1 := service.PositionProvider.RemoveUser(c, positionReq)
if err1 != nil {
service.Error(c, e.Error, err1)
return
}
//部门删除
DepartmentReq := &department.RemoveUserRequest{
Domain: req.Domain,
LeaderID: req.ID,
}
_, err2 := service.DepartmentProvider.RemoveUser(c, DepartmentReq)
if err2 != nil {
service.Error(c, e.Error, err2)
return
}
service.Success(c, res)
}
// BaseInfo 用户信息
func BaseInfo(c *gin.Context) {
//创建一个UserLoginService对象
var req account.InfoRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.Info(context.Background(), &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
func NowInfo(c *gin.Context) {
//创建一个UserLoginService对象
userInfo := login.GetUserInfoFromC(c)
user, err := GetUserInfoById(c, userInfo.ID, userInfo.Domain)
if err != nil {
service.Error(c, e.InvalidParams, err)
return
}
service.Success(c, user)
return
}
func Info(c *gin.Context) {
//创建一个UserLoginService对象
var req account.InfoRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
user, err := GetUserInfoById(c, req.ID, req.Domain)
if err != nil {
service.Error(c, e.InvalidParams, err)
return
}
service.Success(c, user)
return
}
// Update 用户更新信息
func Update(c *gin.Context) {
//创建一个UserLoginService对象
var req union.User
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
//账号服务
var updateReq = account.UpdateRequest{
ID: req.ID,
Domain: req.Domain,
NickName: req.NickName,
Password: req.Password,
TelNum: req.TelNum,
Avatar: req.Avatar,
Status: req.Status,
EnterDate: req.EnterDate,
JobNum: req.JobNum,
BirthDate: req.BirthDate,
Sex: req.Sex,
Title: req.Title,
LeftDate: req.LeftDate,
Remark: req.Remark,
RecentImg: req.RecentImg,
ICNum: req.ICNum,
Extend: req.Extend,
Train: req.Train,
Certificate: req.Certificate,
Operator: &account.Operator{
ID: 0,
Name: "人员管理",
},
}
if req.JumpTo != "" {
if updateReq.Extend == nil {
updateReq.Extend = &account.Extend{}
}
updateReq.Extend.JumpTo = req.JumpTo
}
user, err := GetUserInfoById(c, req.ID, req.Domain)
if err != nil {
service.Error(c, e.InvalidParams, err)
return
}
_, err = service.AccountProvider.Update(context.Background(), &updateReq)
if err != nil {
service.Error(c, e.Error, err)
return
}
//必须替换岗位
if req.PositionUsers != nil && len(req.PositionUsers) > 0 {
positionReq := &position.BindUserRequest{
Domain: req.Domain,
UserID: req.ID,
UserName: req.NickName,
Avatar: req.Avatar,
PositionUsers: req.PositionUsers,
}
_, err1 := service.PositionProvider.BindUser(c, positionReq)
if err1 != nil {
service.Error(c, e.Error, err1)
return
}
}
if req.RecentImg != "" && req.RecentImg != user.RecentImg {
_, _ = service.GrpcEmployeeProvider.UpdateEmployeeFile(c, &employee.UpdateEmployeeFileRequest{
UserId: user.ID,
RecentImg: req.RecentImg,
})
}
if req.RecentImg != "" && len(user.Clocks) > 0 && (req.RecentImg != user.RecentImg || req.NickName !=
user.NickName || req.TelNum != user.TelNum || req.ICNum != user.ICNum) {
if req.ICNum == "" {
req.ICNum = user.ICNum
}
if req.NickName == "" {
req.NickName = user.NickName
}
if req.TelNum == "" {
req.TelNum = user.TelNum
}
var dataSet []turnstile.DeviceUserData
var userId account.ClockUserDeviceBatch
deviceNums := make(map[string]string)
for _, i := range user.Clocks {
data := turnstile.DeviceUserData{
JobNum: user.ID,
RecentImg: req.RecentImg,
DeviceNum: i.Device.DeviceNum,
NickName: req.NickName,
Phone: req.TelNum,
DeviceName: i.Device.DeviceName,
IcNum: req.ICNum,
}
dataSet = append(dataSet, data)
}
for _, i := range user.Clocks {
deviceNums[i.Device.DeviceNum] = i.Device.DeviceName
}
//判断设备是否离线
oline := CheckDeviceIsOnline(deviceNums)
if oline != "" {
//service.Error(c, e.Error, errors.New(oline))
//return
}
//并发下发数据
err = ConcurrentUpdateDeviceUser(c, dataSet, 10)
if err != nil {
//service.Error(c, e.Error, err)
//return
}
//更新绑定关系
userId.UserId = user.ID
_, err = service.AccountProvider.UpdateDeviceRelevance(c, &userId)
if err != nil {
//service.Error(c, e.Error, err)
//return
}
}
service.Success(c, user)
return
}
// MallRandList 获取商城随机用户
func MallRandList(c *gin.Context) {
//创建一个UserLoginService对象
var req query.UserNumSearchQuery
res := vo.UserListResponse{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
//账号服务
var updateReq = account.ListRequest{
Domain: "mall",
PageSize: req.Num,
}
if req.UserId != 0 {
updateReq.PageSize = 1
res.Count = 1
res.UserIds = []uint64{req.UserId}
ures, _ := service.AccountProvider.RandList(context.Background(), &updateReq)
res.DomainCount = ures.AllCount
service.Success(c, res)
return
}
ures, err := service.AccountProvider.RandList(context.Background(), &updateReq)
if err != nil {
service.Error(c, e.Error, err)
return
}
res.Count = ures.Count
var tempIds []uint64
for _, v := range ures.Data {
tempIds = append(tempIds, v.ID)
}
res.UserIds = tempIds
res.DomainCount = ures.AllCount
service.Success(c, res)
return
}
func GetUserInfoById(c *gin.Context, ID uint64, domain string) (union.UserResponse, error) {
info := union.UserResponse{}
var driverAuth = false
var driverSupervisorAuth = false
req := account.InfoRequest{
ID: ID,
}
if domain != "" {
req.Domain = domain
}
res, err := service.AccountProvider.Info(c, &req)
if err != nil {
return info, err
}
//获取用户的岗位信息
uReq := rule.RulesRequest{
AccountID: req.ID,
}
qres, err1 := service.RuleProvider.UserInfo(c, &uReq)
if err1 != nil {
return info, err1
}
if len(qres.PositionUsers) >= 1 {
driverAuth = isHaveDriverAuth(c, ID, qres.PositionUsers[0].DepartmentId)
driverSupervisorAuth = isHaveDriverSupervisorAuth(c, ID, qres.PositionUsers[0].DepartmentId)
}
fReq := position.FindRuleByUserIdRequest{
UserId: ID,
Urls: []string{e.AuthFinanceKey, e.AuthTrainingKey, e.AuthPublicizeKey, e.AuthWarehouseKey},
}
fRes, err1 := service.PositionProvider.FindRuleByUserId(c, &fReq)
info = union.UserResponse{
ID: res.Info.ID,
NickName: res.Info.NickName,
TelNum: res.Info.TelNum,
Avatar: res.Info.Avatar,
Status: res.Info.Status,
CreateAt: res.Info.CreateAt,
IsAdmin: qres.IsAdmin,
RealNameID: res.Info.RealNameID,
RealName: res.Info.RealName,
PositionUsers: qres.PositionUsers,
DepartmentLeaders: qres.DepartmentLeaders,
IsNeedChange: res.Info.IsNeedChange,
WorkYear: res.Info.WorkYear,
EnterDate: res.Info.EnterDate,
Extend: res.Info.Extend,
DepartmentName: "",
JumpTo: "",
JobNum: res.Info.JobNum,
BirthDate: res.Info.BirthDate,
Sex: res.Info.Sex,
Title: res.Info.Title,
Age: res.Info.Age,
IDNum: res.Info.IDNum,
LeftDate: res.Info.LeftDate,
DriverAuth: driverAuth,
DriverSupervisorAuth: driverSupervisorAuth,
Remark: res.Info.Remark,
RecentImg: res.Info.RecentImg,
Clocks: res.Info.Clocks,
MailAccount: res.Info.MailAccount,
ICNum: res.Info.ICNum,
Train: res.Info.Train,
Certificate: res.Info.Certificate,
TrainVideos: res.Info.TrainVideos,
}
if res.Info.Extend != nil {
info.JumpTo = res.Info.Extend.JumpTo
}
if len(qres.PositionUsers) >= 1 {
info.DepartmentName = qres.PositionUsers[0].DepartmentName
}
if len(fRes.Rules) >= 1 {
info.IdentityKey = fRes.Rules[0].Url
}
return info, nil
}
func isHaveDriverAuth(c *gin.Context, ID uint64, DepartmentID uint64) bool {
isLeader := false
req := position.DoIHavaAuthRequest{
UserId: ID,
Url: e.AuthDriveKey,
DepartmentID: DepartmentID,
}
res, err := service.PositionProvider.DoIHavaAuth(c, &req)
if err == nil && res.Hava == true {
isLeader = true
}
return isLeader
}
func isHaveDriverSupervisorAuth(c *gin.Context, ID uint64, DepartmentID uint64) bool {
isLeader := false
req := position.DoIHavaAuthRequest{
UserId: ID,
Url: e.AuthDriveSupervisorKey,
DepartmentID: DepartmentID,
}
res, err := service.PositionProvider.DoIHavaAuth(c, &req)
if err == nil && res.Hava == true {
isLeader = true
}
return isLeader
}
func MailAccount(c *gin.Context) {
var req query.UserRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
mailReq := &account.MailAccountByNickNameRequest{NickName: req.NickName, ID: req.ID}
mailRes, err := service.AccountProvider.MailAccountByNickName(c, mailReq)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, mailRes)
return
}
func DepartmentLeaderList(c *gin.Context) {
var req dto.DepartmentListReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Msg: err.Error(),
Status: e.Failed,
})
return
}
findByUrlRequest := rule.FindByUrlRequest{
Url: e.DepartmentKey,
DepartmentIds: req.DepartmentIds,
}
fmt.Println("=============================== FindByUrlRequest ==================================")
fmt.Printf("findByUrlRequest : %+v\n", findByUrlRequest)
res, err := service.RuleProvider.FindUsersByUrl(c, &findByUrlRequest)
DepartmentListRes := new(dto.DepartmentListRes)
DepartmentListRes.DepartmentLeaders = make([]dto.DepartmentLeader, 0)
if err == nil && len(res.List) > 0 {
for _, tt := range res.List {
leader := dto.DepartmentLeader{
UserID: tt.UserId,
UserName: tt.UserName,
}
DepartmentListRes.DepartmentLeaders = append(DepartmentListRes.DepartmentLeaders, leader)
fmt.Println("=============================== FindByUrlResponse ==================================")
fmt.Printf("leader : %+v\n", leader)
}
}
service.ResponseMsg(c, e.SUCCESS, serializer.Response{
Data: DepartmentListRes,
Status: e.Ok,
})
}
// CreateClockDevice 创建打卡机
func CreateClockDevice(c *gin.Context) {
var req account.CreateClockDeviceRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var in = account.CreateClockDeviceRequest{
DeviceNum: req.DeviceNum,
DeviceName: req.DeviceName,
DeviceSite: req.DeviceSite,
}
res, err := service.AccountProvider.CreateClockDevice(c, &in)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// UpdateClockDevice 更新打卡机
func UpdateClockDevice(c *gin.Context) {
var req account.UpdateClockDeviceRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var in = account.UpdateClockDeviceRequest{
Id: req.Id,
DeviceNum: req.DeviceNum,
DeviceName: req.DeviceName,
DeviceSite: req.DeviceSite,
}
res, err := service.AccountProvider.UpdateClockDevice(c, &in)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// RemoveClockDevice 删除打卡机
func RemoveClockDevice(c *gin.Context) {
var req account.RemoveClockDeviceRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var in = account.RemoveClockDeviceRequest{
Id: req.Id,
}
res, err := service.AccountProvider.RemoveClockDevice(c, &in)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// ClockDeviceInfo 查看打卡机详情
func ClockDeviceInfo(c *gin.Context) {
var req account.ClockDeviceInfoRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var in = account.ClockDeviceInfoRequest{
Id: req.Id,
Page: req.Page,
PageSize: req.PageSize,
}
res, err := service.AccountProvider.ClockDeviceInfo(c, &in)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// ClockDeviceList 查看打卡机列表
func ClockDeviceList(c *gin.Context) {
var req account.ClockDeviceListRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var in = account.ClockDeviceListRequest{
DeviceSite: req.DeviceSite,
DeviceNum: req.DeviceNum,
DeviceName: req.DeviceName,
Page: req.Page,
PageSize: req.PageSize,
}
res, err := service.AccountProvider.ClockDeviceList(c, &in)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// ClockDeviceSingleUntie 单人解绑打卡机设备
func ClockDeviceSingleUntie(c *gin.Context) {
var req account.RemoveClockDeviceRequest
deviceNums := make(map[string]string)
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
var batch account.ClockBatchBindRequest
batch.Id = req.Id
devRes, err := service.AccountProvider.ClockDeviceBatchList(c, &batch) //获取设备列表
if err != nil {
service.Error(c, e.InvalidParams, errors.New("未找到设备"))
return
}
for _, i := range devRes.Data {
deviceNums[i.DeviceNum] = i.DeviceName
}
oline := CheckDeviceIsOnline(deviceNums)
if oline != "" {
service.Error(c, e.Error, errors.New(oline))
return
}
err = DelSingleDeviceAccount(c, devRes.Data[0].DeviceNum, devRes.Data[0].UserId)
if err != nil {
service.Error(c, e.Error, err)
return
}
res, err := service.AccountProvider.ClockDeviceSingleUntie(c, &req) //删除绑定关联
service.Success(c, res)
return
}
// ClockDeviceBatchBind 批量绑定打卡机
func ClockDeviceBatchBind(c *gin.Context) {
var req account.ClockBatchBindRequest
deviceNums := make(map[string]string)
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
deviceIds := account.ClockDeviceListRequest{
Ids: req.DeviceId,
}
DeviceList, err := service.AccountProvider.ClockDeviceList(c, &deviceIds)
if err != nil {
service.Error(c, e.Error, err)
return
}
//判断设备是否在线
for _, i := range DeviceList.Data {
deviceNums[i.DeviceNum] = i.DeviceName
}
oline := CheckDeviceIsOnline(deviceNums)
if oline != "" {
service.Error(c, e.Error, errors.New(oline))
return
}
//判断所选员工姓名和近照是否存在
userInfo, err := getUserInfo(c, req.UserId)
if err != nil {
service.Error(c, e.Error, err)
return
}
// 整合数据
data, dataSet := SelectTheUserToBeDelivered(DeviceList, userInfo)
//保存不匹配的数据到新切片
if len(data.Data) == 0 {
service.Error(c, e.Error, errors.New("所选用户已经下发过"))
return
}
//并发下发用户数据
err = ConcurrentUpdateDeviceUser(c, dataSet, 10)
if err != nil {
service.Error(c, e.Error, err)
return
}
//添加绑定关系
res, err := service.AccountProvider.ClockDeviceBatchBind(c, data)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
}
// ClockDeviceBatchUntie 批量解绑打卡机
func ClockDeviceBatchUntie(c *gin.Context) {
var req account.ClockBatchBindRequest
deviceNums := make(map[string]string)
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res1, err := service.AccountProvider.ClockDeviceBatchList(c, &req)
if len(res1.Data) == 0 {
service.Error(c, e.InvalidParams, errors.New("没有需要解绑的人员"))
return
}
//判断设备是否在线
for _, i := range res1.Data {
deviceNums[i.DeviceNum] = i.DeviceName
}
oline := CheckDeviceIsOnline(deviceNums)
if oline != "" {
service.Error(c, e.Error, errors.New(oline))
return
}
//整合数据
data := DeviceNumToJobNums(res1.Data)
//下发数据
err = DelBatchDeviceAccount(data)
if err != nil {
service.Error(c, e.InvalidParams, errors.New("下发命令失败"))
return
}
//删除关联
res, err := service.AccountProvider.ClockDeviceBatchUntie(c, &req)
if err != nil {
service.Error(c, e.InvalidParams, errors.New("解绑失败"))
return
}
service.Success(c, res)
return
}
// ClockDeviceCapturePhoto 抓拍现场照片
func ClockDeviceCapturePhoto(c *gin.Context) {
var req request.NotificationDevice
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SnapPhotosOfTheScene(c, req.DeviceNum)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
decodedData, err := url.QueryUnescape(res)
if err != nil {
fmt.Println("URL 解码时出错:", err)
return
}
imageBytes, err := base64.StdEncoding.DecodeString(decodedData)
if err != nil {
service.Error(c, e.Error, errors.New("解码Base64时出错"))
return
}
c.Writer.Header().Set("Content-Type", "image/png")
_, _ = c.Writer.WriteString(string(imageBytes))
service.Success(c, res)
return
}
// ClockDeviceDetectionPhoto 检测图片质量
func ClockDeviceDetectionPhoto(c *gin.Context) {
file, err := c.FormFile("file")
source := c.PostForm("deviceNum")
// 检验文件
if err != nil {
logger.Errorf("Upload FormFile err", err)
service.Error(c, e.Error, err)
return
}
// 打开上传的文件
src, err := file.Open()
if err != nil {
logger.Errorf("Open file err: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Unable to open file",
})
return
}
defer src.Close()
// 读取文件内容到字节切片
fileBytes := make([]byte, file.Size)
_, err = src.Read(fileBytes)
if err != nil {
logger.Errorf("Read file err: %v", err)
c.JSON(http.StatusInternalServerError, gin.H{
"error": "Unable to read file",
})
return
}
// 将字节切片编码为Base64字符串
base64String := base64.StdEncoding.EncodeToString(fileBytes)
if err != nil {
service.Error(c, e.Error, err)
return
}
encodedData := url.QueryEscape(base64String)
res, err := CheckPictureQuality(c, source, encodedData)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
}
// ClockDeviceRuleIssuance 人员通行规则下发
func ClockDeviceRuleIssuance(c *gin.Context) {
var req turnstile.RuleIssuance
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err := GeneralRuleIssuance(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, nil)
return
}
// ClockDeviceRuleAcquire 获取人员通行规则
func ClockDeviceRuleAcquire(c *gin.Context) {
var req turnstile.RuleIssuance
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := AccessRule(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, res)
return
}
// ClockDeviceRuleDelete 删除人员通行规则
func ClockDeviceRuleDelete(c *gin.Context) {
var req request.DeleteRule
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err := DeleteRule(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, nil)
return
}
// ClockDevicePasswordSwitch 设备密码开门开关
func ClockDevicePasswordSwitch(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err := PasswordSwitch(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, nil)
return
}
// ClockDevicePasswordSet 设置设备开门密码
func ClockDevicePasswordSet(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err := PasswordSet(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, nil)
return
}
// ClockDevicePersonSync 通知设备同步人员数据
func ClockDevicePersonSync(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
err := PersonSync(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("下发失败"))
return
}
service.Success(c, nil)
return
}
// ClockDevicePersonTotal 查询设备人员数量和id
func ClockDevicePersonTotal(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := PersonTotal(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
return
}
// ClockDevicePersonInfo 根据userid读取用户数据
func ClockDevicePersonInfo(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := PersonInfo(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetAcquire 获取设备设置
func ClockDeviceSetAcquire(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
lockStatus := -1
if req.Settings[0] == "all" {
lockStatus, _ = DoorLock(c, req)
}
res, err := SetAcquire(c, req)
res.LockState = lockStatus
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetLogo 设置设备logo
func ClockDeviceSetLogo(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetLogo(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetSlogan 设置广告语
func ClockDeviceSetSlogan(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetSlogan(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetTime 设置设备时间
func ClockDeviceSetTime(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetTime(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetDoor 控制设备开门/关门
func ClockDeviceSetDoor(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetDoor(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetInterval 设置设备识别间隔
func ClockDeviceSetInterval(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetInterval(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetDistance 设置设备识别距离
func ClockDeviceSetDistance(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetDistance(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetMask 口罩检测开关
func ClockDeviceSetMask(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetMask(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetLiving 活体检测
func ClockDeviceSetLiving(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetLiving(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetLivingClass 活体检测等级
func ClockDeviceSetLivingClass(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetLivingClass(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetStranger 陌生人识别
func ClockDeviceSetStranger(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetStranger(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetVolume 设备音量
func ClockDeviceSetVolume(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetVolume(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetUsername 播放用户名
func ClockDeviceSetUsername(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetUsername(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetHint 设置设备提示语音
func ClockDeviceSetHint(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetHint(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetPassword 修改进入设置页面密码
func ClockDeviceSetPassword(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetPassword(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetRestart 重启设备
func ClockDeviceSetRestart(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetRestart(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetRelay 设置继电器状态-常开/正常
func ClockDeviceSetRelay(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetRelay(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetCapture 设置设备识别照片抓拍的质量
func ClockDeviceSetCapture(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetCapture(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetCallout 访问呼叫开关
func ClockDeviceSetCallout(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetCallout(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetPrinter 打印机开关
func ClockDeviceSetPrinter(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetPrinter(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetVisitor 首页访客申请入库内容
func ClockDeviceSetVisitor(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetVisitor(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetToken 设置http请求的token
func ClockDeviceSetToken(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetToken(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetVerify 设置验证接口超时时长
func ClockDeviceSetVerify(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetVerify(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetDelay 设置设备开门延迟
func ClockDeviceSetDelay(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetDelay(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetPressTime 进入设置页面长按时间
func ClockDeviceSetPressTime(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetPressTime(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetDesensitization 姓名脱敏显示
func ClockDeviceSetDesensitization(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetDesensitization(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetSection 设置读卡扇区
func ClockDeviceSetSection(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetSection(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDeviceSetRail 设置设备位置围栏
func ClockDeviceSetRail(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := SetRail(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockScreensaverState 设备节能屏保开关
func ClockScreensaverState(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ScreensaverState(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockScreensaver 设置设备屏保
func ClockScreensaver(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := Screensaver(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDelScreensaver 删除屏保
func ClockDelScreensaver(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := DelScreensaver(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockScreensaverInterval 设置屏保显示时长
func ClockScreensaverInterval(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ScreensaverInterval(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureDetection 体温检测开关
func ClockTemperatureDetection(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureDetection(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureMode 体温检测模式
func ClockTemperatureMode(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureMode(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureStandard 初筛模式标准
func ClockTemperatureStandard(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureStandard(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureCalibration 设置体温校准模式
func ClockTemperatureCalibration(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureCalibration(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureLowPass 低温可通行开关
func ClockTemperatureLowPass(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureLowPass(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperaturePlay 播报体温开关
func ClockTemperaturePlay(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperaturePlay(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureReflectivity 设置体温反射率
func ClockTemperatureReflectivity(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureReflectivity(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureCorrection 设置体温校准值
func ClockTemperatureCorrection(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureCorrection(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureDistance 设置设备体温检测距离
func ClockTemperatureDistance(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureDistance(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockTemperatureMeasure 设置测温时间段
func ClockTemperatureMeasure(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := TemperatureMeasure(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockVersionAuto 开机自动更新
func ClockVersionAuto(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := VersionAuto(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockVersionInfo 获取设备版本信息
func ClockVersionInfo(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := VersionInfo(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res.Msg))
return
}
service.Success(c, res)
return
}
// ClockVersionPush 发送设备版本信息给服务端
func ClockVersionPush(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := VersionPush(c, req)
if err != nil {
service.Error(c, e.Error, errors.New("获取失败"))
return
}
service.Success(c, res)
return
}
// ClockVersionCheck 通知设备在线检查更新
func ClockVersionCheck(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := VersionCheck(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockApplyValue 设置设备首页二维码
func ClockApplyValue(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ApplyValue(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockApplyPrefix 设置访客二维码前缀
func ClockApplyPrefix(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ApplyPrefix(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockCameraPanoramic 全景相机开关
func ClockCameraPanoramic(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := CameraPanoramic(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockCameraParams 设置全景相机的参数
func ClockCameraParams(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := CameraParams(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockRecognitionStyle 识别结果样式
func ClockRecognitionStyle(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := RecognitionStyle(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnlineVerify 识别后在线验证
func ClockOnlineVerify(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := OnlineVerify(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnlineCard 在线验证卡号
func ClockOnlineCard(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := OnlineCard(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnlineIdCard 在线验证身份证号
func ClockOnlineIdCard(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := OnlineIdCard(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnline 设置在线识别间隔
func ClockOnline(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := Online(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnlineState 在线识别开关
func ClockOnlineState(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := OnlineState(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockOnlineTemporary 临时启用在线识别
func ClockOnlineTemporary(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := OnlineTemporary(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDiscernSettings 设置可通行人员类型
func ClockDiscernSettings(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := DiscernSettings(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDiscernClass 设置设备识别置信度
func ClockDiscernClass(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := DiscernClass(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockForbiddenSwitch 开启/关闭设备识别
func ClockForbiddenSwitch(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ForbiddenSwitch(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockForbiddenNumber 停用状态通行人数
func ClockForbiddenNumber(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := ForbiddenNumber(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockAdvertisingAdd 下发广告 - 图片
func ClockAdvertisingAdd(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := AdvertisingAdd(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockAdvertisingDel 删除广告
func ClockAdvertisingDel(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := AdvertisingDel(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockAdvertisingChange 启用停用广告
func ClockAdvertisingChange(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := AdvertisingChange(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockDoorLock 获取(上报)门锁状态
func ClockDoorLock(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := DoorLock(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(strconv.Itoa(res)))
return
}
service.Success(c, res)
return
}
// ClockDoorListener 设置门锁实时监听开关
func ClockDoorListener(c *gin.Context) {
var req request.DeviceReq
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := DoorListener(c, req)
if err != nil {
service.Error(c, e.Error, errors.New(res))
return
}
service.Success(c, res)
return
}
// ClockLogList 打卡记录列表
func ClockLogList(c *gin.Context) {
req := &account.ClockLogReq{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.FindClockLogList(c, req)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// ClockLogInfo 打卡记录详情
func ClockLogInfo(c *gin.Context) {
req := &account.ClockLogReq{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.FindClockLogList(c, req)
res.Count = uint64(len(res.Data))
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
// ClockVisitor 访客申请
func ClockVisitor(c *gin.Context) {
req := &account.ClockLogInfo{}
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
face, _ := SnapPhotosOfTheScene(c, req.Sn)
decodedData, err := url.QueryUnescape(face)
if err != nil {
fmt.Println("URL 解码时出错:", err)
return
}
uuids, _ := uuid.NewV4()
var objectName = fmt.Sprintf("%s/%s/%s.jpeg", config.ConfigData.Oss.BaseDir, config.Env, uuids)
BOSClient, _ := objstorage.NewOSS(config.ConfigData.Oss.AccessKeyId, config.ConfigData.Oss.AccessKeySecret, config.ConfigData.Oss.Endpoint)
imageBytes, err := base64.StdEncoding.DecodeString(decodedData)
_, err = BOSClient.PutObjectFromBytes(config.ConfigData.Oss.BucketName, objectName, imageBytes)
Url := fmt.Sprintf("%s/%s", config.ConfigData.Oss.CdnHost, objectName)
if err != nil {
service.Error(c, e.Error, errors.New("解码Base64时出错"))
return
}
userReq := &account.UserByTelRequest{
Tel: req.ReceiverTel,
}
userRes, err := service.AccountProvider.UserByTel(c, userReq)
if userRes.Info.ID == 0 || err != nil {
service.Error(c, e.Error, errors.New("接待人不存在"))
return
}
req = &account.ClockLogInfo{
Sn: req.Sn,
UserId: "F1000001",
RecogType: "manual_visitor",
RecogTime: time.Now().Format("2006-01-02 15:04:05"),
Gender: req.Gender,
Photo: Url,
PassStatus: 1,
UserName: req.UserName,
UserType: 2,
Tel: req.Tel,
ReasonVisit: req.ReasonVisit,
ReceiverTel: req.ReceiverTel,
NumOfPeople: req.NumOfPeople,
}
res, err := service.AccountProvider.CreateClockLog(c, req)
if err != nil {
service.Error(c, e.Error, err)
return
}
strangerReq := account.SendClockInWechatRequest{
GhId: "gh_d838598b1a23",
Address: req.Sn,
UserId: uint32(userRes.Info.ID),
LogId: res.Id,
}
_, err = service.AccountProvider.SendStrangerClockInWechat(c, &strangerReq)
if err != nil {
service.Error(c, e.Error, errors.New("接待人未注册"))
return
}
service.Success(c, res)
return
}
// ExamineList 审核列表
func ExamineList(c *gin.Context) {
var req account.WriteOffListRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.FindWriteOffList(c, &req)
if err != nil {
service.Error(c, e.InvalidParams, err)
return
}
service.Success(c, res)
}
// ExamineApprove 审批
func ExamineApprove(c *gin.Context) {
var req account.WriteOffApproveRequest
if err := c.ShouldBindJSON(&req); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
res, err := service.AccountProvider.WriteOffInfo(c, &req)
if err != nil {
service.Error(c, e.InvalidParams, err)
return
}
if res.Status != 1 {
service.Error(c, e.InvalidParams, errors.New("审批结束,不可重复提交"))
return
}
_, err = service.AccountProvider.WriteOffUpdate(c, &req)
if err != nil {
service.Error(c, e.InvalidParams, errors.New("审批错误"))
return
}
// 拒绝审批
if req.Status == 3 {
service.Success(c, res)
return
}
// 通过审批
if req.Status == 2 {
err := handleApprovalSuccess(c, res)
if err != nil {
service.Error(c, e.Error, err)
return
}
service.Success(c, res)
return
}
service.Error(c, e.InvalidParams, errors.New("参数错误"))
return
}
// ArtworkUserLogin 用户登录操作
func ArtworkUserLogin(c *gin.Context) {
var jumpToWhere = "setting"
var req account.LoginRequest
if err := c.ShouldBindBodyWith(&req, binding.JSON); err != nil {
service.Error(c, e.InvalidParams, err)
return
}
req.Ip = c.ClientIP()
res, err := service.AccountProvider.Login(c, &req)
if err != nil {
service.Error(c, e.Error, err)
return
}
//获取用户的岗位信息
uReq := rule.RulesRequest{
AccountID: res.AccountInfo.ID,
}
qres, err1 := service.RuleProvider.UserInfo(c, &uReq)
if err1 != nil {
service.Error(c, e.Error, err1)
return
}
if isHaveAuth(c, res.AccountInfo.ID, e.AuthArtworkFix, "button") == false {
service.Error(c, e.Error, errors.New("您暂时没有登陆的权限"))
return
}
accountInfo := &union.AccountInfo{
ID: res.AccountInfo.ID,
Account: res.AccountInfo.Account,
NickName: res.AccountInfo.NickName,
Domain: res.AccountInfo.Domain,
TelNum: res.AccountInfo.TelNum,
Status: res.AccountInfo.Status,
Avatar: res.AccountInfo.Avatar,
CreatedAt: res.AccountInfo.CreateAt,
IsNeedChange: res.AccountInfo.IsNeedChange,
EnterDate: res.AccountInfo.EnterDate,
WorkYear: res.AccountInfo.WorkYear,
IsAdmin: qres.IsAdmin,
PositionUsers: qres.PositionUsers,
JumpTo: res.AccountInfo.Extend.JumpTo,
DepartmentName: "",
JobNum: res.AccountInfo.JobNum,
BirthDate: res.AccountInfo.BirthDate,
Age: res.AccountInfo.Age,
Sex: res.AccountInfo.Sex,
Title: res.AccountInfo.Title,
IDNum: res.AccountInfo.IDNum,
MailAccount: res.AccountInfo.MailAccount,
Train: res.AccountInfo.Train,
Certificate: res.AccountInfo.Certificate,
TrainVideos: res.AccountInfo.TrainVideos,
}
code := "xxx"
if len(qres.PositionUsers) >= 1 {
accountInfo.DepartmentName = qres.PositionUsers[0].DepartmentName
code = secret.GetPositionCode(qres.PositionUsers[0].PositionName)
}
token, err := secret.CombineSecret(code, accountInfo.DepartmentName, res.Token)
if err != nil {
service.Error(c, e.Error, err)
return
}
resInfo := &union.Login{
Token: token,
RefreshToken: res.RefreshToken,
AccountInfo: accountInfo,
JumpToWhere: jumpToWhere,
}
fmt.Println("是否相同:", res.IsSampleAddress, res.AccountInfo.NowLogId)
if res.IsSampleAddress == false && res.AccountInfo.NowLogId != 0 { //登陆地址异常
url := fmt.Sprintf("https://erpapi.fontree.cn/off7524164487E?id=%d", res.AccountInfo.NowLogId)
shortUrl, err := utils.CreateShortUrl(url)
if err == nil {
url = shortUrl
}
msgReq := account.SendCustomMsgRequest{
ID: res.AccountInfo.ID,
TelNum: res.AccountInfo.TelNum,
MId: 134802,
SigNo: uint32(config.DefaultSignNo),
}
msgReq.Url = res.NowAddress + "|" + url
fmt.Println("发送短信", msgReq)
service.AccountProvider.SendCustomMsg(c, &msgReq)
}
service.Success(c, resInfo)
return
}
func isHaveAuth(c *gin.Context, ID uint64, url, ruleType string) bool {
isLeader := false
req := position.DoIHavaAuthRequest{
UserId: ID,
Url: url,
Type: ruleType,
}
res, err := service.PositionProvider.DoIHavaAuth(c, &req)
if err == nil && res.Hava == true {
isLeader = true
}
return isLeader
}
// handleApprovalSuccess 处理通过审批的逻辑
func handleApprovalSuccess(c *gin.Context, req *account.WriteOffRequest) error {
// 获取用户信息
user, err := GetUserInfoById(c, req.UserId, req.Domain)
if err != nil {
return err
}
// 构建新的岗位用户列表,排除当前岗位
newPositionUsers := filterPositionUsers(user.PositionUsers, req.SiteId)
// 替换岗位
positionReq := &position.BindUserRequest{
Domain: user.Domain,
UserID: user.ID,
UserName: user.NickName,
Avatar: user.Avatar,
PositionUsers: newPositionUsers,
}
_, err = service.PositionProvider.BindUser(c, positionReq)
if err != nil {
return err
}
// 如果用户不属于其他部门,则将其状态设置为"left"
if len(newPositionUsers) == 0 {
removeReq := account.UpdateRequest{
Domain: "fontree",
ID: req.UserId,
Status: "left",
Operator: &account.Operator{
ID: 0,
Name: "销售宝",
},
}
_, err = service.AccountProvider.Update(c, &removeReq)
if err != nil {
return err
}
}
return nil
}
// filterPositionUsers 过滤掉指定岗位的用户
func filterPositionUsers(users []*rule.PositionUser, siteID uint64) []*position.PositionUser {
var newPositionUsers []*position.PositionUser
for _, u := range users {
if u.DepartmentId != siteID {
p := &position.PositionUser{
PositionID: u.PositionID,
DepartmentID: u.DepartmentId,
DepartmentCode: u.DepartmentCode,
UserId: u.UserId,
UserName: u.UserName,
DepartmentName: u.DepartmentName,
PositionName: u.PositionName,
}
newPositionUsers = append(newPositionUsers, p)
}
}
return newPositionUsers
}
func GetECardInfo(userID uint64, changedPlace string) (addChainRequest *e_card.AddChainRequest, err error) {
// 生成电子名片
// 获取用户信息如果是非erp用户则不需要生成电子名片
infoRequest := &account.InfoRequest{
Domain: "fontree",
ID: userID,
}
var userInfo *account.InfoResponse
userInfo, err = service.AccountProvider.Info(context.Background(), infoRequest)
if err != nil {
return
}
// 重新获取用户的部门、岗位
rulesReq := &rule.RulesRequest{
AccountID: userID,
}
qres, err := service.RuleProvider.UserInfo(context.Background(), rulesReq)
if err != nil {
return
}
var departments []string
var posts []string
for _, positionUser := range qres.PositionUsers {
departments = append(departments, positionUser.DepartmentName)
posts = append(posts, positionUser.PositionName)
}
addChainRequest = &e_card.AddChainRequest{
Name: userInfo.Info.NickName,
Phone: userInfo.Info.TelNum,
Company: "泰丰文化集团",
Department: departments,
Post: posts,
DateOnBoard: userInfo.Info.EnterDate,
UserID: int32(userID),
Addr: userInfo.Info.Account,
ChangedPlace: changedPlace,
}
return
}