backstage_service.go 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. /*
  2. * @description:登陆相关数据操作
  3. * @Author: CP
  4. * @Date: 2020-09-02 09:56:28
  5. * @FilePath: \construction_management\services\backstage_service.go
  6. */
  7. package services
  8. import (
  9. "errors"
  10. "log"
  11. "net/http"
  12. "net/url"
  13. "strconv"
  14. "time"
  15. "github.com/kataras/iris/v12"
  16. "go.mod/comm"
  17. "go.mod/conf"
  18. "go.mod/dao"
  19. "go.mod/datasource"
  20. "go.mod/lib"
  21. "go.mod/models"
  22. "go.mod/web/viewmodels"
  23. )
  24. // 定义项目用户Service接口
  25. type BackstageService interface {
  26. ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
  27. ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
  28. ValidRuleProject(ctx iris.Context) (viewmodels.Project, error)
  29. ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error)
  30. ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error)
  31. ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error)
  32. ValidRuleAccountSync(ctx iris.Context) (viewmodels.Project, error)
  33. ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error)
  34. ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error)
  35. ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error)
  36. GetCldByCategoryId(categoryId string) (map[string]interface{}, error)
  37. Out(ctx iris.Context) error
  38. }
  39. // 返回service操作类
  40. type backstageService struct {
  41. // projectAccountDao *dao.ProjectAccountDao
  42. managerDao *dao.ManagerDao
  43. }
  44. // 创建项目用户service
  45. func NewBackstageService() BackstageService {
  46. return &backstageService{
  47. // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  48. managerDao: dao.NewManagerDao(datasource.InstanceDbMaster()),
  49. }
  50. }
  51. // 登陆验证
  52. func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error) {
  53. loginVaild := viewmodels.StaffCld{}
  54. err := ctx.ReadJSON(&loginVaild)
  55. if err != nil {
  56. log.Println("ReadForm转换异常, error=", err)
  57. return loginVaild, err
  58. }
  59. err = loginVaild.ValidateLogin()
  60. if err != nil {
  61. log.Println("登录验证, error=", err)
  62. return loginVaild, err
  63. }
  64. return loginVaild, nil
  65. }
  66. // 验证项目
  67. func (s *backstageService) ValidRuleProject(ctx iris.Context) (viewmodels.Project, error) {
  68. projectVaild := viewmodels.Project{}
  69. err := ctx.ReadForm(&projectVaild)
  70. if err != nil {
  71. log.Println("ReadForm转换异常, error=", err)
  72. return projectVaild, err
  73. }
  74. err = projectVaild.ValidateId()
  75. if err != nil {
  76. log.Println("验证项目, error=", err)
  77. return projectVaild, err
  78. }
  79. return projectVaild, nil
  80. }
  81. // 验证项目
  82. func (s *backstageService) ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error) {
  83. projectVaild := viewmodels.Project{}
  84. err := ctx.ReadJSON(&projectVaild)
  85. if err != nil {
  86. log.Println("ReadForm转换异常, error=", err)
  87. return projectVaild, err
  88. }
  89. err = projectVaild.ValidateAdd()
  90. if err != nil {
  91. log.Println("添加项目验证, error=", err)
  92. return projectVaild, err
  93. }
  94. return projectVaild, nil
  95. }
  96. // 验证账号同步的接口
  97. func (s *backstageService) ValidRuleAccountSync(ctx iris.Context) (viewmodels.Project, error) {
  98. projectVaild := viewmodels.Project{}
  99. err := ctx.ReadJSON(&projectVaild)
  100. if err != nil {
  101. log.Println("ReadForm转换异常, error=", err)
  102. return projectVaild, err
  103. }
  104. err = projectVaild.ValidateSync()
  105. if err != nil {
  106. log.Println("添加项目验证, error=", err)
  107. return projectVaild, err
  108. }
  109. return projectVaild, nil
  110. }
  111. // 项目保存
  112. func (s *backstageService) ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error) {
  113. projectVaild := viewmodels.Project{}
  114. err := ctx.ReadJSON(&projectVaild)
  115. if err != nil {
  116. log.Println("ReadForm转换异常, error=", err)
  117. return projectVaild, err
  118. }
  119. err = projectVaild.ValidateSave()
  120. if err != nil {
  121. log.Println("添加项目验证, error=", err)
  122. return projectVaild, err
  123. }
  124. return projectVaild, nil
  125. }
  126. // 验证账号新增
  127. func (s *backstageService) ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  128. projectVaild := viewmodels.ProjectAccount{}
  129. err := ctx.ReadJSON(&projectVaild)
  130. if err != nil {
  131. log.Println("ReadForm转换异常, error=", err)
  132. return projectVaild, err
  133. }
  134. err = projectVaild.ValidateAddBs()
  135. if err != nil {
  136. log.Println("添加账号验证, error=", err)
  137. return projectVaild, err
  138. }
  139. return projectVaild, nil
  140. }
  141. // 验证账号编辑
  142. func (s *backstageService) ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  143. projectVaild := viewmodels.ProjectAccount{}
  144. err := ctx.ReadJSON(&projectVaild)
  145. if err != nil {
  146. log.Println("ReadForm转换异常, error=", err)
  147. return projectVaild, err
  148. }
  149. err = projectVaild.ValidateSaveBs()
  150. if err != nil {
  151. log.Println("编辑账号验证, error=", err)
  152. return projectVaild, err
  153. }
  154. return projectVaild, nil
  155. }
  156. // 验证账号启用
  157. func (s *backstageService) ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  158. accounttVaild := viewmodels.ProjectAccount{}
  159. err := ctx.ReadForm(&accounttVaild)
  160. if err != nil {
  161. log.Println("ReadForm转换异常, error=", err)
  162. return accounttVaild, err
  163. }
  164. err = accounttVaild.ValidateEnableBs()
  165. if err != nil {
  166. log.Println("编辑账号验证, error=", err)
  167. return accounttVaild, err
  168. }
  169. return accounttVaild, nil
  170. }
  171. // 验证账号启用
  172. func (s *backstageService) ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  173. accounttVaild := viewmodels.ProjectAccount{}
  174. err := ctx.ReadForm(&accounttVaild)
  175. if err != nil {
  176. log.Println("ReadForm转换异常, error=", err)
  177. return accounttVaild, err
  178. }
  179. err = accounttVaild.ValidatePasswordBs()
  180. if err != nil {
  181. log.Println("账号密码验证, error=", err)
  182. return accounttVaild, err
  183. }
  184. return accounttVaild, nil
  185. }
  186. // 验证项目用户登陆相关
  187. func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
  188. // 1.cld账号写入管理员表
  189. managerData := s.managerDao.GetUserName(loginData.StaffName)
  190. // result := &lib.Result{}
  191. // 1.验证CLD账号密码
  192. cld := lib.NewCld()
  193. result, err := cld.LoginValid(loginData)
  194. if managerData.Id != 0 && managerData.IsAdmin == 1 && managerData.Username == "admin" {
  195. result.Data.UserName = "admin"
  196. result.Data.Category = "admin"
  197. managerData.CanLogin = 1
  198. if !(managerData.Username == loginData.StaffName && managerData.Password == loginData.Password) {
  199. return nil, errors.New("账号或者密码不正确")
  200. }
  201. } else {
  202. if err != nil {
  203. return nil, err
  204. }
  205. if result.Code != 0 {
  206. return nil, errors.New(result.Msg)
  207. }
  208. if managerData.Id == 0 {
  209. // 写入管理表
  210. manager := &models.CmManager{}
  211. manager.Username = result.Data.UserName
  212. manager.CreateTime = time.Now()
  213. manager.UpdateTime = time.Now()
  214. manager.LastLogin = time.Now()
  215. manager.Category = result.Data.Category
  216. manager.Office = result.Data.CategoryId
  217. manager.Telephone = result.Data.Telephone
  218. manager.Email = result.Data.Email
  219. manager.Qq = result.Data.Qq
  220. manager.Fixedphone = result.Data.Fixedphone
  221. manager.Position = result.Data.Position
  222. manager.CanLogin = 1
  223. sid, _ := strconv.Atoi(result.Data.Sid)
  224. manager.StaffId = sid
  225. if result.Data.Category == "总部" {
  226. manager.IsAdmin = 1
  227. } else {
  228. groupDao := dao.NewGroupDao(datasource.InstanceDbMaster())
  229. groups, _ := groupDao.GetAll()
  230. if len(groups) != 0 {
  231. manager.GroupId = groups[0].Id
  232. }
  233. }
  234. err = s.managerDao.Create(manager)
  235. if err != nil {
  236. return nil, err
  237. }
  238. }
  239. }
  240. // 2-1
  241. // if managerData.CanLogin == 0 {
  242. // return nil, errors.New("不允许登陆")
  243. // }
  244. // 3.写入登录态
  245. // 加密用户标识
  246. identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  247. if err != nil {
  248. return nil, err
  249. }
  250. // 加密项目标识
  251. category, err := comm.AesEncrypt(result.Data.Category, conf.CookieSecret)
  252. if err != nil {
  253. return nil, err
  254. }
  255. digitalToken := comm.CreateSign(conf.CookieSecret + identity)
  256. // 设置cookie
  257. maxAge := 60 * 60 * 24 * 7
  258. params := url.Values{}
  259. params.Add("identity", identity)
  260. params.Add("attachedIdentity", category)
  261. params.Add("digitalToken", digitalToken)
  262. params.Add("manager", strconv.Itoa(managerData.IsAdmin))
  263. c := &http.Cookie{
  264. Name: "cmBackstage",
  265. Value: params.Encode(),
  266. Path: "/",
  267. MaxAge: maxAge,
  268. HttpOnly: true,
  269. }
  270. http.SetCookie(writer, c)
  271. // staffCld := &viewmodels.StaffCld{}
  272. // staffCld.Category = result.Data.Category
  273. // staffCld.StaffName = result.Data.UserName
  274. return &result.Data, nil
  275. }
  276. // 登出
  277. func (s *backstageService) Out(ctx iris.Context) error {
  278. // 移除cookie
  279. ctx.RemoveCookie("cmBackstage")
  280. return nil
  281. }
  282. // 获得cld办事处和员工 列表
  283. func (s *backstageService) GetCldByCategoryId(categoryId string) (map[string]interface{}, error) {
  284. cld := lib.NewCld()
  285. result, err := cld.GetList(categoryId)
  286. if err != nil {
  287. return nil, err
  288. }
  289. if result["code"].(float64) != 0 {
  290. return nil, errors.New(result["code"].(string))
  291. }
  292. return result, nil
  293. }