Kaynağa Gözat

修改订单逻辑

igl 1 yıl önce
ebeveyn
işleme
7c2788b900
16 değiştirilmiş dosya ile 262 ekleme ve 146 silme
  1. 6 4
      vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderOperateHistoryDTO.java
  2. 7 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/AssetMapper.java
  3. 3 0
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderOperateHistoryMapper.java
  4. 19 12
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderOperateHistory.java
  5. 4 1
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/AssetService.java
  6. 12 2
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderOperateHistoryService.java
  7. 36 12
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssetServiceImpl.java
  8. 6 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java
  9. 27 26
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java
  10. 20 18
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicEvaluateRecordServiceImpl.java
  11. 27 12
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OderHandleServiceImpl.java
  12. 16 5
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderOperateHistoryServiceImpl.java
  13. 22 5
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java
  14. 5 3
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java
  15. 46 43
      vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java
  16. 6 0
      vehicle-server/src/main/resources/mapper/OmsOrderPayHistoryMapper.xml

+ 6 - 4
vehicle-api/src/main/java/com/chelvc/cloud/vehicle/api/dto/OmsOrderOperateHistoryDTO.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.SuperBuilder;
 
-import java.util.Date;
+import java.time.LocalDateTime;
 
 @Data
 @SuperBuilder
@@ -19,14 +19,16 @@ public class OmsOrderOperateHistoryDTO {
 
     private Long userId;
 
-    private String operateMan;
+    private Long operateMan;
 
     /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
-    private Long orderStatus;
+    private Integer orderStatus;
 
     private Integer flag;
 
     private String note;
 
-    private Date createTime;
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
 }

+ 7 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/AssetMapper.java

@@ -3,7 +3,14 @@ package com.chelvc.cloud.vehicle.server.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.server.entity.Asset;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Update;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 @Mapper
 public interface AssetMapper extends BaseMapper<Asset> {
+
+    @Update("update asset set frozen = frozen - #{payAmount}, total = total + #{platformRealityAmount}, update_time = #{now} where user_id = 1 and type = 0")
+    void updatePlatformAsset(BigDecimal platformRealityAmount, BigDecimal payAmount, LocalDateTime now);
 }

+ 3 - 0
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/dao/OmsOrderOperateHistoryMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.chelvc.cloud.vehicle.api.dto.OmsOrderOperateHistoryDTO;
 import com.chelvc.cloud.vehicle.server.entity.OmsOrderOperateHistory;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -78,4 +79,6 @@ public interface OmsOrderOperateHistoryMapper extends BaseMapper<OmsOrderOperate
      * @param userId 用户id
      */
     public void changeUserOrderInformFlag(Long userId);
+
+    int batchInsertOmsOrderOperateHistory(@Param("list") List<OmsOrderOperateHistory> list);
 }

+ 19 - 12
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/entity/OmsOrderOperateHistory.java

@@ -3,14 +3,12 @@ package com.chelvc.cloud.vehicle.server.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.chelvc.framework.database.entity.ModifyEntity;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import lombok.ToString;
+import lombok.*;
 import lombok.experimental.SuperBuilder;
 
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
 /**
  * 订单操作历史记录对象 oms_order_operate_history
  * 
@@ -22,14 +20,13 @@ import lombok.experimental.SuperBuilder;
 @NoArgsConstructor
 @AllArgsConstructor
 @ToString(callSuper = true)
-@EqualsAndHashCode(callSuper = true)
 @TableName(autoResultMap = true)
-public class OmsOrderOperateHistory extends ModifyEntity<Long>
+public class OmsOrderOperateHistory implements Serializable
 {
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1723358231804121398L;
 
     /** $column.columnComment */
-    @TableId(type = IdType.ASSIGN_ID)
+    @TableId(type = IdType.AUTO)
     private Long id;
 
     /** 订单id */
@@ -41,10 +38,10 @@ public class OmsOrderOperateHistory extends ModifyEntity<Long>
     private Long userId;
 
     /** 操作人:用户;系统;后台管理员 */
-    private String operateMan;
+    private Long operateMan;
 
     /** 订单状态:0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭;5->无效订单 */
-    private Long orderStatus;
+    private Integer orderStatus;
 
     /**
      * 订单消息标识:0-新消息;1-已查看
@@ -53,4 +50,14 @@ public class OmsOrderOperateHistory extends ModifyEntity<Long>
 
     /** 备注 */
     private String note;
+
+    /**
+     * 操作时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
 }

+ 4 - 1
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/AssetService.java

@@ -19,7 +19,10 @@ public interface AssetService {
      * @param operateAmount 操作金额
      * @param userId 用户标识
      * @param type 类型:0-平台;1-用户;2-商家
+     * @param amountType 金额类型:1-商户资产;2-冻结金额
      * @return
      */
-    BigDecimal updateAsset(Integer operateType, BigDecimal operateAmount, Long userId, Integer type);
+    BigDecimal updateAsset(Integer operateType, BigDecimal operateAmount, Long userId, Integer type, Integer amountType);
+
+    void updatePlatformAsset(BigDecimal platformRealityAmount, BigDecimal payAmount);
 }

+ 12 - 2
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/IOmsOrderOperateHistoryService.java

@@ -34,10 +34,20 @@ public interface IOmsOrderOperateHistoryService
     /**
      * 新增订单操作历史记录
      * 
-     * @param omsOrderOperateHistory 订单操作历史记录
+     * @param orderId 订单标识
+     * @param userId 用户标识
+     * @param orderStatus 订单状态
+     * @return 结果
+     */
+    public int insertOmsOrderOperateHistory(Long orderId, Long userId, Integer orderStatus);
+
+    /**
+     * 批量新增订单操作历史记录
+     *
+     * @param historyList 订单操作历史记录
      * @return 结果
      */
-    public int insertOmsOrderOperateHistory(OmsOrderOperateHistory omsOrderOperateHistory);
+    public int batchInsertOmsOrderOperateHistory(List<OmsOrderOperateHistory> historyList);
 
     /**
      * 修改订单操作历史记录

+ 36 - 12
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/AssetServiceImpl.java

@@ -1,8 +1,5 @@
 package com.chelvc.cloud.vehicle.server.service.impl;
 
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,6 +11,9 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
 @Service
 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
 public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements AssetService {
@@ -37,21 +37,45 @@ public class AssetServiceImpl extends ServiceImpl<AssetMapper, Asset> implements
     }
 
     @Override
-    public BigDecimal updateAsset(Integer operateType, BigDecimal operateAmount, Long userId, Integer type) {
+    public BigDecimal updateAsset(Integer operateType, BigDecimal operateAmount, Long userId, Integer type, Integer amountType) {
         Asset asset = queryAsset(userId, type);
-        BigDecimal total = asset.getTotal();
-        if (operateType == 1 && total.compareTo(operateAmount) < 0) {
-            throw new ResourceUnavailableException("账户余额不足");
-        }
-        if (operateType == 0) {
-            asset.setTotal(total.add(operateAmount));
-        } else if (operateType == 1) {
-            asset.setTotal(total.subtract(operateAmount));
+        if(amountType == 1){
+            BigDecimal total = asset.getTotal();
+            if (operateType == 1 && total.compareTo(operateAmount) < 0) {
+                throw new ResourceUnavailableException("账户余额不足");
+            }
+            if (operateType == 0) {
+                asset.setTotal(total.add(operateAmount));
+            } else if (operateType == 1) {
+                asset.setTotal(total.subtract(operateAmount));
+            }
+            return asset.getTotal();
+        } else if(amountType == 2){
+            BigDecimal frozen = asset.getFrozen();
+            if (operateType == 1 && frozen.compareTo(operateAmount) < 0) {
+                throw new ResourceUnavailableException("账户冻结余额不足");
+            }
+            if (operateType == 0) {
+                asset.setFrozen(frozen.add(operateAmount));
+            } else if (operateType == 1) {
+                asset.setFrozen(frozen.subtract(operateAmount));
+            }
         }
+        asset.setUpdateTime(LocalDateTime.now());
         int i = baseMapper.updateById(asset);
         if (i != 1) {
             throw new ResourceUnavailableException("操作失败");
         }
         return asset.getTotal();
     }
+
+    @Override
+    public void updatePlatformAsset(BigDecimal platformRealityAmount, BigDecimal payAmount) {
+        Asset asset = queryAsset(1L, 0);
+        BigDecimal frozen = asset.getFrozen();
+        if(frozen.compareTo(payAmount) < 0){
+            throw new ResourceUnavailableException("账户冻结余额不足");
+        }
+        baseMapper.updatePlatformAsset(platformRealityAmount, payAmount, LocalDateTime.now());
+    }
 }

+ 6 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicCommentServiceImpl.java

@@ -24,9 +24,11 @@ import com.chelvc.cloud.vehicle.server.service.DynamicCommentService;
 import com.chelvc.cloud.vehicle.server.service.DynamicContentService;
 import com.chelvc.cloud.vehicle.server.service.DynamicEvaluateRecordService;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import com.chelvc.framework.common.util.ObjectUtils;
+import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -221,7 +223,6 @@ public class DynamicCommentServiceImpl implements DynamicCommentService,
     }
 
     @Override
-    //@Transactional
     public void examine(Long id, ExamineType examine) {
         DynamicComment DynamicComment = baseMapper.selectById(id);
         if (DynamicComment == null) {
@@ -238,8 +239,10 @@ public class DynamicCommentServiceImpl implements DynamicCommentService,
             throw new ResourceUnavailableException("操作失败");
         }
         if (ExamineType.PASS.equals(examine)) {
-            addParentComment(DynamicComment.getParentId());
-            dynamicContentService.addComment(DynamicComment.getDynamicId());
+            DatabaseContextHolder.transactional((Executor) () -> {
+                addParentComment(DynamicComment.getParentId());
+                dynamicContentService.addComment(DynamicComment.getDynamicId());
+            });
         }
     }
 

+ 27 - 26
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicContentServiceImpl.java

@@ -260,7 +260,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  //@Transactional
   public void insertByBo(AddDynamicContentParam param, Long userId) {
     addValidEntityBeforeSave(param);
     String textContent = param.getTextContent();
@@ -270,21 +269,23 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
     contentDynamic.setTextContent(textContent);
     contentDynamic.setType(type.getValue());
     contentDynamic.setLocation(param.getLocation());
-    baseMapper.insert(contentDynamic);
-    log.info("用户[{}]:发送动态信息{}", userId, contentDynamic);
-    List<AddDynamicResourceParam> list = param.getList();
-    if (list != null && !list.isEmpty()) {
-      List<DynamicResource> resources = new ArrayList<>();
-      list.forEach(e -> {
-        DynamicResource resource = new DynamicResource();
-        resource.setDynamicId(contentDynamic.getId());
-        resource.setResourceKey(e.getResourceKey());
-        resource.setSort(e.getSort());
-        resource.setResourceFrame(e.getResourceFrame());
-        resources.add(resource);
-      });
-      contentDynamicResourceService.batchInsert(resources);
-    }
+    DatabaseContextHolder.transactional((Executor) () -> {
+      baseMapper.insert(contentDynamic);
+      log.info("用户[{}]:发送动态信息{}", userId, contentDynamic);
+      List<AddDynamicResourceParam> list = param.getList();
+      if (list != null && !list.isEmpty()) {
+        List<DynamicResource> resources = new ArrayList<>();
+        list.forEach(e -> {
+          DynamicResource resource = new DynamicResource();
+          resource.setDynamicId(contentDynamic.getId());
+          resource.setResourceKey(e.getResourceKey());
+          resource.setSort(e.getSort());
+          resource.setResourceFrame(e.getResourceFrame());
+          resources.add(resource);
+        });
+        contentDynamicResourceService.batchInsert(resources);
+      }
+    });
     //异步处理审核
     //contentAuditHelper.asyncContentHandle(contentDynamic);
   }
@@ -306,19 +307,20 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  //@Transactional
   public void deleteByIds(Long id, Long userId) {
     LambdaQueryWrapper<DynamicContent> wrapper = Wrappers.lambdaQuery();
     wrapper.eq(DynamicContent::getId, id);
     wrapper.eq(DynamicContent::getUserId, userId);
-    boolean b = baseMapper.delete(wrapper) > 0;
-    if (!b) {
-      throw new ResourceUnavailableException("动态删除失败");
-    }
-    LambdaQueryWrapper<DynamicComment> lwq = Wrappers.lambdaQuery();
-    lwq.eq(DynamicComment::getDynamicId, id);
-    //删除评论
-    dynamicCommentMapper.delete(lwq);
+    DatabaseContextHolder.transactional((Executor) () -> {
+      boolean b = baseMapper.delete(wrapper) > 0;
+      if (!b) {
+        throw new ResourceUnavailableException("动态删除失败");
+      }
+      LambdaQueryWrapper<DynamicComment> lwq = Wrappers.lambdaQuery();
+      lwq.eq(DynamicComment::getDynamicId, id);
+      //删除评论
+      dynamicCommentMapper.delete(lwq);
+    });
   }
 
   @Override
@@ -376,7 +378,6 @@ public class DynamicContentServiceImpl implements DynamicContentService, com.che
   }
 
   @Override
-  //@Transactional
   public void shieldByUserId(Long userId, Integer type) {
     DatabaseContextHolder.transactional((Executor) () -> {
       baseMapper.shieldByUserId(userId, type);

+ 20 - 18
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/DynamicEvaluateRecordServiceImpl.java

@@ -17,6 +17,7 @@ import com.chelvc.cloud.vehicle.server.service.DynamicCommentService;
 import com.chelvc.cloud.vehicle.server.service.DynamicContentService;
 import com.chelvc.cloud.vehicle.server.service.DynamicEvaluateRecordService;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import com.chelvc.framework.common.util.ObjectUtils;
@@ -58,31 +59,32 @@ public class DynamicEvaluateRecordServiceImpl extends ServiceImpl<DynamicEvaluat
      * 新增内容评价(点赞/踩)列
      */
     @Override
-    //@Transactional
     public Boolean updateRecord(AddDynamicEvaluateRecordParam param, Long userId) {
         Integer actionType = param.getActionType().getValue();
         Integer recordType = param.getRecordType().getValue();
         Integer dynamicStatusType = param.getDynamicStatusType().getValue();
         LambdaQueryWrapper<DynamicEvaluateRecord> lqw =
                 buildAddWrapper(param.getContentId(), userId);
-        if (Objects.equals(ActionType.ADD.getValue(), actionType)) {
-            //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
-            executeWrapper(lqw, param, true, userId);
-            if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
-                iDynamicCommentService.addNum(dynamicStatusType, param.getContentId());
-            } else if (Objects.equals(RecordType.DYNAMIC.getValue(), recordType)) {
-                iDynamicContentService.addNum(dynamicStatusType, param.getContentId());
-            }
-        } else if (Objects.equals(ActionType.CANCEL.getValue(), actionType)) {
-            lqw.eq(DynamicEvaluateRecord::getOperaterType, dynamicStatusType);
-            //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
-            executeWrapper(lqw, param, false, userId);
-            if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
-                iDynamicCommentService.reduceNum(dynamicStatusType, param.getContentId());
-            } else if (Objects.equals(RecordType.DYNAMIC.getValue(), recordType)) {
-                iDynamicContentService.reduceNum(dynamicStatusType, param.getContentId());
+        DatabaseContextHolder.transactional((Executor) () -> {
+            if (Objects.equals(ActionType.ADD.getValue(), actionType)) {
+                //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
+                executeWrapper(lqw, param, true, userId);
+                if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
+                    iDynamicCommentService.addNum(dynamicStatusType, param.getContentId());
+                } else if (Objects.equals(RecordType.DYNAMIC.getValue(), recordType)) {
+                    iDynamicContentService.addNum(dynamicStatusType, param.getContentId());
+                }
+            } else if (Objects.equals(ActionType.CANCEL.getValue(), actionType)) {
+                lqw.eq(DynamicEvaluateRecord::getOperaterType, dynamicStatusType);
+                //判断该用户是否有点赞/踩记录,点击新增记录,取消删除记录
+                executeWrapper(lqw, param, false, userId);
+                if (Objects.equals(RecordType.COMMENT.getValue(), recordType)) {
+                    iDynamicCommentService.reduceNum(dynamicStatusType, param.getContentId());
+                } else if (Objects.equals(RecordType.DYNAMIC.getValue(), recordType)) {
+                    iDynamicContentService.reduceNum(dynamicStatusType, param.getContentId());
+                }
             }
-        }
+        });
         return true;
     }
 

+ 27 - 12
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OderHandleServiceImpl.java

@@ -36,6 +36,7 @@ public class OderHandleServiceImpl implements OrderHandleService {
     private final AssetService assetService;
     private final BalanceDetailService balanceDetailService;
     private final CurrencyRecordService currencyRecordService;
+    private final IOmsOrderOperateHistoryService omsOrderOperateHistoryService;
 
     @Override
     public void orderPay(Long orderId) {
@@ -67,7 +68,6 @@ public class OderHandleServiceImpl implements OrderHandleService {
     }
 
     @Override
-    //@Transactional
     public void handleOrder(OmsOrder omsOrder) {
         omsOrder.setStatus(4);
         omsOrder.setConfirmStatus(1);
@@ -112,29 +112,43 @@ public class OderHandleServiceImpl implements OrderHandleService {
         }
         //商家应得金额
         BigDecimal operateAmount = payAmount.subtract(platformAmount);
-        //记录商家余额明细
-        BigDecimal surplusAmount = assetService.updateAsset(0, operateAmount, merchantId, 2);
-        balanceDetailService.recordFlow(omsOrder.getId(), 2, merchantId, operateAmount, surplusAmount, 0, 1, userId);
         //记录流水--------------------------
         //商家流水
-        BigDecimal MerchantDeduct = BigDecimal.ZERO;  //扣税
-        currencyRecordService.recordFlow(merchantId, 2, 0, orderId, userId, 0, operateAmount, MerchantDeduct, operateAmount);
+        BigDecimal merchantDeduct = BigDecimal.ZERO;  //扣税
+        BigDecimal merchantRealityAmount = operateAmount.subtract(merchantDeduct);
+        BigDecimal surplusAmount = assetService.updateAsset(0, merchantRealityAmount, merchantId, 2, 1);
+        currencyRecordService.recordFlow(merchantId, 2, 0, orderId, userId, 0, operateAmount, merchantDeduct, merchantRealityAmount);
+        //记录商家余额明细
+        balanceDetailService.recordFlow(omsOrder.getId(), 2, merchantId, operateAmount, surplusAmount, 0, 1, userId);
         //邀请用户---分得佣金
         if (userAmount.compareTo(BigDecimal.ZERO) > 0) {
             platformAmount = platformAmount.subtract(userAmount);
             BigDecimal deduct = BigDecimal.ZERO;  //扣税
-            currencyRecordService.recordFlow(inviteUserId, 1, 0, orderId, userId, 1, userAmount, deduct, userAmount);
+            BigDecimal realityAmount = userAmount.subtract(deduct);
+            //更新用户资产
+            assetService.updateAsset(0, realityAmount, inviteUserId, 1, 1);
+            //邀请用户流水
+            currencyRecordService.recordFlow(inviteUserId, 1, 0, orderId, userId, 1, userAmount, deduct, realityAmount);
         }
         //邀请商家---分得佣金
         if (merchantAmount.compareTo(BigDecimal.ZERO) > 0) {
             platformAmount = platformAmount.subtract(merchantAmount);
             BigDecimal deduct = BigDecimal.ZERO;  //扣税
-            currencyRecordService.recordFlow(inviteMerchantId, 1, 0, orderId, userId, 2, merchantAmount, deduct, merchantAmount);
+            BigDecimal realityAmount = merchantAmount.subtract(deduct);
+            //更新用户资产
+            assetService.updateAsset(0, realityAmount, inviteMerchantId, 1, 1);
+            //邀请商家流水
+            currencyRecordService.recordFlow(inviteMerchantId, 1, 0, orderId, userId, 2, merchantAmount, deduct, realityAmount);
         }
         //平台流水
         BigDecimal deduct = BigDecimal.ZERO;  //扣税
-        currencyRecordService.recordFlow(1L, 0, 0, orderId, userId, 3, platformAmount, deduct, platformAmount);
+        BigDecimal platformRealityAmount = platformAmount.subtract(deduct);
+        //更新平台资产
+        assetService.updatePlatformAsset(platformRealityAmount, payAmount);
+        //平台流水
+        currencyRecordService.recordFlow(1L, 0, 0, orderId, userId, 3, platformAmount, deduct, platformRealityAmount);
 
+        omsOrderOperateHistoryService.insertOmsOrderOperateHistory(omsOrder.getId(), userId, omsOrder.getStatus());
         /*BigDecimal platformSurplusAmount = assetService.updateAsset(1, operateAmount, 1L, 0);
         balanceDetailService.recordFlow(omsOrder.getId(), 0, 1L, operateAmount, platformSurplusAmount, 1, 1,
                 merchantId);
@@ -159,12 +173,13 @@ public class OderHandleServiceImpl implements OrderHandleService {
     }
 
     @Override
-    //@Transactional
     public void paySuccess(OmsOrder order) {
         omsOrderMapper.updateById(order);
-        BigDecimal surplusAmount = assetService.updateAsset(0, order.getPayAmount(), 1L, 0);
+        assetService.updateAsset(0, order.getPayAmount(), 1L, 0, 2);
+        omsOrderOperateHistoryService.insertOmsOrderOperateHistory(order.getId(), order.getUserId(), order.getStatus());
+       /* BigDecimal surplusAmount = assetService.updateAsset(0, order.getPayAmount(), 1L, 0);
         balanceDetailService.recordFlow(order.getId(), 0, 1L, order.getPayAmount(), surplusAmount, 0, 1,
-                order.getUserId());
+                order.getUserId());*/
     }
 
     public static void main(String[] args) {

+ 16 - 5
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderOperateHistoryServiceImpl.java

@@ -14,7 +14,7 @@ import com.chelvc.framework.common.util.ObjectUtils;
 import com.chelvc.framework.database.context.DatabaseContextHolder;
 import org.springframework.stereotype.Service;
 
-import java.util.Date;
+import java.time.LocalDateTime;
 import java.util.List;
 
 /**
@@ -54,14 +54,25 @@ public class OmsOrderOperateHistoryServiceImpl extends ServiceImpl<OmsOrderOpera
     /**
      * 新增订单操作历史记录
      * 
-     * @param omsOrderOperateHistory 订单操作历史记录
+     * @param orderId 订单标识
+     * @param userId 用户标识
+     * @param orderStatus 订单状态
      * @return 结果
      */
     @Override
-    public int insertOmsOrderOperateHistory(OmsOrderOperateHistory omsOrderOperateHistory)
+    public int insertOmsOrderOperateHistory(Long orderId, Long userId, Integer orderStatus)
     {
-        omsOrderOperateHistory.setCreateTime(new Date());
-        return this.baseMapper.insertOmsOrderOperateHistory(omsOrderOperateHistory);
+        OmsOrderOperateHistory history = new OmsOrderOperateHistory();
+        history.setOrderId(orderId);
+        history.setOrderStatus(orderStatus);
+        history.setCreateTime(LocalDateTime.now());
+        history.setUserId(userId);
+        return this.baseMapper.insertOmsOrderOperateHistory(history);
+    }
+
+    @Override
+    public int batchInsertOmsOrderOperateHistory(List<OmsOrderOperateHistory> historyList) {
+        return this.baseMapper.batchInsertOmsOrderOperateHistory(historyList);
     }
 
     /**

+ 22 - 5
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/OmsOrderServiceImpl.java

@@ -13,6 +13,7 @@ import com.chelvc.cloud.vehicle.server.dao.OmsOrderMapper;
 import com.chelvc.cloud.vehicle.server.entity.*;
 import com.chelvc.cloud.vehicle.server.service.*;
 import com.chelvc.framework.base.context.SessionContextHolder;
+import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.util.AssertUtils;
 import com.chelvc.framework.common.util.ObjectUtils;
@@ -54,6 +55,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
     private final MerchantService merchantService;
 
     private final OrderHandleService orderHandleService;
+    private final IOmsOrderOperateHistoryService omsOrderOperateHistoryService;
 
     @Override
     public ConfirmOrderResultDTO generateConfirmOrder(OmsOrderModifyParam orderParam) {
@@ -223,6 +225,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
             orderItem.setOrderSn(order.getOrderSn());
         }
         omsOrderItemService.add(orderItemList);
+        omsOrderOperateHistoryService.insertOmsOrderOperateHistory(order.getId(), userId, order.getStatus());
         //如使用优惠券更新优惠券使用状态
         if (orderParam.getCouponId() != null) {
             updateCouponStatus(orderParam.getCouponId(), userId, 1);
@@ -252,7 +255,9 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         order.setStatus(1);
         order.setPaymentTime(new Date());
         order.setPayType(payType);
-        orderHandleService.paySuccess(order);
+        DatabaseContextHolder.transactional((Executor) () ->
+            orderHandleService.paySuccess(order)
+        );
         //恢复所有下单商品的锁定库存,扣减真实库存
 //        List<OmsOrderItemDTO> orderDetailList = this.baseMapper.getDetail(orderId);
 //        int count = this.baseMapper.updateSkuStock(orderDetailList);
@@ -275,10 +280,18 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         }
         //修改订单状态为交易取消
         List<Long> ids = new ArrayList<>();
+        List<OmsOrderOperateHistory> histories = new ArrayList<>();
         for (OmsOrderDetailDTO timeOutOrder : timeOutOrders) {
             ids.add(timeOutOrder.getId());
-        }
-        this.baseMapper.updateOrderStatus(ids, 4);
+            OmsOrderOperateHistory history = new OmsOrderOperateHistory();
+            history.setOrderId(timeOutOrder.getId());
+            history.setUserId(timeOutOrder.getUserId());
+            history.setOrderStatus(5);
+            history.setCreateTime(LocalDateTime.now());
+            histories.add(history);
+        }
+        this.baseMapper.updateOrderStatus(ids, 5);
+        omsOrderOperateHistoryService.batchInsertOmsOrderOperateHistory(histories);
         for (OmsOrderDetailDTO timeOutOrder : timeOutOrders) {
             //解除订单商品库存锁定
 //            omsOrderMapper.releaseSkuStockLock(timeOutOrder.getOrderItemList());
@@ -310,6 +323,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
             List<Long> ids = new ArrayList<>();
             ids.add(cancelOrder.getId());
             this.baseMapper.updateOrderStatus(ids, 5);
+            omsOrderOperateHistoryService.insertOmsOrderOperateHistory(cancelOrder.getId(), cancelOrder.getUserId(), 5);
             OmsOrderItem orderItem = new OmsOrderItem();
             orderItem.setOrderId(orderId);
 //            List<OmsOrderItem> orderItemList = this.omsOrderItemService.selectByExample(orderItem);
@@ -351,6 +365,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         order.setConfirmStatus(1);
         order.setReceiveTime(new Date());
         this.baseMapper.updateById(order);
+        omsOrderOperateHistoryService.insertOmsOrderOperateHistory(orderId, userId, 4);
     }
 
     @Override
@@ -816,8 +831,10 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper, OmsOrder> i
         AssertUtils.available(omsOrder.getMerchantId() != null && omsOrder.getMerchantId().equals(merchantId),
                 "该订单商品不属于此商家");
         Integer status = omsOrder.getStatus();
-        AssertUtils.available(status == 1, "该订单不可用");
-        orderHandleService.handleOrder(omsOrder);
+        AssertUtils.available(status != 1, "该订单不可用");
+        DatabaseContextHolder.transactional((Executor) () -> {
+            orderHandleService.handleOrder(omsOrder);
+        });
     }
 
 

+ 5 - 3
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/ProfitRatioConfigServiceImpl.java

@@ -13,6 +13,7 @@ import com.chelvc.cloud.vehicle.server.dao.ProfitRatioConfigMapper;
 import com.chelvc.cloud.vehicle.server.entity.ProfitRatioConfig;
 import com.chelvc.cloud.vehicle.server.service.ProfitRatioConfigService;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.common.model.Pagination;
 import com.chelvc.framework.common.model.Paging;
 import com.chelvc.framework.database.context.DatabaseContextHolder;
@@ -57,7 +58,6 @@ public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigM
     }
 
     @Override
-    //@Transactional
     public void delete(Long id, Long userId) {
         ProfitRatioConfig profitRatioConfig = baseMapper.selectById(id);
         if(profitRatioConfig == null){
@@ -69,8 +69,10 @@ public class ProfitRatioConfigServiceImpl extends ServiceImpl<ProfitRatioConfigM
         }
         profitRatioConfig.setUpdater(userId);
         profitRatioConfig.setUpdateTime(new Date());
-        baseMapper.update(profitRatioConfig, null);
-        baseMapper.deleteById(id);
+        DatabaseContextHolder.transactional((Executor) () -> {
+            baseMapper.update(profitRatioConfig, null);
+            baseMapper.deleteById(id);
+        });
     }
 
     @Override

+ 46 - 43
vehicle-server/src/main/java/com/chelvc/cloud/vehicle/server/service/impl/UserInviteServiceImpl.java

@@ -18,7 +18,9 @@ import com.chelvc.cloud.vehicle.server.entity.UserInvite;
 import com.chelvc.cloud.vehicle.server.entity.UserProfitRatio;
 import com.chelvc.cloud.vehicle.server.service.MerchantService;
 import com.chelvc.framework.common.exception.ResourceUnavailableException;
+import com.chelvc.framework.common.function.Executor;
 import com.chelvc.framework.common.model.Paging;
+import com.chelvc.framework.database.context.DatabaseContextHolder;
 import lombok.RequiredArgsConstructor;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.apache.dubbo.config.annotation.DubboService;
@@ -45,7 +47,6 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
     private final MerchantService merchantService;
 
     @Override
-    //@Transactional
     public void bindInvite(UserInviteParams params) {
         Long userId = params.getUserId();
         Long targetId = params.getTargetId();
@@ -65,50 +66,52 @@ public class UserInviteServiceImpl extends ServiceImpl<UserInviteMapper, UserInv
         userInvite.setTargetId(targetId);
         userInvite.setType(type);
         userInvite.setCreateTime(LocalDateTime.now());
-        int i = baseMapper.insert(userInvite);
-        if(i < 1){
-            throw new ResourceUnavailableException("绑定失败");
-        }
-        LambdaQueryWrapper<UserInvite> lwq = Wrappers.lambdaQuery();
-        lwq.eq(UserInvite::getUserId, userId);
-        lwq.eq(UserInvite::getType, type);
-        Integer total = baseMapper.selectCount(lwq);
-        int ratio = 0;
-        LambdaQueryWrapper<UserProfitRatio> lambdaQuery = Wrappers.lambdaQuery();
-        lambdaQuery.eq(UserProfitRatio::getUserId, userId);
-        lambdaQuery.eq(UserProfitRatio::getType, type);
-        UserProfitRatio userProfitRatio = userProfitRatioMapper.selectOne(lambdaQuery);
-        if(userProfitRatio == null){
-            userProfitRatio = new UserProfitRatio();
-            userProfitRatio.setRatio(ratio);
-            userProfitRatio.setUserId(userId);
-            userProfitRatio.setType(type);
-            userProfitRatio.setCreateTime(LocalDateTime.now());
-            userProfitRatio.setUpdateTime(LocalDateTime.now());
-            userProfitRatio.setUpdater(1L);
-            userProfitRatioMapper.insert(userProfitRatio);
-        }
-        int oldRatio = userProfitRatio.getRatio();
-        LambdaQueryWrapper<ProfitRatioConfig> config = Wrappers.lambdaQuery();
-        config.eq(ProfitRatioConfig::getType, type);
-        config.eq(ProfitRatioConfig::getStatus, 0);
-        config.orderByDesc(ProfitRatioConfig::getNum);
-        List<ProfitRatioConfig> list = profitRatioConfigMapper.selectList(config);
-        if(!CollectionUtils.isEmpty(list)){
-            for(ProfitRatioConfig profitRatioConfig : list){
-                int num = profitRatioConfig.getNum();
-                if(total >= num){
-                    ratio = profitRatioConfig.getRatio();
-                    break;
+        DatabaseContextHolder.transactional((Executor) () -> {
+            int i = baseMapper.insert(userInvite);
+            if (i < 1) {
+                throw new ResourceUnavailableException("绑定失败");
+            }
+            LambdaQueryWrapper<UserInvite> lwq = Wrappers.lambdaQuery();
+            lwq.eq(UserInvite::getUserId, userId);
+            lwq.eq(UserInvite::getType, type);
+            Integer total = baseMapper.selectCount(lwq);
+            int ratio = 0;
+            LambdaQueryWrapper<UserProfitRatio> lambdaQuery = Wrappers.lambdaQuery();
+            lambdaQuery.eq(UserProfitRatio::getUserId, userId);
+            lambdaQuery.eq(UserProfitRatio::getType, type);
+            UserProfitRatio userProfitRatio = userProfitRatioMapper.selectOne(lambdaQuery);
+            if (userProfitRatio == null) {
+                userProfitRatio = new UserProfitRatio();
+                userProfitRatio.setRatio(ratio);
+                userProfitRatio.setUserId(userId);
+                userProfitRatio.setType(type);
+                userProfitRatio.setCreateTime(LocalDateTime.now());
+                userProfitRatio.setUpdateTime(LocalDateTime.now());
+                userProfitRatio.setUpdater(1L);
+                userProfitRatioMapper.insert(userProfitRatio);
+            }
+            int oldRatio = userProfitRatio.getRatio();
+            LambdaQueryWrapper<ProfitRatioConfig> config = Wrappers.lambdaQuery();
+            config.eq(ProfitRatioConfig::getType, type);
+            config.eq(ProfitRatioConfig::getStatus, 0);
+            config.orderByDesc(ProfitRatioConfig::getNum);
+            List<ProfitRatioConfig> list = profitRatioConfigMapper.selectList(config);
+            if (!CollectionUtils.isEmpty(list)) {
+                for (ProfitRatioConfig profitRatioConfig : list) {
+                    int num = profitRatioConfig.getNum();
+                    if (total >= num) {
+                        ratio = profitRatioConfig.getRatio();
+                        break;
+                    }
                 }
             }
-        }
-        if(ratio != 0 && ratio != oldRatio){
-            userProfitRatio.setRatio(ratio);
-            userProfitRatio.setUpdateTime(LocalDateTime.now());
-            userProfitRatio.setUpdater(1L);
-            userProfitRatioMapper.update(userProfitRatio, null);
-        }
+            if (ratio != 0 && ratio != oldRatio) {
+                userProfitRatio.setRatio(ratio);
+                userProfitRatio.setUpdateTime(LocalDateTime.now());
+                userProfitRatio.setUpdater(1L);
+                userProfitRatioMapper.update(userProfitRatio, null);
+            }
+        });
     }
 
     @Override

+ 6 - 0
vehicle-server/src/main/resources/mapper/OmsOrderPayHistoryMapper.xml

@@ -12,4 +12,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         ${ew.getCustomSqlSegment}
     </select>
 
+    <insert id="batchInsertOmsOrderOperateHistory" keyColumn="id" keyProperty="list.id" parameterType="java.util.List" useGeneratedKeys="true">
+        insert into oms_order_pay_history (id,order_id,user_id,order_status,create_time) values
+        <foreach collection="list" item="item" index="index" separator="," >
+            (#{item.id},#{item.orderId},#{item.userId},#{item.orderStatus},#{item.createTime})
+        </foreach>
+    </insert>
 </mapper>