package com.ruoyi.system.ControllerUtil; import com.alibaba.fastjson2.JSONObject; import com.ruoyi.system.domain.*; import com.ruoyi.system.service.IOrderService; import com.ruoyi.system.service.IGoodsOrderService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * 购物车生成订单工具类 */ public class CartOrderUtil { private static final Logger logger = LoggerFactory.getLogger(CartOrderUtil.class); /** * 服务类购物车下单 * @param user 用户 * @param cart 购物车 * @param serviceGoods 商品 * @param userAddress 地址 * @param makeTime 预约时间 * @param orderService 服务订单service * @return 下单结果Map */ public static Map createServiceOrderFromCart(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, String makeTime, IOrderService orderService, com.ruoyi.system.service.IOrderLogService orderLogService,String maincorid) { Map result = new HashMap<>(); try { //派单模式 Integer dispatchtype=serviceGoods.getDispatchtype(); if (dispatchtype==null){ dispatchtype=1; } BigDecimal itemPrice=BigDecimal.ZERO; // 判断ordertype=2时的特殊价格逻辑 if (cart.getOrdertype() != null && cart.getOrdertype() == 2) { String skuStr = cart.getSku(); if (skuStr != null && !skuStr.trim().isEmpty()) { try { com.alibaba.fastjson2.JSONObject skuJson = com.alibaba.fastjson2.JSONObject.parseObject(skuStr); if (skuJson.containsKey("seckillprice")) { BigDecimal seckillPrice = new BigDecimal(skuJson.getString("seckillprice")); itemPrice = seckillPrice.multiply(BigDecimal.valueOf(cart.getGoodNum())); } else { // 没有seckillprice字段,回退用fixedprice itemPrice = (serviceGoods.getFixedprice() != null ? serviceGoods.getFixedprice() : serviceGoods.getPrice()).multiply(BigDecimal.valueOf(cart.getGoodNum())); } } catch (Exception e) { // 解析失败,回退用fixedprice itemPrice = (serviceGoods.getFixedprice() != null ? serviceGoods.getFixedprice() : serviceGoods.getPrice()).multiply(BigDecimal.valueOf(cart.getGoodNum())); } } else { // sku为空,直接用fixedprice itemPrice = BigDecimal.ZERO; } } else { // 其他情况用普通价格 itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); } Order order = new Order(); order.setType(1); order.setCreateType(1); order.setOrderId(GenerateCustomCode.generCreateOrder("B")); order.setUid(user.getId()); order.setUname(user.getName()); order.setProductId(serviceGoods.getId()); order.setProductName(serviceGoods.getTitle()); order.setNum(cart.getGoodNum()); order.setSku(cart.getSku()); order.setReamk(cart.getReamk()); order.setFileData(cart.getFileData()); order.setOdertype(cart.getOrdertype() != null ? cart.getOrdertype().intValue() : 0); order.setAddressId(userAddress.getId()); order.setName(userAddress.getName()); order.setPhone(userAddress.getPhone()); order.setAddress(userAddress.getAddressInfo()); if (makeTime != null && !makeTime.isEmpty()) { String[] makeTimeArr = makeTime.split(" "); if (makeTimeArr.length == 2) { try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(makeTimeArr[0]); order.setMakeTime(date.getTime() / 1000); order.setMakeHour(makeTimeArr[1]); } catch (Exception e) { logger.warn("预约时间格式错误: " + makeTime); } } } order.setTotalPrice(itemPrice); order.setGoodPrice(BigDecimal.ZERO); order.setServicePrice(BigDecimal.ZERO); order.setPayPrice(BigDecimal.ZERO); order.setStatus(1L); order.setReceiveType(1L); order.setIsAccept(0); order.setIsComment(0); order.setIsPause(1); order.setMainOrderId(maincorid); order.setDeduction(BigDecimal.ZERO); order.setBigtype(serviceGoods.getServicetype()); order.setReceiveType(Long.valueOf(dispatchtype)); // 自由抢单 order.setCreatePhone(user.getPhone()); int insertResult = orderService.insertOrder(order); if (insertResult <= 0) { result.put("success", false); result.put("msg", "服务订单创建失败"); return result; } // 添加订单日志 OrderLog orderLog = new OrderLog(); orderLog.setOid(order.getId()); orderLog.setOrderId(order.getOrderId()); orderLog.setTitle("订单生成"); orderLog.setType(BigDecimal.valueOf(1.0)); com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); jsonObject.put("name", "订单创建成功"); orderLog.setContent(jsonObject.toJSONString()); orderLogService.insertOrderLog(orderLog); result.put("success", true); result.put("orderId", order.getOrderId()); result.put("productName", serviceGoods.getTitle()); result.put("allprice", itemPrice.toString()); PayBeforeUtil payBeforeUtil = new PayBeforeUtil(); //一口价金额大于0的时候进行支付 if (order.getTotalPrice().compareTo(BigDecimal.ZERO)>0){ String payBeforeId = payBeforeUtil.createPayBefore(user, itemPrice, order.getOrderId(), null, order.getProductId(), cart.getOrdertype(), order.getSku(), null, null, null, null,1L, null, null,BigDecimal.ZERO); }else{ DispatchUtil.dispatchOrder(order.getId()); } return result; } catch (Exception e) { logger.error("服务类购物车下单异常:", e); result.put("success", false); result.put("msg", "服务类购物车下单异常:" + e.getMessage()); return result; } } /** * 商品类购物车下单 * @param user 用户 * @param serviceGoods 商品 * @param userAddress 地址 * @param goodsOrderService 商品订单service * @return 下单结果Map */ public static Map createGoodsOrderFromOnes(Users user, String sku,int num, String reamk,ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) { Map result = new HashMap<>(); try { BigDecimal itemPrice=BigDecimal.ZERO; String skuStr = sku; if (skuStr != null && !skuStr.trim().isEmpty()) { try { JSONObject skuJson = JSONObject.parseObject(skuStr); if (skuJson.containsKey("price")) { BigDecimal skuPrice = new BigDecimal(skuJson.getString("price")); itemPrice = skuPrice.multiply(BigDecimal.valueOf(num)); } else { // 没有price字段,回退用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(num)); } } catch (Exception e) { // 解析失败,回退用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(num)); } } else { // sku为空,直接用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(num)); } GoodsOrder goodsOrder = new GoodsOrder(); goodsOrder.setType(2); goodsOrder.setOrderId(GenerateCustomCode.generCreateOrder("B")); goodsOrder.setUid(user.getId()); goodsOrder.setUname(user.getName()); goodsOrder.setProductId(serviceGoods.getId()); goodsOrder.setProductName(serviceGoods.getTitle()); goodsOrder.setNum((long) num); goodsOrder.setPostage(serviceGoods.getPostage()); goodsOrder.setSku(sku); goodsOrder.setIsself(isself); goodsOrder.setIsforservice(serviceGoods.getIsforservice()); goodsOrder.setForserviceid(serviceGoods.getForserviceid()); goodsOrder.setMark(reamk); if (isself!=1){ goodsOrder.setAddressId(userAddress.getId()); goodsOrder.setName(userAddress.getName()); goodsOrder.setPhone(userAddress.getPhone()); goodsOrder.setAddress(userAddress.getAddressInfo()); } goodsOrder.setTotalPrice(itemPrice); goodsOrder.setGoodPrice(serviceGoods.getPrice()); goodsOrder.setPayPrice(itemPrice); goodsOrder.setStatus(1L); // 待支付 goodsOrder.setMainOrderId(maincorid); int insertResult = goodsOrderService.insertGoodsOrder(goodsOrder); if (insertResult <= 0) { result.put("success", false); result.put("msg", "商品订单创建失败"); return result; } result.put("success", true); result.put("orderId", goodsOrder.getOrderId()); result.put("productName", serviceGoods.getTitle()); result.put("allprice", itemPrice.toString()); com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); jsonObject.put("name", "订单创建成功"); //添加记录日志Long oid,String orderId,String title,String type,String content,Long ordertype OrderUtil.addgoodsorderlog(goodsOrder.getId(),goodsOrder.getMainOrderId(),"订单生成","1",jsonObject,2L); return result; } catch (Exception e) { logger.error("商品类购物车下单异常:", e); result.put("success", false); result.put("msg", "商品类购物车下单异常:" + e.getMessage()); return result; } } /** * 商品类购物车下单 * @param user 用户 * @param cart 购物车 * @param serviceGoods 商品 * @param userAddress 地址 * @param goodsOrderService 商品订单service * @return 下单结果Map */ public static Map createGoodsOrderFromCart(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) { Map result = new HashMap<>(); try { BigDecimal itemPrice=BigDecimal.ZERO; String skuStr = cart.getSku(); if (skuStr != null && !skuStr.trim().isEmpty()) { try { JSONObject skuJson = JSONObject.parseObject(skuStr); if (skuJson.containsKey("price")) { BigDecimal skuPrice = new BigDecimal(skuJson.getString("price")); itemPrice = skuPrice.multiply(BigDecimal.valueOf(cart.getGoodNum())); } else { // 没有price字段,回退用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); } } catch (Exception e) { // 解析失败,回退用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); } } else { // sku为空,直接用商品price itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); } GoodsOrder goodsOrder = new GoodsOrder(); goodsOrder.setType(2); goodsOrder.setOrderId(GenerateCustomCode.generCreateOrder("B")); goodsOrder.setUid(user.getId()); goodsOrder.setUname(user.getName()); goodsOrder.setProductId(serviceGoods.getId()); goodsOrder.setProductName(serviceGoods.getTitle()); goodsOrder.setNum(cart.getGoodNum()); goodsOrder.setSku(cart.getSku()); goodsOrder.setIsforservice(serviceGoods.getIsforservice()); goodsOrder.setForserviceid(serviceGoods.getForserviceid()); goodsOrder.setMark(cart.getReamk()); goodsOrder.setIsself(isself); goodsOrder.setAddressId(userAddress.getId()); goodsOrder.setName(userAddress.getName()); goodsOrder.setPhone(userAddress.getPhone()); goodsOrder.setAddress(userAddress.getAddressInfo()); goodsOrder.setTotalPrice(itemPrice); goodsOrder.setGoodPrice(serviceGoods.getPrice()); goodsOrder.setPayPrice(itemPrice); goodsOrder.setStatus(1L); // 待支付 goodsOrder.setPostage(serviceGoods.getPostage()); goodsOrder.setMainOrderId(maincorid); //goodsOrder.setIsmany(1L); int insertResult = goodsOrderService.insertGoodsOrder(goodsOrder); if (insertResult <= 0) { result.put("success", false); result.put("msg", "商品订单创建失败"); return result; } result.put("success", true); result.put("orderId", goodsOrder.getOrderId()); result.put("productName", serviceGoods.getTitle()); result.put("allprice", itemPrice.toString()); // PayBeforeUtil payBeforeUtil = new PayBeforeUtil(); com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); jsonObject.put("name", "订单创建成功"); //OrderUtil.addgoodsorderlog(goodsOrder.getId(),goodsOrder.getOrderId(),"订单生成","1",jsonObject,2L); //String payBeforeId = payBeforeUtil.createPayBefore(user, itemPrice, goodsOrder.getOrderId(), null, goodsOrder.getProductId(), 11L, goodsOrder.getSku(), null, null, null, null,2L, null, null); return result; } catch (Exception e) { logger.error("商品类购物车下单异常:", e); result.put("success", false); result.put("msg", "商品类购物车下单异常:" + e.getMessage()); return result; } } // /** // * 商品类购物车下单 // * @param user 用户 // * @param cart 购物车 // * @param serviceGoods 商品 // * @param userAddress 地址 // * @param goodsOrderService 商品订单service // * @return 下单结果Map // */ // public static Map createGoodsOrderFromCartMain(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) { // Map result = new HashMap<>(); // try { // BigDecimal itemPrice=BigDecimal.ZERO; // String skuStr = cart.getSku(); // if (skuStr != null && !skuStr.trim().isEmpty()) { // try { // JSONObject skuJson = JSONObject.parseObject(skuStr); // if (skuJson.containsKey("price")) { // BigDecimal skuPrice = new BigDecimal(skuJson.getString("price")); // itemPrice = skuPrice.multiply(BigDecimal.valueOf(cart.getGoodNum())); // } else { // // 没有price字段,回退用商品price // itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); // } // } catch (Exception e) { // // 解析失败,回退用商品price // itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); // } // } else { // // sku为空,直接用商品price // itemPrice = serviceGoods.getPrice().multiply(BigDecimal.valueOf(cart.getGoodNum())); // } // GoodsOrder goodsOrder = new GoodsOrder(); // goodsOrder.setType(2); // goodsOrder.setOrderId(GenerateCustomCode.generCreateOrder("B")); // goodsOrder.setUid(user.getId()); // goodsOrder.setUname(user.getName()); // goodsOrder.setProductId(serviceGoods.getId()); // goodsOrder.setProductName(serviceGoods.getTitle()); // goodsOrder.setNum(cart.getGoodNum()); // goodsOrder.setSku(cart.getSku()); // goodsOrder.setIsforservice(serviceGoods.getIsforservice()); // goodsOrder.setForserviceid(serviceGoods.getForserviceid()); // goodsOrder.setMark(cart.getReamk()); // goodsOrder.setIsself(isself); // goodsOrder.setAddressId(userAddress.getId()); // goodsOrder.setName(userAddress.getName()); // goodsOrder.setPhone(userAddress.getPhone()); // goodsOrder.setAddress(userAddress.getAddressInfo()); // goodsOrder.setTotalPrice(itemPrice); // goodsOrder.setGoodPrice(serviceGoods.getPrice()); // goodsOrder.setPayPrice(itemPrice); // goodsOrder.setStatus(1L); // 待支付 // goodsOrder.setMainOrderId(maincorid); // goodsOrder.setIsmany(1L); // int insertResult = goodsOrderService.insertGoodsOrder(goodsOrder); // if (insertResult <= 0) { // result.put("success", false); // result.put("msg", "商品订单创建失败"); // return result; // } // result.put("success", true); // result.put("orderId", goodsOrder.getOrderId()); // result.put("productName", serviceGoods.getTitle()); // result.put("allprice", itemPrice.toString()); // PayBeforeUtil payBeforeUtil = new PayBeforeUtil(); // com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject(); // jsonObject.put("name", "订单创建成功"); // OrderUtil.addgoodsorderlog(goodsOrder.getId(),goodsOrder.getOrderId(),"订单生成","1",jsonObject,2L); // String payBeforeId = payBeforeUtil.createPayBefore(user, itemPrice, goodsOrder.getOrderId(), null, goodsOrder.getProductId(), 11L, goodsOrder.getSku(), null, null, null, null,2L, null, null); // return result; // } catch (Exception e) { // logger.error("商品类购物车下单异常:", e); // result.put("success", false); // result.put("msg", "商品类购物车下单异常:" + e.getMessage()); // return result; // } // } }