company.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_crm/models"
  5. "eta/eta_mini_crm/models/request"
  6. "eta/eta_mini_crm/models/response"
  7. "eta/eta_mini_crm/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // CompanyController 机构
  15. type CompanyController struct {
  16. BaseAuthController
  17. }
  18. // Add
  19. // @Title 新增机构
  20. // @Description 新增机构
  21. // @Param request body request.CompanyAddReq true "type json string"
  22. // @Success 200 Ret=200 操作成功
  23. // @router /add [post]
  24. func (this *CompanyController) Add() {
  25. br := new(models.BaseResponse).Init()
  26. defer func() {
  27. if br.ErrMsg == "" {
  28. br.IsSendEmail = false
  29. }
  30. this.Data["json"] = br
  31. this.ServeJSON()
  32. }()
  33. sysUser := this.SysUser
  34. if sysUser == nil {
  35. br.Msg = "请登录"
  36. br.ErrMsg = "请登录,SysUser Is Empty"
  37. br.Ret = 408
  38. return
  39. }
  40. var req request.CompanyAddReq
  41. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  42. br.Msg = "参数解析异常"
  43. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  44. return
  45. }
  46. req.CompanyName = strings.TrimSpace(req.CompanyName)
  47. if req.CompanyName == "" {
  48. br.Msg = "请输入投资者名称"
  49. return
  50. }
  51. req.CreditCode = strings.TrimSpace(req.CreditCode)
  52. if req.CreditCode == "" {
  53. br.Msg = "请输入社会统一信用码"
  54. return
  55. }
  56. req.Industry = strings.TrimSpace(req.Industry)
  57. if req.Industry == "" {
  58. br.Msg = "请输入所属行业"
  59. return
  60. }
  61. req.Province = strings.TrimSpace(req.Province)
  62. if req.ProvinceId <= 0 || req.Province == "" {
  63. br.Msg = "请选择省"
  64. return
  65. }
  66. req.City = strings.TrimSpace(req.City)
  67. if req.CityId <= 0 || req.City == "" {
  68. br.Msg = "请选择市"
  69. return
  70. }
  71. if req.CityId <= 0 || req.City == "" {
  72. br.Msg = "请选择市"
  73. return
  74. }
  75. if req.SellerId <= 0 {
  76. br.Msg = "请选择营业部"
  77. return
  78. }
  79. sellerItem, e := models.GetSysUserById(req.SellerId)
  80. if e != nil {
  81. if e.Error() == utils.ErrNoRow() {
  82. br.Msg = "所选营业部不存在,请刷新页面"
  83. return
  84. }
  85. br.Msg = "操作失败"
  86. br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
  87. return
  88. }
  89. // 校验社会统一信用码是否存在
  90. companyOb := new(models.Company)
  91. {
  92. cond := fmt.Sprintf(` AND %s = ?`, companyOb.Cols().CreditCode)
  93. pars := make([]interface{}, 0)
  94. pars = append(pars, req.CreditCode)
  95. exist, e := companyOb.GetItemByCondition(cond, pars, "")
  96. if e != nil && e.Error() != utils.ErrNoRow() {
  97. br.Msg = "操作失败"
  98. br.ErrMsg = fmt.Sprintf("获取重复机构信用码失败, %v", e)
  99. return
  100. }
  101. if exist != nil && exist.CompanyId > 0 {
  102. br.Msg = "社会统一信用码已存在"
  103. return
  104. }
  105. }
  106. companyOb.CompanyName = req.CompanyName
  107. companyOb.CreditCode = req.CreditCode
  108. companyOb.ProvinceId = req.ProvinceId
  109. companyOb.Province = req.Province
  110. companyOb.CityId = req.CityId
  111. companyOb.City = req.City
  112. companyOb.Address = req.Address
  113. companyOb.Industry = req.Industry
  114. companyOb.SellerId = req.SellerId
  115. companyOb.SellerName = sellerItem.SysRealName
  116. companyOb.SysUserId = sysUser.SysUserId
  117. companyOb.SysUserRealName = sysUser.SysRealName
  118. companyOb.AuthStatus = models.AuthStatusOpen
  119. companyOb.CreateTime = time.Now().Local()
  120. companyOb.ModifyTime = time.Now().Local()
  121. if e := companyOb.Create(); e != nil {
  122. br.Msg = "操作失败"
  123. br.ErrMsg = fmt.Sprintf("新增机构失败, %v", e)
  124. return
  125. }
  126. // 操作记录
  127. go func() {
  128. recordOb := new(models.CompanyUserOperateRecord)
  129. recordOb.CompanyId = companyOb.CompanyId
  130. recordOb.Remark = fmt.Sprintf("%s新增机构投资者", sysUser.SysRealName)
  131. recordOb.SysUserId = sysUser.SysUserId
  132. recordOb.SysUserRealName = sysUser.SysRealName
  133. recordOb.CreateTime = time.Now().Local()
  134. if e := recordOb.Create(); e != nil {
  135. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyOb.CompanyId, e))
  136. }
  137. }()
  138. br.Ret = 200
  139. br.Msg = "操作成功"
  140. br.Success = true
  141. }
  142. // Edit
  143. // @Title 编辑机构
  144. // @Description 编辑机构
  145. // @Param request body request.CompanyEditReq true "type json string"
  146. // @Success 200 Ret=200 操作成功
  147. // @router /edit [post]
  148. func (this *CompanyController) Edit() {
  149. br := new(models.BaseResponse).Init()
  150. defer func() {
  151. if br.ErrMsg == "" {
  152. br.IsSendEmail = false
  153. }
  154. this.Data["json"] = br
  155. this.ServeJSON()
  156. }()
  157. sysUser := this.SysUser
  158. if sysUser == nil {
  159. br.Msg = "请登录"
  160. br.ErrMsg = "请登录,SysUser Is Empty"
  161. br.Ret = 408
  162. return
  163. }
  164. var req request.CompanyEditReq
  165. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  166. br.Msg = "参数解析异常"
  167. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  168. return
  169. }
  170. if req.CompanyId <= 0 {
  171. br.Msg = "参数有误"
  172. br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
  173. return
  174. }
  175. req.CompanyName = strings.TrimSpace(req.CompanyName)
  176. if req.CompanyName == "" {
  177. br.Msg = "请输入投资者名称"
  178. return
  179. }
  180. req.CreditCode = strings.TrimSpace(req.CreditCode)
  181. if req.CreditCode == "" {
  182. br.Msg = "请输入社会统一信用码"
  183. return
  184. }
  185. req.Industry = strings.TrimSpace(req.Industry)
  186. if req.Industry == "" {
  187. br.Msg = "请输入所属行业"
  188. return
  189. }
  190. req.Province = strings.TrimSpace(req.Province)
  191. if req.ProvinceId <= 0 || req.Province == "" {
  192. br.Msg = "请选择省"
  193. return
  194. }
  195. req.City = strings.TrimSpace(req.City)
  196. if req.CityId <= 0 || req.City == "" {
  197. br.Msg = "请选择市"
  198. return
  199. }
  200. if req.CityId <= 0 || req.City == "" {
  201. br.Msg = "请选择市"
  202. return
  203. }
  204. if req.SellerId <= 0 {
  205. br.Msg = "请选择营业部"
  206. return
  207. }
  208. companyOb := new(models.Company)
  209. companyItem, e := companyOb.GetItemById(req.CompanyId)
  210. if e != nil {
  211. if e.Error() == utils.ErrNoRow() {
  212. br.Msg = "机构不存在,请刷新页面"
  213. return
  214. }
  215. br.Msg = "操作失败"
  216. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  217. return
  218. }
  219. // 操作权限校验
  220. if sysUser.SysRoleId != utils.AdminRoleId {
  221. if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
  222. br.Msg = "无权操作"
  223. return
  224. }
  225. }
  226. sellerItem, e := models.GetSysUserById(req.SellerId)
  227. if e != nil {
  228. if e.Error() == utils.ErrNoRow() {
  229. br.Msg = "所选营业部不存在,请刷新页面"
  230. return
  231. }
  232. br.Msg = "操作失败"
  233. br.ErrMsg = fmt.Sprintf("获取营业部销售失败, %v", e)
  234. return
  235. }
  236. // 校验社会统一信用码是否存在
  237. {
  238. cond := fmt.Sprintf(` AND %s = ? AND %s <> ?`, companyOb.Cols().CreditCode, companyOb.Cols().PrimaryId)
  239. pars := make([]interface{}, 0)
  240. pars = append(pars, req.CreditCode, req.CompanyId)
  241. exist, e := companyOb.GetItemByCondition(cond, pars, "")
  242. if e != nil && e.Error() != utils.ErrNoRow() {
  243. br.Msg = "操作失败"
  244. br.ErrMsg = fmt.Sprintf("获取重复机构信用码失败, %v", e)
  245. return
  246. }
  247. if exist != nil && exist.CompanyId > 0 {
  248. br.Msg = "社会统一信用码已存在"
  249. return
  250. }
  251. }
  252. // 更新机构
  253. var updateName bool
  254. if companyItem.CompanyName != req.CompanyName {
  255. updateName = true
  256. }
  257. companyItem.CompanyName = req.CompanyName
  258. companyItem.CreditCode = req.CreditCode
  259. companyItem.ProvinceId = req.ProvinceId
  260. companyItem.Province = req.Province
  261. companyItem.CityId = req.CityId
  262. companyItem.City = req.City
  263. companyItem.Address = req.Address
  264. companyItem.Industry = req.Industry
  265. companyItem.SellerId = req.SellerId
  266. companyItem.SellerName = sellerItem.SysRealName
  267. companyItem.ModifyTime = time.Now().Local()
  268. updateCols := []string{
  269. companyOb.Cols().CompanyName, companyOb.Cols().CreditCode, companyOb.Cols().ProvinceId, companyOb.Cols().Province, companyOb.Cols().CityId, companyOb.Cols().City, companyOb.Cols().Address, companyOb.Cols().Industry, companyOb.Cols().SellerId, companyOb.Cols().SellerName, companyOb.Cols().ModifyTime,
  270. }
  271. if e := companyItem.Update(updateCols); e != nil {
  272. br.Msg = "操作失败"
  273. br.ErrMsg = fmt.Sprintf("更新机构失败, %v", e)
  274. return
  275. }
  276. // 更新冗余字段
  277. if updateName {
  278. userOb := new(models.Users)
  279. if e = userOb.UpdateCompanyNameById(req.CompanyId, req.CompanyName); e != nil {
  280. br.Msg = "操作失败"
  281. br.ErrMsg = fmt.Sprintf("更新用户表机构名称失败, CompanyId: %d, CompanyName: %s, ErrMsg: %v", req.CompanyId, req.CompanyName, e)
  282. return
  283. }
  284. }
  285. // 操作记录
  286. go func() {
  287. recordOb := new(models.CompanyUserOperateRecord)
  288. recordOb.CompanyId = companyItem.CompanyId
  289. recordOb.Remark = fmt.Sprintf("%s编辑机构投资者", sysUser.SysRealName)
  290. recordOb.SysUserId = sysUser.SysUserId
  291. recordOb.SysUserRealName = sysUser.SysRealName
  292. recordOb.CreateTime = time.Now().Local()
  293. if e := recordOb.Create(); e != nil {
  294. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyItem.CompanyId, e))
  295. }
  296. }()
  297. br.Ret = 200
  298. br.Msg = "操作成功"
  299. br.Success = true
  300. }
  301. // Remove
  302. // @Title 删除机构
  303. // @Description 删除机构
  304. // @Param request body request.CompanyRemoveReq true "type json string"
  305. // @Success 200 Ret=200 操作成功
  306. // @router /remove [post]
  307. func (this *CompanyController) Remove() {
  308. br := new(models.BaseResponse).Init()
  309. defer func() {
  310. if br.ErrMsg == "" {
  311. br.IsSendEmail = false
  312. }
  313. this.Data["json"] = br
  314. this.ServeJSON()
  315. }()
  316. sysUser := this.SysUser
  317. if sysUser == nil {
  318. br.Msg = "请登录"
  319. br.ErrMsg = "请登录,SysUser Is Empty"
  320. br.Ret = 408
  321. return
  322. }
  323. var req request.CompanyRemoveReq
  324. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  325. br.Msg = "参数解析异常"
  326. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  327. return
  328. }
  329. if req.CompanyId <= 0 {
  330. br.Msg = "参数有误"
  331. br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
  332. return
  333. }
  334. companyOb := new(models.Company)
  335. companyItem, e := companyOb.GetItemById(req.CompanyId)
  336. if e != nil {
  337. if e.Error() == utils.ErrNoRow() {
  338. br.Ret = 200
  339. br.Msg = "操作成功"
  340. br.Success = true
  341. return
  342. }
  343. br.Msg = "操作失败"
  344. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  345. return
  346. }
  347. // 操作权限校验
  348. if sysUser.SysRoleId != utils.AdminRoleId {
  349. if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
  350. br.Msg = "无权操作"
  351. return
  352. }
  353. }
  354. // 删除机构及用户
  355. if e = companyOb.RemoveCompanyAndUsers(req.CompanyId); e != nil {
  356. br.Msg = "操作失败"
  357. br.ErrMsg = fmt.Sprintf("删除机构及用户失败, %v", e)
  358. return
  359. }
  360. // 操作记录
  361. go func() {
  362. recordOb := new(models.CompanyUserOperateRecord)
  363. recordOb.CompanyId = companyItem.CompanyId
  364. recordOb.Remark = fmt.Sprintf("%s删除机构投资者", sysUser.SysRealName)
  365. recordOb.SysUserId = sysUser.SysUserId
  366. recordOb.SysUserRealName = sysUser.SysRealName
  367. recordOb.CreateTime = time.Now().Local()
  368. if e := recordOb.Create(); e != nil {
  369. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyItem.CompanyId, e))
  370. }
  371. }()
  372. br.Ret = 200
  373. br.Msg = "操作成功"
  374. br.Success = true
  375. }
  376. // TransAuth
  377. // @Title 切换阅读权限
  378. // @Description 切换阅读权限
  379. // @Param request body request.CompanyTransAuthReq true "type json string"
  380. // @Success 200 Ret=200 操作成功
  381. // @router /trans_auth [post]
  382. func (this *CompanyController) TransAuth() {
  383. br := new(models.BaseResponse).Init()
  384. defer func() {
  385. if br.ErrMsg == "" {
  386. br.IsSendEmail = false
  387. }
  388. this.Data["json"] = br
  389. this.ServeJSON()
  390. }()
  391. sysUser := this.SysUser
  392. if sysUser == nil {
  393. br.Msg = "请登录"
  394. br.ErrMsg = "请登录,SysUser Is Empty"
  395. br.Ret = 408
  396. return
  397. }
  398. var req request.CompanyTransAuthReq
  399. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  400. br.Msg = "参数解析异常"
  401. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  402. return
  403. }
  404. if req.CompanyId <= 0 {
  405. br.Msg = "参数有误"
  406. br.ErrMsg = fmt.Sprintf("机构ID参数有误, CompanyId: %d", req.CompanyId)
  407. return
  408. }
  409. companyOb := new(models.Company)
  410. companyItem, e := companyOb.GetItemById(req.CompanyId)
  411. if e != nil {
  412. if e.Error() == utils.ErrNoRow() {
  413. br.Ret = 200
  414. br.Msg = "操作成功"
  415. br.Success = true
  416. return
  417. }
  418. br.Msg = "操作失败"
  419. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  420. return
  421. }
  422. // 操作权限校验
  423. if sysUser.SysRoleId != utils.AdminRoleId {
  424. if sysUser.SysUserId != companyItem.SysUserId && sysUser.SysUserId != companyItem.SellerId {
  425. br.Msg = "无权操作"
  426. return
  427. }
  428. }
  429. // 更新机构权限并同步其下用户
  430. statusChange := models.AuthStatusClose
  431. if companyItem.AuthStatus == models.AuthStatusClose {
  432. statusChange = models.AuthStatusOpen
  433. }
  434. optRemarks := map[int]string{models.AuthStatusClose: "关闭", models.AuthStatusOpen: "开启"}
  435. if e = companyOb.ChangeCompanyAndUsersAuth(req.CompanyId, statusChange); e != nil {
  436. br.Msg = "操作失败"
  437. br.ErrMsg = fmt.Sprintf("更新机构及用户权限失败, %v", e)
  438. return
  439. }
  440. // 操作记录
  441. go func() {
  442. recordOb := new(models.CompanyUserOperateRecord)
  443. recordOb.CompanyId = companyItem.CompanyId
  444. recordOb.Remark = fmt.Sprintf("%s%s机构投资者权限", sysUser.SysRealName, optRemarks[statusChange])
  445. recordOb.SysUserId = sysUser.SysUserId
  446. recordOb.SysUserRealName = sysUser.SysRealName
  447. recordOb.CreateTime = time.Now().Local()
  448. if e := recordOb.Create(); e != nil {
  449. utils.FileLog.Info(fmt.Sprintf("新增操作记录失败, CompanyId: %d, ErrMsg: %v", companyItem.CompanyId, e))
  450. }
  451. }()
  452. br.Ret = 200
  453. br.Msg = "操作成功"
  454. br.Success = true
  455. }
  456. // Detail
  457. // @Title 机构详情
  458. // @Description 机构详情
  459. // @Param CompanyId query int true "机构ID"
  460. // @Success 200 {object} models.CompanyItem
  461. // @router /detail [get]
  462. func (this *CompanyController) Detail() {
  463. br := new(models.BaseResponse).Init()
  464. defer func() {
  465. if br.ErrMsg == "" {
  466. br.IsSendEmail = false
  467. }
  468. this.Data["json"] = br
  469. this.ServeJSON()
  470. }()
  471. sysUser := this.SysUser
  472. if sysUser == nil {
  473. br.Msg = "请登录"
  474. br.ErrMsg = "请登录,SysUser Is Empty"
  475. br.Ret = 408
  476. return
  477. }
  478. companyId, _ := this.GetInt("CompanyId")
  479. if companyId <= 0 {
  480. br.Msg = "参数有误"
  481. br.ErrMsg = fmt.Sprintf("参数有误, %d", companyId)
  482. return
  483. }
  484. companyOb := new(models.Company)
  485. companyItem, e := companyOb.GetItemById(companyId)
  486. if e != nil {
  487. if e.Error() == utils.ErrNoRow() {
  488. br.Msg = "机构不存在,请刷新页面"
  489. return
  490. }
  491. br.Msg = "获取失败"
  492. br.ErrMsg = fmt.Sprintf("获取机构失败, %v", e)
  493. return
  494. }
  495. resp := companyItem.Format2Item()
  496. br.Data = resp
  497. br.Ret = 200
  498. br.Msg = "获取成功"
  499. br.Success = true
  500. }
  501. // OperateRecords
  502. // @Title 机构-操作记录
  503. // @Description 机构-操作记录
  504. // @Param CompanyId query int true "机构ID"
  505. // @Success 200 {object} models.CompanyUserOperateRecordItem
  506. // @router /operate_records [get]
  507. func (this *CompanyController) OperateRecords() {
  508. br := new(models.BaseResponse).Init()
  509. defer func() {
  510. if br.ErrMsg == "" {
  511. br.IsSendEmail = false
  512. }
  513. this.Data["json"] = br
  514. this.ServeJSON()
  515. }()
  516. sysUser := this.SysUser
  517. if sysUser == nil {
  518. br.Msg = "请登录"
  519. br.ErrMsg = "请登录,SysUser Is Empty"
  520. br.Ret = 408
  521. return
  522. }
  523. companyId, _ := this.GetInt("CompanyId")
  524. if companyId <= 0 {
  525. br.Msg = "参数有误"
  526. br.ErrMsg = fmt.Sprintf("参数有误, %d", companyId)
  527. return
  528. }
  529. resp := make([]*models.CompanyUserOperateRecordItem, 0)
  530. recordOb := new(models.CompanyUserOperateRecord)
  531. cond := fmt.Sprintf(` AND %s = ?`, recordOb.Cols().CompanyId)
  532. pars := make([]interface{}, 0)
  533. pars = append(pars, companyId)
  534. list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
  535. if e != nil {
  536. br.Msg = "获取失败"
  537. br.ErrMsg = fmt.Sprintf("获取操作记录列表失败, %v", e)
  538. return
  539. }
  540. for _, v := range list {
  541. resp = append(resp, v.Format2Item())
  542. }
  543. br.Data = resp
  544. br.Ret = 200
  545. br.Msg = "获取成功"
  546. br.Success = true
  547. }
  548. // PageList
  549. // @Title 机构列表-分页
  550. // @Description 机构列表-分页
  551. // @Param request body request.CompanyListForm true "type json string"
  552. // @Success 200 {object} response.CompanyPageListResp
  553. // @router /page_list [get]
  554. func (this *CompanyController) PageList() {
  555. br := new(models.BaseResponse).Init()
  556. defer func() {
  557. if br.ErrMsg == "" {
  558. br.IsSendEmail = false
  559. }
  560. this.Data["json"] = br
  561. this.ServeJSON()
  562. }()
  563. sysUser := this.SysUser
  564. if sysUser == nil {
  565. br.Msg = "请登录"
  566. br.ErrMsg = "请登录,SysUser Is Empty"
  567. br.Ret = 408
  568. return
  569. }
  570. params := new(request.CompanyListForm)
  571. if e := this.ParseForm(params); e != nil {
  572. br.Msg = "参数解析异常"
  573. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  574. return
  575. }
  576. resp := new(response.CompanyPageListResp)
  577. companyOb := new(models.Company)
  578. // 仅超管/创建人/销售可见
  579. cond := ``
  580. pars := make([]interface{}, 0)
  581. if sysUser.SysRoleId != utils.AdminRoleId {
  582. cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, companyOb.Cols().SysUserId, companyOb.Cols().SellerId)
  583. pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
  584. }
  585. // 筛选项
  586. {
  587. // 关键词(机构名称/联系人名称/联系人手机号)
  588. keywords := strings.TrimSpace(params.Keywords)
  589. if keywords != "" {
  590. kw := fmt.Sprint("%", keywords, "%")
  591. usersOb := new(models.Users)
  592. companyIds, e := usersOb.GetCompanyIdsByKeywords(kw)
  593. if e != nil {
  594. br.Msg = "获取失败"
  595. br.ErrMsg = fmt.Sprintf("搜索用户表关键词失败, %v", e)
  596. return
  597. }
  598. if len(companyIds) > 0 {
  599. cond += fmt.Sprintf(` AND (%s LIKE ? OR %s IN (%s))`, companyOb.Cols().CompanyName, companyOb.Cols().PrimaryId, utils.GetOrmInReplace(len(companyIds)))
  600. pars = append(pars, kw, companyIds)
  601. } else {
  602. cond += fmt.Sprintf(` AND %s LIKE ?`, companyOb.Cols().CompanyName)
  603. pars = append(pars, kw)
  604. }
  605. }
  606. // 营业部
  607. params.SellerIds = strings.TrimSpace(params.SellerIds)
  608. if params.SellerIds != "" {
  609. var sellerIds []int
  610. idArr := strings.Split(params.SellerIds, ",")
  611. for _, v := range idArr {
  612. id, _ := strconv.Atoi(v)
  613. if id > 0 {
  614. sellerIds = append(sellerIds, id)
  615. }
  616. }
  617. if len(sellerIds) == 0 {
  618. page := paging.GetPaging(params.CurrentIndex, params.PageSize, 0)
  619. resp.Paging = page
  620. resp.List = make([]*models.CompanyItem, 0)
  621. br.Data = resp
  622. br.Ret = 200
  623. br.Msg = "获取成功"
  624. br.Success = true
  625. return
  626. }
  627. cond += fmt.Sprintf(` AND %s IN (%s)`, companyOb.Cols().SellerId, utils.GetOrmInReplace(len(sellerIds)))
  628. pars = append(pars, sellerIds)
  629. }
  630. // 创建时间区间
  631. params.StartTime = strings.TrimSpace(params.StartTime)
  632. params.EndTime = strings.TrimSpace(params.EndTime)
  633. if params.StartTime != "" && params.EndTime != "" {
  634. _, e := time.ParseInLocation(utils.FormatDate, params.StartTime, time.Local)
  635. if e != nil {
  636. br.Msg = "开始时间格式有误"
  637. return
  638. }
  639. _, e = time.ParseInLocation(utils.FormatDate, params.EndTime, time.Local)
  640. if e != nil {
  641. br.Msg = "结束时间格式有误"
  642. return
  643. }
  644. cond += fmt.Sprintf(` AND (%s BETWEEN ? AND ?)`, companyOb.Cols().CreateTime)
  645. pars = append(pars, fmt.Sprintf("%s 00:00:00", params.StartTime), fmt.Sprintf("%s 23:59:59", params.EndTime))
  646. }
  647. }
  648. // 分页
  649. var startSize int
  650. if params.PageSize <= 0 {
  651. params.PageSize = utils.PageSize20
  652. }
  653. if params.CurrentIndex <= 0 {
  654. params.CurrentIndex = 1
  655. }
  656. startSize = utils.StartIndex(params.CurrentIndex, params.PageSize)
  657. // 排序
  658. orderRule := fmt.Sprintf(`%s DESC`, companyOb.Cols().CreateTime)
  659. if params.SortField > 0 && params.SortRule > 0 {
  660. fieldMap := map[int]string{1: companyOb.Cols().CreateTime}
  661. ruleMap := map[int]string{1: "ASC", 2: "DESC"}
  662. if fieldMap[params.SortField] != "" && ruleMap[params.SortRule] != "" {
  663. orderRule = fmt.Sprintf("%s %s", fieldMap[params.SortField], ruleMap[params.SortRule])
  664. }
  665. }
  666. total, e := companyOb.GetCountByCondition(cond, pars)
  667. if e != nil {
  668. br.Msg = "获取失败"
  669. br.ErrMsg = fmt.Sprintf("获取机构总数失败, %v", e)
  670. return
  671. }
  672. list, e := companyOb.GetPageItemsByCondition(cond, pars, []string{}, orderRule, startSize, params.PageSize)
  673. if e != nil {
  674. br.Msg = "获取失败"
  675. br.ErrMsg = fmt.Sprintf("获取机构分页列表失败, %v", e)
  676. return
  677. }
  678. respList := make([]*models.CompanyItem, 0)
  679. for _, v := range list {
  680. respList = append(respList, v.Format2Item())
  681. }
  682. page := paging.GetPaging(params.CurrentIndex, params.PageSize, total)
  683. resp.Paging = page
  684. resp.List = respList
  685. br.Data = resp
  686. br.Ret = 200
  687. br.Msg = "获取成功"
  688. br.Success = true
  689. }
  690. // Search
  691. // @Title 机构列表-搜索
  692. // @Description 机构列表-搜索
  693. // @Param request body request.CompanyListForm true "type json string"
  694. // @Success 200 {object} models.CompanyItem
  695. // @router /search [get]
  696. func (this *CompanyController) Search() {
  697. br := new(models.BaseResponse).Init()
  698. defer func() {
  699. if br.ErrMsg == "" {
  700. br.IsSendEmail = false
  701. }
  702. this.Data["json"] = br
  703. this.ServeJSON()
  704. }()
  705. sysUser := this.SysUser
  706. if sysUser == nil {
  707. br.Msg = "请登录"
  708. br.ErrMsg = "请登录,SysUser Is Empty"
  709. br.Ret = 408
  710. return
  711. }
  712. params := new(request.CompanyListForm)
  713. if e := this.ParseForm(params); e != nil {
  714. br.Msg = "参数解析异常"
  715. br.ErrMsg = fmt.Sprintf("参数解析异常, %v", e)
  716. return
  717. }
  718. resp := make([]*models.CompanyItem, 0)
  719. companyOb := new(models.Company)
  720. // 仅超管/创建人/销售可见
  721. cond := ``
  722. pars := make([]interface{}, 0)
  723. if sysUser.SysRoleId != utils.AdminRoleId {
  724. cond += fmt.Sprintf(` AND (%s = ? OR %s = ?)`, companyOb.Cols().SysUserId, companyOb.Cols().SellerId)
  725. pars = append(pars, sysUser.SysUserId, sysUser.SysUserId)
  726. }
  727. keywords := strings.TrimSpace(params.Keywords)
  728. if keywords != "" {
  729. kw := fmt.Sprint("%", keywords, "%")
  730. cond += fmt.Sprintf(` AND %s LIKE ?`, companyOb.Cols().CompanyName)
  731. pars = append(pars, kw)
  732. }
  733. list, e := companyOb.GetItemsByCondition(cond, pars, []string{}, "")
  734. if e != nil {
  735. br.Msg = "获取失败"
  736. br.ErrMsg = fmt.Sprintf("获取机构列表失败, %v", e)
  737. return
  738. }
  739. for _, v := range list {
  740. resp = append(resp, v.Format2Item())
  741. }
  742. br.Data = resp
  743. br.Ret = 200
  744. br.Msg = "获取成功"
  745. br.Success = true
  746. }