company_apply_v2.go 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_crm_api/models"
  6. "hongze/hz_crm_api/models/company"
  7. "hongze/hz_crm_api/models/system"
  8. "hongze/hz_crm_api/services"
  9. "hongze/hz_crm_api/services/company_apply"
  10. contractService "hongze/hz_crm_api/services/contract"
  11. "hongze/hz_crm_api/utils"
  12. "sort"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // ApplyServiceUpdate
  18. // @Title 申请服务更新
  19. // @Description 申请服务更新接口
  20. // @Param request body company.CompanyApplyServiceUpdateReq true "type json string"
  21. // @Success Ret=200 申请成功
  22. // @router /apply/service/update [post]
  23. func (this *CompanyApplyController) ApplyServiceUpdate() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. sysUser := this.SysUser
  30. if sysUser == nil {
  31. br.Msg = "请登录"
  32. br.ErrMsg = "请登录,SysUser Is Empty"
  33. br.Ret = 408
  34. return
  35. }
  36. var req company.CompanyApplyServiceUpdateReq
  37. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  38. if err != nil {
  39. br.Msg = "参数解析异常!"
  40. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  41. return
  42. }
  43. if req.CompanyId <= 0 {
  44. br.Msg = "参数错误"
  45. br.ErrMsg = "参数错误,客户id小于等于0"
  46. return
  47. }
  48. if req.StartDate == "" {
  49. br.Msg = "请选择合同开始日期"
  50. return
  51. }
  52. if req.EndDate == "" {
  53. br.Msg = "请选择合同结束日期"
  54. return
  55. }
  56. if req.Money <= 0 {
  57. br.Msg = "合同金额不能小于等于0"
  58. }
  59. if req.ContractType == "" {
  60. req.ContractType = "续约合同"
  61. //br.Msg = "请选择合同类型"
  62. //return
  63. }
  64. if req.PermissionIds == "" {
  65. br.Msg = "请选择权限"
  66. br.ErrMsg = "请选择权限"
  67. return
  68. }
  69. roleTypeCode := sysUser.RoleTypeCode
  70. productId := services.GetProductId(roleTypeCode)
  71. if productId == 0 {
  72. br.Msg = "参数错误"
  73. br.ErrMsg = "客户类型为:" + req.CompanyType
  74. return
  75. }
  76. mapPermissionIdUpgrade := make(map[int]int, 0)
  77. mapPermissionIdExpensive := make(map[int]int, 0)
  78. if productId == 2 {
  79. // CRM13.3改-是否为权益内部人员, 非权益内部人员只能勾选行业不能勾选单独的主客观, 勾选行业(即勾选主观的ID需要加入客观的权限ID)
  80. isRai, e := services.CheckRaiAdmin(sysUser.AdminId)
  81. if e != nil {
  82. br.Msg = "获取失败"
  83. br.ErrMsg = "判断是否为权益内部人员失败, GetRaiAdmin Err: " + e.Error()
  84. return
  85. }
  86. var permissionIdsNew string
  87. permissionIdsNew, mapPermissionIdUpgrade, mapPermissionIdExpensive, err = services.CheckCompanyUpgradeV2(req.PermissionIds, isRai)
  88. if err != nil {
  89. br.Msg = "获取信息失败"
  90. br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  91. return
  92. }
  93. req.PermissionIds = permissionIdsNew
  94. } else {
  95. permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
  96. if err != nil {
  97. br.Msg = "获取信息失败"
  98. br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  99. return
  100. }
  101. req.PermissionIds = permissionStr
  102. }
  103. //添加缓存,避免多次点击提交
  104. {
  105. deleteCache := true
  106. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  107. defer func() {
  108. if deleteCache {
  109. utils.Rc.Delete(cacheKey)
  110. }
  111. }()
  112. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  113. deleteCache = false
  114. br.Msg = "系统处理中,请勿重复操作"
  115. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  116. return
  117. }
  118. }
  119. approveRoleTypeCode := ""
  120. if productId == 1 {
  121. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  122. } else {
  123. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  124. }
  125. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  126. if err != nil {
  127. br.Msg = "获取客户信息失败"
  128. br.ErrMsg = "获取客户信息失败"
  129. return
  130. }
  131. if companyProduct.Status != utils.COMPANY_STATUS_FORMAL && companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
  132. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
  133. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
  134. return
  135. }
  136. companyItem, e := company.GetCompanyById(req.CompanyId)
  137. if e != nil {
  138. br.Msg = "客户信息有误"
  139. br.ErrMsg = "获取客户信息失败, Err: " + e.Error()
  140. return
  141. }
  142. //客户归属判断-当前销售/咨询组共享销售
  143. if companyProduct.SellerId != sysUser.AdminId && companyItem.ShareSellerId != sysUser.AdminId {
  144. br.Msg = "客户信息异常"
  145. br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
  146. return
  147. }
  148. var approveUserId int
  149. var approveUserRealName string
  150. applyMethod := 5 //续约服务
  151. recordApproveContent := `正式客户申请续约`
  152. approveContent := `申请续约`
  153. messageContent := "续约申请单"
  154. operationRemark := `申请续约`
  155. operation := "service_update"
  156. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新,6:正式客户补充协议
  157. if req.ContractType == "补充协议" {
  158. applyMethod = 6 //补充协议
  159. recordApproveContent = `正式客户新增补充协议`
  160. approveContent = `新增补充协议`
  161. messageContent = "补充协议申请单"
  162. operationRemark = `新增补充协议`
  163. operation = "add_agreement"
  164. }
  165. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  166. if err != nil && err.Error() != utils.ErrNoRow() {
  167. br.Msg = "获取审批信息失败"
  168. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  169. return
  170. }
  171. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  172. br.Msg = "审批用户不存在"
  173. br.ErrMsg = "审批用户不存在"
  174. return
  175. }
  176. var companyApprovalId int
  177. if req.CompanyApprovalId <= 0 {
  178. contractCode, err := company.GetCompanyContractCode()
  179. if err != nil {
  180. br.Msg = "生成合同编码失败"
  181. br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
  182. return
  183. }
  184. //当前是否存在待审批的单子
  185. nowCompanyApprovalInfo, err := company.GetCompanyApprovalById(req.CompanyId, productId)
  186. if (err == nil || nowCompanyApprovalInfo != nil) || err != nil && err.Error() != utils.ErrNoRow() {
  187. br.Msg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  188. br.ErrMsg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  189. return
  190. }
  191. //当前待审批的合同,有且只能存在一条
  192. //count, err := company.GetCompanyContractApproveCount(req.CompanyId, productId)
  193. //if err != nil {
  194. // br.Msg = "获取信息失败"
  195. // br.ErrMsg = "判断是否已存在待审批合同失败,Err:" + err.Error()
  196. // return
  197. //}
  198. //if count > 0 {
  199. // br.Msg = "此客户已提交过申请,请在客户审批列表重新提交"
  200. // return
  201. //}
  202. contract := new(company.CompanyContract)
  203. contract.CompanyId = req.CompanyId
  204. contract.ProductId = productId
  205. contract.ProductName = companyProduct.ProductName
  206. contract.CompanyProductId = companyProduct.CompanyProductId
  207. contract.ContractType = req.ContractType
  208. contract.ContractCode = contractCode
  209. contract.StartDate = req.StartDate
  210. contract.EndDate = req.EndDate
  211. contract.Money = req.Money
  212. contract.PayMethod = req.PayMethod
  213. contract.PayChannel = req.PayChannel
  214. contract.ImgUrl = req.ImgUrl
  215. contract.Status = 0
  216. contract.Source = "上传附件"
  217. contract.CreateTime = time.Now()
  218. contract.ModifyTime = time.Now()
  219. contract.PackageType = req.PackageType
  220. contract.RaiPackageType = req.RaiPackageType
  221. newId, err := company.AddCompanyContract(contract)
  222. if err != nil {
  223. br.Msg = "新增合同失败"
  224. br.ErrMsg = "新增合同失败,Err:" + err.Error()
  225. return
  226. }
  227. permissionArr := strings.Split(req.PermissionIds, ",")
  228. permissionMap := make(map[int]int) //权限id的map集合,用来避免重复添加权限校验
  229. for _, v := range permissionArr {
  230. item := new(company.CompanyContractPermission)
  231. item.CompanyId = req.CompanyId
  232. item.CompanyContractId = int(newId)
  233. chartPermissionId, tmpErr := strconv.Atoi(v)
  234. if tmpErr != nil {
  235. err = tmpErr
  236. return
  237. }
  238. //权限id判断,避免重复添加权限
  239. if _, ok := permissionMap[chartPermissionId]; ok {
  240. continue
  241. }
  242. permissionMap[chartPermissionId] = chartPermissionId
  243. item.ChartPermissionId = chartPermissionId
  244. item.StartDate = req.StartDate
  245. item.EndDate = req.EndDate
  246. item.IsUpgrade = mapPermissionIdUpgrade[chartPermissionId]
  247. item.ExpensiveYx = mapPermissionIdExpensive[chartPermissionId]
  248. item.ModifyTime = time.Now()
  249. item.CreateTime = time.Now()
  250. err = company.AddCompanyContractPermission(item)
  251. if err != nil {
  252. br.Msg = "新增合同失败"
  253. br.ErrMsg = "新增合同权限失败,Err:" + err.Error()
  254. return
  255. }
  256. //新增日志
  257. {
  258. itemLog := new(company.CompanyContractPermissionLog)
  259. itemLog.CompanyId = req.CompanyId
  260. itemLog.CompanyContractId = int(newId)
  261. itemLog.ChartPermissionId = v
  262. itemLog.StartDate = req.StartDate
  263. itemLog.EndDate = req.EndDate
  264. itemLog.ModifyTime = time.Now()
  265. itemLog.CreateTime = time.Now()
  266. itemLog.LogCreateTime = time.Now()
  267. go company.AddCompanyContractPermissionLog(itemLog)
  268. }
  269. }
  270. approval := new(company.CompanyApproval)
  271. approval.CompanyId = req.CompanyId
  272. approval.ProductId = productId
  273. approval.ApproveStatus = "待审批"
  274. approval.ApproveUserId = 0
  275. approval.ApproveRoleTypeCode = approveRoleTypeCode
  276. approval.ApproveRealName = ""
  277. approval.ApproveTime = time.Now()
  278. approval.ApproveContent = approveContent
  279. approval.ApplyMethod = applyMethod
  280. approval.ApplyReasons = ""
  281. approval.ApplyUserId = sysUser.AdminId
  282. approval.ApplyRealName = sysUser.RealName
  283. approval.CompanyContractId = int(newId)
  284. approval.CreateTime = time.Now()
  285. approval.ModifyTime = time.Now()
  286. approval.IsFormal = companyProduct.IsFormal
  287. companyApprovalId, err = company.AddCompanyApproval(approval)
  288. if err != nil {
  289. br.Msg = "申请失败"
  290. br.ErrMsg = "申请失败,Err:" + err.Error()
  291. return
  292. }
  293. } else {
  294. // 有审批单
  295. recode, err := company.GetCompanyApprovalByApprovalId(req.CompanyApprovalId)
  296. if err != nil {
  297. br.Msg = "申请失败"
  298. br.ErrMsg = "获取审批记录失败,Err:" + err.Error()
  299. return
  300. }
  301. err = company.ModifyCompanyApplyServiceUpdate(&req, productId, recode.CompanyContractId, companyProduct.IsFormal, mapPermissionIdUpgrade, mapPermissionIdExpensive)
  302. if err != nil {
  303. br.Msg = "申请失败"
  304. br.ErrMsg = "申请失败,Err:" + err.Error()
  305. return
  306. }
  307. companyApprovalId = req.CompanyApprovalId
  308. }
  309. //新增操作记录
  310. {
  311. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, approveUserId, companyProduct.CompanyName,
  312. companyProduct.ProductName, sysUser.RealName, operationRemark, operation, recordApproveContent, approveUserRealName, "", companyProduct.Status)
  313. }
  314. //新增客户产品日志
  315. {
  316. logType := "modify"
  317. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  318. }
  319. //新增申请单
  320. err = company_apply.Apply(companyApprovalId, messageContent)
  321. if err != nil {
  322. br.Msg = "发起审批异常,请联系管理员"
  323. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  324. return
  325. }
  326. br.Ret = 200
  327. br.Success = true
  328. br.Msg = "申请成功"
  329. }
  330. // ApplyTurnPositive
  331. // @Title 申请转正
  332. // @Description 申请转正接口
  333. // @Param request body company.CompanyApplyTurnPositiveReq true "type json string"
  334. // @Success Ret=200 申请成功
  335. // @router /apply/turn/positive [post]
  336. func (this *CompanyApplyController) ApplyTurnPositive() {
  337. br := new(models.BaseResponse).Init()
  338. defer func() {
  339. this.Data["json"] = br
  340. this.ServeJSON()
  341. }()
  342. sysUser := this.SysUser
  343. if sysUser == nil {
  344. br.Msg = "请登录"
  345. br.ErrMsg = "请登录,SysUser Is Empty"
  346. br.Ret = 408
  347. return
  348. }
  349. var req company.CompanyApplyTurnPositiveReq
  350. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  351. if err != nil {
  352. br.Msg = "参数解析异常!"
  353. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  354. return
  355. }
  356. if req.CompanyId <= 0 {
  357. br.Msg = "参数错误"
  358. br.ErrMsg = "参数错误,客户id小于等于0"
  359. return
  360. }
  361. if req.StartDate == "" {
  362. br.Msg = "请选择合同开始日期"
  363. return
  364. }
  365. if req.EndDate == "" {
  366. br.Msg = "请选择合同结束日期"
  367. return
  368. }
  369. if req.Money <= 0 {
  370. br.Msg = "合同金额不能小于等于0"
  371. return
  372. }
  373. if req.PermissionIds == "" {
  374. br.Msg = "请选择权限"
  375. return
  376. }
  377. roleTypeCode := sysUser.RoleTypeCode
  378. productId := services.GetProductId(roleTypeCode)
  379. if productId == 0 {
  380. br.Msg = "参数错误"
  381. br.ErrMsg = "客户类型为:" + roleTypeCode
  382. return
  383. }
  384. //添加缓存,避免多次点击提交
  385. {
  386. deleteCache := true
  387. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  388. defer func() {
  389. if deleteCache {
  390. utils.Rc.Delete(cacheKey)
  391. }
  392. }()
  393. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  394. deleteCache = false
  395. br.Msg = "系统处理中,请勿重复操作"
  396. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  397. return
  398. }
  399. }
  400. // 权益主客观、行业升级、买方研选的处理
  401. mapPermissionIdUpgrade := make(map[int]int)
  402. permissionNames := req.PermissionNames
  403. expensiveYx := 0
  404. if productId == 2 {
  405. // 给升级的产业ID加一个极大值判断处理
  406. permissionSlice := strings.Split(req.PermissionIds, ",")
  407. mapPermissionId := make(map[int]int)
  408. //var permissionIdsNew string
  409. var permissionIdOnly int //处理普通权限与升级权限同时勾选的时候的拦截
  410. expId := utils.PERMISSION_ID_YANXUAN_DIFF + utils.CHART_PERMISSION_ID_YANXUAN
  411. // 获取行业主观对应的客观ID
  412. subObjMap, e := services.GetRaiSubObjPermissionIdMap()
  413. if e != nil {
  414. br.Msg = "操作失败"
  415. br.ErrMsg = "获取行业主观对应的客观ID失败, Err: " + e.Error()
  416. return
  417. }
  418. strPermissionIdArr := make([]string, 0) // 最终过滤后的权限IDs
  419. for _, v := range permissionSlice {
  420. permissionId, _ := strconv.Atoi(v)
  421. // 研选5w的处理
  422. if permissionId == expId {
  423. //permissionIdsNew += strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN) + ","
  424. strPermissionIdArr = append(strPermissionIdArr, strconv.Itoa(utils.CHART_PERMISSION_ID_YANXUAN))
  425. expensiveYx = 1
  426. continue
  427. }
  428. if permissionId > utils.PERMISSION_ID_UPGRADE {
  429. //permissionIdsNew += strconv.Itoa(permissionId-utils.PERMISSION_ID_UPGRADE) + ","
  430. permissionIdOnly = permissionId - utils.PERMISSION_ID_UPGRADE
  431. // 升级权限, 需要加入客观的权限
  432. subId := permissionId - utils.PERMISSION_ID_UPGRADE
  433. strPermissionIdArr = append(strPermissionIdArr, strconv.Itoa(subId))
  434. if subObjMap[subId] > 0 {
  435. strPermissionIdArr = append(strPermissionIdArr, strconv.Itoa(subObjMap[subId]))
  436. }
  437. } else {
  438. //permissionIdsNew += strconv.Itoa(permissionId) + ","
  439. strPermissionIdArr = append(strPermissionIdArr, v)
  440. permissionIdOnly = permissionId
  441. }
  442. if _, ok := mapPermissionId[permissionIdOnly]; ok {
  443. br.Msg = "权限设置有误,请重新选择"
  444. br.ErrMsg = "升级权限与普通权限重复选择!" + req.PermissionIds
  445. return
  446. }
  447. mapPermissionId[permissionIdOnly] = permissionIdOnly
  448. }
  449. req.PermissionIds = strings.Join(strPermissionIdArr, ",")
  450. //req.PermissionIds = strings.TrimRight(permissionIdsNew, ",")
  451. // 是否为权益内部人员, 非权益内部人员只能勾选行业不能勾选单独的主客观, 需要通过主观的ID去查客观的ID
  452. //isRai, e := services.CheckRaiAdmin(sysUser.AdminId)
  453. //if e != nil {
  454. // br.Msg = "获取失败"
  455. // br.ErrMsg = "判断是否为权益内部人员失败, GetRaiAdmin Err: " + e.Error()
  456. // return
  457. //}
  458. //if !isRai {
  459. //permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
  460. //if err != nil {
  461. // br.Msg = "获取信息失败"
  462. // br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  463. // return
  464. //}
  465. //req.PermissionIds = permissionStr
  466. //}
  467. // 升级map
  468. if permissionNames != "" {
  469. mapPermissionIdUpgrade, err = services.PermissionIdUpgrade(permissionNames)
  470. if err != nil {
  471. br.Msg = "获取信息失败"
  472. br.ErrMsg = "处理升级信息失败,Err:" + err.Error()
  473. return
  474. }
  475. }
  476. }
  477. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  478. if err != nil {
  479. br.Msg = "获取客户信息失败"
  480. br.ErrMsg = "获取客户信息失败"
  481. return
  482. }
  483. if companyProduct == nil {
  484. br.Msg = "获取客户信息失败"
  485. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  486. return
  487. }
  488. if companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
  489. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行转正申请"
  490. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行转正申请"
  491. return
  492. }
  493. companyItem, e := company.GetCompanyById(req.CompanyId)
  494. if e != nil {
  495. br.Msg = "客户信息有误"
  496. br.ErrMsg = "获取客户信息失败, Err: " + e.Error()
  497. return
  498. }
  499. //客户归属判断
  500. if companyProduct.SellerId != sysUser.AdminId && companyItem.ShareSellerId != sysUser.AdminId {
  501. br.Msg = "客户信息异常"
  502. br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
  503. return
  504. }
  505. if companyProduct.ApproveStatus == "待审批" {
  506. br.Msg = "存在待审批订单,不可重复提交"
  507. return
  508. }
  509. approveContent := `试用转正式`
  510. var approveUserId int
  511. var approveUserRealName string
  512. approveRoleTypeCode := ""
  513. if productId == 1 {
  514. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  515. } else {
  516. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  517. }
  518. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  519. if err != nil && err.Error() != utils.ErrNoRow() {
  520. br.Msg = "获取审批信息失败"
  521. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  522. return
  523. }
  524. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  525. br.Msg = "审批用户不存在"
  526. br.ErrMsg = "审批用户不存在"
  527. return
  528. }
  529. // 合同类型
  530. contractType := req.ContractType
  531. {
  532. if contractType == "" {
  533. contractType = "新签合同"
  534. }
  535. var condition string
  536. var pars []interface{}
  537. condition += " AND product_id = ?"
  538. pars = append(pars, productId)
  539. condition += " AND status = ?"
  540. pars = append(pars, 1)
  541. list, e := company.GetCompanyContractListByCompanyId(req.CompanyId, condition, pars)
  542. if e != nil {
  543. br.Msg = "获取合同信息失败"
  544. br.ErrMsg = "获取合同信息失败,Err:" + e.Error()
  545. return
  546. }
  547. if len(list) > 0 {
  548. contractType = "续约合同"
  549. }
  550. // 若上面的判断不是续约合同, 则继续查询是否存在正式转试用的记录,如果存在,那么合同类型是续约合同
  551. if contractType != "续约合同" {
  552. total, e := company.GetCompanyProductOperationRecordCount(companyProduct.CompanyId, companyProduct.ProductId)
  553. if e != nil {
  554. br.Msg = "查询用户信息异常"
  555. br.ErrMsg = "查询用户变更记录异常, GetCompanyProductOperationRecordCount err: " + e.Error()
  556. return
  557. }
  558. if total > 0 {
  559. contractType = "续约合同"
  560. }
  561. }
  562. }
  563. var companyApprovalId int
  564. // 全新的申请转正
  565. if req.CompanyApprovalId <= 0 {
  566. contractCode, err := company.GetCompanyContractCode()
  567. if err != nil {
  568. br.Msg = "生成合同编码失败"
  569. br.ErrMsg = "生成合同编码失败,Err:" + err.Error()
  570. return
  571. }
  572. //当前是否存在待审批的单子
  573. nowCompanyApprovalInfo, err := company.GetCompanyApprovalById(req.CompanyId, productId)
  574. if (err == nil || nowCompanyApprovalInfo != nil) || err != nil && err.Error() != utils.ErrNoRow() {
  575. br.Msg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  576. br.ErrMsg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  577. return
  578. }
  579. //当前待审批的合同,有且只能存在一条
  580. //count, err := company.GetCompanyContractApproveCount(req.CompanyId, productId)
  581. //if err != nil {
  582. // br.Msg = "获取信息失败"
  583. // br.ErrMsg = "判断是否已存在待审批合同失败,Err:" + err.Error()
  584. // return
  585. //}
  586. //if count > 0 {
  587. // br.Msg = "此客户已提交过申请,请在客户审批列表重新提交"
  588. // return
  589. //}
  590. contract := new(company.CompanyContract)
  591. contract.CompanyId = req.CompanyId
  592. contract.ProductId = productId
  593. contract.ContractType = contractType
  594. contract.ProductName = companyProduct.ProductName
  595. contract.CompanyProductId = companyProduct.CompanyProductId
  596. contract.ContractCode = contractCode
  597. contract.StartDate = req.StartDate
  598. contract.EndDate = req.EndDate
  599. contract.Money = req.Money
  600. contract.PayMethod = req.PayMethod
  601. contract.PayChannel = req.PayChannel
  602. contract.ImgUrl = req.ImgUrl
  603. contract.Status = 0
  604. contract.Source = "上传附件"
  605. contract.PackageType = req.PackageType
  606. contract.RaiPackageType = req.RaiPackageType
  607. contract.CreateTime = time.Now()
  608. contract.ModifyTime = time.Now()
  609. newId, err := company.AddCompanyContract(contract)
  610. if err != nil {
  611. br.Msg = "新增合同失败"
  612. br.ErrMsg = "新增合同失败,Err:" + err.Error()
  613. return
  614. }
  615. permissionArr := strings.Split(req.PermissionIds, ",")
  616. permissionMap := make(map[int]int) //权限id的map集合,用来避免重复添加权限校验
  617. permissionItems := make([]*company.CompanyContractPermission, 0)
  618. permissionLogs := make([]*company.CompanyContractPermissionLog, 0)
  619. for _, v := range permissionArr {
  620. item := new(company.CompanyContractPermission)
  621. item.CompanyId = req.CompanyId
  622. item.CompanyContractId = int(newId)
  623. chartPermissionId, tmpErr := strconv.Atoi(v)
  624. if tmpErr != nil {
  625. err = tmpErr
  626. return
  627. }
  628. //权限id判断,避免重复添加权限
  629. if _, ok := permissionMap[chartPermissionId]; ok {
  630. continue
  631. }
  632. permissionMap[chartPermissionId] = chartPermissionId
  633. item.ChartPermissionId = chartPermissionId
  634. if _, ok := mapPermissionIdUpgrade[chartPermissionId]; ok {
  635. item.IsUpgrade = 1
  636. }
  637. if chartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
  638. item.ExpensiveYx = expensiveYx
  639. }
  640. item.StartDate = req.StartDate
  641. item.EndDate = req.EndDate
  642. item.ModifyTime = time.Now()
  643. item.CreateTime = time.Now()
  644. permissionItems = append(permissionItems, item)
  645. //新增日志
  646. itemLog := new(company.CompanyContractPermissionLog)
  647. itemLog.CompanyId = req.CompanyId
  648. itemLog.CompanyContractId = int(newId)
  649. itemLog.ChartPermissionId = v
  650. itemLog.StartDate = req.StartDate
  651. itemLog.EndDate = req.EndDate
  652. itemLog.ModifyTime = time.Now()
  653. itemLog.CreateTime = time.Now()
  654. itemLog.LogCreateTime = time.Now()
  655. permissionLogs = append(permissionLogs, itemLog)
  656. }
  657. // 批量新增company_contract_permission和log
  658. if e := company.MultiAddCompanyContractPermission(permissionItems); e != nil {
  659. br.Msg = "新增合同失败"
  660. br.ErrMsg = "批量新增合同权限失败, MultiAddCompanyContractPermission Err:" + e.Error()
  661. return
  662. }
  663. go company.MultiAddCompanyContractPermissionLog(permissionLogs)
  664. applyMethod := 1
  665. approval := new(company.CompanyApproval)
  666. approval.CompanyId = req.CompanyId
  667. approval.ProductId = productId
  668. approval.ApproveStatus = "待审批"
  669. approval.ApproveUserId = 0
  670. approval.ApproveRoleTypeCode = approveRoleTypeCode
  671. approval.ApproveRealName = ""
  672. approval.ApproveTime = time.Now()
  673. approval.ApproveContent = "试用转正式"
  674. approval.ApplyMethod = applyMethod
  675. approval.ApplyReasons = ""
  676. approval.ApplyUserId = sysUser.AdminId
  677. approval.ApplyRealName = sysUser.RealName
  678. approval.CreateTime = time.Now()
  679. approval.ModifyTime = time.Now()
  680. approval.CompanyContractId = int(newId)
  681. approval.IsFormal = companyProduct.IsFormal
  682. companyApprovalId, err = company.AddCompanyApproval(approval)
  683. if err != nil {
  684. br.Msg = "申请失败"
  685. br.ErrMsg = "申请失败,Err:" + err.Error()
  686. return
  687. }
  688. } else {
  689. // 重新申请
  690. recode, err := company.GetCompanyApprovalByApprovalId(req.CompanyApprovalId)
  691. if err != nil {
  692. br.Msg = "申请失败"
  693. br.ErrMsg = "获取审批记录失败,Err:" + err.Error()
  694. return
  695. }
  696. err = company.ModifyCompanyTurnPositive(&req, productId, recode.CompanyContractId, companyProduct.IsFormal, mapPermissionIdUpgrade, expensiveYx)
  697. if err != nil {
  698. br.Msg = "申请失败"
  699. br.ErrMsg = "申请失败,Err:" + err.Error()
  700. return
  701. }
  702. companyApprovalId = req.CompanyApprovalId
  703. }
  704. //新增操作记录
  705. {
  706. remark := "申请转正"
  707. operation := "turn_positive"
  708. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, approveUserId, companyProduct.CompanyName,
  709. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, approveUserRealName, "", companyProduct.Status)
  710. }
  711. //新增客户产品日志
  712. {
  713. logType := "modify"
  714. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  715. }
  716. //新增申请单
  717. err = company_apply.Apply(companyApprovalId, "试用转正式申请单")
  718. if err != nil {
  719. br.Msg = "发起审批异常,请联系管理员"
  720. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  721. return
  722. }
  723. br.Ret = 200
  724. br.Success = true
  725. br.Msg = "申请成功"
  726. }
  727. // ApplyBySystemContract
  728. // @Title 通过系统合同申请转正/服务更新
  729. // @Description 通过系统合同申请转正/服务更新接口
  730. // @Param request body company.CompanyApplyBySystemContractReq true "type json string"
  731. // @Success Ret=200 申请成功
  732. // @router /apply/systemContract [post]
  733. func (this *CompanyApplyController) ApplyBySystemContract() {
  734. br := new(models.BaseResponse).Init()
  735. defer func() {
  736. this.Data["json"] = br
  737. this.ServeJSON()
  738. }()
  739. sysUser := this.SysUser
  740. if sysUser == nil {
  741. br.Msg = "请登录"
  742. br.ErrMsg = "请登录,SysUser Is Empty"
  743. br.Ret = 408
  744. return
  745. }
  746. var req company.CompanyApplyBySystemContractReq
  747. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  748. if err != nil {
  749. br.Msg = "参数解析异常!"
  750. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  751. return
  752. }
  753. if req.CompanyId <= 0 {
  754. br.Msg = "参数错误"
  755. br.ErrMsg = "参数错误,客户id小于等于0"
  756. return
  757. }
  758. //获取客户信息
  759. companyInfo, err := company.GetCompanyById(req.CompanyId)
  760. if err != nil {
  761. br.Msg = "获取客户信息失败"
  762. br.ErrMsg = "获取客户信息失败"
  763. return
  764. }
  765. roleTypeCode := sysUser.RoleTypeCode
  766. productId := services.GetProductId(roleTypeCode)
  767. if productId == 0 {
  768. br.Msg = "参数错误"
  769. br.ErrMsg = "客户类型为:" + roleTypeCode
  770. return
  771. }
  772. //添加缓存,避免多次点击提交
  773. {
  774. deleteCache := true
  775. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  776. defer func() {
  777. if deleteCache {
  778. utils.Rc.Delete(cacheKey)
  779. }
  780. }()
  781. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  782. deleteCache = false
  783. br.Msg = "系统处理中,请勿重复操作"
  784. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  785. return
  786. }
  787. }
  788. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  789. if err != nil {
  790. br.Msg = "获取客户信息失败"
  791. br.ErrMsg = "获取客户信息失败"
  792. return
  793. }
  794. if companyProduct == nil {
  795. br.Msg = "获取客户信息失败"
  796. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  797. return
  798. }
  799. if companyProduct.SellerId != sysUser.AdminId && companyInfo.ShareSellerId != sysUser.AdminId {
  800. br.Msg = "客户信息异常"
  801. br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
  802. return
  803. }
  804. if companyProduct.ApproveStatus == "待审批" {
  805. br.Msg = "存在待审批订单,不可重复提交"
  806. return
  807. }
  808. var approveUserId int
  809. var approveUserRealName string
  810. approveRoleTypeCode := ""
  811. if productId == 1 {
  812. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  813. } else {
  814. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  815. }
  816. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  817. if err != nil && err.Error() != utils.ErrNoRow() {
  818. br.Msg = "获取审批信息失败"
  819. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  820. return
  821. }
  822. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  823. br.Msg = "审批用户不存在"
  824. br.ErrMsg = "审批用户不存在"
  825. return
  826. }
  827. //获取合同详情
  828. contractDetail, err := contractService.GetContractDetail(req.ContractId)
  829. if err != nil {
  830. br.Msg = "查询合同异常"
  831. br.ErrMsg = fmt.Sprint("查询合同异常,合同id:", req.ContractId, ";Err:", err.Error())
  832. return
  833. }
  834. if contractDetail.ContractBusinessType != "业务合同" {
  835. br.Msg = "合同类型异常"
  836. br.ErrMsg = "合同类型异常,当前合同类型为:" + contractDetail.ContractBusinessType
  837. return
  838. }
  839. //判断产品类型是否一致
  840. if productId != contractDetail.ProductId {
  841. br.Msg = "合同产品类型异常"
  842. br.ErrMsg = fmt.Sprint("合同产品类型异常,合同产品类型Id:", contractDetail.ProductId)
  843. return
  844. }
  845. //判断销售归属
  846. if contractDetail.SellerId != sysUser.AdminId {
  847. br.Msg = "合同异常"
  848. br.ErrMsg = fmt.Sprint("合同归属人异常,合同申请人Id:", contractDetail.SellerId, ";当前账号:", sysUser.AdminId)
  849. return
  850. }
  851. //判断合同是否该客户的(组织社会信用代码是否一致)
  852. if contractDetail.CreditCode != companyInfo.CreditCode {
  853. br.Msg = "合同异常,请选择社会信用码一致的合同"
  854. br.ErrMsg = fmt.Sprint("该合同组织社会信用码与客户不符,合同的社会信用码:", contractDetail.CreditCode, ";客户的社会信用码:", companyInfo.CreditCode)
  855. return
  856. }
  857. if contractDetail.Status != "已签回" {
  858. br.Msg = "合同状态异常"
  859. br.ErrMsg = fmt.Sprint("合同状态异常,合同状态:", contractDetail.Status)
  860. return
  861. }
  862. //当前客户需要的合同状态
  863. needContractType, err := services.GetApplyTurnContractType(req.CompanyId, productId)
  864. if err != nil {
  865. br.Msg = "获取失败"
  866. br.ErrMsg = "获取合同类型失败,Err:" + err.Error()
  867. return
  868. }
  869. //判断 系统需要的合同类型 与 实际提交的合同类型是否一致,如果不一致,那么不支持
  870. if needContractType != "新签合同" && contractDetail.ContractType == "新签合同" {
  871. br.Msg = "申请失败,该客户曾经开通过正式服务,不允许签署新签合同"
  872. br.ErrMsg = "申请失败,该客户曾经开通过正式服务,不允许签署新签合同"
  873. return
  874. }
  875. if contractDetail.ContractType == "新签合同" {
  876. if companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
  877. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行转正申请"
  878. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行转正申请"
  879. return
  880. }
  881. } else {
  882. if companyProduct.Status != utils.COMPANY_STATUS_FORMAL && companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
  883. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
  884. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行服务更新申请"
  885. return
  886. }
  887. }
  888. //合同类型
  889. contractType := contractDetail.ContractType
  890. var hasContract bool //是否已经存在合同,如果存在,那么就不能是新签合同
  891. var condition string
  892. var pars []interface{}
  893. condition += " AND product_id = ?"
  894. pars = append(pars, productId)
  895. condition += " AND status = ?"
  896. pars = append(pars, 1)
  897. list, err := company.GetCompanyContractListByCompanyId(req.CompanyId, condition, pars)
  898. if err != nil {
  899. br.Msg = "获取合同信息失败"
  900. br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
  901. return
  902. }
  903. if len(list) > 0 {
  904. hasContract = true
  905. }
  906. //查询是否存在正式转试用的记录,如果存在,那么合同类型是续约合同
  907. total, err := company.GetCompanyProductOperationRecordCount(companyProduct.CompanyId, companyProduct.ProductId)
  908. if err != nil {
  909. br.Msg = "查询用户信息异常"
  910. br.ErrMsg = "查询用户变更记录异常"
  911. return
  912. }
  913. if total > 0 {
  914. hasContract = true
  915. }
  916. if hasContract && contractType == "新签合同" {
  917. br.Msg = "客户已存在老合同,不允许签署新签合同"
  918. br.ErrMsg = "客户已存在老合同,不允许签署新签合同"
  919. return
  920. }
  921. //合同类型 end
  922. //获取权限id列表
  923. permissionMap, err := contractService.GetServicePermissionMap(contractDetail.Service)
  924. permissionArr := make([]int, 0)
  925. for _, permissionId := range permissionMap {
  926. permissionArr = append(permissionArr, permissionId)
  927. }
  928. //对权限排序
  929. sort.Ints(permissionArr)
  930. // CRM8.8-权益主客观此处拆分成了三级套餐, 根据contract_service写权限
  931. // CRM8.8-如果是权益客户那么主观客观权限一起带上(暂弃)
  932. //if companyProduct.ProductId == 2 {
  933. // var permissionIds string
  934. // var permissionNames string
  935. // for _, v := range permissionArr {
  936. // permissionIds += strconv.Itoa(v) + ","
  937. // }
  938. // permissionIds = strings.TrimRight(permissionIds, ",")
  939. // listSandO, err := company.GetPermissionLookItemsSandO(permissionIds)
  940. // if err != nil {
  941. // br.Msg = "获取现有的合同权限信息失败"
  942. // br.ErrMsg = "获取现有的合同权限ID信息失败,Err:" + err.Error()
  943. // return
  944. // }
  945. // for _, v := range listSandO {
  946. // permissionNames += "'" + v.PermissionName + "'" + ","
  947. // }
  948. // permissionNames = strings.TrimRight(permissionNames, ",")
  949. // listPermissionByname, err := company.GetPermissionLookItemsSandOByName(permissionNames)
  950. // if err != nil {
  951. // br.Msg = "获取现有的合同权限信息失败"
  952. // br.ErrMsg = "通过名称获取主观客观权限ID信息失败,Err:" + err.Error()
  953. // return
  954. // }
  955. // permissionArr = make([]int, 0)
  956. // for _, v := range listPermissionByname {
  957. // permissionArr = append(permissionArr, v.ChartPermissionId)
  958. // }
  959. // //对权限排序
  960. // sort.Ints(permissionArr)
  961. //}
  962. //当前已经存在的权限
  963. currPermissionMap, err := services.GetLastContractPermissionList(companyProduct.CompanyId, companyProduct.ProductId)
  964. if err != nil {
  965. br.Msg = "获取现有的合同权限信息失败"
  966. br.ErrMsg = "获取现有的合同权限信息失败,Err:" + err.Error()
  967. return
  968. }
  969. //权限内日期判断校验
  970. for _, permissionId := range permissionArr {
  971. //研选服务不做校验
  972. if permissionId == 31 {
  973. continue
  974. }
  975. if currPermission, ok := currPermissionMap[permissionId]; ok {
  976. currStartDate, _ := time.Parse(utils.FormatDate, currPermission.StartDate)
  977. currEndDate, _ := time.Parse(utils.FormatDate, currPermission.EndDate)
  978. if !(contractDetail.StartDate.After(currEndDate) || currStartDate.After(contractDetail.EndDate)) {
  979. br.Msg = currPermission.PermissionName + "合同日期存在重复,不允许申请"
  980. br.ErrMsg = "权限合同日期存在重复,不允许申请"
  981. return
  982. }
  983. }
  984. }
  985. //获取客户产品套餐类型(大套餐、小套餐、无)
  986. packageType, err := contractService.GetServicePackageType(contractDetail.Service)
  987. raiPackageType := contractService.GetRaiServicePackageType(contractDetail.Service)
  988. recordApproveContent := `试用转正式`
  989. applyMethod := 1
  990. approveContent := "试用转正式"
  991. operationRemark := `申请转正`
  992. operation := "turn_positive"
  993. messageContent := "试用转正式申请单"
  994. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新,6:正式客户补充协议
  995. if contractType != "新签合同" {
  996. if contractType == "补充协议" {
  997. applyMethod = 6 //补充协议
  998. recordApproveContent = `正式客户新增补充协议`
  999. approveContent = `新增补充协议`
  1000. operationRemark = `新增补充协议`
  1001. operation = "add_agreement"
  1002. messageContent = "补充协议申请单"
  1003. } else {
  1004. applyMethod = 5 //续约服务
  1005. recordApproveContent = `正式客户申请续约`
  1006. approveContent = `申请续约`
  1007. operationRemark = `申请续约`
  1008. operation = "service_update"
  1009. messageContent = "续约申请单"
  1010. }
  1011. }
  1012. var companyApprovalId int
  1013. if req.CompanyApprovalId <= 0 {
  1014. //当前是否存在待审批的单子
  1015. nowCompanyApprovalInfo, err := company.GetCompanyApprovalById(req.CompanyId, productId)
  1016. if (err == nil || nowCompanyApprovalInfo != nil) || err != nil && err.Error() != utils.ErrNoRow() {
  1017. br.Msg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  1018. br.ErrMsg = "此客户已存在待审批的申请单,请在申请单审批完成后重新提交"
  1019. return
  1020. }
  1021. ////当前待审批的合同,有且只能存在一条
  1022. //count, err := company.GetCompanyContractApproveCount(req.CompanyId, productId)
  1023. //if err != nil {
  1024. // br.Msg = "获取信息失败"
  1025. // br.ErrMsg = "判断是否已存在待审批合同失败,Err:" + err.Error()
  1026. // return
  1027. //}
  1028. //if count > 0 {
  1029. // br.Msg = "此客户已提交过申请,请在客户审批列表重新提交"
  1030. // return
  1031. //}
  1032. companyContract := &company.CompanyContract{
  1033. CompanyId: req.CompanyId,
  1034. ProductId: contractDetail.ProductId,
  1035. ContractType: contractType,
  1036. ProductName: companyProduct.ProductName,
  1037. CompanyProductId: companyProduct.CompanyProductId,
  1038. ContractCode: contractDetail.ContractCode,
  1039. StartDate: contractDetail.StartDate.Format(utils.FormatDate),
  1040. EndDate: contractDetail.EndDate.Format(utils.FormatDate),
  1041. Money: contractDetail.Price,
  1042. PayMethod: contractDetail.PayRemark,
  1043. PayChannel: contractDetail.PayChannel,
  1044. ImgUrl: contractDetail.CheckBackFileUrl,
  1045. Status: 0,
  1046. Source: "系统合同",
  1047. PackageType: packageType,
  1048. RaiPackageType: raiPackageType,
  1049. CreateTime: time.Now(),
  1050. ModifyTime: time.Now(),
  1051. }
  1052. newId, err := company.AddCompanyContract(companyContract)
  1053. if err != nil {
  1054. br.Msg = "新增合同失败"
  1055. br.ErrMsg = "新增合同失败,Err:" + err.Error()
  1056. return
  1057. }
  1058. upgradeMap := make(map[int]int)
  1059. if utils.RunMode == "release" {
  1060. upgradeMap = map[int]int{22: 39, 21: 38, 20: 37, 19: 36}
  1061. } else {
  1062. upgradeMap = map[int]int{22: 37, 21: 36, 20: 35, 19: 34}
  1063. }
  1064. for _, chartPermissionId := range permissionArr {
  1065. if chartPermissionId < utils.PERMISSION_ID_UPGRADE {
  1066. item := new(company.CompanyContractPermission)
  1067. item.CompanyId = req.CompanyId
  1068. item.CompanyContractId = int(newId)
  1069. item.ChartPermissionId = chartPermissionId
  1070. item.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1071. item.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1072. item.ModifyTime = time.Now()
  1073. item.CreateTime = time.Now()
  1074. err = company.AddCompanyContractPermission(item)
  1075. if err != nil {
  1076. br.Msg = "新增合同失败"
  1077. br.ErrMsg = "新增合同权限失败,Err:" + err.Error()
  1078. return
  1079. }
  1080. //新增日志
  1081. {
  1082. itemLog := new(company.CompanyContractPermissionLog)
  1083. itemLog.CompanyId = req.CompanyId
  1084. itemLog.CompanyContractId = int(newId)
  1085. itemLog.ChartPermissionId = strconv.Itoa(chartPermissionId)
  1086. itemLog.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1087. itemLog.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1088. itemLog.ModifyTime = time.Now()
  1089. itemLog.CreateTime = time.Now()
  1090. itemLog.LogCreateTime = time.Now()
  1091. go company.AddCompanyContractPermissionLog(itemLog)
  1092. }
  1093. } else {
  1094. // 升级套餐,手动补充主客观套餐
  1095. chartPermissionId -= utils.PERMISSION_ID_UPGRADE
  1096. item := new(company.CompanyContractPermission)
  1097. item.CompanyId = req.CompanyId
  1098. item.CompanyContractId = int(newId)
  1099. item.ChartPermissionId = chartPermissionId
  1100. item.IsUpgrade = 1
  1101. item.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1102. item.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1103. item.ModifyTime = time.Now()
  1104. item.CreateTime = time.Now()
  1105. err = company.AddCompanyContractPermission(item)
  1106. if err != nil {
  1107. br.Msg = "新增合同失败"
  1108. br.ErrMsg = "新增合同权限失败,Err:" + err.Error()
  1109. return
  1110. }
  1111. //新增日志
  1112. {
  1113. itemLog := new(company.CompanyContractPermissionLog)
  1114. itemLog.CompanyId = req.CompanyId
  1115. itemLog.CompanyContractId = int(newId)
  1116. itemLog.ChartPermissionId = strconv.Itoa(chartPermissionId)
  1117. itemLog.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1118. itemLog.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1119. itemLog.ModifyTime = time.Now()
  1120. itemLog.CreateTime = time.Now()
  1121. itemLog.LogCreateTime = time.Now()
  1122. go company.AddCompanyContractPermissionLog(itemLog)
  1123. }
  1124. // 客观
  1125. upgradeChartPermissionId := upgradeMap[chartPermissionId]
  1126. upItem := new(company.CompanyContractPermission)
  1127. upItem.CompanyId = req.CompanyId
  1128. upItem.CompanyContractId = int(newId)
  1129. upItem.ChartPermissionId = upgradeChartPermissionId
  1130. upItem.IsUpgrade = 1
  1131. upItem.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1132. upItem.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1133. upItem.ModifyTime = time.Now()
  1134. upItem.CreateTime = time.Now()
  1135. err = company.AddCompanyContractPermission(upItem)
  1136. if err != nil {
  1137. br.Msg = "新增合同失败"
  1138. br.ErrMsg = "新增合同权限失败,Err:" + err.Error()
  1139. return
  1140. }
  1141. //新增日志
  1142. {
  1143. itemLog := new(company.CompanyContractPermissionLog)
  1144. itemLog.CompanyId = req.CompanyId
  1145. itemLog.CompanyContractId = int(newId)
  1146. itemLog.ChartPermissionId = strconv.Itoa(upgradeChartPermissionId)
  1147. itemLog.StartDate = contractDetail.StartDate.Format(utils.FormatDate)
  1148. itemLog.EndDate = contractDetail.EndDate.Format(utils.FormatDate)
  1149. itemLog.ModifyTime = time.Now()
  1150. itemLog.CreateTime = time.Now()
  1151. itemLog.LogCreateTime = time.Now()
  1152. go company.AddCompanyContractPermissionLog(itemLog)
  1153. }
  1154. }
  1155. }
  1156. approval := new(company.CompanyApproval)
  1157. approval.CompanyId = req.CompanyId
  1158. approval.ProductId = productId
  1159. approval.ApproveStatus = "待审批"
  1160. approval.ApproveUserId = 0
  1161. approval.ApproveRoleTypeCode = approveRoleTypeCode
  1162. approval.ApproveRealName = ""
  1163. approval.ApproveTime = time.Now()
  1164. approval.ApproveContent = approveContent
  1165. approval.ApplyMethod = applyMethod
  1166. approval.ApplyReasons = ""
  1167. approval.ApplyUserId = sysUser.AdminId
  1168. approval.ApplyRealName = sysUser.RealName
  1169. approval.CreateTime = time.Now()
  1170. approval.ModifyTime = time.Now()
  1171. approval.CompanyContractId = int(newId)
  1172. approval.IsFormal = companyProduct.IsFormal
  1173. companyApprovalId, err = company.AddCompanyApproval(approval)
  1174. if err != nil {
  1175. br.Msg = "申请失败"
  1176. br.ErrMsg = "申请失败,Err:" + err.Error()
  1177. return
  1178. }
  1179. } else {
  1180. recode, err := company.GetCompanyApprovalByApprovalId(req.CompanyApprovalId)
  1181. if err != nil {
  1182. br.Msg = "申请失败"
  1183. br.ErrMsg = "获取审批记录失败,Err:" + err.Error()
  1184. return
  1185. }
  1186. err = company.ModifyCompanyTurnPositiveBySystemContract(contractDetail, permissionArr, req.CompanyId, productId, req.CompanyApprovalId, recode.CompanyContractId, companyProduct.IsFormal, packageType, raiPackageType)
  1187. if err != nil {
  1188. br.Msg = "申请失败"
  1189. br.ErrMsg = "申请失败,Err:" + err.Error()
  1190. return
  1191. }
  1192. companyApprovalId = req.CompanyApprovalId
  1193. }
  1194. //新增操作记录
  1195. {
  1196. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, approveUserId, companyProduct.CompanyName,
  1197. companyProduct.ProductName, sysUser.RealName, operationRemark, operation, recordApproveContent, approveUserRealName, "", companyProduct.Status)
  1198. }
  1199. //新增客户产品日志
  1200. {
  1201. logType := "modify"
  1202. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  1203. }
  1204. err = company_apply.Apply(companyApprovalId, messageContent)
  1205. if err != nil {
  1206. br.Msg = "发起审批异常,请联系管理员"
  1207. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  1208. return
  1209. }
  1210. //待办通知
  1211. //{
  1212. // for _, v := range approveUser {
  1213. // approveUserId = v.AdminId
  1214. // approveUserRealName = v.RealName
  1215. // mobile := v.Mobile
  1216. // err = services.AddCompanyApprovalMessage(sysUser.AdminId, approveUserId, req.CompanyId, companyApprovalId, 1, 1, 1, companyProduct.CompanyName, messageContent, messageContent, mobile)
  1217. // if err != nil {
  1218. // br.Msg = "申请失败"
  1219. // br.ErrMsg = "新增待办通知失败,Err:" + err.Error()
  1220. // return
  1221. // }
  1222. // }
  1223. //}
  1224. br.Ret = 200
  1225. br.Success = true
  1226. br.Msg = "申请成功"
  1227. }
  1228. // ApplyThaw
  1229. // @Title 申请解冻
  1230. // @Description 申请解冻接口
  1231. // @Param request body company.CompanyApplyThawReq true "type json string"
  1232. // @Success Ret=200 申请成功
  1233. // @router /apply/thaw [post]
  1234. func (this *CompanyApplyController) ApplyThaw() {
  1235. br := new(models.BaseResponse).Init()
  1236. defer func() {
  1237. this.Data["json"] = br
  1238. this.ServeJSON()
  1239. }()
  1240. sysUser := this.SysUser
  1241. if sysUser == nil {
  1242. br.Msg = "请登录"
  1243. br.ErrMsg = "请登录,SysUser Is Empty"
  1244. br.Ret = 408
  1245. return
  1246. }
  1247. var req company.CompanyApplyThawReq
  1248. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1249. if err != nil {
  1250. br.Msg = "参数解析异常!"
  1251. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1252. return
  1253. }
  1254. if req.CompanyId <= 0 {
  1255. br.Msg = "参数错误"
  1256. br.ErrMsg = "参数错误,客户id小于等于0"
  1257. return
  1258. }
  1259. roleTypeCode := sysUser.RoleTypeCode
  1260. productId := services.GetProductId(roleTypeCode)
  1261. if productId == 0 {
  1262. br.Msg = "参数错误"
  1263. br.ErrMsg = "客户类型为:" + roleTypeCode
  1264. return
  1265. }
  1266. if productId == utils.COMPANY_PRODUCT_FICC_ID && req.PermissionIds == "" {
  1267. br.Msg = "请勾选需要解冻的品种"
  1268. br.ErrMsg = "请勾选需要解冻的品种"
  1269. return
  1270. }
  1271. // 查询当前销售是否有重新申请的权限
  1272. receiveEnabled, _ := services.CheckCompanyReceiveButton(sysUser.AdminId)
  1273. if !receiveEnabled {
  1274. br.Msg = "无权申请"
  1275. br.ErrMsg = "无权申请"
  1276. return
  1277. }
  1278. //添加缓存,避免多次点击提交
  1279. {
  1280. deleteCache := true
  1281. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  1282. defer func() {
  1283. if deleteCache {
  1284. utils.Rc.Delete(cacheKey)
  1285. }
  1286. }()
  1287. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1288. deleteCache = false
  1289. br.Msg = "系统处理中,请勿重复操作"
  1290. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1291. return
  1292. }
  1293. }
  1294. var companyApprovalCount int //某一客户申请的次数
  1295. approveRoleTypeCode := ""
  1296. if productId == 1 {
  1297. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  1298. } else {
  1299. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  1300. companyApprovalCount, err = company.GetCompanyApprovalCount(req.CompanyId, productId, 2)
  1301. if err != nil {
  1302. br.Msg = "获取客户信息失败"
  1303. br.ErrMsg = "获取客户申请的次数失败,Err:" + err.Error()
  1304. return
  1305. }
  1306. }
  1307. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  1308. if err != nil {
  1309. br.Msg = "获取客户信息失败"
  1310. br.ErrMsg = "获取客户信息失败"
  1311. return
  1312. }
  1313. if companyProduct == nil {
  1314. br.Msg = "获取客户信息失败"
  1315. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  1316. return
  1317. }
  1318. if companyProduct.Status != utils.COMPANY_STATUS_FREEZE {
  1319. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行解冻申请"
  1320. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行解冻申请"
  1321. return
  1322. }
  1323. if companyProduct.ApproveStatus == utils.COMPANY_APPROVE_STATUS {
  1324. br.Msg = "存在待审批订单,不可重复提交"
  1325. return
  1326. }
  1327. companyItem, e := company.GetCompanyById(req.CompanyId)
  1328. if e != nil {
  1329. br.Msg = "客户信息有误"
  1330. br.ErrMsg = "获取客户信息失败, Err: " + e.Error()
  1331. return
  1332. }
  1333. //客户归属判断
  1334. if companyProduct.SellerId != sysUser.AdminId && companyItem.ShareSellerId != sysUser.AdminId {
  1335. br.Msg = "客户信息异常"
  1336. br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
  1337. return
  1338. }
  1339. // CRM8.8(仅针对权益客户)-此处同申请试用的逻辑
  1340. if companyProduct.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
  1341. reportPermissions, e := company.GetCompanyReportPermission(req.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
  1342. if e != nil {
  1343. br.Msg = "客户权限信息异常"
  1344. br.ErrMsg = "客户权限信息异常, Err: " + e.Error()
  1345. return
  1346. }
  1347. reportPermissionArr := make([]string, 0)
  1348. for i := range reportPermissions {
  1349. reportPermissionArr = append(reportPermissionArr, strconv.Itoa(reportPermissions[i].ChartPermissionId))
  1350. }
  1351. if len(reportPermissionArr) > 0 {
  1352. req.PermissionIds = strings.Join(reportPermissionArr, ",")
  1353. }
  1354. }
  1355. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  1356. if err != nil && err.Error() != utils.ErrNoRow() {
  1357. br.Msg = "获取审批信息失败"
  1358. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  1359. return
  1360. }
  1361. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  1362. br.Msg = "审批用户不存在"
  1363. br.ErrMsg = "审批用户不存在"
  1364. return
  1365. }
  1366. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新,6:正式客户补充协议
  1367. approveContent := `冻结转试用`
  1368. var companyApprovalId int
  1369. if req.CompanyApprovalId <= 0 {
  1370. applyMethod := 2
  1371. approval := new(company.CompanyApproval)
  1372. approval.CompanyId = req.CompanyId
  1373. approval.ProductId = productId
  1374. approval.ApproveStatus = "待审批"
  1375. approval.ApproveUserId = 0
  1376. approval.ApproveRoleTypeCode = approveRoleTypeCode
  1377. approval.ApproveRealName = ""
  1378. approval.ApproveTime = time.Now()
  1379. approval.ApproveContent = approveContent
  1380. approval.ApplyMethod = applyMethod
  1381. approval.ApplyReasons = req.ApplyRemark
  1382. approval.ApplyUserId = sysUser.AdminId
  1383. approval.ApplyRealName = sysUser.RealName
  1384. approval.CreateTime = time.Now()
  1385. approval.ModifyTime = time.Now()
  1386. companyApprovalId, err = company.AddCompanyApproval(approval)
  1387. if err != nil {
  1388. br.Msg = "申请失败"
  1389. br.ErrMsg = "申请失败,Err:" + err.Error()
  1390. return
  1391. }
  1392. } else {
  1393. err = company.ModifyCompanyApproval(req.CompanyId, productId, req.CompanyApprovalId, approveContent, req.ApplyRemark)
  1394. if err != nil {
  1395. br.Msg = "申请失败"
  1396. br.ErrMsg = "申请失败,Err:" + err.Error()
  1397. return
  1398. }
  1399. companyApprovalId = req.CompanyApprovalId
  1400. //先删除之前申请的权限
  1401. _ = company.DeleteCompanyDelayPermission(req.CompanyApprovalId)
  1402. }
  1403. //处理权限
  1404. {
  1405. if req.PermissionIds != "" {
  1406. // CRM8.8(仅针对权益客户)-此处不再去查询主观对应的客观, 而是根据客户之前拥有的权限来操作
  1407. //permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
  1408. //if err != nil {
  1409. // br.Msg = "获取信息失败"
  1410. // br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  1411. // return
  1412. //}
  1413. //req.PermissionIds = permissionStr
  1414. permissionArr := strings.Split(req.PermissionIds, ",")
  1415. for _, v := range permissionArr {
  1416. //fmt.Println(k, v)
  1417. //新增
  1418. if v != "" {
  1419. permissionId, err := strconv.Atoi(v)
  1420. if err != nil {
  1421. br.Msg = "申请失败"
  1422. br.ErrMsg = "权限格式转换失败,Err:" + err.Error()
  1423. return
  1424. }
  1425. delayItem := new(company.CompanyDelayPermission)
  1426. delayItem.CompanyId = req.CompanyId
  1427. delayItem.CompanyApplyId = companyApprovalId
  1428. delayItem.ChartPermissionId = permissionId
  1429. delayItem.StartDate = time.Now().Format(utils.FormatDate)
  1430. delayItem.EndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
  1431. delayItem.CreateTime = time.Now()
  1432. delayItem.ModifyTime = time.Now()
  1433. err = company.AddCompanyDelayPermission(delayItem)
  1434. if err != nil {
  1435. br.Msg = "申请失败"
  1436. br.ErrMsg = "新增冻结转试用审批权限失败,Err:" + err.Error()
  1437. return
  1438. }
  1439. }
  1440. }
  1441. }
  1442. }
  1443. //新增操作记录
  1444. {
  1445. remark := "申请解冻"
  1446. operation := "thaw"
  1447. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, 0, companyProduct.CompanyName,
  1448. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, "", "", companyProduct.Status)
  1449. }
  1450. //新增客户产品日志
  1451. {
  1452. logType := "modify"
  1453. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  1454. }
  1455. err = company_apply.Apply(companyApprovalId, "冻结转试用申请单")
  1456. if err != nil {
  1457. br.Msg = "发起审批异常,请联系管理员"
  1458. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  1459. return
  1460. }
  1461. if companyApprovalCount == 0 && productId == 2 {
  1462. //获取王芳信息,自动审批使用
  1463. approvalUserInfo, err := system.CheckSysUserByName("王芳", utils.ROLE_TYPE_CODE_RAI_ADMIN)
  1464. if err != nil {
  1465. br.Msg = "权益客户自动审批失败,请联系管理员"
  1466. br.ErrMsg = "审批失败,Err:" + err.Error()
  1467. return
  1468. }
  1469. //数据校验(校验是否具有审批权限)
  1470. _, _, approvalRecord, err := company_apply.CheckApproveAuth(req.CompanyId, productId, approvalUserInfo)
  1471. if err != nil {
  1472. br.Msg = "权益客户自动审批失败,请联系管理员"
  1473. br.ErrMsg = "校验是否具有审批权限失败,Err:" + err.Error()
  1474. return
  1475. }
  1476. err = company_apply.Approved(approvalRecord, approvalUserInfo, "权益客首次申请解冻自动审批通过")
  1477. if err != nil {
  1478. br.Msg = "权益客户自动审批失败,请联系管理员!"
  1479. br.ErrMsg = "审核失败,Err:" + err.Error()
  1480. return
  1481. }
  1482. }
  1483. br.Ret = 200
  1484. br.Success = true
  1485. br.Msg = "申请成功"
  1486. }
  1487. // ApplyDelay
  1488. // @Title 申请延期
  1489. // @Description 申请延期接口
  1490. // @Param request body company.CompanyApplyDelayReq true "type json string"
  1491. // @Success Ret=200 申请成功
  1492. // @router /apply/delay [post]
  1493. func (this *CompanyApplyController) ApplyDelay() {
  1494. br := new(models.BaseResponse).Init()
  1495. defer func() {
  1496. this.Data["json"] = br
  1497. this.ServeJSON()
  1498. }()
  1499. sysUser := this.SysUser
  1500. if sysUser == nil {
  1501. br.Msg = "请登录"
  1502. br.ErrMsg = "请登录,SysUser Is Empty"
  1503. br.Ret = 408
  1504. return
  1505. }
  1506. var req company.CompanyApplyDelayReq
  1507. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1508. if err != nil {
  1509. br.Msg = "参数解析异常!"
  1510. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1511. return
  1512. }
  1513. if req.CompanyId <= 0 {
  1514. br.Msg = "参数错误"
  1515. br.ErrMsg = "参数错误,客户id小于等于0"
  1516. return
  1517. }
  1518. roleTypeCode := sysUser.RoleTypeCode
  1519. productId := services.GetProductId(roleTypeCode)
  1520. if productId == 0 {
  1521. br.Msg = "参数错误"
  1522. br.ErrMsg = "客户类型为:" + roleTypeCode
  1523. return
  1524. }
  1525. if productId == utils.COMPANY_PRODUCT_FICC_ID && req.PermissionIds == "" {
  1526. br.Msg = "请勾选需要延期的品种"
  1527. br.ErrMsg = "请勾选需要延期的品种"
  1528. return
  1529. }
  1530. //添加缓存,避免多次点击提交
  1531. {
  1532. deleteCache := true
  1533. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  1534. defer func() {
  1535. if deleteCache {
  1536. utils.Rc.Delete(cacheKey)
  1537. }
  1538. }()
  1539. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1540. deleteCache = false
  1541. br.Msg = "系统处理中,请勿重复操作"
  1542. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1543. return
  1544. }
  1545. }
  1546. approveRoleTypeCode := ""
  1547. if productId == 1 {
  1548. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  1549. } else {
  1550. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  1551. }
  1552. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  1553. if err != nil {
  1554. br.Msg = "获取客户信息失败"
  1555. br.ErrMsg = "获取客户信息失败"
  1556. return
  1557. }
  1558. if companyProduct == nil {
  1559. br.Msg = "获取客户信息失败"
  1560. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  1561. return
  1562. }
  1563. if companyProduct.Status != utils.COMPANY_STATUS_TRY_OUT {
  1564. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行延期申请"
  1565. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行延期申请"
  1566. return
  1567. }
  1568. if companyProduct.ApproveStatus == "待审批" {
  1569. br.Msg = "存在待审批订单,不可重复提交"
  1570. return
  1571. }
  1572. companyItem, e := company.GetCompanyById(req.CompanyId)
  1573. if e != nil {
  1574. br.Msg = "客户信息有误"
  1575. br.ErrMsg = "获取客户信息失败, Err: " + e.Error()
  1576. return
  1577. }
  1578. //客户归属判断
  1579. if companyProduct.SellerId != sysUser.AdminId && companyItem.ShareSellerId != sysUser.AdminId {
  1580. br.Msg = "客户信息异常"
  1581. br.ErrMsg = "客户信息异常,不是当前所属销售,客户所属销售:" + companyProduct.SellerName + ";当前销售:" + sysUser.AdminName
  1582. return
  1583. }
  1584. // CRM8.8(仅针对权益客户)-申请延期的权限不再进行选择, 而是自动将所有的试用权限延期
  1585. if companyProduct.ProductId == utils.COMPANY_PRODUCT_RAI_ID {
  1586. reportPermissions, e := company.GetCompanyReportPermission(req.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
  1587. if e != nil {
  1588. br.Msg = "客户权限信息异常"
  1589. br.ErrMsg = "客户权限信息异常, Err: " + e.Error()
  1590. return
  1591. }
  1592. reportPermissionArr := make([]string, 0)
  1593. for i := range reportPermissions {
  1594. reportPermissionArr = append(reportPermissionArr, strconv.Itoa(reportPermissions[i].ChartPermissionId))
  1595. }
  1596. if len(reportPermissionArr) > 0 {
  1597. req.PermissionIds = strings.Join(reportPermissionArr, ",")
  1598. }
  1599. }
  1600. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  1601. if err != nil && err.Error() != utils.ErrNoRow() {
  1602. br.Msg = "获取审批信息失败"
  1603. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  1604. return
  1605. }
  1606. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  1607. br.Msg = "审批用户不存在"
  1608. br.ErrMsg = "审批用户不存在"
  1609. return
  1610. }
  1611. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新,6:正式客户补充协议
  1612. approveContent := `试用延期`
  1613. var companyApprovalId int
  1614. utils.FileLog.Info("试用延期申请:%d", req.CompanyApprovalId)
  1615. if req.CompanyApprovalId > 0 {
  1616. utils.FileLog.Info("试用延期申请:%d", req.CompanyApprovalId)
  1617. err = company.ModifyCompanyApproval(req.CompanyId, productId, req.CompanyApprovalId, approveContent, req.ApplyRemark)
  1618. if err != nil {
  1619. br.Msg = "申请失败"
  1620. br.ErrMsg = "申请失败,Err:" + err.Error()
  1621. return
  1622. }
  1623. companyApprovalId = req.CompanyApprovalId
  1624. } else {
  1625. applyMethod := 3
  1626. approval := new(company.CompanyApproval)
  1627. approval.CompanyId = req.CompanyId
  1628. approval.ProductId = productId
  1629. approval.ApproveStatus = "待审批"
  1630. approval.ApproveUserId = 0
  1631. approval.ApproveRoleTypeCode = approveRoleTypeCode
  1632. approval.ApproveRealName = ""
  1633. approval.ApproveTime = time.Now()
  1634. approval.ApproveContent = "试用延期"
  1635. approval.ApplyMethod = applyMethod
  1636. approval.ApplyReasons = req.ApplyRemark
  1637. approval.ApplyUserId = sysUser.AdminId
  1638. approval.ApplyRealName = sysUser.RealName
  1639. approval.CreateTime = time.Now()
  1640. approval.ModifyTime = time.Now()
  1641. companyApprovalId, err = company.AddCompanyApproval(approval)
  1642. if err != nil {
  1643. br.Msg = "申请失败"
  1644. br.ErrMsg = "申请失败,Err:" + err.Error()
  1645. return
  1646. }
  1647. }
  1648. //处理权限
  1649. {
  1650. if req.PermissionIds != "" {
  1651. // CRM8.8(仅针对权益客户)-此处不再去查询主观对应的客观, 而是根据客户之前拥有的权限来操作
  1652. //permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
  1653. //if err != nil {
  1654. // br.Msg = "获取信息失败"
  1655. // br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  1656. // return
  1657. //}
  1658. //req.PermissionIds = permissionStr
  1659. permissionArr := strings.Split(req.PermissionIds, ",")
  1660. //如果是编辑的话,删除原先相关的所有品种权限
  1661. if req.CompanyApprovalId > 0 {
  1662. err = company.DeleteCompanyDelayPermission(req.CompanyApprovalId)
  1663. if err != nil {
  1664. br.Msg = "申请失败"
  1665. br.ErrMsg = "删除之前的申请记录失败,Err:" + err.Error()
  1666. return
  1667. }
  1668. }
  1669. for k, v := range permissionArr {
  1670. fmt.Println(k, v)
  1671. permissionId, _ := strconv.Atoi(v)
  1672. //companyId, companyApplyId, chartPermissionId int
  1673. count, err := company.GetDelayPermissionCount(req.CompanyId, companyApprovalId, permissionId)
  1674. if err != nil && err.Error() != utils.ErrNoRow() {
  1675. br.Msg = "申请失败"
  1676. br.ErrMsg = "判断权限是否存在失败,Err:" + err.Error()
  1677. return
  1678. }
  1679. if count > 0 { //修改
  1680. err = company.ModifyCompanyDelayPermission(req.CompanyId, companyApprovalId, permissionId)
  1681. if err != nil {
  1682. br.Msg = "申请失败"
  1683. br.ErrMsg = "修改权限失败,Err:" + err.Error()
  1684. return
  1685. }
  1686. } else { //新增
  1687. if v != "" {
  1688. permissionId, err := strconv.Atoi(v)
  1689. if err != nil {
  1690. br.Msg = "申请失败"
  1691. br.ErrMsg = "权限格式转换失败,Err:" + err.Error()
  1692. return
  1693. }
  1694. delayItem := new(company.CompanyDelayPermission)
  1695. delayItem.CompanyId = req.CompanyId
  1696. delayItem.CompanyApplyId = companyApprovalId
  1697. delayItem.ChartPermissionId = permissionId
  1698. delayItem.StartDate = time.Now().Format(utils.FormatDate)
  1699. delayItem.EndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
  1700. delayItem.CreateTime = time.Now()
  1701. delayItem.ModifyTime = time.Now()
  1702. err = company.AddCompanyDelayPermission(delayItem)
  1703. if err != nil {
  1704. br.Msg = "申请失败"
  1705. br.ErrMsg = "新增延期审批权限失败,Err:" + err.Error()
  1706. return
  1707. }
  1708. }
  1709. }
  1710. }
  1711. }
  1712. }
  1713. //新增操作记录
  1714. {
  1715. remark := "申请延期"
  1716. operation := "delay"
  1717. go services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, 0, companyProduct.CompanyName,
  1718. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, "", "", companyProduct.Status)
  1719. }
  1720. //新增客户产品日志
  1721. {
  1722. logType := "modify"
  1723. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  1724. }
  1725. err = company_apply.Apply(companyApprovalId, "试用延期申请单")
  1726. if err != nil {
  1727. br.Msg = "发起审批异常,请联系管理员"
  1728. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  1729. return
  1730. }
  1731. br.Ret = 200
  1732. br.Success = true
  1733. br.Msg = "申请成功"
  1734. }
  1735. // ApplyReceive
  1736. // @Title 申请领取
  1737. // @Description 申请领取接口
  1738. // @Param request body company.CompanyApplyReceiveReq true "type json string"
  1739. // @Success Ret=200 申请成功
  1740. // @router /apply/receive [post]
  1741. func (this *CompanyApplyController) ApplyReceive() {
  1742. br := new(models.BaseResponse).Init()
  1743. defer func() {
  1744. this.Data["json"] = br
  1745. this.ServeJSON()
  1746. }()
  1747. sysUser := this.SysUser
  1748. if sysUser == nil {
  1749. br.Msg = "请登录"
  1750. br.ErrMsg = "请登录,SysUser Is Empty"
  1751. br.Ret = 408
  1752. return
  1753. }
  1754. var req company.CompanyApplyReceiveReq
  1755. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1756. if err != nil {
  1757. br.Msg = "参数解析异常!"
  1758. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1759. return
  1760. }
  1761. if req.CompanyId <= 0 {
  1762. br.Msg = "参数错误"
  1763. br.ErrMsg = "参数错误,客户id小于等于0"
  1764. return
  1765. }
  1766. // 查询当前销售是否有领取客户的权限
  1767. receiveEnabled, _ := services.CheckCompanyReceiveButton(sysUser.AdminId)
  1768. if !receiveEnabled {
  1769. br.Msg = "领取失败,您目前没有领取客户的权限"
  1770. br.ErrMsg = "领取失败,您目前没有领取客户的权限"
  1771. return
  1772. }
  1773. roleTypeCode := sysUser.RoleTypeCode
  1774. productId := services.GetProductId(roleTypeCode)
  1775. if productId == 0 {
  1776. br.Msg = "参数错误"
  1777. br.ErrMsg = "客户类型为:" + roleTypeCode
  1778. return
  1779. }
  1780. //添加缓存,避免多次点击提交
  1781. {
  1782. deleteCache := true
  1783. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  1784. defer func() {
  1785. if deleteCache {
  1786. utils.Rc.Delete(cacheKey)
  1787. }
  1788. }()
  1789. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1790. deleteCache = false
  1791. br.Msg = "系统处理中,请勿重复操作"
  1792. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1793. return
  1794. }
  1795. }
  1796. approveRoleTypeCode := ""
  1797. if productId == 1 {
  1798. approveRoleTypeCode = utils.ROLE_TYPE_CODE_FICC_ADMIN
  1799. } else {
  1800. approveRoleTypeCode = utils.ROLE_TYPE_CODE_RAI_ADMIN
  1801. }
  1802. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  1803. if err != nil {
  1804. br.Msg = "获取客户信息失败"
  1805. br.ErrMsg = "获取客户信息失败"
  1806. return
  1807. }
  1808. if companyProduct == nil {
  1809. br.Msg = "获取客户信息失败"
  1810. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  1811. return
  1812. }
  1813. if companyProduct.Status != utils.COMPANY_STATUS_LOSE {
  1814. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行延期申请"
  1815. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行延期申请"
  1816. return
  1817. }
  1818. if companyProduct.ApproveStatus == "待审批" {
  1819. br.Msg = "存在待审批订单,不可重复提交"
  1820. return
  1821. }
  1822. approveUser, err := company.GetApproveUser(approveRoleTypeCode)
  1823. if err != nil && err.Error() != utils.ErrNoRow() {
  1824. br.Msg = "获取审批信息失败"
  1825. br.ErrMsg = "获取审批人信息失败,Err:" + err.Error()
  1826. return
  1827. }
  1828. if approveUser == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  1829. br.Msg = "审批用户不存在"
  1830. br.ErrMsg = "审批用户不存在"
  1831. return
  1832. }
  1833. approveContent := `原销售申领客户`
  1834. applyMethod := 4
  1835. var companyApprovalId int
  1836. //申请类型:1:试用->正式,2:冻结—>试用,3:试用延期,4:原销售申请领取流失客户,5:正式客户申请服务更新,6:正式客户补充协议
  1837. if req.CompanyApprovalId <= 0 {
  1838. approval := new(company.CompanyApproval)
  1839. approval.CompanyId = req.CompanyId
  1840. approval.ProductId = productId
  1841. approval.ApproveStatus = "待审批"
  1842. approval.ApproveUserId = 0
  1843. approval.ApproveRoleTypeCode = approveRoleTypeCode
  1844. approval.ApproveRealName = ""
  1845. approval.ApproveTime = time.Now()
  1846. approval.ApproveContent = approveContent
  1847. approval.ApplyMethod = applyMethod
  1848. approval.ApplyReasons = req.ApplyRemark
  1849. approval.ApplyUserId = sysUser.AdminId
  1850. approval.ApplyRealName = sysUser.RealName
  1851. approval.CreateTime = time.Now()
  1852. approval.ModifyTime = time.Now()
  1853. companyApprovalId, err = company.AddCompanyApproval(approval)
  1854. if err != nil {
  1855. br.Msg = "申请失败"
  1856. br.ErrMsg = "申请失败,Err:" + err.Error()
  1857. return
  1858. }
  1859. } else {
  1860. err = company.ModifyCompanyApproval(req.CompanyId, productId, req.CompanyApprovalId, approveContent, req.ApplyRemark)
  1861. if err != nil {
  1862. br.Msg = "申请失败"
  1863. br.ErrMsg = "申请失败,Err:" + err.Error()
  1864. return
  1865. }
  1866. companyApprovalId = req.CompanyApprovalId
  1867. //先删除之前申请的权限
  1868. _ = company.DeleteCompanyDelayPermission(req.CompanyApprovalId)
  1869. }
  1870. //处理权限
  1871. {
  1872. if req.PermissionIds != "" {
  1873. permissionStr, err := company.GetPermissionIdById(req.PermissionIds)
  1874. if err != nil {
  1875. br.Msg = "获取信息失败"
  1876. br.ErrMsg = "获取主观客观权限信息失败,Err:" + err.Error()
  1877. return
  1878. }
  1879. req.PermissionIds = permissionStr
  1880. permissionArr := strings.Split(req.PermissionIds, ",")
  1881. for _, v := range permissionArr {
  1882. if v != "" {
  1883. permissionId, err := strconv.Atoi(v)
  1884. if err != nil {
  1885. br.Msg = "申请失败"
  1886. br.ErrMsg = "权限格式转换失败,Err:" + err.Error()
  1887. return
  1888. }
  1889. delayItem := new(company.CompanyDelayPermission)
  1890. delayItem.CompanyId = req.CompanyId
  1891. delayItem.CompanyApplyId = companyApprovalId
  1892. delayItem.ChartPermissionId = permissionId
  1893. delayItem.StartDate = time.Now().Format(utils.FormatDate)
  1894. delayItem.EndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
  1895. delayItem.CreateTime = time.Now()
  1896. delayItem.ModifyTime = time.Now()
  1897. err = company.AddCompanyDelayPermission(delayItem)
  1898. if err != nil {
  1899. br.Msg = "申请失败"
  1900. br.ErrMsg = "新增领取客户审批权限失败,Err:" + err.Error()
  1901. return
  1902. }
  1903. }
  1904. }
  1905. }
  1906. }
  1907. //新增操作记录
  1908. {
  1909. remark := "申请领取"
  1910. operation := "apply_receive"
  1911. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, 0, companyProduct.CompanyName,
  1912. companyProduct.ProductName, sysUser.RealName, remark, operation, approveContent, "", "", companyProduct.Status)
  1913. }
  1914. //新增客户产品日志
  1915. {
  1916. logType := "modify"
  1917. go services.AddCompanyProductLog(companyProduct, this.SysUser.AdminId, logType)
  1918. }
  1919. err = company_apply.Apply(companyApprovalId, "申请领取申请单")
  1920. if err != nil {
  1921. br.Msg = "发起审批异常,请联系管理员"
  1922. br.ErrMsg = "客户审批发起异常,Err:" + err.Error()
  1923. return
  1924. }
  1925. br.Ret = 200
  1926. br.Success = true
  1927. br.Msg = "申请成功"
  1928. }
  1929. // ApplyRevoke
  1930. // @Title 申请撤回
  1931. // @Description 申请撤回接口
  1932. // @Param request body company.CompanyApplyRevokeReq true "type json string"
  1933. // @Success Ret=200 成功
  1934. // @router /apply/revoke [post]
  1935. func (this *CompanyApprovalController) ApplyRevoke() {
  1936. br := new(models.BaseResponse).Init()
  1937. defer func() {
  1938. this.Data["json"] = br
  1939. this.ServeJSON()
  1940. }()
  1941. sysUser := this.SysUser
  1942. if sysUser == nil {
  1943. br.Msg = "请登录"
  1944. br.ErrMsg = "请登录,SysUser Is Empty"
  1945. br.Ret = 408
  1946. return
  1947. }
  1948. var req company.CompanyApplyRevokeReq
  1949. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1950. if err != nil {
  1951. br.Msg = "参数解析异常!"
  1952. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1953. return
  1954. }
  1955. if req.CompanyId <= 0 {
  1956. br.Msg = "参数错误"
  1957. br.ErrMsg = "客户Id小于等于0:"
  1958. return
  1959. }
  1960. roleTypeCode := sysUser.RoleTypeCode
  1961. productId := services.GetProductId(roleTypeCode)
  1962. if productId == 0 {
  1963. br.Msg = "参数错误"
  1964. br.ErrMsg = "客户类型为:" + roleTypeCode
  1965. return
  1966. }
  1967. //添加缓存,避免多次点击提交
  1968. {
  1969. deleteCache := true
  1970. cacheKey := "CACHE_COMPANY_APPLY_" + strconv.Itoa(req.CompanyId) + "_" + strconv.Itoa(productId)
  1971. defer func() {
  1972. if deleteCache {
  1973. utils.Rc.Delete(cacheKey)
  1974. }
  1975. }()
  1976. if !utils.Rc.SetNX(cacheKey, 1, 30*time.Second) {
  1977. deleteCache = false
  1978. br.Msg = "系统处理中,请勿重复操作"
  1979. br.ErrMsg = "系统处理中,请勿重复操作" + sysUser.RealName + ";data:" + string(this.Ctx.Input.RequestBody)
  1980. return
  1981. }
  1982. }
  1983. companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(req.CompanyId, productId)
  1984. if err != nil {
  1985. br.Msg = "获取客户信息失败"
  1986. br.ErrMsg = "获取客户信息失败"
  1987. return
  1988. }
  1989. if companyProduct == nil {
  1990. br.Msg = "获取客户信息失败"
  1991. br.ErrMsg = "客户不存在,不可提交审批:companyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  1992. return
  1993. }
  1994. approvalItem, err := company.GetCompanyApprovalById(req.CompanyId, productId)
  1995. if err != nil {
  1996. if err.Error() == utils.ErrNoRow() {
  1997. br.Msg = "待审批信息不存在"
  1998. br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  1999. return
  2000. }
  2001. br.Msg = "获取信息失败"
  2002. br.ErrMsg = "获取信息失败,Err:" + err.Error()
  2003. return
  2004. }
  2005. if approvalItem == nil {
  2006. br.Msg = "待审批信息不存在"
  2007. br.ErrMsg = "待审批信息不存在,CompanyId:" + strconv.Itoa(req.CompanyId) + ";productId:" + strconv.Itoa(productId)
  2008. return
  2009. }
  2010. if approvalItem.ApproveStatus != "待审批" {
  2011. br.Msg = "客户状态为:" + companyProduct.Status + ";不可进行撤回操作"
  2012. br.ErrMsg = "客户状态为:" + companyProduct.Status + ";不可进行撤回操作"
  2013. return
  2014. }
  2015. //撤回审批单
  2016. err = company_apply.CancelApply(approvalItem, sysUser.AdminId)
  2017. if err != nil {
  2018. br.Msg = "撤回失败"
  2019. br.ErrMsg = "撤回失败,Err:" + err.Error()
  2020. return
  2021. }
  2022. //真正撤回操作
  2023. err = company.ApplyRevoke(approvalItem.CompanyApprovalId, approvalItem.CompanyId, approvalItem.ProductId)
  2024. if err != nil {
  2025. br.Msg = "撤回失败"
  2026. br.ErrMsg = "撤回失败,Err:" + err.Error()
  2027. return
  2028. }
  2029. //新增操作记录
  2030. {
  2031. remark := "撤回"
  2032. operation := "apply_revoke"
  2033. services.AddCompanyOperationRecord(req.CompanyId, companyProduct.SellerId, sysUser.AdminId, productId, 0, companyProduct.CompanyName,
  2034. companyProduct.ProductName, sysUser.RealName, remark, operation, "", "", "", companyProduct.Status)
  2035. }
  2036. br.Ret = 200
  2037. br.Success = true
  2038. br.Msg = "撤回成功"
  2039. }