session应用二

从session中获取mapper对象,利用mapper对象进行增删改查

        Date now = new Date();
        SqlSession session = this.yangchebaoDbManagerImpl.getSqlSessionFactory().openSession(false);
        InsureQueryInfoMapper insureQueryInfoMapper = session.getMapper(InsureQueryInfoMapper.class);
        InsureQuoteDetailMapper insureQuoteDetailMapper = session.getMapper(InsureQuoteDetailMapper.class);

        try {
            boolean semSign = SemaphoreControllerUtil.getInstance().acquireInsureHandleSemaphore(sqId);
            if(!semSign){
                throw new BadRequestException("common", "请求被阻止,请稍后再试");
            }

            InsureQueryInfo insureQueryInfo = this.queryInsureInfoBySqId(sqId, session);
            // 只有保单报价查询信息不为空,而且报价状态允许进行报价处理时才处理,防止重复处理“报价成功”
            if(insureQueryInfo!=null){
                if(QunabaoNotifyStatus.canQuoteHandle(insureQueryInfo.getStatus())){
                    JSONObject dealBack = params.optJSONObject("dealBack");
                    //由于去哪保目前的是吧,只能靠此属性判断,所以临时处理
                    Boolean isSimilar = MapUtils.getBoolean(dealBack, "isSimilar", false);
                    if(isSimilar) {
                        notifyStatus = QunabaoNotifyStatus.QUOTE_FAILED;
                    }
                    if(notifyStatus.getCode()==QunabaoNotifyStatus.QUOTE_FAILED.getCode()){
                        // 报价失败
                    }else if(notifyStatus.getCode()==QunabaoNotifyStatus.QUOTE_SUCCESSED.getCode()){
                        // 报价成功
                        // 更新车船税价格、总价格、商业险价格、交强险价格
                        // 增加各险种的具体报价信息
                        JSONObject dealOffer = params.optJSONObject("dealOffer");
                        if(dealBack!=null && !dealBack.isEmpty()){
                            insureQueryInfo.setTaxCharge(dealBack.optDouble("taxCharge", PayConstants.DEFAULT_NULL_ID));// 车船税价格
                            insureQueryInfo.setTotalCharge(dealBack.optDouble("totalCharge", PayConstants.DEFAULT_NULL_ID));// 总价格
                            insureQueryInfo.setBizCharge(dealBack.optDouble("bizCharge", PayConstants.DEFAULT_NULL_ID));// 商业险价格
                            insureQueryInfo.setEfcCharge(dealBack.optDouble("efcCharge", PayConstants.DEFAULT_NULL_ID));// 交强险价格
                        }

                        if(dealOffer!=null && !dealOffer.isEmpty()){
                            JSONObject suite = dealOffer.optJSONObject("suite");
                            if(suite!=null && !suite.isEmpty()){
                                JSONObject items = suite.optJSONObject("items");
                                if(items!=null && !items.isEmpty()){
                                    Set entrySet = items.keySet();
                                    Iterator<String> iterator = entrySet.iterator();
                                    while(iterator.hasNext()){
                                        String key = iterator.next();
                                        JSONObject quoteInfo = items.optJSONObject(key);
                                        if(quoteInfo!=null && !quoteInfo.isEmpty()){
                                            InsureQuoteDetail insureQuoteDetail = new InsureQuoteDetail();
                                            insureQuoteDetail.setSqid(sqId);// 单方号----例如““6010306151601232422”
                                            insureQuoteDetail.setEcode(quoteInfo.optString("ecode"));// 保障项代码----例如:"VehicleDemageIns"
                                            insureQuoteDetail.setSelIdx(quoteInfo.optString("selIdx"));// 选择项----例如:1
                                            insureQuoteDetail.setSelName(quoteInfo.optString("caption"));// 选择项名称
                                            insureQuoteDetail.setAmount(quoteInfo.optDouble("amount", PayConstants.DEFAULT_NULL_ID));// 保障金额
                                            insureQuoteDetail.setCharge(quoteInfo.optDouble("charge", PayConstants.DEFAULT_NULL_ID));// 实际保费
                                            insureQuoteDetail.setListPrice(quoteInfo.optDouble("listPrice", PayConstants.DEFAULT_NULL_ID));// 原价
                                            insureQuoteDetail.setDiscountRate(quoteInfo.optDouble("discountRate", PayConstants.DEFAULT_NULL_ID));// 折扣率
                                            insureQuoteDetail.setCreateDate(now);// 记录创建时间

                                            insureQuoteDetailMapper.insert(insureQuoteDetail);// 增加险种报价信息
                                        }
                                    }
                                }
                            }
                        }
                    }
                    insureQueryInfo.setReceiveDate(now);// 报价回执时间

                    insureQueryInfo.setStatus(String.valueOf(notifyStatus.getCode()));// 报价状态----报价成功/失败
                    insureQueryInfo.setRemarks(notifyMsg);// 报价成功/失败描述信息

                    insureQueryInfoMapper.updateByPrimaryKey(insureQueryInfo);// 更新数据库记录

                }else{
                    LOGGER.warn("去哪保回调----"+notifyStatus.getDesc()+"----单方号:"+sqId+"的状态为:"+insureQueryInfo.getStatus()+"忽略此回调");
                }
            }else{
                throw new BadRequestException("common", "没有找到单方号"+sqId+"的信息");
            }

            session.commit();
        } catch(CarsmartException e) {
            session.rollback();
            throw new BadRequestException("common", e.getMessage());
        } catch(Exception e) {
            session.rollback();
            LOGGER.error(e.getMessage(), e);
            throw new InternalErrorException(e);
        } finally {
            session.close();
            SemaphoreControllerUtil.getInstance().releaseInsureHandleSemaphore(sqId);
        }

利用session  获取mapper对象进行更新的第二种方法利用 map存储变量,用session的update方法

    Map<String, Object> paramMap=new HashMap<String, Object>();
        paramMap.put("modelQaId", modelQaId);
        SqlSession session=null;
        try {
            session=this.yangchebaoDbManagerImpl.getSqlSessionFactory().openReplicableSqlSession(false);
            session.update("cn.com.carsmart.ws.ibatis.mapper.ComplexQueryNewMapper.updateModelQaViewCnt", paramMap);
            session.commit();
        } catch(Exception e) {
            if(null != session) {
                session.rollback();
            }
            logger.error("method detail fail " + ExceptionUtils.getFullStackTrace(e));
        } finally {
            if(null != session) {
                session.close();
            }
        }
时间: 2024-09-29 23:20:53

session应用二的相关文章

Session机制二(案例)

一:案例一(简易购物车) 1.目录结构 2.step1.jsp 1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w

数往知来 ASP.NET Cookie Session Url &lt;二十九&gt;

ViewState_Cookie 一.Request的几个成员 -->Request.UrlReferrer():请求的来源,就是客户端上一次请求的url地址,防止盗链 -->Request.UrlHostAddress;获取浏览器端的IP地址,通过Socket.RemoveEndPoint  获得的客户端IP地址 -->Request.MapPath();   跟context.ServerMapPath()一样 二.Response的成员 -->Respose.Buffer 缓

分布式中使用Redis实现Session共享(二)

上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+iis实现负载均衡搭建负载均衡站点了,这里我们会搭建两个站点来验证redis实现的session是否能共享. 阅读目录 Session实现原理 session共享实现方案 问题拓展 总结 回到顶部 Session实现原理 session和cookie是我们做web开发中常用到的两个对象,它们之间会不会

tomcat+nginx+redis实现均衡负载、session共享(二)

今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.redis简介及下载安装 作为这次的主角,相信大家对redis应该都一定印象,redis是一款开源的高性能key-value数据库,拥有丰富的键值储存类型,并提供多种语言的API. 与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上.这就意

【转载】tomcat+nginx+redis实现均衡负载、session共享(二)

今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.redis简介及下载安装 作为这次的主角,相信大家对redis应该都一定印象,redis是一款开源的高性能key-value数据库,拥有丰富的键值储存类型,并提供多种语言的API. 与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上.这就意

(转)tomcat+nginx+redis实现均衡负载、session共享(二)

1.redis简介及下载安装 作为这次的主角,相信大家对redis应该都一定印象,redis是一款开源的高性能key-value数据库,拥有丰富的键值储存类型,并提供多种语言的API. 与一般数据库不同,redis是使用内存作为主存,而使用硬盘来实现数据持久化,而且redis是周期性的将数据写到硬盘上.这就意味着一旦我们服务器出现断电.重启之类的情况,我们很可能会出现数据丢失的情况,所以不建议使用redis来存放关键的数据.当然,也正因为redis读写数据都使用内存,所以它的速度是非常快的,很适

分布式集群环境下,如何实现session共享二(项目开发)

在上一篇分布式集群环境下,如何实现session共享一(应用场景)中,介绍了在分布式集群下,需要实现session共享的应用场景.并且最后留下了一个问题:在集群环境下,如何实现session的共享呢?.要解决这个问题,放在一篇中内容量有点大,还是一步一步来吧.本篇先搭建一个基础的web应用,完全基于原生态的servlet实现.思路是这样的: 1.准备一个页面index.jsp,页面中可以提交key/value对的请求参数数据数据 2.编写一个servlet,接收页面提交的请求,获取请求参数,并且

JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解

Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) JSP简介 JSP(Java Server Pages) 与Java Servlet一样,是在服务器端执行的,不同的是JSP先由服务器编译部署成Servlet执行. JSP技术的企业最佳实践(生成HTML内容) 新的JSP2.0规范版本包括新的功能(EL表达式,新增的Simple Tag和Tag

Session机制详解

虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java web application中应用session机制时常见的问题作出解答.     一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session,中文经常翻译为会话,