fonchain-fiee/pkg/service/account/account.go
2025-02-19 14:24:15 +08:00

2990 lines
73 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}