Explorar el Código

fix(消费服务): 修复消费明细入库时主键冲突问题

luo.yibo@datuai.com hace 11 meses
padre
commit
e3215b8146
Se han modificado 14 ficheros con 160 adiciones y 55 borrados
  1. 12 0
      ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java
  2. 23 7
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfDiscountServiceImpl.java
  3. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfDiscountTermServiceImpl.java
  4. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfLimitedServiceImpl.java
  5. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfLimitedTermServiceImpl.java
  6. 6 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfQuotaServiceImpl.java
  7. 5 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfQuotaTermServiceImpl.java
  8. 42 24
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java
  9. 26 13
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/CheckBusiness.java
  10. 6 10
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/ConsumeBusiness.java
  11. 6 0
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/domain/convert/RemoteVoConvert.java
  12. 2 0
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/IConsumeDetailOriginalService.java
  13. 13 0
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/ConsumeDetailOriginalServiceImpl.java
  14. 1 1
      ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/XfConsumeDetailServiceImpl.java

+ 12 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java

@@ -152,4 +152,16 @@ public interface CacheNames {
     String PT_TERM_LIST = "pt_term_list";
     String PT_TERM_LIST = "pt_term_list";
 
 
     String PT_TERM_MAC_MAP = "pt_term_mac_map";
     String PT_TERM_MAC_MAP = "pt_term_mac_map";
+
+    String T_XF_LIMITEDTERM = "t_xf_limitedTerm";
+
+    String T_XF_LIMITED = "t_xf_limited";
+
+    String T_XF_QUOTATERM = "t_xf_quotaTerm";
+
+    String T_XF_QUOTA = "t_xf_quota";
+
+    String T_XF_DISCOUNTTERM = "t_xf_discountTerm";
+
+    String T_XF_DISCOUNT = "t_xf_discount";
 }
 }

+ 23 - 7
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfDiscountServiceImpl.java

@@ -1,6 +1,7 @@
 package org.dromara.backstage.consumption.service.impl;
 package org.dromara.backstage.consumption.service.impl;
 
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,11 +11,14 @@ import org.dromara.backstage.consumption.domain.bo.XfDiscountBo;
 import org.dromara.backstage.consumption.domain.vo.XfDiscountVo;
 import org.dromara.backstage.consumption.domain.vo.XfDiscountVo;
 import org.dromara.backstage.consumption.mapper.XfDiscountMapper;
 import org.dromara.backstage.consumption.mapper.XfDiscountMapper;
 import org.dromara.backstage.consumption.service.IXfDiscountService;
 import org.dromara.backstage.consumption.service.IXfDiscountService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -103,6 +107,7 @@ public class XfDiscountServiceImpl implements IXfDiscountService {
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_DISCOUNT, allEntries = true)
     public Boolean updateByBo(XfDiscountBo bo) {
     public Boolean updateByBo(XfDiscountBo bo) {
         XfDiscount update = MapstructUtils.convert(bo, XfDiscount.class);
         XfDiscount update = MapstructUtils.convert(bo, XfDiscount.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
@@ -130,6 +135,7 @@ public class XfDiscountServiceImpl implements IXfDiscountService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_DISCOUNT, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -144,15 +150,25 @@ public class XfDiscountServiceImpl implements IXfDiscountService {
      * @return 卡类折扣信息
      * @return 卡类折扣信息
      */
      */
     @Override
     @Override
+    // @Cacheable(cacheNames = CacheNames.T_XF_DISCOUNT, key = "#cardType-#mealType")
     public XfDiscountVo queryByCardType(Integer cardType, String mealType) {
     public XfDiscountVo queryByCardType(Integer cardType, String mealType) {
-        XfDiscountBo bo = new XfDiscountBo();
-        bo.setCardType(Long.valueOf(cardType));
-        bo.setMealType(mealType);
+        String key = String.format("%s-%s", cardType, mealType);
+        XfDiscountVo vo = RedisUtils.getCacheMapValue(CacheNames.T_XF_DISCOUNT, key);
+        if (ObjectUtil.isEmpty(vo)) {
+            XfDiscountBo bo = new XfDiscountBo();
+            bo.setCardType(Long.valueOf(cardType));
+            bo.setMealType(mealType);
 
 
-        List<XfDiscountVo> list = this.queryList(bo);
-        if (CollectionUtil.isNotEmpty(list)) {
-            return list.get(0);
+            List<XfDiscountVo> list = this.queryList(bo);
+            if (CollectionUtil.isNotEmpty(list)) {
+                vo = list.get(0);
+                RedisUtils.setCacheMapValue(CacheNames.T_XF_DISCOUNT, key, vo);
+                return list.get(0);
+            }
+            return null;
+        } else {
+            return vo;
         }
         }
-        return null;
+
     }
     }
 }
 }

+ 6 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfDiscountTermServiceImpl.java

@@ -11,10 +11,13 @@ import org.dromara.backstage.consumption.domain.vo.XfDiscountTermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.mapper.XfDiscountTermMapper;
 import org.dromara.backstage.consumption.mapper.XfDiscountTermMapper;
 import org.dromara.backstage.consumption.service.IXfDiscountTermService;
 import org.dromara.backstage.consumption.service.IXfDiscountTermService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -142,6 +145,7 @@ public class XfDiscountTermServiceImpl implements IXfDiscountTermService {
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_DISCOUNTTERM, allEntries = true)
     public Boolean updateByBo(XfDiscountTermBo bo) {
     public Boolean updateByBo(XfDiscountTermBo bo) {
         XfDiscountTerm update = MapstructUtils.convert(bo, XfDiscountTerm.class);
         XfDiscountTerm update = MapstructUtils.convert(bo, XfDiscountTerm.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
@@ -168,6 +172,7 @@ public class XfDiscountTermServiceImpl implements IXfDiscountTermService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_DISCOUNTTERM, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -182,6 +187,7 @@ public class XfDiscountTermServiceImpl implements IXfDiscountTermService {
      * @return 折扣设备信息
      * @return 折扣设备信息
      */
      */
     @Override
     @Override
+    @Cacheable(cacheNames = CacheNames.T_XF_DISCOUNTTERM, key = "#termId")
     public XfDiscountTermVo queryByTermId(Long termId) {
     public XfDiscountTermVo queryByTermId(Long termId) {
         XfDiscountTermBo bo = new XfDiscountTermBo();
         XfDiscountTermBo bo = new XfDiscountTermBo();
         bo.setTermId(termId);
         bo.setTermId(termId);

+ 6 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfLimitedServiceImpl.java

@@ -10,11 +10,14 @@ import org.dromara.backstage.consumption.domain.bo.XfLimitedBo;
 import org.dromara.backstage.consumption.domain.vo.XfLimitedVo;
 import org.dromara.backstage.consumption.domain.vo.XfLimitedVo;
 import org.dromara.backstage.consumption.mapper.XfLimitedMapper;
 import org.dromara.backstage.consumption.mapper.XfLimitedMapper;
 import org.dromara.backstage.consumption.service.IXfLimitedService;
 import org.dromara.backstage.consumption.service.IXfLimitedService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -102,6 +105,7 @@ public class XfLimitedServiceImpl implements IXfLimitedService {
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_LIMITED, allEntries = true)
     public Boolean updateByBo(XfLimitedBo bo) {
     public Boolean updateByBo(XfLimitedBo bo) {
         XfLimited update = MapstructUtils.convert(bo, XfLimited.class);
         XfLimited update = MapstructUtils.convert(bo, XfLimited.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
@@ -128,6 +132,7 @@ public class XfLimitedServiceImpl implements IXfLimitedService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_LIMITED, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -140,6 +145,7 @@ public class XfLimitedServiceImpl implements IXfLimitedService {
      * @return 卡类限次信息
      * @return 卡类限次信息
      */
      */
     @Override
     @Override
+    @Cacheable(cacheNames = CacheNames.T_XF_LIMITED , key = "#cardType")
     public XfLimitedVo queryByCardType(Integer cardType) {
     public XfLimitedVo queryByCardType(Integer cardType) {
         XfLimitedBo bo = new XfLimitedBo();
         XfLimitedBo bo = new XfLimitedBo();
         bo.setCardType(cardType.longValue());
         bo.setCardType(cardType.longValue());

+ 6 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfLimitedTermServiceImpl.java

@@ -11,10 +11,13 @@ import org.dromara.backstage.consumption.domain.vo.XfLimitedTermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.mapper.XfLimitedTermMapper;
 import org.dromara.backstage.consumption.mapper.XfLimitedTermMapper;
 import org.dromara.backstage.consumption.service.IXfLimitedTermService;
 import org.dromara.backstage.consumption.service.IXfLimitedTermService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -140,6 +143,7 @@ public class XfLimitedTermServiceImpl implements IXfLimitedTermService {
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_LIMITEDTERM, allEntries = true)
     public Boolean updateByBo(XfLimitedTermBo bo) {
     public Boolean updateByBo(XfLimitedTermBo bo) {
         XfLimitedTerm update = MapstructUtils.convert(bo, XfLimitedTerm.class);
         XfLimitedTerm update = MapstructUtils.convert(bo, XfLimitedTerm.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
@@ -166,6 +170,7 @@ public class XfLimitedTermServiceImpl implements IXfLimitedTermService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_LIMITEDTERM, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -181,6 +186,7 @@ public class XfLimitedTermServiceImpl implements IXfLimitedTermService {
      * @return 限次设备信息
      * @return 限次设备信息
      */
      */
     @Override
     @Override
+    @Cacheable(cacheNames = CacheNames.T_XF_LIMITEDTERM , key = "#termId")
     public XfLimitedTermVo queryByTermId(Long termId) {
     public XfLimitedTermVo queryByTermId(Long termId) {
         XfLimitedTermBo bo = new XfLimitedTermBo();
         XfLimitedTermBo bo = new XfLimitedTermBo();
         bo.setTermId(termId);
         bo.setTermId(termId);

+ 6 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfQuotaServiceImpl.java

@@ -10,11 +10,14 @@ import org.dromara.backstage.consumption.domain.bo.XfQuotaBo;
 import org.dromara.backstage.consumption.domain.vo.XfQuotaVo;
 import org.dromara.backstage.consumption.domain.vo.XfQuotaVo;
 import org.dromara.backstage.consumption.mapper.XfQuotaMapper;
 import org.dromara.backstage.consumption.mapper.XfQuotaMapper;
 import org.dromara.backstage.consumption.service.IXfQuotaService;
 import org.dromara.backstage.consumption.service.IXfQuotaService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -102,6 +105,7 @@ public class XfQuotaServiceImpl implements IXfQuotaService {
      * @return 是否修改成功
      * @return 是否修改成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_QUOTA, allEntries = true)
     public Boolean updateByBo(XfQuotaBo bo) {
     public Boolean updateByBo(XfQuotaBo bo) {
         XfQuota update = MapstructUtils.convert(bo, XfQuota.class);
         XfQuota update = MapstructUtils.convert(bo, XfQuota.class);
         validEntityBeforeSave(update);
         validEntityBeforeSave(update);
@@ -128,6 +132,7 @@ public class XfQuotaServiceImpl implements IXfQuotaService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_QUOTA, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -140,6 +145,7 @@ public class XfQuotaServiceImpl implements IXfQuotaService {
      * @return 卡类限额信息
      * @return 卡类限额信息
      */
      */
     @Override
     @Override
+    @Cacheable(cacheNames = CacheNames.T_XF_QUOTA, key = "#cardType")
     public XfQuotaVo queryByCardType(Integer cardType) {
     public XfQuotaVo queryByCardType(Integer cardType) {
         XfQuotaBo bo = new XfQuotaBo();
         XfQuotaBo bo = new XfQuotaBo();
         bo.setCardType(cardType.longValue());
         bo.setCardType(cardType.longValue());

+ 5 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfQuotaTermServiceImpl.java

@@ -11,10 +11,13 @@ import org.dromara.backstage.consumption.domain.vo.XfQuotatermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.mapper.XfQuotaTermMapper;
 import org.dromara.backstage.consumption.mapper.XfQuotaTermMapper;
 import org.dromara.backstage.consumption.service.IXfQuotaTermService;
 import org.dromara.backstage.consumption.service.IXfQuotaTermService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.Collection;
 import java.util.Collection;
@@ -166,6 +169,7 @@ public class XfQuotaTermServiceImpl implements IXfQuotaTermService {
      * @return 是否删除成功
      * @return 是否删除成功
      */
      */
     @Override
     @Override
+    @CacheEvict(cacheNames = CacheNames.T_XF_QUOTATERM, allEntries = true)
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
         if(isValid){
         if(isValid){
             //可以删除
             //可以删除
@@ -180,6 +184,7 @@ public class XfQuotaTermServiceImpl implements IXfQuotaTermService {
      * @return 限额设备信息
      * @return 限额设备信息
      */
      */
     @Override
     @Override
+    @Cacheable(cacheNames = CacheNames.T_XF_QUOTATERM, key = "#termId")
     public XfQuotatermVo queryByTermId(Long termId) {
     public XfQuotatermVo queryByTermId(Long termId) {
         XfQuotaTermBo bo = new XfQuotaTermBo();
         XfQuotaTermBo bo = new XfQuotaTermBo();
         bo.setTermId(termId);
         bo.setTermId(termId);

+ 42 - 24
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java

@@ -20,7 +20,6 @@ import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
 import org.dromara.common.core.domain.model.ErrorInfo;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
 import org.dromara.common.core.enums.CreditTypeEnum;
 import org.dromara.common.core.enums.CreditTypeEnum;
-import org.dromara.common.core.enums.ResultCodeEnum;
 import org.dromara.common.core.exception.consume.ConsumeException;
 import org.dromara.common.core.exception.consume.ConsumeException;
 import org.dromara.common.core.utils.RecordIdUtils;
 import org.dromara.common.core.utils.RecordIdUtils;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.core.utils.SpringUtils;
@@ -34,9 +33,11 @@ import org.dromara.server.base.service.yktOperation.SyncRemoteSendMessageRecordS
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.common.domain.vo.yc.YcPushConsumeInfoVo;
 import org.dromara.server.common.domain.vo.yc.YcPushConsumeInfoVo;
 import org.dromara.server.consume.domain.bo.*;
 import org.dromara.server.consume.domain.bo.*;
+import org.dromara.server.consume.domain.convert.RemoteVoConvert;
 import org.dromara.server.consume.domain.vo.*;
 import org.dromara.server.consume.domain.vo.*;
 import org.dromara.server.consume.service.*;
 import org.dromara.server.consume.service.*;
 import org.dromara.system.api.RemoteRegisterInfoService;
 import org.dromara.system.api.RemoteRegisterInfoService;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
@@ -92,40 +93,56 @@ public class BaseBusiness {
                                                    accountVo.getUserNo().intValue(), 0);
                                                    accountVo.getUserNo().intValue(), 0);
         }
         }
 
 
-        XfConsumeDetailOriginalBo originalBo = new XfConsumeDetailOriginalBo();
-        BeanUtil.copyProperties(consumeBo, originalBo);
-        if (ObjectUtil.isNotEmpty(originalBo.getRecordId()) && originalBo.getRecordId() == 0) {
-            originalBo.setRecordId(null);
-        }
-        originalBo.setOriginalId(originalId);
-        originalBo.setDataFlag(consumeBo.getRecordStatus());
-        originalBo.setAnalysisFlag(0L);
-        originalBo.setCardValue(consumeBo.getBalance());
-        originalBo.setConsumeBalance(consumeBo.getBalance());
-        originalBo.setDigitalSign(consumeBo.getDigitalSign());
-        originalBo.setUserId(accountVo.getUserId());
-        originalBo.setDeptId(accountVo.getDeptId());
+        XfConsumeDetailOriginalBo originalBo = getXfConsumeDetailOriginalBo(consumeBo, accountVo, originalId);
+
         XfConsumeDetailOriginalVo vo = originalService.queryById(originalId);
         XfConsumeDetailOriginalVo vo = originalService.queryById(originalId);
         if (ObjUtil.isNotEmpty(vo)) {
         if (ObjUtil.isNotEmpty(vo)) {
-            // 如果原始消费记录表中已有该笔消费,则检查是否入账
-            XfConsumeDetailVo detailVo = consumeDetailService.queryById(originalId);
-            if (ObjUtil.isNotEmpty(detailVo)) {
-                // 该笔消费记录已入账
-                return R.fail(new ErrorInfo(ResultCodeEnum.DATA_ALREADY_EXISTED.code(), "该笔交易已入账", "该笔消费记录已入账,不能重复入账"));
-            }
-            // 未入账,直接返回入账数据
-            BeanUtil.copyProperties(vo, originalVo);
+            RemoteVoConvert.INSTANCE.copyXfConsumeDetailOriginalVo(originalVo, vo);
             return R.ok();
             return R.ok();
         }
         }
         // 原始记录表不存在此消费记录,直接插入
         // 原始记录表不存在此消费记录,直接插入
         vo = originalService.insertByBo(originalBo);
         vo = originalService.insertByBo(originalBo);
         if (ObjUtil.isNotEmpty(vo)) {
         if (ObjUtil.isNotEmpty(vo)) {
-            BeanUtil.copyProperties(vo, originalVo);
+            RemoteVoConvert.INSTANCE.copyXfConsumeDetailOriginalVo(originalVo, vo);
             return R.ok();
             return R.ok();
         }
         }
+
         return R.fail();
         return R.fail();
     }
     }
 
 
+    @NotNull
+    private XfConsumeDetailOriginalBo getXfConsumeDetailOriginalBo(ConsumptionBo consumeBo, RemoteUserAccountVo accountVo, String originalId) {
+        XfConsumeDetailOriginalBo originalBo = new XfConsumeDetailOriginalBo();
+        originalBo.setOriginalId(originalId);
+        originalBo.setUserId(accountVo.getUserId());
+        originalBo.setUserNumb(accountVo.getUserNumb());
+        originalBo.setRealName(accountVo.getRealName());
+        originalBo.setDeptId(accountVo.getDeptId());
+        originalBo.setDeptName(accountVo.getDeptName());
+        originalBo.setConsumeDate(consumeBo.getConsumeDate());
+        originalBo.setConsumeMoney(consumeBo.getConsumeMoney());
+        originalBo.setCardNo(consumeBo.getCardNo());
+        originalBo.setFactoryId(consumeBo.getFactoryId());
+        originalBo.setCardValue(consumeBo.getBalance());
+        originalBo.setConsumeBalance(consumeBo.getBalance());
+        originalBo.setTermNo(consumeBo.getTermNo().intValue());
+        // originalBo.setTermName(consumeBo.ter);
+        originalBo.setTermRecordId(consumeBo.getTermRecordId());
+        originalBo.setAnalysisFlag(0L);
+        originalBo.setDataFlag(consumeBo.getRecordStatus());
+        originalBo.setStatusFlag(consumeBo.getStatusFlag());
+        originalBo.setDigitalSign(consumeBo.getDigitalSign());
+        originalBo.setWaterValue(new BigDecimal("0"));
+        originalBo.setWaterHistoryValue(new BigDecimal("0"));
+        originalBo.setWaterDaySum(new BigDecimal("0"));
+        originalBo.setWaterErrValue(new BigDecimal("0"));
+        originalBo.setWaterErrMoney(new BigDecimal("0"));
+        originalBo.setOperatorId(0L);
+        originalBo.setTenantId(defaultConfig.getTenantId());
+
+        return originalBo;
+    }
+
     /**
     /**
      * 消费记录入库
      * 消费记录入库
      * 1.写入消费明细表
      * 1.写入消费明细表
@@ -295,6 +312,7 @@ public class BaseBusiness {
     public Boolean updateConsumeStatusById(Long messageId) {
     public Boolean updateConsumeStatusById(Long messageId) {
         return syncRemoteSendMessageRecordService.updateConsumeStatusById(messageId);
         return syncRemoteSendMessageRecordService.updateConsumeStatusById(messageId);
     }
     }
+
     /**
     /**
      * 创建一条消费明细记录
      * 创建一条消费明细记录
      *
      *
@@ -309,7 +327,7 @@ public class BaseBusiness {
     private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, RemoteUserAccountVo userAccountVo,
     private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, RemoteUserAccountVo userAccountVo,
                                                   RemoteCardVo cardVo, PtBagVo bagVo, XfTermVo termVo,
                                                   RemoteCardVo cardVo, PtBagVo bagVo, XfTermVo termVo,
                                                   RemoteMealTypeVo mealTypeVo, String remark) {
                                                   RemoteMealTypeVo mealTypeVo, String remark) {
-        String recordId = RecordIdUtils.getRecordId(new Date(), Short.parseShort(bo.getTermNo().toString()),
+        String recordId = RecordIdUtils.getRecordId(bo.getConsumeDate(), Short.parseShort(bo.getTermNo().toString()),
                                                     bo.getTermRecordId().intValue(),
                                                     bo.getTermRecordId().intValue(),
                                                     userAccountVo.getUserNo().intValue(),
                                                     userAccountVo.getUserNo().intValue(),
                                                     Integer.parseInt(bagVo.getBagCode()));
                                                     Integer.parseInt(bagVo.getBagCode()));

+ 26 - 13
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/CheckBusiness.java

@@ -238,8 +238,6 @@ public class CheckBusiness {
     public R<ErrorInfo> checkConsume(ConsumptionBo bo, RemoteUserAccountVo userAccountVo, RemoteCardVo userCardVo, XfTermVo useTermVo) {
     public R<ErrorInfo> checkConsume(ConsumptionBo bo, RemoteUserAccountVo userAccountVo, RemoteCardVo userCardVo, XfTermVo useTermVo) {
         ErrorInfo errorInfo;
         ErrorInfo errorInfo;
         R<ErrorInfo> result;
         R<ErrorInfo> result;
-        // 如果折扣验证,消费金额会更新成折扣金额,所以先保存
-        BigDecimal consumeMoney = bo.getConsumeMoney();
         // 1.消费账户状态验证,验证账户是否已开户、是否冻结、状态是否正常、是否过有效期
         // 1.消费账户状态验证,验证账户是否已开户、是否冻结、状态是否正常、是否过有效期
         if ("Y".equals(userAccountVo.getFreezeStatus())) {
         if ("Y".equals(userAccountVo.getFreezeStatus())) {
             errorInfo = new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "账户已被冻结",
             errorInfo = new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "账户已被冻结",
@@ -263,24 +261,28 @@ public class CheckBusiness {
         }
         }
 
 
         // 2.餐类验证
         // 2.餐类验证
+        long startTime=System.currentTimeMillis();
         RemoteMealTypeVo mealType = remoteMealTypeService.queryMealTypeVoByTime(bo.getConsumeDate());
         RemoteMealTypeVo mealType = remoteMealTypeService.queryMealTypeVoByTime(bo.getConsumeDate());
         if (ObjectUtil.isEmpty(mealType)) {
         if (ObjectUtil.isEmpty(mealType)) {
             return R.fail(new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "不在交易时段", "不在交易时段"));
             return R.fail(new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "不在交易时段", "不在交易时段"));
         }
         }
-        // 3.根据消费机的消费模式验证余额,如果余额不足则返回
-        result = checkOrigDeductionBag(bo, userAccountVo, useTermVo);
-        if (R.isError(result)) {
-            return result;
-        }
 
 
-        // 4.设备限制验证,只有消费机上传时会会进行验证,在手工补扣、错扣补款时不进行验证
+        // 3.设备限制验证,只有消费机上传时会会进行验证,在手工补扣、错扣补款时不进行验证
+        startTime=System.currentTimeMillis();
         if (bo.getStatusFlag() == 1 || bo.getStatusFlag() == 4) {
         if (bo.getStatusFlag() == 1 || bo.getStatusFlag() == 4) {
             result = checkTermLimitDeal(bo, useTermVo, userCardVo, mealType);
             result = checkTermLimitDeal(bo, useTermVo, userCardVo, mealType);
             if (R.isError(result)) {
             if (R.isError(result)) {
                 return R.fail(new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "消费限制判断存在问题", JSONUtil.toJsonStr(result.getData())));
                 return R.fail(new ErrorInfo(400, ApiErrorTypeConstants.NOT_FOUND, "消费限制判断存在问题", JSONUtil.toJsonStr(result.getData())));
             }
             }
         }
         }
-
+        log.info("折扣验证耗时:{}毫秒", System.currentTimeMillis()-startTime);
+        // 4.根据消费机的消费模式验证余额,如果余额不足则返回
+        startTime=System.currentTimeMillis();
+        result = checkOrigDeductionBag(bo, userAccountVo, useTermVo);
+        if (R.isError(result)) {
+            return result;
+        }
+        log.info("卡余验证耗时:{}毫秒", System.currentTimeMillis()-startTime);
         return R.ok();
         return R.ok();
     }
     }
 
 
@@ -732,9 +734,9 @@ public class CheckBusiness {
         // 计算扣费钱包的总金额
         // 计算扣费钱包的总金额
         for (String bagCode : bagCodes) {
         for (String bagCode : bagCodes) {
             PtBagVo bagVo = bagService.queryByUserBagCode(userId, bagCode);
             PtBagVo bagVo = bagService.queryByUserBagCode(userId, bagCode);
-            if (ObjectUtil.isNotEmpty(bagVo)) {
+            // if (ObjectUtil.isNotEmpty(bagVo)) {
                 totalBalance = totalBalance.add(bagVo.getBalance());
                 totalBalance = totalBalance.add(bagVo.getBalance());
-            }
+            // }
         }
         }
         // 如果扣费钱包总余额<消费金额,则不允许消费
         // 如果扣费钱包总余额<消费金额,则不允许消费
         if (consumeMoney.compareTo(totalBalance) > 0) {
         if (consumeMoney.compareTo(totalBalance) > 0) {
@@ -788,8 +790,8 @@ public class CheckBusiness {
 
 
         // 设备消费间隔验证
         // 设备消费间隔验证
         if ((currentLocalDt.toEpochSecond(ZoneOffset.of("+8"))
         if ((currentLocalDt.toEpochSecond(ZoneOffset.of("+8"))
-                 - lastPayLocalDt.toEpochSecond(ZoneOffset.of("+8"))) / 60 < termSwipeInterval && termSwipeInterval > 0) {// 消费间隔
-            return R.fail(new ErrorInfo(400, TradeStatusEnum.TimeInterval.toString(), "超过设备单次限额", TradeStatusEnum.TimeInterval.getName()));
+                 - lastPayLocalDt.toEpochSecond(ZoneOffset.of("+8"))) / 60 < termSwipeInterval && termSwipeInterval > 0) {
+            return R.fail(new ErrorInfo(400, TradeStatusEnum.TimeInterval.toString(), "消费间隔过短", TradeStatusEnum.TimeInterval.getName()));
         }
         }
         // 设备单次限额验证
         // 设备单次限额验证
         if (termSingleMoney.compareTo(consumeValue) < 0 && termSingleMoney.compareTo(BigDecimal.ZERO) > 0) {// 限制金额
         if (termSingleMoney.compareTo(consumeValue) < 0 && termSingleMoney.compareTo(BigDecimal.ZERO) > 0) {// 限制金额
@@ -849,15 +851,18 @@ public class CheckBusiness {
      * @return 检查结果
      * @return 检查结果
      */
      */
     public R<ErrorInfo> checkCardLimitDeal(ConsumptionBo bo, XfTermVo termVo, RemoteCardVo userCardVo, RemoteMealTypeVo mealTypeVo) {
     public R<ErrorInfo> checkCardLimitDeal(ConsumptionBo bo, XfTermVo termVo, RemoteCardVo userCardVo, RemoteMealTypeVo mealTypeVo) {
+        long startTime=System.currentTimeMillis();
         LocalDateTime currentLocalDt = LocalDateTime.now();
         LocalDateTime currentLocalDt = LocalDateTime.now();
         Long cardNo = userCardVo.getCardNo();
         Long cardNo = userCardVo.getCardNo();
         Long mealTypeId = Long.valueOf(mealTypeVo.getTypeId());
         Long mealTypeId = Long.valueOf(mealTypeVo.getTypeId());
         Date lastPayDate = userCardVo.getLastPay();
         Date lastPayDate = userCardVo.getLastPay();
         // 获取卡片的限制信息
         // 获取卡片的限制信息
         XfCardLimitedVo cardLimitedVo = cardLimitedService.queryByCardNo(cardNo);
         XfCardLimitedVo cardLimitedVo = cardLimitedService.queryByCardNo(cardNo);
+        log.info("卡类限额、限次与折扣初始化耗时1:{}", System.currentTimeMillis()-startTime);
         if (ObjectUtil.isEmpty(cardLimitedVo)) {
         if (ObjectUtil.isEmpty(cardLimitedVo)) {
             cardLimitedVo = initXfCardLimited(cardNo, mealTypeVo.getMealId(), lastPayDate);
             cardLimitedVo = initXfCardLimited(cardNo, mealTypeVo.getMealId(), lastPayDate);
         }
         }
+        log.info("卡类限额、限次与折扣初始化耗时:{}", System.currentTimeMillis()-startTime);
         // 最后交易时间
         // 最后交易时间
         LocalDateTime lastPayLimitLocalDt = LocalDateTime.ofInstant(cardLimitedVo.getLastPay().toInstant(), ZoneOffset.of("+8"));
         LocalDateTime lastPayLimitLocalDt = LocalDateTime.ofInstant(cardLimitedVo.getLastPay().toInstant(), ZoneOffset.of("+8"));
         // 最后交易餐类
         // 最后交易餐类
@@ -870,21 +875,29 @@ public class CheckBusiness {
         if (!Objects.equals(lastPayLimitMealType, mealTypeId)) {
         if (!Objects.equals(lastPayLimitMealType, mealTypeId)) {
             cardLimitedVo = cardLimitedService.resetMealCardLimitedData(cardNo, mealTypeId.toString());
             cardLimitedVo = cardLimitedService.resetMealCardLimitedData(cardNo, mealTypeId.toString());
         }
         }
+        log.info("卡类限额、限次与折扣初始化耗时2:{}", System.currentTimeMillis()-startTime);
+
         // 卡类折扣检查
         // 卡类折扣检查
+        startTime=System.currentTimeMillis();
         R<ErrorInfo> result = checkCardDisCount(termVo, userCardVo, cardLimitedVo, mealTypeVo, bo);
         R<ErrorInfo> result = checkCardDisCount(termVo, userCardVo, cardLimitedVo, mealTypeVo, bo);
         if (R.isError(result)) {
         if (R.isError(result)) {
             return R.fail(result.getData());
             return R.fail(result.getData());
         }
         }
+        log.info("卡类折扣检查耗时:{}", System.currentTimeMillis()-startTime);
         // 卡类限额检查
         // 卡类限额检查
+        startTime=System.currentTimeMillis();
         result = checkCardQuota(termVo, userCardVo, cardLimitedVo, mealTypeVo, bo.getConsumeMoney());
         result = checkCardQuota(termVo, userCardVo, cardLimitedVo, mealTypeVo, bo.getConsumeMoney());
         if (R.isError(result)) {
         if (R.isError(result)) {
             return R.fail(result.getData());
             return R.fail(result.getData());
         }
         }
+        log.info("卡类限额检查耗时:{}", System.currentTimeMillis()-startTime);
         // 卡类限次检
         // 卡类限次检
+        startTime=System.currentTimeMillis();
         result = checkCardLimited(termVo, userCardVo, cardLimitedVo, mealTypeVo);
         result = checkCardLimited(termVo, userCardVo, cardLimitedVo, mealTypeVo);
         if (R.isError(result)) {
         if (R.isError(result)) {
             return R.fail(result.getData());
             return R.fail(result.getData());
         }
         }
+        log.info("卡类限次检查耗时:{}", System.currentTimeMillis()-startTime);
         return R.ok();
         return R.ok();
     }
     }
 
 

+ 6 - 10
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/ConsumeBusiness.java

@@ -62,20 +62,13 @@ public class ConsumeBusiness {
      * @return 请求结果
      * @return 请求结果
      */
      */
     public R<ErrorInfo> createOrder(ConsumptionBo bo, String mac, String xfPwd) {
     public R<ErrorInfo> createOrder(ConsumptionBo bo, String mac, String xfPwd) {
+        long startTime;
         log.warn("[请求交易]-[开始参数验证]-[{}]", JSONUtil.toJsonStr(bo));
         log.warn("[请求交易]-[开始参数验证]-[{}]", JSONUtil.toJsonStr(bo));
         R<ErrorInfo> result = checkBusiness.checkParam(bo);
         R<ErrorInfo> result = checkBusiness.checkParam(bo);
         if (R.isError(result)) {
         if (R.isError(result)) {
             log.error("[请求交易]-[参数验证失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             log.error("[请求交易]-[参数验证失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             return result;
             return result;
         }
         }
-
-        //log.info("[请求交易]-[mac校验]-[{}]", JSONUtil.toJsonStr(bo));
-        //result = checkBusiness.checkMac(bo, mac);
-        //if (R.isError(result)) {
-        //    log.error("[请求交易]-[mac校验失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
-        //    return result;
-        //}
-
         log.warn("[请求交易]-[用户信息验证]-[{}]", JSONUtil.toJsonStr(bo));
         log.warn("[请求交易]-[用户信息验证]-[{}]", JSONUtil.toJsonStr(bo));
         RemoteUserAccountVo userAccountVo = new RemoteUserAccountVo();
         RemoteUserAccountVo userAccountVo = new RemoteUserAccountVo();
         RemoteCardVo userCardVo = new RemoteCardVo();
         RemoteCardVo userCardVo = new RemoteCardVo();
@@ -94,23 +87,26 @@ public class ConsumeBusiness {
         }
         }
 
 
         log.warn("[请求交易]-[交易流程验证]-[{}]", JSONUtil.toJsonStr(bo));
         log.warn("[请求交易]-[交易流程验证]-[{}]", JSONUtil.toJsonStr(bo));
+        startTime = System.currentTimeMillis();
         result = checkBusiness.checkConsume(bo, userAccountVo, userCardVo, termVo);
         result = checkBusiness.checkConsume(bo, userAccountVo, userCardVo, termVo);
         if (R.isError(result)) {
         if (R.isError(result)) {
             log.error("[请求交易]-[交易验证失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             log.error("[请求交易]-[交易验证失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             return result;
             return result;
         }
         }
+        log.warn("[请求交易]-[交易流程验证]-[耗时: {} 毫秒]",System.currentTimeMillis()-startTime);
 
 
         log.warn("[请求交易]-[生成原始消费记录]-[{}]", JSONUtil.toJsonStr(bo));
         log.warn("[请求交易]-[生成原始消费记录]-[{}]", JSONUtil.toJsonStr(bo));
+        startTime = System.currentTimeMillis();
         XfConsumeDetailOriginalVo originalVo = new XfConsumeDetailOriginalVo();
         XfConsumeDetailOriginalVo originalVo = new XfConsumeDetailOriginalVo();
         result = baseBusiness.createOriginalOrder(bo, userAccountVo, originalVo);
         result = baseBusiness.createOriginalOrder(bo, userAccountVo, originalVo);
         if (R.isError(result)) {
         if (R.isError(result)) {
             log.error("[请求交易]-[消费原始记录表入库失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             log.error("[请求交易]-[消费原始记录表入库失败]-[{}]", JSONUtil.toJsonStr(result.getData()));
             return result;
             return result;
         }
         }
-
+        log.warn("[请求交易]-[生成原始消费记录完成]-[耗时: {} 毫秒]",System.currentTimeMillis()-startTime);
         bo.setRecordId(originalVo.getRecordId());
         bo.setRecordId(originalVo.getRecordId());
         bo.setStatusFlag(originalVo.getStatusFlag().intValue());
         bo.setStatusFlag(originalVo.getStatusFlag().intValue());
-        bo.setDeptName(userAccountVo.getDeptName());
+
         return R.ok();
         return R.ok();
     }
     }
 
 

+ 6 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/domain/convert/RemoteVoConvert.java

@@ -3,6 +3,8 @@ package org.dromara.server.consume.domain.convert;
 import org.dromara.backstage.api.domain.vo.RemoteCardVo;
 import org.dromara.backstage.api.domain.vo.RemoteCardVo;
 import org.dromara.backstage.api.domain.vo.RemoteUserAccountVo;
 import org.dromara.backstage.api.domain.vo.RemoteUserAccountVo;
 import org.dromara.backstage.api.domain.vo.RemoteXfTermVo;
 import org.dromara.backstage.api.domain.vo.RemoteXfTermVo;
+import org.dromara.server.consume.domain.bo.XfConsumeDetailOriginalBo;
+import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
 import org.dromara.server.consume.domain.vo.XfTermVo;
 import org.dromara.server.consume.domain.vo.XfTermVo;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapper;
 import org.mapstruct.MappingConstants;
 import org.mapstruct.MappingConstants;
@@ -28,4 +30,8 @@ public interface RemoteVoConvert {
     void copyRemoteCardVo(@MappingTarget RemoteCardVo target, RemoteCardVo source);
     void copyRemoteCardVo(@MappingTarget RemoteCardVo target, RemoteCardVo source);
 
 
     void copyRemoteTermVo(@MappingTarget XfTermVo target, RemoteXfTermVo source);
     void copyRemoteTermVo(@MappingTarget XfTermVo target, RemoteXfTermVo source);
+
+    void copyXfConsumeDetailOriginalVo(@MappingTarget XfConsumeDetailOriginalVo target, XfConsumeDetailOriginalVo source);
+
+    void toXfConsumeDetailOriginalVo(@MappingTarget XfConsumeDetailOriginalVo target, XfConsumeDetailOriginalBo source);
 }
 }

+ 2 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/IConsumeDetailOriginalService.java

@@ -39,6 +39,8 @@ public interface IConsumeDetailOriginalService {
      */
      */
     XfConsumeDetailOriginalVo insertByBo(XfConsumeDetailOriginalBo bo);
     XfConsumeDetailOriginalVo insertByBo(XfConsumeDetailOriginalBo bo);
 
 
+    Boolean insertByBoBool(XfConsumeDetailOriginalBo bo);
+
     /**
     /**
      * 修改原始消费记录
      * 修改原始消费记录
      *
      *

+ 13 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/ConsumeDetailOriginalServiceImpl.java

@@ -188,4 +188,17 @@ public class ConsumeDetailOriginalServiceImpl implements IConsumeDetailOriginalS
                                           .eq(XfConsumeDetailOriginal::getTermRecordId, termRecordId)
                                           .eq(XfConsumeDetailOriginal::getTermRecordId, termRecordId)
                                           .eq(XfConsumeDetailOriginal::getConsumeDate, consumeDate));
                                           .eq(XfConsumeDetailOriginal::getConsumeDate, consumeDate));
     }
     }
+
+    @Override
+    public Boolean insertByBoBool(XfConsumeDetailOriginalBo bo) {
+        XfConsumeDetailOriginal add = MapstructUtils.convert(bo, XfConsumeDetailOriginal.class);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            if (add != null) {
+                bo.setOriginalId(add.getOriginalId());
+                bo.setRecordId(add.getRecordId());
+            }
+        }
+        return flag;
+    }
 }
 }

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/XfConsumeDetailServiceImpl.java

@@ -107,7 +107,7 @@ public class XfConsumeDetailServiceImpl implements IXfConsumeDetailService {
     public Boolean insertByBo(XfConsumeDetailBo bo) {
     public Boolean insertByBo(XfConsumeDetailBo bo) {
         XfConsumeDetail add = MapstructUtils.convert(bo, XfConsumeDetail.class);
         XfConsumeDetail add = MapstructUtils.convert(bo, XfConsumeDetail.class);
         validEntityBeforeSave(add);
         validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
+        boolean flag = baseMapper.insertOrUpdate(add);
         if (flag) {
         if (flag) {
             if (add != null) {
             if (add != null) {
                 bo.setConsumeId(add.getConsumeId());
                 bo.setConsumeId(add.getConsumeId());