完成的商品搜索和条件功能

This commit is contained in:
YunaiV
2020-08-04 19:42:54 +08:00
parent f3316d14c7
commit b83262af5f
240 changed files with 246 additions and 859 deletions

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>system</artifactId>
<groupId>cn.iocoder.mall</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>system-service-api</artifactId>
<dependencies>
<!-- Mall 相关 -->
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>common-framework</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</dependency>
<!-- 工具类相关 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId> <!-- use mapstruct-jdk8 for Java 8 or higher -->
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,44 @@
package cn.iocoder.mall.system.api;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.system.api.bo.datadict.DataDictBO;
import cn.iocoder.mall.system.api.dto.datadict.DataDictAddDTO;
import cn.iocoder.mall.system.api.dto.datadict.DataDictUpdateDTO;
import java.util.Collection;
import java.util.List;
public interface DataDictService {
List<DataDictBO> selectDataDictList();
DataDictBO addDataDict(Integer adminId, DataDictAddDTO dataDictAddDTO);
Boolean updateDataDict(Integer adminId, DataDictUpdateDTO dataDictUpdateDTO);
Boolean deleteDataDict(Integer adminId, Integer dataDictId);
/**
* 获取字典值 - 单个
*
* 注意: dictValue:Object 为了方便调用,会自动转换为 dictValue:String
*
* @param dictKey
* @param dictValue
* @return
*/
CommonResult<DataDictBO> getDataDict(String dictKey, Object dictValue);
CommonResult<List<DataDictBO>> getDataDict(String dictKey);
/**
* 获取字典值 - 多个
*
* 注意dictValueList:? 为了方便调用,会自动转换为 Set:String
*
* @param dictKey
* @param dictValueList
* @return
*/
CommonResult<List<DataDictBO>> getDataDictList(String dictKey, Collection<?> dictValueList);
}

View File

@@ -0,0 +1,116 @@
package cn.iocoder.mall.system.api;
import cn.iocoder.mall.system.api.bo.sms.SmsSignBO;
import cn.iocoder.mall.system.api.bo.sms.PageSmsSignBO;
import cn.iocoder.mall.system.api.bo.sms.SmsTemplateBO;
import cn.iocoder.mall.system.api.bo.sms.PageSmsTemplateBO;
import cn.iocoder.mall.system.api.dto.sms.PageQuerySmsSignDTO;
import cn.iocoder.mall.system.api.dto.sms.PageQuerySmsTemplateDTO;
import java.util.List;
import java.util.Map;
/**
* 短信服务
*
* @author Sin
* @time 2019/5/16 9:54 AM
*/
public interface SmsService {
/**
* 短信模板 - 分页
*
* @param queryDTO
* @return
*/
PageSmsSignBO pageSmsSign(PageQuerySmsSignDTO queryDTO);
/**
* 短信模板 - 分页
*
* @param queryDTO
* @return
*/
PageSmsTemplateBO pageSmsTemplate(PageQuerySmsTemplateDTO queryDTO);
/**
* 签名 - 创建
*
* @param sign
*/
void addSign(String sign, Integer platform);
/**
* 签名 - 获取
*
* @param id
*/
SmsSignBO getSign(Integer id);
/**
* 签名 - 更新
*
* @param id
* @param newSign
* @param platform
*/
void updateSign(Integer id, String newSign, Integer platform);
/**
* 签名 - 更新
*
* @param id
*/
void deleteSign(Integer id);
/**
* 模板 - 创建
*
* @param smsSignId 选用的哪个签名
* @param templateCode 模板code
* @param template 模板内容
* @param platform 平台
*/
void addTemplate(Integer smsSignId, String templateCode,
String template, Integer platform, Integer smsType);
/**
* 模板 - 获取
*
* @param id
*/
SmsTemplateBO getTemplate(Integer id, Integer platform);
/**
* 模板 - 更新
*
* @param id 模板id
* @param smsSignId 短期签名
* @param template 模板内容
* @param platform 短信平台
*/
void updateTemplate(Integer id, Integer smsSignId, String templateCode,
String template, Integer platform, Integer smsType);
/**
* 模板 - 删除
*
* @param id
*/
void deleteTemplate(Integer id);
/**
* 短信发送 - 单个
*
* @return
*/
void singleSend(String mobile, Integer smsTemplateId, Map<String, String> params);
/**
* 短信发送 - 批量
*
* @return
*/
void batchSend(List<String> mobileList, Integer smsTemplateId, Map<String, String> params);
}

View File

@@ -0,0 +1,68 @@
package cn.iocoder.mall.system.api.bo.sms;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.List;
/**
* sms page
*
* @author Sin
* @time 2019/5/19 4:23 PM
*/
@Data
@Accessors(chain = true)
public class PageSmsSignBO {
private Integer count;
private Long current;
private Long size;
private Long total;
private List<Sign> data;
@Data
@Accessors(chain = true)
public static class Sign {
/**
* 编号
*/
private Integer id;
/**
* 短信平台
*/
private Integer platform;
/**
* 签名名称
*/
private String sign;
/**
* 审核状态
* <p>
* - 1、审核中
* - 2、审核成功
* - 3、审核失败
*/
private Integer applyStatus;
/**
* 审核信息
*/
private String applyMessage;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
}
}

View File

@@ -0,0 +1,117 @@
package cn.iocoder.mall.system.api.bo.sms;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
import java.util.List;
/**
* sms page
*
* @author Sin
* @time 2019/5/19 4:23 PM
*/
@Data
@Accessors(chain = true)
public class PageSmsTemplateBO {
private Long total;
private Long current;
private Long size;
private List<Template> data;
@Data
@Accessors(chain = true)
public static class Template {
/**
* 编号
*/
private Integer id;
/**
* 模板编号 (第三方的)
*/
private Integer smsSignId;
/**
* 短信签名 id
*/
private String platform;
/**
* 短信模板 Code
*/
private String templateCode;
/**
* 短信模板
*/
private String template;
/**
* 短信类型
*/
private Integer smsType;
/**
* 审核状态
*
* 1、审核中
* 2、审核成功
* 3、审核失败
*/
private Integer applyStatus;
/**
* 审核信息
*/
private String applyMessage;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
///
/// 关联字段
/**
* 签名信息
*/
private Sign sign;
}
@Data
@Accessors(chain = true)
public static class Sign {
/**
* 编号
*/
private Integer id;
/**
* 签名id 这个是第三方的
*/
private String platformId;
/**
* 签名名称
*/
private String sign;
/**
* 审核状态
*
* - 1、审核中
* - 2、审核成功
* - 3、审核失败
*/
private Integer applyStatus;
/**
* 审核信息
*/
private String applyMessage;
}
}

View File

@@ -0,0 +1,40 @@
package cn.iocoder.mall.system.api.bo.sms;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 短信签名
*
* @author Sin
* @time 2019/5/16 6:30 PM
*/
@Data
@Accessors(chain = true)
public class SmsSignBO {
/**
* 编号
*/
private Integer id;
/**
* 签名id 这个是第三方的
*/
private Integer signId;
/**
* 签名名称
*/
private String sign;
/**
* 审核状态
*
* - 1、审核中
* - 2、审核成功
* - 3、审核失败
*/
private Integer applyStatus;
/**
* 审核信息
*/
private String applyMessage;
}

View File

@@ -0,0 +1,44 @@
package cn.iocoder.mall.system.api.bo.sms;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 短信 template
*
* @author Sin
* @time 2019/5/16 7:41 PM
*/
@Data
@Accessors(chain = true)
public class SmsTemplateBO {
/**
* 编号
*/
private Integer id;
/**
* 模板编号 (第三方的)
*/
private Integer smsSignId;
/**
* 短信签名 id
*/
private String platformId;
/**
* 短信模板
*/
private String template;
/**
* 审核状态
*
* 1、审核中
* 2、审核成功
* 3、审核失败
*/
private Integer applyStatus;
/**
* 审核信息
*/
private String applyMessage;
}

View File

@@ -0,0 +1,85 @@
package cn.iocoder.mall.system.api.constant;
/**
* 错误码枚举类
*
* 管理员系统,使用 1-002-000-000 段
*/
public enum AdminErrorCodeEnum {
// ========== OAUTH2 模块 ==========
OAUTH2_UNKNOWN(1002001000, "未知错误"), // 预留
// OAUTH2_INVALID_GRANT_BAD_CREDENTIALS(1001001001, "密码不正确"), // 暂时没用到
// OAUTH2_INVALID_GRANT_USERNAME_NOT_FOUND(1001001002, "账号不存在"), // 暂时没用到
// OAUTH2_INVALID_GRANT(1001001010, ""), // 预留
OAUTH2_INVALID_TOKEN_NOT_FOUND(1002001011, "访问令牌不存在"),
OAUTH2_INVALID_TOKEN_EXPIRED(1002001012, "访问令牌已过期"),
OAUTH2_INVALID_TOKEN_INVALID(1002001013, "访问令牌已失效"),
OAUTH2_NOT_LOGIN(1002001015, "账号未登陆"),
OAUTH2_INVALID_TOKEN_ERROR_USER_TYPE(1002001016, "访问令牌用户类型不正确"),
OAUTH_INVALID_REFRESH_TOKEN_NOT_FOUND(1002001017, "刷新令牌不存在"),
OAUTH_INVALID_REFRESH_TOKEN_EXPIRED(1002001018, "访问令牌已过期"),
OAUTH_INVALID_REFRESH_TOKEN_INVALID(1002001019, "刷新令牌已失效"),
// ========== 管理员模块 1002002000 ==========
ADMIN_USERNAME_NOT_REGISTERED(1002002000, "账号不存在"),
ADMIN_PASSWORD_ERROR(1002002001, "密码不正确"),
ADMIN_IS_DISABLE(1002002002, "账号被禁用"),
ADMIN_USERNAME_EXISTS(1002002002, "账号已经存在"),
ADMIN_STATUS_EQUALS(1002002003, "账号已经是该状态"),
ADMIN_DELETE_ONLY_DISABLE(1002002004, "只有关闭的账号才可以删除"),
ADMIN_ADMIN_STATUS_CAN_NOT_UPDATE(1002002005, "管理员的账号状态不允许变更"),
ADMIN_ASSIGN_ROLE_NOT_EXISTS(1002002006, "分配员工角色时,有角色不存在"),
ADMIN_INVALID_PERMISSION(1002002007, "没有该操作权限"),
ADMIN_ADMIN_CAN_NOT_UPDATE(1002002008, "管理员的账号不允许变更"),
ADMIN_DEMO_CAN_NOT_WRITE(1002002009, "演示账号暂不允许写操作。欢迎加入我们的交流群http://t.cn/EKEr5WE"),
// ========== 资源模块 1002003000 ==========
RESOURCE_NAME_DUPLICATE(1002003000, "已经存在该名字的资源"),
RESOURCE_PARENT_NOT_EXISTS(1002003001, "父资源不存在"),
RESOURCE_PARENT_ERROR(1002003002, "不能设置自己为父资源"),
RESOURCE_NOT_EXISTS(1002003003, "资源不存在"),
RESOURCE_EXISTS_CHILDREN(1002003004, "存在子资源,无法删除"),
RESOURCE_PARENT_NOT_MENU(1002003005, "父资源的类型必须是菜单"),
// ========== 角色模块 1002004000 ==========
ROLE_NOT_EXISTS(1002004000, "角色不存在"),
ROLE_ASSIGN_RESOURCE_NOT_EXISTS(1002004001, "分配角色资源时,有资源不存在"),
// ========== 数据字典模块 1002005000 ==========
DATA_DICT_EXISTS(1002005000, "该数据字典已经存在"),
DATA_DICT_NOT_EXISTS(1002005001, "该数据字典不存在"),
// ========== 短信模板 1002006000 ==========
SMS_PLATFORM_FAIL(1002006000, "短信平台调用失败【具体错误会动态替换】"),
SMS_SIGN_NOT_EXISTENT(1002006001, "短信签名不存在"),
SMS_SIGN_IS_EXISTENT(1002006002, "短信签名已存在"),
SMS_TEMPLATE_NOT_EXISTENT(1002006020, "短信签名不存在"),
SMS_TEMPLATE_IS_EXISTENT(1002006021, "短信签名不存在"),
SMS_NOT_SEND_CLIENT(1002006030, "短信没有发送的client"),
// ========== 部门模块 1002007000 ==========
DEPT_SAME_LEVEL_NAME_EXITS(1002007001,"当前级别部门名字已存在"),
DEPT_PARENT_NOT_EXITS(1002007002,"父级部门不存在"),
DEPT_NOT_EXITS(1002007003, "当前部门不存在"),
DEPT_EXITS_CHILDREN(1002007004, "当前部门存在子部门"),
DEPT_PARENT_NOT_LEGAL(1002007005, "父级部门不合法"),
;
private final int code;
private final String message;
AdminErrorCodeEnum(int code, String message) {
this.code = code;
this.message = message;
}
public int getCode() {
return code;
}
public String getMessage() {
return message;
}
}

View File

@@ -0,0 +1,31 @@
package cn.iocoder.mall.system.api.constant;
/**
* 短信审核状态
*
* @author Sin
* @time 2019/5/16 12:48 PM
*/
public enum SmsApplyStatusEnum {
CHECKING(1, "审核中"),
SUCCESS(2, "审核成功"),
FAIL(10, "审核失败"),
;
private final Integer value;
private final String name;
SmsApplyStatusEnum(int code, String message) {
this.value = code;
this.name = message;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}

View File

@@ -0,0 +1,41 @@
package cn.iocoder.mall.system.api.constant;
import cn.iocoder.common.framework.core.IntArrayValuable;
import java.util.Arrays;
/**
* 短信审核状态
*
* @author Sin
* @time 2019/5/16 12:48 PM
*/
public enum SmsPlatformEnum implements IntArrayValuable {
YunPian(1, "云片"),
AliYun(2, "阿里云"),
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsPlatformEnum::getValue).toArray();
private final Integer value;
private final String name;
SmsPlatformEnum(Integer code, String message) {
this.value = code;
this.name = message;
}
public Integer getValue() {
return value;
}
public String getName() {
return name;
}
@Override
public int[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,42 @@
package cn.iocoder.mall.system.api.constant;
import cn.iocoder.common.framework.core.IntArrayValuable;
import java.util.Arrays;
/**
* 短信审核状态
*
* @author Sin
* @time 2019/5/16 12:48 PM
*/
public enum SmsTypeEnum implements IntArrayValuable {
VERIFICATION_CODE(1, "验证码"),
NOTICE(2, "通知"),
MARKETING(3, "营销"),
;
public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(SmsTypeEnum::getValue).toArray();
private final Integer value;
private final String name;
SmsTypeEnum(Integer code, String message) {
this.value = code;
this.name = message;
}
public Integer getValue() {
return value;
}
public String getName() {
return name;
}
@Override
public int[] array() {
return ARRAYS;
}
}

View File

@@ -0,0 +1,38 @@
package cn.iocoder.mall.system.api.dto.sms;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* page 短信模板 query
*
* @author Sin
* @time 2019/5/19 4:32 PM
*/
@Data
@Accessors(chain = true)
@ApiModel("短信服务查询")
public class PageQuerySmsSignDTO implements Serializable {
@ApiModelProperty("每页大小")
@NotNull
private Integer size;
@ApiModelProperty("当前页")
@NotNull
private Integer current;
@ApiModelProperty("编号")
private Integer id;
@ApiModelProperty("签名")
private String sign;
@ApiModelProperty("申请状态")
private Integer applyStatus;
}

View File

@@ -0,0 +1,36 @@
package cn.iocoder.mall.system.api.dto.sms;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* page 短信模板 query
*
* @author Sin
* @time 2019/5/19 4:32 PM
*/
@Data
@Accessors(chain = true)
public class PageQuerySmsTemplateDTO implements Serializable {
@NotNull
private Long current;
@NotNull
private Long size;
@NotNull
private String id;
@NotNull
private Integer smsSignId;
@NotNull
private String template;
@NotNull
private String applyStatus;
}