51fd6842 by 李仁豪

[feat] 增加绑定关系映射

1 parent 1a4c983f
Showing 19 changed files with 396 additions and 38 deletions
......@@ -76,5 +76,11 @@
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
</project>
......
package com.ql.backend.core.infrastructure.exception;
/**
* @author lirenhao
* date: 2022/9/15 10:29
*/
public class CommonException extends RuntimeException {
public CommonException(String errorMsg) {
super(errorMsg);
}
public static CommonException create(String errorMsg) {
return new CommonException(errorMsg);
}
}
/**
* @author lirenhao
* date: 2022/9/1 00:19
*/
package com.ql.backend.core.infrastructure;
......@@ -95,6 +95,12 @@
<version>5.8.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
......
package com.ql.backend.ploycenter.application.impl;
import com.alibaba.fastjson.JSON;
import com.ql.backend.core.infrastructure.exception.CommonException;
import com.ql.backend.core.interfaces.vo.ApiResponse;
import com.ql.backend.core.interfaces.vo.PageVO;
import com.ql.backend.ploycenter.application.PloyService;
import com.ql.backend.ploycenter.domain.condition.PloyCondition;
import com.ql.backend.ploycenter.domain.po.BindPloyDevicePO;
import com.ql.backend.ploycenter.domain.po.BindShopPloyPO;
import com.ql.backend.ploycenter.domain.po.PloyPO;
import com.ql.backend.ploycenter.infrastructure.adapter.ControlCenterAdapter;
import com.ql.backend.ploycenter.infrastructure.converter.mapper.PloyConverter;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.BindPloyDeviceDao;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.BindShopPloyDao;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.PloyDao;
import com.ql.backend.ploycenter.interfaces.request.PloyCreateRequest;
import com.ql.backend.ploycenter.interfaces.request.PloyUpdateRequest;
......@@ -20,9 +25,8 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.Set;
/**
* @author lirenhao
......@@ -38,19 +42,23 @@ public class PloyServiceImpl implements PloyService {
@Resource
private PloyDao ployDao;
@Resource
private BindPloyDeviceDao bindPloyDeviceDao;
@Resource
private BindShopPloyDao bindShopPloyDao;
@Override
@Transactional
public String createPloy(PloyCreateRequest request) {
PloyPO po = PloyConverter.INSTANCE.convertRequest2Po(request);
po.setPloyId(UUID.randomUUID().toString());
po.setGmtCreated(new Date());
po.setGmtModified(new Date());
po.setIsDeleted(Boolean.FALSE);
PloyPO po = PloyPO.create(request);
ployDao.save(po);
if (!CollectionUtils.isEmpty(request.getBindShopIds())) {
/* todo 绑定店铺 */
}
/* 绑定店铺 */
reBindShops(po.getPloyId(), request.getBindShopIds());
/* 绑定设备 */
reBindDevices(po.getPloyId(), request.getBindDeviceIds());
return po.getPloyId();
}
......@@ -58,14 +66,14 @@ public class PloyServiceImpl implements PloyService {
@Override
@Transactional
public void updatePloy(String ployId, PloyUpdateRequest request) {
PloyPO po = PloyConverter.INSTANCE.convertRequest2Po(request);
po.setPloyId(ployId);
po.setGmtModified(new Date());
PloyPO po = PloyPO.update(ployId, request);
ployDao.updateById(po);
if (!CollectionUtils.isEmpty(request.getBindShopIds())) {
/* todo 绑定店铺 */
}
/* 绑定店铺 */
reBindShops(po.getPloyId(), request.getBindShopIds());
/* 绑定设备 */
reBindDevices(po.getPloyId(), request.getBindDeviceIds());
}
@Override
......@@ -105,4 +113,36 @@ public class PloyServiceImpl implements PloyService {
return ApiResponse.fail("未查询到策略", null);
}
private void reBindShops(String ployId, Set<String> shopIds) {
if (CollectionUtils.isEmpty(shopIds)) {
return;
}
/* 查询店铺是否绑定过策略 */
if (bindShopPloyDao.existShopPloy(ployId, shopIds)) {
/* 店铺重复绑定 */
throw CommonException.create("店铺重复绑定");
}
/* 解绑店铺 */
bindShopPloyDao.deleteByPloyId(ployId);
/* 绑定店铺 */
List<BindShopPloyPO> pos = BindShopPloyPO.createBinds(ployId, shopIds);
bindShopPloyDao.saveBatch(pos);
}
private void reBindDevices(String ployId, Set<String> deviceIds) {
if (CollectionUtils.isEmpty(deviceIds)) {
return;
}
/* 先解绑该策略的设备 */
bindPloyDeviceDao.deleteByPloyId(ployId);
/* 绑定设备 */
List<BindPloyDevicePO> pos = BindPloyDevicePO.createBinds(ployId, deviceIds);
bindPloyDeviceDao.saveBatch(pos);
}
}
......
package com.ql.backend.ploycenter.application.impl;
import com.google.common.collect.Sets;
import com.ql.backend.core.interfaces.vo.PageVO;
import com.ql.backend.ploycenter.application.ShopService;
import com.ql.backend.ploycenter.domain.condition.ShopCondition;
import com.ql.backend.ploycenter.domain.po.BindShopPloyPO;
import com.ql.backend.ploycenter.domain.po.ShopPO;
import com.ql.backend.ploycenter.infrastructure.converter.mapper.ShopConverter;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.BindShopPloyDao;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.ShopDao;
import com.ql.backend.ploycenter.interfaces.request.ShopCreateRequest;
import com.ql.backend.ploycenter.interfaces.request.ShopUpdateRequest;
......@@ -15,9 +18,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.UUID;
/**
* @author lirenhao
......@@ -30,19 +31,17 @@ public class ShopServiceImpl implements ShopService {
@Resource
private ShopDao shopDao;
@Resource
private BindShopPloyDao bindShopPloyDao;
@Override
@Transactional
public String createShop(ShopCreateRequest request) {
ShopPO po = ShopConverter.INSTANCE.convertRequest2Po(request);
po.setShopId(UUID.randomUUID().toString());
po.setGmtCreated(new Date());
po.setGmtModified(new Date());
po.setIsDeleted(Boolean.FALSE);
ShopPO po = ShopPO.create(request);
shopDao.save(po);
if (!ObjectUtils.isEmpty(request.getBindPloyId())) {
/* todo 绑定策略 */
}
/* 绑定策略 */
reBindPloy(po.getShopId(), request.getBindPloyId());
return po.getShopId();
}
......@@ -50,14 +49,11 @@ public class ShopServiceImpl implements ShopService {
@Override
@Transactional
public void updateShop(String id, ShopUpdateRequest request) {
ShopPO po = ShopConverter.INSTANCE.convertRequest2Po(request);
po.setShopId(id);
po.setGmtModified(new Date());
ShopPO po = ShopPO.update(id, request);
shopDao.updateById(po);
if (!ObjectUtils.isEmpty(request.getBindPloyId())) {
/* todo 绑定策略 */
}
/* 绑定策略 */
reBindPloy(po.getShopId(), request.getBindPloyId());
}
@Override
......@@ -79,4 +75,17 @@ public class ShopServiceImpl implements ShopService {
/* todo 查询策略详情, 并查询绑定的店铺信息 */
return vo;
}
private void reBindPloy(String shopId, String bindPloyId) {
if (ObjectUtils.isEmpty(shopId) || ObjectUtils.isEmpty(bindPloyId)) {
return;
}
/* 解绑策略 */
bindShopPloyDao.deleteByShopId(shopId);
/* 绑定策略 */
List<BindShopPloyPO> pos = BindShopPloyPO.createBinds(bindPloyId, Sets.newHashSet(shopId));
bindShopPloyDao.saveBatch(pos);
}
}
......
package com.ql.backend.ploycenter.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author lirenhao
* date: 2022/9/15 09:55
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_bind_ploy_device")
public class BindPloyDevicePO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 策略ID
*/
private String ployId;
/**
* 设备ID
*/
private String deviceId;
public static List<BindPloyDevicePO> createBinds(String ployId, Set<String> deviceIds) {
if (ObjectUtils.isEmpty(ployId) || CollectionUtils.isEmpty(deviceIds)) {
return new ArrayList<>();
}
return deviceIds.stream()
.map(deviceId -> BindPloyDevicePO.builder()
.ployId(ployId)
.deviceId(deviceId)
.build())
.collect(Collectors.toList());
}
}
package com.ql.backend.ploycenter.domain.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @author lirenhao
* date: 2022/9/15 09:55
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_bind_shop_ploy")
public class BindShopPloyPO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 策略ID
*/
private String ployId;
/**
* 设备ID
*/
private String shopId;
public static List<BindShopPloyPO> createBinds(String ployId, Set<String> shopIds) {
if (ObjectUtils.isEmpty(ployId) || CollectionUtils.isEmpty(shopIds)) {
return new ArrayList<>();
}
return shopIds.stream()
.map(id -> BindShopPloyPO.builder()
.ployId(ployId)
.shopId(id)
.build())
.collect(Collectors.toList());
}
}
......@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ql.backend.ploycenter.infrastructure.converter.mapper.PloyConverter;
import com.ql.backend.ploycenter.interfaces.request.PloyCreateRequest;
import com.ql.backend.ploycenter.interfaces.request.PloyUpdateRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -11,6 +14,7 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.UUID;
/**
* 策略
......@@ -71,4 +75,20 @@ public class PloyPO implements Serializable {
@TableField(value = "gmt_modified")
private Date gmtModified;
public static PloyPO create(PloyCreateRequest request) {
PloyPO po = PloyConverter.INSTANCE.convertRequest2Po(request);
po.setPloyId(UUID.randomUUID().toString());
po.setGmtCreated(new Date());
po.setGmtModified(new Date());
po.setIsDeleted(Boolean.FALSE);
return po;
}
public static PloyPO update(String ployId, PloyUpdateRequest request) {
PloyPO po = PloyConverter.INSTANCE.convertRequest2Po(request);
po.setPloyId(ployId);
po.setGmtModified(new Date());
return po;
}
}
......
......@@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ql.backend.ploycenter.infrastructure.converter.mapper.ShopConverter;
import com.ql.backend.ploycenter.interfaces.request.ShopCreateRequest;
import com.ql.backend.ploycenter.interfaces.request.ShopUpdateRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -11,6 +14,7 @@ import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.UUID;
/**
* @author lirenhao
......@@ -57,4 +61,20 @@ public class ShopPO implements Serializable {
@TableField(value = "gmt_modified")
private Date gmtModified;
public static ShopPO create(ShopCreateRequest request) {
ShopPO po = ShopConverter.INSTANCE.convertRequest2Po(request);
po.setShopId(UUID.randomUUID().toString());
po.setGmtCreated(new Date());
po.setGmtModified(new Date());
po.setIsDeleted(Boolean.FALSE);
return po;
}
public static ShopPO update(String id, ShopUpdateRequest request) {
ShopPO po = ShopConverter.INSTANCE.convertRequest2Po(request);
po.setShopId(id);
po.setGmtModified(new Date());
return po;
}
}
......
package com.ql.backend.ploycenter.infrastructure.persistence.dao;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ql.backend.ploycenter.domain.po.BindPloyDevicePO;
/**
* @author lirenhao
* date: 2022/9/14 15:29
*/
public interface BindPloyDeviceDao extends IService<BindPloyDevicePO> {
void deleteByPloyId(String ployId);
}
package com.ql.backend.ploycenter.infrastructure.persistence.dao;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ql.backend.ploycenter.domain.po.BindShopPloyPO;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/14 15:29
*/
public interface BindShopPloyDao extends IService<BindShopPloyPO> {
/**
* 校验店铺策略是否重复
*/
boolean existShopPloy(String ployId, Set<String> shopIds);
void deleteByPloyId(String ployId);
void deleteByShopId(String shopId);
}
package com.ql.backend.ploycenter.infrastructure.persistence.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ql.backend.ploycenter.domain.po.BindPloyDevicePO;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.BindPloyDeviceDao;
import com.ql.backend.ploycenter.infrastructure.persistence.mapper.BindPloyDeviceMapper;
import org.springframework.stereotype.Service;
/**
* @author lirenhao
* date: 2022/9/14 15:30
*/
@Service
public class BindPloyDeviceDaoImpl extends ServiceImpl<BindPloyDeviceMapper, BindPloyDevicePO> implements BindPloyDeviceDao {
@Override
public void deleteByPloyId(String ployId) {
LambdaQueryWrapper<BindPloyDevicePO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BindPloyDevicePO::getPloyId, ployId);
this.remove(wrapper);
}
}
package com.ql.backend.ploycenter.infrastructure.persistence.dao.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ql.backend.ploycenter.domain.po.BindShopPloyPO;
import com.ql.backend.ploycenter.infrastructure.persistence.dao.BindShopPloyDao;
import com.ql.backend.ploycenter.infrastructure.persistence.mapper.BindShopPloyMapper;
import org.springframework.stereotype.Service;
import java.util.Set;
/**
* @author lirenhao
* date: 2022/9/14 15:30
*/
@Service
public class BindShopPloyDaoImpl extends ServiceImpl<BindShopPloyMapper, BindShopPloyPO> implements BindShopPloyDao {
@Override
public boolean existShopPloy(String ployId, Set<String> shopIds) {
LambdaQueryWrapper<BindShopPloyPO> wrapper = new LambdaQueryWrapper<>();
wrapper.ne(BindShopPloyPO::getPloyId, ployId)
.in(BindShopPloyPO::getShopId, shopIds)
.last("LIMIT 1");
return this.count(wrapper) > 0;
}
@Override
public void deleteByPloyId(String ployId) {
LambdaQueryWrapper<BindShopPloyPO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BindShopPloyPO::getPloyId, ployId);
this.remove(wrapper);
}
@Override
public void deleteByShopId(String shopId) {
LambdaQueryWrapper<BindShopPloyPO> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(BindShopPloyPO::getShopId, shopId);
this.remove(wrapper);
}
}
package com.ql.backend.ploycenter.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ql.backend.ploycenter.domain.po.BindPloyDevicePO;
/**
* @author lirenhao
* date: 2022/9/7 10:10
*/
public interface BindPloyDeviceMapper extends BaseMapper<BindPloyDevicePO> {
}
package com.ql.backend.ploycenter.infrastructure.persistence.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ql.backend.ploycenter.domain.po.BindShopPloyPO;
/**
* @author lirenhao
* date: 2022/9/7 10:10
*/
public interface BindShopPloyMapper extends BaseMapper<BindShopPloyPO> {
}
......@@ -27,7 +27,6 @@ public class ShopFacade {
return ApiResponse.ok(shopService.createShop(request));
}
@PutMapping("/{id}")
public ApiResponse<Void> updateShop(@PathVariable("id") String id, @RequestBody ShopUpdateRequest request) {
shopService.updateShop(id,request);
......
......@@ -43,4 +43,9 @@ public class PloyCreateRequest {
* 绑定的店铺ID
*/
private Set<String> bindShopIds;
/**
* 绑定的设备ID
*/
private Set<String> bindDeviceIds;
}
......
......@@ -43,4 +43,9 @@ public class PloyUpdateRequest {
* 绑定的店铺ID
*/
private Set<String> bindShopIds;
/**
* 绑定的设备ID
*/
private Set<String> bindDeviceIds;
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!