123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- /*
- * @description:项目用户相关数据处理
- * @Author: CP
- * @Date: 2020-08-27 17:23:58
- * @FilePath: \construction_management\services\project_account_service.go
- */
- package services
- import (
- "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)
- Get(accountId int, projectId int) *viewmodels.ProjectAccount
- GetAll(projectId int) []viewmodels.ProjectAccount
- GetBidAccount(bidsectionId int, projectId int, projectAccountId int) []viewmodels.ProjectAccount
- Search(name string, projectId int) []viewmodels.ProjectAccount
- Add(viewAccount viewmodels.ProjectAccount, projectId int) error
- Save(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
- Delete(id int, projectId int) error
- }
- //返回service操作类
- type projectAccountService struct {
- dao *dao.ProjectAccountDao
- bidAccountDao *dao.BidAccountDao
- validSave string
- validAdd string
- validPassword string
- }
- //创建项目用户service
- func NewProjectAccountService() ProjectAccountService {
- return &projectAccountService{
- dao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
- bidAccountDao: dao.NewBidAccountDao(datasource.InstanceDbMaster()),
- validSave: "/api/projectSetting/account/save",
- validAdd: "/api/projectSetting/account/add",
- 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 {
- 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) 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) []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.BidsectionId))
- }
- inId := strings.Join(idList, ",")
- // 获得账号信息
- accountData := s.dao.GetInId(inId)
- // 格式化账号数据
- accountListVM := make([]viewmodels.ProjectAccount, 0)
- for _, data := range accountData {
- account := comm.MakeProjectAccountVM(&data)
- 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) Add(viewAccount viewmodels.ProjectAccount, projectId int) error {
- // 验证该项目下是否有同名账号--TODO
- accountValid := &models.CmProjectAccount{}
- s.dao.GetOne(accountValid)
- 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.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) 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
- }
|