Ver código fonte

预订单下单

yangyb 3 semanas atrás
pai
commit
7eff25fff0
17 arquivos alterados com 489 adições e 324 exclusões
  1. 39 0
      mall-service/src/main/java/com/txz/mall/business/PinkServiceBusiness.java
  2. 220 0
      mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java
  3. 4 1
      mall-service/src/main/java/com/txz/mall/controller/CombinationController.java
  4. 7 3
      mall-service/src/main/java/com/txz/mall/controller/PinkController.java
  5. 110 0
      mall-service/src/main/java/com/txz/mall/dubbo/client/CifAccountDubboServiceClient.java
  6. 7 1
      mall-service/src/main/java/com/txz/mall/dubbo/client/CifUserDubboServiceClient.java
  7. 7 1
      mall-service/src/main/java/com/txz/mall/dubbo/client/OperatingConfigDubboServiceClient.java
  8. 0 5
      mall-service/src/main/java/com/txz/mall/service/StoreCombinationService.java
  9. 5 0
      mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java
  10. 4 30
      mall-service/src/main/java/com/txz/mall/service/StorePinkService.java
  11. 9 51
      mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java
  12. 0 3
      mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java
  13. 46 12
      mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java
  14. 5 200
      mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java
  15. 8 5
      mall-service/src/main/java/dto/OrderComputedPriceRequest.java
  16. 14 12
      mall-service/src/main/java/dto/PreOrderDetailRequest.java
  17. 4 0
      mall-service/src/main/java/dto/PreOrderRequest.java

+ 39 - 0
mall-service/src/main/java/com/txz/mall/business/PinkServiceBusiness.java

@@ -0,0 +1,39 @@
+package com.txz.mall.business;
+
+import vo.StorePinkDetailVO;
+
+import java.util.List;
+
+
+/**
+ * Created by CodeGenerator on 2025/07/15.
+ */
+public interface PinkServiceBusiness {
+
+    /**
+     * PC拼团详情列表
+     *
+     * @param pinkId 团长pinkId
+     * @return
+     */
+    List<StorePinkDetailVO> getAdminList(Integer pinkId);
+
+    /**
+     * 检查状态,更新数据
+     */
+    void detectionStatus();
+
+    /**
+     * 拼团失败----到点自动退回余额
+     */
+    void pinkFail(Long id);
+
+    /**
+     * 天选之子
+     *
+     * @return
+     */
+    void theSelection(Long id);
+
+
+}

+ 220 - 0
mall-service/src/main/java/com/txz/mall/business/impl/PinkServiceBusinessImpl.java

@@ -0,0 +1,220 @@
+package com.txz.mall.business.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.txz.mall.business.PinkServiceBusiness;
+import com.txz.mall.core.ServiceException;
+import com.txz.mall.model.StoreOrder;
+import com.txz.mall.model.StorePink;
+import com.txz.mall.service.StoreCombinationService;
+import com.txz.mall.service.StoreOrderService;
+import com.txz.mall.service.StorePinkService;
+import com.txz.mall.util.RandomUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import tk.mybatis.mapper.entity.Condition;
+import tk.mybatis.mapper.entity.Example;
+import vo.OrderRefundApplyVO;
+import vo.StorePinkDetailVO;
+
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+/**
+ * Created by CodeGenerator on 2025/07/15.
+ */
+@Service
+@Transactional
+@AllArgsConstructor
+public class PinkServiceBusinessImpl implements PinkServiceBusiness {
+
+    private final StoreOrderService storeOrderService;
+    private final StorePinkService storePinkService;
+    private final StoreCombinationService storeCombinationService;
+
+    @Override
+    public List<StorePinkDetailVO> getAdminList(Integer pinkId) {
+        Condition condition = new Condition(StorePink.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("id", pinkId);
+        criteria.andEqualTo("kId", pinkId);
+        List<StorePink> pinkList = storePinkService.findByCondition(condition);
+        pinkList = pinkList.stream()
+                .sorted(Comparator.comparing(StorePink::getId).reversed())
+                .collect(Collectors.toList());
+        // 将拼团状态提换为订单状态
+        return pinkList.stream().map(pink -> {
+            StorePinkDetailVO response = new StorePinkDetailVO();
+            BeanUtils.copyProperties(pink, response);
+            Condition orderCondition = new Condition(StorePink.class);
+            Example.Criteria orderCriteria = condition.createCriteria();
+            orderCriteria.andEqualTo("isDelete", 0);
+            orderCriteria.andEqualTo("id", pinkId);
+            orderCriteria.andEqualTo("orderId", pink.getOrderId());
+            StoreOrder storeOrder = storeOrderService.findByCondition(orderCondition).get(0);
+            if (ObjectUtil.isNotNull(storeOrder)) {
+                response.setOrderStatus(storeOrder.getStatus());
+                response.setRefundStatus(storeOrder.getRefundStatus());
+            }
+            return response;
+        }).collect(Collectors.toList());
+    }
+
+    /**
+     * 检查状态,更新数据
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void detectionStatus() {
+        // 查找所有结束时间小等于当前的进行中拼团团长
+        Condition condition = new Condition(StorePink.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        criteria.andEqualTo("kId", 0);
+        criteria.andEqualTo("status", 1);
+        criteria.andLessThanOrEqualTo("stopTime", new Date());
+        List<StorePink> headList = storePinkService.findByCondition(condition);
+        if (CollUtil.isEmpty(headList)) {
+            return;
+        }
+        /**
+         * 1.判断是否拼团成功
+         * 2.成功的修改状态
+         * 3.失败的拼团改为失败,订单申请退款
+         */
+        List<StorePink> pinkSuccessList = CollUtil.newArrayList();
+        List<StorePink> pinkFailList = CollUtil.newArrayList();
+        List<OrderRefundApplyVO> applyList = CollUtil.newArrayList();
+        for (StorePink headPink : headList) {
+            // 查询团员
+            List<StorePink> memberList = storePinkService.getListByCidAndKid(headPink.getCid(), headPink.getId());
+            memberList.add(headPink);
+            if (headPink.getPeople().equals(memberList.size())) {
+                memberList.forEach(i -> i.setStatus(2));
+                pinkSuccessList.addAll(memberList);
+                continue;
+            }
+            // 计算虚拟比例,判断是否拼团成功
+//            StoreCombination storeCombination = storeCombinationService.findById(headPink.getCid());
+//            // 虚拟成团比例
+//            Integer virtual = storeCombination.getVirtualRation();
+//            if (headPink.getPeople() <= memberList.size() + virtual) {
+//                // 可以虚拟成团
+//                memberList.forEach(i -> {
+//                    i.setStatus(2);
+//                    i.setIsVirtual(1);
+//                });
+//                pinkSuccessList.addAll(memberList);
+//                continue;
+//            }
+            // 失败
+            headPink.setStatus(3);
+            // 订单申请退款
+            OrderRefundApplyVO refundRequest = new OrderRefundApplyVO();
+            refundRequest.setId(headPink.getOrderIdKey());
+            refundRequest.setText("拼团订单取消,申请退款");
+            refundRequest.setExplain("用户取消拼团订单,申请退款");
+            pinkFailList.add(headPink);
+            applyList.add(refundRequest);
+
+            // 团员处理
+            if (CollUtil.isNotEmpty(memberList)) {
+                memberList.forEach(i -> i.setStatus(3));
+                List<OrderRefundApplyVO> tempApplyList = memberList.stream().map(i -> {
+                    OrderRefundApplyVO tempRefundRequest = new OrderRefundApplyVO();
+                    tempRefundRequest.setId(headPink.getOrderIdKey());
+                    tempRefundRequest.setText("拼团订单取消,申请退款");
+                    tempRefundRequest.setExplain("用户取消拼团订单,申请退款");
+                    return tempRefundRequest;
+                }).collect(Collectors.toList());
+                pinkFailList.addAll(memberList);
+                applyList.addAll(tempApplyList);
+            }
+        }
+        if (CollUtil.isNotEmpty(pinkFailList) && !pinkFailList.isEmpty()) {
+//            boolean failUpdate = updateBatchById(pinkFailList, 100);
+//            if (!failUpdate) {
+//                throw new ServiceException("批量更新拼团状态,拼团未成功部分,失败");
+//            }
+        }
+        if (!applyList.isEmpty()) {
+            boolean task = storeOrderService.refundApplyTask(applyList);
+            if (!task) {
+                throw new ServiceException("拼团未成功,订单申请退款失败");
+            }
+        }
+        if (CollUtil.isNotEmpty(pinkSuccessList) && !pinkSuccessList.isEmpty()) {
+//            boolean successUpdate = updateBatchById(pinkSuccessList, 100);
+//            if (!successUpdate) {
+//                throw new ServiceException("批量更新拼团状态,拼团成功部分,失败");
+//            }
+//            SystemNotification notification = systemNotificationService.getByMark(NotifyConstants.GROUP_SUCCESS_MARK);
+//            if (notification.getIsRoutine().equals(1) || notification.getIsWechat().equals(1)) {
+//                pinkSuccessList.forEach(i -> {
+//                    StoreOrder storeOrder = storeOrderService.getByOderId(i.getOrderId());
+//                    StoreCombination storeCombination = storeCombinationService.getById(i.getCid());
+//                    User tempUser = userService.getById(i.getUid());
+//                    // 发送微信模板消息
+//                });
+//            }
+        }
+    }
+
+
+    @Override
+    public void pinkFail(Long id) {
+        StorePink userPink = storePinkService.findById(id);
+//        // 订单申请退款
+//        OrderRefundApplyRequest refundRequest = new OrderRefundApplyRequest();
+//        refundRequest.setId(order.getId());
+//        refundRequest.setUni(order.getOrderId());
+//        refundRequest.setText("拼团订单取消,申请退款");
+//        refundRequest.setExplain("用户取消拼团订单,申请退款");
+//        boolean apply = orderService.refundApply(refundRequest);
+//        if (!apply) throw new CrmebException("订单申请退款失败");
+//
+//        // 拼团改为未完成
+//        userPink.setStatus(3).setStopTime(System.currentTimeMillis());
+//        storePinkService.updateById(userPink);
+    }
+
+    @Override
+    public void theSelection(Long id) {
+        // 假设只有1个用户是天选
+        long luckNum = 1;
+
+        Condition condition = new Condition(StorePink.class);
+        Example.Criteria criteria = condition.createCriteria();
+        criteria.andEqualTo("isDelete", 0);
+        // 排除团长
+//        criteria.andEqualTo("kId", 1);
+        // 支付成功的
+
+        criteria.andEqualTo("status", 1);
+        List<StorePink> list = storePinkService.findByCondition(condition);
+        if (CollUtil.isEmpty(list)) {
+            throw new ServiceException("没有拼团订单");
+        }
+        long count = list.stream().filter(i -> i.getLId().equals(1)).count();
+        if (count >= luckNum) {
+            throw new ServiceException("已有天选");
+        }
+
+        List<Long> idCollect = list.stream().map(StorePink::getId).collect(Collectors.toList());
+        List<Long> randomIds = RandomUtil.uniqueRandom(idCollect, (int) luckNum);
+
+        randomIds.forEach(i -> {
+            StorePink luckPink = new StorePink();
+            luckPink.setId(i);
+            luckPink.setLId(1);
+            storePinkService.update(luckPink);
+        });
+    }
+
+}

+ 4 - 1
mall-service/src/main/java/com/txz/mall/controller/CombinationController.java

@@ -8,6 +8,7 @@ import com.txz.mall.core.ResultCode;
 import com.txz.mall.core.ServiceException;
 import com.txz.mall.model.StoreCombination;
 import com.txz.mall.service.StoreCombinationService;
+import com.txz.mall.service.StoreOrderService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.slf4j.Logger;
@@ -34,6 +35,8 @@ public class CombinationController {
 
     @Resource
     private StoreCombinationService storeCombinationService;
+    @Resource
+    private StoreOrderService storeOrderService;
 
     @PostMapping("/add")
     @ApiOperation(value = "拼团商品表新增")
@@ -177,7 +180,7 @@ public class CombinationController {
     @ApiOperation(value = "支付成功-去开团")
     @PostMapping(value = "/open")
     public Result goOpen(@RequestParam("orderId") Long orderId) {
-        storeCombinationService.goOpen(orderId);
+        storeOrderService.goOpen(orderId);
         return Result.success();
     }
 

+ 7 - 3
mall-service/src/main/java/com/txz/mall/controller/PinkController.java

@@ -2,6 +2,7 @@ package com.txz.mall.controller;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.txz.mall.business.PinkServiceBusiness;
 import com.txz.mall.core.Result;
 import com.txz.mall.core.ResultCode;
 import com.txz.mall.model.StorePink;
@@ -32,6 +33,9 @@ public class PinkController {
     @Resource
     private StorePinkService storePinkService;
 
+    @Resource
+    private PinkServiceBusiness pinkServiceBusiness;
+
     @PostMapping("/add")
     @ApiOperation(value = "拼团新增")
     public Result add(@RequestBody StorePink storePink) {
@@ -132,7 +136,7 @@ public class PinkController {
     @ApiOperation(value = "拼团订单列表")
     @GetMapping(value = "/orderPink/{id}")
     public Result<List<StorePinkDetailVO>> getPinkList(@PathVariable(value = "id") Integer id) {
-        return Result.success(storePinkService.getAdminList(id));
+        return Result.success(pinkServiceBusiness.getAdminList(id));
     }
 
     /**
@@ -151,7 +155,7 @@ public class PinkController {
     @ApiOperation(value = "拼团失败")
     @PostMapping(value = "/pinkFail")
     public Result pinkFail(@RequestParam("id") Long id) {
-        storePinkService.pinkFail(id);
+        pinkServiceBusiness.pinkFail(id);
         return Result.success();
     }
 
@@ -161,7 +165,7 @@ public class PinkController {
     @ApiOperation(value = "天选")
     @PostMapping(value = "/theSelection")
     public Result theSelection(@RequestParam("id") Long id) {
-        storePinkService.theSelection(id);
+        pinkServiceBusiness.theSelection(id);
         return Result.success();
     }
 }

+ 110 - 0
mall-service/src/main/java/com/txz/mall/dubbo/client/CifAccountDubboServiceClient.java

@@ -0,0 +1,110 @@
+package com.txz.mall.dubbo.client;
+
+import com.txz.cif.dto.AccountDTO;
+import com.txz.cif.dto.Result;
+import com.txz.cif.param.*;
+import com.txz.cif.service.AccountDubboService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.Reference;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+
+@Slf4j
+@Component
+public class CifAccountDubboServiceClient {
+
+    @Reference
+    private AccountDubboService accountDubboService;
+
+    /**
+     * 获取账户信息
+     *
+     * @param userId
+     * @return
+     */
+    public AccountDTO getAccount(Long userId) {
+        return accountDubboService.getAccount(userId);
+    }
+
+    /**
+     * 账户余额校验
+     *
+     * @param userId
+     * @param amount
+     * @return
+     */
+    public Boolean checkFee(Long userId, BigDecimal amount) {
+        return accountDubboService.checkFee(userId, amount);
+    }
+
+    /**
+     * 冻结
+     *
+     * @param param
+     * @return
+     */
+    public Result freeze(FreezdParam param) {
+        return accountDubboService.freeze(param);
+    }
+
+    /**
+     * 解冻
+     *
+     * @param freezdId
+     * @return
+     */
+    public Result unFreeze(Long freezdId) {
+        return accountDubboService.unFreeze(freezdId);
+    }
+
+    /**
+     * 转账
+     *
+     * @param param
+     * @return
+     */
+    public Result trans(TransParam param) {
+        return accountDubboService.trans(param);
+    }
+
+    /**
+     * 解冻并转账
+     *
+     * @param param
+     * @return
+     */
+    public Result unFreezeAndTrans(UnFreezdAndTransParam param) {
+        return accountDubboService.unFreezeAndTrans(param);
+    }
+
+    /**
+     * 解冻并冻结
+     *
+     * @param freezdId
+     * @param param
+     */
+    public Result unFreezeAndFreeze(Long freezdId, FreezdParam param) {
+        return accountDubboService.unFreezeAndFreeze(freezdId, param);
+    }
+
+    /**
+     * 充值
+     *
+     * @param param
+     * @return
+     */
+    public Result recharge(RechargeParam param) {
+        return accountDubboService.recharge(param);
+    }
+
+    /**
+     * 提现
+     *
+     * @param param
+     * @return
+     */
+    public Result withdraw(WithdrawParam param) {
+        return accountDubboService.withdraw(param);
+    }
+}

+ 7 - 1
mall-service/src/main/java/com/txz/mall/dubbo/client/CifUserDubboServiceClient.java

@@ -2,8 +2,8 @@ package com.txz.mall.dubbo.client;
 
 import com.txz.cif.dto.UserDTO;
 import com.txz.cif.service.UserDubboService;
-import jdk.nashorn.internal.ir.annotations.Reference;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.Reference;
 import org.springframework.stereotype.Component;
 
 @Slf4j
@@ -13,6 +13,12 @@ public class CifUserDubboServiceClient {
     @Reference
     private UserDubboService userDubboService;
 
+    /**
+     * 获取用户信息
+     *
+     * @param userId
+     * @return
+     */
     public UserDTO getUser(Long userId) {
         return userDubboService.getUser(userId);
     }

+ 7 - 1
mall-service/src/main/java/com/txz/mall/dubbo/client/OperatingConfigDubboServiceClient.java

@@ -3,8 +3,8 @@ package com.txz.mall.dubbo.client;
 import com.txz.operating.dto.ConfigDTO;
 import com.txz.operating.result.Result;
 import com.txz.operating.service.OperatingConfigDubboService;
-import jdk.nashorn.internal.ir.annotations.Reference;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.Reference;
 import org.springframework.stereotype.Component;
 
 @Slf4j
@@ -14,6 +14,12 @@ public class OperatingConfigDubboServiceClient {
     @Reference
     private OperatingConfigDubboService operatingConfigDubboService;
 
+    /**
+     * 根据code获取配置
+     *
+     * @param code
+     * @return
+     */
     public Result<ConfigDTO> getConfigByCode(String code) {
         return operatingConfigDubboService.getConfigByCode(code);
     }

+ 0 - 5
mall-service/src/main/java/com/txz/mall/service/StoreCombinationService.java

@@ -27,11 +27,6 @@ public interface StoreCombinationService extends Service<StoreCombination> {
      */
     PageInfo<ActivityProductVO> getActivityProduct(Long activityId, Integer page, Integer size);
 
-    /**
-     * 去开团
-     */
-    void goOpen(Long orderId);
-
     /**
      * 去拼团
      *

+ 5 - 0
mall-service/src/main/java/com/txz/mall/service/StoreOrderService.java

@@ -23,6 +23,11 @@ public interface StoreOrderService extends Service<StoreOrder> {
      */
     StoreOrderCountItemVO getOrderStatusNum();
 
+    /**
+     * 去开团
+     */
+    void goOpen(Long orderId);
+
     /**
      * 导出订单
      *

+ 4 - 30
mall-service/src/main/java/com/txz/mall/service/StorePinkService.java

@@ -2,7 +2,6 @@ package com.txz.mall.service;
 
 import com.txz.mall.core.Service;
 import com.txz.mall.model.StorePink;
-import vo.StorePinkDetailVO;
 
 import java.util.List;
 
@@ -12,35 +11,6 @@ import java.util.List;
  */
 public interface StorePinkService extends Service<StorePink> {
 
-    /**
-     * PC拼团详情列表
-     *
-     * @param pinkId 团长pinkId
-     * @return
-     */
-    List<StorePinkDetailVO> getAdminList(Integer pinkId);
-
-    /**
-     * 检查状态,更新数据
-     */
-    void detectionStatus();
-
-    /**
-     * 拼团成功
-     *
-     */
-    void pinkSuccess(Long id);
-
-    /**
-     * 拼团失败----到点自动退回余额
-     */
-    void pinkFail(Long id);
-
-    /**
-     * 天选之子
-     * @return
-     */
-    void theSelection(Long id);
 
     /**
      * 查询拼团列表
@@ -50,4 +20,8 @@ public interface StorePinkService extends Service<StorePink> {
      */
     List<StorePink> getListByCidAndKid(Long cid, Long kid);
 
+    /**
+     * 拼团成功
+     */
+    void pinkSuccess(Long id);
 }

+ 9 - 51
mall-service/src/main/java/com/txz/mall/service/impl/StoreCombinationServiceImpl.java

@@ -8,10 +8,10 @@ import com.github.pagehelper.PageInfo;
 import com.txz.mall.constants.Constants;
 import com.txz.mall.core.AbstractService;
 import com.txz.mall.core.ServiceException;
-import com.txz.mall.dao.StoreCombinationMapper;
+import com.txz.mall.dubbo.client.CifUserDubboServiceClient;
 import com.txz.mall.model.*;
 import com.txz.mall.service.*;
-import org.apache.commons.lang.time.DateUtils;
+import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -19,7 +19,6 @@ import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
 import vo.*;
 
-import javax.annotation.Resource;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
@@ -32,27 +31,15 @@ import java.util.stream.Collectors;
  */
 @Service
 @Transactional
+@AllArgsConstructor
 public class StoreCombinationServiceImpl extends AbstractService<StoreCombination> implements StoreCombinationService {
-    @Resource
-    private StoreCombinationMapper storeCombinationMapper;
 
-    @Resource
-    private StoreProductService storeProductService;
-
-    @Resource
-    private StoreFlashActivityService storeFlashActivityService;
-
-    @Resource
-    private StorePinkService storePinkService;
-
-    @Resource
-    private StoreOrderService storeOrderService;
-
-    @Resource
-    private ProductAttrService productAttrService;
-
-    @Resource
-    private ProductAttrValueService productAttrValueService;
+    private final StoreProductService storeProductService;
+    private final StoreFlashActivityService storeFlashActivityService;
+    private final StorePinkService storePinkService;
+    private final ProductAttrService productAttrService;
+    private final ProductAttrValueService productAttrValueService;
+    private final CifUserDubboServiceClient userDubboServiceClient;
 
     @Override
     public void addActivityProduct(List<StoreCombination> list, Long activityId) {
@@ -137,35 +124,6 @@ public class StoreCombinationServiceImpl extends AbstractService<StoreCombinatio
         return null;
     }
 
-    @Override
-    public void goOpen(Long orderId) {
-        StoreOrder storeOrder = storeOrderService.findById(orderId);
-        StorePink storePink = new StorePink();
-//        storePink.setUid(user.getUid());
-//        storePink.setAvatar(user.getAvatar());
-//        storePink.setNickname(user.getNickname());
-        storePink.setOrderId(storeOrder.getOrderId());
-        storePink.setOrderIdKey(storeOrder.getId());
-        storePink.setTotalNum(storeOrder.getTotalNum());
-        storePink.setTotalPrice(storeOrder.getTotalPrice());
-        StoreCombination storeCombination = findById(storeOrder.getCombinationId());
-        storePink.setCid(storeCombination.getId());
-        storePink.setPid(storeCombination.getProductId());
-        storePink.setPeople(storeCombination.getPeople());
-        storePink.setPrice(storeCombination.getPrice());
-        Date date = new Date();
-        Integer effectiveTime = storeCombination.getEffectiveTime();
-        storePink.setAddTime(date);
-        storePink.setStopTime(DateUtils.addMinutes(date, effectiveTime));
-        storePink.setKId(0L);
-        storePink.setIsTpl(0);
-        storePink.setIsRefund(0);
-        storePink.setStatus(1);
-        storePinkService.save(storePink);
-        // 如果是开团,需要更新订单数据
-        storeOrder.setPinkId(storePink.getId());
-        storeOrderService.update(storeOrder);
-    }
 
 
     @Override

+ 0 - 3
mall-service/src/main/java/com/txz/mall/service/impl/StoreFlashActivityServiceImpl.java

@@ -4,7 +4,6 @@ import com.github.pagehelper.PageHelper;
 import com.txz.mall.core.AbstractService;
 import com.txz.mall.dao.StoreFlashActivityMapper;
 import com.txz.mall.model.StoreFlashActivity;
-import com.txz.mall.service.StoreCombinationService;
 import com.txz.mall.service.StoreFlashActivityService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -26,8 +25,6 @@ public class StoreFlashActivityServiceImpl extends AbstractService<StoreFlashAct
 
     @Resource
     private StoreFlashActivityMapper storeFlashActivityMapper;
-    @Resource
-    private StoreCombinationService storeCombinationService;
 
     @Override
     public List<StoreFlashActivity> activityList(StoreFlashActivity storeFlashActivity, Integer page, Integer size) {

+ 46 - 12
mall-service/src/main/java/com/txz/mall/service/impl/StoreOrderServiceImpl.java

@@ -18,6 +18,7 @@ import com.txz.mall.util.OrderUtils;
 import dto.*;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -48,8 +49,8 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
     private final ProductAttrService productAttrService;
     private final ProductAttrValueService productAttrValueService;
     private final StoreProductService storeProductService;
+    private final StorePinkService storePinkService;
     private final CifUserDubboServiceClient userDubboServiceClient;
-    private final Long userId = 1L;
     private RedisUtil redisUtil;
 
     @Override
@@ -79,6 +80,37 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         return response;
     }
 
+
+    @Override
+    public void goOpen(Long orderId) {
+        StoreOrder storeOrder = findById(orderId);
+        StorePink storePink = new StorePink();
+//        storePink.setUid(user.getUid());
+//        storePink.setAvatar(user.getAvatar());
+//        storePink.setNickname(user.getNickname());
+        storePink.setOrderId(storeOrder.getOrderId());
+        storePink.setOrderIdKey(storeOrder.getId());
+        storePink.setTotalNum(storeOrder.getTotalNum());
+        storePink.setTotalPrice(storeOrder.getTotalPrice());
+        StoreCombination storeCombination = storeCombinationService.findById(storeOrder.getCombinationId());
+        storePink.setCid(storeCombination.getId());
+        storePink.setPid(storeCombination.getProductId());
+        storePink.setPeople(storeCombination.getPeople());
+        storePink.setPrice(storeCombination.getPrice());
+        Date date = new Date();
+        Integer effectiveTime = storeCombination.getEffectiveTime();
+        storePink.setAddTime(date);
+        storePink.setStopTime(DateUtils.addMinutes(date, effectiveTime));
+        storePink.setKId(0L);
+        storePink.setIsTpl(0);
+        storePink.setIsRefund(0);
+        storePink.setStatus(1);
+        storePinkService.save(storePink);
+        // 如果是开团,需要更新订单数据
+        storeOrder.setPinkId(storePink.getId());
+        update(storeOrder);
+    }
+
     @Override
     public void exportFile(HttpServletResponse response) {
         OutputStream outputStream;
@@ -106,9 +138,13 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (CollUtil.isEmpty(request.getOrderDetails())) {
             throw new ServiceException("预下单订单详情列表不能为空");
         }
-        UserDTO user = userDubboServiceClient.getUser(userId);
+        Long userId = request.getUserId();
+        if (userId == null) {
+            throw new ServiceException("用户id不能为空");
+        }
+//        UserDTO user = userDubboServiceClient.getUser(userId);
         // 校验预下单商品信息
-        OrderInfoVO orderInfoVo = validatePreOrderRequest(request, user);
+        OrderInfoVO orderInfoVo = validatePreOrderRequest(request, userId);
         // 商品总计金额
         BigDecimal totalPrice;
         if (orderInfoVo.getOrderDetailList().get(0).getProductType().equals(Constants.PRODUCT_TYPE_NORMAL)) {
@@ -268,7 +304,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
      * @param request 预下单请求参数
      * @return OrderInfoVo
      */
-    private OrderInfoVO validatePreOrderRequest(PreOrderRequest request, UserDTO user) {
+    private OrderInfoVO validatePreOrderRequest(PreOrderRequest request, Long userId) {
         OrderInfoVO orderInfoVo = new OrderInfoVO();
         List<OrderInfoDetailVO> detailVoList = CollUtil.newArrayList();
 //        if ("shoppingCart".equals(request.getPreOrderType())) {
@@ -293,7 +329,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
 //            } else
             if (detailRequest.getCombinationId() > 0) {
                 // 拼团
-                detailVoList.add(validatePreOrderCombination(detailRequest, user));
+                detailVoList.add(validatePreOrderCombination(detailRequest, userId));
                 orderInfoVo.setCombinationId(detailRequest.getCombinationId());
                 orderInfoVo.setPinkId(detailRequest.getPinkId());
             } else {
@@ -366,10 +402,9 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
      * 拼团预下单校验
      *
      * @param detailRequest 请求参数
-     * @param user          用户
      * @return OrderInfoDetailVo
      */
-    private OrderInfoDetailVO validatePreOrderCombination(PreOrderDetailRequest detailRequest, UserDTO user) {
+    private OrderInfoDetailVO validatePreOrderCombination(PreOrderDetailRequest detailRequest, Long userId) {
         // 拼团部分判断
         Long combinationId = detailRequest.getCombinationId();
         StoreCombination storeCombination = storeCombinationService.getByIdException(combinationId);
@@ -380,7 +415,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         if (ObjectUtil.isNull(combinationAttrValue)) {
             throw new ServiceException("拼团商品规格不存在");
         }
-        commonValidateCombination(storeCombination, combinationAttrValue, user, detailRequest.getProductNum());
+        commonValidateCombination(storeCombination, combinationAttrValue, userId, detailRequest.getProductNum());
 
         OrderInfoDetailVO detailVo = new OrderInfoDetailVO();
         detailVo.setProductId(storeCombination.getProductId());
@@ -402,11 +437,10 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
      *
      * @param storeCombination     砍价商品
      * @param combinationAttrValue 砍价商品规格属性
-     * @param user                 用户
      * @param productNum           购买数量
      * @return MyRecord
      */
-    private Map<String, Object> commonValidateCombination(StoreCombination storeCombination, ProductAttrValue combinationAttrValue, UserDTO user, Integer productNum) {
+    private Map<String, Object> commonValidateCombination(StoreCombination storeCombination, ProductAttrValue combinationAttrValue, Long userId, Integer productNum) {
         // 判断拼团时间段
         Date date = new Date();
         if (date.before(storeCombination.getStartTime())) {
@@ -441,7 +475,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         }
 
         // 用户参与活动的次数
-        List<StoreOrder> userCombinationOrders = this.getUserCurrentCombinationOrders(user.getId(), storeCombination.getId());
+        List<StoreOrder> userCombinationOrders = this.getUserCurrentCombinationOrders(userId, storeCombination.getId());
         if (CollUtil.isNotEmpty(userCombinationOrders)) {
             // 判断是否有待支付订单
             List<StoreOrder> unPayOrders = userCombinationOrders.stream().filter(e -> e.getPaid().equals(0)).collect(Collectors.toList());
@@ -473,7 +507,7 @@ public class StoreOrderServiceImpl extends AbstractService<StoreOrder> implement
         }
         String orderVoString = redisUtil.get(key).toString();
         OrderInfoVO orderInfoVo = JSONObject.parseObject(orderVoString, OrderInfoVO.class);
-        UserDTO user = userDubboServiceClient.getUser(userId);
+        UserDTO user = userDubboServiceClient.getUser(request.getUserId());
         return computedPrice(request, orderInfoVo, user);
     }
 

+ 5 - 200
mall-service/src/main/java/com/txz/mall/service/impl/StorePinkServiceImpl.java

@@ -1,30 +1,18 @@
 package com.txz.mall.service.impl;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.txz.mall.core.AbstractService;
-import com.txz.mall.core.ServiceException;
 import com.txz.mall.dao.StorePinkMapper;
-import com.txz.mall.model.StoreCombination;
-import com.txz.mall.model.StoreOrder;
 import com.txz.mall.model.StorePink;
-import com.txz.mall.service.StoreCombinationService;
-import com.txz.mall.service.StoreOrderService;
 import com.txz.mall.service.StorePinkService;
-import com.txz.mall.util.RandomUtil;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import tk.mybatis.mapper.entity.Condition;
 import tk.mybatis.mapper.entity.Example;
-import vo.OrderRefundApplyVO;
-import vo.StorePinkDetailVO;
 
 import javax.annotation.Resource;
-import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
-import java.util.stream.Collectors;
 
 
 /**
@@ -35,139 +23,18 @@ import java.util.stream.Collectors;
 public class StorePinkServiceImpl extends AbstractService<StorePink> implements StorePinkService {
     @Resource
     private StorePinkMapper storePinkMapper;
-    @Resource
-    private StoreOrderService storeOrderService;
-    @Resource
-    private StoreCombinationService storeCombinationService;
 
     @Override
-    public List<StorePinkDetailVO> getAdminList(Integer pinkId) {
+    public List<StorePink> getListByCidAndKid(Long cid, Long kid) {
         Condition condition = new Condition(StorePink.class);
         Example.Criteria criteria = condition.createCriteria();
         criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("id", pinkId);
-        criteria.andEqualTo("kId", pinkId);
-        List<StorePink> pinkList = findByCondition(condition);
-        pinkList = pinkList.stream()
-                .sorted(Comparator.comparing(StorePink::getId).reversed())
-                .collect(Collectors.toList());
-        // 将拼团状态提换为订单状态
-        return pinkList.stream().map(pink -> {
-            StorePinkDetailVO response = new StorePinkDetailVO();
-            BeanUtils.copyProperties(pink, response);
-            Condition orderCondition = new Condition(StorePink.class);
-            Example.Criteria orderCriteria = condition.createCriteria();
-            orderCriteria.andEqualTo("isDelete", 0);
-            orderCriteria.andEqualTo("id", pinkId);
-            orderCriteria.andEqualTo("orderId", pink.getOrderId());
-            StoreOrder storeOrder = storeOrderService.findByCondition(orderCondition).get(0);
-            if (ObjectUtil.isNotNull(storeOrder)) {
-                response.setOrderStatus(storeOrder.getStatus());
-                response.setRefundStatus(storeOrder.getRefundStatus());
-            }
-            return response;
-        }).collect(Collectors.toList());
+        criteria.andEqualTo("kId", kid);
+        criteria.andEqualTo("cId", cid);
+        condition.setOrderByClause("id DESC");
+        return findByCondition(condition);
     }
 
-    /**
-     * 检查状态,更新数据
-     */
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public void detectionStatus() {
-        // 查找所有结束时间小等于当前的进行中拼团团长
-        Condition condition = new Condition(StorePink.class);
-        Example.Criteria criteria = condition.createCriteria();
-        criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("kId", 0);
-        criteria.andEqualTo("status", 1);
-        criteria.andLessThanOrEqualTo("stopTime", new Date());
-        List<StorePink> headList = findByCondition(condition);
-        if (CollUtil.isEmpty(headList)) {
-            return;
-        }
-        /**
-         * 1.判断是否拼团成功
-         * 2.成功的修改状态
-         * 3.失败的拼团改为失败,订单申请退款
-         */
-        List<StorePink> pinkSuccessList = CollUtil.newArrayList();
-        List<StorePink> pinkFailList = CollUtil.newArrayList();
-        List<OrderRefundApplyVO> applyList = CollUtil.newArrayList();
-        for (StorePink headPink : headList) {
-            // 查询团员
-            List<StorePink> memberList = getListByCidAndKid(headPink.getCid(), headPink.getId());
-            memberList.add(headPink);
-            if (headPink.getPeople().equals(memberList.size())) {
-                memberList.forEach(i -> i.setStatus(2));
-                pinkSuccessList.addAll(memberList);
-                continue;
-            }
-            // 计算虚拟比例,判断是否拼团成功
-            StoreCombination storeCombination = storeCombinationService.findById(headPink.getCid());
-            // 虚拟成团比例
-            Integer virtual = storeCombination.getVirtualRation();
-            if (headPink.getPeople() <= memberList.size() + virtual) {
-                // 可以虚拟成团
-                memberList.forEach(i -> {
-                    i.setStatus(2);
-                    i.setIsVirtual(1);
-                });
-                pinkSuccessList.addAll(memberList);
-                continue;
-            }
-            // 失败
-            headPink.setStatus(3);
-            // 订单申请退款
-            OrderRefundApplyVO refundRequest = new OrderRefundApplyVO();
-            refundRequest.setId(headPink.getOrderIdKey());
-            refundRequest.setText("拼团订单取消,申请退款");
-            refundRequest.setExplain("用户取消拼团订单,申请退款");
-            pinkFailList.add(headPink);
-            applyList.add(refundRequest);
-
-            // 团员处理
-            if (CollUtil.isNotEmpty(memberList)) {
-                memberList.forEach(i -> i.setStatus(3));
-                List<OrderRefundApplyVO> tempApplyList = memberList.stream().map(i -> {
-                    OrderRefundApplyVO tempRefundRequest = new OrderRefundApplyVO();
-                    tempRefundRequest.setId(headPink.getOrderIdKey());
-                    tempRefundRequest.setText("拼团订单取消,申请退款");
-                    tempRefundRequest.setExplain("用户取消拼团订单,申请退款");
-                    return tempRefundRequest;
-                }).collect(Collectors.toList());
-                pinkFailList.addAll(memberList);
-                applyList.addAll(tempApplyList);
-            }
-        }
-        if (CollUtil.isNotEmpty(pinkFailList) && !pinkFailList.isEmpty()) {
-//            boolean failUpdate = updateBatchById(pinkFailList, 100);
-//            if (!failUpdate) {
-//                throw new ServiceException("批量更新拼团状态,拼团未成功部分,失败");
-//            }
-        }
-        if (!applyList.isEmpty()) {
-            boolean task = storeOrderService.refundApplyTask(applyList);
-            if (!task) {
-                throw new ServiceException("拼团未成功,订单申请退款失败");
-            }
-        }
-        if (CollUtil.isNotEmpty(pinkSuccessList) && !pinkSuccessList.isEmpty()) {
-//            boolean successUpdate = updateBatchById(pinkSuccessList, 100);
-//            if (!successUpdate) {
-//                throw new ServiceException("批量更新拼团状态,拼团成功部分,失败");
-//            }
-//            SystemNotification notification = systemNotificationService.getByMark(NotifyConstants.GROUP_SUCCESS_MARK);
-//            if (notification.getIsRoutine().equals(1) || notification.getIsWechat().equals(1)) {
-//                pinkSuccessList.forEach(i -> {
-//                    StoreOrder storeOrder = storeOrderService.getByOderId(i.getOrderId());
-//                    StoreCombination storeCombination = storeCombinationService.getById(i.getCid());
-//                    User tempUser = userService.getById(i.getUid());
-//                    // 发送微信模板消息
-//                });
-//            }
-        }
-    }
 
     @Override
     public void pinkSuccess(Long id) {
@@ -183,66 +50,4 @@ public class StorePinkServiceImpl extends AbstractService<StorePink> implements
             update(i);
         });
     }
-
-    @Override
-    public void pinkFail(Long id) {
-        StorePink userPink = findById(id);
-//        // 订单申请退款
-//        OrderRefundApplyRequest refundRequest = new OrderRefundApplyRequest();
-//        refundRequest.setId(order.getId());
-//        refundRequest.setUni(order.getOrderId());
-//        refundRequest.setText("拼团订单取消,申请退款");
-//        refundRequest.setExplain("用户取消拼团订单,申请退款");
-//        boolean apply = orderService.refundApply(refundRequest);
-//        if (!apply) throw new CrmebException("订单申请退款失败");
-//
-//        // 拼团改为未完成
-//        userPink.setStatus(3).setStopTime(System.currentTimeMillis());
-//        storePinkService.updateById(userPink);
-    }
-
-    @Override
-    public void theSelection(Long id) {
-        // 假设只有1个用户是天选
-        long luckNum = 1;
-
-        Condition condition = new Condition(StorePink.class);
-        Example.Criteria criteria = condition.createCriteria();
-        criteria.andEqualTo("isDelete", 0);
-        // 排除团长
-        criteria.andEqualTo("kId", 1);
-        // 支付成功的
-
-        criteria.andEqualTo("status", 1);
-        List<StorePink> list = findByCondition(condition);
-        if (CollUtil.isEmpty(list)) {
-            throw new ServiceException("没有拼团订单");
-        }
-        long count = list.stream().filter(i -> i.getLId().equals(1)).count();
-        if (count >= luckNum) {
-            throw new ServiceException("已有天选");
-        }
-
-        List<Long> idCollect = list.stream().map(StorePink::getId).collect(Collectors.toList());
-        List<Long> randomIds = RandomUtil.uniqueRandom(idCollect, (int) luckNum);
-
-        randomIds.forEach(i -> {
-            StorePink luckPink = new StorePink();
-            luckPink.setId(i);
-            luckPink.setLId(1);
-            update(luckPink);
-        });
-    }
-
-    @Override
-    public List<StorePink> getListByCidAndKid(Long cid, Long kid) {
-        Condition condition = new Condition(StorePink.class);
-        Example.Criteria criteria = condition.createCriteria();
-        criteria.andEqualTo("isDelete", 0);
-        criteria.andEqualTo("kId", kid);
-        criteria.andEqualTo("cId", cid);
-        condition.setOrderByClause("id DESC");
-        return findByCondition(condition);
-    }
-
 }

+ 8 - 5
mall-service/src/main/java/dto/OrderComputedPriceRequest.java

@@ -23,16 +23,19 @@ public class OrderComputedPriceRequest {
     @ApiModelProperty(value = "地址id")
     private Integer addressId;
 
-    @ApiModelProperty(value = "优惠券id")
-    private Integer couponId;
+//    @ApiModelProperty(value = "优惠券id")
+//    private Integer couponId;
 
     @ApiModelProperty(value = "快递类型: 1-快递配送,2-到店自提")
     @NotNull(message = "快递类型不能为空")
     @Range(min = 1, max = 2, message = "未知的快递类型")
     private Integer shippingType;
 
-    @ApiModelProperty(value = "是否使用积分")
-    @NotNull(message = "是否使用积分不能为空")
-    private Boolean useIntegral;
+//    @ApiModelProperty(value = "是否使用积分")
+//    @NotNull(message = "是否使用积分不能为空")
+//    private Boolean useIntegral;
 
+    @ApiModelProperty(value = "用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
 }

+ 14 - 12
mall-service/src/main/java/dto/PreOrderDetailRequest.java

@@ -24,8 +24,8 @@ import lombok.experimental.Accessors;
 @ApiModel(value = "PreOrderRequest对象", description = "预下单详情请求对象")
 public class PreOrderDetailRequest {
 
-    @ApiModelProperty(value = "购物车编号,购物车预下单时必填")
-    private Long shoppingCartId;
+//    @ApiModelProperty(value = "购物车编号,购物车预下单时必填")
+//    private Long shoppingCartId;
 
     @ApiModelProperty(value = "商品id(立即购买必填)")
     private Long productId;
@@ -36,14 +36,14 @@ public class PreOrderDetailRequest {
     @ApiModelProperty(value = "商品数量(立即购买、活动购买必填)")
     private Integer productNum;
 
-    @ApiModelProperty(value = "订单编号(再次购买必填)")
-    private String orderNo;
-
-    @ApiModelProperty(value = "砍价商品id")
-    private Integer bargainId = 0;
-
-    @ApiModelProperty(value = "用户砍价活动id")
-    private Integer bargainUserId = 0;
+//    @ApiModelProperty(value = "订单编号(再次购买必填)")
+//    private String orderNo;
+//
+//    @ApiModelProperty(value = "砍价商品id")
+//    private Integer bargainId = 0;
+//
+//    @ApiModelProperty(value = "用户砍价活动id")
+//    private Integer bargainUserId = 0;
 
     @ApiModelProperty(value = "拼团商品id")
     private Long combinationId = 0L;
@@ -51,7 +51,9 @@ public class PreOrderDetailRequest {
     @ApiModelProperty(value = "拼团团长id")
     private Integer pinkId = 0;
 
-    @ApiModelProperty(value = "秒杀商品id")
-    private Integer seckillId = 0;
+//    @ApiModelProperty(value = "秒杀商品id")
+//    private Integer seckillId = 0;
+
+
 
 }

+ 4 - 0
mall-service/src/main/java/dto/PreOrderRequest.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
@@ -34,4 +35,7 @@ public class PreOrderRequest {
     @ApiModelProperty(value = "订单详情列表")
     private List<PreOrderDetailRequest> orderDetails;
 
+    @ApiModelProperty(value = "用户id")
+    @NotNull(message = "用户id不能为空")
+    private Long userId;
 }