contract_allocation.go 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734
  1. package cygx
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/controllers"
  7. "hongze/hz_crm_api/models"
  8. "hongze/hz_crm_api/models/company"
  9. "hongze/hz_crm_api/models/contract"
  10. "hongze/hz_crm_api/models/cygx"
  11. "hongze/hz_crm_api/models/system"
  12. "hongze/hz_crm_api/utils"
  13. "strconv"
  14. "strings"
  15. "time"
  16. )
  17. // ContractAllocationController 权益合同派单
  18. type ContractAllocationController struct {
  19. controllers.BaseAuthController
  20. }
  21. // getQueryParams 获取基础查询信息
  22. func getQueryParams(condition string, pars []interface{}, sysUser *system.Admin, tableAlias string) (newCondition string, newPars []interface{}) {
  23. if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_ADMIN {
  24. condition += " AND " + tableAlias + "product_id=?"
  25. pars = append(pars, 1)
  26. } else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_ADMIN {
  27. condition += " AND " + tableAlias + "product_id=?"
  28. pars = append(pars, 2)
  29. } else if sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_ADMIN || sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FINANCE {
  30. //超级管理员账户,不做条件限制
  31. } else {
  32. //如果不是研究员,那么去找对应的 部门、小组、销售
  33. if sysUser.Authority == 0 {
  34. //普通用户
  35. condition += " AND " + tableAlias + "seller_id=?"
  36. pars = append(pars, sysUser.AdminId)
  37. } else if sysUser.Authority == 1 {
  38. //部门主管
  39. condition += " AND " + tableAlias + "department_id=?"
  40. pars = append(pars, sysUser.DepartmentId)
  41. } else if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_RAI_GROUP {
  42. //权益小组负责人
  43. condition += " AND " + tableAlias + "group_id=?"
  44. pars = append(pars, sysUser.GroupId)
  45. } else if sysUser.Authority == 2 && sysUser.RoleTypeCode == utils.ROLE_TYPE_CODE_FICC_GROUP {
  46. //ficc销售主管
  47. pid, err := company.GetParentIdFromGroup(sysUser.GroupId)
  48. if err != nil {
  49. fmt.Println(err.Error())
  50. return
  51. }
  52. var ids []*string
  53. if pid != nil && *pid != 0 {
  54. ids, err = company.GetGroupIdsByParentId(*pid)
  55. if err != nil {
  56. fmt.Println(err.Error())
  57. }
  58. } else {
  59. ids, err = company.GetGroupIdsByParentId(sysUser.GroupId)
  60. if err != nil {
  61. fmt.Println(err.Error())
  62. }
  63. }
  64. var idSlice []string
  65. var sid string
  66. for _, id := range ids {
  67. idSlice = append(idSlice, *id)
  68. }
  69. //加入父级groupId
  70. if *pid > 0 {
  71. idSlice = append(idSlice, strconv.Itoa(*pid))
  72. } else {
  73. idSlice = append(idSlice, strconv.Itoa(sysUser.GroupId))
  74. }
  75. sid = strings.Join(idSlice, ",")
  76. condition += " AND " + tableAlias + `group_id IN (` + sid + `) `
  77. fmt.Println("condition:", condition)
  78. //pars = append(pars, sysUser.GroupId)
  79. } else if sysUser.Authority == 4 {
  80. //ficc小组负责人
  81. condition += " AND " + tableAlias + "group_id=?"
  82. pars = append(pars, sysUser.GroupId)
  83. } else {
  84. //不知道什么类型的用户(后面新增的位置类型客户)
  85. condition += " AND " + tableAlias + "seller_id=?"
  86. pars = append(pars, sysUser.AdminId)
  87. }
  88. }
  89. newCondition = condition
  90. newPars = pars
  91. return
  92. }
  93. // @Title 合同列表
  94. // @Description 合同列表接口
  95. // @Param PageSize query int true "每页数据条数"
  96. // @Param CurrentIndex query int true "当前页页码,从1开始"
  97. // @Param Keyword query string true "客户名称"
  98. // @Param AdminId query string true "销售id,多个用英文逗号隔开,空字符串为全部"
  99. // @Param StartDate query string false "开始日期"
  100. // @Param EndDate query string false "结束日期"
  101. // @Param ContractType query string false "合同类型,枚举值:“,`新签合同`,`续约合同`,`补充协议`"
  102. // @Param FormalType query string false "转正类型,枚举值:“,`标准`,`非标`"
  103. // @Param IsExport query bool false "是否导出excel,默认是false"
  104. // @Param IsAllocation query int false "派点状态: -1-默认全部; 0-未派点; 1-已派点"
  105. // @Success 200 {object} cygx.CompanyContractListResp
  106. // @router /allocation/company_contract_list [get]
  107. func (this *ContractAllocationController) CompanyContractList() {
  108. br := new(models.BaseResponse).Init()
  109. defer func() {
  110. this.Data["json"] = br
  111. this.ServeJSON()
  112. }()
  113. sysUser := this.SysUser
  114. if sysUser == nil {
  115. br.Msg = "请登录"
  116. br.ErrMsg = "请登录,SysUser Is Empty"
  117. br.Ret = 408
  118. return
  119. }
  120. pageSize, _ := this.GetInt("PageSize")
  121. currentIndex, _ := this.GetInt("CurrentIndex")
  122. adminId := this.GetString("AdminId")
  123. formalType := this.GetString("FormalType")
  124. contractType := this.GetString("ContractType")
  125. keyword := this.GetString("Keyword")
  126. startDate := this.GetString("StartDate")
  127. endDate := this.GetString("EndDate")
  128. isAllocation, _ := this.GetInt("IsAllocation", -1) // CRM 13.9
  129. if startDate == "" {
  130. startDate = "2015-01-01"
  131. }
  132. if endDate == "" {
  133. endDate = time.Now().Format(utils.FormatDate)
  134. }
  135. var startSize int
  136. if pageSize <= 0 {
  137. pageSize = utils.PageSize20
  138. }
  139. if currentIndex <= 0 {
  140. currentIndex = 1
  141. }
  142. startSize = utils.StartIndex(currentIndex, pageSize)
  143. //是否导出报表
  144. isExport, _ := this.GetBool("IsExport")
  145. if isExport {
  146. pageSize = 10000
  147. currentIndex = 1
  148. }
  149. var condition string
  150. var pars []interface{}
  151. //条件
  152. if adminId != "" {
  153. condition += ` AND c.seller_id in (` + adminId + `) `
  154. //pars = append(pars, adminId)
  155. } else {
  156. //根据当前角色来获取查询条件
  157. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  158. }
  159. //关键字搜索
  160. if keyword != "" {
  161. condition += ` and b.company_name like "%` + keyword + `%" `
  162. }
  163. //是否派点
  164. if isAllocation != -1 {
  165. condition += ` AND a.product_id = ? `
  166. pars = append(pars, isAllocation)
  167. }
  168. // 标准非标查询
  169. switch formalType {
  170. case "标准":
  171. condition += ` AND a.source = ? `
  172. pars = append(pars, "系统合同")
  173. case "非标":
  174. condition += ` AND a.source = ? `
  175. pars = append(pars, "上传附件")
  176. }
  177. if contractType != "" {
  178. condition += ` AND a.contract_type = ? `
  179. pars = append(pars, contractType)
  180. }
  181. //默认只查询权益 2023-06-01 之后的合同
  182. condition += ` AND c.product_id = ? AND a.start_date > ? `
  183. pars = append(pars, 2, "2023-06-01")
  184. var list []*cygx.CompanyContractResp
  185. total, err := cygx.GetCompanyContractCountJoinCompany(condition, pars)
  186. if err != nil && err.Error() != utils.ErrNoRow() {
  187. br.Msg = "获取失败"
  188. br.ErrMsg = "获取失败,Err:" + err.Error()
  189. return
  190. }
  191. //列表页数据
  192. list, err = cygx.GetCompanyContractListJoinCompany(condition, pars, startSize, pageSize)
  193. if err != nil {
  194. br.Msg = "获取失败"
  195. br.ErrMsg = "获取失败,Err:" + err.Error()
  196. return
  197. }
  198. listLen := len(list)
  199. if listLen == 0 {
  200. list = make([]*cygx.CompanyContractResp, 0)
  201. } else {
  202. var contractCodes []string
  203. for _, v := range list {
  204. switch v.Source {
  205. case "系统合同":
  206. v.FormalType = "标准"
  207. case "上传附件":
  208. v.FormalType = "非标"
  209. }
  210. contractCodes = append(contractCodes, v.ContractCode)
  211. }
  212. lencontractCodes := len(contractCodes)
  213. if lencontractCodes > 0 {
  214. //获取标准合同的ID,这里上面的查询已经关联了三张表,拆分吧。。。
  215. condition = ""
  216. joinStr := ""
  217. pars = make([]interface{}, 0)
  218. condition = " AND a.contract_code IN (" + utils.GetOrmInReplace(lencontractCodes) + ") "
  219. pars = append(pars, contractCodes)
  220. listContract, err := contract.GetContractList(condition, joinStr, pars, 0, lencontractCodes)
  221. if err != nil {
  222. br.Msg = "获取合同列表失败!"
  223. br.ErrMsg = "获取合同列表失败,Err:" + err.Error()
  224. return
  225. }
  226. mapContractCode := make(map[string]int)
  227. for _, v := range listContract {
  228. mapContractCode[v.ContractCode] = v.ContractId
  229. }
  230. for _, v := range list {
  231. v.ContractId = mapContractCode[v.ContractCode]
  232. }
  233. }
  234. }
  235. page := paging.GetPaging(currentIndex, pageSize, total)
  236. resp := cygx.CompanyContractListResp{
  237. Paging: page,
  238. List: list,
  239. }
  240. //导出excel
  241. if isExport {
  242. //IncrementalCompanyListExport(this, dataType, resp, br)
  243. return
  244. }
  245. br.Ret = 200
  246. br.Success = true
  247. br.Msg = "获取成功"
  248. br.Data = resp
  249. }
  250. // @Title 详情
  251. // @Description 获取详情接口
  252. // @Param CompanyContractId query int true "ID"
  253. // @Param ShowDetail query bool false "是否是派点详情展示"
  254. // @Success Ret=200 {object} cygx.CygxAllocationCompanyContractDetailResp
  255. // @router /allocation/detail [get]
  256. func (this *ContractAllocationController) CompanyContracDetail() {
  257. br := new(models.BaseResponse).Init()
  258. defer func() {
  259. this.Data["json"] = br
  260. this.ServeJSON()
  261. }()
  262. AdminUser := this.SysUser
  263. if AdminUser == nil {
  264. br.Msg = "请登录"
  265. br.ErrMsg = "请登录,用户信息为空"
  266. br.Ret = 408
  267. return
  268. }
  269. resp := new(cygx.CygxAllocationCompanyContractDetailResp)
  270. companyContractId, _ := this.GetInt("CompanyContractId")
  271. if companyContractId < 1 {
  272. br.Msg = "请输入详情ID"
  273. return
  274. }
  275. showDetail, _ := this.GetBool("ShowDetail", false)
  276. contractItem, err := company.GetCompanyContractById(companyContractId)
  277. if err != nil {
  278. br.Msg = "获取信息失败"
  279. br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
  280. return
  281. }
  282. total, err := cygx.GetCygxAllocationCompanyContractCountByCompanyContractId(companyContractId)
  283. if err != nil {
  284. br.Msg = "获取信息失败"
  285. br.ErrMsg = "获取合同信息失败,GetCygxAllocationCompanyContractCountByCompanyContractId Err:" + err.Error()
  286. return
  287. }
  288. //var contractPermissionList []*company.ContractPermissionList
  289. expMap := map[int]string{0: "(3w)", 1: "(5w)"} // 买方研选价格
  290. //classifyName := "权益"
  291. //plist := new(company.ContractPermissionList)
  292. hasPermissions, e := company.GetCompanyContractPermissionByCompanyContractId(companyContractId)
  293. if e != nil {
  294. br.Msg = "获取失败"
  295. br.ErrMsg = "获取合同权限信息失败,Err:" + e.Error()
  296. return
  297. }
  298. hasMap := make(map[int]*company.CompanyContractPermission)
  299. for _, p := range hasPermissions {
  300. hasMap[p.ChartPermissionId] = p
  301. }
  302. checkItems := make([]*company.PermissionLookItem, 0)
  303. // PS:本来想把这个移到循环外面去优化一下...但是发现有指针引用变量被改掉的问题, BUG太多了改不完了先这样吧=_=!
  304. raiPermissions, e := company.GetPermissionLookItemsExt("2", utils.COMPANY_PRODUCT_RAI_NAME)
  305. if e != nil {
  306. br.Msg = "获取失败"
  307. br.ErrMsg = "获取权益权限列表失败, Err: " + e.Error()
  308. return
  309. }
  310. mapPermissionNameHave := make(map[string]bool) // 判断合同是否存在某一行业权限种类
  311. var expensiveYx int
  312. for _, n := range raiPermissions {
  313. match := hasMap[n.ChartPermissionId]
  314. if match == nil {
  315. continue
  316. }
  317. // 升级
  318. if match.IsUpgrade == 1 {
  319. n.IsUpgrade = 1
  320. checkItems = append(checkItems, n)
  321. continue
  322. }
  323. mapPermissionNameHave[n.PermissionName] = true
  324. // 买方研选(3w/5w)
  325. if n.PermissionName == utils.CHART_PERMISSION_NAME_MF_YANXUAN {
  326. expensiveYx = match.ExpensiveYx
  327. n.PermissionName += expMap[match.ExpensiveYx]
  328. checkItems = append(checkItems, n)
  329. continue
  330. }
  331. checkItems = append(checkItems, n)
  332. }
  333. //plist.Items = checkItems
  334. //plist.ClassifyName = utils.COMPANY_PRODUCT_RAI_NAME
  335. //contractPermissionList = append(contractPermissionList, plist)
  336. //// CRM8.8-权限主客观合并
  337. //newPermissionLookList := contractService.HandleEquityContractPermissionList(contractPermissionList)
  338. //for _, v := range newPermissionLookList {
  339. // for _, v2 := range v.Items {
  340. // fmt.Println(v2.PermissionName)
  341. // }
  342. //}
  343. resp.Money = contractItem.Money / 10000
  344. //有研选时,对研选套餐类型做文案处理
  345. respItemYx := new(cygx.AllocationPermissionListResp)
  346. if mapPermissionNameHave[utils.CHART_PERMISSION_NAME_MF_YANXUAN] {
  347. var moneyYx float64
  348. if expensiveYx == 0 {
  349. moneyYx = 3
  350. }
  351. if expensiveYx == 1 {
  352. moneyYx = 5
  353. }
  354. resp.TotalPointsContent = fmt.Sprint(resp.Money, "W,", "其中", moneyYx, "w默认归属买方研选,请对剩余", resp.Money-moneyYx, "w按照100%进行比值分配")
  355. resp.Money = resp.Money - moneyYx
  356. respItemYx.Proportion = moneyYx
  357. respItemYx.ChartPermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN
  358. respItemYx.List = append(respItemYx.List, &cygx.AllocationRealNameListResp{utils.CHART_PERMISSION_NAME_MF_YANXUAN, 0, 0})
  359. } else {
  360. resp.TotalPointsContent = fmt.Sprint(resp.Money, "W")
  361. }
  362. sysUserList, err := cygx.GetAskEmailList()
  363. if err != nil {
  364. br.Msg = "获取失败"
  365. br.ErrMsg = "获取失败,GetAskEmailList Err: " + err.Error()
  366. return
  367. }
  368. mapPermissionUser := make(map[string][]*cygx.AllocationRealNameListResp)
  369. var respList []*cygx.AllocationPermissionListResp
  370. if total == 0 {
  371. for _, v := range sysUserList {
  372. if !mapPermissionNameHave[v.ChartPermissionName] {
  373. continue
  374. }
  375. item := new(cygx.AllocationRealNameListResp)
  376. item.RealName = v.Name
  377. mapPermissionUser[v.ChartPermissionName] = append(mapPermissionUser[v.ChartPermissionName], item)
  378. }
  379. for k, v := range mapPermissionUser {
  380. respItem := new(cygx.AllocationPermissionListResp)
  381. respItem.ChartPermissionName = k
  382. respItem.List = v
  383. respList = append(respList, respItem)
  384. }
  385. if respItemYx.ChartPermissionName != "" {
  386. respList = append(respList, respItemYx)
  387. }
  388. } else {
  389. listUser, err := cygx.GetCygxAllocationCompanyContractListById(companyContractId)
  390. if err != nil {
  391. br.Msg = "获取失败"
  392. br.ErrMsg = "获取失败,GetCygxAllocationCompanyContractListById Err: " + err.Error()
  393. return
  394. }
  395. for _, v := range listUser {
  396. if showDetail && v.Proportion == 0 {
  397. continue
  398. }
  399. item := new(cygx.AllocationRealNameListResp)
  400. item.RealName = v.RealName
  401. item.Money = v.Money
  402. item.Proportion = v.Proportion
  403. mapPermissionUser[v.ChartPermissionName] = append(mapPermissionUser[v.ChartPermissionName], item)
  404. }
  405. listPermission, err := cygx.GetCygxAllocationCompanyContractPermissionListById(companyContractId)
  406. if err != nil {
  407. br.Msg = "获取失败"
  408. br.ErrMsg = "获取失败,GetCygxAllocationCompanyContractPermissionListById Err: " + err.Error()
  409. return
  410. }
  411. for _, v := range listPermission {
  412. if showDetail && v.Proportion == 0 {
  413. continue
  414. }
  415. respItem := new(cygx.AllocationPermissionListResp)
  416. respItem.ChartPermissionName = v.ChartPermissionName
  417. respItem.Money = v.Money
  418. respItem.Proportion = v.Proportion
  419. respItem.List = mapPermissionUser[v.ChartPermissionName]
  420. respList = append(respList, respItem)
  421. }
  422. }
  423. resp.List = respList
  424. resp.CompanyContractId = companyContractId
  425. br.Ret = 200
  426. br.Success = true
  427. br.Msg = "获取成功"
  428. br.Data = resp
  429. }
  430. // @Title 更新派点
  431. // @Description 更新派点接口
  432. // @Param request body cygx.AddProductInteriorReq true "type json string"
  433. // @Success 200 {object} "保存成功"
  434. // @router /allocation/update [post]
  435. func (this *ContractAllocationController) CompanyContracUpdate() {
  436. br := new(models.BaseResponse).Init()
  437. defer func() {
  438. this.Data["json"] = br
  439. this.ServeJSON()
  440. }()
  441. sysUser := this.SysUser
  442. if sysUser == nil {
  443. br.Msg = "请登录"
  444. br.ErrMsg = "请登录,SysUser Is Empty"
  445. br.Ret = 408
  446. return
  447. }
  448. var req cygx.UpdateAllocationCompanyContractReq
  449. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  450. if err != nil {
  451. br.Msg = "参数解析异常!"
  452. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  453. return
  454. }
  455. companyContractId := req.CompanyContractId
  456. if companyContractId == 0 {
  457. br.Msg = "参数错误"
  458. br.ErrMsg = "参数错误,id不可为空"
  459. return
  460. }
  461. list := req.List
  462. var items []*cygx.CygxAllocationCompanyContract
  463. var itemsPermission []*cygx.CygxAllocationCompanyContractPermission
  464. for _, v := range list {
  465. itemPermission := new(cygx.CygxAllocationCompanyContractPermission)
  466. itemPermission.CompanyContractId = companyContractId
  467. itemPermission.AdminId = sysUser.AdminId
  468. itemPermission.AdminName = sysUser.RealName
  469. itemPermission.Proportion = v.Proportion
  470. itemPermission.Money = v.Money
  471. itemPermission.ChartPermissionName = v.ChartPermissionName
  472. itemPermission.CreateTime = time.Now()
  473. itemPermission.ModifyTime = time.Now()
  474. itemsPermission = append(itemsPermission, itemPermission)
  475. for _, v2 := range v.List {
  476. item := new(cygx.CygxAllocationCompanyContract)
  477. item.CompanyContractId = companyContractId
  478. item.AdminId = sysUser.AdminId
  479. item.AdminName = sysUser.RealName
  480. item.Proportion = v2.Proportion
  481. item.Money = v2.Money
  482. item.RealName = v2.RealName
  483. item.ChartPermissionName = v.ChartPermissionName
  484. item.CreateTime = time.Now()
  485. item.ModifyTime = time.Now()
  486. items = append(items, item)
  487. }
  488. }
  489. err = cygx.AddAndUpdateCygxAllocationCompanyContract(items, itemsPermission, companyContractId)
  490. if err != nil {
  491. br.Msg = "操作失败"
  492. br.ErrMsg = "操作失败,AddAndUpdateCygxAllocationCompanyContract Err:" + err.Error()
  493. return
  494. }
  495. br.Ret = 200
  496. br.Success = true
  497. br.IsAddLog = true
  498. br.Msg = "操作成功"
  499. }
  500. // @Title 研究员派点统计
  501. // @Description 研究员派点统计接口
  502. // @Param PageSize query int true "每页数据条数"
  503. // @Param CurrentIndex query int true "当前页页码,从1开始"
  504. // @Param Keyword query string true "客户名称"
  505. // @Param StartDate query string false "开始日期"
  506. // @Param EndDate query string false "结束日期"
  507. // @Param IsExport query bool false "是否导出excel,默认是false"
  508. // @Success 200 {object} cygx.CompanyContractListResp
  509. // @router /allocation/statistics [get]
  510. func (this *ContractAllocationController) CompanyContractStatistics() {
  511. br := new(models.BaseResponse).Init()
  512. defer func() {
  513. this.Data["json"] = br
  514. this.ServeJSON()
  515. }()
  516. sysUser := this.SysUser
  517. if sysUser == nil {
  518. br.Msg = "请登录"
  519. br.ErrMsg = "请登录,SysUser Is Empty"
  520. br.Ret = 408
  521. return
  522. }
  523. keyword := this.GetString("Keyword")
  524. startDate := this.GetString("StartDate")
  525. endDate := this.GetString("EndDate")
  526. if startDate == "" {
  527. startDate = "2015-01-01"
  528. }
  529. if endDate == "" {
  530. endDate = time.Now().Format(utils.FormatDate)
  531. }
  532. //是否导出报表
  533. isExport, _ := this.GetBool("IsExport")
  534. var condition string
  535. var pars []interface{}
  536. //根据当前角色来获取查询条件
  537. condition, pars = getQueryParams(condition, pars, sysUser, "c.")
  538. //关键字搜索
  539. if keyword != "" {
  540. condition += ` and b.company_name like "%` + keyword + `%" `
  541. }
  542. //默认只查询权益 2023-06-01 之后的合同
  543. condition += ` AND c.product_id = ? AND a.start_date > ? `
  544. pars = append(pars, 2, "2023-06-01")
  545. //列表页数据
  546. listContract, err := cygx.GetCompanyContractListJoinCompany(condition, pars, 0, 1000)
  547. if err != nil {
  548. br.Msg = "获取失败"
  549. br.ErrMsg = "获取失败,Err:" + err.Error()
  550. return
  551. }
  552. var companyContractIds []int
  553. for _, v := range listContract {
  554. companyContractIds = append(companyContractIds, v.CompanyContractId)
  555. }
  556. lenArr := len(companyContractIds)
  557. mapUserAllocation := make(map[string]float64) // 关联合同
  558. mapUserMoney := make(map[string]float64) // 派点金额
  559. mapPermissionAllocation := make(map[string]float64)
  560. mapPermissionMoney := make(map[string]float64)
  561. totalContract := lenArr //所有的关联合同
  562. var totalMoney float64 //所有的关联合同的金额 单位万
  563. if lenArr > 0 {
  564. var conditionAllocation string
  565. var parsAllocation []interface{}
  566. allocationCompanyContractList, err := cygx.GetCygxAllocationCompanyContractList(conditionAllocation, parsAllocation)
  567. if err != nil {
  568. br.Msg = "获取失败"
  569. br.ErrMsg = "获取失败,Err:" + err.Error()
  570. return
  571. }
  572. for _, v := range allocationCompanyContractList {
  573. if v.Proportion != 0 {
  574. mapUserAllocation[v.RealName] += 1
  575. mapUserMoney[v.RealName] += v.Money
  576. mapPermissionAllocation[v.ChartPermissionName] += 1
  577. mapPermissionMoney[v.ChartPermissionName] += v.Money
  578. totalMoney += v.Money
  579. }
  580. }
  581. }
  582. sysUserList, err := cygx.GetAskEmailList()
  583. if err != nil {
  584. br.Msg = "获取失败"
  585. br.ErrMsg = "获取失败,GetAskEmailList Err: " + err.Error()
  586. return
  587. }
  588. mapPermissionUser := make(map[string][]*cygx.AllocationRealNameStatisticsListResp)
  589. for _, v := range sysUserList {
  590. item := new(cygx.AllocationRealNameStatisticsListResp)
  591. item.RealName = v.Name
  592. item.TotalRelatedContract = mapUserAllocation[v.Name]
  593. item.TotalDispatchPoint = fmt.Sprint(mapUserMoney[v.Name])
  594. if item.TotalDispatchPoint == "" {
  595. item.TotalDispatchPoint = "0"
  596. }
  597. //组内占比
  598. item.GroupProportion = fmt.Sprint(mapUserMoney[v.Name] / mapPermissionMoney[v.ChartPermissionName] * 100)
  599. if item.GroupProportion == "" {
  600. item.GroupProportion = "0"
  601. }
  602. item.GroupProportion += "%"
  603. //部门占比
  604. item.DepartmentProportion = fmt.Sprint(mapUserMoney[v.Name] / totalMoney * 100)
  605. if item.DepartmentProportion == "" {
  606. item.DepartmentProportion = "0"
  607. }
  608. item.DepartmentProportion += "%"
  609. mapPermissionUser[v.ChartPermissionName] = append(mapPermissionUser[v.ChartPermissionName], item)
  610. }
  611. for k, v := range mapPermissionUser {
  612. lenUser := len(v)
  613. item := new(cygx.AllocationRealNameStatisticsListResp)
  614. item.RealName = "合计"
  615. item.TotalRelatedContract = mapPermissionAllocation[k]
  616. item.TotalDispatchPoint = fmt.Sprint(mapPermissionMoney[k], "/", "300")
  617. item.GroupProportion = "100%"
  618. // 部门占比
  619. item.DepartmentProportion = fmt.Sprint(mapPermissionMoney[k] / totalMoney * 100)
  620. if item.DepartmentProportion == "" {
  621. item.DepartmentProportion = "0"
  622. }
  623. item.DepartmentProportion += "%"
  624. mapPermissionUser[k] = append(mapPermissionUser[k], item)
  625. item = new(cygx.AllocationRealNameStatisticsListResp)
  626. item.RealName = "平均"
  627. item.TotalRelatedContract = mapPermissionAllocation[k] / float64(lenUser)
  628. item.TotalDispatchPoint = fmt.Sprint(mapPermissionMoney[k] / float64(lenUser))
  629. //组内占比
  630. item.GroupProportion = fmt.Sprint(float64(lenUser) / mapPermissionMoney[k] * 100)
  631. if item.GroupProportion == "" {
  632. item.GroupProportion = "0"
  633. }
  634. item.GroupProportion += "%"
  635. // 部门占比
  636. item.DepartmentProportion = fmt.Sprint(mapPermissionMoney[k] / totalMoney * 100)
  637. if item.DepartmentProportion == "" {
  638. item.DepartmentProportion = "0"
  639. }
  640. item.DepartmentProportion += "%"
  641. mapPermissionUser[k] = append(mapPermissionUser[k], item)
  642. }
  643. var list []*cygx.AllocationPermissionStatisticsListResp
  644. permissionNameArr := []string{"医药", "消费", "科技", "智造", "策略"}
  645. for _, v := range permissionNameArr {
  646. item := new(cygx.AllocationPermissionStatisticsListResp)
  647. item.ChartPermissionName = v
  648. item.List = mapPermissionUser[v]
  649. list = append(list, item)
  650. }
  651. resp := cygx.CygxAllocationCompanyContractDetailStatisticsResp{
  652. List: list,
  653. }
  654. resp.TotalContract = totalContract
  655. resp.TotalMoney = totalMoney
  656. //导出excel
  657. if isExport {
  658. //IncrementalCompanyListExport(this, dataType, resp, br)
  659. return
  660. }
  661. br.Ret = 200
  662. br.Success = true
  663. br.Msg = "获取成功"
  664. br.Data = resp
  665. }