backstage_service.go 8.0 KB

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