backstage_service.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  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. manager.CanLogin = 1
  207. if result.Data.Category == "总部" {
  208. manager.IsAdmin = 1
  209. } else {
  210. groupDao := dao.NewGroupDao(datasource.InstanceDbMaster())
  211. groupData := groupDao.GetByName("销售")
  212. manager.GroupId = groupData.Id
  213. }
  214. err = s.managerDao.Create(manager)
  215. if err != nil {
  216. return nil, err
  217. }
  218. }
  219. }
  220. // 2-1
  221. if managerData.CanLogin == 0 {
  222. return nil, errors.New("不允许登陆")
  223. }
  224. // 3.写入登录态
  225. // 加密用户标识
  226. identity, err := comm.AesEncrypt(result.Data.UserName, conf.CookieSecret)
  227. if err != nil {
  228. return nil, err
  229. }
  230. // 加密项目标识
  231. category, err := comm.AesEncrypt(result.Data.Category, conf.CookieSecret)
  232. if err != nil {
  233. return nil, err
  234. }
  235. digitalToken := comm.CreateSign(conf.CookieSecret + identity)
  236. // 设置cookie
  237. maxAge := 60 * 60 * 24 * 7
  238. params := url.Values{}
  239. params.Add("identity", identity)
  240. params.Add("attachedIdentity", category)
  241. params.Add("digitalToken", digitalToken)
  242. params.Add("manager", strconv.Itoa(managerData.IsAdmin))
  243. c := &http.Cookie{
  244. Name: "cmBackstage",
  245. Value: params.Encode(),
  246. Path: "/",
  247. MaxAge: maxAge,
  248. HttpOnly: true,
  249. }
  250. http.SetCookie(writer, c)
  251. // staffCld := &viewmodels.StaffCld{}
  252. // staffCld.Category = result.Data.Category
  253. // staffCld.StaffName = result.Data.UserName
  254. return &result.Data, nil
  255. }
  256. // 登出
  257. func (s *backstageService) Out(ctx iris.Context) error {
  258. // 移除cookie
  259. ctx.RemoveCookie("cmBackstage")
  260. return nil
  261. }
  262. // 获得cld办事处和员工 列表
  263. func (s *backstageService) GetCldByCategoryId(categoryId string) (map[string]interface{}, error) {
  264. cld := lib.NewCld()
  265. result, err := cld.GetList(categoryId)
  266. if err != nil {
  267. return nil, err
  268. }
  269. if result["code"].(float64) != 0 {
  270. return nil, errors.New(result["code"].(string))
  271. }
  272. return result, nil
  273. }