Explorar o código

fix: 消费服务
1.原始消费记录对账

luoyb hai 1 ano
pai
achega
a8ca677842

+ 9 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java

@@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -25,6 +24,7 @@ import org.dromara.common.message.kafka.constant.EventTypeConstants;
 import org.dromara.common.message.kafka.constant.KafkaTopicConstants;
 import org.dromara.common.message.kafka.enums.EventSenderEnum;
 import org.dromara.common.message.kafka.producer.KafkaCommonProducer;
+import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.common.domain.vo.yc.YcPushConsumeInfoVo;
 import org.dromara.server.consume.domain.bo.*;
@@ -315,6 +315,14 @@ public class BaseBusiness {
         }
     }
 
+    /**
+     * 查询指定日期的消费对账记录
+     * @param consumeDate 消费日期
+     * @return 消费记录
+     */
+    public List<ConsumptionBo> selectOriginalReconciliation(Date consumeDate){
+        return TenantHelper.ignore(() -> originalService.selectReconciliationData(consumeDate));
+    }
     /**
      * 将消费信息发送到kafka,教务消费此消息实现就餐打卡
      * @param consumeList 消费记录列表

+ 35 - 13
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/ConsumeBusiness.java

@@ -1,5 +1,7 @@
 package org.dromara.server.consume.business;
 
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -8,16 +10,21 @@ import org.dromara.backstage.api.domain.vo.RemoteMealTypeVo;
 import org.dromara.backstage.api.domain.vo.RemoteOperatorVo;
 import org.dromara.backstage.api.domain.vo.RemoteUserAccountVo;
 import org.dromara.common.core.config.AsyncConfig;
+import org.dromara.common.core.constant.ApiErrorTypeConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
+import org.dromara.common.core.enums.ResultCodeEnum;
+import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.domain.vo.PtBagVo;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
 import org.dromara.server.consume.domain.vo.XfTermVo;
 import org.springframework.stereotype.Service;
 
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * name: ConsumeBusiness
@@ -162,17 +169,32 @@ public class ConsumeBusiness {
         }
         return R.ok();
     }
-    // @Async
-    // protected void sendCloudConsume(ConsumptionBo bo){
-    //     KafkaMessage<ConsumptionBo> message = new KafkaMessage<>();
-    //     KafkaHeader header = message.getHeader();
-    //     header.setTimestamp(System.currentTimeMillis());
-    //     header.setEventId(CloudConsumeEventConstants.CONSUME_DETAIL);
-    //     header.setEventType(CloudConsumeEventConstants.SENDER);
-    //     message.setHeader(header);
-    //     message.setBody(bo);
-    //
-    //     // kafkaProducer.sendKafkaMessage("TO_CLOUD_EVENT", message);
-    //     log.info("请求云端消费:{}", JSONUtil.toJsonStr(bo));
-    // }
+    /**
+     * 原始消费对账,将有原始消费记录但没有消费明细的消费记录写入消费明细
+     * @return 对账结果
+     */
+    public R<ErrorInfo> originalReconciliation(String consumeDate){
+        //先查询没有写入消费明细的原始消费记录
+        List<ConsumptionBo> list = baseBusiness.selectOriginalReconciliation(DateUtil.parseDate(consumeDate));
+        if (CollectionUtil.isEmpty(list)) {
+            return R.ok(new ErrorInfo(ResultCodeEnum.DATA_NOT_FOUND.code(), ApiErrorTypeConstants.NOT_FOUND, "没有待入账的原始消费记录"));
+        }
+        List<String> doMessage = new ArrayList<>();
+        //循环写入原始消费记录
+        int total = list.size();
+        AtomicInteger success = new AtomicInteger();
+        AtomicInteger fail = new AtomicInteger();
+        //list.forEach(p->{
+        //    R<ErrorInfo> result = fullOrder(p, "", "");
+        //    if (R.isSuccess(result)) {
+        //        doMessage.add(MessageFormat.format("[入账成功]-[{0}]", JsonUtils.toJsonString(p)));
+        //        success.getAndIncrement();
+        //    } else {
+        //        doMessage.add(MessageFormat.format("[入账失败]-[{0}]-[{1}]", JsonUtils.toJsonString(p),JSONUtil.toJsonStr(result.getData())));
+        //        fail.getAndIncrement();
+        //    }
+        //});
+        //doMessage.forEach(System.out::println);
+        return R.ok(MessageFormat.format("[对账处理完成]-[待处理:{0}条,成功:{1}条,失败:{2}条]", total, success.get(), fail.get()));
+    }
 }

+ 8 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/controller/v1/ConsumeController.java

@@ -14,7 +14,6 @@ import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorInfo;
 import org.dromara.common.core.domain.model.ErrorResult;
-import org.dromara.common.core.enums.CreditTypeEnum;
 import org.dromara.common.core.enums.SystemUseTypeEnum;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
@@ -129,6 +128,14 @@ public class ConsumeController {
         return consumeBusiness.fullOrder(bo, "", "");
     }
 
+    /**
+     * 原始消费对账,将有原始消费记录但没有消费明细的消费记录写入消费明细
+     * @return 对账结果
+     */
+    @PostMapping("/consume/original/reconciliation/{consumeDate}")
+    public R<ErrorInfo> originalReconciliation(@PathVariable("consumeDate") String consumeDate){
+        return consumeBusiness.originalReconciliation(consumeDate);
+    }
     /**
      * 消费业务初步处理
      *

+ 6 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/mapper/ConsumeDetailOriginalMapper.java

@@ -1,9 +1,14 @@
 package org.dromara.server.consume.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.domain.XfConsumeDetailOriginal;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
 
+import java.util.Date;
+import java.util.List;
+
 /**
  * 原始消费记录Mapper接口
  *
@@ -12,4 +17,5 @@ import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
  */
 public interface ConsumeDetailOriginalMapper extends BaseMapperPlus<XfConsumeDetailOriginal, XfConsumeDetailOriginalVo> {
 
+    List<ConsumptionBo> selectReconciliationData(@Param("consumeDate") Date consumeDate);
 }

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

@@ -1,8 +1,10 @@
 package org.dromara.server.consume.service;
 
+import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.domain.bo.XfConsumeDetailOriginalBo;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -44,4 +46,11 @@ public interface IConsumeDetailOriginalService {
      */
     Boolean updateByBo(XfConsumeDetailOriginalBo bo);
 
+    /**
+     * 获取对账消费记录
+     *
+     * @param consumeDate 消费日期
+     * @return 消费记录
+     */
+    List<ConsumptionBo> selectReconciliationData(Date consumeDate);
 }

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

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
+import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.domain.XfConsumeDetailOriginal;
 import org.dromara.server.consume.domain.bo.XfConsumeDetailOriginalBo;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
@@ -12,6 +13,7 @@ import org.dromara.server.consume.mapper.ConsumeDetailOriginalMapper;
 import org.dromara.server.consume.service.IConsumeDetailOriginalService;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -113,4 +115,14 @@ public class ConsumeDetailOriginalServiceImpl implements IConsumeDetailOriginalS
         return baseMapper.updateById(update) > 0;
     }
 
+    /**
+     * 获取对账消费记录
+     *
+     * @param consumeDate 消费日期
+     * @return 消费记录
+     */
+    @Override
+    public List<ConsumptionBo> selectReconciliationData(Date consumeDate) {
+        return baseMapper.selectReconciliationData(consumeDate);
+    }
 }

+ 13 - 0
ruoyi-server/ruoyi-server-consume/src/main/resources/mapper/consume/ConsumeDetailOriginalMapper.xml

@@ -40,4 +40,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <result property="updateBy"    column="update_by"    />
             <result property="updateTime"    column="update_time"    />
     </resultMap>
+
+    <select id="selectReconciliationData" resultType="org.dromara.server.common.domain.consume.bo.ConsumptionBo">
+        SELECT term_no as termNo,user_numb as userNumb,card_no as cardNo,factory_id as factoryId
+             ,consume_date  as consumeDate,consume_money as consumeMoney,term_record_id as termRecordId
+        FROM t_xf_consumedetailoriginal txc
+        <where>
+            and original_id NOT IN (SELECT original_id FROM t_xf_consumedetail )
+            <if test="consumeDate != null">
+                AND txc.create_time>#{consumeDate}
+            </if>
+        </where>
+        ORDER BY consume_date ASC;
+    </select>
 </mapper>