approval.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. approval2 "hongze/hongze_mobile_admin/models/request/approval"
  6. "hongze/hongze_mobile_admin/models/response/approval"
  7. "hongze/hongze_mobile_admin/models/tables/admin"
  8. "hongze/hongze_mobile_admin/models/tables/company_approval"
  9. "hongze/hongze_mobile_admin/models/tables/company_contract"
  10. "hongze/hongze_mobile_admin/models/tables/company_delay_permission"
  11. "hongze/hongze_mobile_admin/models/tables/company_product"
  12. "hongze/hongze_mobile_admin/models/tables/company_product_log"
  13. "hongze/hongze_mobile_admin/models/tables/company_report_permission"
  14. "hongze/hongze_mobile_admin/models/tables/contract_approval_record"
  15. "hongze/hongze_mobile_admin/services"
  16. "hongze/hongze_mobile_admin/services/flow"
  17. "hongze/hongze_mobile_admin/utils"
  18. "rdluck_tools/paging"
  19. "strconv"
  20. "time"
  21. )
  22. //客户审批列表
  23. type ApprovalCommon struct {
  24. BaseAuth
  25. }
  26. // @Title 获取审批列表接口
  27. // @Description 获取审批列表接口
  28. // @Param PageSize query int true "每页数据条数"
  29. // @Param CurrentIndex query int true "当前页页码,从1开始"
  30. // @Param Status query string true "状态:'待审批','已审批','驳回','已撤回'"
  31. // @Param KeyWord query string true "搜索关键词"
  32. // @Param Keyword query string true "搜索关键词"
  33. // @Success 200 {object} approval.CompanyApprovalListResp
  34. // @router /list [get]
  35. func (this *ApprovalCommon) List() {
  36. sysUser := this.AdminWx
  37. roleTypeCode := sysUser.RoleTypeCode
  38. pageSize, _ := this.GetInt("PageSize")
  39. currentIndex, _ := this.GetInt("CurrentIndex")
  40. status := this.GetString("Status")
  41. keyword := this.GetString("Keyword")
  42. keyWord := this.GetString("KeyWord")
  43. if keyword == "" {
  44. keyword = keyWord
  45. }
  46. var startSize int
  47. if pageSize <= 0 {
  48. pageSize = utils.PageSize20
  49. }
  50. if currentIndex <= 0 {
  51. currentIndex = 1
  52. }
  53. startSize = paging.StartIndex(currentIndex, pageSize)
  54. var condition string
  55. var pars []interface{}
  56. if status != "" {
  57. if status == "已审批" {
  58. condition += ` AND c.approve_status IN('已审批','驳回') `
  59. } else {
  60. condition += ` AND c.approve_status=? `
  61. pars = append(pars, status)
  62. }
  63. }
  64. if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { //审批
  65. condition += ` AND c.approve_role_type_code=? `
  66. pars = append(pars, roleTypeCode)
  67. } else if roleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_COMPLIANCE { //超管或者合规
  68. } else { //销售
  69. condition += ` AND c.apply_user_id=? `
  70. pars = append(pars, sysUser.AdminId)
  71. }
  72. if keyword != "" {
  73. condition += ` AND (a.company_name LIKE '%` + keyword + `%' OR a.credit_code LIKE '%` + keyword + `%') `
  74. }
  75. total, err := company_approval.GetApprovalCount(condition, pars)
  76. if err != nil {
  77. this.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
  78. return
  79. }
  80. list, err := company_approval.GetApprovalList(condition, pars, startSize, pageSize)
  81. if err != nil {
  82. this.FailWithMessage("获取失败", "获取数据失败,Err:"+err.Error())
  83. return
  84. }
  85. listLen := len(list)
  86. for i := 0; i < listLen; i++ {
  87. item := list[i]
  88. if item.FreezeStartDate != "" && item.FreezeEndDate != "" && item.Status == utils.COMPANY_STATUS_FREEZE {
  89. freezeEndDate, _ := time.Parse(utils.FormatDate, item.FreezeEndDate)
  90. if time.Now().Before(freezeEndDate) {
  91. expireDays := freezeEndDate.Sub(time.Now()).Hours() / 24
  92. list[i].FreezeExpireDays = int(expireDays)
  93. }
  94. }
  95. if item.StartDate != "" && item.EndDate != "" {
  96. endDate, _ := time.Parse(utils.FormatDate, item.EndDate)
  97. if time.Now().Before(endDate) {
  98. expireDays := endDate.Sub(time.Now()).Hours() / 24
  99. list[i].ExpireDay = int(expireDays)
  100. }
  101. }
  102. approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
  103. if err != nil && err.Error() != utils.ErrNoRow() {
  104. this.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
  105. return
  106. }
  107. list[i].ApprovalCount = approvalCount
  108. if item.ApplyMethod == 3 {
  109. delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
  110. if err != nil && err.Error() != utils.ErrNoRow() {
  111. this.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
  112. return
  113. }
  114. list[i].DelayPermission = delayPermission
  115. }
  116. if item.ApproveRoleTypeCode == roleTypeCode {
  117. list[i].OpButton = true
  118. }
  119. }
  120. page := paging.GetPaging(currentIndex, pageSize, total)
  121. resp := approval.CompanyApprovalListResp{
  122. Paging: page,
  123. List: list,
  124. }
  125. this.OkDetailed(resp, "获取成功")
  126. }
  127. // @Title 获取审批单详情接口
  128. // @Description 获取审批单详情接口
  129. // @Param ApprovalId query int true "审批单id"
  130. // @Success 200 {object} approval.CompanyApprovalDetailResp
  131. // @router /detail [get]
  132. func (this *ApprovalCommon) Detail() {
  133. sysUser := this.AdminWx
  134. roleTypeCode := sysUser.RoleTypeCode
  135. companyApprovalId, _ := this.GetInt("ApprovalId")
  136. var condition string
  137. var pars []interface{}
  138. if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN { //审批
  139. condition += ` AND c.approve_role_type_code=? `
  140. pars = append(pars, roleTypeCode)
  141. } else if roleTypeCode == utils.ROLE_TYPE_CODE_FICC_SELLER || roleTypeCode == utils.ROLE_TYPE_CODE_RAI_SELLER { //销售
  142. condition += ` AND c.apply_user_id=? `
  143. pars = append(pars, sysUser.AdminId)
  144. }
  145. item, err := company_approval.GetApprovalListByApprovalId(condition, pars, companyApprovalId)
  146. if err != nil {
  147. this.FailWithMessage("获取失败", "获取数据失败,Err:"+err.Error())
  148. return
  149. }
  150. if item.FreezeStartDate != "" && item.FreezeEndDate != "" && item.Status == utils.COMPANY_STATUS_FREEZE {
  151. freezeEndDate, _ := time.Parse(utils.FormatDate, item.FreezeEndDate)
  152. if time.Now().Before(freezeEndDate) {
  153. expireDays := freezeEndDate.Sub(time.Now()).Hours() / 24
  154. item.FreezeExpireDays = int(expireDays)
  155. }
  156. }
  157. if item.StartDate != "" && item.EndDate != "" {
  158. endDate, _ := time.Parse(utils.FormatDate, item.EndDate)
  159. if time.Now().Before(endDate) {
  160. expireDays := endDate.Sub(time.Now()).Hours() / 24
  161. item.ExpireDay = int(expireDays)
  162. }
  163. }
  164. approvalCount, err := company_approval.GetCompanyApprovalCount(item.CompanyId, item.ProductId)
  165. if err != nil && err.Error() != utils.ErrNoRow() {
  166. this.FailWithMessage("获取失败", "获取延期审批次数失败,Err:"+err.Error())
  167. return
  168. }
  169. item.ApprovalCount = approvalCount
  170. //if item.ApplyMethod == 3 {
  171. // delayPermission, err := company_delay_permission.GetApplyDelayPermission(item.CompanyApprovalId)
  172. // if err != nil && err.Error() != utils.ErrNoRow() {
  173. // this.FailWithMessage("获取失败", "获取延期审批权限失败,Err:"+err.Error())
  174. // return
  175. // }
  176. // item.DelayPermission = delayPermission
  177. //}
  178. if item.ApproveRoleTypeCode == roleTypeCode {
  179. item.OpButton = true
  180. }
  181. resp := approval.CompanyApprovalDetailResp{
  182. CompanyApprovalDetail: item,
  183. }
  184. //获取权限列表
  185. //子权限切片集合
  186. var permissionClassifyArr []string
  187. if item.ProductId == 1 {
  188. for _, v := range utils.PermissionFiccClassifyArr {
  189. permissionClassifyArr = append(permissionClassifyArr, v)
  190. }
  191. } else {
  192. permissionClassifyArr = append(permissionClassifyArr, "权益")
  193. }
  194. //获取需要审批的权限
  195. delayPermissionList, err := company_delay_permission.GetDelayPermissionItems(item.CompanyId, item.CompanyApprovalId)
  196. if err != nil && err.Error() != utils.ErrNoRow() {
  197. this.FailWithMessage("获取失败", "获取审批权限失败,Err:"+err.Error())
  198. return
  199. }
  200. delayPermissionIdMap := make(map[int]int)
  201. for _, delayPermission := range delayPermissionList {
  202. delayPermissionIdMap[delayPermission.ChartPermissionId] = 0
  203. }
  204. //遍历获取
  205. for _, v := range permissionClassifyArr {
  206. checkList := make([]int, 0)
  207. plist := new(company_report_permission.PermissionLookList)
  208. items, err := company_report_permission.GetPermissionLookItems(item.ProductId, v)
  209. if err != nil {
  210. this.FailWithMessage("获取失败", "获取权限信息失败,Err:"+err.Error())
  211. return
  212. }
  213. for _, n := range items {
  214. if _, ok := delayPermissionIdMap[n.ChartPermissionId]; ok {
  215. checkList = append(checkList, n.ChartPermissionId)
  216. }
  217. }
  218. plist.Items = items
  219. plist.ClassifyName = v
  220. plist.CheckList = checkList
  221. if item.ProductId == 1 {
  222. resp.FiccPermissionList = append(resp.FiccPermissionList, plist)
  223. } else {
  224. resp.PermissionList = append(resp.PermissionList, plist)
  225. }
  226. }
  227. //审批流
  228. flowId := 1
  229. if item.ProductId == 2 {
  230. flowId = 2
  231. }
  232. flowItem, err := flow.GetApprovalFlow(flowId)
  233. if err != nil {
  234. this.FailWithMessage("获取失败", "获取数据失败,Err:"+err.Error())
  235. return
  236. }
  237. approveTime, err := time.Parse(utils.FormatDateTime, item.ApproveTime)
  238. if err != nil {
  239. this.FailWithMessage("获取失败", "审批时间转换失败,Err:"+err.Error())
  240. return
  241. }
  242. approvalTime, err := time.Parse(utils.FormatDateTime, item.ApprovalTime)
  243. if err != nil {
  244. this.FailWithMessage("获取失败", "发起时间转换失败,Err:"+err.Error())
  245. return
  246. }
  247. //当前审批流程id
  248. flowNodeListResp := make([][]contract_approval_record.ContractApprovalRecord, 0)
  249. for _, node := range flowItem.NodeList {
  250. flowNodeResp := make([]contract_approval_record.ContractApprovalRecord, 0)
  251. for _, user := range node.UserList {
  252. approveStatus := item.ApproveStatus
  253. if approveStatus == "驳回" {
  254. approveStatus = "已驳回"
  255. }
  256. approvalRecord := contract_approval_record.ContractApprovalRecord{
  257. //ContractApprovalRecordId int `orm:"column(contract_approval_record_id);pk"`
  258. //ContractApprovalId int `orm:"column(contract_approval_id)";description:"审批单id"`
  259. Status: approveStatus,
  260. ApproveRemark: item.ApproveRemark,
  261. ApproveRoleTypeCode: user.RoleTypeCode,
  262. ApproveUserId: user.AdminId,
  263. ApproveUserName: user.Name,
  264. NodeId: node.NodeId,
  265. NodeType: node.NodeType,
  266. //PrevNodeId int `description:"上级节点id"`
  267. //NextNodeId int `description:"下级节点id"`
  268. AuditType: node.AuditType,
  269. ApproveTime: approveTime,
  270. //ModifyTime time.Time `description:"发起申请时间"`
  271. CreateTime: approvalTime,
  272. }
  273. flowNodeResp = append(flowNodeResp, approvalRecord)
  274. if user.AdminId == item.ApproveUserId {
  275. resp.CompanyApprovalDetail.CurrNodeId = node.NodeId
  276. }
  277. }
  278. flowNodeListResp = append(flowNodeListResp, flowNodeResp)
  279. }
  280. resp.FlowNodeList = flowNodeListResp
  281. this.OkDetailed(resp, "获取成功")
  282. }
  283. // @Title 获取审批单中的权限列表
  284. // @Description 获取审批单中的权限列表接口
  285. // @Param ApprovalId query int true "审批单id"
  286. // @Success 200 {object} approval.CompanyPermissionResp
  287. // @router /getApprovalPermissionList [get]
  288. func (this *ApprovalCommon) GetApprovalPermissionList() {
  289. //this.FailWithMessage("获取失败", "获取数据总数失败,Err:"+err.Error())
  290. //返回基础参数
  291. resp := new(approval.CompanyPermissionResp)
  292. //获取审批单信息
  293. approvalId, _ := this.GetInt("ApprovalId")
  294. if approvalId <= 0 {
  295. this.FailWithMessage("审批单参数异常", "提交审批单参数异常")
  296. return
  297. }
  298. approvalInfo, err := company_approval.GetCompanyApprovalByApprovalId(approvalId)
  299. if err != nil {
  300. this.FailWithMessage("获取失败", "获取审批单数据失败,Err:"+err.Error())
  301. return
  302. }
  303. //子权限切片集合
  304. var permissionClassifyArr []string
  305. if approvalInfo.ProductId == 1 {
  306. for _, v := range utils.PermissionFiccClassifyArr {
  307. permissionClassifyArr = append(permissionClassifyArr, v)
  308. }
  309. } else {
  310. permissionClassifyArr = append(permissionClassifyArr, "权益")
  311. }
  312. //获取需要审批的权限
  313. delayPermissionList, err := company_delay_permission.GetDelayPermissionItems(approvalInfo.CompanyId, approvalInfo.CompanyApprovalId)
  314. if err != nil && err.Error() != utils.ErrNoRow() {
  315. this.FailWithMessage("获取失败", "获取审批权限失败,Err:"+err.Error())
  316. return
  317. }
  318. delayPermissionIdMap := make(map[int]int)
  319. for _, delayPermission := range delayPermissionList {
  320. delayPermissionIdMap[delayPermission.ChartPermissionId] = 0
  321. }
  322. //遍历获取
  323. for _, v := range permissionClassifyArr {
  324. checkList := make([]int, 0)
  325. plist := new(company_report_permission.PermissionLookList)
  326. items, err := company_report_permission.GetPermissionLookItems(approvalInfo.ProductId, v)
  327. if err != nil {
  328. this.FailWithMessage("获取失败", "获取权限信息失败,Err:"+err.Error())
  329. return
  330. }
  331. for _, n := range items {
  332. if _, ok := delayPermissionIdMap[n.ChartPermissionId]; ok {
  333. checkList = append(checkList, n.ChartPermissionId)
  334. }
  335. }
  336. plist.Items = items
  337. plist.ClassifyName = v
  338. plist.CheckList = checkList
  339. if approvalInfo.ProductId == 1 {
  340. resp.FiccPermissionList = append(resp.FiccPermissionList, plist)
  341. } else {
  342. resp.PermissionList = append(resp.PermissionList, plist)
  343. }
  344. }
  345. this.OkDetailed(resp, "获取成功")
  346. }
  347. // @Title 审批
  348. // @Description 审批接口
  349. // @Param request body approval.CompanyApplyApproveReq true "type json string"
  350. // @Success Ret=200 审批成功
  351. // @router /approve [post]
  352. func (this *ApprovalCommon) ApplyApprove() {
  353. sysUser := this.AdminWx
  354. var req approval2.CompanyApplyApproveReq
  355. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  356. if err != nil {
  357. this.FailWithMessage("参数解析异常!", "参数解析失败,Err:"+err.Error())
  358. return
  359. }
  360. roleTypeCode := sysUser.RoleTypeCode
  361. productId := services.GetProductId(roleTypeCode)
  362. if productId == 0 {
  363. this.FailWithMessage("参数错误", "参数解析失败,Err:"+"客户类型为:"+roleTypeCode)
  364. return
  365. }
  366. if req.CompanyId <= 0 {
  367. this.FailWithMessage("参数错误", "客户Id小于等于0")
  368. return
  369. }
  370. if req.Status != 1 && req.Status != 2 {
  371. this.FailWithMessage("参数错误", "审批状态Id小于等于0")
  372. return
  373. }
  374. companyProduct, err := company_product.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  375. if err != nil {
  376. this.FailWithMessage("获取信息失败", "获取信息失败,Err:"+err.Error())
  377. return
  378. }
  379. if companyProduct == nil {
  380. this.FailWithMessage("获取审批信息失败", "获取信息失败,Err:"+err.Error())
  381. return
  382. }
  383. approvalItem, err := company_approval.GetCompanyApprovalByCompanyId(req.CompanyId, productId)
  384. if err != nil {
  385. if err.Error() == utils.ErrNoRow() {
  386. this.FailWithMessage("订单已审批,请刷新页面查看最新状态", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  387. } else {
  388. this.FailWithMessage("获取信息失败", "获取信息失败,Err:"+err.Error())
  389. }
  390. return
  391. }
  392. if approvalItem == nil {
  393. this.FailWithMessage("订单已审批,请刷新页面查看最新状态", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  394. return
  395. }
  396. if approvalItem.ApproveRoleTypeCode != roleTypeCode {
  397. this.FailWithMessage("您无权审批", "ApproveRoleTypeCode:"+approvalItem.ApproveRoleTypeCode+";roleTypeCode:"+roleTypeCode)
  398. return
  399. }
  400. var approveStatus, approveContent string
  401. if req.Status == 1 { //通过
  402. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新
  403. if approvalItem.ApplyMethod == 1 { //试用转正式
  404. //获取合同信息
  405. contract, err := company_contract.GetCompanyContractDetail(req.CompanyId, productId, req.CompanyContractId)
  406. if err != nil {
  407. this.FailWithMessage("待审批信息不存在", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId)+";Err:"+err.Error())
  408. return
  409. }
  410. if contract == nil {
  411. this.FailWithMessage("待审批信息不存在", "待审批信息不存在,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+strconv.Itoa(productId))
  412. return
  413. }
  414. //格式化合同开始时间
  415. contractStartDate, err := time.Parse(utils.FormatDate, contract.StartDate)
  416. if err != nil {
  417. this.FailWithMessage("审批失败", "合同开始时间转换失败,Err:"+err.Error())
  418. return
  419. }
  420. //格式化合同结束日期
  421. contractEndDate, err := time.Parse(utils.FormatDate, contract.EndDate)
  422. if err != nil {
  423. this.FailWithMessage("审批失败", "合同结束时间转换失败,Err:"+err.Error())
  424. return
  425. }
  426. //格式化 产品中 合同结束日期
  427. //productContractEndDate, err := time.Parse(utils.FormatDate, companyProduct.ContractEndDate)
  428. //if err != nil {
  429. // br.Msg = "审批失败"
  430. // br.ErrMsg = "产品中合同结束时间转换失败,Err:" + err.Error()
  431. // return
  432. //}
  433. //如果合同时间小于等于今天,那么立马执行合同内容
  434. if time.Now().After(contractStartDate) {
  435. err = company_approval.TryOutToFormal(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, contract.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
  436. if err != nil {
  437. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  438. return
  439. }
  440. } else {
  441. err = company_approval.ApplyApproveContract(req.CompanyId, productId, approvalItem.CompanyApprovalId, contract.CompanyContractId)
  442. if err != nil {
  443. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  444. return
  445. }
  446. }
  447. //如果合同中的结束日期大于产品中的合同结束日期,那么就去修改产品中的合同结束日期
  448. if contractEndDate.After(companyProduct.ContractEndDate) {
  449. companyProduct.ContractEndDate = contractEndDate
  450. cols := make([]string, 0)
  451. cols = append(cols, "ContractEndDate")
  452. _ = companyProduct.Update(cols)
  453. }
  454. } else if approvalItem.ApplyMethod == 2 { //冻结->试用
  455. err = company_approval.FreezeToTryOut(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
  456. if err != nil {
  457. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  458. return
  459. }
  460. } else if approvalItem.ApplyMethod == 3 { //试用延期
  461. err = company_approval.TryOutDelay(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, sysUser.RealName, companyProduct.EndDate, companyProduct.ProductName)
  462. if err != nil {
  463. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  464. return
  465. }
  466. } else if approvalItem.ApplyMethod == 4 { //原销售申请领取流失客户
  467. err = company_approval.ApplyReceive(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, approvalItem.ApplyUserId, sysUser.RealName, companyProduct.ProductName)
  468. if err != nil {
  469. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  470. return
  471. }
  472. } else if approvalItem.ApplyMethod == 5 { //正式客户申请服务更新
  473. //获取合同信息
  474. contract, err := company_contract.GetCompanyContractDetail(req.CompanyId, productId, req.CompanyContractId)
  475. if err != nil {
  476. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  477. return
  478. }
  479. if contract == nil {
  480. this.FailWithMessage("审批失败", "审批失败")
  481. return
  482. }
  483. //格式化合同开始时间
  484. contractStartDate, err := time.Parse(utils.FormatDate, contract.StartDate)
  485. if err != nil {
  486. this.FailWithMessage("审批失败", "合同开始时间转换失败,Err:"+err.Error())
  487. return
  488. }
  489. //格式化合同结束日期
  490. contractEndDate, err := time.Parse(utils.FormatDate, contract.EndDate)
  491. if err != nil {
  492. this.FailWithMessage("审批失败", "合同结束时间转换失败,Err:"+err.Error())
  493. return
  494. }
  495. //格式化 产品中 合同结束日期
  496. //productContractEndDate, err := time.Parse(utils.FormatDate, companyProduct.ContractEndDate)
  497. //if err != nil {
  498. // br.Msg = "审批失败"
  499. // br.ErrMsg = "产品中合同结束时间转换失败,Err:" + err.Error()
  500. // return
  501. //}
  502. //如果合同时间小于等于今天,那么立马执行合同内容
  503. if time.Now().After(contractStartDate) {
  504. err = company_approval.ApplyServiceUpdate(req.CompanyId, productId, sysUser.AdminId, approvalItem.CompanyApprovalId, contract.CompanyContractId, companyProduct.StartDate, contract.EndDate, sysUser.RealName, companyProduct.ProductName)
  505. if err != nil {
  506. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  507. return
  508. }
  509. } else {
  510. err = company_approval.ApplyApproveContract(req.CompanyId, productId, approvalItem.CompanyApprovalId, contract.CompanyContractId)
  511. if err != nil {
  512. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  513. return
  514. }
  515. }
  516. //如果合同中的结束日期大于产品中的合同结束日期,那么就去修改产品中的合同结束日期
  517. if contractEndDate.After(companyProduct.ContractEndDate) {
  518. companyProduct.ContractEndDate = contractEndDate
  519. cols := make([]string, 0)
  520. cols = append(cols, "ContractEndDate")
  521. _ = companyProduct.Update(cols)
  522. }
  523. } else {
  524. this.FailWithMessage("审批失败", "无效的审批状态,CompanyId:"+strconv.Itoa(req.CompanyId)+";productId:"+
  525. strconv.Itoa(productId)+";ApplyMethod:"+strconv.Itoa(approvalItem.ApplyMethod)+" ApproveStatus;"+approvalItem.ApproveStatus)
  526. return
  527. }
  528. approveContent = "审批通过"
  529. } else { //拒绝
  530. if req.Remark == "" {
  531. this.FailWithMessage("请填写驳回理由", "请填写驳回理由")
  532. return
  533. }
  534. approveStatus = "驳回"
  535. err = company_approval.ApproveRefuse(req.CompanyId, productId, approveStatus, req.Remark)
  536. approveContent = "审批驳回"
  537. if err != nil {
  538. this.FailWithMessage("审批失败", "审批失败,Err:"+err.Error())
  539. return
  540. }
  541. }
  542. //新增客户产品日志
  543. {
  544. productLog := new(company_product_log.CompanyProductLog)
  545. productLog.CompanyProductId = companyProduct.CompanyProductId
  546. productLog.CompanyId = companyProduct.CompanyId
  547. productLog.ProductId = companyProduct.ProductId
  548. productLog.ProductName = companyProduct.ProductName
  549. productLog.CompanyName = companyProduct.CompanyName
  550. productLog.CompanyName = companyProduct.CompanyName
  551. productLog.Source = companyProduct.Source
  552. productLog.Reasons = companyProduct.Reasons
  553. productLog.Status = companyProduct.Status
  554. productLog.IndustryId = companyProduct.IndustryId
  555. productLog.IndustryName = companyProduct.IndustryName
  556. productLog.SellerId = companyProduct.SellerId
  557. productLog.SellerName = companyProduct.SellerName
  558. productLog.GroupId = companyProduct.GroupId
  559. productLog.DepartmentId = companyProduct.DepartmentId
  560. productLog.IsSuspend = companyProduct.IsSuspend
  561. productLog.SuspendTime = companyProduct.SuspendTime
  562. productLog.ApproveStatus = companyProduct.ApproveStatus
  563. productLog.FreezeTime = companyProduct.FreezeTime
  564. productLog.Remark = companyProduct.Remark
  565. productLog.StartDate = companyProduct.StartDate
  566. productLog.EndDate = companyProduct.EndDate
  567. productLog.CreateTime = companyProduct.CreateTime
  568. productLog.ModifyTime = companyProduct.ModifyTime
  569. productLog.LoseReason = companyProduct.LoseReason
  570. productLog.LossTime = companyProduct.LossTime
  571. productLog.LogType = "modify"
  572. productLog.LogCreateTime = time.Now()
  573. productLog.AdminId = this.AdminWx.AdminId
  574. go company_product_log.AddCompanyProductLog(productLog)
  575. }
  576. //新增操作记录
  577. {
  578. remark := "审批"
  579. operation := "approve"
  580. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, sysUser.AdminId, companyProduct.CompanyName,
  581. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, sysUser.RealName, req.Remark, companyProduct.Status)
  582. }
  583. //待办通知
  584. {
  585. content := companyProduct.CompanyName + " " + approvalItem.ApproveContent + approveContent
  586. approvalSysUser, _ := admin.GetAdminById(approvalItem.ApplyUserId)
  587. if sysUser != nil {
  588. approvalStatus := 1
  589. if req.Status == 1 {
  590. approvalStatus = 2
  591. } else {
  592. approvalStatus = 3
  593. }
  594. go services.AddCompanyApprovalMessage(sysUser.AdminId, approvalItem.ApplyUserId, req.CompanyId, approvalItem.CompanyApprovalId, 2, 1, approvalStatus, companyProduct.CompanyName, content, content, approvalSysUser.Mobile)
  595. }
  596. }
  597. this.OkWithMessage("审批操作成功")
  598. }
  599. // @Title 获取审批流详情接口
  600. // @Description 获取审批流详情接口
  601. // @Param FlowId query int true "审批流程id;1:ficc客户审批;2:权益客户审批;3:ficc合同审批,4:权益合同审批,5:用印审批(合同章),6:用印审批(公章、法人章)"
  602. // @Success 200 {object} approval_flow.ApprovalFlowItem
  603. // @router /flowDetail [get]
  604. func (this *ApprovalCommon) GetFlowDetail() {
  605. //sysUser := this.AdminWx
  606. flowId, _ := this.GetInt("FlowId", 0)
  607. if flowId <= 0 {
  608. this.FailWithMessage("参数异常", fmt.Sprint("审批流程id异常,FlowId:", flowId))
  609. return
  610. }
  611. flowItem, err := flow.GetApprovalFlow(flowId)
  612. if err != nil {
  613. this.FailWithMessage("获取失败", "获取数据失败,Err:"+err.Error())
  614. return
  615. }
  616. formatFlowItem, err := flow.FormatApprovalFlow(flowItem)
  617. this.OkDetailed(formatFlowItem, "获取成功")
  618. }
  619. // @Title 根据客户名称获取已存在合同系统中客户名称列表
  620. // @Description 获取合同详情接口
  621. // @Param CompanyName query string true "客户名称"
  622. // @Success 200 {object} []string
  623. // @router /company_list [get]
  624. func (this *ApprovalCommon) CompanyList() {
  625. companyName := this.GetString("CompanyName")
  626. //合同id
  627. if companyName == "" {
  628. this.FailWithMessage("客户名称必传!", "客户名称必传!")
  629. return
  630. }
  631. companyNameList := make([]string, 0)
  632. list, err := company_approval.GetCompanyNameList(this.AdminWx.AdminId, this.AdminWx.RoleTypeCode, companyName)
  633. if err != nil {
  634. this.FailWithMessage("获取客户名称列表失败!", "获取客户名称列表失败,ERR:"+err.Error())
  635. return
  636. }
  637. for _, v := range list {
  638. companyNameList = append(companyNameList, v.CompanyName)
  639. }
  640. this.OkDetailed(companyNameList, "获取成功")
  641. }
  642. //// @Title 审批列表删除
  643. //// @Description 审批列表删除接口
  644. //// @Param request body company.CompanyApplyDeleteReq true "type json string"
  645. //// @Success Ret=200 删除成功
  646. //// @router /approval/delete [post]
  647. //func (this *CompanyApprovalController) ApplyDelete() {
  648. // br := new(models.BaseResponse).Init()
  649. // defer func() {
  650. // this.Data["json"] = br
  651. // this.ServeJSON()
  652. // }()
  653. // sysUser := this.SysUser
  654. // if sysUser == nil {
  655. // br.Msg = "请登录"
  656. // br.ErrMsg = "请登录,SysUser Is Empty"
  657. // br.Ret = 408
  658. // return
  659. // }
  660. // var req company.CompanyApplyDeleteReq
  661. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  662. // if err != nil {
  663. // br.Msg = "参数解析异常!"
  664. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  665. // return
  666. // }
  667. // roleTypeCode := sysUser.RoleTypeCode
  668. // productId := services.GetProductId(roleTypeCode)
  669. // if productId == 0 {
  670. // br.Msg = "参数错误"
  671. // br.ErrMsg = "客户类型为:" + roleTypeCode
  672. // return
  673. // }
  674. // if req.CompanyId <= 0 {
  675. // br.Msg = "参数错误"
  676. // br.ErrMsg = "客户Id小于等于0:"
  677. // return
  678. // }
  679. // companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  680. // if err != nil {
  681. // br.Msg = "获取信息失败"
  682. // br.ErrMsg = "获取信息失败,Err:" + err.Error()
  683. // return
  684. // }
  685. // if companyProduct == nil {
  686. // br.Msg = "获取信息失败"
  687. // br.ErrMsg = "获取审批信息失败,Err:" + err.Error()
  688. // return
  689. // }
  690. // approvalItem, err := company.GetCompanyApprovalByApprovalId(req.CompanyApprovalId)
  691. // if err != nil {
  692. // if err.Error() == utils.ErrNoRow() {
  693. // br.Msg = "待审批信息不存在"
  694. // br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  695. // return
  696. // }
  697. // br.Msg = "获取信息失败"
  698. // br.ErrMsg = "获取信息失败,Err:" + err.Error()
  699. // return
  700. // }
  701. // if approvalItem == nil {
  702. // br.Msg = "待审批信息不存在"
  703. // br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  704. // return
  705. // }
  706. // if approvalItem.ApproveStatus != "待审批" && approvalItem.ApproveStatus != "已撤回" {
  707. // br.Msg = "审批状态为:" + approvalItem.ApproveStatus + ";不可删除"
  708. // br.ErrMsg = "审批状态为:" + approvalItem.ApproveStatus + ";不可删除" + ";CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  709. // return
  710. // }
  711. // //删除
  712. // err = company.ApplyDelete(req.CompanyId, req.CompanyApprovalId, approvalItem.ProductId)
  713. // if err != nil {
  714. // br.Msg = "删除失败"
  715. // br.ErrMsg = "删除失败,Err:" + err.Error()
  716. // return
  717. // }
  718. // //新增操作记录
  719. // {
  720. // remark := "删除审批申请"
  721. // operation := "approve_delete"
  722. // services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, sysUser.AdminId, companyProduct.CompanyName,
  723. // companyProduct.ProductName, sysUser.RealName, remark, operation, remark, sysUser.RealName, "", companyProduct.Status)
  724. // }
  725. // br.Ret = 200
  726. // br.Success = true
  727. // br.Msg = "删除成功"
  728. //}