package com.goafanti.customer.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.goafanti.common.bo.Error; import com.goafanti.common.bo.InputCallCompleter; import com.goafanti.common.bo.Result; import com.goafanti.common.dao.*; import com.goafanti.common.model.*; import com.goafanti.common.utils.DateUtils; import com.goafanti.common.utils.HttpUtils; import com.goafanti.common.utils.LoggerUtils; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.mybatis.BaseMybatisDao; import com.goafanti.core.mybatis.page.Pagination; import com.goafanti.core.websocket.SystemWebSocketHandler; import com.goafanti.customer.bo.InputCallNumber; import com.goafanti.customer.bo.InputUserCallList; import com.goafanti.customer.service.UserOutboundService; import org.apache.shiro.crypto.hash.SimpleHash; import org.springframework.stereotype.Service; import org.springframework.web.socket.TextMessage; import javax.annotation.Resource; import java.util.HashMap; import java.util.List; import java.util.Map; @Service("userOutboundService") public class UserOutboundServiceImpl extends BaseMybatisDao implements UserOutboundService { static final String customer="C322"; static final String seq="20241101"; static final String pwd="084332D02CCF7B42461F34155AC8754F"; static final String version= "2.0.6"; static final String default_url ="https://webmc.zb-sx.cn:1443"; @Resource private SystemWebSocketHandler systemWebSocketHandler; @Resource private UserMapper userMapper; @Resource private UserMidMapper userMidMapper; @Resource private AdminMapper adminMapper; @Resource private OrganizationContactBookMapper organizationContactBookMapper; @Resource private CallLogMapper callLogMapper; @Override public Object checkUser(Integer type) { String url= default_url +"/openapi/"+version+"/getClientInfo"; Map param=new HashMap<>(); param.put("authentication",getAuthentication()); Map request=new HashMap<>(); request.put("type",type); param.put("request",request); HttpUtils httpUtils=new HttpUtils(); String s = httpUtils.sendHttpsRequest(url, "POST", param); System.out.println(s); return null; } private Map getAuthentication() { Map authentication=new HashMap<>(); authentication.put("customer","C322"); long timeMillis = System.currentTimeMillis(); authentication.put("timestamp",timeMillis); authentication.put("seq",seq); String digestSource=customer+"@"+timeMillis+"@"+seq+"@"+pwd; // System.out.println("digestSource="+digestSource); String md5 = new SimpleHash("MD5", digestSource).toHex(); // System.out.println("md5="+md5); authentication.put("digest",md5); return authentication; } @Override public Result pushCallNumber(InputCallNumber in) { String msg =null; if (StringUtils.isNotBlank(in.getUid())){ User u =userMapper.queryById(in.getUid()); if (u.getCallStatus()==1){ return new Result().error(new Error("该用户正在通话中")); } } String url= default_url +"/openapi/"+version+"/callNumber"; Map param=new HashMap<>(); param.put("authentication",getAuthentication()); Map request=new HashMap<>(); request.put("agent",in.getAgent()); request.put("callee",in.getCallee()); request.put("userData",in.getUid()); param.put("request",request); HttpUtils httpUtils=new HttpUtils(); String s = httpUtils.sendHttpsRequest(url, "POST", param); System.out.println("url="+url); System.out.println("param="+param); System.out.println(s); // {"result":{"error":"0xF1000022","msg":"分机号未注册"},"data":{"seq":"20241101","response":{"seq":null,"userData":null,"result":{"error":4043309090},"data":null}}} JSONObject jsonObject = JSON.parseObject(s); JSONObject result = jsonObject.getJSONObject("result"); msg = result.getString("msg"); if (StringUtils.isNotBlank(msg)){ if (msg.equals("成功")){ if (StringUtils.isNotBlank(in.getUid())){ User u =new User(); u.setId(in.getUid()); u.setCallStatus(1); userMapper.update(u); } return new Result().data("呼叫成功"); } return new Result().error(new Error(msg)); } return new Result().error(new Error("通信异常")); } @Override public Result blindTransferByAgent(InputCallNumber in) { String url= default_url +"/openapi/"+version+"/blindTransferByAgent"; Map param=new HashMap<>(); param.put("authentication",getAuthentication()); Map request=new HashMap<>(); request.put("agent",in.getAgent()); request.put("transAgent",in.getTransAgent()); request.put("userData",in.getUid()); param.put("request",request); HttpUtils httpUtils=new HttpUtils(); String s = httpUtils.sendHttpsRequest(url, "POST", param); LoggerUtils.debug(getClass(),"res="+s); JSONObject jsonObject = JSON.parseObject(s); JSONObject result = jsonObject.getJSONObject("result"); String msg = result.getString("msg"); String error = result.getString("error"); if ("0".equals(error)){ return new Result().data("转移成功"); }else { LoggerUtils.debug(getClass(),"msg="+msg); return new Result().error(new Error(msg)); } } @Override public Object pushCallCompleted(InputCallCompleter in) { Map notify = in.getNotify(); String staffNo=String.valueOf(notify.get("staffNo")); Admin admin = adminMapper.selectByCallStaffNo(staffNo); String startTime = String.valueOf(notify.get("startTime")); String callee=String.valueOf(notify.get("callee")); String timeLength=String.valueOf(notify.get("timeLength")); String callResult=String.valueOf(notify.get("callResult")); String callResultMsg=String.valueOf(notify.get("callResultMsg")); String userDate=String.valueOf(notify.get("userData")); String name="暂无"; String id=null; if(admin!=null){ name=admin.getName(); id=admin.getId(); } String ContactName=null; String uid=null; if (userDate!=null){ uid=userDate; } List books = organizationContactBookMapper.selectUserByContact(callee); if (books!=null){ if (uid==null){ OrganizationContactBook book1 = books.get(0); ContactName=book1.getName(); uid=book1.getUid(); }else { for (OrganizationContactBook item:books){ if (item.getUid().equals(uid)){ ContactName=item.getName(); break; } } } } CallLog callLog=new CallLog(); callLog.setUid(uid); callLog.setAid(id); callLog.setAdminName(name); callLog.setContacts(ContactName); callLog.setCreateTime(DateUtils.parseDate(startTime)); String substring = callee.substring(callee.length() - 4); callLog.setMobileLastDigits(substring); callLog.setDuration(Integer.parseInt(timeLength)); callLog.setStatus(0); callLog.setRemarks(callResultMsg); callLogMapper.insert(callLog); pushCountUser(uid); //需要关闭客户呼叫中 // SseResult res = SseMap.sseEmitterMap.get(TokenManager.getAdminId()); try { // res.sseEmitter.send(callResult); systemWebSocketHandler.sendMessageToUser(admin.getId(), new TextMessage(callResult)); // LoggerUtils.debug(getClass(),String.format("通信成功=》%s=%s",callResult,callResultMsg)); }catch (Exception e ){ LoggerUtils.error(getClass(),"通信失败"); } // finally { // res.sseEmitter.complete(); // SseMap.sseEmitterMap.remove(TokenManager.getAdminId()); // } return 1; } /** * 客户通话时长统计 * @param uid */ private void pushCountUser(String uid) { List callLogList = callLogMapper.selectByUid(uid); int count=0; int duration=0; for (CallLog log : callLogList) { count++; duration+=log.getDuration(); } UserMid mid=new UserMid(); mid.setUid(uid); mid.setCallCount(count); mid.setCallDuration(duration); userMidMapper.updateByUid(mid); User u =new User(); u.setId(uid); u.setCallStatus(0); userMapper.update(u); } @Override public Object agentList() { return adminMapper.agentList(); } @Override public Object getDefaultMobile(String uid) { return organizationContactBookMapper.getMajor(uid,null); } @Override public Object userCallList(InputUserCallList in) { CallLog select=new CallLog(); select.setUid(in.getUid()); Pagination page = findPage("findCallLogList", "findCallLogCount", select, in.getPageNo(), in.getPageSize()); UserMid userMid = userMidMapper.selectByUid(in.getUid()); Map sumMap = new HashMap(); int count=0; int duration=0; if (userMid!=null){ User user = userMapper.queryById(in.getUid()); count=userMid.getCallCount(); duration=userMid.getCallDuration(); sumMap.put("callCount",count); sumMap.put("callDuration",duration); sumMap.put("name",user.getNickname()); } Map res = new HashMap(); res.put("page",page); res.put("sum",sumMap); return res; } }