backstage_service.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  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. "github.com/kataras/iris/v12"
  14. "go.mod/comm"
  15. "go.mod/conf"
  16. "go.mod/lib"
  17. "go.mod/web/viewmodels"
  18. )
  19. //定义项目用户Service接口
  20. type BackstageService interface {
  21. ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error)
  22. ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error)
  23. ValidRuleProject(ctx iris.Context) (viewmodels.Project, error)
  24. ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error)
  25. ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error)
  26. ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error)
  27. ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error)
  28. ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error)
  29. ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error)
  30. GetCldByCategoryId(categoryId string) (map[string]interface{}, error)
  31. Out(ctx iris.Context) error
  32. }
  33. //返回service操作类
  34. type backstageService struct {
  35. // projectAccountDao *dao.ProjectAccountDao
  36. // projectDao *dao.ProjectDao
  37. }
  38. //创建项目用户service
  39. func NewBackstageService() BackstageService {
  40. return &backstageService{
  41. // projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
  42. // projectDao: dao.NewProjectDao(datasource.InstanceDbMaster()),
  43. }
  44. }
  45. // 登陆验证
  46. func (s *backstageService) ValidRuleLogin(ctx iris.Context) (viewmodels.StaffCld, error) {
  47. loginVaild := viewmodels.StaffCld{}
  48. err := ctx.ReadJSON(&loginVaild)
  49. if err != nil {
  50. log.Println("ReadForm转换异常, error=", err)
  51. return loginVaild, err
  52. }
  53. err = loginVaild.ValidateLogin()
  54. if err != nil {
  55. log.Println("登录验证, error=", err)
  56. return loginVaild, err
  57. }
  58. return loginVaild, nil
  59. }
  60. // 验证项目
  61. func (s *backstageService) ValidRuleProject(ctx iris.Context) (viewmodels.Project, error) {
  62. projectVaild := viewmodels.Project{}
  63. err := ctx.ReadForm(&projectVaild)
  64. if err != nil {
  65. log.Println("ReadForm转换异常, error=", err)
  66. return projectVaild, err
  67. }
  68. err = projectVaild.ValidateId()
  69. if err != nil {
  70. log.Println("验证项目, error=", err)
  71. return projectVaild, err
  72. }
  73. return projectVaild, nil
  74. }
  75. // 验证项目
  76. func (s *backstageService) ValidRuleProjectAdd(ctx iris.Context) (viewmodels.Project, error) {
  77. projectVaild := viewmodels.Project{}
  78. err := ctx.ReadJSON(&projectVaild)
  79. if err != nil {
  80. log.Println("ReadForm转换异常, error=", err)
  81. return projectVaild, err
  82. }
  83. err = projectVaild.ValidateAdd()
  84. if err != nil {
  85. log.Println("添加项目验证, error=", err)
  86. return projectVaild, err
  87. }
  88. return projectVaild, nil
  89. }
  90. // 项目保存
  91. func (s *backstageService) ValidRuleProjectSave(ctx iris.Context) (viewmodels.Project, error) {
  92. projectVaild := viewmodels.Project{}
  93. err := ctx.ReadJSON(&projectVaild)
  94. if err != nil {
  95. log.Println("ReadForm转换异常, error=", err)
  96. return projectVaild, err
  97. }
  98. err = projectVaild.ValidateSave()
  99. if err != nil {
  100. log.Println("添加项目验证, error=", err)
  101. return projectVaild, err
  102. }
  103. return projectVaild, nil
  104. }
  105. // 验证账号新增
  106. func (s *backstageService) ValidRuleAccountAdd(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  107. projectVaild := viewmodels.ProjectAccount{}
  108. err := ctx.ReadJSON(&projectVaild)
  109. if err != nil {
  110. log.Println("ReadForm转换异常, error=", err)
  111. return projectVaild, err
  112. }
  113. err = projectVaild.ValidateAddBs()
  114. if err != nil {
  115. log.Println("添加账号验证, error=", err)
  116. return projectVaild, err
  117. }
  118. return projectVaild, nil
  119. }
  120. // 验证账号编辑
  121. func (s *backstageService) ValidRuleAccountSave(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  122. projectVaild := viewmodels.ProjectAccount{}
  123. err := ctx.ReadJSON(&projectVaild)
  124. if err != nil {
  125. log.Println("ReadForm转换异常, error=", err)
  126. return projectVaild, err
  127. }
  128. err = projectVaild.ValidateSaveBs()
  129. if err != nil {
  130. log.Println("编辑账号验证, error=", err)
  131. return projectVaild, err
  132. }
  133. return projectVaild, nil
  134. }
  135. // 验证账号启用
  136. func (s *backstageService) ValidRuleAccountEnable(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  137. accounttVaild := viewmodels.ProjectAccount{}
  138. err := ctx.ReadForm(&accounttVaild)
  139. if err != nil {
  140. log.Println("ReadForm转换异常, error=", err)
  141. return accounttVaild, err
  142. }
  143. err = accounttVaild.ValidateEnableBs()
  144. if err != nil {
  145. log.Println("编辑账号验证, error=", err)
  146. return accounttVaild, err
  147. }
  148. return accounttVaild, nil
  149. }
  150. // 验证账号启用
  151. func (s *backstageService) ValidRuleAccountPassword(ctx iris.Context) (viewmodels.ProjectAccount, error) {
  152. accounttVaild := viewmodels.ProjectAccount{}
  153. err := ctx.ReadForm(&accounttVaild)
  154. if err != nil {
  155. log.Println("ReadForm转换异常, error=", err)
  156. return accounttVaild, err
  157. }
  158. err = accounttVaild.ValidatePasswordBs()
  159. if err != nil {
  160. log.Println("账号密码验证, error=", err)
  161. return accounttVaild, err
  162. }
  163. return accounttVaild, nil
  164. }
  165. // 验证项目用户登陆相关
  166. func (s *backstageService) ValidCldStaff(loginData viewmodels.StaffCld, writer http.ResponseWriter) (*viewmodels.ResultCld, error) {
  167. // 1.验证CLD账号密码
  168. cld := lib.NewCld()
  169. result, err := cld.LoginValid(loginData)
  170. if err != nil {
  171. return nil, err
  172. }
  173. if result.Code != 0 {
  174. return nil, errors.New(result.Msg)
  175. }
  176. // 2.写入登录态
  177. // 加密用户标识
  178. identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  179. if err != nil {
  180. return nil, err
  181. }
  182. // 加密项目标识
  183. category, err := comm.AesEncrypt(result.Data.Category, conf.CookieSecret)
  184. if err != nil {
  185. return nil, err
  186. }
  187. digitalToken := comm.CreateSign(conf.CookieSecret + identity)
  188. // 设置cookie
  189. maxAge := 60 * 60 * 24 * 7
  190. params := url.Values{}
  191. params.Add("identity", identity)
  192. params.Add("attachedIdentity", category)
  193. params.Add("digitalToken", digitalToken)
  194. c := &http.Cookie{
  195. Name: "cmBackstage",
  196. Value: params.Encode(),
  197. Path: "/",
  198. MaxAge: maxAge,
  199. HttpOnly: true,
  200. }
  201. http.SetCookie(writer, c)
  202. // staffCld := &viewmodels.StaffCld{}
  203. // staffCld.Category = result.Data.Category
  204. // staffCld.StaffName = result.Data.UserName
  205. return &result.Data, nil
  206. }
  207. // 登出
  208. func (s *backstageService) Out(ctx iris.Context) error {
  209. // 移除cookie
  210. ctx.RemoveCookie("cmBackstage")
  211. return nil
  212. }
  213. // 获得cld办事处和员工 列表
  214. func (s *backstageService) GetCldByCategoryId(categoryId string) (map[string]interface{}, error) {
  215. cld := lib.NewCld()
  216. result, err := cld.GetList(categoryId)
  217. if err != nil {
  218. return nil, err
  219. }
  220. if result["code"].(float64) != 0 {
  221. return nil, errors.New(result["code"].(string))
  222. }
  223. return result, nil
  224. }