店铺管理接口实现

This commit is contained in:
张松 2025-02-11 10:33:39 +08:00
parent 6e8b2558bf
commit ad5e3f56d2
28 changed files with 325 additions and 104 deletions

View File

@ -1,10 +1,13 @@
package com.czg.controller; package com.czg.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.czg.annotation.SaAdminCheckPermission; import com.czg.annotation.SaAdminCheckPermission;
import com.czg.annotation.SaAdminCheckRole;
import com.czg.resp.CzgResult; import com.czg.resp.CzgResult;
import com.czg.service.account.dto.shopinfo.ShopInfoAddDTO;
import com.czg.service.account.service.ShopInfoService; import com.czg.service.account.service.ShopInfoService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -21,9 +24,14 @@ public class ShopInfoController {
this.shopInfoService = shopInfoService; this.shopInfoService = shopInfoService;
} }
/**
* 店铺添加
* 权限标识: shopInfo:add
*/
@SaAdminCheckRole("管理员")
@SaAdminCheckPermission("shopInfo:add") @SaAdminCheckPermission("shopInfo:add")
@PostMapping @PostMapping
public CzgResult add() { public CzgResult<?> add(@RequestBody @Validated ShopInfoAddDTO shopInfoAddDTO) {
return null; return CzgResult.success(shopInfoService.add(shopInfoAddDTO));
} }
} }

View File

@ -0,0 +1,18 @@
package com.czg.dto;
import com.mybatisflex.core.mybatis.FlexConfiguration;
import com.mybatisflex.spring.boot.ConfigurationCustomizer;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.springframework.context.annotation.Configuration;
/**
* @author Administrator
*/
@Configuration
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
@Override
public void customize(FlexConfiguration configuration) {
configuration.setLogImpl(StdOutImpl.class);
}
}

View File

@ -0,0 +1,39 @@
package com.czg.service.account.dto.shopinfo;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
/**
* @author Administrator
*/
public record ShopInfoAddDTO(
@NotEmpty(message = "店铺名称不为空")
String shopName,
@NotEmpty(message = "店铺类型不为空")
String shopType,
String subTitle,
@NotEmpty(message = "店铺logo不为空")
String logo,
@NotEmpty(message = "门头照不为空")
String frontImg,
@NotEmpty(message = "试用/正式不为空")
String profiles,
@NotEmpty(message = "激活码不为空")
String activateCode,
@NotEmpty(message = "登录账号不为空")
String accountName,
@NotEmpty(message = "登录密码不为空")
String accountPwd,
@NotEmpty(message = "经度不为空")
String lat,
@NotEmpty(message = "纬度不为空")
String lng,
@NotNull(message = "状态不为空")
String detail,
@NotNull(message = "角色id不为空")
Long roleId,
String address,
Integer status,
String phone
) {
}

View File

@ -0,0 +1,71 @@
package com.czg.service.account.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.io.Serial;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 激活码 实体类
*
* @author Administrator
* @since 2025-02-11
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("tb_merchant_register")
public class MerchantRegister implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Id(keyType = KeyType.Auto)
private Integer id;
/**
* 激活码
*/
private String registerCode;
/**
* 店铺id
*/
private String shopId;
/**
* 激活码金额
*/
private BigDecimal amount;
/**
* 激活时长
*/
private Integer periodMonth;
/**
* 状态0未使用1已使用
*/
private Integer status;
/**
* 创建时间
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
@Column(onInsertValue = "now()", onUpdateValue = "now()")
private LocalDateTime updateTime;
}

View File

@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("tb_shop_info") @Table("tb_shop_info")
public class TbShopInfo implements Serializable { public class ShopInfo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("tb_shop_staff") @Table("tb_shop_staff")
public class TbShopStaff implements Serializable { public class ShopStaff implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
@Table("tb_shop_user") @Table("tb_shop_user")
public class TbShopUser implements Serializable { public class ShopUser implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,14 @@
package com.czg.service.account.mapper;
import com.mybatisflex.core.BaseMapper;
import com.czg.service.account.entity.MerchantRegister;
/**
* 激活码 映射层
*
* @author Administrator
* @since 2025-02-11
*/
public interface MerchantRegisterMapper extends BaseMapper<MerchantRegister> {
}

View File

@ -1,7 +1,7 @@
package com.czg.service.account.mapper; package com.czg.service.account.mapper;
import com.czg.service.account.entity.ShopInfo;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import com.czg.service.account.entity.TbShopInfo;
/** /**
* 店铺信息 映射层 * 店铺信息 映射层
@ -9,6 +9,6 @@ import com.czg.service.account.entity.TbShopInfo;
* @author Administrator * @author Administrator
* @since 2025-02-10 * @since 2025-02-10
*/ */
public interface TbShopInfoMapper extends BaseMapper<TbShopInfo> { public interface ShopInfoMapper extends BaseMapper<ShopInfo> {
} }

View File

@ -1,7 +1,7 @@
package com.czg.service.account.mapper; package com.czg.service.account.mapper;
import com.czg.service.account.entity.ShopStaff;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import com.czg.service.account.entity.TbShopStaff;
/** /**
* 店铺员工 映射层 * 店铺员工 映射层
@ -9,6 +9,6 @@ import com.czg.service.account.entity.TbShopStaff;
* @author Administrator * @author Administrator
* @since 2025-02-10 * @since 2025-02-10
*/ */
public interface TbShopStaffMapper extends BaseMapper<TbShopStaff> { public interface ShopStaffMapper extends BaseMapper<ShopStaff> {
} }

View File

@ -1,7 +1,7 @@
package com.czg.service.account.mapper; package com.czg.service.account.mapper;
import com.czg.service.account.entity.ShopUser;
import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.BaseMapper;
import com.czg.service.account.entity.TbShopUser;
/** /**
* 商户储值会员 映射层 * 商户储值会员 映射层
@ -9,6 +9,6 @@ import com.czg.service.account.entity.TbShopUser;
* @author Administrator * @author Administrator
* @since 2025-02-08 * @since 2025-02-08
*/ */
public interface TbShopUserMapper extends BaseMapper<TbShopUser> { public interface ShopUserMapper extends BaseMapper<ShopUser> {
} }

View File

@ -0,0 +1,14 @@
package com.czg.service.account.service;
import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.MerchantRegister;
/**
* 激活码 服务层
*
* @author Administrator
* @since 2025-02-11
*/
public interface MerchantRegisterService extends IService<MerchantRegister> {
}

View File

@ -1,7 +1,12 @@
package com.czg.service.account.service; package com.czg.service.account.service;
import com.czg.service.account.dto.shopinfo.ShopInfoAddDTO;
import com.czg.service.account.entity.ShopInfo;
import com.mybatisflex.core.service.IService;
/** /**
* @author Administrator * @author Administrator
*/ */
public interface ShopInfoService { public interface ShopInfoService extends IService<ShopInfo> {
Object add(ShopInfoAddDTO shopInfoAddDTO);
} }

View File

@ -1,7 +1,7 @@
package com.czg.service.account.service; package com.czg.service.account.service;
import com.czg.service.account.entity.ShopStaff;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.TbShopStaff;
/** /**
* 店铺员工 服务层 * 店铺员工 服务层
@ -9,6 +9,6 @@ import com.czg.service.account.entity.TbShopStaff;
* @author Administrator * @author Administrator
* @since 2025-02-10 * @since 2025-02-10
*/ */
public interface TbShopStaffService extends IService<TbShopStaff> { public interface ShopStaffService extends IService<ShopStaff> {
} }

View File

@ -1,7 +1,7 @@
package com.czg.service.account.service; package com.czg.service.account.service;
import com.czg.service.account.entity.ShopUser;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.TbShopUser;
/** /**
* 商户储值会员 服务层 * 商户储值会员 服务层
@ -9,6 +9,6 @@ import com.czg.service.account.entity.TbShopUser;
* @author Administrator * @author Administrator
* @since 2025-02-08 * @since 2025-02-08
*/ */
public interface TbShopUserService extends IService<TbShopUser> { public interface ShopUserService extends IService<ShopUser> {
} }

View File

@ -1,14 +0,0 @@
package com.czg.service.account.service;
import com.mybatisflex.core.service.IService;
import com.czg.service.account.entity.TbShopInfo;
/**
* 店铺信息 服务层
*
* @author Administrator
* @since 2025-02-10
*/
public interface TbShopInfoService extends IService<TbShopInfo> {
}

View File

@ -1,6 +1,5 @@
package com.czg.service.account.service.impl; package com.czg.service.account.service.impl;
import cn.hutool.core.comparator.CompareUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -13,15 +12,12 @@ import com.czg.service.account.entity.*;
import com.czg.service.account.mapper.SysMenuMapper; import com.czg.service.account.mapper.SysMenuMapper;
import com.czg.service.account.service.*; import com.czg.service.account.service.*;
import com.czg.service.account.vo.LoginVO; import com.czg.service.account.vo.LoginVO;
import com.mybatisflex.core.query.QueryChain;
import com.wf.captcha.SpecCaptcha; import com.wf.captcha.SpecCaptcha;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -35,9 +31,9 @@ public class AuthorizationServiceImpl implements AuthorizationService {
@Resource @Resource
private SysUserService sysUserService; private SysUserService sysUserService;
@Resource @Resource
private TbShopStaffService shopStaffService; private ShopStaffService shopStaffService;
@Resource @Resource
private TbShopInfoService shopInfoService; private ShopInfoService shopInfoService;
@Resource @Resource
private SysRoleService sysRoleService; private SysRoleService sysRoleService;
@Resource @Resource
@ -78,12 +74,12 @@ public class AuthorizationServiceImpl implements AuthorizationService {
throw new RuntimeException("账户或密码错误"); throw new RuntimeException("账户或密码错误");
} }
TbShopInfo shopInfo; ShopInfo shopInfo;
// 商户员工登录 // 商户员工登录
if (loginDTO.loginType() == 1) { if (loginDTO.loginType() == 1) {
TbShopStaff shopStaff = shopStaffService.queryChain().eq(TbShopStaff::getStatus, 1) ShopStaff shopStaff = shopStaffService.queryChain().eq(ShopStaff::getStatus, 1)
.eq(TbShopStaff::getIsManage, 1) .eq(ShopStaff::getIsManage, 1)
.eq(TbShopStaff::getId, user.getId()).one(); .eq(ShopStaff::getId, user.getId()).one();
if (shopStaff == null) { if (shopStaff == null) {
throw new RuntimeException("账户未启用"); throw new RuntimeException("账户未启用");
} }

View File

@ -0,0 +1,18 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.MerchantRegister;
import com.czg.service.account.mapper.MerchantRegisterMapper;
import com.czg.service.account.service.MerchantRegisterService;
import org.springframework.stereotype.Service;
/**
* 激活码 服务层实现
*
* @author Administrator
* @since 2025-02-11
*/
@Service
public class MerchantRegisterServiceImpl extends ServiceImpl<MerchantRegisterMapper, MerchantRegister> implements MerchantRegisterService{
}

View File

@ -1,11 +1,77 @@
package com.czg.service.account.service.impl; package com.czg.service.account.service.impl;
import com.czg.service.account.service.ShopInfoService; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.crypto.SecureUtil;
import com.czg.exception.CzgException;
import com.czg.sa.StpKit;
import com.czg.service.account.dto.shopinfo.ShopInfoAddDTO;
import com.czg.service.account.entity.*;
import com.czg.service.account.mapper.ShopInfoMapper;
import com.czg.service.account.service.*;
import com.czg.utils.AssertUtil;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
/** /**
* @author Administrator * @author Administrator
*/ */
@Service @Service
public class ShopInfoServiceImpl implements ShopInfoService { public class ShopInfoServiceImpl extends ServiceImpl<ShopInfoMapper, ShopInfo> implements ShopInfoService {
@Resource
private SysUserService sysUserService;
@Resource
private SysUsersRolesService sysUsersRolesService;
@Resource
private SysRoleService sysRoleService;
@Resource
private MerchantRegisterService merchantRegisterService;
@Override
@Transactional(rollbackFor = Exception.class)
public Object add(ShopInfoAddDTO shopInfoAddDTO) {
long count = sysUserService.queryChain().eq(SysUser::getAccount, shopInfoAddDTO.accountName()).count();
if (count > 0) {
throw new CzgException("账户已存在");
}
MerchantRegister merchantRegister = merchantRegisterService.queryChain().eq(MerchantRegister::getRegisterCode, shopInfoAddDTO.activateCode()).one();
AssertUtil.isNull(merchantRegister, "激活码不存在");
if (merchantRegister.getStatus() == 1) {
throw new CzgException("激活码已使用");
}
// 添加系统账号
SysUser sysUser = new SysUser();
sysUser.setAccount(shopInfoAddDTO.accountName());
sysUser.setNickName(shopInfoAddDTO.shopName());
sysUser.setPhone(shopInfoAddDTO.phone());
sysUser.setStauts(1);
sysUser.setCreateUserId(StpKit.ADMIN.getLoginIdAsLong());
sysUserService.save(sysUser);
sysUser.setPassword(SecureUtil.md5(sysUser.getId() + shopInfoAddDTO.accountPwd()));
sysUserService.updateById(sysUser);
// 绑定角色
long roleCount = sysRoleService.queryChain().eq(SysRole::getId, shopInfoAddDTO.roleId()).count();
if (roleCount == 0) {
throw new CzgException("角色不存在");
}
SysUsersRoles usersRoles = new SysUsersRoles();
usersRoles.setUserId(sysUser.getId());
usersRoles.setRoleId(shopInfoAddDTO.roleId());
sysUsersRolesService.save(usersRoles);
// 保存店铺信息
ShopInfo shopInfo = BeanUtil.copyProperties(shopInfoAddDTO, ShopInfo.class);
shopInfo.setId(sysUser.getId());
//设置激活码
shopInfo.setStatus(1);
shopInfo.setExpireTime(DateUtil.offsetMonth(DateUtil.date(), merchantRegister.getPeriodMonth()).toLocalDateTime());
return save(shopInfo);
}
} }

View File

@ -0,0 +1,18 @@
package com.czg.service.account.service.impl;
import com.czg.service.account.entity.ShopStaff;
import com.czg.service.account.mapper.ShopStaffMapper;
import com.czg.service.account.service.ShopStaffService;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* 店铺员工 服务层实现
*
* @author Administrator
* @since 2025-02-10
*/
@Service
public class ShopStaffServiceImpl extends ServiceImpl<ShopStaffMapper, ShopStaff> implements ShopStaffService {
}

View File

@ -0,0 +1,18 @@
package com.czg.service.account.service.impl;
import com.czg.service.account.entity.ShopUser;
import com.czg.service.account.mapper.ShopUserMapper;
import com.czg.service.account.service.ShopUserService;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* 商户储值会员 服务层实现
*
* @author Administrator
* @since 2025-02-08
*/
@Service
public class ShopUserServiceImpl extends ServiceImpl<ShopUserMapper, ShopUser> implements ShopUserService {
}

View File

@ -11,10 +11,7 @@ import com.czg.service.account.entity.SysMenu;
import com.czg.service.account.entity.SysRolesMenus; import com.czg.service.account.entity.SysRolesMenus;
import com.czg.service.account.service.SysMenuService; import com.czg.service.account.service.SysMenuService;
import com.czg.service.account.service.SysRolesMenusService; import com.czg.service.account.service.SysRolesMenusService;
import com.czg.utils.AssertUtil;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryChain;
import com.mybatisflex.core.query.QueryCondition;
import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.spring.service.impl.ServiceImpl; import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.SysRole; import com.czg.service.account.entity.SysRole;

View File

@ -1,18 +0,0 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.TbShopInfo;
import com.czg.service.account.mapper.TbShopInfoMapper;
import com.czg.service.account.service.TbShopInfoService;
import org.springframework.stereotype.Service;
/**
* 店铺信息 服务层实现
*
* @author Administrator
* @since 2025-02-10
*/
@Service
public class TbShopInfoServiceImpl extends ServiceImpl<TbShopInfoMapper, TbShopInfo> implements TbShopInfoService{
}

View File

@ -1,18 +0,0 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.TbShopStaff;
import com.czg.service.account.mapper.TbShopStaffMapper;
import com.czg.service.account.service.TbShopStaffService;
import org.springframework.stereotype.Service;
/**
* 店铺员工 服务层实现
*
* @author Administrator
* @since 2025-02-10
*/
@Service
public class TbShopStaffServiceImpl extends ServiceImpl<TbShopStaffMapper, TbShopStaff> implements TbShopStaffService{
}

View File

@ -1,18 +0,0 @@
package com.czg.service.account.service.impl;
import com.mybatisflex.spring.service.impl.ServiceImpl;
import com.czg.service.account.entity.TbShopUser;
import com.czg.service.account.mapper.TbShopUserMapper;
import com.czg.service.account.service.TbShopUserService;
import org.springframework.stereotype.Service;
/**
* 商户储值会员 服务层实现
*
* @author Administrator
* @since 2025-02-08
*/
@Service
public class TbShopUserServiceImpl extends ServiceImpl<TbShopUserMapper, TbShopUser> implements TbShopUserService{
}

View File

@ -1,7 +1,7 @@
package com.czg.service.account.vo; package com.czg.service.account.vo;
import cn.dev33.satoken.stp.SaTokenInfo; import cn.dev33.satoken.stp.SaTokenInfo;
import com.czg.service.account.entity.TbShopInfo; import com.czg.service.account.entity.ShopInfo;
import java.util.List; import java.util.List;
@ -13,6 +13,6 @@ public record LoginVO(
// 登录类型 // 登录类型
Integer loginType, Integer loginType,
// 店铺信息 // 店铺信息
TbShopInfo shopInfo ShopInfo shopInfo
) { ) {
} }

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.czg.service.account.mapper.MerchantRegisterMapper">
</mapper>

View File

@ -68,8 +68,8 @@ public class Main {
//设置表前缀和只生成哪些表setGenerateTable 未配置时生成所有表 //设置表前缀和只生成哪些表setGenerateTable 未配置时生成所有表
globalConfig.getStrategyConfig() globalConfig.getStrategyConfig()
.setTablePrefix("") .setTablePrefix("tb")
.setGenerateTable("sys_roles_menus"); .setGenerateTable("tb_merchant_register");
//设置生成 entity 并启用 Lombok //设置生成 entity 并启用 Lombok
globalConfig.enableEntity() globalConfig.enableEntity()