Browse Source

增加流水号规则

master
刘忱 2 years ago
parent
commit
e83cf3392b
  1. 4
      win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java
  2. 99
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/SerialNumberController.java
  3. 44
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberBaseVO.java
  4. 14
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberCreateReqVO.java
  5. 43
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberExcelVO.java
  6. 18
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberExportReqVO.java
  7. 20
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberPageReqVO.java
  8. 16
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberRespVO.java
  9. 18
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberUpdateReqVO.java
  10. 34
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/serialnumber/SerialNumberConvert.java
  11. 1
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md
  12. 59
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/serialnumber/SerialNumberDO.java
  13. 35
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/serialnumber/SerialNumberMapper.java
  14. 75
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/serialnumber/SerialNumberService.java
  15. 98
      win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/serialnumber/SerialNumberServiceImpl.java

4
win-module-system/win-module-system-api/src/main/java/com/win/module/system/enums/ErrorCodeConstants.java

@ -163,4 +163,8 @@ public interface ErrorCodeConstants {
// ========== 站内信发送 1-002-028-000 ==========
ErrorCode NOTIFY_SEND_TEMPLATE_PARAM_MISS = new ErrorCode(1_002_028_000, "模板参数({})缺失");
// ========== 流水号编码规则 1-002-029-000 ==========
ErrorCode SERIAL_NUMBER_NOT_EXISTS = new ErrorCode(1_002_029_000, "流水号规则不存在");
ErrorCode SERIAL_NUMBER_EXISTS = new ErrorCode(1_002_029_001, "流水号规则已存在");
}

99
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/SerialNumberController.java

@ -0,0 +1,99 @@
package com.win.module.system.controller.admin.serialnumber;
import com.win.framework.common.pojo.CommonResult;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.excel.core.util.ExcelUtils;
import com.win.framework.operatelog.core.annotations.OperateLog;
import com.win.module.system.controller.admin.serialnumber.vo.*;
import com.win.module.system.convert.serialnumber.SerialNumberConvert;
import com.win.module.system.dal.dataobject.serialnumber.SerialNumberDO;
import com.win.module.system.service.serialnumber.SerialNumberService;
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.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import static com.win.framework.common.pojo.CommonResult.success;
import static com.win.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 流水号规则")
@RestController
@RequestMapping("/system/serial-number")
@Validated
public class SerialNumberController {
@Resource
private SerialNumberService serialNumberService;
@PostMapping("/create")
@Operation(summary = "创建流水号规则")
@PreAuthorize("@ss.hasPermission('system:serial-number:create')")
public CommonResult<Long> createSerialNumber(@Valid @RequestBody SerialNumberCreateReqVO createReqVO) {
return success(serialNumberService.createSerialNumber(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新流水号规则")
@PreAuthorize("@ss.hasPermission('system:serial-number:update')")
public CommonResult<Boolean> updateSerialNumber(@Valid @RequestBody SerialNumberUpdateReqVO updateReqVO) {
serialNumberService.updateSerialNumber(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除流水号规则")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('system:serial-number:delete')")
public CommonResult<Boolean> deleteSerialNumber(@RequestParam("id") Long id) {
serialNumberService.deleteSerialNumber(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得流水号规则")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:serial-number:query')")
public CommonResult<SerialNumberRespVO> getSerialNumber(@RequestParam("id") Long id) {
SerialNumberDO serialNumber = serialNumberService.getSerialNumber(id);
return success(SerialNumberConvert.INSTANCE.convert(serialNumber));
}
@GetMapping("/list")
@Operation(summary = "获得流水号规则列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('system:serial-number:query')")
public CommonResult<List<SerialNumberRespVO>> getSerialNumberList(@RequestParam("ids") Collection<Long> ids) {
List<SerialNumberDO> list = serialNumberService.getSerialNumberList(ids);
return success(SerialNumberConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得流水号规则分页")
@PreAuthorize("@ss.hasPermission('system:serial-number:query')")
public CommonResult<PageResult<SerialNumberRespVO>> getSerialNumberPage(@Valid SerialNumberPageReqVO pageVO) {
PageResult<SerialNumberDO> pageResult = serialNumberService.getSerialNumberPage(pageVO);
return success(SerialNumberConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出流水号规则 Excel")
@PreAuthorize("@ss.hasPermission('system:serial-number:export')")
@OperateLog(type = EXPORT)
public void exportSerialNumberExcel(@Valid SerialNumberExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<SerialNumberDO> list = serialNumberService.getSerialNumberList(exportReqVO);
// 导出 Excel
List<SerialNumberExcelVO> datas = SerialNumberConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "流水号规则.xls", "数据", SerialNumberExcelVO.class, datas);
}
}

44
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberBaseVO.java

@ -0,0 +1,44 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import javax.validation.constraints.*;
/**
* 流水号规则 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class SerialNumberBaseVO {
@Schema(description = "规则编码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "规则编码不能为空")
private String ruleCode;
@Schema(description = "规则名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "王五")
@NotNull(message = "规则名称不能为空")
private String ruleName;
@Schema(description = "编码前缀", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "编码前缀不能为空")
private String prefix;
@Schema(description = "单据格式", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据格式不能为空")
private String pattern;
@Schema(description = "单据流水长度", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据流水长度不能为空")
private Byte length;
@Schema(description = "单据分隔符", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据分隔符不能为空")
private String separator;
@Schema(description = "备注", example = "你说的对")
private String remark;
}

14
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberCreateReqVO.java

@ -0,0 +1,14 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 流水号规则创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SerialNumberCreateReqVO extends SerialNumberBaseVO {
}

43
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberExcelVO.java

@ -0,0 +1,43 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.ExcelProperty;
/**
* 流水号规则 Excel VO
*
* @author 超级管理员
*/
@Data
public class SerialNumberExcelVO {
@ExcelProperty("主键")
private Long id;
@ExcelProperty("规则编码")
private String ruleCode;
@ExcelProperty("规则名称")
private String ruleName;
@ExcelProperty("编码前缀")
private String prefix;
@ExcelProperty("单据格式")
private String pattern;
@ExcelProperty("单据流水长度")
private Byte length;
@ExcelProperty("单据分隔符")
private String separator;
@ExcelProperty("备注")
private String remark;
}

18
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberExportReqVO.java

@ -0,0 +1,18 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
@Schema(description = "管理后台 - 流水号规则 Excel 导出 Request VO,参数和 SerialNumberPageReqVO 是一致的")
@Data
public class SerialNumberExportReqVO {
@Schema(description = "规则编码")
private String ruleCode;
@Schema(description = "规则名称", example = "王五")
private String ruleName;
}

20
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberPageReqVO.java

@ -0,0 +1,20 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import com.win.framework.common.pojo.PageParam;
@Schema(description = "管理后台 - 流水号规则分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SerialNumberPageReqVO extends PageParam {
@Schema(description = "规则编码")
private String ruleCode;
@Schema(description = "规则名称", example = "王五")
private String ruleName;
}

16
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberRespVO.java

@ -0,0 +1,16 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 流水号规则 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SerialNumberRespVO extends SerialNumberBaseVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "19961")
private Long id;
}

18
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/controller/admin/serialnumber/vo/SerialNumberUpdateReqVO.java

@ -0,0 +1,18 @@
package com.win.module.system.controller.admin.serialnumber.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
@Schema(description = "管理后台 - 流水号规则更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class SerialNumberUpdateReqVO extends SerialNumberBaseVO {
@Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "19961")
@NotNull(message = "主键不能为空")
private Long id;
}

34
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/serialnumber/SerialNumberConvert.java

@ -0,0 +1,34 @@
package com.win.module.system.convert.serialnumber;
import java.util.*;
import com.win.framework.common.pojo.PageResult;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import com.win.module.system.controller.admin.serialnumber.vo.*;
import com.win.module.system.dal.dataobject.serialnumber.SerialNumberDO;
/**
* 流水号规则 Convert
*
* @author 超级管理员
*/
@Mapper
public interface SerialNumberConvert {
SerialNumberConvert INSTANCE = Mappers.getMapper(SerialNumberConvert.class);
SerialNumberDO convert(SerialNumberCreateReqVO bean);
SerialNumberDO convert(SerialNumberUpdateReqVO bean);
SerialNumberRespVO convert(SerialNumberDO bean);
List<SerialNumberRespVO> convertList(List<SerialNumberDO> list);
PageResult<SerialNumberRespVO> convertPage(PageResult<SerialNumberDO> page);
List<SerialNumberExcelVO> convertList02(List<SerialNumberDO> list);
}

1
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/convert/《芋道 Spring Boot 对象转换 MapStruct 入门》.md

@ -1 +0,0 @@
<http://www.iocoder.cn/Spring-Boot/MapStruct/?win>

59
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/dataobject/serialnumber/SerialNumberDO.java

@ -0,0 +1,59 @@
package com.win.module.system.dal.dataobject.serialnumber;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.win.framework.mybatis.core.dataobject.BaseDO;
/**
* 流水号规则 DO
*
* @author 超级管理员
*/
@TableName("system_serial_number")
@KeySequence("system_serial_number_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SerialNumberDO extends BaseDO {
/**
* 主键
*/
@TableId
private Long id;
/**
* 规则编码
*/
private String ruleCode;
/**
* 规则名称
*/
private String ruleName;
/**
* 编码前缀
*/
private String prefix;
/**
* 单据格式
*/
private String pattern;
/**
* 单据流水长度
*/
private Byte length;
/**
* 单据分隔符
*/
private String separator;
/**
* 备注
*/
private String remark;
}

35
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/dal/mysql/serialnumber/SerialNumberMapper.java

@ -0,0 +1,35 @@
package com.win.module.system.dal.mysql.serialnumber;
import com.win.framework.common.pojo.PageResult;
import com.win.framework.mybatis.core.mapper.BaseMapperX;
import com.win.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberExportReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberPageReqVO;
import com.win.module.system.dal.dataobject.serialnumber.SerialNumberDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 流水号规则 Mapper
*
* @author 超级管理员
*/
@Mapper
public interface SerialNumberMapper extends BaseMapperX<SerialNumberDO> {
default PageResult<SerialNumberDO> selectPage(SerialNumberPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<SerialNumberDO>()
.eqIfPresent(SerialNumberDO::getRuleCode, reqVO.getRuleCode())
.likeIfPresent(SerialNumberDO::getRuleName, reqVO.getRuleName())
.orderByDesc(SerialNumberDO::getId));
}
default List<SerialNumberDO> selectList(SerialNumberExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<SerialNumberDO>()
.eqIfPresent(SerialNumberDO::getRuleCode, reqVO.getRuleCode())
.likeIfPresent(SerialNumberDO::getRuleName, reqVO.getRuleName())
.orderByDesc(SerialNumberDO::getId));
}
}

75
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/serialnumber/SerialNumberService.java

@ -0,0 +1,75 @@
package com.win.module.system.service.serialnumber;
import com.win.framework.common.pojo.PageResult;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberCreateReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberExportReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberPageReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberUpdateReqVO;
import com.win.module.system.dal.dataobject.serialnumber.SerialNumberDO;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
/**
* 流水号规则 Service 接口
*
* @author 超级管理员
*/
public interface SerialNumberService {
/**
* 创建流水号规则
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createSerialNumber(@Valid SerialNumberCreateReqVO createReqVO);
/**
* 更新流水号规则
*
* @param updateReqVO 更新信息
*/
void updateSerialNumber(@Valid SerialNumberUpdateReqVO updateReqVO);
/**
* 删除流水号规则
*
* @param id 编号
*/
void deleteSerialNumber(Long id);
/**
* 获得流水号规则
*
* @param id 编号
* @return 流水号规则
*/
SerialNumberDO getSerialNumber(Long id);
/**
* 获得流水号规则列表
*
* @param ids 编号
* @return 流水号规则列表
*/
List<SerialNumberDO> getSerialNumberList(Collection<Long> ids);
/**
* 获得流水号规则分页
*
* @param pageReqVO 分页查询
* @return 流水号规则分页
*/
PageResult<SerialNumberDO> getSerialNumberPage(SerialNumberPageReqVO pageReqVO);
/**
* 获得流水号规则列表, 用于 Excel 导出
*
* @param exportReqVO 查询条件
* @return 流水号规则列表
*/
List<SerialNumberDO> getSerialNumberList(SerialNumberExportReqVO exportReqVO);
}

98
win-module-system/win-module-system-biz/src/main/java/com/win/module/system/service/serialnumber/SerialNumberServiceImpl.java

@ -0,0 +1,98 @@
package com.win.module.system.service.serialnumber;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.win.framework.common.pojo.PageResult;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberCreateReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberExportReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberPageReqVO;
import com.win.module.system.controller.admin.serialnumber.vo.SerialNumberUpdateReqVO;
import com.win.module.system.convert.serialnumber.SerialNumberConvert;
import com.win.module.system.dal.dataobject.serialnumber.SerialNumberDO;
import com.win.module.system.dal.mysql.serialnumber.SerialNumberMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.win.module.system.enums.ErrorCodeConstants.SERIAL_NUMBER_EXISTS;
import static com.win.module.system.enums.ErrorCodeConstants.SERIAL_NUMBER_NOT_EXISTS;
/**
* 流水号规则 Service 实现类
*
* @author 超级管理员
*/
@Service
@Validated
public class SerialNumberServiceImpl implements SerialNumberService {
@Resource
private SerialNumberMapper serialNumberMapper;
@Override
public Long createSerialNumber(SerialNumberCreateReqVO createReqVO) {
// 校验存在
validateSerialNumberNotExists(createReqVO.getRuleCode());
// 插入
SerialNumberDO serialNumber = SerialNumberConvert.INSTANCE.convert(createReqVO);
serialNumberMapper.insert(serialNumber);
// 返回
return serialNumber.getId();
}
@Override
public void updateSerialNumber(SerialNumberUpdateReqVO updateReqVO) {
// 校验存在
validateSerialNumberExists(updateReqVO.getId());
// 更新
SerialNumberDO updateObj = SerialNumberConvert.INSTANCE.convert(updateReqVO);
serialNumberMapper.updateById(updateObj);
}
@Override
public void deleteSerialNumber(Long id) {
// 校验存在
validateSerialNumberExists(id);
// 删除
serialNumberMapper.deleteById(id);
}
private void validateSerialNumberExists(Long id) {
if (serialNumberMapper.selectById(id) == null) {
throw exception(SERIAL_NUMBER_NOT_EXISTS);
}
}
private void validateSerialNumberNotExists(String ruleCode) {
QueryWrapper<SerialNumberDO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("deleted", Boolean.FALSE);
queryWrapper.eq("rule_code", ruleCode);
if (serialNumberMapper.selectCount() != 0) {
throw exception(SERIAL_NUMBER_EXISTS);
}
}
@Override
public SerialNumberDO getSerialNumber(Long id) {
return serialNumberMapper.selectById(id);
}
@Override
public List<SerialNumberDO> getSerialNumberList(Collection<Long> ids) {
return serialNumberMapper.selectBatchIds(ids);
}
@Override
public PageResult<SerialNumberDO> getSerialNumberPage(SerialNumberPageReqVO pageReqVO) {
return serialNumberMapper.selectPage(pageReqVO);
}
@Override
public List<SerialNumberDO> getSerialNumberList(SerialNumberExportReqVO exportReqVO) {
return serialNumberMapper.selectList(exportReqVO);
}
}
Loading…
Cancel
Save