backstage_service.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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. managerData := s.managerDao.GetUserName(loginData.StaffName)
  173. // result := &lib.Result{}
  174. // 1.验证CLD账号密码
  175. cld := lib.NewCld()
  176. result, err := cld.LoginValid(loginData)
  177. if managerData.Id != 0 && managerData.IsAdmin == 1 && managerData.Username == "admin" {
  178. result.Data.UserName = "admin"
  179. result.Data.Category = "admin"
  180. managerData.CanLogin = 1
  181. if !(managerData.Username == loginData.StaffName && managerData.Password == loginData.Password) {
  182. return nil, errors.New("账号或者密码不正确")
  183. }
  184. } else {
  185. if err != nil {
  186. return nil, err
  187. }
  188. if result.Code != 0 {
  189. return nil, errors.New(result.Msg)
  190. }
  191. if managerData.Id == 0 {
  192. // 写入管理表
  193. manager := &models.CmManager{}
  194. manager.Username = result.Data.UserName
  195. manager.CreateTime = time.Now()
  196. manager.UpdateTime = time.Now()
  197. manager.LastLogin = time.Now()
  198. manager.Category = result.Data.Category
  199. manager.Office = result.Data.CategoryId
  200. manager.Telephone = result.Data.Telephone
  201. manager.Email = result.Data.Email
  202. manager.Qq = result.Data.Qq
  203. manager.Fixedphone = result.Data.Fixedphone
  204. manager.Position = result.Data.Position
  205. err = s.managerDao.Create(manager)
  206. if err != nil {
  207. return nil, err
  208. }
  209. }
  210. }
  211. // 2-1
  212. if managerData.CanLogin == 0 {
  213. return nil, errors.New("不允许登陆")
  214. }
  215. // 3.写入登录态
  216. // 加密用户标识
  217. identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  218. if err != nil {
  219. return nil, err
  220. }
  221. // 加密项目标识
  222. category, err := comm.AesEncrypt(result.Data.Category, conf.CookieSecret)
  223. if err != nil {
  224. return nil, err
  225. }
  226. digitalToken := comm.CreateSign(conf.CookieSecret + identity)
  227. // 设置cookie
  228. maxAge := 60 * 60 * 24 * 7
  229. params := url.Values{}
  230. params.Add("identity", identity)
  231. params.Add("attachedIdentity", category)
  232. params.Add("digitalToken", digitalToken)
  233. c := &http.Cookie{
  234. Name: "cmBackstage",
  235. Value: params.Encode(),
  236. Path: "/",
  237. MaxAge: maxAge,
  238. HttpOnly: true,
  239. }
  240. http.SetCookie(writer, c)
  241. // staffCld := &viewmodels.StaffCld{}
  242. // staffCld.Category = result.Data.Category
  243. // staffCld.StaffName = result.Data.UserName
  244. return &result.Data, nil
  245. }
  246. // 登出
  247. func (s *backstageService) Out(ctx iris.Context) error {
  248. // 移除cookie
  249. ctx.RemoveCookie("cmBackstage")
  250. return nil
  251. }
  252. // 获得cld办事处和员工 列表
  253. func (s *backstageService) GetCldByCategoryId(categoryId string) (map[string]interface{}, error) {
  254. cld := lib.NewCld()
  255. result, err := cld.GetList(categoryId)
  256. if err != nil {
  257. return nil, err
  258. }
  259. if result["code"].(float64) != 0 {
  260. return nil, errors.New(result["code"].(string))
  261. }
  262. return result, nil
  263. }