Browse Source

修复直接下单的bug

master
xyiege 3 years ago
parent
commit
f9c206690f
  1. 10
      src/main/java/cn/chjyj/szwh/controller/api/OrderController.java
  2. 8
      src/main/java/cn/chjyj/szwh/service/OrderService.java
  3. 136
      src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java

10
src/main/java/cn/chjyj/szwh/controller/api/OrderController.java

@ -139,6 +139,9 @@ public class OrderController extends BaseController {
/** /**
* {"appkey":"0acdbb709ee95707","goods":[{"goods_isli":"010007-00000000349999999999-2","use_years":"1"}], * {"appkey":"0acdbb709ee95707","goods":[{"goods_isli":"010007-00000000349999999999-2","use_years":"1"}],
* "timestamp":"1667283296","user_isli":"899998-000000001640-3"} * "timestamp":"1667283296","user_isli":"899998-000000001640-3"}
*
* goods_isli=010007-00000000352199999999-4&is_car=2
* &user_isli=899998-000000001640-3&use_years=1&random=0.12520860309501458
*/ */
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
log.info("createOrder:"+reqstr); log.info("createOrder:"+reqstr);
@ -152,18 +155,21 @@ public class OrderController extends BaseController {
String redisKey = "createOrder_"+userIsli; String redisKey = "createOrder_"+userIsli;
Object redisCon = RedisUtil.get(redisKey); Object redisCon = RedisUtil.get(redisKey);
Map<String,Object> retmap = orderService.createOrder(userIsli,jGoodsArray); Map<String,Object> retmap = orderService.createOrder(userIsli,jGoodsArray);
if(redisCon!=null){ if(redisCon!=null){
jsonObject.put("code","error"); jsonObject.put("code","error");
jsonObject.put("msg","请勿重复提交"); jsonObject.put("msg","请勿重复提交");
return jsonObject;
}else{ }else{
// 10s redis // 10s redis
RedisUtil.set(redisKey,"1",10); RedisUtil.set(redisKey,"1",10);
} }
//count process use cost time
long end =System.currentTimeMillis(); long end =System.currentTimeMillis();
long howuse = (end-start)/1000l; long howuse = (end-start)/1000l;
jsonObject.put("data",retmap); jsonObject.put("data",retmap.get("rdata"));
jsonObject.put("msg","成功"); jsonObject.put("msg",retmap.get("msg"));
jsonObject.put("useTime",howuse); jsonObject.put("useTime",howuse);
return jsonObject; return jsonObject;
} }

8
src/main/java/cn/chjyj/szwh/service/OrderService.java

@ -118,4 +118,12 @@ public interface OrderService {
* @return * @return
*/ */
Map<String,Object> getOrderMapByBatch(String batchcode,String userIsli); Map<String,Object> getOrderMapByBatch(String batchcode,String userIsli);
/**
* 购物车中的商品结算
* @param userIsli
* @param gJsonArray
* @return
*/
Map<String,Object> buyCarGoods(String userIsli,JSONArray gJsonArray);
} }

136
src/main/java/cn/chjyj/szwh/service/impl/OrderServiceImpl.java

@ -81,6 +81,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 组合查询订单信息 * 组合查询订单信息
*
* @param qumap * @param qumap
* @param page * @param page
* @param limit * @param limit
@ -244,6 +245,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 订单详情,方法2 * 订单详情,方法2
*
* @param batchcode * @param batchcode
* @return * @return
*/ */
@ -344,6 +346,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 订单信息细化 * 订单信息细化
*
* @param bathcode * @param bathcode
* @return * @return
*/ */
@ -480,6 +483,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 关闭时间为当前 * 关闭时间为当前
*
* @param batchcode * @param batchcode
* @return * @return
*/ */
@ -516,6 +520,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 统计所有订单总数 * 统计所有订单总数
*
* @return * @return
*/ */
@Override @Override
@ -531,6 +536,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 查找购买流程并返回订单编号 * 查找购买流程并返回订单编号
*
* @param userIsli * @param userIsli
* @param goodsIsli * @param goodsIsli
* @param userYears * @param userYears
@ -625,17 +631,18 @@ public class OrderServiceImpl implements OrderService {
if (orderUser != null) { if (orderUser != null) {
userId = orderUser.getId(); userId = orderUser.getId();
} else { } else {
// 获取远程用户信息 Map adumap = addOrderUserByBatchacode(batchCode,userIsli);
JSONObject userjson = SzwhApiUtils.getApiUser(userIsli); if(adumap!=null){
if(StringUtils.isBlank(userjson.getString("data"))){ String errmsg = (String)adumap.get("error");
if(StringUtils.isNotEmpty(errmsg)){
log.error("未查询到用户信息,下单失败" + userIsli); log.error("未查询到用户信息,下单失败" + userIsli);
bretMap.put("error","未查询到用户信息,下单失败"); bretMap.put("msg",errmsg);
return bretMap; }
String oduid =(String)adumap.get("oduid");
if(StringUtils.isNotEmpty(oduid)){
userId = Integer.valueOf(oduid);
}
} }
//添加用户
OrderUser odu =SzOrderUtils.mkOrderUser(batchCode,userjson,0);
orderUserMapper.addOrderUser(odu);
userId = odu.getId();
} }
// 订单实体 // 订单实体
@ -705,6 +712,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 输出条件查询订单 * 输出条件查询订单
*
* @param qmap * @param qmap
* @param page * @param page
* @param limit * @param limit
@ -789,6 +797,7 @@ public class OrderServiceImpl implements OrderService {
/** /**
* 创建订单实现方法 * 创建订单实现方法
*
* @param userIsli * @param userIsli
* @param goodsJsonArray post过来的json参数 * @param goodsJsonArray post过来的json参数
* @return * @return
@ -802,6 +811,7 @@ public class OrderServiceImpl implements OrderService {
retmap.put("msg", "用户不存在"); retmap.put("msg", "用户不存在");
return retmap; return retmap;
} }
Map bmap = new HashMap();// 执行返回map
// 该用户的购物车 // 该用户的购物车
String rkey = "car_" + userIsli; String rkey = "car_" + userIsli;
String batchcode = "";//订单编号,一次一个 String batchcode = "";//订单编号,一次一个
@ -811,7 +821,7 @@ public class OrderServiceImpl implements OrderService {
//todo check it has null //todo check it has null
Integer ituseYear = Integer.valueOf(tuseYear); Integer ituseYear = Integer.valueOf(tuseYear);
String goodsIsli = tmpgjson.getString("goods_isli"); String goodsIsli = tmpgjson.getString("goods_isli");
Map bmap = buyFindGoods(userIsli,goodsIsli,ituseYear); bmap = buyFindGoods(userIsli, goodsIsli, ituseYear);
//检查是否有错误信息 //检查是否有错误信息
String berrmsg = (String) bmap.get("error"); String berrmsg = (String) bmap.get("error");
if (StringUtils.isNotEmpty(berrmsg)) { if (StringUtils.isNotEmpty(berrmsg)) {
@ -820,23 +830,37 @@ public class OrderServiceImpl implements OrderService {
return retmap; return retmap;
} }
//返回订单编号 //返回订单编号
batchcode = (String)bmap.get("batcha"); batchcode = (String) bmap.get("batchcode");
if(StringUtils.isNotEmpty(batchcode)){
// 从购物车中删除该goodsisli // 检查购物车中是否有该商品,有则删除
SzOrderUtils.delOdGoodsIsliFromCar(rkey,goodsIsli); Map ucar = SzCarUtils.getCar(rkey);
if (ucar.get(goodsIsli) != null) {
SzCarUtils.delCart(userIsli, goodsIsli);
} }
} else { } else {
// 多个商品同时结算 // 多个商品同时结算
// 应用场景:购物车中勾选多个产品进行结算
//$batchcode = $this->buyCarGoods($user_isli, $goods);
bmap = buyCarGoods(userIsli, goodsJsonArray);
} }
//1、订单号一个 2、用户一个 3、订单商品(一)多个 4、操作购物车 //1、订单号一个 2、用户一个 3、订单商品(一)多个 4、操作购物车
// export order map // export order map
// order basic \order goods |order user // order basic \order goods |order user
retmap = getOrderMapByBatch(batchcode,userIsli); // 检查是否有执行过程中的错误
String errmsg = (String) bmap.get("error");
if (StringUtils.isNotEmpty(errmsg)) {
retmap.put("msg", errmsg);
retmap.put("rdata", "");
} else {
retmap.put("msg", "成功");
retmap.put("rdata", getOrderMapByBatch(batchcode, userIsli));
}
return retmap; return retmap;
} }
/** /**
* 根据订单号列举出所有相关 * 根据订单号列举出所有相关
*
* @param batchcode 订单号 * @param batchcode 订单号
* @param userIsli 用户编号 * @param userIsli 用户编号
* @return * @return
@ -858,8 +882,65 @@ public class OrderServiceImpl implements OrderService {
return otmap; return otmap;
} }
/**
* 购物车订单商品结算
*
* @param userIsli
* @param gJsonArray
* @return
*/
public Map<String, Object> buyCarGoods(String userIsli, JSONArray gJsonArray) {
Map outmap = new HashMap();
//服务费 订单中费用
BigDecimal serviceCharge = new BigDecimal("0.00");
BigDecimal totalMoney = new BigDecimal("0.00");
//
String batchacode = SzOrderUtils.createOrderBatchcode();
// ratio setting
AccountRatioSetting accountRatioSetting = accountRatioSettingMapper.getUsingAccRatioSetting();
AccountRatioDetail accountRatioDetail = accountRatioDetailMapper.getAccRatioDetailByIdRole(accountRatioSetting.getId(), 2);
//add order user
Map odumap = addOrderUserByBatchacode(batchacode,userIsli);
Integer buyUid=0;
if(odumap!=null){
String oduid= (String)odumap.get("oduid");
if(StringUtils.isNotEmpty(oduid)){
buyUid =Integer.valueOf(oduid);
}
}
// get username
String buyUserName = orderUserMapper.getOrderUserById(buyUid).getName();
// 检查购物车中是否有该商品,有则删除
String rkey = "car_" + userIsli;
Map ucar = SzCarUtils.getCar(rkey);
for(int i=0;i<gJsonArray.size();i++){
JSONObject tgjson = gJsonArray.getJSONObject(i);
String gisli = tgjson.getString("goods_isli");
// 是否在购物车里面
if (ucar.get(gisli) != null) {
Goods goods = goodsMapper.getGoodsFuelByIsLi(gisli);
if(goods==null){
log.error(gisli+",标的不存在");
outmap.put("error","标的不存在");
return outmap;
}
GoodsDetail goodsDetail = goodsDetailMapper.getGoodsDetailBygid(goods.getGoodsDetailId());
//校验订单信息合法
SzOrderUtils.checkOrder(goods, goodsDetail, userIsli);
// 检查商品库存等
//todo
// 完成下单后,从购物车移除
SzCarUtils.delCart(userIsli, gisli);
}
}
return outmap;
}
/** /**
* 结算 * 结算
*
* @param order * @param order
* @param orderGoodsDetailList * @param orderGoodsDetailList
* @return * @return
@ -936,4 +1017,29 @@ public class OrderServiceImpl implements OrderService {
rtlist.add(ptmap); rtlist.add(ptmap);
return rtlist; return rtlist;
} }
/**
* 插入订单用户表
*
* @param batchCode 订单号
* @param userIsli 用户号
* @return
*/
private Map<String, Object> addOrderUserByBatchacode(String batchCode, String userIsli) {
Map rmap = new HashMap();
int userId = 0;
// 获取远程用户信息
JSONObject userjson = SzwhApiUtils.getApiUser(userIsli);
if (StringUtils.isBlank(userjson.getString("data"))) {
rmap.put("error", "未查询到用户信息,下单失败");
return rmap;
}
//添加用户
OrderUser odu = SzOrderUtils.mkOrderUser(batchCode, userjson, 1);
orderUserMapper.addOrderUser(odu);
userId = odu.getId();
rmap.put("oduid", userId);
return rmap;
}
} }

Loading…
Cancel
Save