company_apply_v2.go 74 KB

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