修改模板和结算订单

This commit is contained in:
yuyang 2021-08-31 19:47:36 +08:00
parent 79686e62d2
commit f453d8afbd
12 changed files with 503 additions and 394 deletions

View File

@ -197,7 +197,7 @@ public class XhpcPileOrderController extends BaseController {
xhpcChargeOrder.setEndTime(date); xhpcChargeOrder.setEndTime(date);
xhpcChargeOrder.setUpdateTime(date); xhpcChargeOrder.setUpdateTime(date);
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
Map<String, Object> map = addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1); Map<String, Object> map = xhpcRealTimeOrderService.addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 1);
JSONObject json = new JSONObject(map); JSONObject json = new JSONObject(map);
//消息对了内容 //消息对了内容
rabbimt(userId + "##" + json); rabbimt(userId + "##" + json);
@ -284,7 +284,6 @@ public class XhpcPileOrderController extends BaseController {
int startSoc = cacheOrderData.getStartSoc(); int startSoc = cacheOrderData.getStartSoc();
int endSoc = cacheOrderData.getEndSoc(); int endSoc = cacheOrderData.getEndSoc();
xhpcChargeOrder.setStartSoc(startSoc + ""); xhpcChargeOrder.setStartSoc(startSoc + "");
xhpcChargeOrder.setEndSoc(endSoc + ""); xhpcChargeOrder.setEndSoc(endSoc + "");
int status = cacheOrderData.getStatus(); int status = cacheOrderData.getStatus();
@ -324,173 +323,11 @@ public class XhpcPileOrderController extends BaseController {
xhpcChargeOrder.setStatus(2); xhpcChargeOrder.setStatus(2);
//异常原因 //异常原因
xhpcChargeOrder.setErroRemark("桩异常:" + stopReason + ">>>>用户id:" + userId + "为空"); xhpcChargeOrder.setErroRemark("桩异常:" + stopReason + ">>>>用户id:" + userId + "为空");
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
R.ok();
} }
BigDecimal balance = new BigDecimal(userMessage.get("balance").toString()).divide(new BigDecimal(100)); //结算
xhpcRealTimeOrderService.addSettlement(powerPrice,servicePrice,money,surplusPowerPrice,surplusServicePrice,xhpcChargeOrder,userId,userMessage,1);
//电站活动抵扣--抵扣的总金额
BigDecimal promotionDiscount = new BigDecimal(0);
//实际价格-用户支付的钱
BigDecimal actPrice =money;
//流量方总金额抽成
BigDecimal internetCommission =new BigDecimal(0);
//流量方服务费抽成
BigDecimal internetSvcCommission =new BigDecimal(0);
//平台总金额抽成
BigDecimal platformCommission =new BigDecimal(0);
//平台服务费抽成
BigDecimal platformSvcCommission =new BigDecimal(0);
//运维总抽成
BigDecimal operationCommission =new BigDecimal(0);
//运维服务费抽成
BigDecimal operationSvcCommission =new BigDecimal(0);
//判断是C端用户还是流量端用户
if (xhpcChargeOrder.getSource() == 0) {
String state = "";
BigDecimal discount = new BigDecimal(0);
//用户第几次充电
int count = xhpcChargeOrderService.getCount(userId,xhpcChargeOrder.getChargeOrderId());
if (count == 0) {
//活动折扣
Map<String, Object> promotion = xhpcChargeOrderService.getPromotion();
if (promotion != null && promotion.get("state") != null && promotion.get("discount") != null) {
//state 1.总金额 2.电费 3.服务费 discount 折扣率
state = promotion.get("state").toString();
discount =new BigDecimal(promotion.get("discount").toString());
}
}
if(!"".equals(state)){
//查看是否优惠为0
boolean fan = true;
if(discount.compareTo(new BigDecimal(0))==0){
fan=false;
}
if("1".equals(state)){
//总金额
if(fan){
promotionDiscount=money.multiply(discount);
actPrice = money.subtract(promotionDiscount);
surplusPowerPrice = surplusPowerPrice.subtract(promotionDiscount.divide(new BigDecimal(2)));
surplusServicePrice= surplusServicePrice.subtract(promotionDiscount.divide(new BigDecimal(2)));
}
}else if("2".equals(state)){
if(fan){
//电费
promotionDiscount =powerPrice.multiply(balance);
actPrice = money.subtract(promotionDiscount);
surplusPowerPrice=surplusPowerPrice.subtract(promotionDiscount);
}
}else if("3".equals(state)){
if(fan){
//服务费
promotionDiscount = servicePrice.multiply(balance);
actPrice = money.subtract(promotionDiscount);
surplusServicePrice =surplusServicePrice.subtract(promotionDiscount);
}
}
}
xhpcHistoryOrder.setInternetCommission(internetCommission);
xhpcHistoryOrder.setInternetSvcCommission(internetSvcCommission);
}else{
//流量方未实现
}
//获取运营商
Map<String, Object> operatorMessage = xhpcChargeOrderService.getOperatorMessage(xhpcChargeOrder.getChargingStationId());
if(operatorMessage !=null){
if(operatorMessage.get("maintenanceCommissionRate") !=null && operatorMessage.get("commissionType") !=null && operatorMessage.get("platformCommissionRate") !=null){
Integer commissionType = (Integer) operatorMessage.get("commissionType");
//运维提成
BigDecimal maintenanceCommissionRate = new BigDecimal(operatorMessage.get("maintenanceCommissionRate").toString()).divide(new BigDecimal(100));
//平台提成
BigDecimal platformCommissionRate = new BigDecimal(operatorMessage.get("platformCommissionRate").toString()).divide(new BigDecimal(100));
//提成类型0总金额提成 1服务费提成
if(commissionType==0){
BigDecimal multiply1 = surplusPowerPrice.multiply(platformCommissionRate);
BigDecimal multiply2 = surplusServicePrice.multiply(platformCommissionRate);
platformCommission = multiply1.add(multiply2);
//剩下的钱
surplusPowerPrice = surplusPowerPrice.subtract(multiply1);
surplusServicePrice = surplusServicePrice.subtract(multiply2);
BigDecimal multiply3 = surplusPowerPrice.multiply(maintenanceCommissionRate);
BigDecimal multiply4 = surplusServicePrice.multiply(maintenanceCommissionRate);
operationCommission = multiply1.add(multiply2);
//剩下的钱
surplusPowerPrice = surplusPowerPrice.subtract(multiply3);
surplusServicePrice = surplusServicePrice.subtract(multiply4);
}else if(commissionType==1){
BigDecimal multiply2 = surplusServicePrice.multiply(platformCommissionRate);
platformSvcCommission=multiply2;
//剩下的钱
surplusServicePrice = surplusServicePrice.subtract(multiply2);
BigDecimal multiply4 = surplusServicePrice.multiply(maintenanceCommissionRate);
operationCommission = multiply4;
//剩下的钱
surplusServicePrice = surplusServicePrice.subtract(multiply4);
}
}else{
//订单异常
xhpcChargeOrder.setStatus(2);
//异常原因
xhpcChargeOrder.setErroRemark("桩异常:" + stopReason + ">>>>用户id:" + userId + "为空" + ">>>>运营商数据为空");
}
}
Long chargeOrderId = xhpcChargeOrder.getChargeOrderId();
xhpcHistoryOrder.setChargeOrderId(chargeOrderId);
xhpcHistoryOrder.setChargingStationId(xhpcChargeOrder.getChargingStationId());
xhpcHistoryOrder.setUserId(userId);
xhpcHistoryOrder.setTerminalId(xhpcChargeOrder.getTerminalId());
xhpcHistoryOrder.setSerialNumber(xhpcChargeOrder.getSerialNumber());
xhpcHistoryOrder.setStartSoc(xhpcChargeOrder.getStartSoc());
xhpcHistoryOrder.setReconciliationStatus(0);
xhpcHistoryOrder.setSortingStatus(0);
xhpcHistoryOrder.setType(1);
//订单总价---运维服务费抽成
xhpcHistoryOrder.setTotalPrice(money.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setPromotionDiscount(promotionDiscount.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setActPrice(actPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setActPowerPrice(surplusPowerPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setActServicePrice(surplusServicePrice.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setInternetCommission(internetCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setInternetSvcCommission(internetSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setPlatformCommission(platformCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setPlatformSvcCommisssion(platformSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setOperationCommission(operationCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setOperationSvcCommission(operationSvcCommission.setScale(2, BigDecimal.ROUND_HALF_UP));
xhpcHistoryOrder.setStartSoc(startSoc+"");
xhpcHistoryOrder.setEndSoc(endSoc+"");
xhpcHistoryOrder.setReconciliationStatus(0);
xhpcHistoryOrder.setCreateTime(date);
//扣除用户实际消费金额添加消费记录
Map<String, Object> user = xhpcChargeOrderService.getUserMessage(userId);
//剩余的钱
BigDecimal balance1 =(BigDecimal) user.get("balance");
BigDecimal subtract = balance1.subtract(actPrice);
int i = xhpcChargeOrderService.updateUserBalance(userId, subtract);
if(i==0){
//扣钱失败
xhpcHistoryOrder.setStatus(2);
xhpcHistoryOrder.setRemark("扣钱失败");
}else{
xhpcHistoryOrderService.insert(xhpcHistoryOrder);
addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, cacheMap, orderNo);
//添加流水
xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date);
try{
//发送短信
if(user.get("phone") !=null){
String content = "【小华停止充电】尊敬的用户,你的爱车已停止充电,电量为:" + endSoc + "%,总费用为:" + actPrice + "元,充电费用明细,请查询小华充电小程序,谢谢。";
smsService.sendNotice(user.get("phone").toString(),content);
}
}catch (Exception e){
logger.info("<<<<<<<<<<<<<<<<发送短信失败>>>>>>>>>>>>>>>>>");
}
}
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("code", 500); map.put("code", 500);
map.put("userId", userId); map.put("userId", userId);
@ -503,192 +340,6 @@ public class XhpcPileOrderController extends BaseController {
return R.ok(); return R.ok();
} }
private void addPileEndOrder(XhpcHistoryOrder xhpcHistoryOrder, XhpcChargeOrder xhpcChargeOrder,
Map<String, Object> cacheMap, String orderNo) {
Date date = new Date();
Long chargeOrderId = xhpcChargeOrder.getChargeOrderId();
//删除实时数据获取最新的实时数据
xhpcRealTimeOrderService.deleteRealTimeOrder(xhpcChargeOrder.getChargeOrderId());
//添加新的实时数据
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
if (list != null && list.size() > 0) {
for (CacheRealtimeData cacheRealtimeData : list) {
addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 2);
}
}
//添加redis到数据库
XhpcOrderRedisRecord xhpcOrderRedisRecord =new XhpcOrderRedisRecord();
xhpcOrderRedisRecord.setChargeOrderId(chargeOrderId);
xhpcOrderRedisRecord.setHistoryOrderOd(xhpcHistoryOrder.getHistoryOrderId());
if(cacheMap.get("endSoc") !=null){
xhpcOrderRedisRecord.setEndSoc(cacheMap.get("endSoc").toString());
}
if(cacheMap.get("status") !=null){
xhpcOrderRedisRecord.setStatus(cacheMap.get("status").toString());
}
if(cacheMap.get("balance") !=null){
xhpcOrderRedisRecord.setBalance(cacheMap.get("balance").toString());
}
if(cacheMap.get("tel") !=null){
xhpcOrderRedisRecord.setTel(cacheMap.get("tel").toString());
}
if(cacheMap.get("startSoc") !=null){
xhpcOrderRedisRecord.setStartSoc(cacheMap.get("startSoc").toString());
}
if(cacheMap.get("startResult") !=null){
xhpcOrderRedisRecord.setStartResult(cacheMap.get("startResult").toString());
}
if(cacheMap.get("realtimeDataList") !=null){
xhpcOrderRedisRecord.setRealtimeDataList(cacheMap.get("realtimeDataList").toString());
}
if(cacheMap.get("remainingTime") !=null){
xhpcOrderRedisRecord.setRemainingTime(cacheMap.get("remainingTime").toString());
}
if(cacheMap.get("rateModelId") !=null){
xhpcOrderRedisRecord.setRateModelId(cacheMap.get("rateModelId").toString());
}
if(cacheMap.get("lt5alerted") !=null){
xhpcOrderRedisRecord.setLt5alerted(cacheMap.get("lt5alerted").toString());
}
if(cacheMap.get("orderData") !=null){
xhpcOrderRedisRecord.setOrderData(cacheMap.get("orderData").toString());
}
xhpcOrderRedisRecord.setCreateTime(date);
xhpcChargeOrderService.addXhpcOrderRedisRecord(xhpcOrderRedisRecord);
//删除redis
//redisService.deleteObject("order:"+orderNo);
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
}
/**
* 添加实时数据
*
* @param cacheRealtimeData
* @param xhpcChargeOrder
* @param orderNo 订单号
* @param type 1.实时数据回调 2.结算回调
* @return
*/
private Map<String, Object> addOrderTime(CacheRealtimeData cacheRealtimeData, XhpcChargeOrder xhpcChargeOrder,
String orderNo, Integer type) {
Map<String, Object> map = new HashMap<>();
Date date = new Date();
Long chargeOrderId = xhpcChargeOrder.getChargeOrderId();
XhpcRealTimeOrder xhpcRealTimeOrder = new XhpcRealTimeOrder();
xhpcRealTimeOrder.setChargingOrderId(xhpcChargeOrder.getChargeOrderId());
xhpcRealTimeOrder.setTransactionNumber(orderNo);
xhpcRealTimeOrder.setPileNumber(cacheRealtimeData.getPileNo());
String gunId = cacheRealtimeData.getGunId();
xhpcRealTimeOrder.setGunNumber(gunId);
if("00".equals(cacheRealtimeData.getPileGunStatus())){
xhpcRealTimeOrder.setPileGunStatus(0);
}else if("01".equals(cacheRealtimeData.getPileGunStatus())){
xhpcRealTimeOrder.setPileGunStatus(1);
}else{
xhpcRealTimeOrder.setPileGunStatus(2);
}
if("00".equals(cacheRealtimeData.getVehicleGunStatus())){
xhpcRealTimeOrder.setVehicleGunStatus(0);
}else{
xhpcRealTimeOrder.setVehicleGunStatus(1);
}
BigDecimal v = new BigDecimal(cacheRealtimeData.getWorkingVoltage()).divide(new BigDecimal(10));
BigDecimal c = new BigDecimal(cacheRealtimeData.getWorkingCurrent()).divide(new BigDecimal(10));
xhpcRealTimeOrder.setVoltage(v);
xhpcRealTimeOrder.setElectricCurrent(c);
xhpcRealTimeOrder.setGunLineTemperature(cacheRealtimeData.getGunLineTemperature());
xhpcRealTimeOrder.setGunLineNumber(cacheRealtimeData.getGunLineNumber());
Integer soc = cacheRealtimeData.getSoc();
xhpcRealTimeOrder.setSoc(soc.toString());
xhpcRealTimeOrder.setMaxTemperature(cacheRealtimeData.getMaxTemperature());
Integer chargingTime = cacheRealtimeData.getChargingTime();
if(chargingTime>60){
int hours = chargingTime / 60;
int mins = (chargingTime-(hours*60)) % 60;
xhpcRealTimeOrder.setChargingTime(hours+""+mins+"");
}else{
xhpcRealTimeOrder.setChargingTime(chargingTime+"");
}
Integer remainingTime = cacheRealtimeData.getRemainingTime();
if(remainingTime>60){
int hours = remainingTime / 60;
double mins = (remainingTime-(hours*60))/60;
xhpcRealTimeOrder.setRemainingTime(hours+""+new BigDecimal(mins).setScale(0)+"");
}else{
double mins = (double)(remainingTime/60);
xhpcRealTimeOrder.setRemainingTime(new BigDecimal(mins).setScale(0)+"");
}
BigDecimal decimal = new BigDecimal(10000);
BigDecimal divide = new BigDecimal(cacheRealtimeData.getLossChargingDegree()).divide(decimal);
BigDecimal chargingDegree = new BigDecimal(cacheRealtimeData.getChargingDegree()).divide(decimal);
xhpcRealTimeOrder.setChargingDegree(chargingDegree);
xhpcRealTimeOrder.setLossChargingDegree(divide);
BigDecimal amountCharged = new BigDecimal(cacheRealtimeData.getAmountCharged()).divide(decimal);
xhpcRealTimeOrder.setAmountCharged(amountCharged);
xhpcRealTimeOrder.setHardwareFault(cacheRealtimeData.getHardwareFault());
if ("00".equals(cacheRealtimeData.getStatus())) {
xhpcRealTimeOrder.setStatus(0);
} else if ("01".equals(cacheRealtimeData.getStatus())) {
xhpcRealTimeOrder.setStatus(1);
} else if ("02".equals(cacheRealtimeData.getStatus())) {
xhpcRealTimeOrder.setStatus(2);
} else {
xhpcRealTimeOrder.setStatus(3);
}
xhpcRealTimeOrder.setCreateTime(date);
xhpcRealTimeOrder.setUserId(xhpcChargeOrder.getUserId());
Long chargingStationId = xhpcChargeOrder.getChargingStationId();
xhpcRealTimeOrder.setChargingStationId(chargingStationId);
xhpcRealTimeOrderService.addXhpcRealTimeOrder(xhpcRealTimeOrder);
//实时数据存入MYsqlsoc电流电压
XhpcChargeOrderSoc xhpcChargeOrderSoc = new XhpcChargeOrderSoc();
xhpcChargeOrderSoc.setChargeOrderId(chargeOrderId);
xhpcChargeOrderSoc.setSoc(soc.toString());
xhpcChargeOrderSoc.setCreateTime(date);
xhpcRealTimeOrderService.addSOC(xhpcChargeOrderSoc);
XhpcChargeOrderCurrent xhpcChargeOrderCurrent =new XhpcChargeOrderCurrent();
xhpcChargeOrderCurrent.setChargeOrderId(chargeOrderId);
xhpcChargeOrderCurrent.setCurrent(c.toString());
xhpcChargeOrderCurrent.setCreateTime(date);
xhpcRealTimeOrderService.addCurrent(xhpcChargeOrderCurrent);
XhpcChargeOrderVoltage xhpcChargeOrderVoltage =new XhpcChargeOrderVoltage();
xhpcChargeOrderVoltage.setChargeOrderId(chargeOrderId);
xhpcChargeOrderVoltage.setVoltage(v.toString());
xhpcChargeOrderVoltage.setCreateTime(date);
xhpcRealTimeOrderService.addVoltage(xhpcChargeOrderVoltage);
if(type==1){
map.put("code", 200);
map.put("message", "实时数据");
map.put("userId", xhpcChargeOrder.getUserId());
Map<String, Object> data = new HashMap<>();
data.put("amountCharged",divide);
data.put("gunNumber",gunId);
data.put("chargingOrderId",chargeOrderId);
data.put("soc",soc);
data.put("chargingTime",xhpcRealTimeOrder.getChargingTime());
data.put("electricCurrent",c);
data.put("voltage", v);
data.put("power", xhpcChargeOrder.getPower());
data.put("chargingDegree", chargingDegree);
data.put("remainingTime",xhpcRealTimeOrder.getRemainingTime());
data.put("serialNumber",orderNo.substring(0,16));
data.put("parkingInstructions","在非充电情况下占用车位按照0.30元/分钟收费");
map.put("data", data);
}
return map;
}
/** /**
* @param status 状态 * @param status 状态
* @param remark 备注 * @param remark 备注

View File

@ -21,7 +21,7 @@ import java.util.Map;
*/ */
@RestController @RestController
@RequestMapping("/histotyOrder") @RequestMapping("/histotyOrder")
@Api(value = "历史订单接口", tags = "历史订单接口") @Api(value = "历史订单接口", tags = "历史订单接口")
public class XhpcHistoryOrderController extends BaseController { public class XhpcHistoryOrderController extends BaseController {
@Autowired @Autowired

View File

@ -0,0 +1,39 @@
package com.xhpc.order.controller;
import com.xhpc.common.core.web.controller.BaseController;
import com.xhpc.common.core.web.domain.BaseEntity;
import com.xhpc.common.core.web.page.TableDataInfo;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author yuyang
* @date 2021/8/31 16:20
* @Version 1.0
*/
@RestController
@RequestMapping("/statistics")
@Api(value = "统计接口", tags = "统计接口")
public class XhpcStatisticsController extends BaseController {
/**
* 小时统计
*/
@GetMapping("/getTimeIntervalPage")
public TableDataInfo getTimeIntervalPage(String phone, String transactionNumber, @RequestParam("status")Integer status, String chargingStationName, Long operatorId, Integer source, String startTime, String endTime, @RequestParam("userId") Long userId, Integer type)
{
startPage();
//List<Map<String, Object>> listPage = xhpcHistoryOrderService.getListPage(phone, transactionNumber, status, chargingStationName, operatorId, source, startTime, endTime, userId, type);
return getDataTable(new ArrayList<>());
}
}

View File

@ -0,0 +1,312 @@
package com.xhpc.order.domain;
import com.xhpc.common.core.web.domain.BaseEntity;
import java.math.BigDecimal;
/**
* 时段订单统计
* @author yuyang
* @date 2021/8/31 14:43
* @Version 1.0
*/
public class XhpcStatisticsTimeInterval extends BaseEntity {
/**
* 时段订单统计id
*/
private Long statisticsTimeIntervalId;
/**
* 24个时段每个时段 每个时段一小时
*/
private Integer status;
/**
* 电量
*/
private BigDecimal chargingDegree;
/**
* 充电时长小时
*/
private BigDecimal chargingTime;
/**
* 充电次数
*/
private Integer chargingNumber;
/**
* 电费
*/
private BigDecimal powerPrice;
/**
* 服务费
*/
private BigDecimal servicePrice;
/**
* 订单总价
*/
private BigDecimal totalPrice;
/**
* 电站活动抵扣--抵扣的总金额
*/
private BigDecimal promotionDiscount;
/**
* 实际价格-用户支付的钱
*/
private BigDecimal actPrice;
/**
* 实收电费-运营商电费
*/
private BigDecimal actPowerPrice;
/**
* 实收服务费-运营商服务费
*/
private BigDecimal actServicePrice;
/**
* 流量方总金额抽成
*/
private BigDecimal internetCommission;
/**
* 流量方服务费抽成
*/
private BigDecimal internetSvcCommission;
/**
* 平台总金额抽成
*/
private BigDecimal platformCommission;
/**
* 平台服务费抽成
*/
private BigDecimal platformSvcCommisssion;
/**
* 运维总抽成
*/
private BigDecimal operationCommission;
/**
* 运维服务费抽成
*/
private BigDecimal operationSvcCommission;
/**
* 0 平台 1 运营商 2流量方
*/
private Integer type;
/**
* 运营商和流量方id
*/
private BigDecimal operatorInternetId;
/**
* 删除标志0代表存在 2代表删除
*/
private Integer delFlag;
public Long getStatisticsTimeIntervalId() {
return statisticsTimeIntervalId;
}
public void setStatisticsTimeIntervalId(Long statisticsTimeIntervalId) {
this.statisticsTimeIntervalId = statisticsTimeIntervalId;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public BigDecimal getChargingDegree() {
return chargingDegree;
}
public void setChargingDegree(BigDecimal chargingDegree) {
this.chargingDegree = chargingDegree;
}
public BigDecimal getChargingTime() {
return chargingTime;
}
public void setChargingTime(BigDecimal chargingTime) {
this.chargingTime = chargingTime;
}
public Integer getChargingNumber() {
return chargingNumber;
}
public void setChargingNumber(Integer chargingNumber) {
this.chargingNumber = chargingNumber;
}
public BigDecimal getPowerPrice() {
return powerPrice;
}
public void setPowerPrice(BigDecimal powerPrice) {
this.powerPrice = powerPrice;
}
public BigDecimal getServicePrice() {
return servicePrice;
}
public void setServicePrice(BigDecimal servicePrice) {
this.servicePrice = servicePrice;
}
public BigDecimal getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(BigDecimal totalPrice) {
this.totalPrice = totalPrice;
}
public BigDecimal getPromotionDiscount() {
return promotionDiscount;
}
public void setPromotionDiscount(BigDecimal promotionDiscount) {
this.promotionDiscount = promotionDiscount;
}
public BigDecimal getActPrice() {
return actPrice;
}
public void setActPrice(BigDecimal actPrice) {
this.actPrice = actPrice;
}
public BigDecimal getActPowerPrice() {
return actPowerPrice;
}
public void setActPowerPrice(BigDecimal actPowerPrice) {
this.actPowerPrice = actPowerPrice;
}
public BigDecimal getActServicePrice() {
return actServicePrice;
}
public void setActServicePrice(BigDecimal actServicePrice) {
this.actServicePrice = actServicePrice;
}
public BigDecimal getInternetCommission() {
return internetCommission;
}
public void setInternetCommission(BigDecimal internetCommission) {
this.internetCommission = internetCommission;
}
public BigDecimal getInternetSvcCommission() {
return internetSvcCommission;
}
public void setInternetSvcCommission(BigDecimal internetSvcCommission) {
this.internetSvcCommission = internetSvcCommission;
}
public BigDecimal getPlatformCommission() {
return platformCommission;
}
public void setPlatformCommission(BigDecimal platformCommission) {
this.platformCommission = platformCommission;
}
public BigDecimal getPlatformSvcCommisssion() {
return platformSvcCommisssion;
}
public void setPlatformSvcCommisssion(BigDecimal platformSvcCommisssion) {
this.platformSvcCommisssion = platformSvcCommisssion;
}
public BigDecimal getOperationCommission() {
return operationCommission;
}
public void setOperationCommission(BigDecimal operationCommission) {
this.operationCommission = operationCommission;
}
public BigDecimal getOperationSvcCommission() {
return operationSvcCommission;
}
public void setOperationSvcCommission(BigDecimal operationSvcCommission) {
this.operationSvcCommission = operationSvcCommission;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public BigDecimal getOperatorInternetId() {
return operatorInternetId;
}
public void setOperatorInternetId(BigDecimal operatorInternetId) {
this.operatorInternetId = operatorInternetId;
}
public Integer getDelFlag() {
return delFlag;
}
public void setDelFlag(Integer delFlag) {
this.delFlag = delFlag;
}
}

View File

@ -0,0 +1,10 @@
package com.xhpc.order.service;
/**
* @author yuyang
* @date 2021/8/31 16:21
* @Version 1.0
*/
public interface IStatisticsService {
}

View File

@ -1,10 +1,8 @@
package com.xhpc.order.service; package com.xhpc.order.service;
import com.xhpc.common.core.web.domain.AjaxResult; import com.xhpc.common.core.web.domain.AjaxResult;
import com.xhpc.order.domain.XhpcChargeOrderCurrent; import com.xhpc.common.data.redis.CacheRealtimeData;
import com.xhpc.order.domain.XhpcChargeOrderSoc; import com.xhpc.order.domain.*;
import com.xhpc.order.domain.XhpcChargeOrderVoltage;
import com.xhpc.order.domain.XhpcRealTimeOrder;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
@ -103,4 +101,39 @@ public interface IXhpcRealTimeOrderService {
* @return * @return
*/ */
AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice,BigDecimal servicePrice); AjaxResult getExamine(Long chargingOrderId, BigDecimal powerPrice,BigDecimal servicePrice);
/**
* 结算订单
* @param powerPrice
* @param servicePrice
* @param money
* @param surplusPowerPrice
* @param surplusServicePrice
* @param xhpcChargeOrder
* @param userId
* @param userMessage
* @param type 0 不发短信 1发短信
*/
void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, Map<String, Object> userMessage,Integer type);
/**
* 添加redis到数据库
* @param xhpcHistoryOrder
* @param xhpcChargeOrder
* @param orderNo
* @param type 1.审核 2.自动结算
*/
void addPileEndOrder(XhpcHistoryOrder xhpcHistoryOrder, XhpcChargeOrder xhpcChargeOrder, String orderNo, Integer type);
/**
* 添加实时数据
*
* @param cacheRealtimeData
* @param xhpcChargeOrder
* @param orderNo 订单号
* @param type 1.实时数据回调 2.结算回调
* @return
*/
Map<String, Object> addOrderTime(CacheRealtimeData cacheRealtimeData, XhpcChargeOrder xhpcChargeOrder,
String orderNo, Integer type);
} }

View File

@ -0,0 +1,12 @@
package com.xhpc.order.service.impl;
import com.xhpc.order.service.IStatisticsService;
/**
* @author yuyang
* @date 2021/8/31 16:22
* @Version 1.0
*/
public class StatisticsServiceImpl implements IStatisticsService {
}

View File

@ -21,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -134,7 +135,7 @@ public class XhpcChargeOrderServiceImpl implements IXhpcChargeOrderService {
//启动充电 //启动充电
StartChargingData startChargingData = new StartChargingData(); StartChargingData startChargingData = new StartChargingData();
//订单流水号 终端号+年月日时分秒+自增4位 共32位 //订单流水号 终端号+年月日时分秒+自增4位 共32位
Date date = new Date(); Date date = Calendar.getInstance().getTime();
String format = DateUtil.format(date, "yyMMddHHmmss"); String format = DateUtil.format(date, "yyMMddHHmmss");
//自增 //自增
String orderNo = serialNumber + format + StaticBeanUtil.seqDec("gun:" + serialNumber + ".seqdec"); String orderNo = serialNumber + format + StaticBeanUtil.seqDec("gun:" + serialNumber + ".seqdec");

View File

@ -75,7 +75,6 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
* 历史信息费率时段 * 历史信息费率时段
*/ */
private Map<String, Object> getRateTime(String serialNumber,String actPrice){ private Map<String, Object> getRateTime(String serialNumber,String actPrice){
Map<String, Object> map =new HashMap<>();
BigDecimal powerPriceTotal =new BigDecimal(0); BigDecimal powerPriceTotal =new BigDecimal(0);
BigDecimal servicePriceTotal =new BigDecimal(0); BigDecimal servicePriceTotal =new BigDecimal(0);
//累计充电时间计费模型开始时间结束时间已充金额 //累计充电时间计费模型开始时间结束时间已充金额
@ -83,11 +82,8 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
Long rateModelId = chargeOrder.getRateModelId(); Long rateModelId = chargeOrder.getRateModelId();
Date startTime2 = chargeOrder.getStartTime(); Date startTime2 = chargeOrder.getStartTime();
Date updateTime2 = chargeOrder.getEndTime(); Date updateTime2 = chargeOrder.getEndTime();
BigDecimal amountCharged = chargeOrder.getAmountCharged();
//充电度数 //充电度数
BigDecimal chargingDegree = chargeOrder.getChargingDegree(); BigDecimal chargingDegree = chargeOrder.getChargingDegree();
//每分钟充电度数=累计时间/60
BigDecimal chargingTimeNumber = chargeOrder.getChargingDegree();
List<Map<String, Object>> list =new ArrayList<>(); List<Map<String, Object>> list =new ArrayList<>();
//1时间没有跨天 //1时间没有跨天
long betweenDay = DateUtil.between(startTime2, updateTime2, DateUnit.DAY); long betweenDay = DateUtil.between(startTime2, updateTime2, DateUnit.DAY);
@ -116,8 +112,6 @@ public class XhpcHistoryOrderServiceImpl implements IXhpcHistoryOrderService {
//算出相差时间, //算出相差时间,
double time = (updateTime2.getTime()-startTime2.getTime())/60000; double time = (updateTime2.getTime()-startTime2.getTime())/60000;
BigDecimal decimal = new BigDecimal(time).setScale(2); BigDecimal decimal = new BigDecimal(time).setScale(2);
//每分钟多少度
BigDecimal degree =chargingDegree.divide(decimal,2,BigDecimal.ROUND_HALF_UP);
//获取费率时间段 //获取费率时间段
String startTime = DateUtil.formatTime(startTime2); String startTime = DateUtil.formatTime(startTime2);
String endTime = DateUtil.formatTime(updateTime2); String endTime = DateUtil.formatTime(updateTime2);

View File

@ -12,6 +12,8 @@ import com.xhpc.order.mapper.XhpcRealTimeOrderMapper;
import com.xhpc.order.service.IXhpcChargeOrderService; import com.xhpc.order.service.IXhpcChargeOrderService;
import com.xhpc.order.service.IXhpcHistoryOrderService; import com.xhpc.order.service.IXhpcHistoryOrderService;
import com.xhpc.order.service.IXhpcRealTimeOrderService; import com.xhpc.order.service.IXhpcRealTimeOrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -37,10 +39,12 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
private IXhpcHistoryOrderService xhpcHistoryOrderService; private IXhpcHistoryOrderService xhpcHistoryOrderService;
@Autowired @Autowired
private SmsService smsService; private RedisService redisService;
@Autowired @Autowired
private RedisService redisService; private SmsService smsService;
private static final Logger logger = LoggerFactory.getLogger(XhpcRealTimeOrderServiceImpl.class);
@Override @Override
public List<Map<String, Object>> list(String phone, String transactionNumber, Integer source, String chargingStationName, String terminalName, Long operatorId, String startTime, String endTime,Integer status,Long userId,Integer type) { public List<Map<String, Object>> list(String phone, String transactionNumber, Integer source, String chargingStationName, String terminalName, Long operatorId, String startTime, String endTime,Integer status,Long userId,Integer type) {
@ -160,10 +164,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
} }
xhpcChargeOrder.setStatus(3); xhpcChargeOrder.setStatus(3);
xhpcChargeOrder.setAmountCharged(money); xhpcChargeOrder.setAmountCharged(money);
//生成一条历史订单
XhpcHistoryOrder xhpcHistoryOrder = new XhpcHistoryOrder();
xhpcHistoryOrder.setPowerPriceTotal(powerPrice);
xhpcHistoryOrder.setServicePriceTotal(servicePrice);
Long userId = xhpcChargeOrder.getUserId(); Long userId = xhpcChargeOrder.getUserId();
Map<String, Object> userMessage = xhpcChargeOrderService.getUserMessage(userId); Map<String, Object> userMessage = xhpcChargeOrderService.getUserMessage(userId);
if (userMessage == null || userMessage.get("balance") == null) { if (userMessage == null || userMessage.get("balance") == null) {
@ -171,7 +171,32 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcChargeOrder.setStatus(2); xhpcChargeOrder.setStatus(2);
//异常原因 //异常原因
xhpcChargeOrder.setErroRemark("用户id:" + userId + "为空"); xhpcChargeOrder.setErroRemark("用户id:" + userId + "为空");
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
return AjaxResult.error("用户id:" + userId + "为空");
} }
//生成一条历史订单
addSettlement(powerPrice, servicePrice, money, surplusPowerPrice, surplusServicePrice, xhpcChargeOrder, userId, userMessage,0);
return AjaxResult.success();
}
/**
* 结算订单
* @param powerPrice
* @param servicePrice
* @param money
* @param surplusPowerPrice
* @param surplusServicePrice
* @param xhpcChargeOrder
* @param userId
* @param userMessage
* @param type 0 不发短信 1发短信
*/
@Override
public void addSettlement(BigDecimal powerPrice, BigDecimal servicePrice, BigDecimal money, BigDecimal surplusPowerPrice, BigDecimal surplusServicePrice, XhpcChargeOrder xhpcChargeOrder, Long userId, Map<String, Object> userMessage,Integer type) {
XhpcHistoryOrder xhpcHistoryOrder =new XhpcHistoryOrder();
xhpcHistoryOrder.setPowerPriceTotal(powerPrice);
xhpcHistoryOrder.setServicePriceTotal(servicePrice);
BigDecimal balance = new BigDecimal(userMessage.get("balance").toString()).divide(new BigDecimal(100)); BigDecimal balance = new BigDecimal(userMessage.get("balance").toString()).divide(new BigDecimal(100));
//电站活动抵扣--抵扣的总金额 //电站活动抵扣--抵扣的总金额
BigDecimal promotionDiscount = new BigDecimal(0); BigDecimal promotionDiscount = new BigDecimal(0);
@ -309,7 +334,6 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcHistoryOrder.setReconciliationStatus(0); xhpcHistoryOrder.setReconciliationStatus(0);
Date date = new Date(); Date date = new Date();
xhpcHistoryOrder.setCreateTime(date); xhpcHistoryOrder.setCreateTime(date);
//扣除用户实际消费金额添加消费记录 //扣除用户实际消费金额添加消费记录
Map<String, Object> user = xhpcChargeOrderService.getUserMessage(userId); Map<String, Object> user = xhpcChargeOrderService.getUserMessage(userId);
//剩余的钱 //剩余的钱
@ -318,17 +342,24 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
int i = xhpcChargeOrderService.updateUserBalance(userId, subtract); int i = xhpcChargeOrderService.updateUserBalance(userId, subtract);
if(i==0){ if(i==0){
//扣钱失败 //扣钱失败
xhpcHistoryOrder.setStatus(2); xhpcChargeOrder.setStatus(2);
xhpcHistoryOrder.setRemark("扣钱失败"); xhpcChargeOrder.setErroRemark("扣钱失败");
}else{ }else{
xhpcHistoryOrderService.insert(xhpcHistoryOrder); xhpcHistoryOrderService.insert(xhpcHistoryOrder);
// addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber()); addPileEndOrder(xhpcHistoryOrder, xhpcChargeOrder, xhpcChargeOrder.getSerialNumber(),1);
//添加流水 //添加流水
xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date); xhpcChargeOrderService.addUserAccountStatement(userId, actPrice.negate(), subtract, xhpcChargeOrder.getChargeOrderId(), 3, date);
try{
//发送短信
if(user.get("phone") !=null){
String content = "【小华停止充电】尊敬的用户,你的爱车已停止充电,电量为:" + xhpcChargeOrder.getEndSoc() + "%,总费用为:" + actPrice + "元,充电费用明细,请查询小华充电小程序,谢谢。";
smsService.sendNotice(user.get("phone").toString(),content);
}
}catch (Exception e){
logger.info("<<<<<<<<<<<<<<<<发送短信失败>>>>>>>>>>>>>>>>>");
}
} }
xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder); xhpcChargeOrderService.updateXhpcChargeOrder(xhpcChargeOrder);
return AjaxResult.success();
} }
@ -388,7 +419,8 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcRealTimeOrderMapper.deleteChargeVoltage(chargingOrderId); xhpcRealTimeOrderMapper.deleteChargeVoltage(chargingOrderId);
} }
private void addPileEndOrder(XhpcHistoryOrder xhpcHistoryOrder, XhpcChargeOrder xhpcChargeOrder,String orderNo) { @Override
public void addPileEndOrder(XhpcHistoryOrder xhpcHistoryOrder, XhpcChargeOrder xhpcChargeOrder, String orderNo,Integer type) {
Map<String, Object> cacheMap = redisService.getCacheMap("order:" + orderNo); Map<String, Object> cacheMap = redisService.getCacheMap("order:" + orderNo);
Date date = new Date(); Date date = new Date();
Long chargeOrderId = xhpcChargeOrder.getChargeOrderId(); Long chargeOrderId = xhpcChargeOrder.getChargeOrderId();
@ -398,7 +430,7 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList"); List<CacheRealtimeData> list = (List<CacheRealtimeData>) cacheMap.get("realtimeDataList");
if (list != null && list.size() > 0) { if (list != null && list.size() > 0) {
for (CacheRealtimeData cacheRealtimeData : list) { for (CacheRealtimeData cacheRealtimeData : list) {
addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, 2); addOrderTime(cacheRealtimeData, xhpcChargeOrder, orderNo, type);
} }
} }
//添加redis到数据库 //添加redis到数据库
@ -443,7 +475,9 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
//删除redis //删除redis
//redisService.deleteObject("order:"+orderNo); //redisService.deleteObject("order:"+orderNo);
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
logger.info("<<<<<<<<<<<<<<<<订单结束回调成功>>>>>>>>>>>>>>>>>");
} }
@ -457,7 +491,8 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
* @param type 1.实时数据回调 2.结算回调 * @param type 1.实时数据回调 2.结算回调
* @return * @return
*/ */
private void addOrderTime(CacheRealtimeData cacheRealtimeData, XhpcChargeOrder xhpcChargeOrder, @Override
public Map<String, Object> addOrderTime(CacheRealtimeData cacheRealtimeData, XhpcChargeOrder xhpcChargeOrder,
String orderNo, Integer type) { String orderNo, Integer type) {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
@ -549,6 +584,25 @@ public class XhpcRealTimeOrderServiceImpl implements IXhpcRealTimeOrderService {
xhpcChargeOrderVoltage.setVoltage(v.toString()); xhpcChargeOrderVoltage.setVoltage(v.toString());
xhpcChargeOrderVoltage.setCreateTime(date); xhpcChargeOrderVoltage.setCreateTime(date);
addVoltage(xhpcChargeOrderVoltage); addVoltage(xhpcChargeOrderVoltage);
if(type==1){
map.put("code", 200);
map.put("message", "实时数据");
map.put("userId", xhpcChargeOrder.getUserId());
Map<String, Object> data = new HashMap<>();
data.put("amountCharged",divide);
data.put("gunNumber",gunId);
data.put("chargingOrderId",chargeOrderId);
data.put("soc",soc);
data.put("chargingTime",xhpcRealTimeOrder.getChargingTime());
data.put("electricCurrent",c);
data.put("voltage", v);
data.put("power", xhpcChargeOrder.getPower());
data.put("chargingDegree", chargingDegree);
data.put("remainingTime",xhpcRealTimeOrder.getRemainingTime());
data.put("serialNumber",orderNo.substring(0,16));
data.put("parkingInstructions","在非充电情况下占用车位按照0.30元/分钟收费");
map.put("data", data);
}
return map;
} }
} }

View File

@ -361,6 +361,7 @@
<if test="chargingOrderId !=null"> <if test="chargingOrderId !=null">
and ho.charge_order_id =#{chargingOrderId} and ho.charge_order_id =#{chargingOrderId}
</if> </if>
order by ho.create_time desc
</select> </select>
<select id="getListPage" resultType="map"> <select id="getListPage" resultType="map">

View File

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.xhpc.wxma.domain.WebSocketClient; import com.xhpc.wxma.domain.WebSocketClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import javax.websocket.*; import javax.websocket.*;
@ -99,17 +100,18 @@ public class OrderNotificationWebSocket {
map.put("message", "实时数据"); map.put("message", "实时数据");
map.put("userId", this.userId); map.put("userId", this.userId);
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("amountCharged","-"); BigDecimal decimal = new BigDecimal(0);
data.put("gunNumber","-"); data.put("amountCharged",decimal);
data.put("chargingOrderId","-"); data.put("gunNumber","0");
data.put("soc","-"); data.put("chargingOrderId",0L);
data.put("chargingTime","-"); data.put("soc",0);
data.put("electricCurrent","-"); data.put("chargingTime","0");
data.put("voltage", "-"); data.put("electricCurrent",decimal);
data.put("power", "-"); data.put("voltage", decimal);
data.put("chargingDegree", "-"); data.put("power", "0");
data.put("remainingTime","-"); data.put("chargingDegree", decimal);
data.put("serialNumber","-"); data.put("remainingTime","0");
data.put("serialNumber","0");
data.put("parkingInstructions","在非充电情况下占用车位按照0.30元/分钟收费"); data.put("parkingInstructions","在非充电情况下占用车位按照0.30元/分钟收费");
map.put("data", data); map.put("data", data);
JSONObject json = new JSONObject(map); JSONObject json = new JSONObject(map);