| 
					
				 | 
			
			
				@@ -7,18 +7,31 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	dao        *dao.ProjectDao 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	accountDao *dao.ProjectAccountDao 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // 创建项目用户service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func NewJlService() *JlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return &JlService{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		dao: dao.NewProjectDao(datasource.InstanceDbMaster()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		dao:        dao.NewProjectDao(datasource.InstanceDbMaster()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		accountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -26,8 +39,8 @@ func NewJlService() *JlService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func (s *JlService) IsCode(code string) map[string]interface{} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	exist := 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if code != "" { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		projectData := s.dao.GetListByCode(code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if len(projectData) != 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		projectData := s.dao.GetCode(code) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if projectData.Id != 0 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			exist = 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -38,3 +51,129 @@ func (s *JlService) IsCode(code string) map[string]interface{} { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |