company_apply_v2.go 75 KB

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