您的位置:首页 > 编程语言 > Java开发

java 前后台json的传递

2017-01-20 00:00 253 查看
java 的web项目中使用原生json,如下:

在@Controller中的方法代码:

//保存公估费信息和公估费明细
@RequiresPermissions("bcasecost:bCaseCost:edit")
@RequestMapping(value = "saveCaseCost")
@ResponseBody
public Object saveCost(CountInfo countInfo ,Model model,HttpServletRequest request) {
//打印测试信息输出的位置
System.out.println("<com.thinkgem.jeesite.modules.dt.bcasecost.web.BCaseCostController.countCaseCost>");

//调用服务层方法,判断案件是否已经计算过公估费,已整理过则更新该信息;否则,通过整理页面提交的数据组成BCaseCost记录,并插入到数据库BCaseCost表中
String message = null;
String bCaseMainId = countInfo.getbCaseMain().getId();
BCaseCost bCaseCost = bCaseCostService.isCounted(bCaseMainId);				//判断案件是否已经计算过公估费
if(null == bCaseCost){														//没有计算过公估费的案件保存记录执行插入方法
message = bCaseCostService.saveCost(countInfo);
}else{																		//计算过的公估费再次保存需要更新公估费记录
message = bCaseCostService.updateCost(countInfo,bCaseCost);
}
return JSON.parse(message);    //这里很关键
}

@Service服务层方法:

/**
* 	插入新的公估费记录
* @param countInfo
* @return
*/
private String saveNewCost(CountInfo countInfo){
//测试时打印输出位置
System.out.println("<com.thinkgem.jeesite.modules.dt.bcasecost.service.BCaseCostService.saveNewCost>");

//装配插入或更新的公估费表和公估费详情子表的实体对象
BCaseCost bCaseCost = new BCaseCost();

//页面提交的案件信息
BCaseMain bCaseMain = bCaseMainService.get(countInfo.getbCaseMain().getId());

//给controller的message返回到页面
String message;

//判断给定案件ID和公估费类型为0的公估费记录是否存在
String isHavedRecord = null;
bCaseCost.setBCaseMainId(bCaseMain.getId());	//查询条件:案件Id
bCaseCost.setCommtype("0");						//查询条件:0-计算出来的公估费
bCaseCost.setIsinvoiced("N");					//查询条件:N-未开发票
isHavedRecord = dao.isHavedRecord(bCaseCost);
System.out.println("案件ID为: " + bCaseMain.getId() + " 的案件在公估费表存在状态:" + isHavedRecord);

List<BCaseCost> bCaseCostIsOnly = dao.getCountedCostList(bCaseCost);
//如果上述查询条件查询存在唯一的记录,表示该公估费正常计算过且保存过,下一步可以开启审核,不必再次保存,直接将该公估费id传回Controller返回给页面即可
//如果,查询不为空,表示已经保存过计算过的结果
if(null != bCaseCostIsOnly && 0 != bCaseCostIsOnly.size()){
System.out.println("查询到的记录条数:" + bCaseCostIsOnly.size());
//记录存在不唯一
if(1 != bCaseCostIsOnly.size()){
message = "{'status':'2','message':'Record not only!--该案件存在多条未审核未开票且计算过的公估费记录'}";
return message;
}
//记录存在且唯一
message = "{'status':'1','message':'" + bCaseCostIsOnly.get(0).getId() + "'}";
System.out.println(message);
return message;
}
//上面条件过滤后,否则,准备插入一条新计算后公估费记录.
String countType = countInfo.getCountType();	//计算类型:01-常规,00-重大疑难

String expenseType = countInfo.getExpenseType();	//案件的合同收费类型:EXPENSE_TYPE=fee_type:1-包干,2-分项,3-包干加查勘,4-分项加查勘

Double caseBaseFee = countInfo.getCaseBaseFee().doubleValue();	//案件基本公估费

Double majorFee = countInfo.getMajorFee().doubleValue();		//重大疑难费用

Double outCityFee = countInfo.getOutCityFee().doubleValue();	//市外交通费

Double inCityFee = countInfo.getInCityFee().doubleValue();		//市内交通费

Double mealFee = countInfo.getMealFee().doubleValue();		//餐费费

Double hotelFee = countInfo.getHotelFee().doubleValue();		//住宿费

Double dataFee = countInfo.getDataFee().doubleValue();		//查阅资料费

Double otherFee = countInfo.getOtherFee().doubleValue();		//其它费用

Double costFeeSum = countInfo.getCostFeeSum().doubleValue();		//公估费总计

Double costFinalFee = countInfo.getCostFinalFee().doubleValue();	//最终公估费

Double cess = costFinalFee * 6.0000 / 100.0000;		//税额

Double income = costFinalFee - cess;			//收入

//页面传来的公估费的计算后的信息
System.out.println("页面提交信息>>>>> 公估费计算类型:" + countType
+ ",合同收费类型:" + expenseType
+ ",基本公估费:" + caseBaseFee
+ ",重大疑难:" + majorFee
+ ",城际交通费:" + outCityFee
+ ",市内交通费:" + inCityFee
+ ",住宿费:" + hotelFee
+ ",餐费:" + mealFee
+ ",查阅资料费:" + dataFee
+ ",其它费用:" + otherFee
+ ",公估费总计:" + costFeeSum
+ ",最终公估费:" + costFinalFee
);

System.out.println("页面提交的BCaseMain表信息>>>>> ID:" + bCaseMain.getId()
+ ",案件状态:" + bCaseMain.getCaseState()
+ ",合同号:" + bCaseMain.getInsurCompProtocol());

//插入新记录
//生成唯一ID给子表使用
bCaseCost.preInsert();
String bCaseCostId = bCaseCost.getId();
System.out.println("初始化并插入的公估费记录>>>>>> ID:" + bCaseCostId);			//测试打印公估费记录唯一ID
//初始化
bCaseCost.setBCaseMainId(bCaseMain.getId());				//设置案件主表ID:页面提交
bCaseCost.setCalMode(countType);							//设置公估费计算类型:页面提交
bCaseCost.setCommtype("0");									//设置公估费类型:0-公估费 ,1-加项 ,2-减项
bCaseCost.setIncome(new BigDecimal(income));				//设置收入 =  最终公估费-税额
bCaseCost.setCess(new BigDecimal(cess));					//设置税额 = 根据最终公估费在本方法内计算(已经固定为最终公估费*6%)
bCaseCost.setComm(new BigDecimal(costFinalFee));			//设置最终公估费:页面返回计算后的最终公估费
bCaseCost.setIsinvoiced("N");								//设置开票状态:N-未开票 Y-已开票
bCaseCost.setBilldate(new Date());							//设置记账日期:当前日期
bCaseCost.setExamStatus("0");								//设置审核状态:0-未审核 1-审核通过 2-审核退回
bCaseCost.setCommconf("0");									//设置实收状态:0-未实收 1-已实收
bCaseCost.setOfficeId(bCaseMain.getOffice().getId());		//部门编号
bCaseCost.setDepartment(bCaseMain.getDepartment());			//公司编号
bCaseCost.setInsurCompClientCode(bCaseMain.getInsurCompClientCode());	//委托人编码-来自b_case_main表

//测试使用
bCaseCost.setRemarks("lh-测试数据.公估费计算保存插入模块");

//公估费插入
dao.insert(bCaseCost);
/*//将案件表中该案件的公估费金额写入 --此操作应该在审核通过后进行写入主表的finalFee字段
BCaseMain bCaseMainFee = bCaseMainService.get(bCaseCost.getBCaseMainId());
String sql = "";
bCaseMainFee.setFinalFee( bCaseCost.getComm() );
bCaseMainService.save(bCaseMainFee);*/
if("01".equals(countType)){
//插入BCaseCostDetail表insertBCaseCostDetail(,"00",)方法中的00、01...05请参考字典表  type = surcharge_fee_type
if(outCityFee > 0.0){
//城际交通费
insertBCaseCostDetail(bCaseCost,"00",new BigDecimal(outCityFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
if(inCityFee > 0.0){
//市内交通费
insertBCaseCostDetail(bCaseCost,"01",new BigDecimal(inCityFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
if(hotelFee > 0.0){
//住宿费
insertBCaseCostDetail(bCaseCost,"02",new BigDecimal(hotelFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
if(mealFee > 0.0){
//餐费
insertBCaseCostDetail(bCaseCost,"03",new BigDecimal(mealFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
if(dataFee > 0.0){
//查阅资料费
insertBCaseCostDetail(bCaseCost,"04",new BigDecimal(dataFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
if(otherFee > 0.0){
//其它费用
insertBCaseCostDetail(bCaseCost,"05",new BigDecimal(otherFee));  //子表初始化、装配到主表的容器对象内 ,最后插入子表内
}
}

message = "{'status':'0','message':'" + bCaseCost.getId() + "'}";
System.out.println(message);
return message;
}

主要是这个返回值 -- message = "{'status':'2','message':'Record not only!--该案件存在多条未审核未开票且计算过的公估费记录'}";

jsp页面中使用该json串代码如下:

/* [保存]按钮点击事件  */
function saveCaseCost(){
var isCounted = $("#isCounted");
if(1 == buttonClickOrder){
$.post(
"${ctx}/bcasecost/bCaseCost/saveCaseCost",
$("#BCaseCostCountForm").serialize(),
function(result){
//jBox.alert(result);
//var myJsonMessage = JSON.parse(result);
/* var myJson = result.parseJSON();
var last=obj.toJSONString(); //将JSON对象转化为JSON字符
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符 */
//jBox.alert(result.status);

if("0" == result.status || "1" == result.status){
//jBox.alert(result.message);
if("0" == result.status){
jBox.alert("保存成功!");
}else{
jBox.alert("保存成功!");
}

$("#bCaseCostId").val(result.message);
$("#isCounted").val("1");
buttonClickOrder = 2;
}else if("2" == result.status){
jBox.alert(result.message);
buttonClickOrder = 1;
}else{
jBox.alert("数据存储过程错误,请联系维护人员解决!");
}
});
}else if(0 == buttonClickOrder){
jBox.alert("计算方式已经改变,请重新计算公估费!");
}
}

function(result){

/* 。。。。。*/

}

这里的result既是从后台传回来的json串,直接当成c里的结构体
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java json