Bladeren bron

Merge branch 'master' of http://git.datuai.com/luoyibo/ykt_server

luoyb 1 jaar geleden
bovenliggende
commit
6ed8de96dd

+ 2 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/IPtRoomService.java

@@ -37,6 +37,8 @@ public interface IPtRoomService {
      */
     TableDataInfo<PtRoomVo> queryPageList(PtRoomBo bo, PageQuery pageQuery);
 
+    List<PtRoomVo> queryRoomByAreaId(Long areaId);
+
     /**
      * 查询符合条件的房间定义列表
      *

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

@@ -74,6 +74,7 @@ public class PtCardtypeServiceImpl implements IPtCardtypeService {
     @Override
     public List<PtCardtypeVo> queryList(PtCardtypeBo bo) {
         LambdaQueryWrapper<PtCardtype> lqw = buildQueryWrapper(bo);
+        lqw.orderByAsc(PtCardtype::getCode);
         return baseMapper.selectVoList(lqw);
     }
 

+ 17 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/basics/service/impl/PtRoomServiceImpl.java

@@ -81,6 +81,23 @@ public class PtRoomServiceImpl implements IPtRoomService {
         return TableDataInfo.build(result);
     }
 
+    /**
+     * 根据areaId查询下面的所有房间
+     */
+    public List<PtRoomVo> queryRoomByAreaId(Long areaId) {
+        List<PtRoomVo> rs = new ArrayList<>();
+        //先查询楼层,在查询楼层下面的房间
+        List<PtAreaVo> ptAreaVos = areaService.queryListLD(areaId);
+        if(CollectionUtil.isNotEmpty(ptAreaVos)){
+            LambdaQueryWrapper<PtRoom> lqw = Wrappers.lambdaQuery();
+            List<Long> areaIds = ptAreaVos.stream().map(PtAreaVo::getAreaId).toList();
+            lqw.in(PtRoom::getAreaId, areaIds);
+            rs = baseMapper.selectVoList(lqw);
+        }
+
+        return rs;
+    }
+
     /**
      * 查询符合条件的房间定义列表
      *

+ 20 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/controller/XfTermController.java

@@ -6,6 +6,8 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.backstage.consumption.domain.bo.XfTermParamBo;
+import org.dromara.backstage.consumption.domain.vo.XfTermParamVo;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -69,6 +71,13 @@ public class XfTermController extends BaseController {
         return R.ok(xfTermService.queryById(termId));
     }
 
+    @SaCheckPermission("consumption:xfTerm:query")
+    @GetMapping("/param/{termId}")
+    public R<XfTermParamVo> getInfo4Param(@NotNull(message = "主键不能为空")
+                               @PathVariable Long termId) {
+        return R.ok(xfTermService.queryById4Param(termId));
+    }
+
     /**
      * 新增消费设备
      */
@@ -91,6 +100,17 @@ public class XfTermController extends BaseController {
         return toAjax(xfTermService.updateByBo(bo));
     }
 
+    /**
+     * 修改消费设备
+     */
+    @SaCheckPermission("consumption:xfTerm:edit")
+    @Log(title = "消费设备参数编辑", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PostMapping("/updateParam")
+    public R<Void> editParam(@Validated @RequestBody XfTermParamBo bo) {
+        return toAjax(xfTermService.updateParamByBo(bo));
+    }
+
     /**
      * 删除消费设备
      *

+ 342 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/bo/XfTermParamBo.java

@@ -0,0 +1,342 @@
+package org.dromara.backstage.consumption.domain.bo;
+
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.dromara.backstage.consumption.domain.XfTerm;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 消费设备参数编辑对象
+ *
+ * @author bing
+ * @date 2024-08-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = XfTerm.class, reverseConvertGenerate = false)
+public class XfTermParamBo extends BaseEntity {
+
+    /**
+     * 设备Id,主键
+     */
+    @NotNull(message = "设备Id,主键不能为空")
+    private Long termId;
+
+    /**
+     * 设备机号
+     */
+//    private Long termNo;
+
+    /**
+     * 设备名称
+     */
+//    private String termName;
+
+    /**
+     * 所属餐厅Id
+     */
+//    private Long roomId;
+
+    /**
+     * 结算账户Id
+     */
+//    private Long accountId;
+
+    /**
+     * 设备类型,见XF_TermType字典类型
+     */
+//    private String termType;
+
+    /**
+     * 设备二维码
+     */
+//    private String qrCode;
+
+    /**
+     * 工作站Id
+     */
+//    private Long stationId;
+
+    /**
+     * 扣费类型,见XF_ConsumeType字典类型
+     */
+//    private String consumeType;
+
+    /**
+     * 是否自动下载参数,见sys_yew_no字典项
+     */
+//    private String autoDown;
+
+    /**
+     * 应用系统,见YYXT数据字典类别
+     */
+//    private String useType;
+
+    /**
+     * 允许使用的卡类
+     */
+//    @NotNull(message = "允许使用的卡类不能为空")
+    private Long cardType;
+
+    /**
+     * 设备IP
+     */
+//    private String termIp;
+
+    /**
+     * 设备MAC地址
+     */
+//    private String termMac;
+
+    /**
+     * 设备通讯端口
+     */
+//    private Long commPort;
+
+    /**
+     * 子网掩码
+     */
+//    private String mask;
+
+    /**
+     * 服务器IP
+     */
+//    private String serverIp;
+
+    /**
+     * 服务器端口
+     */
+//    private Long serverPort;
+
+    /**
+     * 网关IP
+     */
+//    private String gatewayIp;
+
+    /**
+     * 心跳间隔,以秒为单位
+     */
+//    private Long beatInterval;
+
+    /**
+     * 通讯超时时间,以100毫秒为单位
+     */
+//    private Long timeout;
+
+    /**
+     * 允许脱机时间
+     */
+//    private Long offlineTime;
+
+    /**
+     * 高级参数
+     */
+//    private String advParam;
+
+    /**
+     * 设备参数
+     */
+//    private String posParam;
+
+    /**
+     * 费率参数
+     */
+//    private String rateParam;
+
+    /**
+     * 消费工作模式,见XF_WorkMode字典类别
+     */
+    @NotBlank(message = "消费工作模式不能为空")
+    private String workMode;
+
+    /**
+     * 开机模式,0-不需要营业员开机,1-需要营业员开机
+     */
+    @NotBlank(message = "开机模式不能为空")
+    private String openMode;
+
+    /**
+     * 卡上最大金额
+     */
+    @NotNull(message = "卡上最大金额不能为空")
+    private Long maxCardMoney;
+
+    /**
+     * 定值消费金额
+     */
+    private Long constantValue;
+
+    /**
+     * 编号0代表的金额
+     */
+    private Long rationZero;
+
+    /**
+     * 编号1代表的金额
+     */
+    private Long rationOne;
+
+    /**
+     * 编号2代表的金额
+     */
+    private Long rationTwo;
+
+    /**
+     * 编号3代表的金额
+     */
+    private Long rationThree;
+
+    /**
+     * 编号4代表的金额
+     */
+    private Long rationFour;
+
+    /**
+     * 编号5代表的金额
+     */
+    private Long rationFive;
+
+    /**
+     * 编号6代表的金额
+     */
+    private Long rationSix;
+
+    /**
+     * 编号7代表的金额
+     */
+    private Long rationSeven;
+
+    /**
+     * 编号8代表的金额
+     */
+    private Long rationEight;
+
+    /**
+     * 编号9代表的金额
+     */
+    private Long rationNine;
+
+    /**
+     * 每天最大消费次数,0-不限
+     */
+    private Long dayCount;
+
+    /**
+     * 每天最大消费金额
+     */
+    private Long dayMoney;
+
+    /**
+     * 每餐最大消费次数,0-不限
+     */
+    private Long mealCount;
+
+    /**
+     * 单次最大消费金额
+     */
+    private Long singleMoney;
+
+    /**
+     * 早餐消费金额
+     */
+    private Long breakfastMoney;
+
+    /**
+     * 午餐消费金额
+     */
+    private Long lunchMoney;
+
+    /**
+     * 晚餐消费金额
+     */
+    private Long supperMoney;
+
+    /**
+     * 夜宵消费金额
+     */
+    private Long nightMoney;
+
+    /**
+     * 早餐开始时间
+     */
+    private Long breakfastBegin;
+
+    /**
+     * 早餐结束时间
+     */
+    private Long breakfastEnd;
+
+    /**
+     * 午餐开始时间
+     */
+    private Long lunchBegin;
+
+    /**
+     * 午餐结束时间
+     */
+    private Long lunchEnd;
+
+    /**
+     * 晚餐开始时间
+     */
+    private Long supperBegin;
+
+    /**
+     * 晚餐结束时间
+     */
+    private Long suppeEnd;
+
+    /**
+     * 宵夜开始时间
+     */
+    private Long nightBegin;
+
+    /**
+     * 宵夜结束时间
+     */
+    private Long nightEnd;
+
+    /**
+     * 两次刷卡间隔,0-不限制
+     */
+    private Long swipeInterval;
+
+    /**
+     * 是否启用卡片有效限制,0-禁用 1-启用
+     */
+    private String termValidity;
+
+    /**
+     * 设备记录流水号
+     */
+//    private Long recordId;
+
+    /**
+     * 数据上传时间
+     */
+//    private Date uploadTime;
+
+    /**
+     * 黑名单下载时间
+     */
+//    private Date blackDownTime;
+
+    /**
+     * 最后校时时间
+     */
+//    private Date lastCheck;
+
+    /**
+     * 重启时间
+     */
+    private String rebootTime;
+
+
+}

+ 345 - 0
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/domain/vo/XfTermParamVo.java

@@ -0,0 +1,345 @@
+package org.dromara.backstage.consumption.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import org.dromara.backstage.consumption.domain.XfTerm;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 消费设备视图对象 t_xf_term
+ *
+ * @author bing
+ * @date 2024-08-21
+ */
+@Data
+@AutoMapper(target = XfTerm.class)
+public class XfTermParamVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 设备Id,主键
+     */
+    private Long termId;
+
+    /**
+     * 设备机号
+     */
+//    private Long termNo;
+
+    /**
+     * 设备名称
+     */
+//    private String termName;
+
+    /**
+     * 所属餐厅Id
+     */
+//    private Long roomId;
+
+    /**
+     * 结算账户Id
+     */
+//    private Long accountId;
+
+    /**
+     * 设备类型,见XF_TermType字典类型
+     */
+//    private String termType;
+
+    /**
+     * 设备二维码
+     */
+//    private String qrCode;
+
+    /**
+     * 工作站Id
+     */
+//    private Long stationId;
+
+    /**
+     * 扣费类型,见XF_ConsumeType字典类型
+     */
+//    private String consumeType;
+
+    /**
+     * 是否自动下载参数,见sys_yew_no字典项
+     */
+//    private String autoDown;
+
+    /**
+     * 应用系统,见YYXT数据字典类别
+     */
+//    private String useType;
+
+    /**
+     * 允许使用的卡类
+     */
+    private Long cardType;
+
+    /**
+     * 设备IP
+     */
+//    private String termIp;
+
+    /**
+     * 设备MAC地址
+     */
+//    private String termMac;
+
+    /**
+     * 设备通讯端口
+     */
+//    private Long commPort;
+
+    /**
+     * 子网掩码
+     */
+//    private String mask;
+
+    /**
+     * 服务器IP
+     */
+//    private String serverIp;
+
+    /**
+     * 服务器端口
+     */
+//    private Long serverPort;
+
+    /**
+     * 网关IP
+     */
+//    private String gatewayIp;
+
+    /**
+     * 心跳间隔,以秒为单位
+     */
+//    private Long beatInterval;
+
+    /**
+     * 通讯超时时间,以100毫秒为单位
+     */
+//    private Long timeout;
+
+    /**
+     * 允许脱机时间
+     */
+//    private Long offlineTime;
+
+    /**
+     * 高级参数
+     */
+//    private String advParam;
+
+    /**
+     * 设备参数
+     */
+//    private String posParam;
+
+    /**
+     * 费率参数
+     */
+//    private String rateParam;
+
+    /**
+     * 消费工作模式,见XF_WorkMode字典类别
+     */
+    private String workMode;
+
+    /**
+     * 开机模式,0-不需要营业员开机,1-需要营业员开机
+     */
+    private String openMode;
+
+    /**
+     * 卡上最大金额
+     */
+    private Long maxCardMoney;
+
+    /**
+     * 定值消费金额
+     */
+    private Long constantValue;
+
+    /**
+     * 编号0代表的金额
+     */
+    private Long rationZero;
+
+    /**
+     * 编号1代表的金额
+     */
+    private Long rationOne;
+
+    /**
+     * 编号2代表的金额
+     */
+    private Long rationTwo;
+
+    /**
+     * 编号3代表的金额
+     */
+    private Long rationThree;
+
+    /**
+     * 编号4代表的金额
+     */
+    private Long rationFour;
+
+    /**
+     * 编号5代表的金额
+     */
+    private Long rationFive;
+
+    /**
+     * 编号6代表的金额
+     */
+    private Long rationSix;
+
+    /**
+     * 编号7代表的金额
+     */
+    private Long rationSeven;
+
+    /**
+     * 编号8代表的金额
+     */
+    private Long rationEight;
+
+    /**
+     * 编号9代表的金额
+     */
+    private Long rationNine;
+
+    /**
+     * 每天最大消费次数,0-不限
+     */
+    private Long dayCount;
+
+    /**
+     * 每天最大消费金额
+     */
+    private Long dayMoney;
+
+    /**
+     * 每餐最大消费次数,0-不限
+     */
+    private Long mealCount;
+
+    /**
+     * 单次最大消费金额
+     */
+    private Long singleMoney;
+
+    /**
+     * 早餐消费金额
+     */
+    private Long breakfastMoney;
+
+    /**
+     * 午餐消费金额
+     */
+    private Long lunchMoney;
+
+    /**
+     * 晚餐消费金额
+     */
+    private Long supperMoney;
+
+    /**
+     * 夜宵消费金额
+     */
+    private Long nightMoney;
+
+    /**
+     * 早餐开始时间
+     */
+    private Long breakfastBegin;
+
+    /**
+     * 早餐结束时间
+     */
+    private Long breakfastEnd;
+
+    /**
+     * 午餐开始时间
+     */
+    private Long lunchBegin;
+
+    /**
+     * 午餐结束时间
+     */
+    private Long lunchEnd;
+
+    /**
+     * 晚餐开始时间
+     */
+    private Long supperBegin;
+
+    /**
+     * 晚餐结束时间
+     */
+    private Long suppeEnd;
+
+    /**
+     * 宵夜开始时间
+     */
+    private Long nightBegin;
+
+    /**
+     * 宵夜结束时间
+     */
+    private Long nightEnd;
+
+    /**
+     * 两次刷卡间隔,0-不限制
+     */
+    private Long swipeInterval;
+
+    /**
+     * 是否启用卡片有效限制,0-禁用 1-启用
+     */
+    private String termValidity;
+
+    /**
+     * 设备记录流水号
+     */
+//    private Long recordId;
+
+    /**
+     * 数据上传时间
+     */
+//    private Date uploadTime;
+
+    /**
+     * 黑名单下载时间
+     */
+//    private Date blackDownTime;
+
+    /**
+     * 最后校时时间
+     */
+//    private Date lastCheck;
+
+    /**
+     * 重启时间
+     */
+    private String rebootTime;
+
+
+
+
+}

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

@@ -1,6 +1,8 @@
 package org.dromara.backstage.consumption.service;
 
 import org.dromara.backstage.consumption.domain.XfTerm;
+import org.dromara.backstage.consumption.domain.bo.XfTermParamBo;
+import org.dromara.backstage.consumption.domain.vo.XfTermParamVo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.domain.bo.XfTermBo;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
@@ -8,6 +10,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 消费设备Service接口
@@ -25,6 +28,8 @@ public interface IXfTermService {
      */
     XfTermVo queryById(Long termId);
 
+    XfTermParamVo queryById4Param(Long termId);
+
     /**
      * 分页查询消费设备列表
      *
@@ -41,6 +46,9 @@ public interface IXfTermService {
      * @return 消费设备列表
      */
     List<XfTermVo> queryList(XfTermBo bo);
+    List<XfTermVo> queryListByIds(List<Long> ids);
+
+    public Map<Long,XfTermVo> queryMapByIds(List<Long> ids);
 
     /**
      * 新增消费设备
@@ -58,6 +66,7 @@ public interface IXfTermService {
      */
     Boolean updateByBo(XfTermBo bo);
 
+    Boolean updateParamByBo(XfTermParamBo bo);
     /**
      * 校验并批量删除消费设备信息
      *

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

@@ -1,6 +1,7 @@
 package org.dromara.backstage.consumption.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -34,6 +35,8 @@ public class XfDiscounttermServiceImpl implements IXfDiscounttermService {
 
     private final XfDiscounttermMapper baseMapper;
 
+    private final XfTermServiceImpl termService;
+
     /**
      * 查询折扣设备
      *
@@ -56,6 +59,19 @@ public class XfDiscounttermServiceImpl implements IXfDiscounttermService {
     public TableDataInfo<XfDiscounttermVo> queryPageList(XfDiscounttermBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<XfDiscountterm> lqw = buildQueryWrapper(bo);
         Page<XfDiscounttermVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+
+        List<XfDiscounttermVo> records = result.getRecords();
+        if(CollectionUtil.isNotEmpty(records)){
+            Map<Long, XfTermVo> xfTermVoMap = termService.queryMapByIds(records.stream().map(XfDiscounttermVo::getTermId).collect(Collectors.toList()));
+            records.forEach(x -> {
+                XfTermVo xfTermVo = xfTermVoMap.get(x.getTermId());
+                if(xfTermVo != null){
+                    x.setTermName(xfTermVo.getTermName());
+                    x.setTermNo(xfTermVo.getTermNo());
+                }
+            });
+        }
+
         return TableDataInfo.build(result);
     }
 

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

@@ -2,6 +2,8 @@ package org.dromara.backstage.consumption.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import org.dromara.backstage.consumption.domain.XfDiscountterm;
+import org.dromara.backstage.consumption.domain.vo.XfQuotatermVo;
+import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -35,6 +37,8 @@ public class XfLimitedtermServiceImpl implements IXfLimitedtermService {
 
     private final XfLimitedtermMapper baseMapper;
 
+    private final XfTermServiceImpl termService;
+
     @Override
     public Boolean insertByTermIds(List<Long> ids) {
         if(CollectionUtil.isEmpty(ids)) return true;
@@ -82,6 +86,17 @@ public class XfLimitedtermServiceImpl implements IXfLimitedtermService {
     public TableDataInfo<XfLimitedtermVo> queryPageList(XfLimitedtermBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<XfLimitedterm> lqw = buildQueryWrapper(bo);
         Page<XfLimitedtermVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<XfLimitedtermVo> records = result.getRecords();
+        if(CollectionUtil.isNotEmpty(records)){
+            Map<Long, XfTermVo> xfTermVoMap = termService.queryMapByIds(records.stream().map(XfLimitedtermVo::getTermId).collect(Collectors.toList()));
+            records.forEach(x -> {
+                XfTermVo xfTermVo = xfTermVoMap.get(x.getTermId());
+                if(xfTermVo != null){
+                    x.setTermName(xfTermVo.getTermName());
+                    x.setTermNo(xfTermVo.getTermNo());
+                }
+            });
+        }
         return TableDataInfo.build(result);
     }
 

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

@@ -2,6 +2,8 @@ package org.dromara.backstage.consumption.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
 import org.dromara.backstage.consumption.domain.XfDiscountterm;
+import org.dromara.backstage.consumption.domain.vo.XfDiscounttermVo;
+import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
@@ -35,6 +37,8 @@ public class XfQuotatermServiceImpl implements IXfQuotatermService {
 
     private final XfQuotatermMapper baseMapper;
 
+    private final XfTermServiceImpl termService;
+
     @Override
     public Boolean insertByTermIds(List<Long> ids) {
         if(CollectionUtil.isEmpty(ids)) return true;
@@ -82,6 +86,17 @@ public class XfQuotatermServiceImpl implements IXfQuotatermService {
     public TableDataInfo<XfQuotatermVo> queryPageList(XfQuotatermBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<XfQuotaterm> lqw = buildQueryWrapper(bo);
         Page<XfQuotatermVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+        List<XfQuotatermVo> records = result.getRecords();
+        if(CollectionUtil.isNotEmpty(records)){
+            Map<Long, XfTermVo> xfTermVoMap = termService.queryMapByIds(records.stream().map(XfQuotatermVo::getTermId).collect(Collectors.toList()));
+            records.forEach(x -> {
+                XfTermVo xfTermVo = xfTermVoMap.get(x.getTermId());
+                if(xfTermVo != null){
+                    x.setTermName(xfTermVo.getTermName());
+                    x.setTermNo(xfTermVo.getTermNo());
+                }
+            });
+        }
         return TableDataInfo.build(result);
     }
 

+ 71 - 11
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/consumption/service/impl/XfTermServiceImpl.java

@@ -1,24 +1,33 @@
 package org.dromara.backstage.consumption.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.map.MapUtil;
+import org.dromara.backstage.basics.domain.vo.PtRoomVo;
+import org.dromara.backstage.basics.service.IPtRoomService;
+import org.dromara.backstage.consumption.domain.bo.XfTermParamBo;
+import org.dromara.backstage.consumption.domain.vo.XfTermParamVo;
+import org.dromara.common.core.exception.ServiceException;
+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.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.dromara.backstage.consumption.domain.XfTerm;
 import org.dromara.backstage.consumption.domain.bo.XfTermBo;
 import org.dromara.backstage.consumption.domain.vo.XfTermVo;
 import org.dromara.backstage.consumption.mapper.XfTermMapper;
 import org.dromara.backstage.consumption.service.IXfTermService;
-import org.dromara.common.core.utils.MapstructUtils;
-import org.dromara.common.core.utils.StringUtils;
-import org.dromara.common.mybatis.core.page.PageQuery;
-import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.springframework.stereotype.Service;
 
-import java.util.Collection;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 消费设备Service业务层处理
@@ -32,6 +41,8 @@ public class XfTermServiceImpl implements IXfTermService {
 
     private final XfTermMapper baseMapper;
 
+    private final IPtRoomService roomService;
+
     /**
      * 查询消费设备
      *
@@ -43,6 +54,14 @@ public class XfTermServiceImpl implements IXfTermService {
         return baseMapper.selectVoById(termId);
     }
 
+    public XfTermParamVo queryById4Param(Long termId){
+        XfTerm xfTerm = baseMapper.selectById(termId);
+        if(xfTerm==null){
+            return null;
+        }
+        return MapstructUtils.convert(xfTerm, XfTermParamVo.class);
+    }
+
     /**
      * 分页查询消费设备列表
      *
@@ -53,6 +72,21 @@ public class XfTermServiceImpl implements IXfTermService {
     @Override
     public TableDataInfo<XfTermVo> queryPageList(XfTermBo bo, PageQuery pageQuery) {
         QueryWrapper<XfTerm> lqw = buildQueryWrapper(bo,"t");
+        Map<String, Object> params = bo.getParams();
+        Object roomId1 = params.get("roomId");
+        List<Long> roomIds = new ArrayList<>();
+        if(roomId1!=null){
+            Object type = params.get("type");
+            if(type!=null && type.toString().equals("area")){
+                List<PtRoomVo> ptRoomVos = roomService.queryRoomByAreaId(Long.parseLong(roomId1.toString()));
+                if(CollectionUtil.isNotEmpty(ptRoomVos)){
+                    roomIds.addAll(ptRoomVos.stream().map(PtRoomVo::getRoomId).toList());
+                }
+            }else {
+                roomIds.add(Long.valueOf(roomId1.toString()));
+            }
+        }
+        lqw.in(CollectionUtil.isNotEmpty(roomIds),"t.room_id", roomIds);
         Page<XfTermVo> result = baseMapper.customPageList(pageQuery.build(), lqw);
         return TableDataInfo.build(result);
     }
@@ -69,6 +103,20 @@ public class XfTermServiceImpl implements IXfTermService {
         return baseMapper.selectVoList(lqw);
     }
 
+    public List<XfTermVo> queryListByIds(List<Long> ids){
+        LambdaQueryWrapper<XfTerm> lqw = Wrappers.lambdaQuery();
+        return baseMapper.selectVoList(lqw.in(XfTerm::getTermId, ids));
+    }
+
+    public Map<Long,XfTermVo> queryMapByIds(List<Long> ids){
+        List<XfTermVo> xfTermVos = queryListByIds(ids);
+        if(CollectionUtil.isNotEmpty(xfTermVos)){
+            return xfTermVos.stream().collect(Collectors.toMap(XfTermVo::getTermId, x -> x));
+        }
+
+        return MapUtil.empty();
+    }
+
     private LambdaQueryWrapper<XfTerm> buildQueryWrapper(XfTermBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<XfTerm> lqw = Wrappers.lambdaQuery();
@@ -120,11 +168,23 @@ public class XfTermServiceImpl implements IXfTermService {
         return baseMapper.updateById(update) > 0;
     }
 
+    public Boolean updateParamByBo(XfTermParamBo bo){
+        XfTerm update = MapstructUtils.convert(bo, XfTerm.class);
+        return baseMapper.updateById(update) > 0;
+    }
+
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(XfTerm entity) {
-        //TODO 做一些数据校验,如唯一约束
+    private void validEntityBeforeSave(XfTerm entity){
+        //设备机号和设备名称必须唯一
+        Long aLong = baseMapper.selectCount(Wrappers.<XfTerm>lambdaQuery()
+            .ne(entity.getTermId() != null,XfTerm::getTermId, entity.getTermId())
+            .and(queryWrapper -> queryWrapper.eq(XfTerm::getTermNo, entity.getTermNo()).or().eq(XfTerm::getTermName, entity.getTermName())
+            ));
+        if(aLong>0){
+            throw new ServiceException("设备机号重复");
+        }
     }
 
     /**
@@ -136,8 +196,8 @@ public class XfTermServiceImpl implements IXfTermService {
      */
     @Override
     public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
-        if (isValid) {
-            //TODO 做一些业务上的校验,判断是否需要校验
+        if(isValid){
+            //可以删除
         }
         return baseMapper.deleteByIds(ids) > 0;
     }