测试
This commit is contained in:
@ -164,5 +164,9 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode TIME_NOT_SATISFY = new ErrorCode(1_004_026_00, "27号后不能充值");
|
||||
|
||||
ErrorCode GROUP_COUNT_NOT_EXISTS = new ErrorCode(1_004_027_00, "用户分组充值统计不存在");
|
||||
|
||||
|
||||
ErrorCode CONFIG_DATA_NOT_EXISTS = new ErrorCode(1_004_028_00, "配置数据不存在");
|
||||
ErrorCode CONFIG_TYPE_NOT_EXISTS = new ErrorCode(1_004_029_00, "配置类型不存在");
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,95 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configdata;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configdata.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import cn.iocoder.yudao.module.member.service.configdata.ConfigDataService;
|
||||
|
||||
@Tag(name = "管理后台 - 配置数据")
|
||||
@RestController
|
||||
@RequestMapping("/member/config-data")
|
||||
@Validated
|
||||
public class ConfigDataController {
|
||||
|
||||
@Resource
|
||||
private ConfigDataService configDataService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建配置数据")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:create')")
|
||||
public CommonResult<Long> createConfigData(@Valid @RequestBody ConfigDataSaveReqVO createReqVO) {
|
||||
return success(configDataService.createConfigData(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新配置数据")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:update')")
|
||||
public CommonResult<Boolean> updateConfigData(@Valid @RequestBody ConfigDataSaveReqVO updateReqVO) {
|
||||
configDataService.updateConfigData(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除配置数据")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:delete')")
|
||||
public CommonResult<Boolean> deleteConfigData(@RequestParam("id") Long id) {
|
||||
configDataService.deleteConfigData(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得配置数据")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:query')")
|
||||
public CommonResult<ConfigDataRespVO> getConfigData(@RequestParam("id") Long id) {
|
||||
ConfigDataDO configData = configDataService.getConfigData(id);
|
||||
return success(BeanUtils.toBean(configData, ConfigDataRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得配置数据分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:query')")
|
||||
public CommonResult<PageResult<ConfigDataRespVO>> getConfigDataPage(@Valid ConfigDataPageReqVO pageReqVO) {
|
||||
PageResult<ConfigDataDO> pageResult = configDataService.getConfigDataPage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, ConfigDataRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出配置数据 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-data:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportConfigDataExcel(@Valid ConfigDataPageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ConfigDataDO> list = configDataService.getConfigDataPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "配置数据.xls", "数据", ConfigDataRespVO.class,
|
||||
BeanUtils.toBean(list, ConfigDataRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configdata.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 配置数据分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ConfigDataPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "配置标签")
|
||||
private String label;
|
||||
|
||||
@Schema(description = "配置键值")
|
||||
private String value;
|
||||
|
||||
@Schema(description = "键值类型,1-文本,2-时间", example = "1")
|
||||
private Integer valueType;
|
||||
|
||||
@Schema(description = "配置类型", example = "2")
|
||||
private String dictType;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configdata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 配置数据 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ConfigDataRespVO {
|
||||
|
||||
@Schema(description = "字典编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "5829")
|
||||
@ExcelProperty("字典编码")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "配置标签", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("配置标签")
|
||||
private String label;
|
||||
|
||||
@Schema(description = "配置键值", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("配置键值")
|
||||
private String value;
|
||||
|
||||
@Schema(description = "键值类型,1-文本,2-时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("键值类型,1-文本,2-时间")
|
||||
private Integer valueType;
|
||||
|
||||
@Schema(description = "配置类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@ExcelProperty("配置类型")
|
||||
private String dictType;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configdata.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 配置数据新增/修改 Request VO")
|
||||
@Data
|
||||
public class ConfigDataSaveReqVO {
|
||||
|
||||
@Schema(description = "字典编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "5829")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "配置标签", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "配置标签不能为空")
|
||||
private String label;
|
||||
|
||||
@Schema(description = "配置键值", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@NotEmpty(message = "配置键值不能为空")
|
||||
private String value;
|
||||
|
||||
@Schema(description = "键值类型,1-文本,2-时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotNull(message = "键值类型,1-文本,2-时间不能为空")
|
||||
private Integer valueType;
|
||||
|
||||
@Schema(description = "配置类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
|
||||
@NotEmpty(message = "配置类型不能为空")
|
||||
private String dictType;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configtype;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import javax.validation.constraints.*;
|
||||
import javax.validation.*;
|
||||
import javax.servlet.http.*;
|
||||
import java.util.*;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
|
||||
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
|
||||
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configtype.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configtype.ConfigTypeDO;
|
||||
import cn.iocoder.yudao.module.member.service.configtype.ConfigTypeService;
|
||||
|
||||
@Tag(name = "管理后台 - 配置类型")
|
||||
@RestController
|
||||
@RequestMapping("/member/config-type")
|
||||
@Validated
|
||||
public class ConfigTypeController {
|
||||
|
||||
@Resource
|
||||
private ConfigTypeService configTypeService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建配置类型")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:create')")
|
||||
public CommonResult<Long> createConfigType(@Valid @RequestBody ConfigTypeSaveReqVO createReqVO) {
|
||||
return success(configTypeService.createConfigType(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新配置类型")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:update')")
|
||||
public CommonResult<Boolean> updateConfigType(@Valid @RequestBody ConfigTypeSaveReqVO updateReqVO) {
|
||||
configTypeService.updateConfigType(updateReqVO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete")
|
||||
@Operation(summary = "删除配置类型")
|
||||
@Parameter(name = "id", description = "编号", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:delete')")
|
||||
public CommonResult<Boolean> deleteConfigType(@RequestParam("id") Long id) {
|
||||
configTypeService.deleteConfigType(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得配置类型")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:query')")
|
||||
public CommonResult<ConfigTypeRespVO> getConfigType(@RequestParam("id") Long id) {
|
||||
ConfigTypeDO configType = configTypeService.getConfigType(id);
|
||||
return success(BeanUtils.toBean(configType, ConfigTypeRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得配置类型分页")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:query')")
|
||||
public CommonResult<PageResult<ConfigTypeRespVO>> getConfigTypePage(@Valid ConfigTypePageReqVO pageReqVO) {
|
||||
PageResult<ConfigTypeDO> pageResult = configTypeService.getConfigTypePage(pageReqVO);
|
||||
return success(BeanUtils.toBean(pageResult, ConfigTypeRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出配置类型 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('member:config-type:export')")
|
||||
@OperateLog(type = EXPORT)
|
||||
public void exportConfigTypeExcel(@Valid ConfigTypePageReqVO pageReqVO,
|
||||
HttpServletResponse response) throws IOException {
|
||||
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
|
||||
List<ConfigTypeDO> list = configTypeService.getConfigTypePage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "配置类型.xls", "数据", ConfigTypeRespVO.class,
|
||||
BeanUtils.toBean(list, ConfigTypeRespVO.class));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configtype.vo;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 配置类型分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class ConfigTypePageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "配置名称", example = "芋艿")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "配置类型", example = "1")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configtype.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.util.*;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import java.time.LocalDateTime;
|
||||
import com.alibaba.excel.annotation.*;
|
||||
|
||||
@Schema(description = "管理后台 - 配置类型 Response VO")
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class ConfigTypeRespVO {
|
||||
|
||||
@Schema(description = "字典主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "19574")
|
||||
@ExcelProperty("字典主键")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
|
||||
@ExcelProperty("配置名称")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "配置类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@ExcelProperty("配置类型")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
@ExcelProperty("备注")
|
||||
private String remark;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
@ExcelProperty("创建时间")
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.member.controller.admin.configtype.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
@Schema(description = "管理后台 - 配置类型新增/修改 Request VO")
|
||||
@Data
|
||||
public class ConfigTypeSaveReqVO {
|
||||
|
||||
@Schema(description = "字典主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "19574")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "配置名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
|
||||
@NotEmpty(message = "配置名称不能为空")
|
||||
private String name;
|
||||
|
||||
@Schema(description = "配置类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
@NotEmpty(message = "配置类型不能为空")
|
||||
private String type;
|
||||
|
||||
@Schema(description = "备注", example = "随便")
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.configdata;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configdata.vo.ConfigDataRespVO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import cn.iocoder.yudao.module.member.service.configdata.ConfigDataService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@Tag(name = "APP - 配置数据")
|
||||
@RestController
|
||||
@RequestMapping("/member/config-data")
|
||||
@Validated
|
||||
public class AppConfigDataController {
|
||||
|
||||
@Resource
|
||||
private ConfigDataService configDataService;
|
||||
|
||||
|
||||
@GetMapping("/getList")
|
||||
@Operation(summary = "获得配置数据")
|
||||
public CommonResult<List<ConfigDataRespVO>> getConfigData(@RequestParam("dictType") String dictType) {
|
||||
List<ConfigDataDO> configData = configDataService.getConfigDataList(dictType);
|
||||
return success(BeanUtils.toBean(configData, ConfigDataRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/getOne")
|
||||
@Operation(summary = "获得配置数据")
|
||||
public CommonResult<ConfigDataRespVO> getConfigData(@RequestParam("label") String label,@RequestParam("dictType") String dictType) {
|
||||
ConfigDataDO configData = configDataService.getConfigData(label, dictType);
|
||||
return success(BeanUtils.toBean(configData, ConfigDataRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,6 +1,8 @@
|
||||
package cn.iocoder.yudao.module.member.controller.app.storeorder;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
@ -10,11 +12,14 @@ import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.StoreOrderR
|
||||
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderDetailVo;
|
||||
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.AppStoreOrderVO;
|
||||
import cn.iocoder.yudao.module.member.controller.app.storeorder.vo.CardDto;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO;
|
||||
import cn.iocoder.yudao.module.member.enums.StoreOrderStatusEnum;
|
||||
import cn.iocoder.yudao.module.member.service.async.MemberAsyncService;
|
||||
import cn.iocoder.yudao.module.member.service.configdata.ConfigDataService;
|
||||
import cn.iocoder.yudao.module.member.service.storeorder.StoreOrderService;
|
||||
import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService;
|
||||
import cn.iocoder.yudao.module.member.util.ConfigConstants;
|
||||
import cn.iocoder.yudao.module.system.api.carteen.CarteenApi;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -28,9 +33,14 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.Duration;
|
||||
import java.time.LocalTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CONFIG_TYPE_NOT_EXISTS;
|
||||
|
||||
@Tag(name = "APP超市 - 商品订单")
|
||||
@RestController
|
||||
@ -46,6 +56,8 @@ public class AppStoreOrderController {
|
||||
private CarteenApi carteenApi;
|
||||
@Resource
|
||||
private MemberAsyncService memberAsyncService;
|
||||
@Resource
|
||||
private ConfigDataService configDataService;
|
||||
|
||||
|
||||
@GetMapping("/page")
|
||||
@ -70,8 +82,7 @@ public class AppStoreOrderController {
|
||||
@PostMapping("/appCreate")
|
||||
@Operation(summary = "创建购物车订单")
|
||||
public CommonResult<Boolean> appCreate(@RequestBody CardDto dto) {
|
||||
|
||||
|
||||
checkTime();
|
||||
AddReqVO addReqVO = storeOrderService.appCreate(dto);
|
||||
//记录
|
||||
memberAsyncService.batchRecord(addReqVO);
|
||||
@ -131,4 +142,22 @@ public class AppStoreOrderController {
|
||||
}
|
||||
|
||||
|
||||
public void checkTime(){
|
||||
String start = configDataService.getConfigData(ConfigConstants.START_TIME, ConfigConstants.BUY_PROHIBIT).getValue();
|
||||
String end = configDataService.getConfigData(ConfigConstants.END_TIME, ConfigConstants.BUY_PROHIBIT).getValue();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||
LocalTime startTime = LocalTime.parse(start, formatter);
|
||||
LocalTime endTime = LocalTime.parse(end, formatter);
|
||||
LocalTime now = LocalTime.now();
|
||||
|
||||
Duration startToNow = Duration.between(startTime, now);
|
||||
Duration startToEnd = Duration.between(startTime, endTime);
|
||||
|
||||
boolean isInRange = startToNow.isZero() ||!startToNow.isNegative() && startToNow.compareTo(startToEnd) <= 0;
|
||||
if(isInRange){
|
||||
String msg = String.format("购买失败,请在%s-%s之间购买", start, end);
|
||||
throw exception(new ErrorCode(1_007_904_009, msg));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.configdata;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 配置数据 DO
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@TableName("member_config_data")
|
||||
@KeySequence("member_config_data_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ConfigDataDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 字典编码
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 配置标签
|
||||
*/
|
||||
private String label;
|
||||
/**
|
||||
* 配置键值
|
||||
*/
|
||||
private String value;
|
||||
/**
|
||||
* 键值类型,1-文本,2-时间
|
||||
*/
|
||||
private Integer valueType;
|
||||
/**
|
||||
* 配置类型
|
||||
*/
|
||||
private String dictType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package cn.iocoder.yudao.module.member.dal.dataobject.configtype;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
|
||||
/**
|
||||
* 配置类型 DO
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@TableName("member_config_type")
|
||||
@KeySequence("member_config_type_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ConfigTypeDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 字典主键
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 配置名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 配置类型
|
||||
*/
|
||||
private String type;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package cn.iocoder.yudao.module.member.dal.mysql.configdata;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configdata.vo.*;
|
||||
|
||||
/**
|
||||
* 配置数据 Mapper
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@Mapper
|
||||
public interface ConfigDataMapper extends BaseMapperX<ConfigDataDO> {
|
||||
|
||||
default PageResult<ConfigDataDO> selectPage(ConfigDataPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigDataDO>()
|
||||
.eqIfPresent(ConfigDataDO::getLabel, reqVO.getLabel())
|
||||
.eqIfPresent(ConfigDataDO::getValue, reqVO.getValue())
|
||||
.eqIfPresent(ConfigDataDO::getValueType, reqVO.getValueType())
|
||||
.eqIfPresent(ConfigDataDO::getDictType, reqVO.getDictType())
|
||||
.eqIfPresent(ConfigDataDO::getRemark, reqVO.getRemark())
|
||||
.betweenIfPresent(ConfigDataDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(ConfigDataDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cn.iocoder.yudao.module.member.dal.mysql.configtype;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configtype.ConfigTypeDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configtype.vo.*;
|
||||
|
||||
/**
|
||||
* 配置类型 Mapper
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@Mapper
|
||||
public interface ConfigTypeMapper extends BaseMapperX<ConfigTypeDO> {
|
||||
|
||||
default PageResult<ConfigTypeDO> selectPage(ConfigTypePageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<ConfigTypeDO>()
|
||||
.likeIfPresent(ConfigTypeDO::getName, reqVO.getName())
|
||||
.eqIfPresent(ConfigTypeDO::getType, reqVO.getType())
|
||||
.eqIfPresent(ConfigTypeDO::getRemark, reqVO.getRemark())
|
||||
.betweenIfPresent(ConfigTypeDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(ConfigTypeDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package cn.iocoder.yudao.module.member.service.configdata;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configdata.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 配置数据 Service 接口
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
public interface ConfigDataService {
|
||||
|
||||
/**
|
||||
* 创建配置数据
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createConfigData(@Valid ConfigDataSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新配置数据
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateConfigData(@Valid ConfigDataSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除配置数据
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteConfigData(Long id);
|
||||
|
||||
/**
|
||||
* 获得配置数据
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 配置数据
|
||||
*/
|
||||
ConfigDataDO getConfigData(Long id);
|
||||
|
||||
/**
|
||||
* 获得配置数据分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 配置数据分页
|
||||
*/
|
||||
PageResult<ConfigDataDO> getConfigDataPage(ConfigDataPageReqVO pageReqVO);
|
||||
|
||||
ConfigDataDO getConfigData(String label,String dictType);
|
||||
|
||||
List<ConfigDataDO> getConfigDataList(String dictType);
|
||||
}
|
@ -0,0 +1,86 @@
|
||||
package cn.iocoder.yudao.module.member.service.configdata;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configdata.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configdata.ConfigDataDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.configdata.ConfigDataMapper;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 配置数据 Service 实现类
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ConfigDataServiceImpl implements ConfigDataService {
|
||||
|
||||
@Resource
|
||||
private ConfigDataMapper configDataMapper;
|
||||
|
||||
@Override
|
||||
public Long createConfigData(ConfigDataSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ConfigDataDO configData = BeanUtils.toBean(createReqVO, ConfigDataDO.class);
|
||||
configDataMapper.insert(configData);
|
||||
// 返回
|
||||
return configData.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateConfigData(ConfigDataSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateConfigDataExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ConfigDataDO updateObj = BeanUtils.toBean(updateReqVO, ConfigDataDO.class);
|
||||
configDataMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteConfigData(Long id) {
|
||||
// 校验存在
|
||||
validateConfigDataExists(id);
|
||||
// 删除
|
||||
configDataMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateConfigDataExists(Long id) {
|
||||
if (configDataMapper.selectById(id) == null) {
|
||||
throw exception(CONFIG_DATA_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigDataDO getConfigData(Long id) {
|
||||
return configDataMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ConfigDataDO> getConfigDataPage(ConfigDataPageReqVO pageReqVO) {
|
||||
return configDataMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigDataDO getConfigData(String label, String dictType) {
|
||||
return configDataMapper.selectOne(Wrappers.<ConfigDataDO>lambdaQuery()
|
||||
.eq(ConfigDataDO::getLabel,label).eq(ConfigDataDO::getDictType,dictType));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ConfigDataDO> getConfigDataList(String dictType) {
|
||||
return configDataMapper.selectList(Wrappers.<ConfigDataDO>lambdaQuery()
|
||||
.eq(ConfigDataDO::getDictType,dictType));
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package cn.iocoder.yudao.module.member.service.configtype;
|
||||
|
||||
import java.util.*;
|
||||
import javax.validation.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configtype.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configtype.ConfigTypeDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
|
||||
/**
|
||||
* 配置类型 Service 接口
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
public interface ConfigTypeService {
|
||||
|
||||
/**
|
||||
* 创建配置类型
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
* @return 编号
|
||||
*/
|
||||
Long createConfigType(@Valid ConfigTypeSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 更新配置类型
|
||||
*
|
||||
* @param updateReqVO 更新信息
|
||||
*/
|
||||
void updateConfigType(@Valid ConfigTypeSaveReqVO updateReqVO);
|
||||
|
||||
/**
|
||||
* 删除配置类型
|
||||
*
|
||||
* @param id 编号
|
||||
*/
|
||||
void deleteConfigType(Long id);
|
||||
|
||||
/**
|
||||
* 获得配置类型
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 配置类型
|
||||
*/
|
||||
ConfigTypeDO getConfigType(Long id);
|
||||
|
||||
/**
|
||||
* 获得配置类型分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 配置类型分页
|
||||
*/
|
||||
PageResult<ConfigTypeDO> getConfigTypePage(ConfigTypePageReqVO pageReqVO);
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package cn.iocoder.yudao.module.member.service.configtype;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import cn.iocoder.yudao.module.member.controller.admin.configtype.vo.*;
|
||||
import cn.iocoder.yudao.module.member.dal.dataobject.configtype.ConfigTypeDO;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
|
||||
import cn.iocoder.yudao.module.member.dal.mysql.configtype.ConfigTypeMapper;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
|
||||
|
||||
/**
|
||||
* 配置类型 Service 实现类
|
||||
*
|
||||
* @author 秦俊旗
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class ConfigTypeServiceImpl implements ConfigTypeService {
|
||||
|
||||
@Resource
|
||||
private ConfigTypeMapper configTypeMapper;
|
||||
|
||||
@Override
|
||||
public Long createConfigType(ConfigTypeSaveReqVO createReqVO) {
|
||||
// 插入
|
||||
ConfigTypeDO configType = BeanUtils.toBean(createReqVO, ConfigTypeDO.class);
|
||||
configTypeMapper.insert(configType);
|
||||
// 返回
|
||||
return configType.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateConfigType(ConfigTypeSaveReqVO updateReqVO) {
|
||||
// 校验存在
|
||||
validateConfigTypeExists(updateReqVO.getId());
|
||||
// 更新
|
||||
ConfigTypeDO updateObj = BeanUtils.toBean(updateReqVO, ConfigTypeDO.class);
|
||||
configTypeMapper.updateById(updateObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteConfigType(Long id) {
|
||||
// 校验存在
|
||||
validateConfigTypeExists(id);
|
||||
// 删除
|
||||
configTypeMapper.deleteById(id);
|
||||
}
|
||||
|
||||
private void validateConfigTypeExists(Long id) {
|
||||
if (configTypeMapper.selectById(id) == null) {
|
||||
throw exception(CONFIG_TYPE_NOT_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigTypeDO getConfigType(Long id) {
|
||||
return configTypeMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<ConfigTypeDO> getConfigTypePage(ConfigTypePageReqVO pageReqVO) {
|
||||
return configTypeMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.member.util;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* @author zt
|
||||
* @description <description class purpose>
|
||||
* @since 2024/4/12
|
||||
*/
|
||||
public class ConfigConstants {
|
||||
|
||||
/**
|
||||
* 超市禁止购买时间段配置
|
||||
*/
|
||||
public static final String BUY_PROHIBIT = "buy_prohibit";
|
||||
|
||||
public static final String START_TIME = "startTime";
|
||||
|
||||
public static final String END_TIME = "endTime";
|
||||
|
||||
|
||||
}
|
Reference in New Issue
Block a user