From ac542add19d10cd1a2d5efe36d762cec9c7df5b4 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期四, 04 九月 2025 17:58:35 +0800
Subject: [PATCH] update

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java |  185 +++++++++++++++++++++++++++++++--------------
 1 files changed, 126 insertions(+), 59 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
index 842584a..880f892 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
@@ -10,8 +10,10 @@
 import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
 import com.github.binarywang.wxpay.exception.WxPayException;
 import com.github.binarywang.wxpay.service.WxPayService;
+import com.ruoyi.common.utils.AliSmsUtil;
 import com.ruoyi.common.utils.OrderUtil;
 import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.VoiceNotifyMain;
 import com.ruoyi.system.dto.AddBuyerCompanyInfoDto;
 import com.ruoyi.system.mapper.TbOrderMapper;
 import com.ruoyi.system.model.*;
@@ -31,7 +33,11 @@
 import java.math.RoundingMode;
 import java.net.InetAddress;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 
 /**
  * <p>
@@ -62,13 +68,32 @@
     private TbCompanyService companyService;
 
     @Autowired
-    private TbMessageService messageService;
+    private TbMessageService  messageService;
 
+    @Autowired
+    private TbShareholderService shareholderService;
+
+    @Autowired
+    private TbAccountDetailService accountDetailService;
+
+
+    // 自定义线程池
+    private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 5, 1000, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
 
     @Override
     public Page<MyPushCompanyListVo> getMyOrderList(MyOrderListQuery query, Long userId) {
         Page<MyPushCompanyListVo> page = new Page<>(query.getPageNum(), query.getPageSize());
         return this.baseMapper.getMyOrderList(page,query,userId);
+    }
+
+    @Override
+    public HashMap<String, Object> getMyOrderListNum(Long userId, HashMap<String, Object> map) {
+        List<MyPushCompanyListVo> list = this.baseMapper.getMyOrderListNum(userId);
+        map.put("toBeConfirmed", list.stream().filter(e -> e.getStatus() == 2).count());
+        map.put("pendingPayment", list.stream().filter(e -> e.getStatus() == 3).count());
+        map.put("processing", list.stream().filter(e -> e.getStatus() == 4).count()+list.stream().filter(e -> e.getStatus() == 5).count());
+        map.put("completed", list.stream().filter(e -> e.getStatus() == 6).count());
+        return map;
     }
 
     @Override
@@ -79,7 +104,7 @@
     }
 
     @Override
-    public void placeOrder(String companyId, TbCompany company,Long userId) {
+    public String placeOrder(String companyId, TbCompany company,Long userId) {
         // 创建订单
         TbOrder tbOrder = new TbOrder();
         tbOrder.setCompanyId(companyId);
@@ -91,6 +116,7 @@
 
         company.setStatus(4);
         company.updateById();
+        return tbOrder.getId();
     }
 
     @Override
@@ -100,14 +126,16 @@
                 xmlData);
         // 更新用户订单状态
         String outTradeNo = notifyResult.getOutTradeNo();
-        TbOrder order = this.getOne(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getOrderNo, outTradeNo));
+        TbOrder order = this.getOne(new LambdaQueryWrapper<TbOrder>().eq(TbOrder::getOrderNo, outTradeNo).eq(TbOrder::getStatus, 3));
+
         if (order!=null) {
             order.setStatus(4);
             order.setPayTime(new Date());
-            order.setOutTradeNo(notifyResult.getTransactionId());
+            order.setOutTradeNo(notifyResult.getOutTradeNo());
+            order.setTransactionId(notifyResult.getTransactionId());
             TbCompany company = companyService.getById(order.getCompanyId());
-            // 生成记录  看是否分佣 金额
-            TbUser user = userService.getById(company.getUserId());
+            // 购买人  生成记录  看是否分佣 金额 发布人  如A用户售卖100元公司 C用户购买这个公司  B是C的上级 抽10%  平台抽成20%   那么A应得80  B得2  平台得18
+            TbUser user = userService.getById(order.getUserId());
             TbSystemConfig config = configService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 3));
             if(config!=null){
                 JSONObject jsonObject = JSONObject.parseObject(config.getContent());
@@ -115,81 +143,113 @@
                 BigDecimal userCommission = new BigDecimal(jsonObject.get("user").toString());
                 BigDecimal price = order.getPrice();
                 BigDecimal divide = platformCommission.divide(new BigDecimal("100"));
+                // 平台抽佣
                 BigDecimal platformCommissionMoney = divide.multiply(price).setScale(2, RoundingMode.HALF_UP);
+
+                // 购买人是否绑定了用户 且次数足够
                 if(StringUtils.isNotEmpty(user.getInviteId()) && user.getInviteNum()>0){
                     BigDecimal divide1 = userCommission.divide(new BigDecimal("100"));
-                    BigDecimal userCommissionMoney = divide1.multiply(price).setScale(2, RoundingMode.HALF_UP);
+                    BigDecimal userCommissionMoney = divide1.multiply(platformCommissionMoney).setScale(2, RoundingMode.HALF_UP);
                     order.setCommissionPrice(userCommissionMoney);
+
+                    platformCommissionMoney = platformCommissionMoney.subtract(userCommissionMoney);
+
+                    if(userCommissionMoney.doubleValue()>0){
+                        TbUser shareUser = userService.getById(user.getInviteId());
+                        if(shareUser!=null){
+                            BigDecimal add = shareUser.getBalance().add(order.getCommissionPrice());
+                            shareUser.setBalance(add);
+                            shareUser.updateById();
+                        }
+                        TbAccountDetail accountDetail = new TbAccountDetail();
+                        accountDetail.setUserId(user.getInviteId());
+                        accountDetail.setType(1);
+                        accountDetail.setCategory(4);
+                        accountDetail.setStatus(2);
+                        accountDetail.setMoney(order.getCommissionPrice());
+                        accountDetail.setOrderPrice(order.getPrice());
+                        accountDetail.setSourceId(order.getUserId());
+                        accountDetail.insert();
+
+                        user.setInviteNum(user.getInviteNum()-1);
+                        user.updateById();
+                    }
                 }
                 order.setShareUserId(user.getInviteId());
                 order.setCommissionPlatform(platformCommissionMoney);
             }
-            order.updateById();
+            boolean b = order.updateById();
+            if(b) {
 
-            // 生成记录
-            TbAccountDetail tbAccountDetail = new TbAccountDetail();
-            tbAccountDetail.setUserId(company.getUserId());
-            tbAccountDetail.setType(1);
-            tbAccountDetail.setCategory(2);
-            tbAccountDetail.setStatus(1);
-            BigDecimal subtract = order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform());
-            tbAccountDetail.setMoney(subtract);
-            tbAccountDetail.setOrderId(order.getId());
-            tbAccountDetail.insert();
+                // 生成记录
+                TbAccountDetail tbAccountDetail = new TbAccountDetail();
+                tbAccountDetail.setUserId(company.getUserId());
+                tbAccountDetail.setType(1);
+                tbAccountDetail.setCategory(2);
+                tbAccountDetail.setStatus(1);
+                BigDecimal subtract = order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform());
+                tbAccountDetail.setMoney(subtract);
+                tbAccountDetail.setOrderId(order.getId());
+                tbAccountDetail.insert();
 
-            // 生成记录
-            TbAccountDetail tbAccountDetail1 = new TbAccountDetail();
-            tbAccountDetail1.setUserId(order.getUserId());
-            tbAccountDetail1.setType(2);
-            tbAccountDetail1.setCategory(5);
-            tbAccountDetail1.setStatus(2);
-            tbAccountDetail1.setMoney(order.getPrice());
-            tbAccountDetail1.setOrderId(order.getId());
-            tbAccountDetail1.insert();
+                // 生成记录
+                TbAccountDetail tbAccountDetail1 = new TbAccountDetail();
+                tbAccountDetail1.setUserId(order.getUserId());
+                tbAccountDetail1.setType(2);
+                tbAccountDetail1.setCategory(5);
+                tbAccountDetail1.setStatus(2);
+                tbAccountDetail1.setMoney(order.getPrice());
+                tbAccountDetail1.setOrderId(order.getId());
+                tbAccountDetail1.insert();
 
 
-            messageService.addMessage("下单成功,请及时发送快递", order.getUserId(),order.getId());
-            messageService.addMessage("您发布的订单买家已支付,请尽快处理!", company.getUserId(),order.getId());
+                messageService.addMessage("下单成功,请及时发送快递", order.getUserId(), order.getId(), 2);
+                messageService.addMessage("您发布的订单买家已支付,请尽快处理!", company.getUserId(), order.getId(), 1);
+
+                // 生成办理进度
+                TbSchedule tbSchedule = new TbSchedule();
+                tbSchedule.setOrderId(order.getId());
+                tbSchedule.setText("请及时快递发送所需资料");
+                tbSchedule.setCreateTime(new Date());
+                tbSchedule.setUserId(company.getUserId());
+                tbSchedule.insert();
+
+                TbUser user1 = userService.getById(company.getUserId());
+                AliSmsUtil.sendPaySuccessMessageSeller(user1.getPhone());
+                try {
+                    VoiceNotifyMain.call2(user1.getPhone());
+                }catch (Exception e){
+                    e.printStackTrace();
+                }
+
+                return "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>";
+            }
         }
+        return null;
 
 
-        return "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>";
     }
 
     @Override
     public void commission(TbOrder order,String userId) {
-        String shareUserId = order.getShareUserId();
-        if(StringUtils.isNotEmpty(shareUserId)){
-            TbUser shareUser = userService.getById(shareUserId);
-            BigDecimal add = shareUser.getBalance().add(order.getCommissionPrice());
-            shareUser.setBalance(add);
-            shareUser.updateById();
-
-            TbAccountDetail accountDetail = new TbAccountDetail();
-            accountDetail.setUserId(shareUserId);
-            accountDetail.setType(1);
-            accountDetail.setCategory(4);
-            accountDetail.setStatus(2);
-            accountDetail.setMoney(order.getCommissionPrice());
-            accountDetail.setOrderPrice(order.getPrice());
-            accountDetail.setSourceId(order.getUserId());
-            accountDetail.insert();
-
-
-        }
         BigDecimal decimal = order.getPrice().subtract(order.getCommissionPrice()).subtract(order.getCommissionPlatform());
         TbUser user = userService.getById(userId);
         BigDecimal add = user.getBalance().add(decimal);
         user.setBalance(add);
         user.updateById();
 
+
+
     }
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-    public void lastPayOrderData(TbOrder tbOrder, AddBuyerCompanyInfoDto dto, Long userId,TbCompany company) {
+    public void lastPayOrderData(TbOrder tbOrder, AddBuyerCompanyInfoDto dto, Long userId,TbCompany company, TbBuyerCompanyInfo one) {
         TbBuyerCompanyInfo tbBuyerCompanyInfo = new TbBuyerCompanyInfo();
         BeanUtils.copyProperties(dto,tbBuyerCompanyInfo);
+        if(one!=null){
+            tbBuyerCompanyInfo.setId(one.getId());
+        }
         tbBuyerCompanyInfo.setOrderId(tbOrder.getId());
         List<TbShareholder> shareholders = dto.getShareholders();
 
@@ -197,28 +257,35 @@
         int addDay=0;
         // 判断是否需要支付改名费 迁区费
         if(dto.getNeedRename()==1){
-            addMoney = company.getRenameMoney();
+            if(company.getRenameMoney()!=null){
+                addMoney = company.getRenameMoney();
+            }
             addDay=company.getRenameDay();
         }
         if(dto.getNewDistrict()==1){
-            addMoney = addMoney.add(company.getRelocationAreaMoney());
+            if(company.getRelocationAreaMoney()!=null){
+                addMoney = addMoney.add(company.getRelocationAreaMoney());
+            }
             addDay = addDay+company.getRelocationAreaDay();
         }
         // 更新订单金额
-        if(addMoney.compareTo(BigDecimal.ZERO)>0){
-            BigDecimal add = tbOrder.getPrice().add(addMoney);
-            tbOrder.setPrice(add);
-            tbOrder.updateById();
-        }
+        BigDecimal add = company.getSaleMoney().add(addMoney);
+        tbOrder.setPrice(add);
+        tbOrder.setOrderNo(OrderUtil.getOrderNoForPrefix("ZSX"));
+        tbOrder.updateById();
+
         if(addDay>0){
             tbBuyerCompanyInfo.setAddDay(addDay);
         }
-        tbBuyerCompanyInfo.insert();
+        tbBuyerCompanyInfo.insertOrUpdate();
+
+        shareholderService.remove(new LambdaQueryWrapper<TbShareholder>().eq(TbShareholder::getOrderId, tbOrder.getId()));
         for (TbShareholder shareholder : shareholders) {
             shareholder.setOrderId(tbOrder.getId());
             shareholder.insert();
         }
     }
+
 
 
     /**
@@ -245,7 +312,7 @@
                     InetAddress.getLoopbackAddress().getHostAddress());
             wxPayUnifiedOrderRequest.setTradeType("JSAPI");
             wxPayUnifiedOrderRequest.setNotifyUrl(
-                    wxProperties.getNotifyUrl() +"mall-hotel-order/WX/callback");
+                    wxProperties.getNotifyUrl());
             WxPayMpOrderResult result = wxPayService.createOrder(wxPayUnifiedOrderRequest);
 
             return result;

--
Gitblit v1.7.1