Преглед на файлове

feature: 卡务中心->错扣补款业务

luoyb преди 1 година
родител
ревизия
b67879cf36
променени са 15 файла, в които са добавени 380 реда и са изтрити 188 реда
  1. 3 1
      ruoyi-common/ruoyi-common-core/src/main/resources/i18n/messages_zh_CN.properties
  2. 0 0
      ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/IXfTermTotalService.xml
  3. 88 11
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/errfill/ErrFillBusiness.java
  4. 7 7
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfTermtotalController.java
  5. 5 4
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfTermTotal.java
  6. 8 6
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfTermTotalBo.java
  7. 3 3
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfTermTotalVo.java
  8. 2 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/mapper/XfTermTotalMapper.java
  9. 21 6
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfTermTotalService.java
  10. 9 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfUserTotalService.java
  11. 0 1
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfConsumeDetailServiceImpl.java
  12. 203 0
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfTermTotalServiceImpl.java
  13. 0 143
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfTermtotalServiceImpl.java
  14. 29 2
      ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfUserTotalServiceImpl.java
  15. 2 2
      ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfTermTotalMapper.xml

+ 3 - 1
ruoyi-common/ruoyi-common-core/src/main/resources/i18n/messages_zh_CN.properties

@@ -71,5 +71,7 @@ payments.keepAccounts.create = \u539F\u59CB\u6536\u652F\u8BB0\u5F55\u5165\u8D26\
 consumption.userAccount.not.exists = \u4E0D\u5B58\u5728\u6B64\u6D88\u8D39\u8D26\u6237!{0}
 consumption.userCard.not.exists = \u4E0D\u5B58\u5728\u6B64\u5361\u7247\u4FE1\u606F!{0}
 consumption.userBag.not.exists = \u4E0D\u5B58\u5728\u6B64\u94B1\u5305\u4FE1\u606F!{0}
-consumption.consumeDetail.failure = {0}->\u5199\u6D88\u8D39\u660E\u7EC6\u8868\u5931\u8D25!
 consumption.xfTerm.not.exists = \u4E0D\u5B58\u7F16\u53F7\u4E3A[{0}]\u7684\u8BBE\u5907\u4FE1\u606F!
+consumption.consumeDetail.failure = {0}->\u5199\u6D88\u8D39\u660E\u7EC6\u8868\u5931\u8D25!
+consumption.userTotal.failure = {0}->\u66F4\u65B0\u4EBA\u5458\u65E5\u7EDF\u8BA1\u8868\u5931\u8D25!
+consumption.termTotal.failure = {0}->\u66F4\u65B0\u8BBE\u5907\u65E5\u7EDF\u8BA1\u8868\u5931\u8D25!

+ 0 - 0
ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/XfConsumeDetailOriginalMapper.xml → ruoyi-example/ruoyi-demo/src/main/resources/mapper/demo/IXfTermTotalService.xml


+ 88 - 11
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/errfill/ErrFillBusiness.java

@@ -1,25 +1,32 @@
 package org.dromara.backstage.business.errfill;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.basics.domain.vo.PtMealTypeVo;
 import org.dromara.backstage.basics.service.IPtMealtypeService;
 import org.dromara.backstage.cardCenter.domain.vo.PtCardVo;
 import org.dromara.backstage.cardCenter.service.IPtCardService;
-import org.dromara.backstage.consumption.domain.XfConsumeDetail;
 import org.dromara.backstage.consumption.domain.bo.ConsumptionBo;
 import org.dromara.backstage.consumption.domain.bo.XfConsumeDetailBo;
+import org.dromara.backstage.consumption.domain.bo.XfTermTotalBo;
+import org.dromara.backstage.consumption.domain.bo.XfUserTotalBo;
 import org.dromara.backstage.consumption.domain.vo.XfConsumeDetailVo;
+import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
+import org.dromara.backstage.consumption.domain.vo.XfUserTotalVo;
 import org.dromara.backstage.consumption.service.IXfConsumeDetailService;
 import org.dromara.backstage.consumption.service.IXfTermService;
+import org.dromara.backstage.consumption.service.IXfTermTotalService;
+import org.dromara.backstage.consumption.service.IXfUserTotalService;
 import org.dromara.backstage.payment.domain.bo.PtBagBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
+import org.dromara.common.core.enums.SystemUseTypeEnum;
 import org.dromara.common.core.exception.consume.BagException;
 import org.dromara.common.core.exception.consume.ConsumeException;
 import org.dromara.common.core.utils.RecordIdUtils;
@@ -55,7 +62,10 @@ public class ErrFillBusiness {
     private final IPtBagService bagService;
     private final IPtMealtypeService mealTypeService;
     private final IXfConsumeDetailService consumeDetailService;
+    private final IXfUserTotalService userTotalService;
+    private final IXfTermTotalService termTotalService;
 
+    @Transactional(rollbackFor = ConsumeException.class)
     public PtBagVo createErrFillRecord(ConsumptionBo bo) {
         String message;
         //1.处理入账需要的其它信息
@@ -68,18 +78,29 @@ public class ErrFillBusiness {
         PtMealTypeVo mealTypeVo = list.get(4) == null ? new PtMealTypeVo() : (PtMealTypeVo) list.get(4);
 
         log.info("[验证通过,开始写入消费明细数据]-[{}]", JSONUtil.toJsonStr(bo));
-        XfConsumeDetailVo consumeDetailVo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo);
+        String remark = MessageFormat.format("[错误补款]-[{0}]", JSONUtil.toJsonStr(bo));
+        XfConsumeDetailVo consumeDetailVo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo,remark);
         if (consumeDetailVo == null) {
-            message = MessageFormat.format("[错扣补款写消费明细表失败]-[{0}]", JSONUtil.toJsonStr(bo));
+            message = MessageFormat.format("[错扣补款]->[写消费明细表失败]-[{0}]", JSONUtil.toJsonStr(bo));
             log.error(message);
             throw new ConsumeException("consumption.consumeDetail.failure", "错扣补款");
         }
-        // TODO 2024-09-04 23:36:42 luoyibo 写个人日统计表
+
         log.info("[消费明细处理完毕,开始更新人员日统计表]-[{}]", JSONUtil.toJsonStr(bo));
+        XfUserTotalVo userTotalVo = createOrUpdateUserTotal(bo, userAccountVo, cardVo);
+        if (userTotalVo == null) {
+            message = MessageFormat.format("[错扣补款]->[更新人员日统计表失败]-[{0}]", JSONUtil.toJsonStr(bo));
+            log.error(message);
+            throw new ConsumeException("consumption.userTotal.failure", "错扣补款");
+        }
 
-        // TODO 2024-09-04 23:37:35 luoyibo 更新设备的按日统计
         log.info("[人员日统计表更新完毕,开始更新设备日统计表]-[{}]", JSONUtil.toJsonStr(bo));
-
+        XfTermTotalVo termTotalVo = createOrUpdateTermTotal(bo, termVo, mealTypeVo);
+        if (termTotalVo == null) {
+            message = MessageFormat.format("[错扣补款]->[更新设备日统计表失败]-[{0}]", JSONUtil.toJsonStr(bo));
+            log.error(message);
+            throw new ConsumeException("consumption.termTotal.failure", "错扣补款");
+        }
         log.info("[设备日统计表更新完毕,开始更新钱包余额]-[{}]", JSONUtil.toJsonStr(bo));
         PtBagVo resultVo = updateBalance(bo, bagVo);
         if (resultVo == null) {
@@ -92,7 +113,17 @@ public class ErrFillBusiness {
         return resultVo;
     }
 
-    private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, PtUserAccountVo userAccountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtMealTypeVo mealTypeVo) {
+    /**
+     * 创建一条消费明细记录
+     * @param bo 消费业务对象
+     * @param userAccountVo 账户对象视图
+     * @param cardVo 账户卡片视图
+     * @param bagVo 账户钱包视图
+     * @param termVo 消费设备视图
+     * @param mealTypeVo 消费餐类视图
+     * @return 消费明细视图
+     */
+    private XfConsumeDetailVo createConsumeRecord(ConsumptionBo bo, PtUserAccountVo userAccountVo, PtCardVo cardVo, PtBagVo bagVo, XfTermVo termVo, PtMealTypeVo mealTypeVo,String remark) {
         String recordId = getRecordKeyId(bo, userAccountVo, bagVo);
         XfConsumeDetailBo consumeDetailBo = new XfConsumeDetailBo();
         BeanUtil.copyProperties(bo, consumeDetailBo);
@@ -117,24 +148,70 @@ public class ErrFillBusiness {
         consumeDetailBo.setMealName(mealTypeVo.getMealName());
         //设置钱包信息
         consumeDetailBo.setBagType(bagVo.getBagCode());
+        consumeDetailBo.setRemark(remark);
 
         return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);
     }
 
+    /**
+     * 创建或更新人员日统计表
+     * @param bo 消费业务对象
+     * @param accountVo 人员账户视图
+     * @param cardVo 账户卡片视图
+     * @return 更新后的人员日统计表
+     */
+    private XfUserTotalVo createOrUpdateUserTotal(ConsumptionBo bo, PtUserAccountVo accountVo, PtCardVo cardVo) {
+        XfUserTotalBo xfUserTotalBo = new XfUserTotalBo();
+        xfUserTotalBo.setUserId(accountVo.getUserId());
+        xfUserTotalBo.setUserNumb(accountVo.getUserNumb());
+        xfUserTotalBo.setRealName(accountVo.getRealName());
+        xfUserTotalBo.setDeptName(accountVo.getDeptName());
+        xfUserTotalBo.setCardNo(cardVo.getCardNo());
+        xfUserTotalBo.setDateDay(DateUtil.format(new Date(), "yyyy-MM-dd"));
+        xfUserTotalBo.setUseType(bo.getUseType().code());
+        xfUserTotalBo.setConsumeMoney(bo.getOperatorMoney().negate());
+
+        return userTotalService.createOrUpdateUserTotal(xfUserTotalBo);
+    }
+
+    /**
+     * 创建或更新设备日统计
+     * @param bo 消费业务对象
+     * @param termVo 设备视图
+     * @param mealTypeVo 餐类视图
+     * @return 日统计视图
+     */
+    private XfTermTotalVo createOrUpdateTermTotal(ConsumptionBo bo,XfTermVo termVo, PtMealTypeVo mealTypeVo){
+        XfTermTotalBo termTotalBo = new XfTermTotalBo();
+        BeanUtil.copyProperties(termVo, termTotalBo);
+        termTotalBo.setDateDay(DateUtil.format(new Date(), "yyyy-MM-dd"));
+        termTotalBo.setMealType(Long.valueOf(mealTypeVo.getTypeId()));
+        termTotalBo.setErrFillCount(1L);
+        termTotalBo.setErrFillMoney(bo.getOperatorMoney());
+        termTotalBo.setUseType(SystemUseTypeEnum.CONSUME.code());
+
+        return termTotalService.createOrUpdateTermTotal(termTotalBo);
+    }
     /**
      * 更新消费明细表的卡余信息
      *
      * @param consumeId 消费明细Id
-     * @param balance 卡余
-     * @return 更新结果
+     * @param balance   卡余
      */
-    private boolean updateConsumeRecordBalance(String consumeId, BigDecimal balance){
+    private void updateConsumeRecordBalance(String consumeId, BigDecimal balance){
         XfConsumeDetailBo consumeDetailBo = new XfConsumeDetailBo();
         consumeDetailBo.setConsumeId(consumeId);
         consumeDetailBo.setCardValue(balance);
 
-        return consumeDetailService.updateByBoId(consumeDetailBo);
+        consumeDetailService.updateByBoId(consumeDetailBo);
     }
+
+    /**
+     * 更新账户钱包余额
+     * @param bo 消费业务对象
+     * @param bagVo 账户钱包视图
+     * @return 更新后的账户钱包
+     */
     private PtBagVo updateBalance(ConsumptionBo bo, PtBagVo bagVo) {
         PtBagBo bagBo = new PtBagBo();
         bagBo.setUserId(bo.getUserId());

+ 7 - 7
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfTermtotalController.java

@@ -18,8 +18,8 @@ import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.log.enums.BusinessType;
 import org.dromara.common.excel.utils.ExcelUtil;
 import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
-import org.dromara.backstage.consumption.domain.bo.XfTermtotalBo;
-import org.dromara.backstage.consumption.service.IXfTermtotalService;
+import org.dromara.backstage.consumption.domain.bo.XfTermTotalBo;
+import org.dromara.backstage.consumption.service.IXfTermTotalService;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 
 /**
@@ -35,14 +35,14 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
 @RequestMapping("/consumption/xfTermtotal")
 public class XfTermtotalController extends BaseController {
 
-    private final IXfTermtotalService xfTermtotalService;
+    private final IXfTermTotalService xfTermtotalService;
 
     /**
      * 查询消费机消费记录列表
      */
     @SaCheckPermission("consumption:xfTermtotal:list")
     @GetMapping("/list")
-    public TableDataInfo<XfTermTotalVo> list(XfTermtotalBo bo, PageQuery pageQuery) {
+    public TableDataInfo<XfTermTotalVo> list(XfTermTotalBo bo, PageQuery pageQuery) {
         return xfTermtotalService.queryPageList(bo, pageQuery);
     }
 
@@ -52,7 +52,7 @@ public class XfTermtotalController extends BaseController {
     @SaCheckPermission("consumption:xfTermtotal:export")
     @Log(title = "消费机消费记录", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(XfTermtotalBo bo, HttpServletResponse response) {
+    public void export(XfTermTotalBo bo, HttpServletResponse response) {
         List<XfTermTotalVo> list = xfTermtotalService.queryList(bo);
         ExcelUtil.exportExcel(list, "消费机消费记录", XfTermTotalVo.class, response);
     }
@@ -76,7 +76,7 @@ public class XfTermtotalController extends BaseController {
     @Log(title = "消费机消费记录", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public R<Void> add(@Validated(AddGroup.class) @RequestBody XfTermtotalBo bo) {
+    public R<Void> add(@Validated(AddGroup.class) @RequestBody XfTermTotalBo bo) {
         return toAjax(xfTermtotalService.insertByBo(bo));
     }
 
@@ -87,7 +87,7 @@ public class XfTermtotalController extends BaseController {
     @Log(title = "消费机消费记录", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
-    public R<Void> edit(@Validated(EditGroup.class) @RequestBody XfTermtotalBo bo) {
+    public R<Void> edit(@Validated(EditGroup.class) @RequestBody XfTermTotalBo bo) {
         return toAjax(xfTermtotalService.updateByBo(bo));
     }
 

+ 5 - 4
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfTermtotal.java → ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/XfTermTotal.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
+import java.math.BigDecimal;
 
 /**
  * 消费机消费记录对象 t_xf_termTotal
@@ -16,7 +17,7 @@ import java.io.Serial;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @TableName("t_xf_termTotal")
-public class XfTermtotal extends TenantEntity {
+public class XfTermTotal extends TenantEntity {
 
     @Serial
     private static final long serialVersionUID = 1L;
@@ -70,7 +71,7 @@ public class XfTermtotal extends TenantEntity {
     /**
      * 消费总额(该机该天该餐消费总额)
      */
-    private Long mealAmount;
+    private BigDecimal mealAmount;
 
     /**
      * 消费次数(该机该天该餐消费次数)
@@ -80,7 +81,7 @@ public class XfTermtotal extends TenantEntity {
     /**
      * 使用类型,100-消费系统
      */
-    private Long useYpe;
+    private Integer useType;
 
     /**
      * 错扣补款次数(该机该天该餐错扣补款次数)
@@ -90,7 +91,7 @@ public class XfTermtotal extends TenantEntity {
     /**
      * 错扣补款总额(该机该天该餐错扣补款总额)
      */
-    private Long errFillMoney;
+    private BigDecimal errFillMoney;
 
     /**
      * 删除标志(0-未删除 2-已删除)

+ 8 - 6
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfTermtotalBo.java → ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfTermTotalBo.java

@@ -1,6 +1,6 @@
 package org.dromara.backstage.consumption.domain.bo;
 
-import org.dromara.backstage.consumption.domain.XfTermtotal;
+import org.dromara.backstage.consumption.domain.XfTermTotal;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
@@ -9,6 +9,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 
+import java.math.BigDecimal;
+
 /**
  * 消费机消费记录业务对象 t_xf_termTotal
  *
@@ -17,8 +19,8 @@ import jakarta.validation.constraints.*;
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-@AutoMapper(target = XfTermtotal.class, reverseConvertGenerate = false)
-public class XfTermtotalBo extends BaseEntity {
+@AutoMapper(target = XfTermTotal.class, reverseConvertGenerate = false)
+public class XfTermTotalBo extends BaseEntity {
 
     /**
      * 汇总Id,主键
@@ -74,7 +76,7 @@ public class XfTermtotalBo extends BaseEntity {
     /**
      * 消费总额(该机该天该餐消费总额)
      */
-    private Long mealAmount;
+    private BigDecimal mealAmount;
 
     /**
      * 消费次数(该机该天该餐消费次数)
@@ -85,7 +87,7 @@ public class XfTermtotalBo extends BaseEntity {
      * 使用类型,100-消费系统
      */
     @NotNull(message = "使用类型,100-消费系统不能为空", groups = { AddGroup.class, EditGroup.class })
-    private Long useYpe;
+    private Integer useType;
 
     /**
      * 错扣补款次数(该机该天该餐错扣补款次数)
@@ -95,7 +97,7 @@ public class XfTermtotalBo extends BaseEntity {
     /**
      * 错扣补款总额(该机该天该餐错扣补款总额)
      */
-    private Long errFillMoney;
+    private BigDecimal errFillMoney;
 
 
 }

+ 3 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfTermTotalVo.java

@@ -1,6 +1,6 @@
 package org.dromara.backstage.consumption.domain.vo;
 
-import org.dromara.backstage.consumption.domain.XfTermtotal;
+import org.dromara.backstage.consumption.domain.XfTermTotal;
 import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
@@ -19,7 +19,7 @@ import java.math.BigDecimal;
  */
 @Data
 @ExcelIgnoreUnannotated
-@AutoMapper(target = XfTermtotal.class)
+@AutoMapper(target = XfTermTotal.class)
 public class XfTermTotalVo implements Serializable {
 
     @Serial
@@ -95,7 +95,7 @@ public class XfTermTotalVo implements Serializable {
      * 使用类型,100-消费系统
      */
     @ExcelProperty(value = "使用类型,100-消费系统")
-    private Long useYpe;
+    private Integer useType;
 
     /**
      * 错扣补款次数(该机该天该餐错扣补款次数)

+ 2 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/mapper/XfTermTotalMapper.java

@@ -1,6 +1,6 @@
 package org.dromara.backstage.consumption.mapper;
 
-import org.dromara.backstage.consumption.domain.XfTermtotal;
+import org.dromara.backstage.consumption.domain.XfTermTotal;
 import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 
@@ -10,6 +10,6 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
  * @author LionLi
  * @date 2024-08-15
  */
-public interface XfTermTotalMapper extends BaseMapperPlus<XfTermtotal, XfTermTotalVo> {
+public interface XfTermTotalMapper extends BaseMapperPlus<XfTermTotal, XfTermTotalVo> {
 
 }

+ 21 - 6
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfTermtotalService.java → ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfTermTotalService.java

@@ -1,7 +1,8 @@
 package org.dromara.backstage.consumption.service;
 
+import org.dromara.backstage.consumption.domain.XfTermTotal;
 import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
-import org.dromara.backstage.consumption.domain.bo.XfTermtotalBo;
+import org.dromara.backstage.consumption.domain.bo.XfTermTotalBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.mybatis.core.page.PageQuery;
 
@@ -14,7 +15,7 @@ import java.util.List;
  * @author LionLi
  * @date 2024-08-15
  */
-public interface IXfTermtotalService {
+public interface IXfTermTotalService {
 
     /**
      * 查询消费机消费记录
@@ -31,7 +32,7 @@ public interface IXfTermtotalService {
      * @param pageQuery 分页参数
      * @return 消费机消费记录分页列表
      */
-    TableDataInfo<XfTermTotalVo> queryPageList(XfTermtotalBo bo, PageQuery pageQuery);
+    TableDataInfo<XfTermTotalVo> queryPageList(XfTermTotalBo bo, PageQuery pageQuery);
 
     /**
      * 查询符合条件的消费机消费记录列表
@@ -39,7 +40,7 @@ public interface IXfTermtotalService {
      * @param bo 查询条件
      * @return 消费机消费记录列表
      */
-    List<XfTermTotalVo> queryList(XfTermtotalBo bo);
+    List<XfTermTotalVo> queryList(XfTermTotalBo bo);
 
     /**
      * 新增消费机消费记录
@@ -47,7 +48,7 @@ public interface IXfTermtotalService {
      * @param bo 消费机消费记录
      * @return 是否新增成功
      */
-    Boolean insertByBo(XfTermtotalBo bo);
+    Boolean insertByBo(XfTermTotalBo bo);
 
     /**
      * 修改消费机消费记录
@@ -55,7 +56,7 @@ public interface IXfTermtotalService {
      * @param bo 消费机消费记录
      * @return 是否修改成功
      */
-    Boolean updateByBo(XfTermtotalBo bo);
+    Boolean updateByBo(XfTermTotalBo bo);
 
     /**
      * 校验并批量删除消费机消费记录信息
@@ -65,4 +66,18 @@ public interface IXfTermtotalService {
      * @return 是否删除成功
      */
     Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
+
+    /**
+     *
+     * @param bo 设备日消费对象
+     * @return 设备日消费视图
+     */
+    XfTermTotalVo createOrUpdateTermTotal(XfTermTotalBo bo);
+    /**
+     * 更新日统计表数据
+     * @param bo 日统计表对象
+     * @param entity 日统计表
+     * @return 日统计表视图
+     */
+    XfTermTotalVo updateTotalByBo(XfTermTotalBo bo, XfTermTotal entity);
 }

+ 9 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/IXfUserTotalService.java

@@ -84,4 +84,13 @@ public interface IXfUserTotalService {
      * @return 更新后的日统计表
      */
     XfUserTotalVo createOrUpdateUserTotal(XfUserTotalBo bo);
+
+    /**
+     * 更新日统计表中的充值/退款数据
+     *
+     * @param update 需要更新的实体
+     * @param entity
+     * @return 更新后的日统计表
+     */
+    XfUserTotalVo updateTotalCreditByBo(XfUserTotalBo update, XfUserTotal entity);
 }

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

@@ -28,7 +28,6 @@ import java.util.Map;
  * @author LionLi
  * @date 2024-08-15
  */
-@DS("storage")
 @RequiredArgsConstructor
 @Service
 public class XfConsumeDetailServiceImpl implements IXfConsumeDetailService {

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

@@ -0,0 +1,203 @@
+package org.dromara.backstage.consumption.service.impl;
+
+import cn.hutool.core.util.ObjUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.dromara.backstage.consumption.domain.bo.XfTermTotalBo;
+import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
+import org.dromara.backstage.consumption.domain.XfTermTotal;
+import org.dromara.backstage.consumption.mapper.XfTermTotalMapper;
+import org.dromara.backstage.consumption.service.IXfTermTotalService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 消费机消费记录Service业务层处理
+ *
+ * @author LionLi
+ * @date 2024-08-15
+ */
+@RequiredArgsConstructor
+@Service
+@DS("storage")
+public class XfTermTotalServiceImpl implements IXfTermTotalService {
+
+    private final XfTermTotalMapper baseMapper;
+
+    /**
+     * 查询消费机消费记录
+     *
+     * @param totalId 主键
+     * @return 消费机消费记录
+     */
+    @Override
+    public XfTermTotalVo queryById(String totalId){
+        return baseMapper.selectVoById(totalId);
+    }
+
+    /**
+     * 分页查询消费机消费记录列表
+     *
+     * @param bo        查询条件
+     * @param pageQuery 分页参数
+     * @return 消费机消费记录分页列表
+     */
+    @Override
+    public TableDataInfo<XfTermTotalVo> queryPageList(XfTermTotalBo bo, PageQuery pageQuery) {
+        LambdaQueryWrapper<XfTermTotal> lqw = buildQueryWrapper(bo);
+        Page<XfTermTotalVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        return TableDataInfo.build(result);
+    }
+
+    /**
+     * 查询符合条件的消费机消费记录列表
+     *
+     * @param bo 查询条件
+     * @return 消费机消费记录列表
+     */
+    @Override
+    public List<XfTermTotalVo> queryList(XfTermTotalBo bo) {
+        LambdaQueryWrapper<XfTermTotal> lqw = buildQueryWrapper(bo);
+        return baseMapper.selectVoList(lqw);
+    }
+
+    private LambdaQueryWrapper<XfTermTotal> buildQueryWrapper(XfTermTotalBo bo) {
+        Map<String, Object> params = bo.getParams();
+        LambdaQueryWrapper<XfTermTotal> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getTermNo() != null, XfTermTotal::getTermNo, bo.getTermNo());
+        lqw.like(StringUtils.isNotBlank(bo.getTermName()), XfTermTotal::getTermName, bo.getTermName());
+        lqw.eq(bo.getRoomId() != null, XfTermTotal::getRoomId, bo.getRoomId());
+        lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XfTermTotal::getRoomName, bo.getRoomName());
+        lqw.eq(bo.getAccountId() != null, XfTermTotal::getAccountId, bo.getAccountId());
+        lqw.like(StringUtils.isNotBlank(bo.getAccountName()), XfTermTotal::getAccountName, bo.getAccountName());
+        lqw.eq(StringUtils.isNotBlank(bo.getDateDay()), XfTermTotal::getDateDay, bo.getDateDay());
+        lqw.eq(bo.getMealType() != null, XfTermTotal::getMealType, bo.getMealType());
+        lqw.eq(bo.getMealAmount() != null, XfTermTotal::getMealAmount, bo.getMealAmount());
+        lqw.eq(bo.getMealCount() != null, XfTermTotal::getMealCount, bo.getMealCount());
+        lqw.eq(bo.getUseType() != null, XfTermTotal::getUseType, bo.getUseType());
+        lqw.eq(bo.getErrFillCount() != null, XfTermTotal::getErrFillCount, bo.getErrFillCount());
+        lqw.eq(bo.getErrFillMoney() != null, XfTermTotal::getErrFillMoney, bo.getErrFillMoney());
+        return lqw;
+    }
+
+    /**
+     * 新增消费机消费记录
+     *
+     * @param bo 消费机消费记录
+     * @return 是否新增成功
+     */
+    @Override
+    public Boolean insertByBo(XfTermTotalBo bo) {
+        XfTermTotal add = MapstructUtils.convert(bo, XfTermTotal.class);
+        validEntityBeforeSave(add);
+        boolean flag = baseMapper.insert(add) > 0;
+        if (flag) {
+            bo.setTotalId(add.getTotalId());
+        }
+        return flag;
+    }
+
+    /**
+     * 修改消费机消费记录
+     *
+     * @param bo 消费机消费记录
+     * @return 是否修改成功
+     */
+    @Override
+    public Boolean updateByBo(XfTermTotalBo bo) {
+        XfTermTotal update = MapstructUtils.convert(bo, XfTermTotal.class);
+        validEntityBeforeSave(update);
+        return baseMapper.updateById(update) > 0;
+    }
+
+    /**
+     * 保存前的数据校验
+     */
+    private void validEntityBeforeSave(XfTermTotal entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    /**
+     * 校验并批量删除消费机消费记录信息
+     *
+     * @param ids     待删除的主键集合
+     * @param isValid 是否进行有效性校验
+     * @return 是否删除成功
+     */
+    @Override
+    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    /**
+     *
+     * @param bo 设备日消费对象
+     * @return 设备日消费视图
+     */
+    @Override
+    public XfTermTotalVo createOrUpdateTermTotal(XfTermTotalBo bo) {
+        XfTermTotal entity = baseMapper.selectOne(new LambdaQueryWrapper<XfTermTotal>()
+            .eq(XfTermTotal::getTermNo, bo.getTermNo())
+            .eq(XfTermTotal::getMealType, bo.getMealType())
+            .eq(XfTermTotal::getUseType, bo.getUseType())
+            .eq(XfTermTotal::getDateDay, bo.getDateDay()));
+
+        if (ObjUtil.isEmpty(entity)) {
+            entity = MapstructUtils.convert(bo, XfTermTotal.class);
+            boolean flag = baseMapper.insert(entity) > 0;
+            if (flag) {
+                if (entity != null) {
+                    bo.setTotalId(entity.getTotalId());
+                    return baseMapper.selectVoById(entity.getTotalId());
+                }
+            }
+        } else {
+            bo.setTotalId(entity.getTotalId());
+            return updateTotalByBo(bo, entity);
+        }
+        return null;
+    }
+
+    /**
+     * 更新日统计表数据
+     * @param bo 日统计表对象
+     * @param entity 日统计表
+     * @return 日统计表视图
+     */
+    @Override
+    public XfTermTotalVo updateTotalByBo(XfTermTotalBo bo, XfTermTotal entity) {
+        LambdaUpdateWrapper<XfTermTotal> lqw = Wrappers.lambdaUpdate();
+        if(bo.getErrFillCount()!=null){
+            lqw.set(XfTermTotal::getErrFillCount, entity.getErrFillCount()+1);
+        }
+        if(bo.getErrFillMoney()!=null){
+            lqw.set(XfTermTotal::getErrFillMoney,entity.getErrFillMoney().add(bo.getErrFillMoney()));
+        }
+        if(bo.getMealCount()!=null){
+            lqw.set(XfTermTotal::getMealCount, entity.getErrFillCount()+1);
+        }
+        if(bo.getMealAmount()!=null){
+            lqw.set(XfTermTotal::getMealAmount,entity.getMealAmount().add(bo.getMealAmount()));
+        }
+        lqw.eq(XfTermTotal::getTotalId, entity.getTotalId());
+
+        if(baseMapper.update(null,lqw)>0){
+            return queryById(entity.getTotalId());
+        }
+        return null;
+    }
+}

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

@@ -1,143 +0,0 @@
-package org.dromara.backstage.consumption.service.impl;
-
-import com.baomidou.dynamic.datasource.annotation.DS;
-import org.dromara.common.core.utils.MapstructUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import lombok.RequiredArgsConstructor;
-import org.springframework.stereotype.Service;
-import org.dromara.backstage.consumption.domain.bo.XfTermtotalBo;
-import org.dromara.backstage.consumption.domain.vo.XfTermTotalVo;
-import org.dromara.backstage.consumption.domain.XfTermtotal;
-import org.dromara.backstage.consumption.mapper.XfTermTotalMapper;
-import org.dromara.backstage.consumption.service.IXfTermtotalService;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Collection;
-
-/**
- * 消费机消费记录Service业务层处理
- *
- * @author LionLi
- * @date 2024-08-15
- */
-@RequiredArgsConstructor
-@Service
-@DS("storage")
-public class XfTermtotalServiceImpl implements IXfTermtotalService {
-
-    private final XfTermTotalMapper baseMapper;
-
-    /**
-     * 查询消费机消费记录
-     *
-     * @param totalId 主键
-     * @return 消费机消费记录
-     */
-    @Override
-    public XfTermTotalVo queryById(String totalId){
-        return baseMapper.selectVoById(totalId);
-    }
-
-    /**
-     * 分页查询消费机消费记录列表
-     *
-     * @param bo        查询条件
-     * @param pageQuery 分页参数
-     * @return 消费机消费记录分页列表
-     */
-    @Override
-    public TableDataInfo<XfTermTotalVo> queryPageList(XfTermtotalBo bo, PageQuery pageQuery) {
-        LambdaQueryWrapper<XfTermtotal> lqw = buildQueryWrapper(bo);
-        Page<XfTermTotalVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
-        return TableDataInfo.build(result);
-    }
-
-    /**
-     * 查询符合条件的消费机消费记录列表
-     *
-     * @param bo 查询条件
-     * @return 消费机消费记录列表
-     */
-    @Override
-    public List<XfTermTotalVo> queryList(XfTermtotalBo bo) {
-        LambdaQueryWrapper<XfTermtotal> lqw = buildQueryWrapper(bo);
-        return baseMapper.selectVoList(lqw);
-    }
-
-    private LambdaQueryWrapper<XfTermtotal> buildQueryWrapper(XfTermtotalBo bo) {
-        Map<String, Object> params = bo.getParams();
-        LambdaQueryWrapper<XfTermtotal> lqw = Wrappers.lambdaQuery();
-        lqw.eq(bo.getTermNo() != null, XfTermtotal::getTermNo, bo.getTermNo());
-        lqw.like(StringUtils.isNotBlank(bo.getTermName()), XfTermtotal::getTermName, bo.getTermName());
-        lqw.eq(bo.getRoomId() != null, XfTermtotal::getRoomId, bo.getRoomId());
-        lqw.like(StringUtils.isNotBlank(bo.getRoomName()), XfTermtotal::getRoomName, bo.getRoomName());
-        lqw.eq(bo.getAccountId() != null, XfTermtotal::getAccountId, bo.getAccountId());
-        lqw.like(StringUtils.isNotBlank(bo.getAccountName()), XfTermtotal::getAccountName, bo.getAccountName());
-        lqw.eq(StringUtils.isNotBlank(bo.getDateDay()), XfTermtotal::getDateDay, bo.getDateDay());
-        lqw.eq(bo.getMealType() != null, XfTermtotal::getMealType, bo.getMealType());
-        lqw.eq(bo.getMealAmount() != null, XfTermtotal::getMealAmount, bo.getMealAmount());
-        lqw.eq(bo.getMealCount() != null, XfTermtotal::getMealCount, bo.getMealCount());
-        lqw.eq(bo.getUseYpe() != null, XfTermtotal::getUseYpe, bo.getUseYpe());
-        lqw.eq(bo.getErrFillCount() != null, XfTermtotal::getErrFillCount, bo.getErrFillCount());
-        lqw.eq(bo.getErrFillMoney() != null, XfTermtotal::getErrFillMoney, bo.getErrFillMoney());
-        return lqw;
-    }
-
-    /**
-     * 新增消费机消费记录
-     *
-     * @param bo 消费机消费记录
-     * @return 是否新增成功
-     */
-    @Override
-    public Boolean insertByBo(XfTermtotalBo bo) {
-        XfTermtotal add = MapstructUtils.convert(bo, XfTermtotal.class);
-        validEntityBeforeSave(add);
-        boolean flag = baseMapper.insert(add) > 0;
-        if (flag) {
-            bo.setTotalId(add.getTotalId());
-        }
-        return flag;
-    }
-
-    /**
-     * 修改消费机消费记录
-     *
-     * @param bo 消费机消费记录
-     * @return 是否修改成功
-     */
-    @Override
-    public Boolean updateByBo(XfTermtotalBo bo) {
-        XfTermtotal update = MapstructUtils.convert(bo, XfTermtotal.class);
-        validEntityBeforeSave(update);
-        return baseMapper.updateById(update) > 0;
-    }
-
-    /**
-     * 保存前的数据校验
-     */
-    private void validEntityBeforeSave(XfTermtotal entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
-    /**
-     * 校验并批量删除消费机消费记录信息
-     *
-     * @param ids     待删除的主键集合
-     * @param isValid 是否进行有效性校验
-     * @return 是否删除成功
-     */
-    @Override
-    public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
-        if(isValid){
-            //TODO 做一些业务上的校验,判断是否需要校验
-        }
-        return baseMapper.deleteByIds(ids) > 0;
-    }
-}

+ 29 - 2
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfUserTotalServiceImpl.java

@@ -98,7 +98,9 @@ public class XfUserTotalServiceImpl implements IXfUserTotalService {
         validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
-            bo.setTotalId(add.getTotalId());
+            if (add != null) {
+                bo.setTotalId(add.getTotalId());
+            }
         }
         return flag;
     }
@@ -157,11 +159,13 @@ public class XfUserTotalServiceImpl implements IXfUserTotalService {
             boolean flag = baseMapper.insert(entity) > 0;
             if (flag) {
                 if (entity != null) {
+                    bo.setTotalId(entity.getTotalId());
                     return baseMapper.selectVoById(entity.getTotalId());
                 }
             }
         } else {
-            return updateTotalCreditValue(entity, bo.getCreditMoney());
+            bo.setTotalId(entity.getTotalId());
+            return updateTotalCreditByBo(bo, entity);
         }
         return null;
     }
@@ -183,4 +187,27 @@ public class XfUserTotalServiceImpl implements IXfUserTotalService {
         }
         return null;
     }
+    /**
+     * 更新日统计表中的充值/退款数据
+     *
+     * @param update 需要更新的实体业务对象
+     * @param entity 实体类
+     * @return 更新后的日统计表
+     */
+    @Override
+    public XfUserTotalVo updateTotalCreditByBo(XfUserTotalBo update, XfUserTotal entity) {
+        LambdaUpdateWrapper<XfUserTotal> lqw = Wrappers.lambdaUpdate();
+        if(update.getCreditMoney()!=null){
+            lqw.set(XfUserTotal::getCreditMoney, entity.getCreditMoney().add(update.getCreditMoney()));
+        }
+        if(update.getConsumeMoney()!=null){
+            lqw.set(XfUserTotal::getConsumeMoney,entity.getConsumeMoney().add(update.getConsumeMoney()));
+        }
+        lqw.eq(XfUserTotal::getTotalId, entity.getTotalId());
+
+       if(baseMapper.update(null,lqw)>0){
+           return queryById(entity.getTotalId());
+       }
+       return null;
+    }
 }

+ 2 - 2
ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfTermtotalMapper.xml → ruoyi-modules/ruoyi-backstage/src/main/resources/mapper/consumption/XfTermTotalMapper.xml

@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.backstage.consumption.mapper.XfTermTotalMapper">
 
-    <resultMap type="org.dromara.backstage.consumption.domain.XfTermtotal" id="XfTermtotalResult">
+    <resultMap type="org.dromara.backstage.consumption.domain.XfTermTotal" id="XfTermTotalResult">
             <result property="totalId"    column="total_id"    />
             <result property="tenantId"    column="tenant_id"    />
             <result property="termNo"    column="term_no"    />
@@ -17,7 +17,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <result property="mealType"    column="meal_type"    />
             <result property="mealAmount"    column="meal_amount"    />
             <result property="mealCount"    column="meal_count"    />
-            <result property="useYpe"    column="use_ype"    />
+            <result property="useType"    column="use_type"    />
             <result property="errFillCount"    column="err_fill_count"    />
             <result property="errFillMoney"    column="err_fill_money"    />
             <result property="delFlag"    column="del_flag"    />