diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java index 0822063..380e446 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppDeviceController.java @@ -24,7 +24,7 @@ import com.ruoyi.ss.device.service.DeviceAssembler; import com.ruoyi.ss.device.service.DeviceConverter; import com.ruoyi.ss.device.service.DeviceService; import com.ruoyi.ss.device.service.DeviceValidator; -import com.ruoyi.system.iot.service.IotService; +import com.ruoyi.ss.store.service.IStoreService; import com.ruoyi.web.core.annotation.DeviceAdminRequired; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -58,7 +58,7 @@ public class AppDeviceController extends BaseController { private DeviceValidator deviceValidator; @Autowired - private IotService iotService; + private IStoreService storeService; @Autowired private ScheduledExecutorService scheduledExecutorService; @@ -127,10 +127,11 @@ public class AppDeviceController extends BaseController { if (StringUtils.isAllBlank(device.getSn(), device.getMac())) { return error("设备编号和mac不能同时为空"); } + Long storeId = storeService.selectStoreIdByMerchantId(getUserId()); if (StringUtils.hasText(device.getSn())) { - return AjaxResult.success("操作成功", smDeviceService.bindBySn(device.getStoreId(), getUserId(), device.getSn())); + return AjaxResult.success("操作成功", smDeviceService.bindBySn(storeId, getUserId(), device.getSn())); } else { - return AjaxResult.success("操作成功", smDeviceService.bindByMac(device.getStoreId(), getUserId(), device.getMac())); + return AjaxResult.success("操作成功", smDeviceService.bindByMac(storeId, getUserId(), device.getMac())); } } diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppRoomController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppRoomController.java index 16bb359..eb7c584 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppRoomController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppRoomController.java @@ -15,12 +15,16 @@ import com.ruoyi.ss.room.service.IRoomAssembler; import com.ruoyi.ss.room.service.IRoomService; import com.ruoyi.ss.room.service.IRoomValidator; import com.ruoyi.ss.room.service.RoomConverter; +import com.ruoyi.ss.toilet.domain.ToiletVO; +import com.ruoyi.ss.toilet.service.IToiletService; +import com.ruoyi.ss.toilet.service.IToiletValidator; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import java.util.List; /** @@ -51,6 +55,12 @@ public class AppRoomController extends BaseController { @Autowired private IEquipmentService equipmentService; + @Resource + private IToiletService toiletService; + + @Resource + private IToiletValidator toiletValidator; + /** * 获取房间详细信息 */ @@ -95,9 +105,9 @@ public class AppRoomController extends BaseController { public AjaxResult openToilet(@PathVariable("toiletId") Long toiletId) { logger.info("开卫生间:【toiletId={}】", toiletId); - RoomVO eRoomVO = roomService.selectERoomByRoomId(toiletId); - EquipmentVO door = roomValidator.preOpenDoor(eRoomVO); - return success(roomService.openGate(door)); + ToiletVO toiletVO = toiletService.selectToiletByToiletId(toiletId); + toiletValidator.preOpenToilet(toiletVO); + return success(roomService.openGate(toiletVO)); } /** @@ -191,6 +201,17 @@ public class AppRoomController extends BaseController { return toAjax(roomService.bandRule(dto)); } + /** + * 批量应用套餐 + */ + @Log(title = "批量应用套餐", businessType = BusinessType.BANDRULE) + @PutMapping("/bandRules") + public AjaxResult bandRules(@RequestBody BandRulesDTO dto) + { + logger.info("批量应用套餐:【{}】", JSON.toJSONString(dto)); + return toAjax(roomService.bandRules(dto)); + } + /** * 解除套餐 */ diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppToiletController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppToiletController.java index d92334a..67cac91 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppToiletController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/app/AppToiletController.java @@ -66,6 +66,9 @@ public class AppToiletController extends BaseController { public AjaxResult add(@RequestBody @Validated(ValidGroup.Create.class) Toilet toilet) { logger.info("新增卫生间:【toilet={}】", JSON.toJSONString(toilet)); + if(toilet.getMerchantId() == null){ + toilet.setMerchantId(getUserId()); + } return toAjax(toiletService.insertToilet(toilet)); } diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/DeviceController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/DeviceController.java index c9ae54f..18d0f09 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/DeviceController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/DeviceController.java @@ -213,13 +213,6 @@ public class DeviceController extends BaseController return toAjax(deviceService.reboot(deviceId)); } - @ApiOperation("下架设备") - @PostMapping("/{deviceId}/offline") - public AjaxResult offline(@PathVariable("deviceId") Long deviceId) { - logger.info("下架设备:【deviceId={}】", deviceId); - return toAjax(deviceService.offline(deviceId)); - } - @ApiOperation("设备批量修改型号") @PreAuthorize("@ss.hasPermi('system:device:edit')") @Log(title = "设备", businessType = BusinessType.UPDATE) @@ -274,4 +267,14 @@ public class DeviceController extends BaseController return toAjax(deviceService.placementDevice(dto)); } + /** + * 下架设备 + */ + @ApiOperation("下架设备") + @PostMapping("/{deviceId}/offline") + public AjaxResult offline(@PathVariable("deviceId") Long deviceId) { + logger.info("下架设备:【deviceId={}】", deviceId); + return toAjax(deviceService.offline(deviceId)); + } + } diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/EquipmentController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/EquipmentController.java index 5157286..c3f6e8a 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/EquipmentController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/EquipmentController.java @@ -9,6 +9,8 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.ss.equipment.domain.Equipment; import com.ruoyi.ss.equipment.domain.EquipmentQuery; import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipment; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipmentQueryDTO; import com.ruoyi.ss.equipment.service.IEquipmentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -43,6 +45,19 @@ public class EquipmentController extends BaseController return getDataTable(list); } + /** + * 查询统一设施列表(视图) + */ + @PreAuthorize("@ss.hasPermi('system:equipment:list')") + @GetMapping("/unifiedList") + public TableDataInfo unifiedList(UnifiedEquipmentQueryDTO query) + { + startPage(); + startOrderBy(); + List list = equipmentService.selectUnifiedEquipmentList(query); + return getDataTable(list); + } + /** * 导出设施列表 */ diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/FeeRuleController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/FeeRuleController.java index bcadde9..6fa5a53 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/FeeRuleController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/FeeRuleController.java @@ -2,6 +2,8 @@ package com.ruoyi.web.controller.system; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import com.ruoyi.ss.feeRule.service.IFeeRuleAssembler; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -34,7 +36,10 @@ import com.ruoyi.common.core.page.TableDataInfo; public class FeeRuleController extends BaseController { @Autowired - private IFeeRuleService eFeeRuleService; + private IFeeRuleService feeRuleService; + + @Autowired + private IFeeRuleAssembler feeRuleAssembler; /** * 查询收费模板列表 @@ -45,7 +50,8 @@ public class FeeRuleController extends BaseController { startPage(); startOrderBy(); - List list = eFeeRuleService.selectEFeeRuleList(query); + List list = feeRuleService.selectEFeeRuleList(query); + feeRuleAssembler.assembleRoomInfo(list); return getDataTable(list); } @@ -57,7 +63,7 @@ public class FeeRuleController extends BaseController @PostMapping("/export") public void export(HttpServletResponse response, FeeRuleQuery query) { - List list = eFeeRuleService.selectEFeeRuleList(query); + List list = feeRuleService.selectEFeeRuleList(query); ExcelUtil util = new ExcelUtil(FeeRuleVO.class); util.exportExcel(response, list, "收费模板数据"); } @@ -69,7 +75,7 @@ public class FeeRuleController extends BaseController @GetMapping(value = "/{ruleId}") public AjaxResult getInfo(@PathVariable("ruleId") Long ruleId) { - return success(eFeeRuleService.selectEFeeRuleByRuleId(ruleId)); + return success(feeRuleService.selectEFeeRuleByRuleId(ruleId)); } /** @@ -80,7 +86,7 @@ public class FeeRuleController extends BaseController @PostMapping public AjaxResult add(@RequestBody FeeRule eFeeRule) { - return toAjax(eFeeRuleService.insertEFeeRule(eFeeRule)); + return toAjax(feeRuleService.insertEFeeRule(eFeeRule)); } /** @@ -91,7 +97,7 @@ public class FeeRuleController extends BaseController @PutMapping public AjaxResult edit(@RequestBody FeeRule eFeeRule) { - return toAjax(eFeeRuleService.updateEFeeRule(eFeeRule)); + return toAjax(feeRuleService.updateEFeeRule(eFeeRule)); } /** @@ -102,6 +108,6 @@ public class FeeRuleController extends BaseController @DeleteMapping("/{ruleIds}") public AjaxResult remove(@PathVariable Long[] ruleIds) { - return toAjax(eFeeRuleService.deleteEFeeRuleByRuleIds(ruleIds)); + return toAjax(feeRuleService.deleteEFeeRuleByRuleIds(ruleIds)); } } diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/RoomController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/RoomController.java index 72a7c39..71058bc 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/RoomController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/RoomController.java @@ -54,6 +54,8 @@ public class RoomController extends BaseController List list = eRoomService.selectERoomList(query); roomAssembler.assembleEquipmentList(list); roomAssembler.assembleRuleInfo2(list); + //将设备信息填充到房间中 + roomAssembler.assembleHallDevice(list); return getDataTable(list); } diff --git a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/ToiletController.java b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/ToiletController.java index 1e9af55..83b1411 100644 --- a/share-space-admin/src/main/java/com/ruoyi/web/controller/system/ToiletController.java +++ b/share-space-admin/src/main/java/com/ruoyi/web/controller/system/ToiletController.java @@ -82,6 +82,9 @@ public class ToiletController extends BaseController @PostMapping public AjaxResult add(@RequestBody Toilet toilet) { + if(toilet.getMerchantId() == null){ + toilet.setMerchantId(getUserId()); + } return toAjax(toiletService.insertToilet(toilet)); } diff --git a/share-space-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java b/share-space-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java index 5419770..c0b7f71 100644 --- a/share-space-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java +++ b/share-space-common/src/main/java/com/ruoyi/common/constant/ServiceConstants.java @@ -979,7 +979,7 @@ public class ServiceConstants { public static final String DEVICE_PLACEMENT_STATUS_PLACED = "1"; /** - * 投放状态: 2-未投放 + * 投放状态: 0-未投放 */ public static final String DEVICE_STATUS_PLACEMENT_NOT_PLACED = "0"; @@ -1038,6 +1038,20 @@ public class ServiceConstants { /**----------------------------开锁方式end----------------------------*/ + /**----------------------------大厅设施类型start----------------------------*/ + + /** + * 大厅设施类型: 1-麻将机 + */ + public static final String HALL_EQUIPMENT_TYPE_MAHJONG = "1"; + + /** + * 大厅设施类型: 2-台球桌 + */ + public static final String HALL_EQUIPMENT_TYPE_BILLIARDS = "2"; + + /**----------------------------大厅设施类型end----------------------------*/ + /**----------------------------设施类型start----------------------------*/ /** diff --git a/share-space-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java b/share-space-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java index 57f69cd..c4cb62b 100644 --- a/share-space-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java +++ b/share-space-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java @@ -76,9 +76,8 @@ public class IdUtils // 根据需要的位数截取UUID字符串 int startIndex = (uuidStr.length() - digitCount) / 2; // 确保从中间开始截取以保持一定随机性 - String shortUuid = uuidStr.substring(startIndex, startIndex + digitCount); - return shortUuid; + return uuidStr.substring(startIndex, startIndex + digitCount); } /** diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/domain/DeviceQuery.java b/share-space-system/src/main/java/com/ruoyi/ss/device/domain/DeviceQuery.java index f28f8bf..744fbcf 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/domain/DeviceQuery.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/domain/DeviceQuery.java @@ -90,4 +90,7 @@ public class DeviceQuery extends Device { @ApiModelProperty("商户ID") private Long merchantId; + + @ApiModelProperty("房间ID") + private Long roomId; } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java b/share-space-system/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java index e39a3ca..f53744f 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/domain/vo/DeviceVO.java @@ -52,10 +52,6 @@ public class DeviceVO extends Device implements IotDevice { @ApiModelProperty("型号标签列表") private List modelTags; -// @ApiModelProperty("套餐列表") -// @JsonView(DeviceView.SuitList.class) -// private List suitList; - @ApiModelProperty("二维码文本") private String qrText; diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.java b/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.java index 5477339..f14dfb1 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.java @@ -219,4 +219,9 @@ public interface DeviceMapper * 根据mac查SN */ String selectSnByMac(String mac); + + /** + * 根据房间ID查询设备ids + */ + List selectIdsByRoomId(Long roomId); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml index f6533cf..b811fdb 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/mapper/DeviceMapper.xml @@ -308,6 +308,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select sd.sn from ss_device sd where sd.mac = #{mac} and sd.deleted = false + + select LAST_INSERT_ID() @@ -498,7 +504,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update ss_device set placement_status = 0, - placement_type = null + placement_type = null, + status = 1 where device_id = #{deviceId} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceAssemblerImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceAssemblerImpl.java index c1f9246..4bfc759 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceAssemblerImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceAssemblerImpl.java @@ -1,5 +1,6 @@ package com.ruoyi.ss.device.service.impl; +import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.collection.CollectionUtils; //import com.ruoyi.dashboard.domain.vo.BillCountVo; @@ -282,8 +283,10 @@ public class DeviceAssemblerImpl implements DeviceAssembler { RoomVO roomVO = roomService.selectERoomByRoomId(equipmentVO.getRoomId()); if(Objects.nonNull(roomVO)){ StoreVO storeVO = storeService.selectEStoreByStoreId(roomVO.getStoreId()); - device.setStoreName(storeVO.getName()); - device.setStoreId(storeVO.getStoreId()); + if(Objects.nonNull(storeVO)){ + device.setStoreName(storeVO.getName()); + device.setStoreId(storeVO.getStoreId()); + } device.setRoom(roomVO); } device.setEqu(equipmentVO); diff --git a/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java index 8c3ebf3..b6cd374 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/device/service/impl/DeviceServiceImpl.java @@ -154,6 +154,15 @@ public class DeviceServiceImpl implements DeviceService */ @Override public List selectSmDeviceList(DeviceQuery smDevice) { + if(smDevice.getRoomId() != null){ + List longs = deviceMapper.selectIdsByRoomId(smDevice.getRoomId()); + // 如果longs是空的话传一个Long值为1的长度为1的数组 + if(longs.isEmpty()){ + smDevice.setDeviceIds(Collections.singletonList(0L)); + }else { + smDevice.setDeviceIds(longs); + } + } return deviceMapper.selectSmDeviceList(smDevice); } @@ -742,7 +751,8 @@ public class DeviceServiceImpl implements DeviceService @Override public Boolean bindMch(Long deviceId, Long mchId) { DeviceVO device = this.selectById(deviceId); - return this.bind(null, mchId, device); + Long storeId = storeService.selectStoreIdByMerchantId(mchId); + return this.bind(storeId, mchId, device); } @Override @@ -822,11 +832,13 @@ public class DeviceServiceImpl implements DeviceService ServiceUtil.assertion(DEVICE_PLACEMENT_STATUS_PLACED.equals(deviceVO.getPlacementStatus()),"设备已投放,请先解绑!"); String type = dto.getType(); + Long storeId; // 根据type判断更新哪个表 if (FACILITY_TYPE_TOILET_DOOR.equals(type)) {// 卫生间--查卫生间表 ToiletVO toiletVO = toiletService.selectToiletByToiletId(dto.getObjId()); ServiceUtil.assertion(toiletVO == null,"卫生间不存在"); ServiceUtil.assertion(toiletVO.getDeviceId() != null,"该卫生间已绑定过设备"); + storeId = toiletVO.getStoreId(); Toilet toilet = new Toilet(); toilet.setDeviceId(deviceVO.getDeviceId()); @@ -837,6 +849,7 @@ public class DeviceServiceImpl implements DeviceService StoreVO storeVO = storeService.selectEStoreByStoreId(dto.getObjId()); ServiceUtil.assertion(storeVO == null,"店铺不存在"); ServiceUtil.assertion(storeVO.getGateId() != null,"该店铺已绑定过大门"); + storeId = storeVO.getStoreId(); Store updateStore = new Store(); updateStore.setGateId(deviceVO.getDeviceId()); @@ -850,6 +863,7 @@ public class DeviceServiceImpl implements DeviceService ServiceUtil.assertion(equipmentVO.getDeviceId() != null,"该设施已绑定设备"); RoomVO room = roomService.selectERoomByRoomId(equipmentVO.getRoomId()); ServiceUtil.assertion(room == null,"房间不存在"); + storeId = room.getStoreId(); // 更新设施 int i = updateEquipment(dto.getObjId(), deviceVO.getDeviceId(), room); @@ -861,6 +875,7 @@ public class DeviceServiceImpl implements DeviceService device.setPlacementStatus(DEVICE_PLACEMENT_STATUS_PLACED); device.setPlacementType(dto.getType()); device.setDeviceId(deviceVO.getDeviceId()); + device.setStoreId(storeId); Boolean execute = transactionTemplate.execute(e -> { @@ -1592,7 +1607,9 @@ public class DeviceServiceImpl implements DeviceService ServiceUtil.assertion(updateCount != 1, "当前设备信息已变更,请刷新后重试"); // 删除设备与设施的关系(投放状态) - offlineDevice(deviceId, device.getPlacementType()); + if(DEVICE_PLACEMENT_STATUS_PLACED.equals(device.getPlacementStatus())){ + offlineDevice(deviceId, device.getPlacementType()); + } // 新增解绑记录 deviceBindRecordService.record(device.getUserId(), deviceId, BindRecordType.UNBIND, BindRecordUserType.MCH); diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/Equipment.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/Equipment.java index 43aee01..a2f6f7c 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/Equipment.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/Equipment.java @@ -35,14 +35,13 @@ public class Equipment extends BaseEntity{ @ApiModelProperty("设施名称") private String name; -// @Excel(name = "图片") -// @ApiModelProperty("图片") -// private String picture; - @ApiModelProperty("房间") @NotNull(message = "房间id不能为空", groups = {ValidGroup.Create.class}) private Long roomId; + @ApiModelProperty("房间名") + private String roomName; + @ApiModelProperty("店铺id") private Long storeId; @@ -58,10 +57,6 @@ public class Equipment extends BaseEntity{ @ApiModelProperty("设施类型:1-房间门;2-麻将桌;3-台球桌;4-房间灯;5-卫生间门;6-大门") private String type; -// @Excel(name = "应用到设施的套餐ids") -// @ApiModelProperty("应用到设施的套餐ids") -// private List ruleIds; - @ApiModelProperty("开锁方式: 1-通电开锁;2-断电开锁") @DictValid(type = DictTypeConstants.UNLOCK_MODE, message = "非法的开锁方式") private String unlockMode; @@ -73,12 +68,6 @@ public class Equipment extends BaseEntity{ @ApiModelProperty("开锁时长") private Integer unlockTime; -// @Excel(name = "标签列表") -// @ApiModelProperty("标签列表") -//// @NotNull(message = "标签列表不允许为空", groups = {ValidGroup.Create.class}) -//// @Size(min = 1, message = "至少需要一个标签", groups = {ValidGroup.Create.class}) -// private List tags; - @Excel(name = "商户id") @ApiModelProperty("商户id") private Long merchantId; diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentQuery.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentQuery.java index 3b33ed5..ca342cb 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentQuery.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentQuery.java @@ -10,4 +10,7 @@ public class EquipmentQuery extends Equipment{ /** 房间ids*/ private List roomIds; + /** 是否绑定设备*/ + private Boolean isBind; + } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentVO.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentVO.java index cd8a413..58bc358 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/EquipmentVO.java @@ -1,5 +1,6 @@ package com.ruoyi.ss.equipment.domain; +import com.ruoyi.common.annotation.Excel; import com.ruoyi.ss.device.domain.vo.DeviceVO; import com.ruoyi.ss.feeRule.domain.FeeRuleVO; import com.ruoyi.ss.order.domain.vo.ReservedTimePeriod; @@ -20,6 +21,10 @@ public class EquipmentVO extends Equipment{ @ApiModelProperty("已售数量") private Integer soldNum; + @Excel(name = "商户") + @ApiModelProperty("商户") + private String merchantName; + /* 最低价格套餐对象 */ @ApiModelProperty("最低价格套餐对象") private FeeRuleVO bottomPriceFeeRule; @@ -33,4 +38,7 @@ public class EquipmentVO extends Equipment{ @ApiModelProperty("套餐列表") private List feeRuleVOS; + + @ApiModelProperty("设备sn") + private String sn; } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipment.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipment.java new file mode 100644 index 0000000..63db512 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipment.java @@ -0,0 +1,87 @@ +package com.ruoyi.ss.equipment.domain.unified; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 统一设施视图实体类 + */ +@Data +public class UnifiedEquipment implements Serializable { + private static final long serialVersionUID = 1L; + + /** 店铺ID */ + @ApiModelProperty("店铺ID") + private Long storeId; + + /** 店铺名称 */ + @ApiModelProperty("店铺名称") + private String storeName; + + /** 商户ID */ + @ApiModelProperty("商户ID") + private Long merchantId; + + /** + * 设施类型 + * 1-房间门 + * 2-麻将桌 + * 3-台球桌 + * 4-房间灯 + * 5-卫生间门 + * 6-大门 + */ + @ApiModelProperty("设施类型") + private String type; + + /** + * 状态 + * 0-正常 + * 1-停用/下架 + */ + @ApiModelProperty("状态") + private String status; + + /** + * 开锁方式 + * 1-通电开锁 + * 2-断电开锁 + */ + @ApiModelProperty("开锁方式") + private String unlockMode; + + /** + * 开锁条件 + * 1-有当前订单可进入 + * 2-有历史订单可进入 + * 3-无条件 + */ + @ApiModelProperty("开锁条件") + private String unlockCondition; + + /** 开锁时长(秒) */ + @ApiModelProperty("开锁时长(秒)") + private Integer unlockTime; + + /** 设备ID */ + @ApiModelProperty("设备ID") + private Long deviceId; + + /** 设施名称 */ + @ApiModelProperty("设施名称") + private String equipmentName; + + /** + * 投放状态 + * 0-未投放 + * 1-已投放 + */ + @ApiModelProperty("投放状态") + private String placementStatus; + + /** 对象ID(设施ID/卫生间ID/店铺ID) */ + @ApiModelProperty("对象ID") + private Long objId; +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipmentQueryDTO.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipmentQueryDTO.java new file mode 100644 index 0000000..fa4ceec --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/domain/unified/UnifiedEquipmentQueryDTO.java @@ -0,0 +1,30 @@ +package com.ruoyi.ss.equipment.domain.unified; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class UnifiedEquipmentQueryDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 设施名称 */ + private String equipmentName; + + /** 设施类型 */ + private String type; + + /** 店铺ID */ + private Long storeId; + + /** 商户ID */ + private Long merchantId; + + /** 投放状态 */ + private String placementStatus; + + /** 状态 */ + private String status; + + +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.java index 027d785..203c623 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.java @@ -5,6 +5,8 @@ import java.util.List; import com.ruoyi.ss.equipment.domain.Equipment; import com.ruoyi.ss.equipment.domain.EquipmentQuery; import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipment; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipmentQueryDTO; import org.apache.ibatis.annotations.Param; /** @@ -158,6 +160,13 @@ public interface EquipmentMapper */ EquipmentVO selectDoorByRoomId(@Param("roomId") Long roomId, @Param("type") String type); + /** + * 统一查询设施列表 + * @param query 查询条件 + * @return String + */ + List selectUnifiedEquipmentList(UnifiedEquipmentQueryDTO query); + // /** // * 套餐是否被应用 // */ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.xml index 3e471eb..3cd5666 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/mapper/EquipmentMapper.xml @@ -8,39 +8,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select - equipment_id, - name, - room_id, - store_id, - store_name, - deleted, - create_by, - create_time, - type, - device_id, - status, - unlock_mode, - unlock_condition, - unlock_time - from ss_equipment + e.equipment_id, + e.name, + e.room_id, + e.room_name, + e.store_id, + e.merchant_id, + m.user_name merchantName, + e.store_name, + e.deleted, + e.create_by, + e.create_time, + e.type, + e.device_id, + d.sn, + e.status, + e.unlock_mode, + e.unlock_condition, + e.unlock_time + from ss_equipment e + left join ss_user m on m.user_id = e.merchant_id + left join ss_device d on d.device_id = e.device_id - and name like concat('%', #{query.name}, '%') - and store_id = #{query.storeId} - and query. = #{query.status} - and room_id = #{query.roomId} - and device_id = #{query.deviceId} - and type = #{query.type} - and merchant_id = #{query.merchantId} - and deleted = false - and deleted = #{query.deleted} + and e.name like concat('%', #{query.name}, '%') + and e.store_id = #{query.storeId} + and e.status = #{query.status} + and e.room_id = #{query.roomId} + and e.room_name like concat('%', #{query.roomName}, '%') + and e.device_id = #{query.deviceId} + and e.type = #{query.type} + and e.merchant_id = #{query.merchantId} + and e.deleted = false + and e.deleted = #{query.deleted} - and room_id in + and e.room_id in #{item} + + + + and e.device_id is not null + + + and e.device_id is null + + + - where room_id = #{roomId} and deleted = 0 + where e.room_id = #{roomId} and e.deleted = 0 SELECT e.equipment_id - FROM ss_equipment e where e.room_id = #{roomId} and deleted = 0 + FROM ss_equipment e where e.room_id = #{roomId} and e.deleted = 0 GROUP BY e.equipment_id @@ -91,7 +108,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - where device_id = #{deviceId} and deleted = 0 limit 1 + where e.device_id = #{deviceId} and e.deleted = 0 limit 1 - where room_id = #{roomId} and deleted = 0 and type = #{type} + where e.room_id = #{roomId} and e.deleted = 0 and e.type = #{type} - - - + insert into ss_equipment @@ -133,6 +181,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" store_id, store_name, room_id, + room_name, + merchant_id, deleted, create_by, create_time, @@ -149,6 +199,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{storeId}, #{storeName}, #{roomId}, + #{roomName}, + #{merchantId}, #{deleted}, #{createBy}, #{createTime}, @@ -186,6 +238,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" store_id = #{data.storeId}, store_name = #{data.storeName}, room_id = #{data.roomId}, + room_name = #{data.roomName}, + merchant_id = #{data.merchantId}, deleted = #{data.deleted}, create_by = #{data.createBy}, create_time = #{data.createTime}, diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/IEquipmentService.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/IEquipmentService.java index 23863d8..222c1ed 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/IEquipmentService.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/IEquipmentService.java @@ -3,6 +3,8 @@ package com.ruoyi.ss.equipment.service; import com.ruoyi.ss.equipment.domain.Equipment; import com.ruoyi.ss.equipment.domain.EquipmentQuery; import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipment; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipmentQueryDTO; import java.util.List; @@ -62,6 +64,14 @@ public interface IEquipmentService */ public int deleteEquipmentByEquipmentIds(Long[] equipmentIds); + /** + * 根据房间删除设施 + * + * @param roomIds 需要删除的房间id集合 + * @return 结果 + */ + int deleteEquipmentByRoomId(Long[] roomIds); + /** * 删除设施信息 * @@ -157,6 +167,13 @@ public interface IEquipmentService */ EquipmentVO selectDoorByRoomId(Long roomId,String type); + /** + * 统一查询设施列表 + * @param query 查询条件 + * @return String + */ + List selectUnifiedEquipmentList(UnifiedEquipmentQueryDTO query); + // /** // * 套餐是否被应用(返回设施名) // */ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/impl/EquipmentServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/impl/EquipmentServiceImpl.java index 91a401a..2500387 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/impl/EquipmentServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/equipment/service/impl/EquipmentServiceImpl.java @@ -7,6 +7,8 @@ import com.ruoyi.ss.device.service.DeviceService; import com.ruoyi.ss.equipment.domain.Equipment; import com.ruoyi.ss.equipment.domain.EquipmentQuery; import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipment; +import com.ruoyi.ss.equipment.domain.unified.UnifiedEquipmentQueryDTO; import com.ruoyi.ss.equipment.mapper.EquipmentMapper; import com.ruoyi.ss.equipment.service.IEquipmentService; import com.ruoyi.ss.room.domain.RoomQuery; @@ -16,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import static com.ruoyi.common.constant.ServiceConstants.ROOM_TYPE2_LOBBY_DEVICE; @@ -91,7 +95,11 @@ public class EquipmentServiceImpl implements IEquipmentService if(ObjectUtil.isNotNull(roomVO)){ equipment.setStoreId(roomVO.getStoreId()); equipment.setStoreName(roomVO.getStoreName()); - equipment.setMerchantId(getUserId()); + Long merchantId = roomVO.getMerchantId(); + if(ObjectUtil.isNull(roomVO.getMerchantId())){ + merchantId = getUserId(); + } + equipment.setMerchantId(merchantId); } return equipmentMapper.insertEquipment(equipment); } @@ -131,6 +139,22 @@ public class EquipmentServiceImpl implements IEquipmentService return result == null ? 0 : result; } + /** + * 根据房间删除设施 + * + * @param roomIds 需要删除的房间id集合 + * @return 结果 + */ + @Override + public int deleteEquipmentByRoomId(Long[] roomIds) { + List longs = equipmentMapper.selectAllEquipmentIdsByRoomIds(Arrays.asList(roomIds)); + if(!longs.isEmpty()){ + deleteEquipmentByEquipmentIds(longs.toArray(new Long[0])); + } + return 1; + } + + /** * 删除设施信息 * @@ -254,6 +278,16 @@ public class EquipmentServiceImpl implements IEquipmentService return equipmentMapper.selectDoorByRoomId(roomId,type); } + /** + * 统一查询设施列表 + * @param query 查询条件 + * @return String + */ + @Override + public List selectUnifiedEquipmentList(UnifiedEquipmentQueryDTO query) { + return equipmentMapper.selectUnifiedEquipmentList(query); + } + // /** // * 套餐是否被应用 // */ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRule.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRule.java index d454122..48302ce 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRule.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRule.java @@ -23,7 +23,7 @@ public class FeeRule extends BaseEntity{ private Long ruleId; - @Excel(name = "套餐模式:1-按小时计费;2-自定义模板") + @Excel(name = "套餐模式:1-押金模式;2-套餐模式") @ApiModelProperty("套餐模式") @NotBlank(message = "套餐模式不能为空",groups = {ValidGroup.Create.class}) private String mode; @@ -47,10 +47,6 @@ public class FeeRule extends BaseEntity{ @NotNull(message = "商户id不能为空",groups = {ValidGroup.Create.class}) private Long merchantId; - @Excel(name = "设备id") - @ApiModelProperty("设备id") - private String deviceId; - @Excel(name = "最低消费时长") @ApiModelProperty("最低消费时长") private BigDecimal minHours; diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleQuery.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleQuery.java index 13c8a87..021dabe 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleQuery.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleQuery.java @@ -9,4 +9,7 @@ public class FeeRuleQuery extends FeeRule { @ApiModelProperty("设备id列表") private List ruleIds; + + @ApiModelProperty("房间id") + private Long roomId; } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleVO.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleVO.java index e6a98de..0d69f80 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/domain/FeeRuleVO.java @@ -9,5 +9,9 @@ public class FeeRuleVO extends FeeRule { private String realName; - private String roomName; + /** 房间名 */ + private String roomNames; + + /** 房间id */ + private Long roomId; } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/mapper/FeeRuleMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/mapper/FeeRuleMapper.xml index f677001..8c097ff 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/mapper/FeeRuleMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/mapper/FeeRuleMapper.xml @@ -14,7 +14,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" r.price, r.`explain`, r.merchant_id, - r.device_id, r.create_by, r.create_time, r.min_hours, @@ -31,9 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and r.mode = #{query.mode} and r.hours = #{query.hours} and r.price = #{query.price} - and r.`explain` = #{query.explain} + and r.`explain` like concat('%', #{query.explain}, '%') and r.merchant_id = #{query.merchantId} - and r.device_id = #{query.deviceId} and r.deleted = false and r.deleted = #{deleted} @@ -75,7 +73,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" price, `explain`, merchant_id, - device_id, create_by, create_time, min_hours, @@ -88,7 +85,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{price}, #{explain}, #{merchantId}, - #{deviceId}, #{createBy}, #{createTime}, #{minHours}, @@ -111,7 +107,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" price = #{data.price}, `explain` = #{data.explain}, merchant_id = #{data.merchantId}, - device_id = #{data.deviceId}, create_by = #{data.createBy}, create_time = #{data.createTime}, min_hours = #{data.minHours}, diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/IFeeRuleAssembler.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/IFeeRuleAssembler.java new file mode 100644 index 0000000..7878092 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/IFeeRuleAssembler.java @@ -0,0 +1,19 @@ +package com.ruoyi.ss.feeRule.service; + +import com.ruoyi.ss.feeRule.domain.FeeRuleVO; + +import java.util.List; + +/** + * 套餐信息组装器 + * @author qzz + * 2024/4/29 + */ +public interface IFeeRuleAssembler { + + /** + * 拼接房间信息 + * @param list 店铺列表 + */ + void assembleRoomInfo(List list); +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleAssemblerImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleAssemblerImpl.java new file mode 100644 index 0000000..97187e7 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleAssemblerImpl.java @@ -0,0 +1,41 @@ +package com.ruoyi.ss.feeRule.service.impl; + +import com.ruoyi.common.utils.collection.CollectionUtils; +import com.ruoyi.ss.feeRule.domain.FeeRuleVO; +import com.ruoyi.ss.feeRule.service.IFeeRuleAssembler; +import com.ruoyi.ss.room.service.IRoomService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @author qzz + * 2025/1/20 + */ +@Service +public class FeeRuleAssemblerImpl implements IFeeRuleAssembler { + + + @Autowired + private IRoomService roomService; + + /** + * 拼接房间信息 + * @param list 店铺列表 + */ + @Override + public void assembleRoomInfo(List list) { + if (CollectionUtils.isEmptyElement(list)) { + return; + } + list.forEach(vo -> { + List roomNames = roomService.selectIsExistRule(vo.getRuleId()); + if (roomNames != null && !roomNames.isEmpty()) { + // 使用String.join将列表用逗号连接 + vo.setRoomNames(String.join(",", roomNames)); + } + }); + + } +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleServiceImpl.java index ddb2b1c..21276d3 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleServiceImpl.java @@ -9,6 +9,8 @@ import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.ss.feeRule.domain.FeeRule; import com.ruoyi.ss.feeRule.domain.FeeRuleVO; import com.ruoyi.ss.feeRule.mapper.FeeRuleMapper; +import com.ruoyi.ss.room.domain.RoomVO; +import com.ruoyi.ss.room.service.IRoomService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.ss.feeRule.domain.FeeRuleQuery; @@ -28,6 +30,9 @@ public class FeeRuleServiceImpl implements IFeeRuleService @Autowired private FeeRuleMapper eFeeRuleMapper; + @Autowired + private IRoomService roomService; + /** * 查询收费模板 * @@ -43,13 +48,18 @@ public class FeeRuleServiceImpl implements IFeeRuleService /** * 查询收费模板列表 * - * @param eFeeRule 收费模板 + * @param query 收费模板 * @return 收费模板 */ @Override - public List selectEFeeRuleList(FeeRuleQuery eFeeRule) + public List selectEFeeRuleList(FeeRuleQuery query) { - return eFeeRuleMapper.selectEFeeRuleList(eFeeRule); + if(query.getRoomId() != null){ + RoomVO roomVO = roomService.selectERoomByRoomId(query.getRoomId()); + ServiceUtil.assertion(roomVO == null, "房间不存在"); + return selectEFeeRuleListByRuleIds(roomVO.getRuleIds()); + } + return eFeeRuleMapper.selectEFeeRuleList(query); } /** diff --git a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleValidatorImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleValidatorImpl.java index c0975cb..5824c15 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleValidatorImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/feeRule/service/impl/FeeRuleValidatorImpl.java @@ -63,7 +63,7 @@ public class FeeRuleValidatorImpl implements IFeeRuleValidator { @Override public void preDelRule(Long[] ruleIds) { for (Long ruleId : ruleIds){ - // todo 是否有应用的房间或设施 + // 是否有应用的房间或设施 List roomNames = roomService.selectIsExistRule(ruleId); ServiceUtil.assertion(roomNames.isEmpty(), "该套餐已经被房间【%s】绑定,请先解绑!", roomNames); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRuleDTO.java b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRuleDTO.java index 2009e6c..6e555d1 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRuleDTO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRuleDTO.java @@ -5,6 +5,7 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.List; @Data public class BandRuleDTO{ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRulesDTO.java b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRulesDTO.java new file mode 100644 index 0000000..159c698 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/BandRulesDTO.java @@ -0,0 +1,20 @@ +package com.ruoyi.ss.room.domain; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class BandRulesDTO { + + @ApiModelProperty("套餐ids") + @NotBlank(message = "套餐ids不允许为空") + private List ruleIds; + + @ApiModelProperty("房间id") + @NotNull(message = "房间id不允许为空") + private Long roomId; +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/domain/RoomVO.java b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/RoomVO.java index a14f77a..9d21ccf 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/domain/RoomVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/domain/RoomVO.java @@ -44,4 +44,14 @@ public class RoomVO extends Room { @ApiModelProperty("deviceId") private Long deviceId; + @ApiModelProperty("收费模式") + private String billingMode; + + /* 商户名 */ + @ApiModelProperty("商户名") + private String merchantName; + + @ApiModelProperty("二维码文本") + private String qrText; + } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/mapper/RoomMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/room/mapper/RoomMapper.xml index ddc9e45..29a9431 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/mapper/RoomMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/mapper/RoomMapper.xml @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select r.room_id, + r.room_id as qr_text, r.room_name, r.store_id, r.store_name, @@ -23,6 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" r.specification, r.status, r.merchant_id, + m.user_name merchantName, r.deleted, r.rule_ids, r.wifi, @@ -30,6 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" r.equ_type, r.create_time from ss_room r + left join ss_user m on m.user_id = r.merchant_id diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomAssembler.java b/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomAssembler.java index 7720725..2714bd3 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomAssembler.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomAssembler.java @@ -106,4 +106,10 @@ public interface IRoomAssembler { * @param roomVO 房间对象 */ void assembleHallDevice(RoomVO roomVO); + + /** + * 拼接大厅设施中的device + * @param roomVO 房间对象 + */ + void assembleHallDevice(List roomVO); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomService.java b/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomService.java index e6ccc57..244bf32 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomService.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/service/IRoomService.java @@ -4,6 +4,7 @@ import java.util.List; import com.ruoyi.ss.equipment.domain.EquipmentVO; import com.ruoyi.ss.room.domain.*; +import com.ruoyi.ss.toilet.domain.ToiletVO; /** * 房间Service接口 店长 @@ -92,6 +93,13 @@ public interface IRoomService */ boolean openGate(EquipmentVO equipmentVO); + /** + * 开卫生间门 + * @param toiletVO 卫生间对象 + * @return String + */ + boolean openGate(ToiletVO toiletVO); + /** * 根据店铺查房间 * @param storeId 店铺id @@ -130,6 +138,12 @@ public interface IRoomService */ int bandRule(BandRuleDTO dto); + /** + * 批量应用套餐 + */ + int bandRules(BandRulesDTO dto); + + /** * 解除套餐 */ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomAssemblerImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomAssemblerImpl.java index 4c75744..424f87d 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomAssemblerImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomAssemblerImpl.java @@ -105,6 +105,7 @@ public class RoomAssemblerImpl implements IRoomAssembler { List feeRuleVOS = feeRuleService.selectEFeeRuleListByRuleIds(room.getRuleIds()); if(!feeRuleVOS.isEmpty()){ room.setFeeRules(feeRuleVOS); + room.setBillingMode(feeRuleVOS.get(0).getMode()); } } @@ -380,4 +381,15 @@ public class RoomAssemblerImpl implements IRoomAssembler { roomVO.setSn(deviceVO.getSn()); } } + + /** + * 拼接大厅设施中的device + * @param roomVO 房间对象 + */ + @Override + public void assembleHallDevice(List roomVO) { + for (RoomVO roomVO1 : roomVO) { + assembleHallDevice(roomVO1); + } + } } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomServiceImpl.java index 38e880b..15a4b3f 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/room/service/impl/RoomServiceImpl.java @@ -20,9 +20,11 @@ import com.ruoyi.ss.room.service.IRoomAssembler; import com.ruoyi.ss.room.service.IRoomService; import com.ruoyi.ss.store.domain.StoreVO; import com.ruoyi.ss.store.service.IStoreService; +import com.ruoyi.ss.toilet.domain.ToiletVO; import com.ruoyi.ss.wifi.domain.WifiVO; import com.ruoyi.ss.wifi.service.IWifiService; import org.apache.ibatis.annotations.Param; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; @@ -156,7 +158,8 @@ public class RoomServiceImpl implements IRoomService int i3 = createEquipment(eRoom,"房间灯",FACILITY_TYPE_ROOM_LIGHT); ServiceUtil.assertion(i3 == 0, "新增房间灯失败"); }else{ - int i4 = createEquipment(eRoom,eRoom.getRoomName(),eRoom.getEquType()); + String type = getType(eRoom.getEquType()); + int i4 = createEquipment(eRoom,eRoom.getRoomName(),type); ServiceUtil.assertion(i4 == 0, "新增设备失败"); } return Boolean.TRUE; @@ -165,13 +168,25 @@ public class RoomServiceImpl implements IRoomService return 1; } + private static @NotNull String getType(String equType) { + String type = ""; + if(equType.equals(HALL_EQUIPMENT_TYPE_MAHJONG)){ + type = FACILITY_TYPE_MAHJONG_TABLE; + }else if(equType.equals(HALL_EQUIPMENT_TYPE_BILLIARDS)){ + type = FACILITY_TYPE_BILLIARD_TABLE; + } + return type; + } + private int createEquipment(Room eRoom,String equipmentName,String type) { Equipment equipment = new Equipment(); equipment.setRoomId(eRoom.getRoomId()); + equipment.setRoomName(eRoom.getRoomName()); equipment.setName(equipmentName); equipment.setType(type); equipment.setStoreId(eRoom.getStoreId()); equipment.setStoreName(eRoom.getStoreName()); + equipment.setMerchantId(eRoom.getMerchantId()); return equipmentService.insertEquipment(equipment); } @@ -200,6 +215,10 @@ public class RoomServiceImpl implements IRoomService @Override public int deleteERoomByRoomIds(Long[] roomIds) { + // 关联删除房间下的设施 + equipmentService.deleteEquipmentByRoomId + (roomIds); + return roomMapper.deleteERoomByRoomIds(roomIds); } @@ -224,6 +243,15 @@ public class RoomServiceImpl implements IRoomService return deviceService.switchDevice(equipmentVO.getDeviceId(), true); } + /** + * 开卫生间门 + * @param toiletVO 卫生间对象 + */ + @Override + public boolean openGate(ToiletVO toiletVO) { + return deviceService.switchDevice(toiletVO.getDeviceId(), true); + } + /** * 根据店铺查房间 * @param storeId 店铺id @@ -317,6 +345,22 @@ public class RoomServiceImpl implements IRoomService return i; } + /** + * 批量应用套餐 + */ + @Override + public int bandRules(BandRulesDTO dto) { + RoomVO roomVO = roomMapper.selectERoomByRoomId(dto.getRoomId()); + ServiceUtil.assertion(roomVO == null,"房间不存在"); + // 更新房间 + Room room = new Room(); + room.setRuleIds(dto.getRuleIds()); + room.setRoomId(dto.getRoomId()); + int i = updateERoom(room); + ServiceUtil.assertion(i == 0, "更新房间失败"); + return i; + } + /** * 解除套餐 */ diff --git a/share-space-system/src/main/java/com/ruoyi/ss/store/domain/StoreVO.java b/share-space-system/src/main/java/com/ruoyi/ss/store/domain/StoreVO.java index f83c79a..e086896 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/store/domain/StoreVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/store/domain/StoreVO.java @@ -3,6 +3,7 @@ package com.ruoyi.ss.store.domain; import com.ruoyi.ss.carousel.domain.CarouselVO; import com.ruoyi.ss.room.domain.RoomVO; import com.ruoyi.ss.toilet.domain.ToiletVO; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; @@ -31,6 +32,9 @@ public class StoreVO extends Store { /** 卫生间数 */ private int toiletNum; + /** 商户名 */ + private String merchantName; + /** 距离公里 */ private Double distance; @@ -65,5 +69,8 @@ public class StoreVO extends Store { /** 总设备数 */ private int totalDeviceNum; + @ApiModelProperty("二维码文本") + private String qrText; + } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.java b/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.java index 708e91c..3ac5d50 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.java @@ -96,4 +96,11 @@ public interface StoreMapper * @return */ int selectCount(Long userId); + + /** + * 根据商户id获取店铺id + * @param mchId + * @return + */ + Long selectStoreIdByMerchantId(Long mchId); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.xml index f2ad02c..cdd2260 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/store/mapper/StoreMapper.xml @@ -13,6 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select s.store_id, + s.store_id as qr_text, s.name, s.type, s.contact_name, @@ -35,6 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" s.server_phone, s.simple_address, s.merchant_id, + m.user_name merchantName, s.status, s.gate_sn, s.gate_id, @@ -50,6 +52,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" c.name as cityName from ss_store s left join ss_city c on c.city_id = s.city_id + left join ss_user m on m.user_id = s.merchant_id @@ -108,6 +111,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select count(1) from ss_store where merchant_id = #{userId} and deleted = 0 + + UPDATE ss_store SET type_tags = CONCAT( CASE WHEN type_tags IS NOT NULL AND type_tags != '' THEN CONCAT( type_tags, ',' ) END, #{type} ) diff --git a/share-space-system/src/main/java/com/ruoyi/ss/store/service/IStoreService.java b/share-space-system/src/main/java/com/ruoyi/ss/store/service/IStoreService.java index 3d345b9..c8c6433 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/store/service/IStoreService.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/store/service/IStoreService.java @@ -128,4 +128,11 @@ public interface IStoreService * @return int */ int selectCount(Long userId); + + /** + * 根据商户id获取店铺id + * @param mchId 商户id + * @return Long + */ + Long selectStoreIdByMerchantId(Long mchId); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/store/service/impl/StoreServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/store/service/impl/StoreServiceImpl.java index a8b809a..0992027 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/store/service/impl/StoreServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/store/service/impl/StoreServiceImpl.java @@ -171,7 +171,11 @@ public class StoreServiceImpl implements IStoreService public int insertEStore(Store eStore) { eStore.setCreateTime(DateUtils.getNowDate()); - eStore.setMerchantId(getUserId()); + Long merchantId = eStore.getMerchantId(); + if(merchantId == null){ + merchantId = getUserId(); + } + eStore.setMerchantId(merchantId); setCityId(eStore); Boolean execute = transactionTemplate.execute(e -> { int i = storeMapper.insertEStore(eStore); @@ -410,6 +414,16 @@ public class StoreServiceImpl implements IStoreService return storeMapper.selectCount(userId); } + /** + * 根据商户id获取店铺id + * @param mchId 商户id + * @return Long + */ + @Override + public Long selectStoreIdByMerchantId(Long mchId) { + return storeMapper.selectStoreIdByMerchantId(mchId); + } + private Double getDistance(String phoneLon, String phoneLat, BigDecimal lng, BigDecimal lat) { double[] point1 = {Double.parseDouble(phoneLon), Double.parseDouble(phoneLat)}; double[] point2 = {lng.doubleValue(), lat.doubleValue()}; diff --git a/share-space-system/src/main/java/com/ruoyi/ss/toilet/domain/ToiletVO.java b/share-space-system/src/main/java/com/ruoyi/ss/toilet/domain/ToiletVO.java index a0189e2..6d63d2b 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/toilet/domain/ToiletVO.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/toilet/domain/ToiletVO.java @@ -1,6 +1,7 @@ package com.ruoyi.ss.toilet.domain; import com.ruoyi.ss.device.domain.vo.DeviceVO; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @@ -9,4 +10,7 @@ public class ToiletVO extends Toilet{ private String userName; private DeviceVO device; + + @ApiModelProperty("二维码文本") + private String qrText; } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/toilet/mapper/ToiletMapper.xml b/share-space-system/src/main/java/com/ruoyi/ss/toilet/mapper/ToiletMapper.xml index 3ee07a1..10b84ae 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/toilet/mapper/ToiletMapper.xml +++ b/share-space-system/src/main/java/com/ruoyi/ss/toilet/mapper/ToiletMapper.xml @@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select t.toilet_id, + t.toilet_id as qr_text, t.name, t.store_id, t.store_name, diff --git a/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/IToiletValidator.java b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/IToiletValidator.java new file mode 100644 index 0000000..4553d94 --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/IToiletValidator.java @@ -0,0 +1,23 @@ +package com.ruoyi.ss.toilet.service; + +import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.room.domain.RoomVO; +import com.ruoyi.ss.toilet.domain.ToiletVO; + +/** + * 卫生间校验Service接口 + * + * @author qzz + * @date 2024-11-20 + */ +public interface IToiletValidator +{ + /** + * 开卫生间前校验 + * + * @param toilet 卫生间对象 + * @return 卫生间 + */ + public void preOpenToilet(ToiletVO toilet); + +} diff --git a/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletServiceImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletServiceImpl.java index 377a51d..1a50b31 100644 --- a/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletServiceImpl.java +++ b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletServiceImpl.java @@ -75,7 +75,6 @@ public class ToiletServiceImpl implements IToiletService StoreVO storeVO = storeService.selectEStoreByStoreId(toilet.getStoreId()); ServiceUtil.assertion(storeVO == null,"店铺不存在"); toilet.setStoreName(storeVO.getName()); - toilet.setMerchantId(getUserId()); return toiletMapper.insertToilet(toilet); } diff --git a/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletValidatorImpl.java b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletValidatorImpl.java new file mode 100644 index 0000000..29f4fec --- /dev/null +++ b/share-space-system/src/main/java/com/ruoyi/ss/toilet/service/impl/ToiletValidatorImpl.java @@ -0,0 +1,68 @@ +package com.ruoyi.ss.toilet.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.constant.ServiceConstants; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ServiceUtil; +import com.ruoyi.ss.device.service.DeviceService; +import com.ruoyi.ss.equipment.domain.EquipmentVO; +import com.ruoyi.ss.equipment.service.IEquipmentService; +import com.ruoyi.ss.feeRule.domain.FeeRuleVO; +import com.ruoyi.ss.feeRule.service.IFeeRuleService; +import com.ruoyi.ss.feeRule.service.IFeeRuleValidator; +import com.ruoyi.ss.order.domain.OrderVO; +import com.ruoyi.ss.order.service.IOrderService; +import com.ruoyi.ss.room.domain.BandRuleDTO; +import com.ruoyi.ss.room.domain.RoomVO; +import com.ruoyi.ss.room.mapper.RoomMapper; +import com.ruoyi.ss.room.service.IRoomAssembler; +import com.ruoyi.ss.room.service.IRoomService; +import com.ruoyi.ss.room.service.IRoomValidator; +import com.ruoyi.ss.toilet.domain.ToiletVO; +import com.ruoyi.ss.toilet.service.IToiletValidator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static com.ruoyi.common.constant.ServiceConstants.LOCK_CONDITION_CURRENT_ORDER; +import static com.ruoyi.common.constant.ServiceConstants.LOCK_CONDITION_HISTORICAL_ORDER; +import static com.ruoyi.common.utils.SecurityUtils.getUserId; + +/** + * 卫生间Service业务层处理 + * + * @author qzz + * @date 2024-11-20 + */ +@Service +public class ToiletValidatorImpl implements IToiletValidator +{ + + @Autowired + private IOrderService orderService; + + /** + * 开卫生间前校验 + * + * @param toilet 卫生间对象 + * @return 卫生间 + */ + @Override + public void preOpenToilet(ToiletVO toilet) { + ServiceUtil.assertion(ObjectUtil.isNull(toilet), "卫生间不存在"); + String unlockCondition = toilet.getUnlockCondition(); // 获取卫生间门的开锁条件 + if(LOCK_CONDITION_CURRENT_ORDER.equals(unlockCondition)){ + // 有当前订单可进入 + List inProgressOrder = orderService.getInProgressOrderListByUserId(getUserId()); + ServiceUtil.assertion(inProgressOrder.isEmpty(), "当前无订单,不能开门,请先下单!"); + } else if(LOCK_CONDITION_HISTORICAL_ORDER.equals(unlockCondition)){ + // 有历史订单可进入 + List historicalOrderList = orderService.getHistoricalOrderListByUserId(getUserId()); + ServiceUtil.assertion(historicalOrderList.isEmpty(), "无历史订单,不能开门,请先下单!"); + } + } + +}