|
|
@@ -38,6 +38,32 @@ import com.yc.ship.framework.security.core.util.SecurityFrameworkUtils;
|
|
|
import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
|
|
|
import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
|
|
|
import com.yc.ship.framework.tenant.core.util.TenantUtils;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradedetail.HisTradeDetailDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradedetailbase.HisTradeDetailBaseDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeorder.HisTradeOrderDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeordercountry.HisTradeOrderCountryDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeorderfloor.HisTradeOrderFloorDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeorderroommodel.HisTradeOrderRoomModelDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeordertotal.HisTradeOrderTotalDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradeorderuser.HisTradeOrderUserDO;
|
|
|
+import com.yc.ship.module.his.dal.dataobject.tradevisitor.HisTradeVisitorDO;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradedetail.HisTradeDetailMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradedetailbase.HisTradeDetailBaseMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeorder.HisTradeOrderMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeordercountry.HisTradeOrderCountryMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeorderfloor.HisTradeOrderFloorMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeorderroommodel.HisTradeOrderRoomModelMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeordertotal.HisTradeOrderTotalMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradeorderuser.HisTradeOrderUserMapper;
|
|
|
+import com.yc.ship.module.his.dal.mysql.tradevisitor.HisTradeVisitorMapper;
|
|
|
+import com.yc.ship.module.his.service.tradedetail.HisTradeDetailService;
|
|
|
+import com.yc.ship.module.his.service.tradedetailbase.HisTradeDetailBaseService;
|
|
|
+import com.yc.ship.module.his.service.tradeordercountry.HisTradeOrderCountryService;
|
|
|
+import com.yc.ship.module.his.service.tradeorderfloor.HisTradeOrderFloorService;
|
|
|
+import com.yc.ship.module.his.service.tradeorderroommodel.HisTradeOrderRoomModelService;
|
|
|
+import com.yc.ship.module.his.service.tradeordertotal.HisTradeOrderTotalService;
|
|
|
+import com.yc.ship.module.his.service.tradeorderuser.HisTradeOrderUserService;
|
|
|
+import com.yc.ship.module.his.service.tradevisitor.HisTradeVisitorService;
|
|
|
import com.yc.ship.module.infra.api.config.ConfigApi;
|
|
|
import com.yc.ship.module.marketing.api.policy.PolicyApi;
|
|
|
import com.yc.ship.module.member.api.address.MemberAddressApi;
|
|
|
@@ -106,8 +132,7 @@ import com.yc.ship.module.trade.framework.common.ThreadLocalUtil;
|
|
|
import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
|
|
|
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;
|
|
|
-import com.yc.ship.module.trade.service.order.TradeOrderService;
|
|
|
+import com.yc.ship.module.trade.service.order.*;
|
|
|
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;
|
|
|
@@ -181,12 +206,20 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
@Resource
|
|
|
private TradeOrderMapper tradeOrderMapper;
|
|
|
@Resource
|
|
|
+ private HisTradeOrderMapper hisTradeOrderMapper;
|
|
|
+ @Resource
|
|
|
private TradeOrderUserMapper tradeOrderUserMapper;
|
|
|
@Resource
|
|
|
+ private HisTradeOrderUserMapper hisTradeOrderUserMapper;
|
|
|
+ @Resource
|
|
|
private TradeDetailMapper tradeDetailMapper;
|
|
|
@Resource
|
|
|
+ private HisTradeDetailMapper hisTradeDetailMapper;
|
|
|
+ @Resource
|
|
|
private TradeDetailBaseMapper tradeDetailBaseMapper;
|
|
|
@Resource
|
|
|
+ private HisTradeDetailBaseMapper hisTradeDetailBaseMapper;
|
|
|
+ @Resource
|
|
|
private ContractMapper contractMapper;
|
|
|
@Resource
|
|
|
private InsuranceMapper insuranceMapper;
|
|
|
@@ -212,18 +245,28 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
|
|
|
@Resource
|
|
|
private TradeOrderTotalMapper tradeOrderTotalMapper;
|
|
|
+ @Resource
|
|
|
+ private HisTradeOrderTotalMapper hisTradeOrderTotalMapper;
|
|
|
|
|
|
@Resource
|
|
|
private TradeOrderCountryMapper tradeOrderCountryMapper;
|
|
|
+ @Resource
|
|
|
+ private HisTradeOrderCountryMapper hisTradeOrderCountryMapper;
|
|
|
|
|
|
@Resource
|
|
|
private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
|
|
|
+ @Resource
|
|
|
+ private HisTradeOrderRoomModelMapper hisTradeOrderRoomModelMapper;
|
|
|
|
|
|
@Resource
|
|
|
private TradeVisitorMapper tradeVisitorMapper;
|
|
|
+ @Resource
|
|
|
+ private HisTradeVisitorMapper hisTradeVisitorMapper;
|
|
|
|
|
|
@Resource
|
|
|
private TradeOrderFloorMapper tradeOrderFloorMapper;
|
|
|
+ @Resource
|
|
|
+ private HisTradeOrderFloorMapper hisTradeOrderFloorMapper;
|
|
|
|
|
|
@Resource
|
|
|
private VoyageService voyageService;
|
|
|
@@ -503,28 +546,44 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
tradeOrderAuditDO.setOrderId(tradeOrderDO.getId());
|
|
|
tradeOrderAuditMapper.insert(tradeOrderAuditDO);
|
|
|
//审核 不通过还原到修改前订单
|
|
|
- List<TradeOrderDO> tradeOrderDoList = tradeOrderMapper.queryOrderByLast(tradeOrderDO.getOrderNo());
|
|
|
- if (tradeOrderDoList != null && !tradeOrderDoList.isEmpty()) {
|
|
|
- TradeOrderDO lastTradeOrder = tradeOrderDoList.get(0);
|
|
|
- tradeOrderMapper.updateOrderDeleted(orderId, 1);
|
|
|
- tradeOrderMapper.updateOrderDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderUserMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderUserMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeDetailMapper.updateDeleted(orderId, 1);
|
|
|
- tradeDetailMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeDetailBaseMapper.updateDeleted(orderId, 1);
|
|
|
- tradeDetailBaseMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeVisitorMapper.updateDeleted(orderId, 1);
|
|
|
- tradeVisitorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderCountryMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderCountryMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderRoomModelMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderRoomModelMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderFloorMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderFloorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderTotalMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderTotalMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
|
|
|
+// List<TradeOrderDO> tradeOrderDoList = tradeOrderMapper.queryOrderByLast(tradeOrderDO.getOrderNo());
|
|
|
+ HisTradeOrderDO lastTradeOrder = hisTradeOrderMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .eq(HisTradeOrderDO::getCurrentVersion, 1)
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+// if (tradeOrderDoList != null && !tradeOrderDoList.isEmpty()) {
|
|
|
+ if (lastTradeOrder != null) {
|
|
|
+// TradeOrderDO lastTradeOrder = tradeOrderDoList.get(0);
|
|
|
+// tradeOrderMapper.updateOrderDeleted(orderId, 1);
|
|
|
+// tradeOrderMapper.updateOrderDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderUserMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderUserMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeDetailMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeDetailMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeDetailBaseMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeDetailBaseMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeVisitorMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeVisitorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderCountryMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderCountryMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderRoomModelMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderRoomModelMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderFloorMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderFloorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderTotalMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderTotalMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+ rollbackOrderDataVersion(orderId);
|
|
|
+ rollbackOrderUserDataVersion(orderId);
|
|
|
+ rollbackOrderDetailDataVersion(orderId);
|
|
|
+ rollbackOrderDetailBaseDataVersion(orderId);
|
|
|
+ rollbackOrderTotalDataVersion(orderId);
|
|
|
+ rollbackOrderCountryDataVersion(orderId);
|
|
|
+ rollbackOrderRoomModelDataVersion(orderId);
|
|
|
+ rollbackOrderVisitorDataVersion(orderId);
|
|
|
+ rollbackOrderFloorDataVersion(orderId);
|
|
|
|
|
|
ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
|
|
|
reqDTO.setOldOrderId(tradeOrderDO.getId());
|
|
|
@@ -574,6 +633,510 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
return CommonResult.success("审核成功");
|
|
|
}
|
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeOrderMapper.deleteOrderById(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+ HisTradeOrderDO lastVersion = hisTradeOrderMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .eq(HisTradeOrderDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersion == null) {
|
|
|
+ log.error("无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把回退版本插入) ======================
|
|
|
+ TradeOrderDO a = new TradeOrderDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderDO preVersion = hisTradeOrderMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .lt(HisTradeOrderDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderMapper.update(new LambdaUpdateWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderMapper.update(new LambdaUpdateWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .set(HisTradeOrderDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderUserDataVersion(Long orderId){
|
|
|
+
|
|
|
+ tradeOrderUserMapper.deleteAllByOrderId(orderId);
|
|
|
+ //首先把旧数据删除
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeOrderUserDO> lastVersionList = hisTradeOrderUserMapper.selectList(new LambdaQueryWrapper<HisTradeOrderUserDO>()
|
|
|
+ .eq(HisTradeOrderUserDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeOrderUserDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeOrderUser无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeOrderUserDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeOrderUserDO a = new TradeOrderUserDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderUserMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderUserDO preVersion = hisTradeOrderUserMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderUserDO>()
|
|
|
+ .eq(HisTradeOrderUserDO::getId, dataId)
|
|
|
+ .lt(HisTradeOrderUserDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderUserDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderUserMapper.update(new LambdaUpdateWrapper<HisTradeOrderUserDO>()
|
|
|
+ .eq(HisTradeOrderUserDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderUserMapper.update(new LambdaUpdateWrapper<HisTradeOrderUserDO>()
|
|
|
+ .eq(HisTradeOrderUserDO::getId, dataId)
|
|
|
+ .set(HisTradeOrderUserDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderDetailDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeDetailMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeDetailDO> lastVersionList = hisTradeDetailMapper.selectList(new LambdaQueryWrapper<HisTradeDetailDO>()
|
|
|
+ .eq(HisTradeDetailDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeDetailDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeDetail无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeDetailDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeDetailDO a = new TradeDetailDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeDetailMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeDetailDO preVersion = hisTradeDetailMapper.selectOne(new LambdaQueryWrapper<HisTradeDetailDO>()
|
|
|
+ .eq(HisTradeDetailDO::getId, dataId)
|
|
|
+ .lt(HisTradeDetailDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeDetailDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeDetailMapper.update(new LambdaUpdateWrapper<HisTradeDetailDO>()
|
|
|
+ .eq(HisTradeDetailDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeDetailMapper.update(new LambdaUpdateWrapper<HisTradeDetailDO>()
|
|
|
+ .eq(HisTradeDetailDO::getId, dataId)
|
|
|
+ .set(HisTradeDetailDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderDetailBaseDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeDetailBaseMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeDetailBaseDO> lastVersionList = hisTradeDetailBaseMapper.selectList(new LambdaQueryWrapper<HisTradeDetailBaseDO>()
|
|
|
+ .eq(HisTradeDetailBaseDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeDetailBaseDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeDetailBase无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeDetailBaseDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeDetailBaseDO a = new TradeDetailBaseDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+// a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeDetailBaseMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeDetailBaseDO preVersion = hisTradeDetailBaseMapper.selectOne(new LambdaQueryWrapper<HisTradeDetailBaseDO>()
|
|
|
+ .eq(HisTradeDetailBaseDO::getId, dataId)
|
|
|
+ .lt(HisTradeDetailBaseDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeDetailBaseDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeDetailBaseMapper.update(new LambdaUpdateWrapper<HisTradeDetailBaseDO>()
|
|
|
+ .eq(HisTradeDetailBaseDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeDetailBaseMapper.update(new LambdaUpdateWrapper<HisTradeDetailBaseDO>()
|
|
|
+ .eq(HisTradeDetailBaseDO::getId, dataId)
|
|
|
+ .set(HisTradeDetailBaseDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderTotalDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeOrderTotalMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeOrderTotalDO> lastVersionList = hisTradeOrderTotalMapper.selectList(new LambdaQueryWrapper<HisTradeOrderTotalDO>()
|
|
|
+ .eq(HisTradeOrderTotalDO::getOldOrderId, orderId)
|
|
|
+ .eq(HisTradeOrderTotalDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeOrderTotal无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeOrderTotalDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeOrderTotalDO a = new TradeOrderTotalDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderTotalMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderTotalDO preVersion = hisTradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderTotalDO>()
|
|
|
+ .eq(HisTradeOrderTotalDO::getId, dataId)
|
|
|
+ .lt(HisTradeOrderTotalDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderTotalDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderTotalMapper.update(new LambdaUpdateWrapper<HisTradeOrderTotalDO>()
|
|
|
+ .eq(HisTradeOrderTotalDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderTotalMapper.update(new LambdaUpdateWrapper<HisTradeOrderTotalDO>()
|
|
|
+ .eq(HisTradeOrderTotalDO::getId, dataId)
|
|
|
+ .set(HisTradeOrderTotalDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderCountryDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeOrderCountryMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeOrderCountryDO> lastVersionList = hisTradeOrderCountryMapper.selectList(new LambdaQueryWrapper<HisTradeOrderCountryDO>()
|
|
|
+ .eq(HisTradeOrderCountryDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeOrderCountryDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeOrderCountry无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeOrderCountryDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeOrderCountryDO a = new TradeOrderCountryDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderCountryMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderCountryDO preVersion = hisTradeOrderCountryMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderCountryDO>()
|
|
|
+ .eq(HisTradeOrderCountryDO::getId, dataId)
|
|
|
+ .lt(HisTradeOrderCountryDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderCountryDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderCountryMapper.update(new LambdaUpdateWrapper<HisTradeOrderCountryDO>()
|
|
|
+ .eq(HisTradeOrderCountryDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderCountryMapper.update(new LambdaUpdateWrapper<HisTradeOrderCountryDO>()
|
|
|
+ .eq(HisTradeOrderCountryDO::getId, dataId)
|
|
|
+ .set(HisTradeOrderCountryDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderRoomModelDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeOrderRoomModelMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeOrderRoomModelDO> lastVersionList = hisTradeOrderRoomModelMapper.selectList(new LambdaQueryWrapper<HisTradeOrderRoomModelDO>()
|
|
|
+ .eq(HisTradeOrderRoomModelDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeOrderRoomModelDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeOrderRoomModel无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeOrderRoomModelDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeOrderRoomModelDO a = new TradeOrderRoomModelDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderRoomModelMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderRoomModelDO preVersion = hisTradeOrderRoomModelMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderRoomModelDO>()
|
|
|
+ .eq(HisTradeOrderRoomModelDO::getId, dataId)
|
|
|
+ .lt(HisTradeOrderRoomModelDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderRoomModelDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderRoomModelMapper.update(new LambdaUpdateWrapper<HisTradeOrderRoomModelDO>()
|
|
|
+ .eq(HisTradeOrderRoomModelDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderRoomModelMapper.update(new LambdaUpdateWrapper<HisTradeOrderRoomModelDO>()
|
|
|
+ .eq(HisTradeOrderRoomModelDO::getId, dataId)
|
|
|
+ .set(HisTradeOrderRoomModelDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderVisitorDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeVisitorMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeVisitorDO> lastVersionList = hisTradeVisitorMapper.selectList(new LambdaQueryWrapper<HisTradeVisitorDO>()
|
|
|
+ .eq(HisTradeVisitorDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeVisitorDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeVisitor无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeVisitorDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeVisitorDO a = new TradeVisitorDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeVisitorMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeVisitorDO preVersion = hisTradeVisitorMapper.selectOne(new LambdaQueryWrapper<HisTradeVisitorDO>()
|
|
|
+ .eq(HisTradeVisitorDO::getId, dataId)
|
|
|
+ .lt(HisTradeVisitorDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeVisitorDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeVisitorMapper.update(new LambdaUpdateWrapper<HisTradeVisitorDO>()
|
|
|
+ .eq(HisTradeVisitorDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeVisitorMapper.update(new LambdaUpdateWrapper<HisTradeVisitorDO>()
|
|
|
+ .eq(HisTradeVisitorDO::getId, dataId)
|
|
|
+ .set(HisTradeVisitorDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void rollbackOrderFloorDataVersion(Long orderId){
|
|
|
+ //首先把旧数据删除
|
|
|
+ tradeOrderFloorMapper.deleteAllByOrderId(orderId);
|
|
|
+
|
|
|
+ // ====================== 【关键1】加锁查询:锁住当前版本行 ======================
|
|
|
+ // FOR UPDATE 行锁 → 并发请求会排队,绝对安全
|
|
|
+
|
|
|
+ List<HisTradeOrderFloorDO> lastVersionList = hisTradeOrderFloorMapper.selectList(new LambdaQueryWrapper<HisTradeOrderFloorDO>()
|
|
|
+ .eq(HisTradeOrderFloorDO::getOrderId, orderId)
|
|
|
+ .eq(HisTradeOrderFloorDO::getCurrentVersion, 1)
|
|
|
+ .last("FOR UPDATE") // 加行锁,其他线程阻塞等待
|
|
|
+ );
|
|
|
+
|
|
|
+ if (lastVersionList == null || lastVersionList.isEmpty()) {
|
|
|
+ log.error("tradeOrderFloor无可用回退版本");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (HisTradeOrderFloorDO lastVersion : lastVersionList) {
|
|
|
+ Long dataId = lastVersion.getId();
|
|
|
+ // 【锁已生效】下面所有操作都是单线程执行,不会并发冲突
|
|
|
+ // ====================== 2. 主表回退(直接把上版本插进去) ======================
|
|
|
+ TradeOrderFloorDO a = new TradeOrderFloorDO();
|
|
|
+ BeanUtils.copyProperties(lastVersion, a);
|
|
|
+ a.setSyncStatus("0");
|
|
|
+ int updateMain = tradeOrderFloorMapper.insert(a);
|
|
|
+ if (!(updateMain ==1)) {
|
|
|
+ throw new RuntimeException("主表回退失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ // ====================== 3. 查询【再上一版】 ======================
|
|
|
+ HisTradeOrderFloorDO preVersion = hisTradeOrderFloorMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderFloorDO>()
|
|
|
+ .eq(HisTradeOrderFloorDO::getId, dataId)
|
|
|
+ .lt(HisTradeOrderFloorDO::getVersion, lastVersion.getVersion())
|
|
|
+ .orderByDesc(HisTradeOrderFloorDO::getVersion)
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ // ====================== 【关键2】原子更新所有current(绝对安全) ======================
|
|
|
+ if (preVersion != null) {
|
|
|
+ // 原子SQL:只有preVersion置1,其余全部置0
|
|
|
+ hisTradeOrderFloorMapper.update(new LambdaUpdateWrapper<HisTradeOrderFloorDO>()
|
|
|
+ .eq(HisTradeOrderFloorDO::getId, dataId)
|
|
|
+ .setSql("current_version = IF(his_id = " + preVersion.getHisId() + ", 1, 0)")
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ // 已到最早版本 → 全部置0
|
|
|
+ hisTradeOrderFloorMapper.update(new LambdaUpdateWrapper<HisTradeOrderFloorDO>()
|
|
|
+ .eq(HisTradeOrderFloorDO::getId, dataId)
|
|
|
+ .set(HisTradeOrderFloorDO::getCurrentVersion, 0)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
@TradeOrderLog(operateType = TradeOrderOperateTypeEnum.CANCEL_AUDIT)
|
|
|
@TenantIgnore
|
|
|
@@ -770,27 +1333,44 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
|
|
|
return CommonResult.error(ORDER_NOT_EXIST);
|
|
|
}
|
|
|
//撤回还原到修改前订单
|
|
|
- List<TradeOrderDO> tradeOrderDoList = tradeOrderMapper.queryOrderByLast(tradeOrderDO.getOrderNo());
|
|
|
- if (tradeOrderDoList != null && !tradeOrderDoList.isEmpty()) {
|
|
|
- TradeOrderDO lastTradeOrder = tradeOrderDoList.get(0);
|
|
|
- tradeOrderMapper.updateOrderDeleted(orderId, 1);
|
|
|
- tradeOrderMapper.updateOrderDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderUserMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderUserMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeDetailMapper.updateDeleted(orderId, 1);
|
|
|
- tradeDetailMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeDetailBaseMapper.updateDeleted(orderId, 1);
|
|
|
- tradeDetailBaseMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeVisitorMapper.updateDeleted(orderId, 1);
|
|
|
- tradeVisitorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderCountryMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderCountryMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderRoomModelMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderRoomModelMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderFloorMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderFloorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
- tradeOrderTotalMapper.updateDeleted(orderId, 1);
|
|
|
- tradeOrderTotalMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+
|
|
|
+// List<TradeOrderDO> tradeOrderDoList = tradeOrderMapper.queryOrderByLast(tradeOrderDO.getOrderNo());
|
|
|
+ HisTradeOrderDO lastTradeOrder = hisTradeOrderMapper.selectOne(new LambdaQueryWrapper<HisTradeOrderDO>()
|
|
|
+ .eq(HisTradeOrderDO::getId, orderId)
|
|
|
+ .eq(HisTradeOrderDO::getCurrentVersion, 1)
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+// if (tradeOrderDoList != null && !tradeOrderDoList.isEmpty()) {
|
|
|
+ if (lastTradeOrder != null) {
|
|
|
+// TradeOrderDO lastTradeOrder = tradeOrderDoList.get(0);
|
|
|
+// tradeOrderMapper.updateOrderDeleted(orderId, 1);
|
|
|
+// tradeOrderMapper.updateOrderDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderUserMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderUserMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeDetailMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeDetailMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeDetailBaseMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeDetailBaseMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeVisitorMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeVisitorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderCountryMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderCountryMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderRoomModelMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderRoomModelMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderFloorMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderFloorMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+// tradeOrderTotalMapper.updateDeleted(orderId, 1);
|
|
|
+// tradeOrderTotalMapper.updateDeleted(lastTradeOrder.getId(), 0);
|
|
|
+ rollbackOrderDataVersion(orderId);
|
|
|
+ rollbackOrderUserDataVersion(orderId);
|
|
|
+ rollbackOrderDetailDataVersion(orderId);
|
|
|
+ rollbackOrderDetailBaseDataVersion(orderId);
|
|
|
+ rollbackOrderTotalDataVersion(orderId);
|
|
|
+ rollbackOrderCountryDataVersion(orderId);
|
|
|
+ rollbackOrderRoomModelDataVersion(orderId);
|
|
|
+ rollbackOrderVisitorDataVersion(orderId);
|
|
|
+ rollbackOrderFloorDataVersion(orderId);
|
|
|
|
|
|
ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
|
|
|
reqDTO.setOldOrderId(tradeOrderDO.getId());
|