liujie
2025-07-21 87f979fb201a82ebad5926735ed6dfa75ca004d3
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TbOrderServiceImpl.java
@@ -31,6 +31,7 @@
import java.math.RoundingMode;
import java.net.InetAddress;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
/**
@@ -62,13 +63,29 @@
    private TbCompanyService companyService;
    @Autowired
    private TbMessageService messageService;
    private TbMessageService  messageService;
    @Autowired
    private TbShareholderService shareholderService;
    @Autowired
    private TbAccountDetailService accountDetailService;
    @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 +96,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 +108,7 @@
        company.setStatus(4);
        company.updateById();
        return tbOrder.getId();
    }
    @Override
@@ -104,9 +122,10 @@
        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());
            TbSystemConfig config = configService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 3));
            if(config!=null){
@@ -116,10 +135,31 @@
                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);
                    order.setCommissionPrice(userCommissionMoney);
                    if(userCommissionMoney.doubleValue()>0){
                        TbUser shareUser = userService.getById(user.getInviteId());
                        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);
@@ -148,48 +188,43 @@
            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();
            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 +232,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 +287,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;