|
@@ -91,23 +91,17 @@ import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTer
|
|
|
import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 交易订单【写】Service 实现类
|
|
|
*
|
|
|
* @author LeeYan9
|
|
|
* @since 2022-08-26
|
|
|
*/
|
|
|
-
|
|
|
-/**
|
|
|
- * 注释
|
|
|
- */
|
|
|
@Service
|
|
|
@Slf4j
|
|
|
public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
|
|
|
-
|
|
|
@Resource
|
|
|
private IntegralMapper integralMapper;//add by ben 20240411
|
|
|
|
|
@@ -172,8 +166,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
/**
|
|
|
* add by Ben
|
|
|
* 待支付订单,点支付时的新增方法
|
|
|
- * @param tradeOrderId
|
|
|
- * @return
|
|
|
+ *
|
|
|
+ * @param tradeOrderId 订单id
|
|
|
+ * @return 支付订单
|
|
|
*/
|
|
|
public PayOrderDO getPayOrder(Long tradeOrderId) {
|
|
|
|
|
@@ -182,29 +177,28 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
//页面传入的订单
|
|
|
TradeOrderDO orderDO = tradeOrderMapper.selectOne("id", tradeOrderId);
|
|
|
- Long parentPayOrderId = orderDO.getPayOrderId();
|
|
|
+ Long parentPayOrderId = orderDO.getPayOrderId();
|
|
|
|
|
|
//本订单对应的支付订单id,是否是多个订单支付的合并支付订单
|
|
|
List<TradeOrderDO> tradeOrderList = tradeOrderMapper.selectList("pay_order_id", parentPayOrderId);
|
|
|
- if(tradeOrderList.size()==1){//如果一个支付单只对应一个订单,证明不是合并支付订单
|
|
|
+ if (tradeOrderList.size() == 1) {//如果一个支付单只对应一个订单,证明不是合并支付订单
|
|
|
|
|
|
thisPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
|
|
|
// rs = thisPayOrderDO;
|
|
|
- }else if(tradeOrderList.size()>1){//如果一个支付单对应多个订单,证明是合并支付订单,则生成其下级拆分支付的支付单
|
|
|
+ } else if (tradeOrderList.size() > 1) {//如果一个支付单对应多个订单,证明是合并支付订单,则生成其下级拆分支付的支付单
|
|
|
|
|
|
PayOrderDO parentPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
|
|
|
LocalDateTime expireTime = parentPayOrderDO.getExpireTime();//原合并支付订单的过期时间
|
|
|
|
|
|
- for (int i = 0; i < tradeOrderList.size(); i++) {
|
|
|
- TradeOrderDO tradeOrderDO = tradeOrderList.get(i);
|
|
|
+ for (TradeOrderDO tradeOrderDO : tradeOrderList) {
|
|
|
Long tId = tradeOrderDO.getId();
|
|
|
List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList("order_id", tId);
|
|
|
|
|
|
//创建子支付订单,并且让trade_order记录关联子支付订单
|
|
|
Long childPayOrderId = createChildPayOrder(tradeOrderDO, tradeOrderItemDOS,
|
|
|
- parentPayOrderId,expireTime);
|
|
|
+ parentPayOrderId, expireTime);
|
|
|
|
|
|
- if(tId==tradeOrderId){//如果当前为页面传入的订单
|
|
|
+ if (Objects.equals(tId, tradeOrderId)) {//如果当前为页面传入的订单
|
|
|
thisPayOrderDO = payOrderMapper.selectById(childPayOrderId);
|
|
|
}
|
|
|
}
|
|
@@ -233,60 +227,60 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
// add by Ben 20240314
|
|
|
// 4. 查询每个sku对应的店铺ID,并传回页面
|
|
|
List<AppTradeOrderSettlementReqVO.Item> productSkuList = settlementReqVO.getItems();
|
|
|
- List<Long> productSkuIdList = new ArrayList<Long>();
|
|
|
- Map<Long,AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<Long,AppTradeOrderSettlementReqVO.Item>();
|
|
|
- for(AppTradeOrderSettlementReqVO.Item skuItem : productSkuList){
|
|
|
+ List<Long> productSkuIdList = new ArrayList<>();
|
|
|
+ Map<Long, AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<>();
|
|
|
+ for (AppTradeOrderSettlementReqVO.Item skuItem : productSkuList) {
|
|
|
productSkuIdList.add(skuItem.getSkuId());
|
|
|
- itemMap.put(skuItem.getSkuId(),skuItem);
|
|
|
+ itemMap.put(skuItem.getSkuId(), skuItem);
|
|
|
}
|
|
|
// 查询每个skuid对应的sku对象
|
|
|
List<ProductSkuDO> productSkuDOList = productSkuMapper.selectListBySKuId(productSkuIdList);
|
|
|
|
|
|
//key为店铺ID,value为skuid的List
|
|
|
- Map<Long,List<Long>> shopSkuIds = new HashMap<Long, List<Long>>();
|
|
|
+ Map<Long, List<Long>> shopSkuIds = new HashMap<>();
|
|
|
//key为店铺ID,value为item的Map
|
|
|
- Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
|
|
|
+ Map<Long, List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<>();
|
|
|
|
|
|
- for(ProductSkuDO sku:productSkuDOList){//把sku根据店聚合放到map中
|
|
|
+ for (ProductSkuDO sku : productSkuDOList) {//把sku根据店聚合放到map中
|
|
|
Long skuId = sku.getId();
|
|
|
Long shopId = sku.getShopId();
|
|
|
|
|
|
List<AppTradeOrderSettlementReqVO.Item> itemList = shopSkuItemMap.get(shopId);
|
|
|
- if(itemList==null){
|
|
|
- itemList=new ArrayList<AppTradeOrderSettlementReqVO.Item>();
|
|
|
- shopSkuItemMap.put(shopId,itemList);
|
|
|
+ if (itemList == null) {
|
|
|
+ itemList = new ArrayList<>();
|
|
|
+ shopSkuItemMap.put(shopId, itemList);
|
|
|
}
|
|
|
// AppTradeOrderSettlementReqVO.Item item = new AppTradeOrderSettlementReqVO.Item();
|
|
|
itemList.add(itemMap.get(skuId));
|
|
|
|
|
|
List<Long> shopSkuList = shopSkuIds.get(shopId);
|
|
|
- if(shopSkuList==null) {
|
|
|
- shopSkuList = new ArrayList<Long>();
|
|
|
- shopSkuIds.put(shopId,shopSkuList);
|
|
|
+ if (shopSkuList == null) {
|
|
|
+ shopSkuList = new ArrayList<>();
|
|
|
+ shopSkuIds.put(shopId, shopSkuList);
|
|
|
}
|
|
|
shopSkuList.add(skuId);//把sku根据店聚合放到map中
|
|
|
}
|
|
|
|
|
|
|
|
|
//把店铺id和店铺名称查出来放到map中
|
|
|
- List<Long> shopIds = new ArrayList<Long>();
|
|
|
+ List<Long> shopIds = new ArrayList<>();
|
|
|
for (Long shopid : shopSkuIds.keySet()) {
|
|
|
shopIds.add(shopid);
|
|
|
}
|
|
|
List<ShopDO> shopDOList = shopMapper.selectListById(shopIds);
|
|
|
- Map<Long,String> shopNameMap = new HashMap<Long,String>();//key为店铺id,value为店铺名
|
|
|
+ Map<Long, String> shopNameMap = new HashMap<>();//key为店铺id,value为店铺名
|
|
|
for (ShopDO shopDO : shopDOList) {
|
|
|
- shopNameMap.put(shopDO.getId(),shopDO.getName());
|
|
|
+ shopNameMap.put(shopDO.getId(), shopDO.getName());
|
|
|
}
|
|
|
|
|
|
// 2. 计算价格
|
|
|
- /**
|
|
|
- * add by Ben 20240402
|
|
|
- * 原来下面的代码中是取settlementReqVO.getItems()的所有项计算的,其中Items含不同店铺的商品,现在要把不同店铺的商品分开计算
|
|
|
- *
|
|
|
+ /*
|
|
|
+ add by Ben 20240402
|
|
|
+ 原来下面的代码中是取settlementReqVO.getItems()的所有项计算的,其中Items含不同店铺的商品,现在要把不同店铺的商品分开计算
|
|
|
+
|
|
|
*/
|
|
|
//保存每个店铺返回页面的 订单信息汇总
|
|
|
- Map<Long,AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<Long,AppTradeOrderSettlementRespVO>();
|
|
|
+ Map<Long, AppTradeOrderSettlementRespVO> shopRespVOMap = new HashMap<>();
|
|
|
//所有店铺支付总价
|
|
|
Integer allShopPayPrice = 0;
|
|
|
//所有店商品不算运费的商品总价
|
|
@@ -295,7 +289,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
Integer allShopDeliveryPrice = 0;
|
|
|
|
|
|
//循环计算各个店铺的价格
|
|
|
- for(Long shopId:shopSkuItemMap.keySet()){
|
|
|
+ for (Long shopId : shopSkuItemMap.keySet()) {
|
|
|
List<AppTradeOrderSettlementReqVO.Item> items = shopSkuItemMap.get(shopId);
|
|
|
AppTradeOrderSettlementReqVO shopSettlementReqVO = new AppTradeOrderSettlementReqVO();
|
|
|
BeanUtils.copyProperties(settlementReqVO, shopSettlementReqVO);
|
|
@@ -306,7 +300,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradePriceCalculateRespBO shopCalculateRespBO = calculatePrice(userId, shopSettlementReqVO);
|
|
|
// 3. 拼接返回
|
|
|
AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(shopCalculateRespBO, address);
|
|
|
- shopRespVOMap.put(shopId,respVO);
|
|
|
+ shopRespVOMap.put(shopId, respVO);
|
|
|
|
|
|
//所有店铺支付总价
|
|
|
allShopPayPrice += shopCalculateRespBO.getPrice().getPayPrice();
|
|
@@ -335,7 +329,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
AppTradeOrderSettlementRespVO respVO = TradeOrderConvert.INSTANCE.convert(calculateRespBO, address);
|
|
|
|
|
|
//把重复的收货地址置为空
|
|
|
- for(Long shopId:shopRespVOMap.keySet()){
|
|
|
+ for (Long shopId : shopRespVOMap.keySet()) {
|
|
|
AppTradeOrderSettlementRespVO a = shopRespVOMap.get(shopId);
|
|
|
a.setAddress(null);
|
|
|
}
|
|
@@ -388,7 +382,6 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* add by Ben
|
|
|
* 计算订单含积分的各项商品价格
|
|
@@ -412,18 +405,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
}
|
|
|
|
|
|
//把数据库的钱转换为数据库的积分
|
|
|
- public static BigDecimal money2Integral(BigDecimal money){
|
|
|
+ public static BigDecimal money2Integral(BigDecimal money) {
|
|
|
return money.multiply(DistriConstants.MONEY2INTEGRAL_BIG_DECIMAL);
|
|
|
}
|
|
|
|
|
|
//把数据库的钱转换为数据库的积分
|
|
|
- public static Long money2Integral(Integer money){
|
|
|
- return Long.valueOf(money*DistriConstants.MONEY2INTEGRAL);
|
|
|
+ public static Long money2Integral(Integer money) {
|
|
|
+ return Long.valueOf(money * DistriConstants.MONEY2INTEGRAL);
|
|
|
}
|
|
|
|
|
|
//把数据库的积分转换为数据库的钱
|
|
|
- public static Integer integral2Money(Long integral){
|
|
|
- Long l = (integral/DistriConstants.MONEY2INTEGRAL);
|
|
|
+ public static Integer integral2Money(Long integral) {
|
|
|
+ Long l = (integral / DistriConstants.MONEY2INTEGRAL);
|
|
|
return l.intValue();
|
|
|
}
|
|
|
|
|
@@ -436,23 +429,23 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//查询订单提成比例
|
|
|
QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 毛利 = 成本 * 0.38... (推广费用)
|
|
|
*/
|
|
|
String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
|
|
|
float grossProfitPercFloat = Float.parseFloat(grossProfitPerc);
|
|
|
- if(grossProfitPercFloat>1){
|
|
|
- throw new RuntimeException("商品毛利值,占利润比例异常,达到"+grossProfitPerc+"!!");
|
|
|
+ if (grossProfitPercFloat > 1) {
|
|
|
+ throw new RuntimeException("商品毛利值,占利润比例异常,达到" + grossProfitPerc + "!!");
|
|
|
}
|
|
|
|
|
|
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 购物本人自得 百分比
|
|
|
*/
|
|
|
String grossProfitUserQuotaPerc = orderPercentageDO.getGrossProfitUserQuotaPerc();
|
|
|
float grossProfitUserQuotaPercFloat = Float.parseFloat(grossProfitUserQuotaPerc);
|
|
|
- if(grossProfitUserQuotaPercFloat>0.5){
|
|
|
- throw new RuntimeException("消费本人获得积分,占毛利比例异常,达到"+grossProfitUserQuotaPerc+"!!");
|
|
|
+ if (grossProfitUserQuotaPercFloat > 0.5) {
|
|
|
+ throw new RuntimeException("消费本人获得积分,占毛利比例异常,达到" + grossProfitUserQuotaPerc + "!!");
|
|
|
}
|
|
|
|
|
|
//校验最大值 end
|
|
@@ -462,43 +455,42 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
// 4. 查询每个sku对应的店铺ID,并传回页面
|
|
|
List<AppTradeOrderSettlementReqVO.Item> productSkuList = createReqVO.getItems();
|
|
|
// 把所有商品的id都取出来,为查询所有商品的店铺做准备
|
|
|
- List<Long> productSkuIdList = new ArrayList<Long>();
|
|
|
- Map<Long,AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<Long,AppTradeOrderSettlementReqVO.Item>();
|
|
|
- for(AppTradeOrderSettlementReqVO.Item skuItem : productSkuList){
|
|
|
+ List<Long> productSkuIdList = new ArrayList<>();
|
|
|
+ Map<Long, AppTradeOrderSettlementReqVO.Item> itemMap = new HashMap<>();
|
|
|
+ for (AppTradeOrderSettlementReqVO.Item skuItem : productSkuList) {
|
|
|
productSkuIdList.add(skuItem.getSkuId());
|
|
|
- itemMap.put(skuItem.getSkuId(),skuItem);
|
|
|
+ itemMap.put(skuItem.getSkuId(), skuItem);
|
|
|
}
|
|
|
// 查询每个skuid对应的sku对象
|
|
|
List<ProductSkuDO> productSkuDOList = productSkuMapper.selectListBySKuId(productSkuIdList);
|
|
|
|
|
|
- Map<Long,Long> shopMerchantMap = new HashMap<Long,Long>();//key是店铺ID,value是商户ID
|
|
|
- for(ProductSkuDO productSkuDO:productSkuDOList){
|
|
|
- shopMerchantMap.put(productSkuDO.getShopId(),productSkuDO.getMerchantId());
|
|
|
+ Map<Long, Long> shopMerchantMap = new HashMap<>();//key是店铺ID,value是商户ID
|
|
|
+ for (ProductSkuDO productSkuDO : productSkuDOList) {
|
|
|
+ shopMerchantMap.put(productSkuDO.getShopId(), productSkuDO.getMerchantId());
|
|
|
}
|
|
|
|
|
|
//key为店铺ID,value为skuid的List
|
|
|
- Map<Long,List<Long>> shopSkuIds = new HashMap<Long, List<Long>>();
|
|
|
+ Map<Long, List<Long>> shopSkuIds = new HashMap<>();
|
|
|
//key为店铺ID,value为item的Map
|
|
|
- Map<Long,List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<Long,List<AppTradeOrderSettlementReqVO.Item>>();
|
|
|
+ Map<Long, List<AppTradeOrderSettlementReqVO.Item>> shopSkuItemMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
-
|
|
|
- for(ProductSkuDO sku:productSkuDOList){//把sku根据店聚合放到map中
|
|
|
+ for (ProductSkuDO sku : productSkuDOList) {//把sku根据店聚合放到map中
|
|
|
Long skuId = sku.getId();
|
|
|
Long shopId = sku.getShopId();
|
|
|
|
|
|
List<AppTradeOrderSettlementReqVO.Item> itemList = shopSkuItemMap.get(shopId);
|
|
|
- if(itemList==null){
|
|
|
- itemList=new ArrayList<AppTradeOrderSettlementReqVO.Item>();
|
|
|
- shopSkuItemMap.put(shopId,itemList);
|
|
|
+ if (itemList == null) {
|
|
|
+ itemList = new ArrayList<>();
|
|
|
+ shopSkuItemMap.put(shopId, itemList);
|
|
|
}
|
|
|
// AppTradeOrderSettlementReqVO.Item item = new AppTradeOrderSettlementReqVO.Item();
|
|
|
itemList.add(itemMap.get(skuId));
|
|
|
|
|
|
List<Long> shopSkuList = shopSkuIds.get(shopId);
|
|
|
- if(shopSkuList==null) {
|
|
|
- shopSkuList = new ArrayList<Long>();
|
|
|
- shopSkuIds.put(shopId,shopSkuList);
|
|
|
+ if (shopSkuList == null) {
|
|
|
+ shopSkuList = new ArrayList<>();
|
|
|
+ shopSkuIds.put(shopId, shopSkuList);
|
|
|
}
|
|
|
shopSkuList.add(skuId);//把sku根据店聚合放到map中
|
|
|
}
|
|
@@ -506,18 +498,18 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
//add by Ben
|
|
|
//为键值对,键为店铺ID,值为备注文本
|
|
|
- Map<Long,String> shopRemarks = createReqVO.getShopRemarks();
|
|
|
- if(shopRemarks==null){
|
|
|
- shopRemarks = new HashMap<Long,String>();
|
|
|
+ Map<Long, String> shopRemarks = createReqVO.getShopRemarks();
|
|
|
+ if (shopRemarks == null) {
|
|
|
+ shopRemarks = new HashMap<>();
|
|
|
}
|
|
|
|
|
|
//消费者在页面录入的,要使用的积分
|
|
|
Long payPoints = createReqVO.getPayIntegral();
|
|
|
|
|
|
- if(payPoints == null){
|
|
|
- payPoints = 0l;
|
|
|
- }else{//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值
|
|
|
- payPoints = payPoints* DistriConstants.INTEGRAL_PAGE2DB;
|
|
|
+ if (payPoints == null) {
|
|
|
+ payPoints = 0L;
|
|
|
+ } else {//把页面传入的,1积分=1元钱的积分,转换为后台保存到数据库的积分值
|
|
|
+ payPoints = payPoints * DistriConstants.INTEGRAL_PAGE2DB;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -528,7 +520,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//计算分摊的积分金额
|
|
|
List<Integer> dividePoints = TradePriceCalculatorHelper.dividePrice(tradePriceCalculateRespBO.getItems(), integral2Money(payPoints));
|
|
|
//键为skuId,value为单个商品项信息
|
|
|
- Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<Long, TradePriceCalculateRespBO.OrderItem>();
|
|
|
+ Map<Long, TradePriceCalculateRespBO.OrderItem> itemPayPointsMap = new HashMap<>();
|
|
|
|
|
|
//订单项数组
|
|
|
List<TradePriceCalculateRespBO.OrderItem> priceOrderItems = tradePriceCalculateRespBO.getItems();
|
|
@@ -536,16 +528,16 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
TradePriceCalculateRespBO.OrderItem orderItem = priceOrderItems.get(i);
|
|
|
Long itemPoint = money2Integral(dividePoints.get(i));//每项商品使用的积分
|
|
|
orderItem.setPayPoints(itemPoint);
|
|
|
- itemPayPointsMap.put(orderItem.getSkuId(),orderItem);
|
|
|
+ itemPayPointsMap.put(orderItem.getSkuId(), orderItem);
|
|
|
}
|
|
|
|
|
|
Integer allShopPayRMB = 0;//所有店铺订单实际支付的金额
|
|
|
|
|
|
- List<Map<String,Object>> orderMapList = new ArrayList<Map<String,Object>>();
|
|
|
+ List<Map<String, Object>> orderMapList = new ArrayList<>();
|
|
|
|
|
|
//循环调用原来的计算订单价格方法,计算价格
|
|
|
//循环一次生成一间店的订单
|
|
|
- for(Long shopId:shopSkuItemMap.keySet()){
|
|
|
+ for (Long shopId : shopSkuItemMap.keySet()) {
|
|
|
|
|
|
AppTradeOrderCreateReqVO shopCreateReqVO = new AppTradeOrderCreateReqVO();
|
|
|
|
|
@@ -570,10 +562,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
// tradeOrderHandlers.forEach(handler -> handler.beforeOrderCreate(order, orderItems));
|
|
|
|
|
|
// 3. 保存一间店铺的订单
|
|
|
- Long shopPayPoints = 0l;//一间店铺订单总支付积分
|
|
|
+ Long shopPayPoints = 0L;//一间店铺订单总支付积分
|
|
|
Integer shopPayPrice = 0;//一间店铺订单总支付价格
|
|
|
|
|
|
- for(TradeOrderItemDO orderItem:orderItems){//一间店铺订单的所有商品项
|
|
|
+ for (TradeOrderItemDO orderItem : orderItems) {//一间店铺订单的所有商品项
|
|
|
// orderItem.setOrderId(order.getId());
|
|
|
|
|
|
//3.5 add by Ben
|
|
@@ -581,7 +573,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
Long skuId = orderItem.getSkuId();
|
|
|
TradePriceCalculateRespBO.OrderItem orderItemTmp = itemPayPointsMap.get(skuId);
|
|
|
orderItem.setPayIntegral(orderItemTmp.getPayPoints()); //本商品使用积分
|
|
|
- Integer payRmb = orderItem.getPrice()*orderItem.getCount()-integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
|
|
|
+ Integer payRmb = orderItem.getPrice() * orderItem.getCount() - integral2Money(orderItemTmp.getPayPoints());//本商品实付人民币
|
|
|
orderItem.setPayRmb(payRmb);//本商品实付人民币
|
|
|
orderItem.setPayPrice(payRmb);//本商品实付人民币
|
|
|
|
|
@@ -589,9 +581,9 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
shopPayPrice += payRmb;//一间店铺订单总支付价格
|
|
|
}
|
|
|
|
|
|
- shopPayPrice+=order.getDeliveryPrice();//店铺支付总金额,加上运费
|
|
|
+ shopPayPrice += order.getDeliveryPrice();//店铺支付总金额,加上运费
|
|
|
|
|
|
- allShopPayRMB +=shopPayPrice;
|
|
|
+ allShopPayRMB += shopPayPrice;
|
|
|
|
|
|
Long merchantId = shopMerchantMap.get(shopId);//商户ID
|
|
|
|
|
@@ -610,46 +602,46 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
afterCreateTradeOrder(order, orderItems, shopCreateReqVO);
|
|
|
|
|
|
// Map<>
|
|
|
- Map<String,Object> orderMap = new HashMap<String,Object>();
|
|
|
- orderMap.put("order",order);
|
|
|
- orderMap.put("orderItems",orderItems);
|
|
|
+ Map<String, Object> orderMap = new HashMap<>();
|
|
|
+ orderMap.put("order", order);
|
|
|
+ orderMap.put("orderItems", orderItems);
|
|
|
orderMapList.add(orderMap);//把订单保存起来,为支付订单做准备
|
|
|
}
|
|
|
|
|
|
TradeOrderDO virtualOrder = new TradeOrderDO();//为了生成支付订单,创建的虚拟订单,本订单不会保存到数据库
|
|
|
- TradeOrderDO firstOrder = (TradeOrderDO)(orderMapList.get(0).get("order"));
|
|
|
- List<TradeOrderItemDO> firstOrderItems = (List<TradeOrderItemDO>)(orderMapList.get(0).get("orderItems"));
|
|
|
+ TradeOrderDO firstOrder = (TradeOrderDO) (orderMapList.get(0).get("order"));
|
|
|
+ List<TradeOrderItemDO> firstOrderItems = (List<TradeOrderItemDO>) (orderMapList.get(0).get("orderItems"));
|
|
|
|
|
|
BeanUtils.copyProperties(firstOrder, virtualOrder);
|
|
|
virtualOrder.setPayPrice(allShopPayRMB);
|
|
|
virtualOrder.setPayRmb(allShopPayRMB);
|
|
|
|
|
|
Integer shopCount = shopSkuIds.keySet().size();//订单对应的店铺数目
|
|
|
- if(shopCount>1) {//如果多店铺拆分订单,则支付订单的商户订单id为0
|
|
|
- virtualOrder.setId(0l);//为了让payOrder中的tradeOrderId为0;
|
|
|
- } else if (shopCount==1) {
|
|
|
+ if (shopCount > 1) {//如果多店铺拆分订单,则支付订单的商户订单id为0
|
|
|
+ virtualOrder.setId(0L);//为了让payOrder中的tradeOrderId为0;
|
|
|
+ } else if (shopCount == 1) {
|
|
|
virtualOrder.setId(firstOrder.getId());//为了指定payOrder中的tradeOrderId;
|
|
|
- }else{
|
|
|
- throw new RuntimeException("订单id"+firstOrder.getId()+",对应一间店铺都没");
|
|
|
+ } else {
|
|
|
+ throw new RuntimeException("订单id" + firstOrder.getId() + ",对应一间店铺都没");
|
|
|
}
|
|
|
|
|
|
// 3. 生成预支付:生成支付订单记录
|
|
|
Long payOrderId = createPayOrder(virtualOrder, firstOrderItems);
|
|
|
|
|
|
- for(Map<String,Object> m:orderMapList){
|
|
|
- TradeOrderDO order = (TradeOrderDO)(m.get("order"));
|
|
|
+ for (Map<String, Object> m : orderMapList) {
|
|
|
+ TradeOrderDO order = (TradeOrderDO) (m.get("order"));
|
|
|
// 更新到交易单上
|
|
|
tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayOrderId(payOrderId));
|
|
|
}
|
|
|
|
|
|
//如果订单有使用积分,则抵扣用户的积分。add by Ben
|
|
|
- if(payPoints>0){
|
|
|
- for(Map<String,Object> m:orderMapList) {
|
|
|
+ if (payPoints > 0) {
|
|
|
+ for (Map<String, Object> m : orderMapList) {
|
|
|
TradeOrderDO order = (TradeOrderDO) (m.get("order"));
|
|
|
Long tradeOrderId = order.getId();
|
|
|
- String OrderNum =order.getNo();
|
|
|
+ String OrderNum = order.getNo();
|
|
|
Long payIntegral = order.getPayIntegral();//每个订单使用的积分
|
|
|
- integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0l, tradeOrderId, OrderNum);
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_PAY_INTEGRAL, payIntegral * (-1), 0L, tradeOrderId, OrderNum);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -723,20 +715,21 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
/**
|
|
|
* 把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
+ *
|
|
|
* @param promotionExpenses 商品的推广费总额
|
|
|
* @return 输入推广费,对应的直推人获得的冻结积分
|
|
|
*/
|
|
|
public static Long promotionExpenses2GrossProfitAncestorQuota(
|
|
|
Integer promotionExpenses,
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 毛利 = 成本 * 0.38... (推广费用)
|
|
|
*/
|
|
|
String grossProfitPerc,
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 推广-推荐人额度 百分比
|
|
|
*/
|
|
|
String grossProfitAncestorQuotaPerc
|
|
|
- ){
|
|
|
+ ) {
|
|
|
|
|
|
//转为BigDecimal
|
|
|
BigDecimal profit = new BigDecimal(String.valueOf(promotionExpenses));
|
|
@@ -821,14 +814,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
/**
|
|
|
* 创建子支付订单
|
|
|
- * @param order
|
|
|
- * @param orderItems
|
|
|
- * @param parentPayOrderId 父级支付订单id
|
|
|
- * @param expireTime 支付过期时间
|
|
|
- * @return
|
|
|
+ *
|
|
|
+ * @param order 订单
|
|
|
+ * @param orderItems 订单详情
|
|
|
+ * @param parentPayOrderId 父级支付订单id
|
|
|
+ * @param expireTime 支付过期时间
|
|
|
+ * @return 支付订单ID
|
|
|
*/
|
|
|
private Long createChildPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
|
|
|
- Long parentPayOrderId,LocalDateTime expireTime) {
|
|
|
+ Long parentPayOrderId, LocalDateTime expireTime) {
|
|
|
// 创建支付单,用于后续的支付
|
|
|
PayOrderCreateReqDTO payOrderCreateReqDTO = TradeOrderConvert.INSTANCE.convert(
|
|
|
order, orderItems, tradeOrderProperties);
|
|
@@ -879,15 +873,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//查询订单提成比例
|
|
|
QueryWrapper<OrderPercentageDO> queryWrapper = new QueryWrapper<>();
|
|
|
OrderPercentageDO orderPercentageDO = orderPercentageMapper.selectOne(queryWrapper);//表中只有一条记录
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 毛利 = 成本 * 0.38... (推广费用)
|
|
|
*/
|
|
|
String grossProfitPerc = orderPercentageDO.getGrossProfitPerc();
|
|
|
|
|
|
Integer allTradeOrderTotalPrice = 0;//所有订单的总金额
|
|
|
- Long allTradeOrderTotalFreezeAmount = 0l;//所有订单用户总的冻结积分
|
|
|
+ Long allTradeOrderTotalFreezeAmount = 0L;//所有订单用户总的冻结积分
|
|
|
|
|
|
- /**
|
|
|
+ /*
|
|
|
* 购物本人自得 百分比
|
|
|
*/
|
|
|
String grossProfitUserQuotaPerc = orderPercentageDO.getGrossProfitUserQuotaPerc();
|
|
@@ -895,10 +889,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//add by Ben 根据支付订单id,查询所有 支付订单 对应的 订单
|
|
|
List<TradeOrderDO> TradeOrderDOList = tradeOrderMapper.selectList("pay_order_id", payOrderId);
|
|
|
|
|
|
- for(TradeOrderDO tradeOrderDO:TradeOrderDOList) {
|
|
|
+ for (TradeOrderDO tradeOrderDO : TradeOrderDOList) {
|
|
|
|
|
|
Long tradeOrderId = tradeOrderDO.getId();
|
|
|
- allTradeOrderTotalPrice+=tradeOrderDO.getTotalPrice();
|
|
|
+ allTradeOrderTotalPrice += tradeOrderDO.getTotalPrice();
|
|
|
|
|
|
// System.out.println("#########updateOrderPaid####tradeOrderId:"+tradeOrderId);
|
|
|
|
|
@@ -943,17 +937,17 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
}
|
|
|
|
|
|
List<ProductSkuDO> productSkuDOS = productSkuMapper.selectBatchIds(skuList);
|
|
|
- Map<Long,ProductSkuDO> skuDOMap = new HashMap<Long,ProductSkuDO>();
|
|
|
+ Map<Long, ProductSkuDO> skuDOMap = new HashMap<>();
|
|
|
for (ProductSkuDO productSkuDO : productSkuDOS) {
|
|
|
- skuDOMap.put(productSkuDO.getId(),productSkuDO);
|
|
|
+ skuDOMap.put(productSkuDO.getId(), productSkuDO);
|
|
|
}
|
|
|
|
|
|
- Long totalFreezeAmount = 0l;//用户总的冻结积分
|
|
|
+ Long totalFreezeAmount = 0L;//用户总的冻结积分
|
|
|
for (TradeOrderItemDO tradeOrderItemDO : TradeOrderItemList) {
|
|
|
ProductSkuDO productSkuDO = skuDOMap.get(tradeOrderItemDO.getSkuId());
|
|
|
//这类商品的总推广费
|
|
|
- Integer promotionExpenses = (productSkuDO.getPrice()-productSkuDO.getCostPrice())
|
|
|
- *tradeOrderItemDO.getCount();
|
|
|
+ Integer promotionExpenses = (productSkuDO.getPrice() - productSkuDO.getCostPrice())
|
|
|
+ * tradeOrderItemDO.getCount();
|
|
|
|
|
|
//把商品项的推广费,转换为这项商品直推人获得的冻结积分
|
|
|
Long itemFreezeAmount =
|
|
@@ -962,7 +956,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
grossProfitUserQuotaPerc//消费者自得额度 百分比
|
|
|
);
|
|
|
|
|
|
- totalFreezeAmount+=itemFreezeAmount;
|
|
|
+ totalFreezeAmount += itemFreezeAmount;
|
|
|
|
|
|
//记录用户在此订单项获得的冻结积分
|
|
|
TradeOrderItemDO toid = new TradeOrderItemDO();
|
|
@@ -974,10 +968,10 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//把商品的推广费总额,转换为直推人获得的冻结积分
|
|
|
// Integer freezeAmount = promotionExpenses2GrossProfitAncestorQuota(orderPercentageMapper,totalPromotionExpenses);
|
|
|
|
|
|
- String OrderNum =order.getNo();
|
|
|
- integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_INTEGRAL, 0l,totalFreezeAmount,tradeOrderId,OrderNum);
|
|
|
+ String OrderNum = order.getNo();
|
|
|
+ integralService.updateUserIntegral(tradeOrderDO.getUserId(), CaclEnum.ORDER_PAY_INTEGRAL, 0L, totalFreezeAmount, tradeOrderId, OrderNum);
|
|
|
|
|
|
- allTradeOrderTotalFreezeAmount+=totalFreezeAmount;//用户获得总的待确权冻结积分
|
|
|
+ allTradeOrderTotalFreezeAmount += totalFreezeAmount;//用户获得总的待确权冻结积分
|
|
|
|
|
|
// 发送给微信消息给系统用户待发货消息
|
|
|
sentWcChatMessage(order);
|
|
@@ -1003,13 +997,13 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
//只有支付订单id参数payOrderId是有用的。
|
|
|
public void updateOrderPaid(Long id1, Long payOrderId) {
|
|
|
|
|
|
- log.error("[TradeOrderUpdateServiceImpl.updateOrderPaid]###微信回调(现在程序什么也没干):[payOrderId({}) ,TradeOrderId({})]"+new Date(),
|
|
|
+ log.error("[TradeOrderUpdateServiceImpl.updateOrderPaid]###微信回调(现在程序什么也没干):[payOrderId({}) ,TradeOrderId({})]" + new Date(),
|
|
|
payOrderId, id1);
|
|
|
|
|
|
//updateOrderPaid( payOrderId);
|
|
|
}
|
|
|
|
|
|
- private void sentWcChatMessage(TradeOrderDO order){
|
|
|
+ private void sentWcChatMessage(TradeOrderDO order) {
|
|
|
List<String> params = new ArrayList<>();
|
|
|
DecimalFormat df = new DecimalFormat("0.00");
|
|
|
String formattedPrice = df.format((double) order.getPayPrice() / 100);
|
|
@@ -1032,7 +1026,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
List<Long> adminUsers = adminUserService.getUserIdsByShop(order.getShopId());
|
|
|
for (Long aUserId : adminUsers) {
|
|
|
//发送信息
|
|
|
- wcChatMessageUtils.sendWcChatMessage(order.getUserId(), WcChatMessageTemplateIdEnum.ORDER_NO_DELIVERY2.getTemplateId(),
|
|
|
+ wcChatMessageUtils.sendWcChatMessage(WcChatMessageTemplateIdEnum.ORDER_NO_DELIVERY2.getTemplateId(),
|
|
|
params, aUserId, order.getId());
|
|
|
}
|
|
|
}
|
|
@@ -1247,6 +1241,7 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
|
|
|
/**
|
|
|
* 用户手动取消订单
|
|
|
+ *
|
|
|
* @param userId 用户编号
|
|
|
* @param id 订单编号
|
|
|
*/
|
|
@@ -1272,14 +1267,15 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
Long tradeOrderId = order.getId();
|
|
|
String orderNum = order.getNo();
|
|
|
//如果订单有使用积分,则退回积分
|
|
|
- if(payIntegral>0) {
|
|
|
- integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
|
|
|
+ if (payIntegral > 0) {
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_USER_REFUND_INTEGRAL, payIntegral, 0L, tradeOrderId, orderNum);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 订单超时未支付,自动取消
|
|
|
- * @return
|
|
|
+ *
|
|
|
+ * @return 数量
|
|
|
*/
|
|
|
@Override
|
|
|
public int cancelOrderBySystem() {
|
|
@@ -1303,8 +1299,8 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
|
String orderNum = order.getNo();
|
|
|
Long userId = order.getUserId();
|
|
|
//如果订单有使用积分,则退回积分
|
|
|
- if(payIntegral>0) {
|
|
|
- integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0l, tradeOrderId, orderNum);
|
|
|
+ if (payIntegral > 0) {
|
|
|
+ integralService.updateUserIntegral(userId, CaclEnum.ORDER_CANCEL_BY_SYSTEM_REFUND_INTEGRAL, payIntegral, 0L, tradeOrderId, orderNum);
|
|
|
}
|
|
|
|
|
|
count++;
|