eta_business.go 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057
  1. package eta_business
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_crm_api/controllers"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/eta_business"
  8. etaBusinessService "hongze/hz_crm_api/services/eta_business"
  9. "hongze/hz_crm_api/utils"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // EtaBusinessController ETA商家
  15. type EtaBusinessController struct {
  16. controllers.BaseAuthController
  17. }
  18. // PageList
  19. // @Title 商家列表-分页
  20. // @Description 商家列表-分页
  21. // @Param Keyword query string false "关键词: 商家名称/社会信用码/商家编码"
  22. // @Param SellerIds query string false "销售IDs"
  23. // @Param SigningStatus query string false "签约状态: 1-首次签约; 2-续约中; 3-已终止"
  24. // @Param Province query string false "省份筛选"
  25. // @Param City query string false "城市筛选"
  26. // @Param SortParam query string false "排序字段: SignTime-签约时间; ExpireTime-到期时间; CreateTime-创建时间; UserMax-用户上限"
  27. // @Param SortType query string false "排序类型: Asc-正序; Desc-倒序"
  28. // @Success 200 Ret=200 获取成功
  29. // @router /page_list [get]
  30. func (this *EtaBusinessController) PageList() {
  31. br := new(models.BaseResponse).Init()
  32. defer func() {
  33. if br.ErrMsg == "" {
  34. br.IsSendEmail = false
  35. }
  36. this.Data["json"] = br
  37. this.ServeJSON()
  38. }()
  39. sysUser := this.SysUser
  40. if sysUser == nil {
  41. br.Msg = "请登录"
  42. br.ErrMsg = "请登录,SysUser Is Empty"
  43. br.Ret = 408
  44. return
  45. }
  46. // 权限校验
  47. resp := make([]*eta_business.EtaBusinessItem, 0)
  48. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  49. if e != nil {
  50. br.Msg = "操作失败"
  51. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  52. return
  53. }
  54. if !ok {
  55. br.Data = resp
  56. br.Ret = 200
  57. br.Success = true
  58. br.Msg = "获取成功"
  59. return
  60. }
  61. cond := ``
  62. pars := make([]interface{}, 0)
  63. order := ``
  64. // 关键词
  65. keyword := this.GetString("Keyword", "")
  66. keyword = strings.TrimSpace(keyword)
  67. if keyword != "" {
  68. kw := fmt.Sprint("%", keyword, "%")
  69. cond += fmt.Sprintf(` AND (%s = ? OR %s = ? OR %s = ?)`, eta_business.EtaBusinessColumns.BusinessName, eta_business.EtaBusinessColumns.BusinessCode, eta_business.EtaBusinessColumns.CreditCode)
  70. pars = append(pars, kw, kw, kw)
  71. }
  72. // 销售
  73. sellerIds := this.GetString("SellerIds", "")
  74. if sellerIds != "" {
  75. arr := strings.Split(sellerIds, ",")
  76. ids := make([]int, 0)
  77. for _, s := range arr {
  78. v, e := strconv.Atoi(s)
  79. if e != nil {
  80. br.Msg = "销售ID有误"
  81. return
  82. }
  83. ids = append(ids, v)
  84. }
  85. if len(ids) == 0 {
  86. br.Data = resp
  87. br.Ret = 200
  88. br.Success = true
  89. br.Msg = "获取成功"
  90. return
  91. }
  92. cond += fmt.Sprintf(` AND %s IN (%s)`, eta_business.EtaBusinessColumns.SellerId, utils.GetOrmInReplace(len(ids)))
  93. pars = append(pars, ids)
  94. }
  95. // 签约状态
  96. signingStatus, _ := this.GetInt("SigningStatus", 0)
  97. if signingStatus > 0 {
  98. cond += fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessColumns.SigningStatus)
  99. pars = append(pars, signingStatus)
  100. }
  101. // TODO:商家地址(多选)
  102. province := this.GetString("Province", "")
  103. province = strings.TrimSpace(province)
  104. if province != "" {
  105. }
  106. //if province != "" {
  107. // var provinceSql string
  108. // slice := strings.Split(province, ",")
  109. // for _, v := range slice {
  110. // provinceSql += "'" + v + "'" + ","
  111. // }
  112. // provinceSql = strings.TrimRight(provinceSql, ",")
  113. // condition += ` AND a.province IN (` + provinceSql + `) `
  114. //}
  115. //
  116. //if city != "" {
  117. // var citySql string
  118. // slice := strings.Split(city, ",")
  119. // for _, v := range slice {
  120. // citySql += "'" + v + "'" + ","
  121. // }
  122. // citySql = strings.TrimRight(citySql, ",")
  123. // condition += ` AND a.city IN (` + citySql + `) `
  124. //}
  125. // @Param SortParam query string false "排序字段: SignTime-签约时间; ExpireTime-到期时间; CreateTime-创建时间; UserMax-用户上限"
  126. // @Param SortType query string false "排序类型: Asc-正序; Desc-倒序"
  127. // TODO:排序
  128. // 获取列表
  129. businessOb := new(eta_business.EtaBusiness)
  130. list, e := businessOb.GetItemsByCondition(cond, pars, []string{}, order)
  131. if e != nil {
  132. br.Msg = "获取失败"
  133. br.ErrMsg = "获取商家列表失败, Err: " + e.Error()
  134. return
  135. }
  136. for _, v := range list {
  137. b := new(eta_business.EtaBusinessItem)
  138. b.EtaBusinessId = v.EtaBusinessId
  139. b.BusinessName = v.BusinessName
  140. b.BusinessCode = v.BusinessCode
  141. b.CreditCode = v.CreditCode
  142. b.RegionType = v.RegionType
  143. b.Address = v.Address
  144. b.SellerId = v.SellerId
  145. b.SellerName = v.SellerName
  146. b.Leader = v.Leader
  147. b.IndustryId = v.IndustryId
  148. b.IndustryName = v.IndustryName
  149. b.CapitalScale = v.CapitalScale
  150. b.ResearchTeamSize = v.ResearchTeamSize
  151. b.UserMax = v.UserMax
  152. b.SigningStatus = v.SigningStatus
  153. b.Enable = v.Enable
  154. b.SigningTime = v.SigningTime.Format(utils.FormatDate)
  155. b.ExpiredTime = v.ExpiredTime.Format(utils.FormatDate)
  156. b.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  157. b.ModifyTime = v.ModifyTime.Format(utils.FormatDateTime)
  158. resp = append(resp, b)
  159. }
  160. br.Data = resp
  161. br.Ret = 200
  162. br.Success = true
  163. br.Msg = "获取成功"
  164. }
  165. // Add
  166. // @Title 新增商家
  167. // @Description 新增商家
  168. // @Param request body eta_business.EtaBusinessAddReq true "type json string"
  169. // @Success 200 Ret=200 操作成功
  170. // @router /add [post]
  171. func (this *EtaBusinessController) Add() {
  172. br := new(models.BaseResponse).Init()
  173. defer func() {
  174. if br.ErrMsg == "" {
  175. br.IsSendEmail = false
  176. }
  177. this.Data["json"] = br
  178. this.ServeJSON()
  179. }()
  180. sysUser := this.SysUser
  181. if sysUser == nil {
  182. br.Msg = "请登录"
  183. br.ErrMsg = "请登录,SysUser Is Empty"
  184. br.Ret = 408
  185. return
  186. }
  187. // 操作权限校验
  188. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  189. if e != nil {
  190. br.Msg = "操作失败"
  191. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  192. return
  193. }
  194. if !ok {
  195. br.Msg = "无权操作"
  196. return
  197. }
  198. // 参数校验
  199. var req eta_business.EtaBusinessAddReq
  200. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  201. br.Msg = "参数解析异常!"
  202. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  203. return
  204. }
  205. req.BusinessName = strings.TrimSpace(req.BusinessName)
  206. if req.BusinessName == "" {
  207. br.Msg = "商家名称不可为空"
  208. return
  209. }
  210. if req.CreditCode == "" {
  211. br.Msg = "社会统一信用码不可为空"
  212. return
  213. }
  214. req.Province = strings.TrimSpace(req.Province)
  215. if req.Province == "" {
  216. br.Msg = "省份不可为空"
  217. return
  218. }
  219. req.City = strings.TrimSpace(req.City)
  220. if req.City == "" {
  221. br.Msg = "城市不可为空"
  222. return
  223. }
  224. req.Leader = strings.TrimSpace(req.Leader)
  225. if req.Leader == "" {
  226. br.Msg = "决策人不可为空"
  227. return
  228. }
  229. if req.IndustryId <= 0 || req.IndustryName == "" {
  230. br.Msg = "所属行业不可为空"
  231. return
  232. }
  233. if req.ResearchTeamSize == "" {
  234. br.Msg = "研究团队规模不可为空"
  235. return
  236. }
  237. if req.UserMax <= 0 {
  238. br.Msg = "用户上限不可小于0"
  239. return
  240. }
  241. req.CapitalScale = strings.TrimSpace(req.CapitalScale)
  242. // 如果仅校验不新增, 那么不做第二页签约时间的校验
  243. var signTime, expiredTime time.Time
  244. if !req.IsCheck {
  245. if req.SigningTime == "" {
  246. br.Msg = "签约时间不可为空"
  247. return
  248. }
  249. if req.ExpiredTime == "" {
  250. br.Msg = "到期时间不可为空"
  251. return
  252. }
  253. signTime, e = time.ParseInLocation(utils.FormatDate, req.SigningTime, time.Local)
  254. if e != nil {
  255. br.Msg = "签约时间格式有误"
  256. br.ErrMsg = "签约时间格式有误, Err: " + e.Error()
  257. return
  258. }
  259. expiredTime, e = time.ParseInLocation(utils.FormatDate, req.ExpiredTime, time.Local)
  260. if e != nil {
  261. br.Msg = "到期时间格式有误"
  262. br.ErrMsg = "到期时间格式有误, Err: " + e.Error()
  263. return
  264. }
  265. if !expiredTime.After(signTime) {
  266. br.Msg = "到期时间不得早于签约时间"
  267. return
  268. }
  269. }
  270. // 重名校验
  271. {
  272. item := new(eta_business.EtaBusiness)
  273. cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessColumns.BusinessName)
  274. pars := make([]interface{}, 0)
  275. pars = append(pars, req.BusinessName)
  276. exist, e := item.GetItemByCondition(cond, pars)
  277. if e != nil && e.Error() != utils.ErrNoRow() {
  278. br.Msg = "操作失败"
  279. br.ErrMsg = "获取重名商家失败, Err: " + e.Error()
  280. return
  281. }
  282. if exist != nil {
  283. br.Msg = "商家名称已存在"
  284. return
  285. }
  286. }
  287. // 社会信用码重复校验
  288. {
  289. item := new(eta_business.EtaBusiness)
  290. cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessColumns.CreditCode)
  291. pars := make([]interface{}, 0)
  292. pars = append(pars, req.CreditCode)
  293. exist, e := item.GetItemByCondition(cond, pars)
  294. if e != nil && e.Error() != utils.ErrNoRow() {
  295. br.Msg = "操作失败"
  296. br.ErrMsg = "获取重复信用码商家失败, Err: " + e.Error()
  297. return
  298. }
  299. if exist != nil {
  300. br.Msg = "商家社会信用码已存在"
  301. return
  302. }
  303. }
  304. // 如果只做校验不新增, 此处校验通过后直接返回true
  305. if req.IsCheck {
  306. br.Data = true
  307. br.Ret = 200
  308. br.Success = true
  309. br.Msg = "操作成功"
  310. return
  311. }
  312. // 商家编码
  313. businessCode, e := eta_business.CreateEtaBusinessCode()
  314. if e != nil {
  315. br.Msg = "操作失败"
  316. br.ErrMsg = "生成商家编码失败, Err: " + e.Error()
  317. return
  318. }
  319. now := time.Now().Local()
  320. // 若当前时间不在首次签约时间内, 也算作已终止, 进入合约期时会由定时任务改为首次签约
  321. status := eta_business.EtaBusinessSigningStatusFirst
  322. isTerminate := true
  323. if now.Equal(signTime) || now.Equal(expiredTime) {
  324. isTerminate = false
  325. }
  326. if now.After(signTime) && now.Before(expiredTime) {
  327. isTerminate = false
  328. }
  329. if isTerminate {
  330. status = eta_business.EtaBusinessSigningStatusTerminate
  331. }
  332. // 新增商家和签约
  333. businessItem := new(eta_business.EtaBusiness)
  334. businessItem.BusinessName = req.BusinessName
  335. businessItem.BusinessCode = businessCode
  336. businessItem.CreditCode = req.CreditCode
  337. businessItem.Province = req.Province
  338. businessItem.City = req.City
  339. businessItem.Address = req.Province + req.City
  340. businessItem.SellerId = req.SellerId
  341. businessItem.SellerName = req.SellerName
  342. businessItem.Leader = req.Leader
  343. businessItem.IndustryId = req.IndustryId
  344. businessItem.IndustryName = req.IndustryName
  345. businessItem.CapitalScale = req.CapitalScale
  346. businessItem.ResearchTeamSize = req.ResearchTeamSize
  347. businessItem.UserMax = req.UserMax
  348. businessItem.Enable = 1
  349. businessItem.SigningStatus = status
  350. businessItem.SigningTime = signTime
  351. businessItem.ExpiredTime = expiredTime
  352. businessItem.CreateTime = now
  353. businessItem.ModifyTime = now
  354. contractItem := new(eta_business.EtaBusinessContract)
  355. contractItem.SigningTime = signTime
  356. contractItem.ExpiredTime = expiredTime
  357. contractItem.CreateTime = now
  358. contractItem.ModifyTime = now
  359. if e = eta_business.CreateEtaBusinessAndContract(businessItem, contractItem); e != nil {
  360. br.Msg = "操作失败"
  361. br.ErrMsg = "新增商家和签约失败, Err: " + e.Error()
  362. return
  363. }
  364. // 操作日志
  365. go func() {
  366. recordOb := new(eta_business.EtaBusinessOperationRecord)
  367. recordOb.EtaBusinessId = businessItem.EtaBusinessId
  368. recordOb.SellerId = businessItem.SellerId
  369. recordOb.SysUserId = sysUser.AdminId
  370. recordOb.SysRealName = sysUser.RealName
  371. recordOb.OperationType = eta_business.EtaBusinessOperationTypeAdd
  372. recordOb.OperationRemark = fmt.Sprintf("%s新增商户", sysUser.RealName)
  373. recordOb.CreateTime = time.Now().Local()
  374. _ = recordOb.Create()
  375. }()
  376. br.Ret = 200
  377. br.Success = true
  378. br.Msg = "操作成功"
  379. }
  380. // Edit
  381. // @Title 编辑商家
  382. // @Description 编辑商家
  383. // @Param request body eta_business.EtaBusinessEditReq true "type json string"
  384. // @Success 200 Ret=200 操作成功
  385. // @router /edit [post]
  386. func (this *EtaBusinessController) Edit() {
  387. br := new(models.BaseResponse).Init()
  388. defer func() {
  389. if br.ErrMsg == "" {
  390. br.IsSendEmail = false
  391. }
  392. this.Data["json"] = br
  393. this.ServeJSON()
  394. }()
  395. sysUser := this.SysUser
  396. if sysUser == nil {
  397. br.Msg = "请登录"
  398. br.ErrMsg = "请登录,SysUser Is Empty"
  399. br.Ret = 408
  400. return
  401. }
  402. var req eta_business.EtaBusinessEditReq
  403. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  404. br.Msg = "参数解析异常!"
  405. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  406. return
  407. }
  408. if req.EtaBusinessId <= 0 {
  409. br.Msg = "参数有误"
  410. br.ErrMsg = "参数有误, 商家ID为空"
  411. return
  412. }
  413. req.Province = strings.TrimSpace(req.Province)
  414. if req.Province == "" {
  415. br.Msg = "省份不可为空"
  416. return
  417. }
  418. req.City = strings.TrimSpace(req.City)
  419. if req.City == "" {
  420. br.Msg = "城市不可为空"
  421. return
  422. }
  423. req.Leader = strings.TrimSpace(req.Leader)
  424. if req.Leader == "" {
  425. br.Msg = "决策人不可为空"
  426. return
  427. }
  428. if req.IndustryId <= 0 || req.IndustryName == "" {
  429. br.Msg = "所属行业不可为空"
  430. return
  431. }
  432. if req.ResearchTeamSize == "" {
  433. br.Msg = "研究团队规模不可为空"
  434. return
  435. }
  436. if req.UserMax <= 0 {
  437. br.Msg = "用户上限不可小于0"
  438. return
  439. }
  440. req.CapitalScale = strings.TrimSpace(req.CapitalScale)
  441. // 权限校验
  442. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  443. if e != nil {
  444. br.Msg = "操作失败"
  445. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  446. return
  447. }
  448. if !ok {
  449. br.Msg = "无权操作"
  450. return
  451. }
  452. ob := new(eta_business.EtaBusiness)
  453. item, e := ob.GetItemById(req.EtaBusinessId)
  454. if e != nil {
  455. if e.Error() == utils.ErrNoRow() {
  456. br.Msg = "商家不存在, 请刷新页面"
  457. return
  458. }
  459. br.Msg = "操作失败"
  460. br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
  461. return
  462. }
  463. item.Province = req.Province
  464. item.City = req.City
  465. item.Address = req.Province + req.City
  466. item.Leader = req.Leader
  467. item.IndustryId = req.IndustryId
  468. item.IndustryName = req.IndustryName
  469. item.CapitalScale = req.CapitalScale
  470. item.ResearchTeamSize = req.ResearchTeamSize
  471. item.UserMax = req.UserMax
  472. item.ModifyTime = time.Now().Local()
  473. cols := []string{
  474. "Province", "City", "Address", "Leader", "IndustryId", "IndustryName", "CapitalScale", "ResearchTeamSize", "UserMax", "ModifyTime",
  475. }
  476. if e := item.Update(cols); e != nil {
  477. br.Msg = "操作失败"
  478. br.ErrMsg = "编辑商家失败, Err: " + e.Error()
  479. return
  480. }
  481. // 操作日志
  482. go func() {
  483. recordOb := new(eta_business.EtaBusinessOperationRecord)
  484. recordOb.EtaBusinessId = item.EtaBusinessId
  485. recordOb.SellerId = item.SellerId
  486. recordOb.SysUserId = sysUser.AdminId
  487. recordOb.SysRealName = sysUser.RealName
  488. recordOb.OperationType = eta_business.EtaBusinessOperationTypeEdit
  489. recordOb.OperationRemark = fmt.Sprintf("%s编辑商户", sysUser.RealName)
  490. recordOb.CreateTime = time.Now().Local()
  491. _ = recordOb.Create()
  492. }()
  493. br.Ret = 200
  494. br.Success = true
  495. br.Msg = "操作成功"
  496. }
  497. // Signing
  498. // @Title 签约续约
  499. // @Description 签约续约
  500. // @Param request body eta_business.EtaBusinessSigningReq true "type json string"
  501. // @Success 200 Ret=200 操作成功
  502. // @router /signing [post]
  503. func (this *EtaBusinessController) Signing() {
  504. br := new(models.BaseResponse).Init()
  505. defer func() {
  506. if br.ErrMsg == "" {
  507. br.IsSendEmail = false
  508. }
  509. this.Data["json"] = br
  510. this.ServeJSON()
  511. }()
  512. sysUser := this.SysUser
  513. if sysUser == nil {
  514. br.Msg = "请登录"
  515. br.ErrMsg = "请登录,SysUser Is Empty"
  516. br.Ret = 408
  517. return
  518. }
  519. var req eta_business.EtaBusinessSigningReq
  520. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  521. br.Msg = "参数解析异常!"
  522. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  523. return
  524. }
  525. if req.EtaBusinessId <= 0 {
  526. br.Msg = "参数有误"
  527. br.ErrMsg = "参数有误, 商家ID为空"
  528. return
  529. }
  530. if req.SigningTime == "" {
  531. br.Msg = "签约时间不可为空"
  532. return
  533. }
  534. if req.ExpiredTime == "" {
  535. br.Msg = "到期时间不可为空"
  536. return
  537. }
  538. signTime, e := time.ParseInLocation(utils.FormatDate, req.SigningTime, time.Local)
  539. if e != nil {
  540. br.Msg = "签约时间格式有误"
  541. br.ErrMsg = "签约时间格式有误, Err: " + e.Error()
  542. return
  543. }
  544. expiredTime, e := time.ParseInLocation(utils.FormatDate, req.ExpiredTime, time.Local)
  545. if e != nil {
  546. br.Msg = "到期时间格式有误"
  547. br.ErrMsg = "到期时间格式有误, Err: " + e.Error()
  548. return
  549. }
  550. if !expiredTime.After(signTime) {
  551. br.Msg = "到期时间不得早于签约时间"
  552. return
  553. }
  554. // 权限校验
  555. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  556. if e != nil {
  557. br.Msg = "操作失败"
  558. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  559. return
  560. }
  561. if !ok {
  562. br.Msg = "无权操作"
  563. return
  564. }
  565. // 获取商家信息
  566. businessOb := new(eta_business.EtaBusiness)
  567. business, e := businessOb.GetItemById(req.EtaBusinessId)
  568. if e != nil {
  569. if e.Error() == utils.ErrNoRow() {
  570. br.Msg = "商家不存在, 请刷新页面"
  571. return
  572. }
  573. br.Msg = "操作失败"
  574. br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
  575. return
  576. }
  577. // 获取历史签约, 签约日期不可交叠
  578. contract := new(eta_business.EtaBusinessContract)
  579. cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessContractColumns.EtaBusinessId)
  580. pars := make([]interface{}, 0)
  581. pars = append(pars, req.EtaBusinessId)
  582. contracts, e := contract.GetItemsByCondition(cond, pars, []string{}, "")
  583. if e != nil {
  584. br.Msg = "操作失败"
  585. br.ErrMsg = "获取商家签约列表失败, Err: " + e.Error()
  586. return
  587. }
  588. // 本次签约是否属于终止期
  589. now := time.Now().Local()
  590. isTerminate := true
  591. if now.Equal(signTime) || now.Equal(expiredTime) {
  592. isTerminate = false
  593. }
  594. if now.After(signTime) && now.Before(expiredTime) {
  595. isTerminate = false
  596. }
  597. // 是否为首次签约
  598. isFirst := true
  599. if len(contracts) > 0 {
  600. isFirst = false
  601. for _, c := range contracts {
  602. // 校验签约时间是否重叠
  603. pass := false
  604. if expiredTime.Before(c.SigningTime) {
  605. pass = true
  606. }
  607. if signTime.After(c.ExpiredTime) {
  608. pass = true
  609. }
  610. if !pass {
  611. br.Msg = "签约时间在存续期内, 请检查"
  612. return
  613. }
  614. // 上面判断若为终止, 则判断是否在历史签约存续期间
  615. if !isTerminate {
  616. continue
  617. }
  618. if now.Equal(c.SigningTime) || now.Equal(c.ExpiredTime) {
  619. isTerminate = false
  620. continue
  621. }
  622. if now.After(c.SigningTime) && now.Before(c.ExpiredTime) {
  623. isTerminate = false
  624. continue
  625. }
  626. }
  627. }
  628. // 是否更新签约状态
  629. status := eta_business.EtaBusinessSigningStatusContinue
  630. if isTerminate {
  631. status = eta_business.EtaBusinessSigningStatusTerminate
  632. }
  633. if !isTerminate && isFirst {
  634. status = eta_business.EtaBusinessSigningStatusFirst
  635. }
  636. if business.SigningStatus != status {
  637. business.SigningStatus = status
  638. business.ModifyTime = now
  639. cols := []string{"SigningStatus", "ModifyTime"}
  640. if e = business.Update(cols); e != nil {
  641. br.Msg = "操作失败"
  642. br.ErrMsg = "更新签约状态失败, Err: " + e.Error()
  643. return
  644. }
  645. }
  646. // 新增签约
  647. contract.EtaBusinessId = req.EtaBusinessId
  648. contract.SigningTime = signTime
  649. contract.ExpiredTime = expiredTime
  650. contract.CreateTime = now
  651. contract.ModifyTime = now
  652. if e = contract.Create(); e != nil {
  653. br.Msg = "操作失败"
  654. br.ErrMsg = "新增签约失败, Err: " + e.Error()
  655. return
  656. }
  657. // 续约操作日志
  658. if !isFirst {
  659. go func() {
  660. recordOb := new(eta_business.EtaBusinessOperationRecord)
  661. recordOb.EtaBusinessId = business.EtaBusinessId
  662. recordOb.SellerId = business.SellerId
  663. recordOb.SysUserId = sysUser.AdminId
  664. recordOb.SysRealName = sysUser.RealName
  665. recordOb.OperationType = eta_business.EtaBusinessOperationTypeRenewalContract
  666. recordOb.OperationRemark = fmt.Sprintf("%s添加续约", sysUser.RealName)
  667. recordOb.CreateTime = time.Now().Local()
  668. _ = recordOb.Create()
  669. }()
  670. }
  671. br.Ret = 200
  672. br.Success = true
  673. br.Msg = "操作成功"
  674. }
  675. // Enable
  676. // @Title 禁用启用
  677. // @Description 禁用启用
  678. // @Param request body eta_business.EtaBusinessEnableReq true "type json string"
  679. // @Success 200 Ret=200 操作成功
  680. // @router /enable [post]
  681. func (this *EtaBusinessController) Enable() {
  682. br := new(models.BaseResponse).Init()
  683. defer func() {
  684. if br.ErrMsg == "" {
  685. br.IsSendEmail = false
  686. }
  687. this.Data["json"] = br
  688. this.ServeJSON()
  689. }()
  690. sysUser := this.SysUser
  691. if sysUser == nil {
  692. br.Msg = "请登录"
  693. br.ErrMsg = "请登录,SysUser Is Empty"
  694. br.Ret = 408
  695. return
  696. }
  697. var req eta_business.EtaBusinessEnableReq
  698. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  699. br.Msg = "参数解析异常!"
  700. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  701. return
  702. }
  703. if req.EtaBusinessId <= 0 {
  704. br.Msg = "参数有误"
  705. br.ErrMsg = "参数有误, 商家ID为空"
  706. return
  707. }
  708. // 权限校验
  709. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  710. if e != nil {
  711. br.Msg = "操作失败"
  712. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  713. return
  714. }
  715. if !ok {
  716. br.Msg = "无权操作"
  717. return
  718. }
  719. // 获取商家信息
  720. businessOb := new(eta_business.EtaBusiness)
  721. business, e := businessOb.GetItemById(req.EtaBusinessId)
  722. if e != nil {
  723. if e.Error() == utils.ErrNoRow() {
  724. br.Msg = "商家不存在, 请刷新页面"
  725. return
  726. }
  727. br.Msg = "操作失败"
  728. br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
  729. return
  730. }
  731. // 禁启用
  732. typeMap := map[int]int{
  733. 0: eta_business.EtaBusinessOperationTypeEnable,
  734. 1: eta_business.EtaBusinessOperationTypeDisable,
  735. }
  736. typeRemarkMap := map[int]string{
  737. 0: "启用",
  738. 1: "禁用",
  739. }
  740. operateType := typeMap[business.Enable]
  741. operateRemark := typeRemarkMap[business.Enable]
  742. business.Enable = business.Enable ^ 1
  743. business.ModifyTime = time.Now().Local()
  744. cols := []string{"Enable", "ModifyTime"}
  745. if e = business.Update(cols); e != nil {
  746. br.Msg = "操作失败"
  747. br.ErrMsg = "更新商家状态失败, Err: " + e.Error()
  748. return
  749. }
  750. // 操作日志
  751. go func() {
  752. recordOb := new(eta_business.EtaBusinessOperationRecord)
  753. recordOb.EtaBusinessId = business.EtaBusinessId
  754. recordOb.SellerId = business.SellerId
  755. recordOb.SysUserId = sysUser.AdminId
  756. recordOb.SysRealName = sysUser.RealName
  757. recordOb.OperationType = operateType
  758. recordOb.OperationRemark = fmt.Sprintf("%s%s商户", sysUser.RealName, operateRemark)
  759. recordOb.CreateTime = time.Now().Local()
  760. _ = recordOb.Create()
  761. }()
  762. br.Ret = 200
  763. br.Success = true
  764. br.Msg = "操作成功"
  765. }
  766. // MoveSeller
  767. // @Title 移动销售
  768. // @Description 移动销售
  769. // @Param request body eta_business.EtaBusinessMoveSellerReq true "type json string"
  770. // @Success 200 Ret=200 操作成功
  771. // @router /move_seller [post]
  772. func (this *EtaBusinessController) MoveSeller() {
  773. br := new(models.BaseResponse).Init()
  774. defer func() {
  775. if br.ErrMsg == "" {
  776. br.IsSendEmail = false
  777. }
  778. this.Data["json"] = br
  779. this.ServeJSON()
  780. }()
  781. sysUser := this.SysUser
  782. if sysUser == nil {
  783. br.Msg = "请登录"
  784. br.ErrMsg = "请登录,SysUser Is Empty"
  785. br.Ret = 408
  786. return
  787. }
  788. var req eta_business.EtaBusinessMoveSellerReq
  789. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  790. br.Msg = "参数解析异常!"
  791. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  792. return
  793. }
  794. if req.EtaBusinessId <= 0 {
  795. br.Msg = "参数有误"
  796. br.ErrMsg = "参数有误, 商家ID为空"
  797. return
  798. }
  799. if req.SellerId <= 0 || req.SellerName == "" {
  800. br.Msg = "销售不可为空"
  801. return
  802. }
  803. // 权限校验
  804. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  805. if e != nil {
  806. br.Msg = "操作失败"
  807. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  808. return
  809. }
  810. if !ok {
  811. br.Msg = "无权操作"
  812. return
  813. }
  814. // 获取商家信息
  815. businessOb := new(eta_business.EtaBusiness)
  816. business, e := businessOb.GetItemById(req.EtaBusinessId)
  817. if e != nil {
  818. if e.Error() == utils.ErrNoRow() {
  819. br.Msg = "商家不存在, 请刷新页面"
  820. return
  821. }
  822. br.Msg = "操作失败"
  823. br.ErrMsg = "获取商家信息失败, Err: " + e.Error()
  824. return
  825. }
  826. // 更新销售
  827. business.SellerId = req.SellerId
  828. business.SellerName = req.SellerName
  829. business.ModifyTime = time.Now().Local()
  830. cols := []string{"SellerId", "SellerName", "ModifyTime"}
  831. if e = business.Update(cols); e != nil {
  832. br.Msg = "操作失败"
  833. br.ErrMsg = "移动至销售失败, Err: " + e.Error()
  834. return
  835. }
  836. // 操作日志
  837. go func() {
  838. recordOb := new(eta_business.EtaBusinessOperationRecord)
  839. recordOb.EtaBusinessId = business.EtaBusinessId
  840. recordOb.SellerId = req.SellerId
  841. recordOb.SysUserId = sysUser.AdminId
  842. recordOb.SysRealName = sysUser.RealName
  843. recordOb.OperationType = eta_business.EtaBusinessOperationTypeMoveSeller
  844. recordOb.OperationRemark = fmt.Sprintf("%s移动到: %s", sysUser.RealName, req.SellerName)
  845. recordOb.CreateTime = time.Now().Local()
  846. _ = recordOb.Create()
  847. }()
  848. br.Ret = 200
  849. br.Success = true
  850. br.Msg = "操作成功"
  851. }
  852. // ContractList
  853. // @Title 商家签约列表
  854. // @Description 商家签约列表
  855. // @Param EtaBusinessId query int true "商家ID"
  856. // @Success 200 Ret=200 获取成功
  857. // @router /contract_list [get]
  858. func (this *EtaBusinessController) ContractList() {
  859. br := new(models.BaseResponse).Init()
  860. defer func() {
  861. if br.ErrMsg == "" {
  862. br.IsSendEmail = false
  863. }
  864. this.Data["json"] = br
  865. this.ServeJSON()
  866. }()
  867. sysUser := this.SysUser
  868. if sysUser == nil {
  869. br.Msg = "请登录"
  870. br.ErrMsg = "请登录,SysUser Is Empty"
  871. br.Ret = 408
  872. return
  873. }
  874. // 权限校验
  875. resp := make([]*eta_business.EtaBusinessContractItem, 0)
  876. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  877. if e != nil {
  878. br.Msg = "操作失败"
  879. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  880. return
  881. }
  882. if !ok {
  883. br.Data = resp
  884. br.Ret = 200
  885. br.Success = true
  886. br.Msg = "获取成功"
  887. return
  888. }
  889. businessId, _ := this.GetInt("EtaBusinessId", 0)
  890. if businessId <= 0 {
  891. br.Msg = "参数有误"
  892. br.ErrMsg = "参数有误, 商家ID"
  893. return
  894. }
  895. cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessContractColumns.EtaBusinessId)
  896. pars := make([]interface{}, 0)
  897. pars = append(pars, businessId)
  898. order := `signing_time DESC`
  899. contractOb := new(eta_business.EtaBusinessContract)
  900. list, e := contractOb.GetItemsByCondition(cond, pars, []string{}, order)
  901. if e != nil {
  902. br.Msg = "获取失败"
  903. br.ErrMsg = "获取商家签约列表失败, Err: " + e.Error()
  904. return
  905. }
  906. now := time.Now().Local()
  907. for _, v := range list {
  908. b := new(eta_business.EtaBusinessContractItem)
  909. b.EtaBusinessId = v.EtaBusinessId
  910. b.SigningTime = v.SigningTime.Format(utils.FormatDate)
  911. b.ExpiredTime = v.ExpiredTime.Format(utils.FormatDate)
  912. // 到期天数, 终止日按当天的23:59:59算
  913. strEnd := v.ExpiredTime.Format(utils.FormatDate)
  914. strEnd = strEnd + " 23:59:59"
  915. endTime, e := time.ParseInLocation(utils.FormatDateTime, strEnd, time.Local)
  916. if e != nil {
  917. br.Msg = "获取失败"
  918. br.ErrMsg = "签约日期有误, Err: " + e.Error()
  919. return
  920. }
  921. b.ExpireDay = "-"
  922. if now.After(v.SigningTime) && now.Before(endTime) {
  923. diff := utils.GetDiffDays(now, v.ExpiredTime)
  924. b.ExpireDay = strconv.Itoa(diff)
  925. b.Using = true
  926. }
  927. resp = append(resp, b)
  928. }
  929. br.Data = resp
  930. br.Ret = 200
  931. br.Success = true
  932. br.Msg = "获取成功"
  933. }
  934. // OperateRecordList
  935. // @Title 操作日志列表
  936. // @Description 操作日志列表
  937. // @Param EtaBusinessId query int true "商家ID"
  938. // @Success 200 Ret=200 获取成功
  939. // @router /operate_record_list [get]
  940. func (this *EtaBusinessController) OperateRecordList() {
  941. br := new(models.BaseResponse).Init()
  942. defer func() {
  943. if br.ErrMsg == "" {
  944. br.IsSendEmail = false
  945. }
  946. this.Data["json"] = br
  947. this.ServeJSON()
  948. }()
  949. sysUser := this.SysUser
  950. if sysUser == nil {
  951. br.Msg = "请登录"
  952. br.ErrMsg = "请登录,SysUser Is Empty"
  953. br.Ret = 408
  954. return
  955. }
  956. // 权限校验
  957. resp := make([]*eta_business.EtaBusinessOperationRecordItem, 0)
  958. ok, e := etaBusinessService.CheckEtaBusinessOperateAuth(sysUser.RoleTypeCode)
  959. if e != nil {
  960. br.Msg = "操作失败"
  961. br.ErrMsg = "操作权限校验失败, ErrMsg: " + e.Error()
  962. return
  963. }
  964. if !ok {
  965. br.Data = resp
  966. br.Ret = 200
  967. br.Success = true
  968. br.Msg = "获取成功"
  969. return
  970. }
  971. businessId, _ := this.GetInt("EtaBusinessId", 0)
  972. if businessId <= 0 {
  973. br.Msg = "参数有误"
  974. br.ErrMsg = "参数有误, 商家ID"
  975. return
  976. }
  977. cond := fmt.Sprintf(` AND %s = ?`, eta_business.EtaBusinessOperationRecordColumns.EtaBusinessId)
  978. pars := make([]interface{}, 0)
  979. pars = append(pars, businessId)
  980. recordOb := new(eta_business.EtaBusinessOperationRecord)
  981. list, e := recordOb.GetItemsByCondition(cond, pars, []string{}, "")
  982. if e != nil {
  983. br.Msg = "获取失败"
  984. br.ErrMsg = "获取商家操作日志列表失败, Err: " + e.Error()
  985. return
  986. }
  987. for _, v := range list {
  988. r := new(eta_business.EtaBusinessOperationRecordItem)
  989. r.EtaBusinessId = v.EtaBusinessId
  990. r.SysUserId = v.SysUserId
  991. r.SysRealName = v.SysRealName
  992. r.OperationType = v.OperationType
  993. r.OperationRemark = v.OperationRemark
  994. r.CreateTime = v.CreateTime.Format(utils.FormatDateTime)
  995. resp = append(resp, r)
  996. }
  997. br.Data = resp
  998. br.Ret = 200
  999. br.Success = true
  1000. br.Msg = "获取成功"
  1001. }