variety.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. package supply_analysis
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/controllers"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/models/data_manage"
  7. "eta_gn/eta_api/models/data_manage/request"
  8. "eta_gn/eta_api/models/data_manage/response"
  9. "eta_gn/eta_api/models/data_manage/supply_analysis"
  10. "eta_gn/eta_api/services/data"
  11. supply_analysisServ "eta_gn/eta_api/services/data/supply_analysis"
  12. "eta_gn/eta_api/utils"
  13. "fmt"
  14. "github.com/rdlucklib/rdluck_tools/paging"
  15. "strconv"
  16. "strings"
  17. "time"
  18. )
  19. type VarietyController struct {
  20. controllers.BaseAuthController
  21. }
  22. // @router /variety/list [get]
  23. func (this *VarietyController) List() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. isAnalyse, _ := this.GetBool("IsAnalyse")
  30. keyword := this.GetString("Keyword")
  31. pageSize, _ := this.GetInt("PageSize")
  32. currentIndex, _ := this.GetInt("CurrentIndex")
  33. var startSize int
  34. if pageSize <= 0 {
  35. pageSize = utils.PageSize20
  36. }
  37. if currentIndex <= 0 {
  38. currentIndex = 1
  39. }
  40. startSize = utils.StartIndex(currentIndex, pageSize)
  41. var condition string
  42. var pars []interface{}
  43. if keyword != `` {
  44. condition += ` AND (a.variety_name like ? OR c.edb_code like ? ) `
  45. pars = utils.GetLikeKeywordPars(pars, keyword, 2)
  46. }
  47. isSuperAdmin := supply_analysisServ.IsVarietySuperAdmin(this.SysUser)
  48. varietyObj := supply_analysis.Variety{}
  49. var total int
  50. var list []*supply_analysis.VarietyItem
  51. var err error
  52. if isSuperAdmin || !isAnalyse {
  53. total, list, err = varietyObj.GetListBySuperAdminPage(condition, pars, startSize, pageSize)
  54. } else {
  55. if isAnalyse {
  56. condition += ` AND b.sys_user_id = ? `
  57. pars = append(pars, this.SysUser.AdminId)
  58. }
  59. total, list, err = varietyObj.GetListByPage(condition, pars, startSize, pageSize)
  60. }
  61. if err != nil && !utils.IsErrNoRow(err) {
  62. br.Msg = "获取失败"
  63. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  64. return
  65. }
  66. for k, v := range list {
  67. button := supply_analysis.VarietyButton{}
  68. if isSuperAdmin {
  69. button.Edit = true
  70. button.Delete = true
  71. button.Analyse = true
  72. } else {
  73. if v.PermissionUserId != `` {
  74. tmpUserIdStrList := strings.Split(v.PermissionUserId, ",")
  75. if utils.InArrayByStr(tmpUserIdStrList, strconv.Itoa(this.SysUser.AdminId)) {
  76. button.Analyse = true
  77. }
  78. }
  79. }
  80. v.Button = button
  81. list[k] = v
  82. }
  83. resp := response.VarietyListResp{
  84. AddButton: isSuperAdmin,
  85. Paging: paging.GetPaging(currentIndex, pageSize, total),
  86. List: list,
  87. }
  88. br.Ret = 200
  89. br.Success = true
  90. br.Msg = "获取成功"
  91. br.Data = resp
  92. }
  93. // @router /variety/add [post]
  94. func (this *VarietyController) Add() {
  95. br := new(models.BaseResponse).Init()
  96. defer func() {
  97. this.Data["json"] = br
  98. this.ServeJSON()
  99. }()
  100. var req request.AddVarietyReq
  101. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  102. if err != nil {
  103. br.Msg = "参数解析异常!"
  104. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  105. return
  106. }
  107. isSuperAdmin := supply_analysisServ.IsVarietySuperAdmin(this.SysUser)
  108. if !isSuperAdmin {
  109. br.Msg = "无操作权限"
  110. br.IsSendEmail = false
  111. return
  112. }
  113. if req.VarietyName == "" {
  114. br.Msg = "请输入品种名称"
  115. br.IsSendEmail = false
  116. return
  117. }
  118. varietyName := utils.TrimStr(req.VarietyName)
  119. item, err := supply_analysis.GetVarietyByName(varietyName)
  120. if err != nil && !utils.IsErrNoRow(err) {
  121. br.Msg = "添加失败"
  122. br.ErrMsg = "添加失败,Err:" + err.Error()
  123. return
  124. }
  125. if item != nil && item.VarietyId > 0 {
  126. br.Msg = "添加失败,品种名称不能重复"
  127. br.IsSendEmail = false
  128. return
  129. }
  130. variety := &supply_analysis.Variety{
  131. VarietyId: 0,
  132. VarietyName: varietyName,
  133. LastUpdateSysUserId: this.SysUser.AdminId,
  134. LastUpdateSysUserRealName: this.SysUser.RealName,
  135. ProductionDay: 365,
  136. SysUserId: this.SysUser.AdminId,
  137. SysUserRealName: this.SysUser.RealName,
  138. ModifyTime: time.Now(),
  139. CreateTime: time.Now(),
  140. }
  141. err = supply_analysis.CreateVariety(variety, req.AdminIdList)
  142. if err != nil {
  143. br.Msg = "添加品种失败"
  144. br.ErrMsg = "添加品种失败,Err:" + err.Error()
  145. return
  146. }
  147. br.Ret = 200
  148. br.Msg = "添加成功"
  149. br.IsAddLog = true
  150. br.Success = true
  151. }
  152. // @router /variety/edit [post]
  153. func (this *VarietyController) Edit() {
  154. br := new(models.BaseResponse).Init()
  155. defer func() {
  156. this.Data["json"] = br
  157. this.ServeJSON()
  158. }()
  159. var req request.EditVarietyReq
  160. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  161. if err != nil {
  162. br.Msg = "参数解析异常!"
  163. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  164. return
  165. }
  166. isSuperAdmin := supply_analysisServ.IsVarietySuperAdmin(this.SysUser)
  167. if !isSuperAdmin {
  168. br.Msg = "无操作权限"
  169. br.IsSendEmail = false
  170. return
  171. }
  172. if req.VarietyId <= 0 {
  173. br.Msg = "请选择品种"
  174. br.IsSendEmail = false
  175. return
  176. }
  177. if req.VarietyName == "" {
  178. br.Msg = "请输入品种名称"
  179. br.IsSendEmail = false
  180. return
  181. }
  182. varietyName := utils.TrimStr(req.VarietyName)
  183. item, err := supply_analysis.GetVarietyByName(varietyName)
  184. if err != nil && !utils.IsErrNoRow(err) {
  185. br.Msg = "添加失败"
  186. br.ErrMsg = "添加失败,Err:" + err.Error()
  187. return
  188. }
  189. if item != nil && item.VarietyId != req.VarietyId {
  190. br.Msg = "添加失败,品种名称不能重复"
  191. br.IsSendEmail = false
  192. return
  193. }
  194. varietyInfo, err := supply_analysis.GetVarietyById(req.VarietyId)
  195. if err != nil {
  196. br.Msg = "查询品种失败"
  197. br.ErrMsg = "查询品种失败;ERR:" + err.Error()
  198. return
  199. }
  200. varietyInfo.VarietyName = varietyName
  201. varietyInfo.LastUpdateSysUserId = this.SysUser.AdminId
  202. varietyInfo.LastUpdateSysUserRealName = this.SysUser.RealName
  203. varietyInfo.ModifyTime = time.Now()
  204. err = supply_analysis.EditVariety(varietyInfo, req.AdminIdList)
  205. if err != nil {
  206. br.Msg = "修改品种失败"
  207. br.ErrMsg = "修改品种失败,Err:" + err.Error()
  208. return
  209. }
  210. br.Ret = 200
  211. br.Msg = "修改成功"
  212. br.IsAddLog = true
  213. br.Success = true
  214. }
  215. // @router /variety/delete/check [post]
  216. func (this *VarietyController) DeleteCheck() {
  217. br := new(models.BaseResponse).Init()
  218. defer func() {
  219. this.Data["json"] = br
  220. this.ServeJSON()
  221. }()
  222. var req request.DelVarietyReq
  223. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  224. if err != nil {
  225. br.Msg = "参数解析异常!"
  226. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  227. return
  228. }
  229. if req.VarietyId <= 0 {
  230. br.Msg = "请选择品种"
  231. br.IsSendEmail = false
  232. return
  233. }
  234. var deleteStatus int
  235. var tipsMsg string
  236. count, err := supply_analysis.GetCountVarietyEdbInfoByVarietyId(req.VarietyId)
  237. if err != nil {
  238. br.Msg = "删除失败"
  239. br.ErrMsg = "查询品种下是否含有指标失败,Err:" + err.Error()
  240. return
  241. }
  242. isSuperAdmin := supply_analysisServ.IsVarietySuperAdmin(this.SysUser)
  243. if !isSuperAdmin {
  244. deleteStatus = 1
  245. tipsMsg = "无删除权限"
  246. } else {
  247. if count > 0 {
  248. deleteStatus = 1
  249. tipsMsg = "该品种已在指标库生成指标,不可删除"
  250. }
  251. }
  252. resp := response.VarietyDeleteCheckResp{
  253. DeleteStatus: deleteStatus,
  254. TipsMsg: tipsMsg,
  255. }
  256. br.Ret = 200
  257. br.Msg = "检测成功"
  258. br.Success = true
  259. br.Data = resp
  260. }
  261. // @router /variety/delete [post]
  262. func (this *VarietyController) Delete() {
  263. br := new(models.BaseResponse).Init()
  264. defer func() {
  265. this.Data["json"] = br
  266. this.ServeJSON()
  267. }()
  268. var req request.DelVarietyReq
  269. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  270. if err != nil {
  271. br.Msg = "参数解析异常!"
  272. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  273. return
  274. }
  275. if req.VarietyId <= 0 {
  276. br.Msg = "请选择品种"
  277. br.IsSendEmail = false
  278. return
  279. }
  280. count, err := supply_analysis.GetCountVarietyEdbInfoByVarietyId(req.VarietyId)
  281. if err != nil {
  282. br.Msg = "删除失败"
  283. br.ErrMsg = "查询品种下是否含有指标失败,Err:" + err.Error()
  284. return
  285. }
  286. isSuperAdmin := supply_analysisServ.IsVarietySuperAdmin(this.SysUser)
  287. if !isSuperAdmin {
  288. br.Msg = `无删除权限`
  289. br.IsSendEmail = false
  290. return
  291. }
  292. if count > 0 {
  293. br.Msg = `该品种已在指标库生成指标,不可删除`
  294. br.IsSendEmail = false
  295. return
  296. }
  297. varietyInfo, err := supply_analysis.GetVarietyById(req.VarietyId)
  298. if err != nil {
  299. if utils.IsErrNoRow(err) {
  300. br.Msg = "该品种不存在或已删除"
  301. br.IsSendEmail = false
  302. } else {
  303. br.Msg = "删除失败"
  304. br.ErrMsg = "查找品种失败,ERR:" + err.Error()
  305. }
  306. return
  307. }
  308. err = varietyInfo.Delete()
  309. if err != nil {
  310. br.Msg = "删除失败"
  311. br.ErrMsg = "查找品种失败,ERR:" + err.Error()
  312. return
  313. }
  314. br.Ret = 200
  315. br.Msg = "删除成功"
  316. br.Success = true
  317. br.IsAddLog = true
  318. }
  319. // @router /variety/detail [get]
  320. func (this *VarietyController) Detail() {
  321. br := new(models.BaseResponse).Init()
  322. defer func() {
  323. this.Data["json"] = br
  324. this.ServeJSON()
  325. }()
  326. varietyId, _ := this.GetInt("VarietyId")
  327. if varietyId < 0 {
  328. br.Msg = "不存在该品种或该品种已被删除"
  329. br.ErrMsg = "不存在该品种或该品种已被删除"
  330. br.IsSendEmail = false
  331. }
  332. varietyInfo, err := supply_analysis.GetVarietyById(varietyId)
  333. if err != nil {
  334. br.Msg = "查询品种失败"
  335. br.ErrMsg = "查询品种失败;ERR:" + err.Error()
  336. if !utils.IsErrNoRow(err) {
  337. br.Msg = "不存在该品种或该品种已被删除"
  338. br.ErrMsg = "不存在该品种或该品种已被删除"
  339. br.IsSendEmail = false
  340. }
  341. return
  342. }
  343. if varietyInfo == nil {
  344. br.Msg = "不存在该品种或该品种已被删除"
  345. br.ErrMsg = "不存在该品种或该品种已被删除"
  346. br.IsSendEmail = false
  347. return
  348. }
  349. resp := supply_analysis.VarietyItem{
  350. VarietyId: varietyInfo.VarietyId,
  351. VarietyName: varietyInfo.VarietyName,
  352. ProductionDay: varietyInfo.ProductionDay,
  353. LastUpdateSysUserId: varietyInfo.LastUpdateSysUserId,
  354. LastUpdateSysUserRealName: varietyInfo.LastUpdateSysUserRealName,
  355. PermissionUserId: ``,
  356. ModifyTime: varietyInfo.ModifyTime.Format(utils.FormatDateTime),
  357. CreateTime: varietyInfo.CreateTime.Format(utils.FormatDateTime),
  358. }
  359. br.Ret = 200
  360. br.Success = true
  361. br.Msg = "获取成功"
  362. br.Data = resp
  363. }
  364. // @router /variety/analysis [post]
  365. func (this *VarietyController) Analysis() {
  366. br := new(models.BaseResponse).Init()
  367. defer func() {
  368. this.Data["json"] = br
  369. this.ServeJSON()
  370. }()
  371. var req request.AnalysisReq
  372. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  373. if err != nil {
  374. br.Msg = "参数解析异常!"
  375. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  376. return
  377. }
  378. if req.VarietyId <= 0 {
  379. br.Msg = "请选择品种"
  380. br.IsSendEmail = false
  381. return
  382. }
  383. redisKey := fmt.Sprint("supply_analysis:variety:", req.VarietyId)
  384. isExist := utils.Rc.IsExist(redisKey)
  385. if isExist {
  386. br.Msg = "品种正在分析中,请等待"
  387. br.IsSendEmail = false
  388. return
  389. } else {
  390. utils.Rc.SetNX(redisKey, 1, time.Second*300)
  391. defer func() {
  392. utils.Rc.Delete(redisKey)
  393. }()
  394. }
  395. varietyInfo, err := supply_analysis.GetVarietyById(req.VarietyId)
  396. if err != nil {
  397. br.Msg = "查询品种失败"
  398. br.ErrMsg = "查询品种失败;ERR:" + err.Error()
  399. return
  400. }
  401. list, err := supply_analysis.GetVarietyEdbListByVarietyId(req.VarietyId)
  402. if err != nil {
  403. br.Msg = "分析失败"
  404. br.ErrMsg = "分析失败,Err:" + err.Error()
  405. return
  406. }
  407. if len(list) <= 0 {
  408. list := []*supply_analysis.VarietyEdbInfo{
  409. {
  410. VarietyId: req.VarietyId,
  411. EdbName: varietyInfo.VarietyName + "影响周度产量",
  412. Frequency: "日度",
  413. EdbInfoId: 0,
  414. Source: 1,
  415. ModifyTime: time.Now(),
  416. CreateTime: time.Now(),
  417. },
  418. {
  419. VarietyId: req.VarietyId,
  420. EdbName: varietyInfo.VarietyName + "周度产量变动",
  421. Frequency: "日度",
  422. EdbInfoId: 0,
  423. Source: 2,
  424. ModifyTime: time.Now(),
  425. CreateTime: time.Now(),
  426. },
  427. {
  428. VarietyId: req.VarietyId,
  429. EdbName: varietyInfo.VarietyName + "影响月度产量",
  430. Frequency: "月度",
  431. EdbInfoId: 0,
  432. Source: 3,
  433. ModifyTime: time.Now(),
  434. CreateTime: time.Now(),
  435. },
  436. {
  437. VarietyId: req.VarietyId,
  438. EdbName: varietyInfo.VarietyName + "月度产量变动",
  439. Frequency: "月度",
  440. EdbInfoId: 0,
  441. Source: 4,
  442. ModifyTime: time.Now(),
  443. CreateTime: time.Now(),
  444. },
  445. }
  446. err = supply_analysis.BatchCreateVarietyEdbInfo(list)
  447. if err != nil {
  448. br.Msg = `分析失败`
  449. br.ErrMsg = `分析失败,生成指标失败,ERR:` + err.Error()
  450. return
  451. }
  452. }
  453. tmpMap := map[string]interface{}{
  454. "VarietyId": req.VarietyId,
  455. "AdminId": this.SysUser.AdminId,
  456. "AdminName": this.SysUser.RealName,
  457. }
  458. reqJson, err := json.Marshal(tmpMap)
  459. _, err = supply_analysisServ.Calculate(string(reqJson))
  460. if err != nil {
  461. br.Msg = `分析失败`
  462. br.ErrMsg = `分析失败,ERR:` + err.Error()
  463. return
  464. }
  465. {
  466. if len(list) > 0 {
  467. for _, v := range list {
  468. if v.EdbInfoId > 0 {
  469. edbInfo, err := data_manage.GetEdbInfoById(v.EdbInfoId)
  470. if err != nil {
  471. continue
  472. }
  473. go data.RefreshEdbData(edbInfo.EdbInfoId, edbInfo.Source, edbInfo.SubSource, edbInfo.EdbCode, utils.TimeToFormatDate(edbInfo.StartDate))
  474. }
  475. }
  476. }
  477. }
  478. {
  479. varietyInfo.ModifyTime = time.Now()
  480. varietyInfo.LastUpdateSysUserId = this.SysUser.AdminId
  481. varietyInfo.LastUpdateSysUserRealName = this.SysUser.RealName
  482. go varietyInfo.Update([]string{"ModifyTime", "LastUpdateSysUserId", "LastUpdateSysUserRealName"})
  483. }
  484. br.Ret = 200
  485. br.Msg = "分析成功"
  486. br.Success = true
  487. }
  488. // @router /variety/production_day/modify [post]
  489. func (this *VarietyController) ModifyProductionDay() {
  490. br := new(models.BaseResponse).Init()
  491. defer func() {
  492. this.Data["json"] = br
  493. this.ServeJSON()
  494. }()
  495. var req request.ModifyProductionDayReq
  496. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  497. if err != nil {
  498. br.Msg = "参数解析异常!"
  499. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  500. return
  501. }
  502. var hasPermission bool //是否有操作权限
  503. hasPermission, err = supply_analysisServ.HasVarietyPlantPermission(this.SysUser, req.VarietyId)
  504. if err != nil && !utils.IsErrNoRow(err) {
  505. br.Msg = "获取失败"
  506. br.ErrMsg = "查询是否有装置的操作权限失败;ERR:" + err.Error()
  507. return
  508. }
  509. if !hasPermission {
  510. br.Msg = "无操作权限"
  511. br.ErrMsg = "无操作权限"
  512. return
  513. }
  514. if req.VarietyId <= 0 {
  515. br.Msg = "请选择品种"
  516. br.IsSendEmail = false
  517. return
  518. }
  519. if req.Day <= 0 {
  520. br.Msg = "生产天数不能小于等于0"
  521. br.IsSendEmail = false
  522. return
  523. }
  524. varietyInfo, err := supply_analysis.GetVarietyById(req.VarietyId)
  525. if err != nil {
  526. br.Msg = "查询品种失败"
  527. br.ErrMsg = "查询品种失败;ERR:" + err.Error()
  528. return
  529. }
  530. varietyInfo.ProductionDay = req.Day
  531. varietyInfo.LastUpdateSysUserId = this.SysUser.AdminId
  532. varietyInfo.LastUpdateSysUserRealName = this.SysUser.RealName
  533. varietyInfo.ModifyTime = time.Now()
  534. err = varietyInfo.Update([]string{"ProductionDay", "LastUpdateSysUserId", "LastUpdateSysUserRealName", "ModifyTime"})
  535. if err != nil {
  536. br.Msg = "修改生产天数失败"
  537. br.ErrMsg = "修改生产天数失败,Err:" + err.Error()
  538. return
  539. }
  540. br.Ret = 200
  541. br.Msg = "修改成功"
  542. br.IsAddLog = true
  543. br.Success = true
  544. }