Commit 8187d59e by 吕明尚

管理员电控和门控区分开

parent c16c5f82
......@@ -184,6 +184,22 @@ public class SStoreController extends BaseController
return toAjax(sStoreService.insertStoreConsumers(storeConsumer));
}
/**
* 修改管理员控制
*
* @return
*/
@PutMapping("/consumer/update")
public AjaxResult update(@RequestBody SStoreConsumerVo storeConsumer) {
return success(sStoreService.updateStoreConsumers(storeConsumer));
}
@GetMapping("/consumer/query")
public AjaxResult query(SStoreConsumerVo dto) {
SConsumerVo sConsumerVo = sStoreService.queryBySStoreConsumer(dto);
return success(sConsumerVo);
}
@GetMapping("/scope")
public AjaxResult scope() {
......
......@@ -12,6 +12,8 @@ public enum CouponTypeEnum {
MINUS(3, "3", "满减券"),
DURATION(4, "4", "时长券"),
PACKAGE(5, "5", "套餐劵"),
//金额券
AMOUNT(6, "6", "金额券"),
;
private Integer code;
......
package share.web.controller.system;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -8,16 +7,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import share.common.core.controller.BaseController;
import share.common.core.domain.AjaxResult;
import share.common.enums.DeviceOpSourceEnum;
import share.common.enums.PositionEnum;
import share.common.enums.RoleTypeEnum;
import share.system.domain.SConsumer;
import share.system.domain.vo.DeviceParamVo;
import share.system.mapper.SStoreConsumerMapper;
import share.system.service.DeviceOpService;
import share.system.service.SConsumerService;
import java.util.List;
/**
* 设备信息Controller
......@@ -30,10 +21,6 @@ import java.util.List;
public class DeviceController extends BaseController {
@Autowired
private DeviceOpService deviceOpService;
@Autowired
private SConsumerService consumerService;
@Autowired
private SStoreConsumerMapper storeConsumerMapper;
private static final long FIVE = 5;
......@@ -42,17 +29,7 @@ public class DeviceController extends BaseController {
*/
@PostMapping(value = "/openOrClose")
public AjaxResult openOrClose(@RequestBody DeviceParamVo deviceParam) {
SConsumer user = consumerService.getInfo();
if (!user.getRoleType().equals(RoleTypeEnum.CLEANER.getCode())) {
throw new RuntimeException("当前用户不是店员");
}
List<Long> longs = storeConsumerMapper.selectByConsumerId(user.getId(), PositionEnum.ADMIN.getCode());
if (CollectionUtils.isEmpty(longs)) {
throw new RuntimeException("当前用户不是管理员");
}
deviceOpService.openOrCloseDevice(deviceParam.getRoomId(), user.getPhone(), deviceParam.getOpType(), false, FIVE,
DeviceOpSourceEnum.DEVICE_SOURCE_30.getCode());
return toAjax(true);
return toAjax(deviceOpService.openOrClose(deviceParam));
}
}
......@@ -99,4 +99,13 @@ public class SConsumer implements Serializable
//车牌号
private String numberplate;
@TableField(exist = false)
private Integer gating;
@TableField(exist = false)
private Integer controller;
@TableField(exist = false)
private Integer position;
}
package share.system.domain;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
/**
* @className: share.system.domain.SStoreConsumer
......@@ -20,4 +18,10 @@ public class SStoreConsumer {
private Integer position;
//电控
private Integer controller;
//门控
private Integer gating;
}
......@@ -20,4 +20,10 @@ public class SConsumerVo extends SConsumer {
private Boolean isAdmin;
private Long consumerId;
private Integer controller;
private Integer gating;
}
package share.system.domain.vo;
import lombok.Data;
import share.system.domain.SStoreConsumer;
@Data
public class SStoreConsumerVo {
......@@ -15,6 +14,10 @@ public class SStoreConsumerVo {
*/
private Long consumerId;
private Integer controller;
private Integer gating;
private Integer position;
private Long[] consumerIds;
......
......@@ -2,9 +2,9 @@ package share.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import share.system.domain.SStore;
import share.system.domain.SStoreConsumer;
import share.system.domain.SysUserRole;
import share.system.domain.vo.SConsumerVo;
import share.system.domain.vo.SStoreConsumerVo;
import java.util.List;
......@@ -37,4 +37,8 @@ public interface SStoreConsumerMapper extends BaseMapper<SStoreConsumer> {
List<Long> selectByConsumerId(@Param("consumerId") Long consumerId, @Param("position") Integer position);
List<SStoreConsumer> queryByConsumerId(Long id);
int updateBySStoreConsumer(SStoreConsumerVo storeConsumer);
SConsumerVo queryBySStoreConsumer(SStoreConsumerVo dto);
}
......@@ -121,4 +121,5 @@ public interface DeviceOpService {
*/
void sendMqtt(MqttxVo mqttxVo, Long storeId);
boolean openOrClose(DeviceParamVo deviceParam);
}
......@@ -3,6 +3,7 @@ package share.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
import share.system.domain.SStore;
import share.system.domain.SStoreConsumer;
import share.system.domain.vo.SConsumerVo;
import share.system.domain.vo.SStoreConsumerVo;
import share.system.domain.vo.SStoreDto;
import share.system.domain.vo.SStoreVo;
......@@ -107,4 +108,8 @@ public interface ISStoreService extends IService<SStore>
List<SStoreVo> convertDosToVosSortByDst(List<SStore> storeList, SStoreRequest request);
List<SStoreVo> queryByStoreIds(SStoreDto dto);
int updateStoreConsumers(SStoreConsumerVo storeConsumer);
SConsumerVo queryBySStoreConsumer(SStoreConsumerVo dto);
}
......@@ -2,34 +2,37 @@ package share.system.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import share.common.constant.Constants;
import share.common.constant.MqttConstants;
import share.common.core.redis.RedisUtil;
import share.common.enums.DeviceType;
import share.common.enums.OpTypeEnum;
import share.common.utils.SecurityUtils;
import share.system.domain.DeviceDto;
import share.system.mqtt.MqttGatewayComponent;
import share.system.domain.Device;
import share.system.domain.SRoom;
import share.common.enums.*;
import share.system.domain.*;
import share.system.domain.vo.DeviceParamVo;
import share.system.domain.vo.MqttxVo;
import share.system.mapper.DeviceMapper;
import share.system.mapper.SRoomMapper;
import share.system.mapper.SStoreConsumerMapper;
import share.system.mqtt.MqttGatewayComponent;
import share.system.service.DeviceLogService;
import share.system.service.DeviceOpService;
import share.system.service.MqttxService;
import share.system.service.SConsumerService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @className: share.system.service.impl.DeviceOpService
......@@ -54,6 +57,10 @@ public class DeviceOpServiceImpl implements DeviceOpService {
private DeviceMapper deviceMapper;
@Autowired
private RedisUtil redisUtil;
@Autowired
private SConsumerService consumerService;
@Autowired
private SStoreConsumerMapper storeConsumerMapper;
/**
* 设备消息redis缓存
......@@ -121,6 +128,46 @@ public class DeviceOpServiceImpl implements DeviceOpService {
deviceLogService.addDeviceLog(mqttxVo, mqttxVo.getPhone());
}
@Override
public boolean openOrClose(DeviceParamVo deviceParam) {
SConsumer user = consumerService.getInfo();
if (!user.getRoleType().equals(RoleTypeEnum.CLEANER.getCode())) {
throw new RuntimeException("当前用户不是店员");
}
List<Long> longs = storeConsumerMapper.selectByConsumerId(user.getId(), PositionEnum.ADMIN.getCode());
if (CollectionUtils.isEmpty(longs)) {
throw new RuntimeException("当前用户不是管理员");
}
SRoom room = roomMapper.selectSRoomById(deviceParam.getRoomId());
LambdaQueryWrapper<Device> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Device::getRoomId, deviceParam.getRoomId());
if (OpTypeEnum.OPEN_DOOR.getCode().equals(deviceParam.getOpType()) || OpTypeEnum.LOCK_DOOR.getCode().equals(deviceParam.getOpType())) {
queryWrapper.eq(Device::getDevType, DeviceType.DEVICE_CCEE.getCode());
} else if (OpTypeEnum.GET_ELECTRIC.getCode().equals(deviceParam.getOpType()) || OpTypeEnum.CUT_ELECTRIC.getCode().equals(deviceParam.getOpType())) {
queryWrapper.eq(Device::getDevType, DeviceType.DEVICE_0001.getCode());
}
List<Device> list = deviceMapper.selectList(queryWrapper);
Map<Long, SStoreConsumer> consumerMap = storeConsumerMapper.selectList(new LambdaQueryWrapper<SStoreConsumer>()
.eq(SStoreConsumer::getConsumerId, user.getId())
.eq(SStoreConsumer::getPosition, PositionEnum.ADMIN.getCode())
).stream().collect(Collectors.toMap(SStoreConsumer::getStoreId, Function.identity()));
list.stream().forEach(item -> {
if (room.getId().equals(item.getRoomId()) && ObjectUtil.isNotEmpty(consumerMap.get(room.getStoreId()))) {
if (item.getDevType().equals(DeviceType.DEVICE_CCEE.getCode()) && consumerMap.get(room.getStoreId()).getGating().equals(YesNoEnum.yes.getIndex())) {
openOrCloseDevice(deviceParam.getRoomId(), user.getPhone(), deviceParam.getOpType(), false, BigDecimal.ZERO.longValue(),
DeviceOpSourceEnum.DEVICE_SOURCE_30.getCode());
} else if (item.getDevType().equals(DeviceType.DEVICE_0001.getCode()) && consumerMap.get(room.getStoreId()).getController().equals(YesNoEnum.yes.getIndex())) {
openOrCloseDevice(deviceParam.getRoomId(), user.getPhone(), deviceParam.getOpType(), false, BigDecimal.ZERO.longValue(),
DeviceOpSourceEnum.DEVICE_SOURCE_30.getCode());
} else {
throw new RuntimeException("当前用户没有权限");
}
}
});
return true;
}
/**
* 管理系统开门、通电、断电
* @param deviceParam
......
......@@ -106,33 +106,7 @@ public class OrderPayServiceImpl implements OrderPayService {
return response;
}
// /**
// * 充值支付(扫呗-微信支付)
// * @param recharge 支付参数
// * @return
// */
// @Override
// public RechargePayResultResponse saobeiRechargePayment(Recharge recharge) {
// RechargePayResultResponse response = new RechargePayResultResponse();
// response.setRechargeNo(recharge.getRechargeNo());
// response.setPayType(PayTypeEnum.getEnumByCode(recharge.getPayType()).getValue());
// response.setStatus(YesNoEnum.no.getFlag());
// // 扫呗支付
// ConcurrentHashMap<String, String> unifiedorder = saobeiUnifiedRecharge(recharge);
// WxPayJsResultVo vo = new WxPayJsResultVo();
// vo.setAppId(unifiedorder.get("appId"));
// vo.setNonceStr(unifiedorder.get("nonceStr"));
// vo.setPackages(unifiedorder.get("package"));
// vo.setSignType(unifiedorder.get("signType"));
// vo.setTimeStamp(unifiedorder.get("timeStamp"));
// vo.setPaySign(unifiedorder.get("paySign"));
// // 更新商户订单号
// recharge.setOutTradeNo(unifiedorder.get("outTradeNo"));
// recharge.setTerminalTrace(unifiedorder.get("terminalTrace"));
// rechargeService.updateById(recharge);
// response.setJsConfig(vo);
// return response;
// }
/**
......@@ -257,6 +231,34 @@ public class OrderPayServiceImpl implements OrderPayService {
return vo;
}
// /**
// * 充值支付(扫呗-微信支付)
// * @param recharge 支付参数
// * @return
// */
// @Override
// public RechargePayResultResponse saobeiRechargePayment(Recharge recharge) {
// RechargePayResultResponse response = new RechargePayResultResponse();
// response.setRechargeNo(recharge.getRechargeNo());
// response.setPayType(PayTypeEnum.getEnumByCode(recharge.getPayType()).getValue());
// response.setStatus(YesNoEnum.no.getFlag());
// // 扫呗支付
// ConcurrentHashMap<String, String> unifiedorder = saobeiUnifiedRecharge(recharge);
// WxPayJsResultVo vo = new WxPayJsResultVo();
// vo.setAppId(unifiedorder.get("appId"));
// vo.setNonceStr(unifiedorder.get("nonceStr"));
// vo.setPackages(unifiedorder.get("package"));
// vo.setSignType(unifiedorder.get("signType"));
// vo.setTimeStamp(unifiedorder.get("timeStamp"));
// vo.setPaySign(unifiedorder.get("paySign"));
// // 更新商户订单号
// recharge.setOutTradeNo(unifiedorder.get("outTradeNo"));
// recharge.setTerminalTrace(unifiedorder.get("terminalTrace"));
// rechargeService.updateById(recharge);
// response.setJsConfig(vo);
// return response;
// }
// /**
// * 预下单 (扫呗-微信)
// * @param recharge 充值对象
......
......@@ -972,7 +972,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
//自旋10次,每次等待1秒
String lockResult = "";
for (int i = 0; i < 10; i++) {
lockResult = redisUtil.lockWithTimeout(Constants.ORDER_LOCK_KEY + request.getRoomId(), 11, 1);
lockResult = redisUtil.lockWithTimeout(Constants.ORDER_LOCK_KEY + request.getRoomId(), 11, 2);
if (StringUtils.isBlank(lockResult)) {
Thread.sleep(1000L);
} else {
......@@ -987,7 +987,7 @@ public class SOrderServiceImpl extends ServiceImpl<SOrderMapper, SOrder> impleme
private void unLockOrder(CreateOrderRequest request,String keyValue) {
if(StringUtils.isNotBlank(keyValue)) {
redisUtil.unLock(Constants.ORDER_LOCK_KEY + request.getRoomId(), keyValue, 1);
redisUtil.unLock(Constants.ORDER_LOCK_KEY + request.getRoomId(), keyValue, 2);
}
}
......
......@@ -356,6 +356,16 @@ public class SStoreServiceImpl extends ServiceImpl<SStoreMapper, SStore> impleme
return convertDosToVosSortByDst(sStoreList, request);
}
@Override
public int updateStoreConsumers(SStoreConsumerVo storeConsumer) {
return storeConsumerMapper.updateBySStoreConsumer(storeConsumer);
}
@Override
public SConsumerVo queryBySStoreConsumer(SStoreConsumerVo dto) {
return storeConsumerMapper.queryBySStoreConsumer(dto);
}
/**
* 门店DO集合转换VO集合,按距离排序
*
......@@ -584,6 +594,10 @@ public class SStoreServiceImpl extends ServiceImpl<SStoreMapper, SStore> impleme
if (CollectionUtils.isEmpty(storeIds)) {
return new ArrayList<>();
}
LambdaQueryWrapper<SStoreConsumer> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SStoreConsumer::getConsumerId, user.getId());
queryWrapper.eq(SStoreConsumer::getPosition, PositionEnum.ADMIN.getCode());
Map<Long, SStoreConsumer> consumerMap = storeConsumerMapper.selectList(queryWrapper).stream().collect(Collectors.toMap(SStoreConsumer::getStoreId, Function.identity()));
//查询所有门店
List<SStore> sStores = baseMapper.selectList(new LambdaQueryWrapper<SStore>().in(SStore::getId, storeIds));
List<SStoreVo> voList = new ArrayList<>();
......@@ -614,7 +628,14 @@ public class SStoreServiceImpl extends ServiceImpl<SStoreMapper, SStore> impleme
return;
}
if (room.getId().compareTo(roomId) == 0) {
devices.add(device);
SStoreConsumer sStoreConsumer = consumerMap.get(room.getStoreId());
if (ObjectUtil.isNotEmpty(sStoreConsumer)) {
if (sStoreConsumer.getController().equals(YesNoEnum.yes.getIndex()) && device.getDevType().equals(DeviceType.DEVICE_0001.getCode())) {
devices.add(device);
} else if (sStoreConsumer.getGating().equals(YesNoEnum.yes.getIndex()) && device.getDevType().equals(DeviceType.DEVICE_CCEE.getCode())) {
devices.add(device);
}
}
}
});
room.setDeviceList(devices);
......
......@@ -23,6 +23,9 @@
<result property="createTime" column="create_time" />
<result property="lastLoginTime" column="last_login_time" />
<result property="numberplate" column="numberplate"/>
<result property="controller" column="controller"/>
<result property="gating" column="gating"/>
<result property="position" column="position"/>
</resultMap>
<sql id="selectSConsumerVo">
......@@ -71,7 +74,8 @@
<select id="selectAllocatedList" parameterType="SConsumerVo" resultMap="SConsumerResult">
select t1.id, t1.account, t1.nick_name, t1.avatar, t1.phone, t1.level, t1.role_type, t1.sex, t1.addres, t1.amount,
t1.free_amount, t1.total_times, t1.duration, t1.status, t1.pwd, t1.create_time, t1.last_login_time
t1.free_amount, t1.total_times, t1.duration, t1.status, t1.pwd, t1.create_time,
t1.last_login_time,t2.gating,t2.controller,t2.position
from s_consumer t1
left join s_store_consumer t2 on t2.consumer_id = t1.id
where t1.role_type = '1' and t2.position=#{position} and t2.store_id = #{storeId}
......
......@@ -8,7 +8,17 @@
<result property="storeId" column="store_id" />
<result property="consumerId" column="consumer_id" />
<result property="position" column="position"/>
<result property="gating" column="gating"/>
<result property="controller" column="controller"/>
</resultMap>
<update id="updateBySStoreConsumer">
update s_store_consumer
set controller = #{controller},
gating = #{gating}
where store_id = #{storeId}
and consumer_id = #{consumerId}
and position = #{position}
</update>
<delete id="deleteByConsumerId" parameterType="Long">
delete from s_store_consumer where consumer_id=#{consumerId}
......@@ -30,6 +40,33 @@
from s_store_consumer
where consumer_id = #{consumerId}
</select>
<select id="queryBySStoreConsumer" resultType="share.system.domain.vo.SConsumerVo">
select t1.id,
t1.account,
t1.nick_name,
t1.avatar,
t1.phone,
t1.level,
t1.role_type,
t1.sex,
t1.addres,
t1.amount,
t1.free_amount,
t1.total_times,
t1.duration,
t1.status,
t1.pwd,
t1.create_time,
t1.last_login_time,
t2.gating,
t2.controller
from s_consumer t1
left join s_store_consumer t2 on t2.consumer_id = t1.id
where t1.role_type = '1'
and t2.position = #{position}
and t2.store_id = #{storeId}
and t2.consumer_id = #{consumerId}
</select>
<delete id="deleteSStoreConsumer" parameterType="Long">
delete from s_store_consumer where consumer_id in
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment