approval.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. package controllers
  2. import (
  3. "encoding/json"
  4. approval2 "hongze/hongze_mobile_admin/models/request/approval"
  5. "hongze/hongze_mobile_admin/models/response/approval"
  6. "hongze/hongze_mobile_admin/models/tables/admin"
  7. "hongze/hongze_mobile_admin/models/tables/company_approval"
  8. "hongze/hongze_mobile_admin/models/tables/company_contract"
  9. "hongze/hongze_mobile_admin/models/tables/company_delay_permission"
  10. "hongze/hongze_mobile_admin/models/tables/company_product"
  11. "hongze/hongze_mobile_admin/models/tables/company_product_log"
  12. "hongze/hongze_mobile_admin/models/tables/company_report_permission"
  13. services "hongze/hongze_mobile_admin/service"
  14. "hongze/hongze_mobile_admin/utils"
  15. "rdluck_tools/paging"
  16. "strconv"
  17. "time"
  18. )
  19. type ApprovalCommon struct {
  20. BaseAuth
  21. }
  22. // @Title 获取审批列表接口
  23. // @Description 获取审批列表接口
  24. // @Param PageSize query int true "每页数据条数"
  25. // @Param CurrentIndex query int true "当前页页码,从1开始"
  26. // @Param Status query string true "状态:'全部','待审批','已审批','驳回','已撤回'"
  27. // @Param KeyWord query string true "搜索关键词"
  28. // @Success 200 {object} approval.CompanyApprovalListResp
  29. // @router /list [get]
  30. func (this *ApprovalCommon) List() {
  31. sysUser := this.AdminWx
  32. roleTypeCode := sysUser.RoleTypeCode
  33. pageSize, _ := this.GetInt("PageSize")
  34. currentIndex, _ := this.GetInt("CurrentIndex")
  35. status := this.GetString("Status")
  36. keyWord := this.GetString("KeyWord")
  37. var startSize int
  38. if pageSize <= 0 {
  39. pageSize = utils.PageSize20
  40. }
  41. if currentIndex <= 0 {
  42. currentIndex = 1
  43. }
  44. startSize = paging.StartIndex(currentIndex, pageSize)
  45. var condition string
  46. var pars []interface{}
  47. if status != "" {
  48. if status == "已审批" {
  49. condition += ` AND c.approve_status IN('已审批','驳回','已撤回') `
  50. } else {
  51. condition += ` AND c.approve_status=? `
  52. pars = append(pars, status)
  53. }
  54. }
  55. if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { //审批
  56. condition += ` AND c.approve_role_type_code=? `
  57. pars = append(pars, roleTypeCode)
  58. } else if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { //销售
  59. condition += ` AND c.apply_user_id=? `
  60. pars = append(pars, sysUser.AdminId)
  61. }
  62. if keyWord != "" {
  63. condition += ` AND (a.company_name LIKE '%` + keyWord + `%' OR a.credit_code LIKE '%` + keyWord + `%') `
  64. }
  65. total, err := company_approval.GetApprovalCount(condition, pars)
  66. if err != nil {
  67. this.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
  68. return
  69. }
  70. list, err := company_approval.GetApprovalList(condition, pars, startSize, pageSize)
  71. if err != nil {
  72. this.FailWithMessage("获取失败", "获取数据失败,Err:"+err.Error())
  73. return
  74. }
  75. listLen := len(list)
  76. for i := 0; i < listLen; i++ {
  77. item := list[i]
  78. if item.FreezeStartDate != "" && item.FreezeEndDate != "" && item.Status == utils.COMPANY_STATUS_FREEZE {
  79. freezeEndDate, _ := time.Parse(utils.FormatDate, item.FreezeEndDate)
  80. if time.Now().Before(freezeEndDate) {
  81. expireDays := freezeEndDate.Sub(time.Now()).Hours() / 24
  82. list[i].FreezeExpireDays = int(expireDays)
  83. }
  84. }
  85. if item.StartDate != "" && item.EndDate != "" {
  86. endDate, _ := time.Parse(utils.FormatDate, item.EndDate)
  87. if time.Now().Before(endDate) {
  88. expireDays := endDate.Sub(time.Now()).Hours() / 24
  89. list[i].ExpireDay = int(expireDays)
  90. }
  91. }
  92. approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
  93. if err != nil && err.Error() != utils.ErrNoRow() {
  94. this.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
  95. return
  96. }
  97. list[i].ApprovalCount = approvalCount
  98. if item.ApplyMethod == 3 {
  99. delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
  100. if err != nil && err.Error() != utils.ErrNoRow() {
  101. this.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
  102. return
  103. }
  104. list[i].DelayPermission = delayPermission
  105. }
  106. }
  107. page := paging.GetPaging(currentIndex, pageSize, total)
  108. resp := approval.CompanyApprovalListResp{
  109. Paging: page,
  110. List: list,
  111. }
  112. this.OkDetailed(resp, "获取成功")
  113. }
  114. // @Title 获取审批单中的权限列表
  115. // @Description 获取审批单中的权限列表接口
  116. // @Param ApprovalId query int true "审批单id"
  117. // @Success 200 {object} approval.CompanyPermissionResp
  118. // @router /getApprovalPermissionList [get]
  119. func (this *ApprovalCommon) GetApprovalPermissionList() {
  120. //this.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
  121. //返回基础参数
  122. resp := new(approval.CompanyPermissionResp)
  123. //获取审批单信息
  124. approvalId, _ := this.GetInt("ApprovalId")
  125. if approvalId <= 0 {
  126. this.FailWithMessage("审批单参数异常", "提交审批单参数异常")
  127. return
  128. }
  129. approvalInfo, err := company_approval.GetCompanyApprovalByApprovalId(approvalId)
  130. if err != nil {
  131. this.FailWithMessage("获取失败", "获取审批单数据失败,Err:"+err.Error())
  132. return
  133. }
  134. //子权限切片集合
  135. var permissionClassifyArr []string
  136. if approvalInfo.ProductId == 1 {
  137. for _, v := range utils.PermissionFiccClassifyArr {
  138. permissionClassifyArr = append(permissionClassifyArr, v)
  139. }
  140. } else {
  141. permissionClassifyArr = append(permissionClassifyArr, "权益")
  142. }
  143. //获取需要审批的权限
  144. delayPermissionList, err := company_delay_permission.GetDelayPermissionItems(approvalInfo.CompanyId, approvalInfo.CompanyApprovalId)
  145. if err != nil && err.Error() != utils.ErrNoRow() {
  146. this.FailWithMessage("获取失败", "获取审批权限失败,Err:"+err.Error())
  147. return
  148. }
  149. delayPermissionIdMap := make(map[int]int)
  150. for _, delayPermission := range delayPermissionList {
  151. delayPermissionIdMap[delayPermission.ChartPermissionId] = 0
  152. }
  153. //遍历获取
  154. for _, v := range permissionClassifyArr {
  155. checkList := make([]int, 0)
  156. plist := new(company_report_permission.PermissionLookList)
  157. items, err := company_report_permission.GetPermissionLookItems(approvalInfo.ProductId, v)
  158. if err != nil {
  159. this.FailWithMessage("获取失败", "获取权限信息失败,Err:"+err.Error())
  160. return
  161. }
  162. for _, n := range items {
  163. if _, ok := delayPermissionIdMap[n.ChartPermissionId]; ok {
  164. checkList = append(checkList, n.ChartPermissionId)
  165. }
  166. }
  167. plist.Items = items
  168. plist.ClassifyName = v
  169. plist.CheckList = checkList
  170. if approvalInfo.ProductId == 1 {
  171. resp.FiccPermissionList = append(resp.FiccPermissionList, plist)
  172. } else {
  173. resp.PermissionList = append(resp.PermissionList, plist)
  174. }
  175. }
  176. this.OkDetailed(resp, "获取成功")
  177. }
  178. // @Title 审批
  179. // @Description 审批接口
  180. // @Param request body company.CompanyApplyApproveReq true "type json string"
  181. // @Success Ret=200 审批成功
  182. // @router /approval/approve [post]
  183. func (this *ApprovalCommon) ApplyApprove() {
  184. sysUser := this.AdminWx
  185. var req approval2.CompanyApplyApproveReq
  186. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  187. if err != nil {
  188. this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  189. return
  190. }
  191. roleTypeCode := sysUser.RoleTypeCode
  192. productId := services.GetProductId(roleTypeCode)
  193. if productId == 0 {
  194. this.FailWithMessage("参数错误", "参数解析失败,Err:"+"客户类型为:"+roleTypeCode)
  195. return
  196. }
  197. if req.CompanyId <= 0 {
  198. this.FailWithMessage("参数错误", "客户Id小于等于0")
  199. return
  200. }
  201. if req.Status != 1 && req.Status != 2 {
  202. this.FailWithMessage("参数错误", "审批状态Id小于等于0")
  203. return
  204. }
  205. companyProduct, err := company_product.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  206. if err != nil {
  207. this.FailWithMessage("获取信息失败", "获取信息失败,Err:"+err.Error())
  208. return
  209. }
  210. if companyProduct == nil {
  211. this.FailWithMessage("获取审批信息失败", "获取信息失败,Err:"+err.Error())
  212. return
  213. }
  214. approvalItem, err := company_approval.GetCompanyApprovalById(req.CompanyId, productId)
  215. if err != nil {
  216. if err.Error() == utils.ErrNoRow() {
  217. this.FailWithMessage("订单已审批,请刷新页面查看最新状态", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  218. } else {
  219. this.FailWithMessage("获取信息失败", "获取信息失败,Err:"+err.Error())
  220. }
  221. return
  222. }
  223. if approvalItem == nil {
  224. this.FailWithMessage("订单已审批,请刷新页面查看最新状态", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  225. return
  226. }
  227. if approvalItem.ApproveRoleTypeCode != roleTypeCode {
  228. this.FailWithMessage("您无权审批", "ApproveRoleTypeCode:"+approvalItem.ApproveRoleTypeCode+";roleTypeCode:"+roleTypeCode)
  229. return
  230. }
  231. var approveStatus, approveContent string
  232. if req.Status == 1 { //通过
  233. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新
  234. if approvalItem.ApplyMethod == 1 { //试用转正式
  235. //获取合同信息
  236. contract, err := company_contract.GetCompanyContractDetail(req.CompanyId, productId, req.CompanyContractId)
  237. if err != nil {
  238. this.FailWithMessage("待审批信息不存在", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId)+";Err:"+err.Error())
  239. return
  240. }
  241. if contract == nil {
  242. this.FailWithMessage("待审批信息不存在", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  243. return
  244. }
  245. err = company_approval.TryOutToFormal(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, contract.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
  246. if err != nil {
  247. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  248. return
  249. }
  250. } else if approvalItem.ApplyMethod == 2 { //冻结->试用
  251. err = company_approval.FreezeToTryOut(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
  252. if err != nil {
  253. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  254. return
  255. }
  256. } else if approvalItem.ApplyMethod == 3 { //试用延期
  257. err = company_approval.TryOutDelay(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, sysUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
  258. if err != nil {
  259. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  260. return
  261. }
  262. } else if approvalItem.ApplyMethod == 4 { //原销售申请领取流失客户
  263. err = company_approval.ApplyReceive(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
  264. if err != nil {
  265. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  266. return
  267. }
  268. } else if approvalItem.ApplyMethod == 5 { //正式客户申请服务更新
  269. //获取合同信息
  270. contract, err := company_contract.GetCompanyContractDetail(req.CompanyId, productId, req.CompanyContractId)
  271. if err != nil {
  272. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  273. return
  274. }
  275. if contract == nil {
  276. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  277. return
  278. }
  279. err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
  280. if err != nil {
  281. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  282. return
  283. }
  284. } else {
  285. this.FailWithMessage("审批失败", "无效的审批状态,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+
  286. strconv.Itoa(productId)+";ApplyMethod:"+strconv.Itoa(approvalItem.ApplyMethod)+" ApproveStatus;"+approvalItem.ApproveStatus)
  287. return
  288. }
  289. approveContent = "审批通过"
  290. } else { //拒绝
  291. approveStatus = "驳回"
  292. err = company_approval.ApproveRefuse(req.CompanyId, productId, approveStatus, req.Remark)
  293. approveContent = "审批驳回"
  294. if err != nil {
  295. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  296. return
  297. }
  298. }
  299. //新增客户产品日志
  300. {
  301. productLog := new(company_product_log.CompanyProductLog)
  302. productLog.CompanyProductId = companyProduct.CompanyProductId
  303. productLog.CompanyId = companyProduct.CompanyId
  304. productLog.ProductId = companyProduct.ProductId
  305. productLog.ProductName = companyProduct.ProductName
  306. productLog.CompanyName = companyProduct.CompanyName
  307. productLog.CompanyName = companyProduct.CompanyName
  308. productLog.Source = companyProduct.Source
  309. productLog.Reasons = companyProduct.Reasons
  310. productLog.Status = companyProduct.Status
  311. productLog.IndustryId = companyProduct.IndustryId
  312. productLog.IndustryName = companyProduct.IndustryName
  313. productLog.SellerId = companyProduct.SellerId
  314. productLog.SellerName = companyProduct.SellerName
  315. productLog.GroupId = companyProduct.GroupId
  316. productLog.DepartmentId = companyProduct.DepartmentId
  317. productLog.IsSuspend = companyProduct.IsSuspend
  318. productLog.SuspendTime = companyProduct.SuspendTime
  319. productLog.ApproveStatus = companyProduct.ApproveStatus
  320. productLog.FreezeTime = companyProduct.FreezeTime
  321. productLog.Remark = companyProduct.Remark
  322. productLog.StartDate = companyProduct.StartDate
  323. productLog.EndDate = companyProduct.EndDate
  324. productLog.CreateTime = companyProduct.CreateTime
  325. productLog.ModifyTime = companyProduct.ModifyTime
  326. productLog.LoseReason = companyProduct.LoseReason
  327. productLog.LossTime = companyProduct.LossTime
  328. productLog.LogType = "modify"
  329. productLog.LogCreateTime = time.Now()
  330. productLog.AdminId = this.AdminWx.AdminId
  331. go company_product_log.AddCompanyProductLog(productLog)
  332. }
  333. //新增操作记录
  334. {
  335. remark := "审批"
  336. operation := "approve"
  337. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, sysUser.AdminId, companyProduct.CompanyName,
  338. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, sysUser.RealName, req.Remark, companyProduct.Status)
  339. }
  340. //待办通知
  341. {
  342. content := companyProduct.CompanyName + " " + approvalItem.ApproveContent + approveContent
  343. approvalSysUser, _ := admin.GetAdminById(approvalItem.ApplyUserId)
  344. if sysUser != nil {
  345. go services.AddCompanyApprovalMessage(sysUser.AdminId, approvalItem.ApplyUserId, req.CompanyId, approvalItem.CompanyApprovalId, 2, companyProduct.CompanyName, content, content, approvalSysUser.Mobile)
  346. }
  347. }
  348. this.OkWithMessage("审批成功")
  349. }
  350. //// @Title 审批列表删除
  351. //// @Description 审批列表删除接口
  352. //// @Param request body company.CompanyApplyDeleteReq true "type json string"
  353. //// @Success Ret=200 删除成功
  354. //// @router /approval/delete [post]
  355. //func (this *CompanyApprovalController) ApplyDelete() {
  356. // br := new(models.BaseResponse).Init()
  357. // defer func() {
  358. // this.Data["json"] = br
  359. // this.ServeJSON()
  360. // }()
  361. // sysUser := this.SysUser
  362. // if sysUser == nil {
  363. // br.Msg = "请登录"
  364. // br.ErrMsg = "请登录,SysUser Is Empty"
  365. // br.Ret = 408
  366. // return
  367. // }
  368. // var req company.CompanyApplyDeleteReq
  369. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  370. // if err != nil {
  371. // br.Msg = "参数解析异常!"
  372. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  373. // return
  374. // }
  375. // roleTypeCode := sysUser.RoleTypeCode
  376. // productId := services.GetProductId(roleTypeCode)
  377. // if productId == 0 {
  378. // br.Msg = "参数错误"
  379. // br.ErrMsg = "客户类型为:" + roleTypeCode
  380. // return
  381. // }
  382. // if req.CompanyId <= 0 {
  383. // br.Msg = "参数错误"
  384. // br.ErrMsg = "客户Id小于等于0:"
  385. // return
  386. // }
  387. // companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  388. // if err != nil {
  389. // br.Msg = "获取信息失败"
  390. // br.ErrMsg = "获取信息失败,Err:" + err.Error()
  391. // return
  392. // }
  393. // if companyProduct == nil {
  394. // br.Msg = "获取信息失败"
  395. // br.ErrMsg = "获取审批信息失败,Err:" + err.Error()
  396. // return
  397. // }
  398. // approvalItem, err := company.GetCompanyApprovalByApprovalId(req.CompanyApprovalId)
  399. // if err != nil {
  400. // if err.Error() == utils.ErrNoRow() {
  401. // br.Msg = "待审批信息不存在"
  402. // br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  403. // return
  404. // }
  405. // br.Msg = "获取信息失败"
  406. // br.ErrMsg = "获取信息失败,Err:" + err.Error()
  407. // return
  408. // }
  409. // if approvalItem == nil {
  410. // br.Msg = "待审批信息不存在"
  411. // br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  412. // return
  413. // }
  414. // if approvalItem.ApproveStatus != "待审批" && approvalItem.ApproveStatus != "已撤回" {
  415. // br.Msg = "审批状态为:" + approvalItem.ApproveStatus + ";不可删除"
  416. // br.ErrMsg = "审批状态为:" + approvalItem.ApproveStatus + ";不可删除" + ";CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  417. // return
  418. // }
  419. // //删除
  420. // err = company.ApplyDelete(req.CompanyId, req.CompanyApprovalId, approvalItem.ProductId)
  421. // if err != nil {
  422. // br.Msg = "删除失败"
  423. // br.ErrMsg = "删除失败,Err:" + err.Error()
  424. // return
  425. // }
  426. // //新增操作记录
  427. // {
  428. // remark := "删除审批申请"
  429. // operation := "approve_delete"
  430. // services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, sysUser.AdminId, companyProduct.CompanyName,
  431. // companyProduct.ProductName, sysUser.RealName, remark, operation, remark, sysUser.RealName, "", companyProduct.Status)
  432. // }
  433. // br.Ret = 200
  434. // br.Success = true
  435. // br.Msg = "删除成功"
  436. //}