backstage_service.go 7.6 KB

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