fs-danaus
2021-04-15 284c5564e75ca6ece79c285cb6e90e844ecdeef8
完善API认证对接代码
5个文件已修改
72 ■■■■ 已修改文件
src/com/yc/api/controller/QrCodeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/open/mutual/controller/MutualController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/api/messagelistener/WebSocketMessageListener.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/entity/MessageInfo.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/service/ApiAuthMessageImpl.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/api/controller/QrCodeController.java
@@ -815,7 +815,7 @@
        CallBackMessage callBackMessage = new CallBackMessage();
        try {
            SpObserver.setDBtoInstance("_" + request.getSession().getAttribute(SessionKey.DATA_BASE_ID));
            T112002 t112002=null;
            T112002 t112002=new T112002();
            if(refPostCartEntity.getQrCode().startsWith("2003")){
                //API对接认证二维码
                RedisTemplate redisTemplate = (RedisTemplate) FactoryBean.getBean("redisTemplate");
src/com/yc/open/mutual/controller/MutualController.java
@@ -11,6 +11,7 @@
import com.yc.sdk.shopping.action.api.GenerationQrCodeForApp;
import com.yc.sdk.shopping.entity.QrCodeForAppEntity;
import com.yc.sdk.shopping.service.imagedata.ShoppingImageDataIfc;
import com.yc.service.BaseService;
import com.yc.utils.SessionKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@@ -67,7 +68,7 @@
                map.put("userCode", userCode);
                map.put("msgType", MessageType.MUTUAL_AUTH);
                map.put("domain", domain);
                map.put("logo", domain+"/images/login/"+dbId+"/logo.png");
                map.put("logo", domain+getLogo(dbId));
                map.put("setup", 0);//第一步
                info.put("qrCodeType", MessageType.MUTUAL_AUTH);
                info.put("qrCodeData", map);
@@ -92,7 +93,24 @@
            SpObserver.setDBtoInstance();
        }
    }
public   String getLogo(String dbId){
        try{
            SpObserver.setDBtoDemo();
            String sql = " set nocount on \n declare @dbid int = ? \n";
            sql += " select case when isnull(CONVERT(varchar(MAX), CONVERT(varbinary(MAX), LogoIcon)),'')='' then 0 else 1 end from gsystem where id= @dbid ";
            BaseService baseServer = (BaseService) FactoryBean.getBean("BaseService");
            Integer result = baseServer.getJdbcTemplate().queryForObject(sql,Integer.class,dbId);
            if(result==0){
                //表示没有上传Logo,取默认
                return "/images/login/logo.png";
            }else{
                //取上传logo
                return  "/images/login/"+dbId+"/logo.png";
            }
        }finally {
            SpObserver.setDBtoInstance();
        }
}
    /**
     * 显示二维码图片内容
     *
src/com/yc/sdk/WebSocketMessage/api/messagelistener/WebSocketMessageListener.java
@@ -37,8 +37,12 @@
            RedisSerializer<?> serializer = redisTemplate.getValueSerializer();
            Object body = serializer.deserialize(message.getBody());
            //String channel = new String(pattern);   //取订阅频道 主题 channel
            MessageInfo msg = MessageInfo.build(String.valueOf(body));
            MessageInfo msg=null;
            if(body instanceof MessageInfo) {
                msg = (MessageInfo) body;
            }else {
                msg = MessageInfo.build(String.valueOf(body));
            }
            //System.out.println("订阅接收到的消息:"+msg.toString());
            List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserCode());
            //只有是存在于当前的用户信息才需要处理,否则不需要处理
src/com/yc/sdk/WebSocketMessage/entity/MessageInfo.java
@@ -2,9 +2,13 @@
import java.io.Serializable;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.yc.action.grid.GridUtils;
import groovy.transform.EqualsAndHashCode;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -26,8 +30,10 @@
    
    public static MessageInfo build(String message){
        Gson gson=new Gson();
        MessageInfo msg= gson.fromJson(message,new com.google.gson.reflect.TypeToken<MessageInfo>() {}.getType());   //该写法报 empty string 错误,改为下面的写法
       // Message msg = MessageGsonBuilder.create().fromJson(message, Message.class);   //为了解决 empty string 错误,故重新实现取数方法  , Added by Johns Wang, 2018-11-11
//        new GsonBuilder()
//                .registerTypeAdapter(new TypeToken<Map<String, Object>>() {
//                }.getType(), new GridUtils.MapTypeAdapter()).create();
        MessageInfo msg= gson.fromJson(message,new com.google.gson.reflect.TypeToken<MessageInfo>() {}.getType());
        return  msg;
    }
src/com/yc/sdk/WebSocketMessage/service/ApiAuthMessageImpl.java
@@ -2,9 +2,12 @@
import com.yc.action.grid.GridUtils;
import com.yc.exception.ApplicationException;
import com.yc.factory.FactoryBean;
import com.yc.listener.SessionListener;
import com.yc.open.mutual.controller.MutualController;
import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer;
import com.yc.sdk.WebSocketMessage.entity.MessageInfo;
import com.yc.sdk.WebSocketMessage.entity.MessageType;
import com.yc.sdk.WebSocketMessage.entity.WsMessageUserEntity;
import com.yc.utils.SessionKey;
import org.springframework.stereotype.Service;
@@ -25,7 +28,7 @@
        try {
            final Map map = GridUtils.fromJson(message.getMsg());
            if (map != null) {
                switch (Integer.parseInt(map.get("setup") + "")) {
                switch (((Double)map.get("setup")).intValue()) {
                    case 1:
                        //表示APP点了同意授权接入按钮
                        //1,向经销商发消息,传递当前扫码用户(总部)的信息(公司名称,用户名称),以便给经销商确认身份
@@ -34,7 +37,7 @@
                        WebSocketMessageServer.publishMessageToRedis(messageInfo);
                        // 2,返回提示消息内容,确认消息给[公司名称],等待对方确认通过,总部端显示
                        MessageInfo callback = new MessageInfo();
                        callback.setMsg("等待["+map.get("comanyName")+"]验证您身份,请稍等!");
                        callback.setMsg("等待["+map.get("companyName")+"]验证您身份,请稍等!");
                        userEntity.sendMessage(callback);
                        break;
                    case 2:
@@ -45,9 +48,9 @@
                        //1,表示经销商接收到同意消息,
                        // TODO 把总部传过来的信息(dbid,domain)写入供应商表
                        //经销商端显示
                        //经销商自己显示
                        MessageInfo callback3 = new MessageInfo();
                        callback3.setMsg("等待["+map.get("comanyName")+"]最终确认通过,请稍等!");
                        callback3.setMsg("等待["+map.get("companyName")+"]最终确认通过,请稍等!");
                        userEntity.sendMessage(callback3);
                        //2,通知总部,经销商已确认
                        MessageInfo messageInfo3 = getMessageInfo(message, userEntity, map,4);
@@ -59,7 +62,7 @@
                        //2,通知经销商已确认
                        MessageInfo messageInfo4 = getMessageInfo(message, userEntity, map,5);
                        WebSocketMessageServer.publishMessageToRedis(messageInfo4);
                        //3,通知总部
                        //3,通知总部自己
                        MessageInfo callback4 = new MessageInfo();
                        callback4.setMsg("授权接入成功!");
                        userEntity.sendMessage(callback4);
@@ -73,34 +76,39 @@
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            WebSocketMessageServer.printError(e, userEntity.getSession());
        }
    }
    /**
     * 根据当前用户是总部,还是经销商,取对应的内容返回
     * 根据当前用户是总部,还是经销商,取对应的会话内容返回
     * @param message
     * @param userEntity
     * @param map
     * @param msg
     * @return
     */
    public MessageInfo getMessageInfo(MessageInfo message, WsMessageUserEntity userEntity, Map map,int type) {
        Map msg =new HashMap();
        final HttpSession session = SessionListener.getSession(userEntity.getSessionId());
        MessageInfo messageInfo = new MessageInfo();
        messageInfo.setUserCode(GridUtils.prossRowSetDataType_String(map, "userCode"));//userCode
        int dbId=new Double(GridUtils.prossRowSetDataType_Double(map, "dbId")).intValue();
        messageInfo.setDbId(dbId);//dbid
        messageInfo.setMsgType(MessageType.MUTUAL_AUTH);
        if (session != null) {
            msg.put("comanyName", session.getAttribute(SessionKey.COMPANY_NAME));//公司名称
            msg.put("companyName", session.getAttribute(SessionKey.COMPANY_NAME));//公司名称
            msg.put("userName", session.getAttribute(SessionKey.USER_NAME));
            msg.put("domain", session.getAttribute(SessionKey.DOMAIN));
            final MutualController mutualController = (MutualController)FactoryBean.getBean("mutualController");
            msg.put("logo", session.getAttribute(SessionKey.DOMAIN)+mutualController.getLogo(messageInfo.getDbId()+""));
        }else{
            throw new ApplicationException(message.getUserCode()+"查找不到会话信息,请检查sessionId是否有传递");
        }
        msg.put("dbId", message.getDbId());//当前用户的dbid
        msg.put("userCode", message.getUserCode());
        msg.put("setup", type);
        MessageInfo messageInfo = new MessageInfo();
        messageInfo.setUserCode(GridUtils.prossRowSetDataType_String(map, "userCode"));//userCode
        messageInfo.setDbId(GridUtils.prossRowSetDataType_Int(map, "dbId"));//dbid
        messageInfo.setMsg(GridUtils.toJson(msg));
        return messageInfo;
    }