123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522 |
- /*
- * @description:项目用户相关数据处理
- * @Author: CP
- * @Date: 2020-08-27 17:23:58
- * @FilePath: \construction_management\services\project_account_service.go
- */
- package services
- import (
- "encoding/json"
- "errors"
- "html"
- "log"
- "strconv"
- "strings"
- "time"
- "github.com/kataras/iris/v12"
- "go.mod/comm"
- "go.mod/models"
- "go.mod/web/utils"
- "go.mod/web/viewmodels"
- "go.mod/dao"
- "go.mod/datasource"
- )
- //定义项目用户Service接口
- type ProjectAccountService interface {
- ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error)
- ValidRuleChangePassword(ctx iris.Context) (viewmodels.AccountPassword, error)
- ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error)
- ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error)
- ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error)
- ValidRuleProjectId(ctx iris.Context) (viewmodels.ProjectAccount, error)
- Get(accountId int, projectId int) *viewmodels.ProjectAccount
- GetAll(projectId int) []viewmodels.ProjectAccount
- GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount
- Search(name string, projectId int) []viewmodels.ProjectAccount
- AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error
- Add(viewAccount viewmodels.ProjectAccount, projectId int) error
- Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
- SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error
- Enable(id int, projectId int, enable int) error
- ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
- ChangeAccountBS(id int, projectId int, viewAccount viewmodels.ProjectAccount) error
- GetProjectInfo(id int) (viewmodels.ProjectInfo, error)
- Delete(id int, projectId int) error
- ChangePassword(AccountData viewmodels.AccountPassword, projectId int, projectAccountId int) error
- SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error
- }
- //返回service操作类
- type projectAccountService struct {
- dao *dao.ProjectAccountDao
- bidAccountDao *dao.BidAccountDao
- permissionAccountDao *dao.PermissionAccountDao
- validSave string
- validAdd string
- validPassword string
- }
- //创建项目用户service
- func NewProjectAccountService() ProjectAccountService {
- return &projectAccountService{
- dao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
- bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
- permissionAccountDao: dao.NewPermissionAccountDao(datasource.InstanceDbMaster()),
- validSave: "/api/projectSetting/account/save",
- validAdd: "/api/projectSetting/account/create",
- validPassword: "/api/projectSetting/account/change",
- }
- }
- // 用户规则验证
- func (s *projectAccountService) ValidRule(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- accountVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadJSON(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- if ctx.Path() == s.validAdd {
- err = accountVaild.Validate()
- } else if ctx.Path() == s.validSave {
- err = accountVaild.ValidateUpdate()
- } else if ctx.Path() == s.validPassword {
- err = accountVaild.ValidatePassword()
- } else {
- log.Println("请求路径找不到对应的验证规则")
- return accountVaild, errors.New("验证错误-未找到验证规则")
- }
- if err != nil {
- log.Println("用户验证, error=", err)
- return accountVaild, err
- }
- // 验证账号组
- if ctx.Path() != s.validPassword {
- accountGroup := comm.NewAccountGroup()
- err = accountGroup.ValidRule(accountVaild.AccountGroup)
- if err != nil {
- log.Println("用户验证, error=", err)
- return accountVaild, err
- }
- }
- // xss
- accountVaild.Account = html.EscapeString(accountVaild.Account)
- accountVaild.Password = html.EscapeString(accountVaild.Password)
- accountVaild.Name = html.EscapeString(accountVaild.Name)
- accountVaild.Company = html.EscapeString(accountVaild.Company)
- accountVaild.Position = html.EscapeString(accountVaild.Position)
- accountVaild.Mobile = html.EscapeString(accountVaild.Mobile)
- accountVaild.Telephone = html.EscapeString(accountVaild.Telephone)
- return accountVaild, nil
- }
- // 验证密码
- func (s *projectAccountService) ValidRuleChangePassword(ctx iris.Context) (viewmodels.AccountPassword, error) {
- accountVaild := viewmodels.AccountPassword{}
- err := ctx.ReadJSON(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- err = accountVaild.ValidateChangePassword()
- if err != nil {
- log.Println("权限验证, error=", err)
- return accountVaild, err
- }
- return accountVaild, nil
- }
- // 用户规则验证
- func (s *projectAccountService) ValidRulePermission(ctx iris.Context) (viewmodels.Permission, error) {
- accountVaild := viewmodels.Permission{}
- err := ctx.ReadJSON(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- err = accountVaild.Validate()
- if err != nil {
- log.Println("权限验证, error=", err)
- return accountVaild, err
- }
- return accountVaild, nil
- }
- // 用户规则验证
- func (s *projectAccountService) ValidGetPermission(ctx iris.Context) (viewmodels.Permission, error) {
- accountVaild := viewmodels.Permission{}
- err := ctx.ReadForm(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- err = accountVaild.ValidateSinglePermission()
- if err != nil {
- log.Println("权限验证, error=", err)
- return accountVaild, err
- }
- return accountVaild, nil
- }
- // 验证编辑用户
- func (s *projectAccountService) ValidRuleAccount(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- accountVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadJSON(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- err = accountVaild.ValidateAccount()
- if err != nil {
- log.Println("权限验证, error=", err)
- return accountVaild, err
- }
- return accountVaild, nil
- }
- // 验证用户项目ID
- func (s *projectAccountService) ValidRuleProjectId(ctx iris.Context) (viewmodels.ProjectAccount, error) {
- accountVaild := viewmodels.ProjectAccount{}
- err := ctx.ReadForm(&accountVaild)
- if err != nil {
- log.Println("account-ValidRule-ReadForm转换异常, error=", err)
- return accountVaild, err
- }
- err = accountVaild.ValidateProjectId()
- if err != nil {
- log.Println("权限验证, error=", err)
- return accountVaild, err
- }
- return accountVaild, nil
- }
- // 获得一个项目用户
- func (s *projectAccountService) Get(id int, projectId int) *viewmodels.ProjectAccount {
- modelsAccount := s.dao.Get(id, projectId)
- viewAccountData := viewmodels.ProjectAccount{}
- if modelsAccount.Id == 0 {
- viewAccountData.Id = "0"
- return &viewAccountData
- }
- viewAccountData = comm.MakeProjectAccountVM(modelsAccount)
- return &viewAccountData
- }
- // 获得项目下所有账号信息
- func (s *projectAccountService) GetAll(projectId int) []viewmodels.ProjectAccount {
- accountList := s.dao.GetAll(projectId)
- accountListVM := make([]viewmodels.ProjectAccount, 0)
- for _, data := range accountList {
- //if data.IsAdmin != 1 {
- account := comm.MakeProjectAccountVM(&data)
- accountListVM = append(accountListVM, account)
- //}
- }
- return accountListVM
- }
- // 获得标段下的账号
- func (s *projectAccountService) GetBidAccount(bidsectionId int, projectId int, projectAccountId int, name string) []viewmodels.ProjectAccount {
- // 1.获得标段账号ID
- bidAccountData := s.bidAccountDao.GetBidAccount(bidsectionId, projectId)
- // 组合账号ID集合
- idList := []string{}
- // 管理员账号-可能不必要
- // idList = append(idList, strconv.Itoa(projectAccountId))
- for _, item := range bidAccountData {
- idList = append(idList, strconv.Itoa(item.AccountId))
- }
- inId := strings.Join(idList, ",")
- // 获得账号信息
- accountData := s.dao.GetInId(inId, name)
- // 2.获得账号权限
- permissionData := s.permissionAccountDao.GetBidsectionId(bidsectionId)
- // 格式化账号数据
- accountListVM := make([]viewmodels.ProjectAccount, 0)
- for _, data := range accountData {
- account := comm.MakeProjectAccountVM(&data)
- for _, item := range permissionData {
- if data.Id == item.AccountId {
- account.ContractPermission = item.ContractPermission
- account.QualityPermission = item.QualityPermission
- account.SafePermission = item.SafePermission
- break
- }
- }
- accountListVM = append(accountListVM, account)
- }
- return accountListVM
- }
- // 检索 账号姓名单位手机
- func (s *projectAccountService) Search(name string, projectId int) []viewmodels.ProjectAccount {
- accountList := s.dao.Search(name, projectId)
- accountListVM := make([]viewmodels.ProjectAccount, 0)
- for _, data := range accountList {
- account := comm.MakeProjectAccountVM(&data)
- accountListVM = append(accountListVM, account)
- }
- return accountListVM
- }
- // 新增账号-后台
- func (s *projectAccountService) AddBs(viewAccount viewmodels.ProjectAccount, projectId int) error {
- // 验证该项目下是否有同名账号
- accountValid := s.dao.GetAccount(viewAccount.Account)
- if accountValid.Id != 0 {
- return errors.New("已存在相同的账号")
- }
- account := models.CmProjectAccount{}
- account.ProjectId = projectId
- account.Account = viewAccount.Account
- account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
- account.Name = viewAccount.Name
- account.Company = viewAccount.Company
- account.Position = viewAccount.Position
- account.Mobile = viewAccount.Mobile
- account.Telephone = viewAccount.Telephone
- account.Enable = 1
- // account.IsAdmin = viewAccount.IsAdmin
- account.CreateTime = time.Now()
- err := s.dao.Add(&account)
- return err
- }
- // 新增账号
- func (s *projectAccountService) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
- // 验证该项目下是否有同名账号
- accountValid := s.dao.GetAccount(viewAccount.Account)
- if accountValid.Id != 0 {
- return errors.New("已存在相同的账号")
- }
- account := models.CmProjectAccount{}
- account.ProjectId = projectId
- account.Account = viewAccount.Account
- account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
- account.Name = viewAccount.Name
- account.Company = viewAccount.Company
- account.Position = viewAccount.Position
- account.Mobile = viewAccount.Mobile
- account.Telephone = viewAccount.Telephone
- account.AccountGroup = viewAccount.AccountGroup
- account.Enable = 1
- account.CreateTime = time.Now()
- err := s.dao.Add(&account)
- return err
- }
- // 保存用户信息
- func (s *projectAccountService) Save(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- account.Name = viewAccount.Name
- account.Company = viewAccount.Company
- account.Position = viewAccount.Position
- account.Mobile = viewAccount.Mobile
- account.Telephone = viewAccount.Telephone
- account.AccountGroup = viewAccount.AccountGroup
- err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone", "AccountGroup"})
- return err
- }
- func (s *projectAccountService) SaveAccount(viewAccount viewmodels.ProjectAccount, id int, projectId int) error {
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- account.Name = viewAccount.Name
- account.Company = viewAccount.Company
- account.Position = viewAccount.Position
- account.Telephone = viewAccount.Telephone
- err := s.dao.Update(&account, []string{"Name", "Company", "Position", "Telephone"})
- return err
- }
- // 设置启用/禁止
- func (s *projectAccountService) Enable(id int, projectId int, enable int) error {
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- account.Enable = enable
- err := s.dao.Update(&account, []string{"Enable"})
- return err
- }
- // 删除账号
- func (s *projectAccountService) Delete(id int, projectId int) error {
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- err := s.dao.Delete(&account)
- return err
- }
- // 更改账号或者密码
- func (s *projectAccountService) ChangeAccount(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
- // 1.是否修改账号
- field := []string{"Password"}
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- // 2.修改密码
- account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
- accountData := s.dao.Get(id, projectId)
- if accountData.Account != viewAccount.Account {
- account.Account = viewAccount.Account
- field = append(field, "Account")
- }
- // 3.发送短信-TODO
- utils.SendSMS()
- s.dao.Update(&account, field)
- return nil
- }
- // 更改账号或者密码-后台
- func (s *projectAccountService) ChangeAccountBS(id int, projectId int, viewAccount viewmodels.ProjectAccount) error {
- // 1.是否修改账号
- field := []string{"Password"}
- account := models.CmProjectAccount{}
- account.Id = id
- account.ProjectId = projectId
- // 2.修改密码
- account.Password = comm.CreatePasswordSign(viewAccount.Password, viewAccount.Account)
- accountData := s.dao.Get(id, projectId)
- if accountData.Account != viewAccount.Account {
- account.Account = viewAccount.Account
- field = append(field, "Account")
- }
- s.dao.Update(&account, field)
- return nil
- }
- // 更换密码
- func (s *projectAccountService) ChangePassword(AccountData viewmodels.AccountPassword, projectId int, projectAccountId int) error {
- // 1.获得账号
- accountData := s.dao.Get(projectAccountId, projectId)
- // 2.比对密码
- password := comm.CreatePasswordSign(AccountData.Password, accountData.Account)
- if accountData.Password != password {
- return errors.New("原密码输入不正确")
- }
- // 3修改密码
- field := []string{"Password"}
- account := models.CmProjectAccount{}
- account.Id = projectAccountId
- account.ProjectId = projectId
- account.Password = comm.CreatePasswordSign(AccountData.NewPassword, accountData.Account)
- err := s.dao.Update(&account, field)
- if err != nil {
- return errors.New("密码更新失败")
- }
- return nil
- }
- func (s *projectAccountService) GetProjectInfo(id int) (viewmodels.ProjectInfo, error) {
- projectInfo, err := s.dao.FindById(id)
- return projectInfo, err
- }
- // 保存权限设置
- func (s *projectAccountService) SaveAuth(permission viewmodels.Permission, projectId int, bidsectionId int, accountId int) error {
- // 1.构造权限字符串
- // 1-1.合同权限
- contractPermission := map[string]int{
- "add": permission.ContractAdd,
- "delete": permission.ContractDelete,
- "access": permission.ContractAccess,
- }
- contractPermissionByte, err := json.Marshal(contractPermission)
- if err != nil {
- return errors.New("合同权限解析失败")
- }
- contractPermissionStr := string(contractPermissionByte)
- // 1.2 安全巡检权限
- safePermission := map[string]int{
- "add": permission.SafeAdd,
- "delete": permission.SafeDelete,
- "access": permission.SafeAccess,
- }
- safePermissionByte, err := json.Marshal(safePermission)
- if err != nil {
- return errors.New("合同权限解析失败")
- }
- safePermissionStr := string(safePermissionByte)
- // 1.3 质量巡检权限
- qualityPermission := map[string]int{
- "add": permission.QualityAdd,
- "delete": permission.QualityDelete,
- "access": permission.QualityAccess,
- }
- qualityPermissionByte, err := json.Marshal(qualityPermission)
- if err != nil {
- return errors.New("合同权限解析失败")
- }
- qualityPermissionStr := string(qualityPermissionByte)
- // 2.保存权限
- permissionAccount := models.CmPermissionAccount{}
- permissionAccount.ProjectId = projectId
- permissionAccount.BidsectionId = bidsectionId
- permissionAccount.AccountId = accountId
- permissionAccount.ContractPermission = contractPermissionStr
- permissionAccount.SafePermission = safePermissionStr
- permissionAccount.QualityPermission = qualityPermissionStr
- err = s.permissionAccountDao.Update(&permissionAccount, []string{"ContractPermission", "SafePermission", "QualityPermission"})
- return err
- }
|