1.基础数据结构
一个合同号对应多个批号,一个批号对应多个车辆。
{
"arrivalReport":{
"contractContent":{
"contractNumber":"2021-11-17合同号",
"orderNumber":"2021-11-17-0032订单号",
"buyer":"aaaa",
"seller":"aa金矿",
"productName":"aa矿",
"productCode":"2021-11-17"
},
"arrivalNo":"2021-11-17"
},
"CarTransport":[
{
"batchNumber":"2021-11-17-0032批号",
"carAmount":"2车数",
"cuGrade":"0.32",
"auGrade":"0.10",
"agGrade":"0.20"
},
{
"batchNumber":"2021-11-17-0033批号",
"carAmount":"3车数",
"cuGrade":"0.32",
"auGrade":"0.20",
"agGrade":"0.1"
}
],
"driverDetails":[
{
"batchNumber":"2021-11-17-0032批号",
"transportWeight":"52.3重量",
"carNumber":"车牌号01-1",
"carModel":"车型01-1",
"driverName":"张三",
"contactNumber":"17746302456",
"idCard":"41142515554525"
},
{
"batchNumber":"2021-11-17-0032批号",
"transportWeight":"54.03",
"carNumber":"车牌号01-2",
"carModel":"车型01-1",
"driverName":"李四",
"contactNumber":"17746302546",
"idCard":"41142515558877"
},
{
"batchNumber":"2021-11-17-0033批号",
"transportWeight":"48.03",
"carNumber":"车牌号02-1",
"carModel":"车型02-1",
"driverName":"张三",
"contactNumber":"17746302456",
"idCard":"41142515554525"
},
{
"batchNumber":"2021-11-17-0033批号",
"transportWeight":"52.03",
"carNumber":"车牌号02-2",
"carModel":"车型02-2",
"driverName":"李四",
"contactNumber":"17746302546",
"idCard":"41142515558877"
}, {
"batchNumber":"2021-11-17-0033批号",
"transportWeight":"49.3",
"carNumber":"车牌号02-3",
"carModel":"车型02-3",
"driverName":"张三",
"contactNumber":"17746302456",
"idCard":"41142515554525"
}
]
}
2.添加到数据库表
数据结构:一个合同号对应多个批号,一个批号对应多个车辆。
数据库表:按照单一车辆信息,单条存储
思路:1.遍历车辆信息,
2.通过车辆批号找到对应的品位信息cu,Au,Ag,
3.获取合同号信息
废话不多说,直接上代码。
@Override
public int domesticMaterialsInfo(Map<String,Object> params){
boolean b=false;
JSONObject jsonObject=null;
//判断params参数不为空
if (params != null) {
//传入的数据转成json对象
jsonObject= (JSONObject) JSON.toJSON(params);
}else {
//params为空返回null
return 0;
}
//判断json数组不为空 注意:不可以用is.Empty
if (jsonObject.getJSONArray("driverDetails")!=null) {
//获取jason中的数组
JSONArray driverDetailsJsonArray = jsonObject.getJSONArray("driverDetails");
//循环数组
for (int i = 0; i < driverDetailsJsonArray.size(); i++) {
//创建实体类 (实体类不要放在循环外面,否则插入只能插入一条数据)
TruckScaleMeasurementEntity truckEntity= new TruckScaleMeasurementEntity();
//获取数组中的对象保到实体 array--》获取json对象---》获取值
truckEntity.setFLotNumber((String) driverDetailsJsonArray.getJSONObject(i).get("batchNumber"));//批配批号
truckEntity.setFForecastGross((String) driverDetailsJsonArray.getJSONObject(i).get("transportWeight"));//预报毛重
truckEntity.setFCarsname((String) driverDetailsJsonArray.getJSONObject(i).get("carNumber"));//车牌号
truckEntity.setFCarsmodel((String) driverDetailsJsonArray.getJSONObject(i).get("carModel"));//车型
truckEntity.setFDriversname((String) driverDetailsJsonArray.getJSONObject(i).get("driverName"));//司机姓名
truckEntity.setFDriversPhone((String) driverDetailsJsonArray.getJSONObject(i).get("contactNumber"));//手机号
truckEntity.setFDriversIdcard((String) driverDetailsJsonArray.getJSONObject(i).get("idCard"));//身份证
truckEntity.setFInOutDate((Date) driverDetailsJsonArray.getJSONObject(i).get("transportTime"));//预报进厂日期
//判断json数组不为空 注意:不可以用is.Empty
if (jsonObject.getJSONArray("CarTransport")!=null) {
//获取jason中的数组
JSONArray carTransportJsonArray = jsonObject.getJSONArray("CarTransport");
//循环数组
for (int j = 0; j < carTransportJsonArray.size(); j++) {
//判断数组和上面的数据对应 一对多的关系(具体看业务数据) 保持数据对应
if (carTransportJsonArray.getJSONObject(j).get("batchNumber").equals(driverDetailsJsonArray.getJSONObject(i).get("batchNumber"))){
//获取数组中的对象保到实体 array--》获取json对象---》获取值
truckEntity.setFTruckNum((String) carTransportJsonArray.getJSONObject(j).get("carAmount"));//车数
truckEntity.setFCu((String) carTransportJsonArray.getJSONObject(j).get("cuGrade"));//预报cu铜品位
truckEntity.setFAu((String) carTransportJsonArray.getJSONObject(j).get("auGrade"));//预报Au金品位
truckEntity.setFAg((String) carTransportJsonArray.getJSONObject(j).get("agGrade"));//预报Ag银品位
}
}
}
//判断json对象不为空 注意:不可以用is.Empty
if (jsonObject.getJSONObject("arrivalReport")!=null) {
//判断json对象中 的json对象不为空 注意:不可以用is.Empty(如果不判断,不存在会报500)
if ( jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent")!=null) {
//获取值 获取json对象-->获取json对象--->获取值
truckEntity.setFContractBillNo((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("contractNumber"));//合同编号
truckEntity.setFOrderNo((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("orderNumber"));//订单号
truckEntity.setFTo((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("buyer"));//去向
truckEntity.setFFrom((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("seller"));//来源
truckEntity.setFMaterialName((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("productName"));//物料名称
truckEntity.setFMaterial((String) jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("productCode"));//物料编码
}
//获取json对象中的值添加到实体类中
truckEntity.setFArrivalNo((String) jsonObject.getJSONObject("arrivalReport").get("arrivalNo"));//到货单号
}
b=truckScaleMeasurementService.save(truckEntity);
}
}
return b?1:0;
}
3.只做数据转换,不做添加到数据库操作。
将别的系统传过来的数据转,换成自己数据库对应字段,只做返回。不写入数据库。
直接上代码。
1.测试数据
{
"arrivalReport":{
"contractContent":{
"contractNumber":"合同号",
"orderNumber":"订单号",
"buyer":"订单号",
"seller":"来源",
"productName":"物料名称",
"productCode":"物料编码"
},
"arrivalNo":"到货单号"
},
"shipInformation":[
{
"roughWeight":"预报毛重1"
},
{
"roughWeight":"预报毛重2"
}
],
"arrivalDetails":[
{
"batchNumber":"批次号1",
"carAmount":"车数1",
"grossWeight":"预报毛重1",
"cuGrade":"cu1",
"auGrade":"au1",
"agGrade":"ag1"
},
{
"batchNumber":"批次号2",
"carAmount":"车数2",
"grossWeight":"预报毛重2",
"cuGrade":"cu2",
"auGrade":"au2",
"agGrade":"ag2"
}
],
"impurityElement":[
{
"elementName":"杂质元素名1",
"impurityResult":"外商提供杂质元素加权品位1"
},
{
"elementName":"杂质元素名2",
"impurityResult":"外商提供杂质元素加权品位2"
}
],
"shipRelated":[
{
"weightDeduction":"杂质总量1",
"weightMethod":"过磅类型1"
},
{
"weightDeduction":"杂质总量2",
"weightMethod":"过磅类型2"
}
]
}
2.字段转换代码。
@Override
public Map importedMaterialsInfo(Map<String,Object> params){
//创捷一个集合保存最终结果返回
Map mapResult=new HashMap<>();
JSONObject jsonObject=null;
//判断params参数不为空
if (params != null) {
//转成json对象
jsonObject= (JSONObject) JSON.toJSON(params);
}else {
//params为空返回null
return mapResult;
}
if (jsonObject.getJSONObject("arrivalReport")!=null) {
// 数据格式map(map)创建两个map集合
Map arrivalReportMap = new HashMap<>();
Map contractContentMap = new HashMap<>();
//获取值存到map中 获取json对象-->获取json对象--->获取值
if (jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent")!=null) {
contractContentMap.put("f_contract_bill_no", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("contractNumber"));//合同编号
contractContentMap.put("f_order_no", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("orderNumber"));//订单号
contractContentMap.put("f_to", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("buyer"));//去向
contractContentMap.put("f_from", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("seller"));//来源
contractContentMap.put("f_material_name", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("productName"));//物料名称
contractContentMap.put("f_material", jsonObject.getJSONObject("arrivalReport").getJSONObject("contractContent").get("productCode"));//物料名称
arrivalReportMap.put("contractContent", contractContentMap);
}else{
arrivalReportMap.put("contractContent", "未找到对应的数据");
}
arrivalReportMap.put("f_arrival_no", jsonObject.getJSONObject("arrivalReport").get("arrivalNo"));//到货单号
mapResult.put("arrivalReport", arrivalReportMap);
}else{
mapResult.put("arrivalReport", "未找到对应的数据");
}
if (jsonObject.getJSONArray("shipInformation")!=null) {
//获取jason对象中的数组
JSONArray shipInformationJsonArray = jsonObject.getJSONArray("shipInformation");
List shipInformationList = new ArrayList<>();//新建一个数组存放carTransportMap集合
//循环json数组(carTransportJsonArray)
for (int i = 0; i < shipInformationJsonArray.size(); i++) {
Map shipInformationMap = new HashMap<>();
//获取数组中的对象存入carTransportMap中 获取对象--->获取值
shipInformationMap.put("f_forecast_gross", shipInformationJsonArray.getJSONObject(i).get("roughWeight"));//预报毛重
shipInformationList.add(i, shipInformationMap);//放入list中(carTransportList)
}
mapResult.put("shipInformation", shipInformationList);//保存到最终结果
}
if (jsonObject.getJSONArray("arrivalDetails")!=null) {
//获取jason对象中的数组
JSONArray arrivalDetailsJsonArray = jsonObject.getJSONArray("arrivalDetails");
List arrivalDetailsList = new ArrayList<>();//新建一个数组存放list集合
for (int i = 0; i < arrivalDetailsJsonArray.size(); i++) {
Map arrivalDetailsMap = new HashMap<>();
//循环json数组
arrivalDetailsMap.put("f_lot_number", arrivalDetailsJsonArray.getJSONObject(i).get("batchNumber"));//批配批号
arrivalDetailsMap.put("f_truck_num", arrivalDetailsJsonArray.getJSONObject(i).get("carAmount"));//车数
arrivalDetailsMap.put("f_forecast_gross", arrivalDetailsJsonArray.getJSONObject(i).get("grossWeight"));//预报毛重
arrivalDetailsMap.put("f_cu", arrivalDetailsJsonArray.getJSONObject(i).get("cuGrade"));//Cu
arrivalDetailsMap.put("f_au", arrivalDetailsJsonArray.getJSONObject(i).get("auGrade"));//Au
arrivalDetailsMap.put("f_ag", arrivalDetailsJsonArray.getJSONObject(i).get("agGrade"));//Ag
arrivalDetailsList.add(i, arrivalDetailsMap);//放入list中
}
mapResult.put("arrivalDetails", arrivalDetailsList);//保存到最终结果
}
if (jsonObject.getJSONArray("impurityElement")!=null){
//获取jason对象中的数组
JSONArray impurityElementJsonArray = jsonObject.getJSONArray("impurityElement");
List impurityElementList = new ArrayList<>();//新建一个数组存放list集合
for (int i = 0; i < impurityElementJsonArray.size(); i++) {
Map impurityElementMap = new HashMap<>();
//循环json数组
impurityElementMap.put("elementName", impurityElementJsonArray.getJSONObject(i).get("elementName"));//杂质元素名
impurityElementMap.put("impurityResult", impurityElementJsonArray.getJSONObject(i).get("impurityResult"));//外商提供杂质元素加权品位
impurityElementList.add(i, impurityElementMap);
}
mapResult.put("impurityElement", impurityElementList);//保存到最终结果
}
if (jsonObject.getJSONArray("shipRelated")!=null) {
// 获取jason对象中的数组
JSONArray shipRelatedJsonArray = jsonObject.getJSONArray("shipRelated");
List shipRelatedList = new ArrayList<>();//新建一个数组存放list集合
for (int i = 0; i < shipRelatedJsonArray.size(); i++) {
Map shipRelatedMap = new HashMap<>();
//循环json数组
shipRelatedMap.put("f_impurity", shipRelatedJsonArray.getJSONObject(i).get("weightDeduction"));//杂质总量
shipRelatedMap.put("f_bill_type", shipRelatedJsonArray.getJSONObject(i).get("weightMethod"));//过磅类型
shipRelatedList.add(i, shipRelatedMap);
}
mapResult.put("shipRelated", shipRelatedList);//保存到最终结果
}
//返回最终结果
return mapResult;
}
3.运行结果,
{
"data": {
"shipInformation": [
{
"f_forecast_gross": "预报毛重1"
},
{
"f_forecast_gross": "预报毛重2"
}
],
"shipRelated": [
{
"f_impurity": "杂质总量1",
"f_bill_type": "过磅类型1"
},
{
"f_impurity": "杂质总量2",
"f_bill_type": "过磅类型2"
}
],
"impurityElement": [
{
"impurityResult": "外商提供杂质元素加权品位1",
"elementName": "杂质元素名1"
},
{
"impurityResult": "外商提供杂质元素加权品位2",
"elementName": "杂质元素名2"
}
],
"arrivalReport": {
"contractContent": {
"f_order_no": "订单号",
"f_material_name": "物料名称",
"f_contract_bill_no": "合同号",
"f_from": "来源",
"f_to": "订单号",
"f_material": "物料编码"
},
"f_arrival_no": "到货单号"
},
"arrivalDetails": [
{
"f_ag": "ag1",
"f_forecast_gross": "预报毛重1",
"f_au": "au1",
"f_cu": "cu1",
"f_lot_number": "批次号1",
"f_truck_num": "车数1"
},
{
"f_ag": "ag2",
"f_forecast_gross": "预报毛重2",
"f_au": "au2",
"f_cu": "cu2",
"f_lot_number": "批次号2",
"f_truck_num": "车数2"
}
]
},
"code": 0,
"msg": "succeed"
}