report_approve.go 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057
  1. package services
  2. import (
  3. "eta/eta_mobile/cache"
  4. "eta/eta_mobile/models"
  5. "eta/eta_mobile/models/report_approve"
  6. "eta/eta_mobile/models/smart_report"
  7. "eta/eta_mobile/services/alarm_msg"
  8. "eta/eta_mobile/utils"
  9. "fmt"
  10. "sort"
  11. "time"
  12. )
  13. // GetReportClassifyTreeRecursive 递归获取报告分类树
  14. func GetReportClassifyTreeRecursive(list []*models.Classify, parentId int) []*report_approve.ReportClassifyTreeItem {
  15. res := make([]*report_approve.ReportClassifyTreeItem, 0)
  16. for _, v := range list {
  17. if v.ParentId == parentId {
  18. t := new(report_approve.ReportClassifyTreeItem)
  19. t.ClassifyId = v.Id
  20. t.ClassifyName = v.ClassifyName
  21. t.ParentId = v.ParentId
  22. t.Children = GetReportClassifyTreeRecursive(list, v.Id)
  23. res = append(res, t)
  24. }
  25. }
  26. return res
  27. }
  28. // CheckReportApproveFlowChange 校验是否可变更分类
  29. func CheckReportApproveFlowChange(reportType, classifyFirstId, classifySecondId, classifyThirdId int) (ok bool, err error) {
  30. var count int
  31. cond := ` AND classify_id_first = ? AND classify_id_second = ? AND state = ?`
  32. pars := make([]interface{}, 0)
  33. pars = append(pars, classifyFirstId, classifySecondId, models.ReportStateWaitApprove)
  34. switch reportType {
  35. case report_approve.FlowReportTypeChinese:
  36. cond += ` AND classify_id_third = ? `
  37. pars = append(pars, classifyThirdId)
  38. ct, e := models.GetReportListCount(cond, pars)
  39. if e != nil {
  40. err = fmt.Errorf("GetReportListCount err: %s", e.Error())
  41. return
  42. }
  43. count = ct
  44. case report_approve.FlowReportTypeEnglish:
  45. ct, e := models.GetEnglishReportListCount(cond, pars, "")
  46. if e != nil {
  47. err = fmt.Errorf("GetEnglishReportListCount err: %s", e.Error())
  48. return
  49. }
  50. count = ct
  51. case report_approve.FlowReportTypeSmart:
  52. ob := new(smart_report.SmartReport)
  53. ct, e := ob.GetCountByCondition(cond, pars)
  54. if e != nil {
  55. err = fmt.Errorf("SmartReport GetCountByCondition err: %s", e.Error())
  56. return
  57. }
  58. count = ct
  59. default:
  60. err = fmt.Errorf("报告类型有误")
  61. return
  62. }
  63. if count <= 0 {
  64. ok = true
  65. }
  66. return
  67. }
  68. // CheckReportOpenApprove 校验报告是否开启了审批流
  69. func CheckReportOpenApprove(reportType, firstId, secondId, thirdId int) (opening bool, err error) {
  70. // 获取审批配置
  71. confMap, e := models.GetBusinessConf()
  72. if e != nil {
  73. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  74. return
  75. }
  76. openMap := map[string]bool{"false": false, "true": true}
  77. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  78. // 查询对应分类是否有审批流
  79. flowOb := new(report_approve.ReportApproveFlow)
  80. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  81. flowPars := make([]interface{}, 0)
  82. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  83. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  84. if e != nil && e.Error() != utils.ErrNoRow() {
  85. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  86. return
  87. }
  88. // 开启审批/有审批流
  89. if openApprove && (flowItem != nil || confMap[models.BusinessConfReportApproveType] == models.BusinessConfReportApproveTypeOther) {
  90. opening = true
  91. return
  92. }
  93. return
  94. }
  95. // CheckReportCurrState 校验报告当前应有的状态
  96. func CheckReportCurrState(reportType, firstId, secondId, thirdId, operate int) (state int, err error) {
  97. // 获取审批配置
  98. confMap, e := models.GetBusinessConf()
  99. if e != nil {
  100. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  101. return
  102. }
  103. openMap := map[string]bool{"false": false, "true": true}
  104. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  105. // 查询对应分类是否有审批流
  106. flowOb := new(report_approve.ReportApproveFlow)
  107. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  108. flowPars := make([]interface{}, 0)
  109. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  110. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  111. if e != nil && e.Error() != utils.ErrNoRow() {
  112. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  113. return
  114. }
  115. // 开启审批/有审批流
  116. if openApprove && (flowItem != nil || confMap[models.BusinessConfReportApproveType] == models.BusinessConfReportApproveTypeOther) {
  117. // 操作为无审批的操作时, 会转为有审批的初始状态-待提交
  118. stateMap := map[int]int{
  119. models.ReportOperateAdd: models.ReportStateWaitSubmit, // 新增
  120. models.ReportOperateEdit: models.ReportStateWaitSubmit, // 编辑
  121. models.ReportOperatePublish: models.ReportStateWaitSubmit, // 发布
  122. models.ReportOperateCancelPublish: models.ReportStateWaitSubmit, // 取消发布
  123. models.ReportOperateSubmitApprove: models.ReportStateWaitApprove, // 提审
  124. models.ReportOperateCancelApprove: models.ReportStateWaitSubmit, // 撤回
  125. }
  126. state = stateMap[operate]
  127. return
  128. }
  129. // 关闭审批/分类无审批
  130. // 操作为有审批的操作时, 会转为无审批的初始状态-未发布
  131. stateMap := map[int]int{
  132. models.ReportOperateAdd: models.ReportStateUnpublished, // 新增
  133. models.ReportOperateEdit: models.ReportStateUnpublished, // 编辑
  134. models.ReportOperatePublish: models.ReportStatePublished, // 发布
  135. models.ReportOperateCancelPublish: models.ReportStateUnpublished, // 取消发布
  136. models.ReportOperateSubmitApprove: models.ReportStateUnpublished, // 提审
  137. models.ReportOperateCancelApprove: models.ReportStateUnpublished, // 撤回
  138. }
  139. state = stateMap[operate]
  140. return
  141. }
  142. // SubmitReportApprove 提交审批
  143. func SubmitReportApprove(reportType, reportId int, reportTitle string, firstId, secondId, thirdId int, sysAdminId int, sysAdminName string) (approveId int, err error) {
  144. // 默认内部审批, 如果是走的第三方审批, 那么仅修改状态
  145. confMap, e := models.GetBusinessConf()
  146. if e != nil {
  147. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  148. return
  149. }
  150. openMap := map[string]bool{"false": false, "true": true}
  151. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  152. if !openApprove {
  153. err = fmt.Errorf("未开启审批")
  154. return
  155. }
  156. confApproveType := confMap[models.BusinessConfReportApproveType]
  157. if confApproveType == "" {
  158. confApproveType = models.BusinessConfReportApproveTypeEta
  159. }
  160. if confApproveType == models.BusinessConfReportApproveTypeOther {
  161. return
  162. }
  163. // 查询审批流
  164. flowOb := new(report_approve.ReportApproveFlow)
  165. flowCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s = ? AND %s = ?`, report_approve.ReportApproveFlowCols.ReportType, report_approve.ReportApproveFlowCols.ClassifyFirstId, report_approve.ReportApproveFlowCols.ClassifySecondId, report_approve.ReportApproveFlowCols.ClassifyThirdId)
  166. flowPars := make([]interface{}, 0)
  167. flowPars = append(flowPars, reportType, firstId, secondId, thirdId)
  168. flowItem, e := flowOb.GetItemByCondition(flowCond, flowPars, "")
  169. if e != nil {
  170. err = fmt.Errorf("ApproveFlow GetItemByCondition err: %s", e.Error())
  171. return
  172. }
  173. // 查询审批节点
  174. nodeOb := new(report_approve.ReportApproveNode)
  175. nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, report_approve.ReportApproveNodeCols.ReportApproveFlowId, report_approve.ReportApproveNodeCols.CurrVersion)
  176. nodePars := make([]interface{}, 0)
  177. nodePars = append(nodePars, flowItem.ReportApproveFlowId, flowItem.CurrVersion)
  178. nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  179. if e != nil {
  180. err = fmt.Errorf("ApproveNodes GetItemsByCondition err: %s", e.Error())
  181. return
  182. }
  183. if len(nodeItems) == 0 {
  184. err = fmt.Errorf("无审批节点")
  185. return
  186. }
  187. // 取出首个节点
  188. firstNodeItem := new(report_approve.ReportApproveNode)
  189. for _, v := range nodeItems {
  190. if v.PrevNodeId == 0 {
  191. firstNodeItem = v
  192. continue
  193. }
  194. }
  195. if firstNodeItem == nil {
  196. err = fmt.Errorf("首个审批节点有误")
  197. return
  198. }
  199. // 审批信息
  200. now := time.Now().Local()
  201. newApprove := new(report_approve.ReportApprove)
  202. newApprove.ReportType = reportType
  203. newApprove.ReportId = reportId
  204. newApprove.ReportTitle = reportTitle
  205. newApprove.ClassifyFirstId = firstId
  206. newApprove.ClassifySecondId = secondId
  207. newApprove.ClassifyThirdId = thirdId
  208. newApprove.State = report_approve.ReportApproveStateApproving
  209. newApprove.FlowId = flowItem.ReportApproveFlowId
  210. newApprove.FlowVersion = flowItem.CurrVersion
  211. newApprove.StartNodeId = firstNodeItem.ReportApproveNodeId
  212. newApprove.CurrNodeId = firstNodeItem.ReportApproveNodeId
  213. newApprove.ApplyUserId = sysAdminId
  214. newApprove.ApplyUserName = sysAdminName
  215. newApprove.CreateTime = now
  216. newApprove.ModifyTime = now
  217. if e = newApprove.Create(); e != nil {
  218. err = fmt.Errorf("生成审批信息失败, Err: %s", e.Error())
  219. return
  220. }
  221. approveId = newApprove.ReportApproveId
  222. // 生成节点审批记录
  223. err = BuildNextNodeRecordAndMsg(firstNodeItem, newApprove.ReportApproveId, sysAdminId, sysAdminName)
  224. return
  225. }
  226. // CancelReportApprove 撤回审批
  227. func CancelReportApprove(reportType, reportId, approveId, sysAdminId int, sysAdminName string) (err error) {
  228. // 默认内部审批, 如果是走的第三方审批, 那么仅修改状态
  229. confMap, e := models.GetBusinessConf()
  230. if e != nil {
  231. err = fmt.Errorf("GetBusinessConf err: %s", e.Error())
  232. return
  233. }
  234. openMap := map[string]bool{"false": false, "true": true}
  235. openApprove := openMap[confMap[models.BusinessConfIsReportApprove]]
  236. if !openApprove {
  237. //err = fmt.Errorf("未开启审批")
  238. return
  239. }
  240. confApproveType := confMap[models.BusinessConfReportApproveType]
  241. if confApproveType == "" {
  242. confApproveType = models.BusinessConfReportApproveTypeEta
  243. }
  244. // 第三方审批仅修改报告状态
  245. if confApproveType == models.BusinessConfReportApproveTypeOther {
  246. e = updateReportApproveState(reportType, reportId, 0, models.ReportStateWaitSubmit)
  247. if e != nil {
  248. err = fmt.Errorf("更新报告审批撤回失败, Err: %s", e.Error())
  249. return
  250. }
  251. return
  252. }
  253. // 修改审批信息状态
  254. approveOb := new(report_approve.ReportApprove)
  255. approveItem, e := approveOb.GetItemById(approveId)
  256. if e != nil {
  257. if e.Error() == utils.ErrNoRow() {
  258. return
  259. }
  260. err = fmt.Errorf("approve GetItemById err: %s", e.Error())
  261. return
  262. }
  263. if approveItem.State == report_approve.ReportApproveStateCancel {
  264. return
  265. }
  266. approveItem.State = report_approve.ReportApproveStateCancel
  267. cols := []string{"State", "ModifyTime"}
  268. if e = approveItem.Update(cols); e != nil {
  269. err = fmt.Errorf("approve Update err: %s", e.Error())
  270. return
  271. }
  272. // 修改报告状态
  273. e = updateReportApproveState(reportType, reportId, 0, models.ReportStateWaitSubmit)
  274. if e != nil {
  275. err = fmt.Errorf("更新报告审批撤回失败, Err: %s", e.Error())
  276. return
  277. }
  278. // 推送撤回消息
  279. go func() {
  280. recordOb := new(report_approve.ReportApproveRecord)
  281. recordCond := fmt.Sprintf(` AND %s = ?`, report_approve.ReportApproveRecordCols.ReportApproveId)
  282. recordPars := make([]interface{}, 0)
  283. recordPars = append(recordPars, approveId)
  284. recordItems, e := recordOb.GetItemsByCondition(recordCond, recordPars, []string{}, "")
  285. if e != nil {
  286. utils.FileLog.Info(fmt.Sprintf("approve record GetItemsByCondition err: %s", e.Error()))
  287. return
  288. }
  289. messageOb := new(report_approve.ReportApproveMessage)
  290. messages := make([]*report_approve.ReportApproveMessage, 0)
  291. for _, v := range recordItems {
  292. m := new(report_approve.ReportApproveMessage)
  293. m.SendUserId = sysAdminId
  294. m.ReceiveUserId = v.ApproveUserId
  295. m.Content = fmt.Sprintf("%s提交的【研报审批】已撤回", sysAdminName)
  296. m.ReportApproveId = approveId
  297. m.ApproveState = report_approve.ReportApproveStateCancel
  298. m.CreateTime = time.Now().Local()
  299. m.ModifyTime = time.Now().Local()
  300. messages = append(messages, m)
  301. }
  302. e = messageOb.CreateMulti(messages)
  303. if e != nil {
  304. utils.FileLog.Info(fmt.Sprintf("CancelReportApprove messages err: %s", e.Error()))
  305. return
  306. }
  307. }()
  308. return
  309. }
  310. // updateReportApproveState 更新报告审批状态
  311. func updateReportApproveState(reportType, reportId, approveId, state int) (err error) {
  312. updateCols := []string{"ApproveId", "State", "ModifyTime"}
  313. if reportType == report_approve.FlowReportTypeChinese {
  314. reportOb := new(models.Report)
  315. reportItem, e := reportOb.GetItemById(reportId)
  316. // 报告可能会被删除, 这里查不到就忽略掉
  317. if e != nil && e.Error() != utils.ErrNoRow() {
  318. err = fmt.Errorf("获取中文研报失败, Err: %s", e.Error())
  319. return
  320. }
  321. if reportItem != nil {
  322. reportItem.ApproveId = approveId
  323. reportItem.State = state
  324. reportItem.ModifyTime = time.Now().Local()
  325. if state == models.ReportStatePass || state == models.ReportStateRefused {
  326. updateCols = append(updateCols, "ApproveTime")
  327. reportItem.ApproveTime = time.Now().Local()
  328. }
  329. if state == models.ReportStatePass {
  330. updateCols = append(updateCols, "PublishTime")
  331. reportItem.PublishTime = time.Now().Local()
  332. }
  333. if e = reportItem.UpdateReport(updateCols); e != nil {
  334. err = fmt.Errorf("更新中文研报审批状态失败, Err: %s", e.Error())
  335. return
  336. }
  337. }
  338. }
  339. if reportType == report_approve.FlowReportTypeEnglish {
  340. reportItem, e := models.GetEnglishReportItemById(reportId)
  341. if e != nil && e.Error() != utils.ErrNoRow() {
  342. err = fmt.Errorf("获取英文研报失败, Err: %s", e.Error())
  343. return
  344. }
  345. if reportItem != nil {
  346. reportItem.ApproveId = approveId
  347. reportItem.State = state
  348. reportItem.ModifyTime = time.Now().Local()
  349. if state == models.ReportStatePass || state == models.ReportStateRefused {
  350. updateCols = append(updateCols, "ApproveTime")
  351. reportItem.ApproveTime = time.Now().Local()
  352. }
  353. if state == models.ReportStatePass {
  354. updateCols = append(updateCols, "PublishTime")
  355. reportItem.PublishTime = time.Now().Local()
  356. }
  357. if e = reportItem.UpdateReport(updateCols); e != nil {
  358. err = fmt.Errorf("更新英文研报审批状态失败, Err: %s", e.Error())
  359. return
  360. }
  361. }
  362. }
  363. if reportType == report_approve.FlowReportTypeSmart {
  364. reportOb := new(smart_report.SmartReport)
  365. reportItem, e := reportOb.GetItemById(reportId)
  366. if e != nil && e.Error() != utils.ErrNoRow() {
  367. err = fmt.Errorf("获取智能研报失败, Err: %s", e.Error())
  368. return
  369. }
  370. if reportItem != nil {
  371. reportItem.ApproveId = approveId
  372. reportItem.State = state
  373. reportItem.ModifyTime = time.Now().Local()
  374. if state == models.ReportStatePass || state == models.ReportStateRefused {
  375. updateCols = append(updateCols, "ApproveTime")
  376. reportItem.ApproveTime = time.Now().Local()
  377. }
  378. if state == models.ReportStatePass {
  379. updateCols = append(updateCols, "PublishTime")
  380. reportItem.PublishTime = time.Now().Local()
  381. }
  382. if e = reportItem.Update(updateCols); e != nil {
  383. err = fmt.Errorf("更新智能研报审批状态失败, Err: %s", e.Error())
  384. return
  385. }
  386. }
  387. }
  388. return
  389. }
  390. // PassReportApprove 通过审批
  391. func PassReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, sysAdminId int, reportUrl string) (tips string, err error) {
  392. if approveItem == nil {
  393. err = fmt.Errorf("审批信息有误")
  394. return
  395. }
  396. if recordItem == nil {
  397. err = fmt.Errorf("审批记录有误")
  398. return
  399. }
  400. // 查询审批流和审批流节点
  401. flowOb := new(report_approve.ReportApproveFlow)
  402. flowItem, e := flowOb.GetItemById(approveItem.FlowId)
  403. if e != nil {
  404. err = fmt.Errorf("获取审批流失败, Err: %s", e.Error())
  405. return
  406. }
  407. nodeOb := new(report_approve.ReportApproveNode)
  408. nodeCond := fmt.Sprintf(` AND %s = ? AND %s = ?`, report_approve.ReportApproveNodeCols.ReportApproveFlowId, report_approve.ReportApproveNodeCols.CurrVersion)
  409. nodePars := make([]interface{}, 0)
  410. nodePars = append(nodePars, flowItem.ReportApproveFlowId, flowItem.CurrVersion)
  411. nodeItems, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  412. if e != nil {
  413. err = fmt.Errorf("ApproveNodes GetItemsByCondition err: %s", e.Error())
  414. return
  415. }
  416. if len(nodeItems) == 0 {
  417. err = fmt.Errorf("无审批节点")
  418. return
  419. }
  420. nodeMap := make(map[int]*report_approve.ReportApproveNode)
  421. for _, v := range nodeItems {
  422. nodeMap[v.ReportApproveNodeId] = v
  423. }
  424. // 取出审批记录的节点
  425. currNodeItem := nodeMap[recordItem.NodeId]
  426. if currNodeItem == nil {
  427. err = fmt.Errorf("当前节点信息有误")
  428. return
  429. }
  430. currNode, e := report_approve.FormatReportApproveNode2Item(currNodeItem)
  431. if e != nil {
  432. err = fmt.Errorf("当前节点信息有误, Err: %s", e.Error())
  433. return
  434. }
  435. now := time.Now().Local()
  436. recordItem.State = report_approve.ReportApproveStatePass
  437. recordItem.ApproveTime = now
  438. recordItem.ModifyTime = now
  439. recordItem.NodeState = report_approve.ReportApproveStatePass
  440. recordItem.NodeApproveUserId = recordItem.ApproveUserId
  441. recordItem.NodeApproveUserName = recordItem.ApproveUserName
  442. recordItem.NodeApproveTime = now
  443. recordCols := []string{"State", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
  444. lastApprove := false
  445. // 依次审批
  446. if currNode.ApproveType == report_approve.NodeApproveTypeRoll {
  447. if e = recordItem.Update(recordCols); e != nil {
  448. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  449. return
  450. }
  451. // 检查依次审批情况
  452. sort.Slice(currNode.Users, func(k, j int) bool {
  453. return currNode.Users[k].Sort < currNode.Users[j].Sort
  454. })
  455. userLen := len(currNode.Users)
  456. //lastRoll := false
  457. nextUser := new(report_approve.ReportApproveNodeUserReq) // 下一个审批人, 为nil则表示当前审批人即为最后
  458. for k, v := range currNode.Users {
  459. // 当前审批人
  460. if v.UserId == sysAdminId && recordItem.ApproveUserSort == v.Sort {
  461. //if k == (userLen - 1) {
  462. // lastRoll = true
  463. // break
  464. //}
  465. if (k + 1) < userLen {
  466. nextUser = currNode.Users[k+1]
  467. }
  468. }
  469. }
  470. //if lastRoll && currNode.NextNodeId == 0 {
  471. // lastApprove = true
  472. //}
  473. // 当前节点下一个审批人, 生成下一个审批记录且return
  474. if nextUser.UserId > 0 {
  475. newRecord := new(report_approve.ReportApproveRecord)
  476. newRecord.ReportApproveId = recordItem.ReportApproveId
  477. newRecord.State = report_approve.ReportApproveStateApproving
  478. newRecord.NodeId = currNode.ReportApproveNodeId
  479. newRecord.PrevNodeId = currNode.PrevNodeId
  480. newRecord.NextNodeId = currNode.NextNodeId
  481. newRecord.ApproveType = currNode.ApproveType
  482. newRecord.ApproveUserId = nextUser.UserId
  483. newRecord.ApproveUserName = nextUser.UserName
  484. newRecord.ApproveUserSort = nextUser.Sort
  485. newRecord.CreateTime = now
  486. newRecord.ModifyTime = now
  487. newRecord.NodeState = report_approve.ReportApproveStateApproving
  488. if e = newRecord.Create(); e != nil {
  489. err = fmt.Errorf("生成审批记录失败, Err: %s", e.Error())
  490. return
  491. }
  492. // 推送审批消息
  493. go func() {
  494. messageItem := new(report_approve.ReportApproveMessage)
  495. messageItem.SendUserId = approveItem.ApplyUserId
  496. messageItem.ReceiveUserId = nextUser.UserId
  497. messageItem.Content = "您有新的待办任务"
  498. messageItem.Remark = fmt.Sprintf("%s提交的【研报审批】需要您审批,请及时处理", approveItem.ApplyUserName)
  499. messageItem.ReportApproveId = approveItem.ReportApproveId
  500. messageItem.ApproveState = report_approve.ReportApproveStateApproving
  501. messageItem.CreateTime = now
  502. messageItem.ModifyTime = now
  503. if e = messageItem.Create(); e != nil {
  504. utils.FileLog.Info(fmt.Sprintf("PassReportApprove message err: %s", e.Error()))
  505. return
  506. }
  507. }()
  508. return
  509. }
  510. // 更新审批当前节点并进入下一个节点
  511. if currNode.NextNodeId > 0 {
  512. nextNode := nodeMap[currNode.NextNodeId]
  513. approveItem.CurrNodeId = currNode.NextNodeId
  514. approveItem.ModifyTime = now
  515. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  516. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  517. return
  518. }
  519. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  520. return
  521. } else {
  522. // 最后一个节点
  523. lastApprove = true
  524. }
  525. }
  526. // 会签
  527. if currNode.ApproveType == report_approve.NodeApproveTypeAll {
  528. // 查询其他审批人是否已审批
  529. otherOb := new(report_approve.ReportApproveRecord)
  530. otherCond := fmt.Sprintf(` AND %s = ? AND %s = ? AND %s <> ?`, report_approve.ReportApproveRecordCols.ReportApproveId, report_approve.ReportApproveRecordCols.NodeId, report_approve.ReportApproveRecordCols.ApproveUserId)
  531. otherPars := make([]interface{}, 0)
  532. otherPars = append(otherPars, approveItem.ReportApproveId, recordItem.NodeId, sysAdminId)
  533. otherRecords, e := otherOb.GetItemsByCondition(otherCond, otherPars, []string{}, "")
  534. if e != nil {
  535. err = fmt.Errorf("获取节点审批记录失败, Err: %s", e.Error())
  536. return
  537. }
  538. otherPass := true
  539. for _, v := range otherRecords {
  540. if v.State != report_approve.ReportApproveStatePass {
  541. otherPass = false
  542. }
  543. }
  544. // 其他人未审批, 仅更新当前审批记录
  545. if e = recordItem.Update(recordCols); e != nil {
  546. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  547. return
  548. }
  549. // 其他人已审批且为最后节点
  550. if otherPass && currNode.NextNodeId == 0 {
  551. lastApprove = true
  552. }
  553. // 其他人已审批且不为最后节点, 进入下一节点
  554. if otherPass && currNode.NextNodeId > 0 {
  555. nextNode := nodeMap[currNode.NextNodeId]
  556. approveItem.CurrNodeId = currNode.NextNodeId
  557. approveItem.ModifyTime = now
  558. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  559. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  560. return
  561. }
  562. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  563. return
  564. }
  565. }
  566. // 或签
  567. if currNode.ApproveType == report_approve.NodeApproveTypeAny {
  568. // 需检查一下审批的当前节点和记录的节点是否匹配, 不匹配可能是因为另外的审批人已通过, 所以此处应给提示
  569. // 前端也有做相应的判断,但是两个人同时进入审批详情页时就可能出现这种情况
  570. if approveItem.CurrNodeId != recordItem.NodeId {
  571. tips = "该节点已完成审批, 请刷新页面"
  572. return
  573. }
  574. if e = recordItem.Update(recordCols); e != nil {
  575. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  576. return
  577. }
  578. // 将该审批的同一个节点的记录标记为已审批
  579. if e = recordItem.UpdateNodeState(recordItem.ReportApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
  580. err = fmt.Errorf("更新同一节点的其他审批记录状态失败, Err: %s", e.Error())
  581. return
  582. }
  583. if currNode.NextNodeId == 0 {
  584. lastApprove = true
  585. }
  586. if currNode.NextNodeId > 0 {
  587. nextNode := nodeMap[currNode.NextNodeId]
  588. approveItem.CurrNodeId = currNode.NextNodeId
  589. approveItem.ModifyTime = now
  590. if e = approveItem.Update([]string{"CurrNodeId", "ModifyTime"}); e != nil {
  591. err = fmt.Errorf("更新审批当前节点失败, Err: %s", e.Error())
  592. return
  593. }
  594. err = BuildNextNodeRecordAndMsg(nextNode, approveItem.ReportApproveId, approveItem.ApplyUserId, approveItem.ApplyUserName)
  595. return
  596. }
  597. }
  598. // 最后一个审批, 更新审批记录、审批、报告状态、推送消息给申请人
  599. if lastApprove {
  600. if e = recordItem.Update(recordCols); e != nil {
  601. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  602. return
  603. }
  604. approveItem.State = report_approve.ReportApproveStatePass
  605. approveItem.ApproveTime = now
  606. approveItem.ModifyTime = now
  607. approveCols := []string{"State", "ApproveTime", "ModifyTime"}
  608. if e = approveItem.Update(approveCols); e != nil {
  609. err = fmt.Errorf("更新审批信息失败, Err: %s", e.Error())
  610. return
  611. }
  612. if e = updateReportApproveState(approveItem.ReportType, approveItem.ReportId, approveItem.ReportApproveId, models.ReportStatePass); e != nil {
  613. err = fmt.Errorf("更新报告审批状态失败, Err: %s", e.Error())
  614. return
  615. }
  616. go func() {
  617. messageItem := new(report_approve.ReportApproveMessage)
  618. messageItem.SendUserId = sysAdminId
  619. messageItem.ReceiveUserId = approveItem.ApplyUserId
  620. messageItem.Content = "您提交的审批已通过"
  621. messageItem.Remark = "您提交的【研报审批】已通过"
  622. messageItem.ReportApproveId = approveItem.ReportApproveId
  623. messageItem.ApproveState = report_approve.ReportApproveStatePass
  624. messageItem.CreateTime = now
  625. messageItem.ModifyTime = now
  626. if e = messageItem.Create(); e != nil {
  627. utils.FileLog.Info(fmt.Sprintf("PassReportApprove message err: %s", e.Error()))
  628. return
  629. }
  630. }()
  631. // 审批通过之后的处理
  632. go func() {
  633. if e = AfterReportApprovePass(approveItem.ReportType, approveItem.ReportId); e != nil {
  634. utils.FileLog.Info(fmt.Sprintf("AfterReportApprovePass err: %s, ReportType: %d, ReportId: %d", e.Error(), approveItem.ReportType, approveItem.ReportId))
  635. return
  636. }
  637. }()
  638. }
  639. return
  640. }
  641. // RefuseReportApprove 驳回审批
  642. func RefuseReportApprove(approveItem *report_approve.ReportApprove, recordItem *report_approve.ReportApproveRecord, approveRemark string, sysAdminId int) (err error) {
  643. if approveItem == nil {
  644. err = fmt.Errorf("审批信息有误")
  645. return
  646. }
  647. if recordItem == nil {
  648. err = fmt.Errorf("审批记录有误")
  649. return
  650. }
  651. // 更新审批记录
  652. now := time.Now().Local()
  653. recordItem.State = report_approve.ReportApproveStateRefuse
  654. recordItem.ApproveRemark = approveRemark
  655. recordItem.ApproveTime = now
  656. recordItem.ModifyTime = now
  657. recordItem.NodeState = report_approve.ReportApproveStateRefuse
  658. recordItem.NodeApproveUserId = recordItem.ApproveUserId
  659. recordItem.NodeApproveUserName = recordItem.ApproveUserName
  660. recordItem.NodeApproveTime = now
  661. recordCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime", "NodeState", "NodeApproveUserId", "NodeApproveUserName", "NodeApproveTime"}
  662. if e := recordItem.Update(recordCols); e != nil {
  663. err = fmt.Errorf("更新审批记录状态失败, Err: %s", e.Error())
  664. return
  665. }
  666. // 将该审批的同一个节点的记录标记为已审批
  667. if e := recordItem.UpdateNodeState(recordItem.ReportApproveId, recordItem.NodeId, recordItem.NodeState, recordItem.NodeApproveUserId, recordItem.NodeApproveUserName, recordItem.NodeApproveTime); e != nil {
  668. err = fmt.Errorf("更新同一节点的其他审批记录状态失败, Err: %s", e.Error())
  669. return
  670. }
  671. // 驳回-更新审批, 报告状态, 推送消息
  672. approveItem.State = report_approve.ReportApproveStateRefuse
  673. approveItem.ApproveRemark = approveRemark
  674. approveItem.ApproveTime = now
  675. approveItem.ModifyTime = now
  676. approveCols := []string{"State", "ApproveRemark", "ApproveTime", "ModifyTime"}
  677. if e := approveItem.Update(approveCols); e != nil {
  678. err = fmt.Errorf("更新审批状态失败, Err: %s", e.Error())
  679. return
  680. }
  681. if e := updateReportApproveState(approveItem.ReportType, approveItem.ReportId, approveItem.ReportApproveId, models.ReportStateRefused); e != nil {
  682. err = fmt.Errorf("更新报告状态失败, Err: %s", e.Error())
  683. return
  684. }
  685. // 推送驳回消息给申请人
  686. go func() {
  687. messageItem := new(report_approve.ReportApproveMessage)
  688. messageItem.SendUserId = sysAdminId
  689. messageItem.ReceiveUserId = approveItem.ApplyUserId
  690. messageItem.Content = "您提交的审批被驳回"
  691. messageItem.Remark = "您提交的【研报审批】已被驳回"
  692. messageItem.ReportApproveId = approveItem.ReportApproveId
  693. messageItem.ApproveState = report_approve.ReportApproveStateRefuse
  694. messageItem.CreateTime = now
  695. messageItem.ModifyTime = now
  696. if e := messageItem.Create(); e != nil {
  697. utils.FileLog.Info(fmt.Sprintf("ApproveReport message err: %s", e.Error()))
  698. return
  699. }
  700. }()
  701. return
  702. }
  703. // BuildNextNodeRecordAndMsg 生成下一个节点的审批记录并推送消息
  704. func BuildNextNodeRecordAndMsg(approveNodeItem *report_approve.ReportApproveNode, approveId, sysAdminId int, sysAdminName string) (err error) {
  705. if approveNodeItem == nil {
  706. err = fmt.Errorf("approve node nil")
  707. return
  708. }
  709. // 根据节点审批方式生成审批记录
  710. now := time.Now().Local()
  711. approveNode, e := report_approve.FormatReportApproveNode2Item(approveNodeItem)
  712. if e != nil {
  713. err = fmt.Errorf("FormatReportApproveNode2Item err: %s", e.Error())
  714. return
  715. }
  716. if len(approveNode.Users) == 0 {
  717. err = fmt.Errorf("审批节点用户有误")
  718. return
  719. }
  720. newRecords := make([]*report_approve.ReportApproveRecord, 0)
  721. sort.Slice(approveNode.Users, func(k, j int) bool {
  722. return approveNode.Users[k].Sort < approveNode.Users[j].Sort
  723. })
  724. for _, u := range approveNode.Users {
  725. r := new(report_approve.ReportApproveRecord)
  726. r.ReportApproveId = approveId
  727. r.State = report_approve.ReportApproveStateApproving
  728. r.NodeId = approveNode.ReportApproveNodeId
  729. r.PrevNodeId = approveNode.PrevNodeId
  730. r.NextNodeId = approveNode.NextNodeId
  731. r.ApproveType = approveNode.ApproveType
  732. r.ApproveUserId = u.UserId
  733. r.ApproveUserName = u.UserName
  734. r.ApproveUserSort = u.Sort
  735. r.CreateTime = now
  736. r.ModifyTime = now
  737. r.NodeState = report_approve.ReportApproveStateApproving // 当前节点审批状态
  738. newRecords = append(newRecords, r)
  739. // 依次审批仅生成一条记录
  740. if approveNode.ApproveType == report_approve.NodeApproveTypeRoll {
  741. break
  742. }
  743. }
  744. recordOb := new(report_approve.ReportApproveRecord)
  745. if e = recordOb.CreateMulti(newRecords); e != nil {
  746. err = fmt.Errorf("生成节点审批记录失败, Err: %s", e.Error())
  747. return
  748. }
  749. // 推送审批消息
  750. go func() {
  751. messageOb := new(report_approve.ReportApproveMessage)
  752. messages := make([]*report_approve.ReportApproveMessage, 0)
  753. for _, v := range newRecords {
  754. m := new(report_approve.ReportApproveMessage)
  755. m.SendUserId = sysAdminId
  756. m.ReceiveUserId = v.ApproveUserId
  757. m.Content = "您有新的待办任务"
  758. m.Remark = fmt.Sprintf("%s提交的【研报审批】需要您审批,请及时处理", sysAdminName)
  759. m.ReportApproveId = approveId
  760. m.ApproveState = report_approve.ReportApproveStateApproving
  761. m.CreateTime = now
  762. m.ModifyTime = now
  763. messages = append(messages, m)
  764. }
  765. e = messageOb.CreateMulti(messages)
  766. if e != nil {
  767. utils.FileLog.Info(fmt.Sprintf("BuildNextNodeRecordAndMsg messages err: %s", e.Error()))
  768. return
  769. }
  770. }()
  771. return
  772. }
  773. // AfterReportApprovePass 报告审批通过后的处理
  774. func AfterReportApprovePass(reportType, reportId int) (err error) {
  775. // 中文研报
  776. if reportType == report_approve.FlowReportTypeChinese {
  777. reportInfo, e := models.GetReportByReportId(reportId)
  778. if e != nil {
  779. if e.Error() == utils.ErrNoRow() {
  780. return
  781. }
  782. err = fmt.Errorf("获取研报信息失败, Err: %s", e.Error())
  783. return
  784. }
  785. // 重新生成音频,里面还涉及到章节类型的报告
  786. go UpdateReportVideo(reportInfo)
  787. // 生成报告pdf和长图
  788. {
  789. reportPdfUrl := GetGeneralPdfUrl(reportInfo.Id, reportInfo.ReportCode, reportInfo.ReportLayout)
  790. go Report2pdfAndJpeg(reportPdfUrl, reportId, 1)
  791. }
  792. //_ = CreateVideo(reportInfo)
  793. _ = UpdateReportEs(reportInfo.Id, models.ReportStatePublished)
  794. // 报告发布成功后,需要将相关信息入知识库
  795. go cache.RagEtaReportOpToCache(reportInfo.Id, 0, `publish`)
  796. return
  797. }
  798. // 英文研报
  799. if reportType == report_approve.FlowReportTypeEnglish {
  800. _ = UpdateEnglishReportEs(reportId, models.ReportStatePublished)
  801. return
  802. }
  803. // 智能研报
  804. if reportType == report_approve.FlowReportTypeSmart {
  805. ob := new(smart_report.SmartReport)
  806. item, e := ob.GetItemById(reportId)
  807. if e != nil {
  808. if e.Error() == utils.ErrNoRow() {
  809. return
  810. }
  811. err = fmt.Errorf("获取智能研报信息失败, Err: %s", e.Error())
  812. return
  813. }
  814. // 写入队列
  815. //var queue smart_report.Report2ImgQueueReq
  816. //queue.ReportType = 2
  817. //queue.ReportCode = item.ReportCode
  818. //_ = utils.Rc.LPush(utils.CACHE_CREATE_REPORT_IMGPDF_QUEUE, queue)
  819. // 生成音频
  820. if item.VideoUrl == "" {
  821. SmartReportBuildVideoAndUpdate(item)
  822. }
  823. // ES更新报告
  824. _ = SmartReportElasticUpsert(item.SmartReportId, models.ReportStatePublished)
  825. }
  826. return
  827. }
  828. // CheckCloseReportApproveConf 校验是否可以关闭报告审批
  829. func CheckCloseReportApproveConf() (yes bool, err error) {
  830. // 查询待审批中的报告数量
  831. count, e := models.GetReportStateCount(models.ReportStateWaitApprove)
  832. if e != nil {
  833. err = fmt.Errorf("查询审批中的报告数量失败, Err: %s", e.Error())
  834. return
  835. }
  836. if count > 0 {
  837. return
  838. }
  839. count, e = models.GetEnglishReportStateCount(models.ReportStateWaitApprove)
  840. if e != nil {
  841. err = fmt.Errorf("查询审批中的英文报告数量失败, Err: %s", e.Error())
  842. return
  843. }
  844. if count > 0 {
  845. return
  846. }
  847. smartOb := new(smart_report.SmartReport)
  848. cond := ` AND state = ?`
  849. pars := make([]interface{}, 0)
  850. pars = append(pars, models.ReportStateWaitApprove)
  851. count, e = smartOb.GetCountByCondition(cond, pars)
  852. if e != nil {
  853. err = fmt.Errorf("查询审批中的智能报告数量失败, Err: %s", e.Error())
  854. return
  855. }
  856. if count > 0 {
  857. return
  858. }
  859. yes = true
  860. return
  861. }
  862. // FlowOperateResetReportState 审批流变化-重置报告的初始状态
  863. func FlowOperateResetReportState(reportType, classifyFirstId, classifySecondId, classifyThirdId, oldState, State int) (err error) {
  864. defer func() {
  865. if err != nil {
  866. tips := fmt.Sprintf("审批流变化-重置报告初始状态失败, ErrMsg: %s", err.Error())
  867. utils.FileLog.Info(tips)
  868. go alarm_msg.SendAlarmMsg(tips, 2)
  869. }
  870. }()
  871. // 中文研报
  872. if reportType == report_approve.FlowReportTypeChinese {
  873. e := models.UpdateReportsStateByCond(classifyFirstId, classifySecondId, classifyThirdId, oldState, State)
  874. if e != nil {
  875. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  876. }
  877. return
  878. }
  879. // 英文研报
  880. if reportType == report_approve.FlowReportTypeEnglish {
  881. e := models.UpdateEnglishReportsStateByCond(classifyFirstId, classifySecondId, oldState, State)
  882. if e != nil {
  883. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  884. }
  885. return
  886. }
  887. // 智能研报
  888. if reportType == report_approve.FlowReportTypeSmart {
  889. e := smart_report.UpdateSmartReportsStateByCond(classifyFirstId, classifySecondId, oldState, State)
  890. if e != nil {
  891. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  892. }
  893. return
  894. }
  895. return
  896. }
  897. // ConfigChangeResetReportState 审批配置变化-重置报告的初始状态
  898. func ConfigChangeResetReportState(changeType string) (err error) {
  899. defer func() {
  900. if err != nil {
  901. tips := fmt.Sprintf("审批配置变化-重置报告初始状态失败, ErrMsg: %s", err.Error())
  902. utils.FileLog.Info(tips)
  903. go alarm_msg.SendAlarmMsg(tips, 2)
  904. }
  905. }()
  906. // 关闭审批-待提交->未发布
  907. if changeType == "" {
  908. e := models.UpdateReportsStateByCond(0, 0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  909. if e != nil {
  910. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  911. }
  912. e = models.UpdateEnglishReportsStateByCond(0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  913. if e != nil {
  914. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  915. }
  916. e = smart_report.UpdateSmartReportsStateByCond(0, 0, models.ReportStateWaitSubmit, models.ReportStateUnpublished)
  917. if e != nil {
  918. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  919. }
  920. return
  921. }
  922. // 开启内部审批-未发布->部分待提交
  923. if changeType == models.BusinessConfReportApproveTypeEta {
  924. flowOb := new(report_approve.ReportApproveFlow)
  925. flows, e := flowOb.GetItemsByCondition(``, make([]interface{}, 0), []string{}, "")
  926. if e != nil {
  927. err = fmt.Errorf("GetApproveFlows err: %s", e.Error())
  928. return
  929. }
  930. reportSecondIds, englishSecondIds, smartSecondIds := make([]int, 0), make([]int, 0), make([]int, 0)
  931. for _, v := range flows {
  932. if v.ReportType == report_approve.FlowReportTypeChinese {
  933. reportSecondIds = append(reportSecondIds, v.ClassifySecondId)
  934. continue
  935. }
  936. if v.ReportType == report_approve.FlowReportTypeEnglish {
  937. englishSecondIds = append(englishSecondIds, v.ClassifySecondId)
  938. continue
  939. }
  940. if v.ReportType == report_approve.FlowReportTypeSmart {
  941. smartSecondIds = append(smartSecondIds, v.ClassifySecondId)
  942. }
  943. }
  944. if len(reportSecondIds) > 0 {
  945. e = models.UpdateReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, reportSecondIds)
  946. if e != nil {
  947. err = fmt.Errorf("UpdateReportsStateBySecondIds err: %s", e.Error())
  948. return
  949. }
  950. }
  951. if len(englishSecondIds) > 0 {
  952. e = models.UpdateEnglishReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, englishSecondIds)
  953. if e != nil {
  954. err = fmt.Errorf("UpdateEnglishReportsStateBySecondIds err: %s", e.Error())
  955. return
  956. }
  957. }
  958. if len(smartSecondIds) > 0 {
  959. e = smart_report.UpdateSmartReportsStateBySecondIds(models.ReportStateUnpublished, models.ReportStateWaitSubmit, smartSecondIds)
  960. if e != nil {
  961. err = fmt.Errorf("UpdateSmartReportsStateBySecondIds err: %s", e.Error())
  962. return
  963. }
  964. }
  965. return
  966. }
  967. // 开启第三方审批->未发布->待提交
  968. if changeType == models.BusinessConfReportApproveTypeOther {
  969. e := models.UpdateReportsStateByCond(0, 0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  970. if e != nil {
  971. err = fmt.Errorf("UpdateReportsStateByCond err: %s", e.Error())
  972. }
  973. e = models.UpdateEnglishReportsStateByCond(0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  974. if e != nil {
  975. err = fmt.Errorf("UpdateEnglishReportsStateByCond err: %s", e.Error())
  976. }
  977. e = smart_report.UpdateSmartReportsStateByCond(0, 0, models.ReportStateUnpublished, models.ReportStateWaitSubmit)
  978. if e != nil {
  979. err = fmt.Errorf("UpdateSmartReportsStateByCond err: %s", e.Error())
  980. }
  981. return
  982. }
  983. return
  984. }