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 | 255 +++++++++++++++++++++++++++++++++++++-------------
1 files changed, 187 insertions(+), 68 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 bc54bd5..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,33 +10,34 @@
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.*;
import com.ruoyi.system.query.MyOrderListQuery;
-import com.ruoyi.system.service.TbOrderService;
-import com.ruoyi.system.service.TbSystemConfigService;
-import com.ruoyi.system.service.TbUserService;
+import com.ruoyi.system.service.*;
import com.ruoyi.system.utils.wx.WxProperties;
import com.ruoyi.system.vo.MyPushCompanyListVo;
import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
+import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.annotation.OrderUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
-import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.InetAddress;
-import java.net.MalformedURLException;
import java.util.Date;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
/**
* <p>
@@ -57,13 +58,27 @@
@Resource
private WxPayService wxPayService;
-
@Autowired
private TbSystemConfigService configService;
@Autowired
private TbUserService userService;
+ @Autowired
+ private TbCompanyService companyService;
+
+ @Autowired
+ 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) {
@@ -72,13 +87,24 @@
}
@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
public WxPayMpOrderResult payOrder(TbOrder tbOrder, Long userId) {
- WxPayMpOrderResult result = this.createWxOrderToWxService(tbOrder.getUserId(),tbOrder.getOrderNo(),tbOrder.getPrice(),"购买商品", "");
+ TbUser user = userService.getById(userId);
+ WxPayMpOrderResult result = this.createWxOrderToWxService(user.getOpenId(),tbOrder.getOrderNo(),tbOrder.getPrice(),"购买商品", "");
return result;
}
@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);
@@ -86,40 +112,11 @@
tbOrder.setOrderNo( OrderUtil.getOrderNoForPrefix("ZSX"));
tbOrder.setStatus(2);
tbOrder.setPrice(company.getSaleMoney());
-
- // 生成记录 看是否分佣 金额
- TbUser user = userService.getById(company.getUserId());
- TbSystemConfig config = configService.getOne(new LambdaQueryWrapper<TbSystemConfig>().eq(TbSystemConfig::getType, 3));
-
- if(config!=null){
- JSONObject jsonObject = JSONObject.parseObject(config.getContent());
- BigDecimal platformCommission = new BigDecimal(jsonObject.get("platform").toString());
- BigDecimal userCommission = new BigDecimal(jsonObject.get("user").toString());
- BigDecimal price = tbOrder.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);
- tbOrder.setCommissionPrice(userCommissionMoney);
- }
- tbOrder.setShare_user_id(user.getInviteId());
- tbOrder.setCommissionPlatform(platformCommissionMoney);
- }
tbOrder.insert();
-
- // 生成记录
- TbAccountDetail tbAccountDetail = new TbAccountDetail();
- tbAccountDetail.setUserId(company.getUserId());
- tbAccountDetail.setType(1);
- tbAccountDetail.setCategory(2);
- tbAccountDetail.setStatus(1);
- BigDecimal subtract = tbOrder.getPrice().subtract(tbOrder.getCommissionPrice()).subtract(tbOrder.getCommissionPlatform());
- tbAccountDetail.setMoney(subtract);
- tbAccountDetail.setOrderId(tbOrder.getId());
- tbAccountDetail.insert();
-
+ company.setStatus(4);
+ company.updateById();
+ return tbOrder.getId();
}
@Override
@@ -129,37 +126,112 @@
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.updateById();
+ order.setOutTradeNo(notifyResult.getOutTradeNo());
+ order.setTransactionId(notifyResult.getTransactionId());
+ TbCompany company = companyService.getById(order.getCompanyId());
+ // 购买人 生成记录 看是否分佣 金额 发布人 如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());
+ BigDecimal platformCommission = new BigDecimal(jsonObject.get("platform").toString());
+ 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(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);
+ }
+ 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 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(), 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 "<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>";
+ return null;
+
+
}
@Override
public void commission(TbOrder order,String userId) {
- String shareUserId = order.getShare_user_id();
- 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);
@@ -167,7 +239,53 @@
user.updateById();
+
}
+
+ @Override
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ 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();
+
+ BigDecimal addMoney=BigDecimal.ZERO;
+ int addDay=0;
+ // 判断是否需要支付改名费 迁区费
+ if(dto.getNeedRename()==1){
+ if(company.getRenameMoney()!=null){
+ addMoney = company.getRenameMoney();
+ }
+ addDay=company.getRenameDay();
+ }
+ if(dto.getNewDistrict()==1){
+ if(company.getRelocationAreaMoney()!=null){
+ addMoney = addMoney.add(company.getRelocationAreaMoney());
+ }
+ addDay = addDay+company.getRelocationAreaDay();
+ }
+ // 更新订单金额
+ BigDecimal add = company.getSaleMoney().add(addMoney);
+ tbOrder.setPrice(add);
+ tbOrder.setOrderNo(OrderUtil.getOrderNoForPrefix("ZSX"));
+ tbOrder.updateById();
+
+ if(addDay>0){
+ tbBuyerCompanyInfo.setAddDay(addDay);
+ }
+ tbBuyerCompanyInfo.insertOrUpdate();
+
+ shareholderService.remove(new LambdaQueryWrapper<TbShareholder>().eq(TbShareholder::getOrderId, tbOrder.getId()));
+ for (TbShareholder shareholder : shareholders) {
+ shareholder.setOrderId(tbOrder.getId());
+ shareholder.insert();
+ }
+ }
+
/**
@@ -189,11 +307,12 @@
wxPayUnifiedOrderRequest.setBody("购买商品");
wxPayUnifiedOrderRequest.setOutTradeNo(outTradeNo);
wxPayUnifiedOrderRequest.setTotalFee(amountInFen);// 元转成分
+ wxPayUnifiedOrderRequest.setOpenid(openId);
wxPayUnifiedOrderRequest.setSpbillCreateIp(
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