从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();
}
}

session应用二的更多相关文章

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

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

  2. Session机制二(简易购物车案例)

    一:案例一(简易购物车) 1.目录结构 2.step1.jsp <%@ page language="java" contentType="text/html; c ...

  3. [转]分布式中使用Redis实现Session共享(二)

    本文转自:http://www.cnblogs.com/yanweidie/p/4678095.html 上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见 ...

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

    上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...

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

    今天我们接着说上次还没完成session共享的部分,还没看过上一篇的朋友可以先看下上次内容,http://www.cnblogs.com/zhrxidian/p/5432886.html. 1.red ...

  6. 转:cookie和session(二)——php应用

    文章来自于:http://blog.csdn.net/half1/article/details/21650211 本文将介绍cookie在session在php中的基本用法. 1.cookie   ...

  7. Asp.Net HttpApplication请求管道与Session(二)

    Asp.Net 回话的创建与结束 LogHelper.LogHelper _log = new LogHelper.LogHelper(); /// <summary> /// 程序开始- ...

  8. 本地存储 cookie,session,localstorage( 二)angular-local-storage

    原文:https://github.com/grevory/angular-local-storage#api-documentation Get Started (1)Bower: $ bower ...

  9. tornado 自定义session (二)

    有了上一步的基础,我们将session改造成一个模块,这样我们就可以通过配置,来使用不同方式(redis,数据库等)的session. 添加一个新目录:TornadoSession conf.py是配 ...

  10. Flask入门request session cookie(二)

    1 HTTP方法分类 1 GET 浏览器告知服务器:只获取页面上的信息并发给我.这是最常用的方法. 2 HEAD 浏览器告诉服务器:欲获取信息,但是只关心消息头 .应用应像处理 GET 请求一样来处理 ...

随机推荐

  1. CSS的水平居中和垂直居中解决方案

    在写CSS样式的时候,有时为了美观,会添加水平居中和垂直居中,这时候你有可能会遇到很棘手的问题,有些水平居中和垂直居中的属性添加上去完全没反应,下面给大家列举一些CSS水平居中和垂直居中的终极解决方案 ...

  2. POJ 1191 记忆化搜索

    (我是不会告诉你我是抄的http://www.cnblogs.com/scau20110726/archive/2013/02/27/2936050.html这个人的) 一开始没有想到要化一下方差的式 ...

  3. 分享vue中 slot用法

    //slot默认用法 //slot带参数name用法

  4. Flex XML/XMLList 常用操作

    1       XML.XMLList操作 Flex对xml提供了很多强大而灵活的操作.相对于其他语言,flex对xml的格式要求不那么苛刻,只要符合基本格式语法的字符串,flex能非常简单的转换成x ...

  5. Yeslab华为安全HCIE七门之-防火墙UTM技术(5篇)

    课程目录:     华为安全HCIE-第四门-防火墙UTM技术(5篇)\1_内容安全_内容过滤.avi 华为安全HCIE-第四门-防火墙UTM技术(5篇)\2_内容安全-url过滤.avi 华为安全H ...

  6. Python标准库:内置函数ascii(object)

    这个函数跟repr()函数一样,返回一个可打印的对象字符串方式表示.当遇到非ASCII码时,就会输出\x,\u或\U等字符来表示. 与Python 2版本号里的repr()是等效的函数. 样例: #a ...

  7. amlogic M8操作gpio bank

    參照规格书: r代表:读 a代表GPIOAO bank 0x28代表read bit echo r a 0x28 > /sys/class/amlogic/debug 操作GPIO口读取 w代表 ...

  8. Oracle-02-数据库概述

    一.数据库用途 用于存放数据的软件 当中Application server重要,将数据存在表中每一个表关系就能够反映不同表之间数据的关系,比方淘宝用户注冊.商品买卖等数据存在操作系统的目录中,不便于 ...

  9. 用css画三角形

    当我们给某个图片做一个弹出层的时候,假设要让我们的弹出层显示一个小箭头,能够用css来画 用div来演示 div{ border:12px solid; berder-color:transparen ...

  10. selection-内容选中跟光标移动

    如果我们希望手动的改变edittext的光标,我们可以使用 setSelection(int start, int end); setSelection(int index); 这个方法,如果我们选择 ...