123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*
- * @description: 计量业务相关
- * @Author: CP
- * @Date: 2021-12-25 14:37:01
- * @FilePath: \construction_management\services\jl_service.go
- */
- package services
- import (
- "errors"
- "fmt"
- "net/http"
- "net/url"
- "strconv"
- "go.mod/comm"
- "go.mod/conf"
- "go.mod/dao"
- "go.mod/datasource"
- "go.mod/lib"
- "go.mod/models"
- "go.mod/web/viewmodels"
- )
- type JlService struct {
- dao *dao.ProjectDao
- accountDao *dao.ProjectAccountDao
- }
- // 创建项目用户service
- func NewJlService() *JlService {
- return &JlService{
- dao: dao.NewProjectDao(datasource.InstanceDbMaster()),
- accountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
- }
- }
- // 是否有项目
- func (s *JlService) IsCode(code string) map[string]interface{} {
- exist := 0
- if code != "" {
- projectData := s.dao.GetCode(code)
- if projectData.Id != 0 {
- exist = 1
- }
- }
- data := map[string]interface{}{
- "exist": exist,
- }
- return data
- }
- // 从计量来的项目和管理员账号,添加入项目管理
- func (s *JlService) ProjectAdd(claimsData *viewmodels.Jl) (map[string]interface{}, error) {
- var (
- err error
- JlResultData map[string]interface{}
- accountData *models.CmProjectAccount
- )
- Jlzf := lib.NewJlzf()
- // 1.获得计量 账号和项目 信息
- if JlResultData, err = Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
- return nil, err
- }
- fmt.Println(JlResultData)
- // 2.获得本地项目
- projectData := s.dao.GetCode(claimsData.Code)
- // 项目不存在
- if projectData.Id == 0 {
- // 2-1. 创建项目和账号 TODO
- project := &models.CmProject{}
- account := &models.CmProjectAccount{}
- if err = s.dao.AddProjectAndAccount(project, account); err != nil {
- return nil, err
- }
- // project := &models.CmProject{}
- // project.Name = projectVM.Name
- // project.Code = projectVM.Code
- // project.CategoryId = projectVM.CategoryId
- // project.Category = projectVM.Category
- // project.InsideCategoryid = projectVM.InsideCategoryid
- // project.InsideCategory = projectVM.InsideCategory
- // project.StaffId = projectVM.StaffId
- // project.StaffName = projectVM.StaffName
- // project.CreateTime = time.Now()
- // project.CreateName = projectVM.CreateName
- // project.CreateCategory = projectVM.CreateCategory
- // project.Remark = projectVM.Remark
- } else {
- // 2-2. 是否有该账号
- accountData = s.accountDao.GetAccountProjectId(claimsData.Account, projectData.Id)
- // 2-2-1 账号不存在
- if accountData.Id == 0 {
- // 2-2-2. 创建 账号 TODO
- account := &models.CmProjectAccount{}
- if err = s.accountDao.Add(account); err != nil {
- return nil, err
- }
- }
- }
- data := map[string]interface{}{
- "sync": 1,
- }
- return data, nil
- }
- func (s *JlService) AuthLogin(claimsData *viewmodels.Jl, writer http.ResponseWriter) (*viewmodels.ProjectAccount, error) {
- // 1-1.工程项目是否存在
- projectInfo := s.dao.GetCode(claimsData.Code)
- if projectInfo.Id == 0 {
- return nil, errors.New("工程建设管理员还未创建项目,禁止登录")
- }
- // 1-2.获得项目管理员
- projectAdminInfo := s.accountDao.Get(projectInfo.UserId, projectInfo.Id)
- if projectAdminInfo.Id == 0 {
- return nil, errors.New("工程建设管理员不存在,禁止登录")
- }
- // 2.验证登陆-临时
- projectAccountInfo := s.accountDao.GetAccountProjectId(claimsData.Account, projectInfo.Id)
- // 未账号改账号
- if projectAccountInfo.Id == 0 {
- // 到计量拉取普通账号 - TODO
- // Jlzf := lib.NewJlzf()
- // // 1.获得计量 账号和项目 信息
- // if JlResultData, err := Jlzf.GetProjectAndAccount(claimsData.Code, claimsData.Account); err != nil {
- // return nil, err
- // }
- // // 2-. 创建 账号 TODO
- // account := &models.CmProjectAccount{}
- // if err := s.accountDao.Add(account); err != nil {
- // return nil, err
- // }
- }
- // 2-1.账号停用
- if projectAccountInfo.Enable == 0 {
- return nil, errors.New("该账号已被停用")
- }
- // 加密用户标识
- identity, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
- if err != nil {
- return nil, err
- }
- // 加密项目标识
- projectId, err := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.ProjectId), conf.CookieSecret)
- if err != nil {
- return nil, err
- }
- digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
- // 设置cookie
- maxAge := 60 * 60 * 24 * 7
- params := url.Values{}
- params.Add("identity", identity)
- params.Add("attachedIdentity", projectId)
- params.Add("digitalToken", digitalToken)
- c := &http.Cookie{
- Name: "cm",
- Value: params.Encode(),
- Path: "/",
- MaxAge: maxAge,
- HttpOnly: true,
- }
- http.SetCookie(writer, c)
- viewAccountData := comm.MakeProjectAccountVM(projectAccountInfo)
- return &viewAccountData, nil
- }
|