300 lines
15 KiB
Java
300 lines
15 KiB
Java
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(itemPrice);
|
||
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)); // 自由抢单
|
||
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);
|
||
}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.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.getOrderId(),"订单生成","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.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());
|
||
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;
|
||
}
|
||
}
|
||
} |