|
|
@@ -8,10 +8,7 @@ import com.alibaba.excel.EasyExcel;
|
|
|
import com.alibaba.excel.EasyExcelFactory;
|
|
|
import com.alibaba.excel.ExcelWriter;
|
|
|
import com.alibaba.excel.metadata.Head;
|
|
|
-import com.alibaba.excel.metadata.data.ImageData;
|
|
|
-import com.alibaba.excel.metadata.data.WriteCellData;
|
|
|
import com.alibaba.excel.util.DateUtils;
|
|
|
-import com.alibaba.excel.util.FileUtils;
|
|
|
import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
|
|
|
import com.alibaba.excel.write.merge.AbstractMergeStrategy;
|
|
|
import com.alibaba.excel.write.metadata.WriteSheet;
|
|
|
@@ -25,7 +22,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.fhs.core.trans.anno.IgnoreTrans;
|
|
|
import com.yc.ship.framework.common.enums.UserTypeEnum;
|
|
|
import com.yc.ship.framework.common.lang.Asserts;
|
|
|
import com.yc.ship.framework.common.pojo.CommonResult;
|
|
|
@@ -34,7 +30,6 @@ import com.yc.ship.framework.common.util.collection.CollectionUtils;
|
|
|
import com.yc.ship.framework.common.util.object.BeanUtils;
|
|
|
import com.yc.ship.framework.common.util.object.ObjectUtils;
|
|
|
import com.yc.ship.framework.dict.core.DictFrameworkUtils;
|
|
|
-import com.yc.ship.framework.excel.core.merge.MergeStrategy;
|
|
|
import com.yc.ship.framework.ip.core.utils.AreaUtils;
|
|
|
import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
import com.yc.ship.framework.security.core.LoginUser;
|
|
|
@@ -76,7 +71,6 @@ import com.yc.ship.module.product.api.ProductApi;
|
|
|
import com.yc.ship.module.product.api.VoyageApi;
|
|
|
import com.yc.ship.module.product.api.dto.*;
|
|
|
import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
|
|
|
-import com.yc.ship.module.trade.controller.admin.order.vo.order.PublicOrderVoyageRespVO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.priceroommodeltype.PriceRoomModelTypeDO;
|
|
|
import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
|
|
|
import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
|
|
|
@@ -128,8 +122,6 @@ import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
|
import com.yc.ship.module.trade.framework.common.ConfigUtils;
|
|
|
import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
|
|
|
import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
|
|
|
-import com.yc.ship.module.trade.service.refund.TradeRefundService;
|
|
|
-import com.yc.ship.module.trade.utils.IdCardProvinceUtil;
|
|
|
import com.yc.ship.module.trade.framework.mq.TradePublishUtils;
|
|
|
import com.yc.ship.module.trade.service.invoice.InvoiceService;
|
|
|
import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
|
|
|
@@ -137,7 +129,9 @@ import com.yc.ship.module.trade.service.order.TradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.otc.OtcTradeOrderService;
|
|
|
import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
|
|
|
import com.yc.ship.module.trade.service.refund.TradeRefundRepositoryService;
|
|
|
+import com.yc.ship.module.trade.service.refund.TradeRefundService;
|
|
|
import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
|
+import com.yc.ship.module.trade.utils.IdCardProvinceUtil;
|
|
|
import com.yc.ship.module.trade.utils.excel.ExcelStyleHandler;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
@@ -146,7 +140,6 @@ import org.apache.poi.ss.usermodel.*;
|
|
|
import org.apache.poi.ss.util.CellRangeAddress;
|
|
|
import org.apache.poi.ss.util.RegionUtil;
|
|
|
import org.apache.poi.util.IOUtils;
|
|
|
-import org.apache.poi.xssf.usermodel.XSSFSheet;
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
import org.redisson.api.RLock;
|
|
|
@@ -154,11 +147,12 @@ import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
-import org.springframework.transaction.support.TransactionSynchronization;
|
|
|
-import org.springframework.transaction.support.TransactionSynchronizationManager;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
-import java.io.*;
|
|
|
+import java.io.File;
|
|
|
+import java.io.FileOutputStream;
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.time.Duration;
|
|
|
@@ -207,37 +201,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
@Resource
|
|
|
private NotifyMessageSendApi notifyMessageSendApi;
|
|
|
|
|
|
- private boolean registerUnlockAfterTransaction(RLock lock, String lockKey) {
|
|
|
- if (!TransactionSynchronizationManager.isSynchronizationActive()) {
|
|
|
- log.warn("当前无事务同步,航次锁将在 finally 中释放,lockKey:{}", lockKey);
|
|
|
- return false;
|
|
|
- }
|
|
|
- TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
|
|
|
- @Override
|
|
|
- public void afterCompletion(int status) {
|
|
|
- log.info("订单事务完成,释放航次锁,lockKey:{},status:{}", lockKey, status);
|
|
|
- unlockStockLock(lock, lockKey);
|
|
|
- }
|
|
|
- });
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- private void unlockStockLock(RLock lock, String lockKey) {
|
|
|
- if (lock == null) {
|
|
|
- return;
|
|
|
- }
|
|
|
- try {
|
|
|
- if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
|
|
- lock.unlock();
|
|
|
- log.info("航次锁释放完成,lockKey:{}", lockKey);
|
|
|
- } else {
|
|
|
- log.warn("跳过航次锁释放,当前线程未持有锁,lockKey:{}", lockKey);
|
|
|
- }
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("航次锁释放异常,lockKey:{}", lockKey, e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@Resource
|
|
|
private ResourceRoomModelService resourceRoomModelService;
|
|
|
@Resource
|
|
|
@@ -554,7 +517,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
.set(TradeOrderDO::getConfirmDate, confireDate)
|
|
|
.set(TradeOrderDO::getAuditStatus, tradeOrderDO.getAuditStatus() + 1)
|
|
|
.set(TradeOrderDO::getUpdateTime, LocalDateTime.now())
|
|
|
- .set(TradeOrderDO::getDeposiStatus, 1)
|
|
|
.eq(TradeOrderDO::getId, orderId);
|
|
|
if(amount.compareTo(BigDecimal.ZERO) != 0){
|
|
|
updateWrapper.set(TradeOrderDO::getPayAmount, newPayAmount);
|
|
|
@@ -662,20 +624,13 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
List<OrderRoomUseDTO> orderRoomUseDTOList = tradeVisitorMapper.selectRoomShipVisitor2(lastTradeOrder.getId());
|
|
|
reqDTO.setOrderRoomList(orderRoomUseDTOList);
|
|
|
reqDTO.setOrderRoomList(orderRoomUseDTOList);
|
|
|
- String stockLockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, reqDTO.getVoyageId());
|
|
|
- RLock stockLock = redissonClient.getLock(stockLockKey);
|
|
|
- boolean unlockRegistered = false;
|
|
|
- try {
|
|
|
- stockLock.lock();
|
|
|
- unlockRegistered = registerUnlockAfterTransaction(stockLock, stockLockKey);
|
|
|
- Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
- if (Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
|
|
|
- voyageApi.preReduceStock(reqDTO);
|
|
|
- } else {
|
|
|
- reqDTO.setOldOrderStatus(lastTradeOrder.getOrderStatus());
|
|
|
- voyageApi.reduceStock(reqDTO);
|
|
|
- }
|
|
|
- } finally {
|
|
|
+
|
|
|
+ Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
+ if (Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
|
|
|
+ voyageApi.preReduceStock(reqDTO);
|
|
|
+ } else {
|
|
|
+ reqDTO.setOldOrderStatus(lastTradeOrder.getOrderStatus());
|
|
|
+ voyageApi.reduceStock(reqDTO);
|
|
|
}
|
|
|
|
|
|
Map<String, Object> extMap = new HashMap<>();
|
|
|
@@ -1387,10 +1342,10 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
|
|
|
int oldorderStatus = TradeOrderStatusEnum.YD.getStatus();
|
|
|
if(tradeOrderDO.getConfirmDate()!=null){
|
|
|
- oldorderStatus = TradeOrderStatusEnum.CANCELED.getStatus();
|
|
|
+ oldorderStatus = TradeOrderStatusEnum.UNPAID.getStatus();
|
|
|
}
|
|
|
if(tradeOrderDO.getPayStatus()!=null && tradeOrderDO.getPayStatus()==1){
|
|
|
- oldorderStatus = TradeOrderStatusEnum.CANCELED.getStatus();
|
|
|
+ oldorderStatus = TradeOrderStatusEnum.UNUSED.getStatus();
|
|
|
}
|
|
|
tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("order_status",oldorderStatus).set("audit_status", 5).set("damaged_status",3).eq("id", orderId));
|
|
|
|
|
|
@@ -1535,24 +1490,15 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
|
|
|
List<OrderRoomUseDTO> orderRoomUseDTOList = tradeVisitorMapper.selectRoomShipVisitor2(lastTradeOrder.getId());
|
|
|
reqDTO.setOrderRoomList(orderRoomUseDTOList);
|
|
|
- String stockLockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, reqDTO.getVoyageId());
|
|
|
- RLock stockLock = redissonClient.getLock(stockLockKey);
|
|
|
- boolean unlockRegistered = false;
|
|
|
- try {
|
|
|
- stockLock.lock();
|
|
|
- unlockRegistered = registerUnlockAfterTransaction(stockLock, stockLockKey);
|
|
|
- Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
- if (Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
|
|
|
- voyageApi.preReduceStock(reqDTO);
|
|
|
- } else {
|
|
|
- reqDTO.setOldOrderStatus(lastTradeOrder.getOrderStatus());
|
|
|
- voyageApi.reduceStock(reqDTO);
|
|
|
- }
|
|
|
- } finally {
|
|
|
|
|
|
+ Integer orderStatus = reqDTO.getOrderStatus();
|
|
|
+ if (Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
|
|
|
+ voyageApi.preReduceStock(reqDTO);
|
|
|
+ } else {
|
|
|
+ reqDTO.setOldOrderStatus(lastTradeOrder.getOrderStatus());
|
|
|
+ voyageApi.reduceStock(reqDTO);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
Map<String, Object> extMap = new HashMap<>();
|
|
|
extMap.put("result", "审核撤回");
|
|
|
TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), tradeOrderDO.getOrderStatus(), extMap);
|
|
|
@@ -2421,14 +2367,8 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
//现在给整个订单号的加锁
|
|
|
String lockKey = String.format(ProductRedisKeyConstants.ORDER_REDIS_KEY_PREFIX, orderNo);
|
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
|
- //现在给整个航次的库存加锁
|
|
|
- String stockLockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
|
|
|
- RLock stockLock = redissonClient.getLock(stockLockKey);
|
|
|
- boolean stockUnlockRegistered = false;
|
|
|
try {
|
|
|
lock.lock(60, TimeUnit.SECONDS);
|
|
|
- stockLock.lock();
|
|
|
- stockUnlockRegistered = registerUnlockAfterTransaction(stockLock, stockLockKey);
|
|
|
TradeOrderTotalVO summary = createVO.getSummary();
|
|
|
BigDecimal realAmount = summary.getRealMoney();
|
|
|
BigDecimal orderMoney = summary.getOrderMoney();
|
|
|
@@ -2779,14 +2719,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
//现在给整个订单号的加锁
|
|
|
String lockKey = String.format(ProductRedisKeyConstants.ORDER_REDIS_KEY_PREFIX, orderNo);
|
|
|
RLock lock = redissonClient.getLock(lockKey);
|
|
|
- //现在给整个航次的库存加锁
|
|
|
- String stockLockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
|
|
|
- RLock stockLock = redissonClient.getLock(stockLockKey);
|
|
|
boolean stockUnlockRegistered = false;
|
|
|
try {
|
|
|
lock.lock(60, TimeUnit.SECONDS);
|
|
|
- stockLock.lock();
|
|
|
- stockUnlockRegistered = registerUnlockAfterTransaction(stockLock, stockLockKey);
|
|
|
Date updateTime = new Date();
|
|
|
// 构建创建订单的参数
|
|
|
ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
|