!1098 【新增功能】添加扫描枪、门店店员绑定功能

Merge pull request !1098 from 痴货/jh-smq
This commit is contained in:
芋道源码 2024-10-13 00:40:16 +00:00 committed by Gitee
commit d5652b950e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
14 changed files with 181 additions and 83 deletions

View File

@ -80,6 +80,7 @@ public interface ErrorCodeConstants {
// ========== 物流 PICK_UP 模块 1-011-006-000 ==========
ErrorCode PICK_UP_STORE_NOT_EXISTS = new ErrorCode(1_011_006_000, "自提门店不存在");
ErrorCode PICK_UP_STORE_STAFF_NOT_EXISTS = new ErrorCode(1_011_006_000, "自提门店店员不存在");
// ========== 分销用户 模块 1-011-007-000 ==========
ErrorCode BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1_011_007_000, "分销用户不存在");

View File

@ -16,10 +16,13 @@ import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 自提门店")
@RestController
@ -66,9 +69,16 @@ public class DeliveryPickUpStoreController {
@GetMapping("/list-all-simple")
@Operation(summary = "获得自提门店精简信息列表")
public CommonResult<List<DeliveryPickUpStoreSimpleRespVO>> getSimpleDeliveryPickUpStoreList() {
List<DeliveryPickUpStoreDO> list = deliveryPickUpStoreService.getDeliveryPickUpStoreListByStatus(
CommonStatusEnum.ENABLE.getStatus());
return success(DeliveryPickUpStoreConvert.INSTANCE.convertList1(list));
List<DeliveryPickUpStoreDO> storeStaffDOS = deliveryPickUpStoreService.selectStaffByUserId(getLoginUserId());
List<Long> storeIds = storeStaffDOS.stream().map(DeliveryPickUpStoreDO::getId).toList();
if(!storeIds.isEmpty()){
List<DeliveryPickUpStoreDO> list = deliveryPickUpStoreService.getDeliveryPickUpStoreListByStatus(
CommonStatusEnum.ENABLE.getStatus(), storeIds);
return success(DeliveryPickUpStoreConvert.INSTANCE.convertList1(list));
}else{
return success(new ArrayList<>());
}
}
@GetMapping("/list")
@ -88,4 +98,21 @@ public class DeliveryPickUpStoreController {
return success(DeliveryPickUpStoreConvert.INSTANCE.convertPage(pageResult));
}
@PostMapping("/bind")
@Operation(summary = "绑定自提店员")
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:create')")
public CommonResult<Boolean> bindDeliveryPickUpBindStoreStaffId(@Valid @RequestBody DeliveryPickUpBindStoreStaffIdReqVO bindStoreStaffIdVO) {
deliveryPickUpStoreService.bindDeliveryPickUpBindStoreStaffId(bindStoreStaffIdVO);
return success(true);
}
@GetMapping("/get-store-staff")
@Operation(summary = "查询门店绑定情况")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('trade:delivery:pick-up-store:query')")
public CommonResult<DeliveryPickUpBindStoreStaffIdReqsVO> getDeliveryPickUpStoreStaff(@RequestParam("id") Long id) {
return success(deliveryPickUpStoreService.getDeliveryPickUpStoreStaff(id));
}
}

View File

@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 自提门店创建 Request VO")
@Data
@ToString(callSuper = true)
public class DeliveryPickUpBindStoreStaffIdReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
@NotNull(message = "编号不能为空")
private Long id;
@Schema(description = "绑定用户编号组数", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
@NotNull(message = "绑定用户编号组数不能未空")
private List<Long> storeStaffIds;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 自提门店创建 Request VO")
@Data
@ToString(callSuper = true)
@Builder
public class DeliveryPickUpBindStoreStaffIdReqsVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
private Long id;
@Schema(description = "门店名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
private String name;
@Schema(description = "绑定用户信息组数", requiredMode = Schema.RequiredMode.REQUIRED, example = "23128")
private List<AdminUserRespDTO> storeStaffs;
}

View File

@ -40,7 +40,7 @@ public class AppDeliverPickUpStoreController {
@RequestParam(value = "latitude", required = false) Double latitude,
@RequestParam(value = "longitude", required = false) Double longitude) {
List<DeliveryPickUpStoreDO> list = deliveryPickUpStoreService.getDeliveryPickUpStoreListByStatus(
CommonStatusEnum.ENABLE.getStatus());
CommonStatusEnum.ENABLE.getStatus(), null);
return success(DeliveryPickUpStoreConvert.INSTANCE.convertList(list, latitude, longitude));
}

View File

@ -2,19 +2,23 @@ package cn.iocoder.yudao.module.trade.dal.dataobject.delivery;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import java.time.LocalTime;
import java.util.List;
/**
* 自提门店 DO
*
* @author jason
*/
@TableName(value ="trade_delivery_pick_up_store")
@TableName(value ="trade_delivery_pick_up_store", autoResultMap = true)
@KeySequence("trade_delivery_pick_up_store_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
public class DeliveryPickUpStoreDO extends BaseDO {
@ -73,6 +77,11 @@ public class DeliveryPickUpStoreDO extends BaseDO {
* 经度
*/
private Double longitude;
/**
* 店员id列表
*/
@TableField(typeHandler = LongListTypeHandler.class)
private List<Long> staffIds;
/**
* 门店状态

View File

@ -1,49 +0,0 @@
package cn.iocoder.yudao.module.trade.dal.dataobject.delivery;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
// TODO @芋艿后续再详细 review 一轮
// TODO @芋艿可能改成 DeliveryPickUpStoreUserDO
/**
* 自提门店店员 DO
*
* @author jason
*/
@TableName(value ="trade_delivery_pick_up_store_staff")
@KeySequence("trade_delivery_pick_up_store_staff_seq") // 用于 OraclePostgreSQLKingbaseDB2H2 数据库的主键自增如果是 MySQL 等数据库可不写
@Data
public class DeliveryPickUpStoreStaffDO extends BaseDO {
/**
* 编号自增
*/
@TableId
private Long id;
/**
* 自提门店编号
*
* 关联 {@link DeliveryPickUpStoreDO#getId()}
*/
private Long storeId;
/**
* 管理员用户id
*
* 关联 {AdminUserDO#getId()}
*/
private Long adminUserId;
/**
* 状态
*
* 枚举 {@link CommonStatusEnum}
*/
private Integer status;
}

View File

@ -22,10 +22,16 @@ public interface DeliveryPickUpStoreMapper extends BaseMapperX<DeliveryPickUpSto
.orderByDesc(DeliveryPickUpStoreDO::getId));
}
default List<DeliveryPickUpStoreDO> selectListByStatus(Integer status) {
return selectList(DeliveryPickUpStoreDO::getStatus, status);
default List<DeliveryPickUpStoreDO> selectListByStatus(Integer status, List<Long> storeIds) {
return selectList(new LambdaQueryWrapperX<DeliveryPickUpStoreDO>()
.eq(DeliveryPickUpStoreDO::getStatus, status)
.inIfPresent(DeliveryPickUpStoreDO::getId, storeIds));
}
default List<DeliveryPickUpStoreDO> selectStaffByUserId(Long userId){
return selectList(new LambdaQueryWrapperX<DeliveryPickUpStoreDO>()
.and(userId != null, w -> w.apply("FIND_IN_SET({0}, staff_ids)", userId)));
}
}

View File

@ -1,14 +0,0 @@
package cn.iocoder.yudao.module.trade.dal.mysql.delivery;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreStaffDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeliveryPickUpStoreStaffMapper extends BaseMapperX<DeliveryPickUpStoreStaffDO> {
}

View File

@ -1,9 +1,7 @@
package cn.iocoder.yudao.module.trade.service.delivery;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreCreateReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStorePageReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreUpdateReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.*;
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;
import jakarta.validation.Valid;
@ -67,7 +65,30 @@ public interface DeliveryPickUpStoreService {
* 获得指定状态的自提门店列表
*
* @param status 状态
* @param storeIds 指定门店id
* @return 自提门店列表
*/
List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status);
List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status, List<Long> storeIds);
/**
* 绑定自提店员
*
* @param bindStoreStaffIdVO 绑定数据
* @return
*/
void bindDeliveryPickUpBindStoreStaffId(DeliveryPickUpBindStoreStaffIdReqVO bindStoreStaffIdVO);
/**
* 根据门店id获取自提店员
* @param id 门店id
* @return 自提店员
*/
DeliveryPickUpBindStoreStaffIdReqsVO getDeliveryPickUpStoreStaff(Long id);
/**
* 根据用户id查询自提门店店员信息
* @param userId 用户id
* @return 自提门店店员信息
*/
List<DeliveryPickUpStoreDO> selectStaffByUserId(Long userId);
}

View File

@ -1,9 +1,9 @@
package cn.iocoder.yudao.module.trade.service.delivery;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreCreateReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStorePageReqVO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.DeliveryPickUpStoreUpdateReqVO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.yudao.module.trade.controller.admin.delivery.vo.pickup.*;
import cn.iocoder.yudao.module.trade.convert.delivery.DeliveryPickUpStoreConvert;
import cn.iocoder.yudao.module.trade.dal.dataobject.delivery.DeliveryPickUpStoreDO;
import cn.iocoder.yudao.module.trade.dal.mysql.delivery.DeliveryPickUpStoreMapper;
@ -29,6 +29,9 @@ public class DeliveryPickUpStoreServiceImpl implements DeliveryPickUpStoreServic
@Resource
private DeliveryPickUpStoreMapper deliveryPickUpStoreMapper;
@Resource
private AdminUserApi adminUserApi;
@Override
public Long createDeliveryPickUpStore(DeliveryPickUpStoreCreateReqVO createReqVO) {
// 插入
@ -77,8 +80,29 @@ public class DeliveryPickUpStoreServiceImpl implements DeliveryPickUpStoreServic
}
@Override
public List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status) {
return deliveryPickUpStoreMapper.selectListByStatus(status);
public List<DeliveryPickUpStoreDO> getDeliveryPickUpStoreListByStatus(Integer status, List<Long> storeIds) {
return deliveryPickUpStoreMapper.selectListByStatus(status, storeIds);
}
@Override
public void bindDeliveryPickUpBindStoreStaffId(DeliveryPickUpBindStoreStaffIdReqVO bindStoreStaffIdVO) {
DeliveryPickUpStoreDO deliveryPickUpStoreDO = deliveryPickUpStoreMapper.selectById(bindStoreStaffIdVO.getId());
deliveryPickUpStoreDO.setStaffIds(bindStoreStaffIdVO.getStoreStaffIds());
deliveryPickUpStoreMapper.updateById(deliveryPickUpStoreDO);
}
@Override
public DeliveryPickUpBindStoreStaffIdReqsVO getDeliveryPickUpStoreStaff(Long id) {
DeliveryPickUpStoreDO store = deliveryPickUpStoreMapper.selectById(id);
List<Long> adminUserIds = store.getStaffIds();
//2 查询绑定用户信息
List<AdminUserRespDTO> storeStaffs = adminUserApi.getUserList(adminUserIds);
return DeliveryPickUpBindStoreStaffIdReqsVO.builder().storeStaffs(storeStaffs).name(store.getName()).id(id).build();
}
@Override
public List<DeliveryPickUpStoreDO> selectStaffByUserId(Long userId) {
return deliveryPickUpStoreMapper.selectStaffByUserId(userId);
}
}

View File

@ -35,4 +35,7 @@ public class UserPageReqVO extends PageParam {
@Schema(description = "部门编号,同时筛选子部门", example = "1024")
private Long deptId;
@Schema(description = "角色id", example = "1024")
private Long roleId;
}

View File

@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqV
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@ -25,14 +26,21 @@ public interface AdminUserMapper extends BaseMapperX<AdminUserDO> {
return selectOne(AdminUserDO::getMobile, mobile);
}
default PageResult<AdminUserDO> selectPage(UserPageReqVO reqVO, Collection<Long> deptIds) {
return selectPage(reqVO, new LambdaQueryWrapperX<AdminUserDO>()
default PageResult<AdminUserDO> selectPage(UserPageReqVO reqVO, Collection<Long> deptIds,List<Long> userIds) {
LambdaQueryWrapperX<AdminUserDO> adminUserDOLambdaQueryWrapperX = new LambdaQueryWrapperX<AdminUserDO>()
.likeIfPresent(AdminUserDO::getUsername, reqVO.getUsername())
.likeIfPresent(AdminUserDO::getMobile, reqVO.getMobile())
.eqIfPresent(AdminUserDO::getStatus, reqVO.getStatus())
.betweenIfPresent(AdminUserDO::getCreateTime, reqVO.getCreateTime())
.inIfPresent(AdminUserDO::getDeptId, deptIds)
.orderByDesc(AdminUserDO::getId));
.orderByDesc(AdminUserDO::getId);
if(userIds != null){
if(userIds.isEmpty()){
return new PageResult<AdminUserDO>().setList(new ArrayList<>()).setTotal(0L);
}
adminUserDOLambdaQueryWrapperX.in(AdminUserDO::getId, userIds);
}
return selectPage(reqVO, adminUserDOLambdaQueryWrapperX);
}
default List<AdminUserDO> selectListByNickname(String nickname) {

View File

@ -22,8 +22,10 @@ import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserPageReqV
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.UserPostDO;
import cn.iocoder.yudao.module.system.dal.dataobject.permission.UserRoleDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
import cn.iocoder.yudao.module.system.dal.mysql.permission.UserRoleMapper;
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.dept.PostService;
@ -44,6 +46,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@ -79,6 +82,8 @@ public class AdminUserServiceImpl implements AdminUserService {
@Resource
private UserPostMapper userPostMapper;
@Resource
private UserRoleMapper userRoleMapper;
@Resource
private FileApi fileApi;
@ -272,7 +277,13 @@ public class AdminUserServiceImpl implements AdminUserService {
@Override
public PageResult<AdminUserDO> getUserPage(UserPageReqVO reqVO) {
return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()));
List<Long> userIds = null;
if (reqVO.getRoleId() != null){
//查询角色信息
List<UserRoleDO> userRoleDOS = userRoleMapper.selectListByRoleIds(List.of(reqVO.getRoleId()));
userIds = userRoleDOS.stream().map(UserRoleDO::getUserId).toList();
}
return userMapper.selectPage(reqVO, getDeptCondition(reqVO.getDeptId()), userIds);
}
@Override