javacodeadmin/ruoyi-system/src/main/java/com/ruoyi/system/controllerUtil/CartOrderUtil.java

382 lines
19 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<String, Object> createServiceOrderFromCart(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, String makeTime, IOrderService orderService, com.ruoyi.system.service.IOrderLogService orderLogService,String maincorid) {
Map<String, Object> 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<String, Object> createGoodsOrderFromOnes(Users user, String sku,int num, String reamk,ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) {
Map<String, Object> 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<String, Object> createGoodsOrderFromCart(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) {
Map<String, Object> 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<String, Object> createGoodsOrderFromCartMain(Users user, GoodsCart cart, ServiceGoods serviceGoods, UserAddress userAddress, IGoodsOrderService goodsOrderService,String maincorid,Long isself) {
// Map<String, Object> 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;
// }
// }
}