CcInboundCdrController.java 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package com.ruoyi.cc.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.ruoyi.aicall.domain.CcCallPhone;
  4. import com.ruoyi.cc.domain.CcBizGroup;
  5. import com.ruoyi.cc.domain.CcInboundCdr;
  6. import com.ruoyi.cc.service.ICcBizGroupService;
  7. import com.ruoyi.cc.service.ICcInboundCdrService;
  8. import com.ruoyi.cc.service.ICcParamsService;
  9. import com.ruoyi.common.annotation.Log;
  10. import com.ruoyi.common.constant.UserConstants;
  11. import com.ruoyi.common.core.controller.BaseController;
  12. import com.ruoyi.common.core.domain.AjaxResult;
  13. import com.ruoyi.common.core.domain.entity.SysDept;
  14. import com.ruoyi.common.core.domain.entity.SysUser;
  15. import com.ruoyi.common.core.page.TableDataInfo;
  16. import com.ruoyi.common.enums.BusinessType;
  17. import com.ruoyi.common.utils.ExceptionUtil;
  18. import com.ruoyi.common.utils.MessageUtils;
  19. import com.ruoyi.common.utils.StringUtils;
  20. import com.ruoyi.common.utils.poi.ExcelUtil;
  21. import com.ruoyi.system.domain.SysPost;
  22. import com.ruoyi.system.service.ISysDeptService;
  23. import com.ruoyi.system.service.ISysPostService;
  24. import com.ruoyi.system.service.ISysUserService;
  25. import org.apache.shiro.authz.annotation.RequiresPermissions;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.stereotype.Controller;
  28. import org.springframework.ui.ModelMap;
  29. import org.springframework.web.bind.annotation.*;
  30. import java.util.ArrayList;
  31. import java.util.HashMap;
  32. import java.util.List;
  33. import java.util.Map;
  34. import java.util.stream.Collectors;
  35. /**
  36. * 呼入记录Controller
  37. *
  38. * @author ruoyi
  39. * @date 2024-12-22
  40. */
  41. @Controller
  42. @RequestMapping("/cc/inboundcdr")
  43. public class CcInboundCdrController extends BaseController
  44. {
  45. private String prefix = "cc/inboundcdr";
  46. @Autowired
  47. private ICcInboundCdrService ccInboundCdrService;
  48. @Autowired
  49. private ICcParamsService ccParamsService;
  50. @Autowired
  51. private ICcBizGroupService groupService;
  52. @Autowired
  53. private ISysPostService postService;
  54. @Autowired
  55. private ISysUserService sysUserService;
  56. @Autowired
  57. private ISysDeptService sysDeptService;
  58. @RequiresPermissions("cc:inboundcdr:view")
  59. @GetMapping()
  60. public String inboundcdr(ModelMap mmap)
  61. {
  62. return prefix + "/inboundcdr";
  63. }
  64. /**
  65. * 查询呼入记录列表
  66. */
  67. @RequiresPermissions("cc:inboundcdr:list")
  68. @PostMapping("/list")
  69. @ResponseBody
  70. public TableDataInfo list(CcInboundCdr ccInboundCdr)
  71. {
  72. Map<String, Object> params = ccInboundCdr.getParams();
  73. if (null == params) {
  74. params = new HashMap<>();
  75. }
  76. // 如果是班长坐席,根据权限查询有权限的坐席的通话记录,否则查询全部数据
  77. SysUser currentUser = getSysUser();
  78. List<String> manageOpnum = new ArrayList<>(); // 有权限的用户账号
  79. List<SysPost> postList = postService.selectPostsByUserId(currentUser.getUserId()).stream().filter(SysPost::isFlag).collect(Collectors.toList());
  80. for (SysPost sysPost: postList) {
  81. // 坐席可以查看本人数据
  82. if (UserConstants.SYSTEM_POST_AGENT.equals(sysPost.getPostCode())) {
  83. manageOpnum.add(currentUser.getLoginName());
  84. }
  85. // 班组长查看权限内坐席数据
  86. if (UserConstants.SYSTEM_POST_TEAM_LEADER.equals(sysPost.getPostCode())) {
  87. List<Long> deptIds = new ArrayList<>();
  88. deptIds.add(currentUser.getDeptId());
  89. deptIds.addAll(sysDeptService.selectChildrenDeptById(currentUser.getDeptId()).stream().map(SysDept::getDeptId).collect(Collectors.toList()));
  90. manageOpnum.addAll(sysUserService.selectUserByDeptIds(deptIds).stream().map(SysUser::getLoginName).collect(Collectors.toList()));
  91. }
  92. }
  93. params.put("manageOpnum", manageOpnum);
  94. ccInboundCdr.setParams(params);
  95. Map<String, String> groupNames = new HashMap<>();
  96. startPage();
  97. List<CcInboundCdr> list = ccInboundCdrService.selectCcInboundCdrList(ccInboundCdr);
  98. TableDataInfo tableDataInfo = getDataTable(list);
  99. List<CcInboundCdr> records = (List<CcInboundCdr>) tableDataInfo.getRows();
  100. for (CcInboundCdr data: records) {
  101. data.setWavFileUrl("/recordings/files?filename=" + data.getWavFile());
  102. String groupName = groupNames.getOrDefault(data.getGroupId(), "");
  103. if (StringUtils.isBlank(groupName)) {
  104. CcBizGroup ccBizGroup = groupService.selectCcBizGroupByGroupId(data.getGroupId());
  105. if (null != ccBizGroup) {
  106. groupName = ccBizGroup.getBizGroupName();
  107. } else {
  108. groupName = "-";
  109. }
  110. }
  111. groupNames.put(data.getGroupId(), groupName);
  112. data.setGroupName(groupName);
  113. // 挂机原因处理
  114. if (StringUtils.isNotEmpty(data.getHangupCause())) {
  115. if (data.getHangupCause().startsWith("{") && data.getHangupCause().endsWith("}")) {
  116. try {
  117. JSONObject hangupCause = JSONObject.parseObject(data.getHangupCause());
  118. String hangupCauseCode = hangupCause.getString("code");
  119. String hangupCauseDetail = hangupCause.getString("details");
  120. String hangupCauseCodeI18n = MessageUtils.message("_hangup_cause_code_" + hangupCauseCode);
  121. if (StringUtils.isNotEmpty(hangupCauseCodeI18n)) {
  122. hangupCauseCode = hangupCauseCodeI18n;
  123. }
  124. if (StringUtils.isNotEmpty(hangupCauseDetail)) {
  125. data.setHangupCause(hangupCauseCode + ":" + hangupCauseDetail);
  126. } else {
  127. data.setHangupCause(hangupCauseCode);
  128. }
  129. } catch (Exception e) {
  130. logger.error(ExceptionUtil.getExceptionMessage(e));
  131. }
  132. }
  133. }
  134. }
  135. tableDataInfo.setRows(records);
  136. return tableDataInfo;
  137. }
  138. /**
  139. * 导出呼入记录列表
  140. */
  141. @RequiresPermissions("cc:inboundcdr:export")
  142. @Log(title = "呼入记录", businessType = BusinessType.EXPORT)
  143. @PostMapping("/export")
  144. @ResponseBody
  145. public AjaxResult export(CcInboundCdr ccInboundCdr)
  146. {
  147. List<CcInboundCdr> list = ccInboundCdrService.selectCcInboundCdrList(ccInboundCdr);
  148. ExcelUtil<CcInboundCdr> util = new ExcelUtil<CcInboundCdr>(CcInboundCdr.class);
  149. return util.exportExcel(list, "呼入记录数据");
  150. }
  151. /**
  152. * 新增呼入记录
  153. */
  154. @GetMapping("/add")
  155. public String add()
  156. {
  157. return prefix + "/add";
  158. }
  159. /**
  160. * 新增保存呼入记录
  161. */
  162. @RequiresPermissions("cc:inboundcdr:add")
  163. @Log(title = "呼入记录", businessType = BusinessType.INSERT)
  164. @PostMapping("/add")
  165. @ResponseBody
  166. public AjaxResult addSave(CcInboundCdr ccInboundCdr)
  167. {
  168. return toAjax(ccInboundCdrService.insertCcInboundCdr(ccInboundCdr));
  169. }
  170. /**
  171. * 修改呼入记录
  172. */
  173. @RequiresPermissions("cc:inboundcdr:edit")
  174. @GetMapping("/edit/{id}")
  175. public String edit(@PathVariable("id") String id, ModelMap mmap)
  176. {
  177. CcInboundCdr ccInboundCdr = ccInboundCdrService.selectCcInboundCdrById(id);
  178. mmap.put("ccInboundCdr", ccInboundCdr);
  179. return prefix + "/edit";
  180. }
  181. /**
  182. * 修改保存呼入记录
  183. */
  184. @RequiresPermissions("cc:inboundcdr:edit")
  185. @Log(title = "呼入记录", businessType = BusinessType.UPDATE)
  186. @PostMapping("/edit")
  187. @ResponseBody
  188. public AjaxResult editSave(CcInboundCdr ccInboundCdr)
  189. {
  190. return toAjax(ccInboundCdrService.updateCcInboundCdr(ccInboundCdr));
  191. }
  192. /**
  193. * 删除呼入记录
  194. */
  195. @RequiresPermissions("cc:inboundcdr:remove")
  196. @Log(title = "呼入记录", businessType = BusinessType.DELETE)
  197. @PostMapping( "/remove")
  198. @ResponseBody
  199. public AjaxResult remove(String ids)
  200. {
  201. return toAjax(ccInboundCdrService.deleteCcInboundCdrByIds(ids));
  202. }
  203. }