From e10438bcf1ebb807105abed606e495aaf4afc7e1 Mon Sep 17 00:00:00 2001 From: chenfang Date: Wed, 1 Nov 2023 17:51:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=81=E4=B8=9A=E4=BB=A3=E7=A0=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/wms/enums/ErrorCodeConstants.java | 2 + .../enterprise/EnterpriseController.java | 101 +++++++ .../enterprise/vo/EnterpriseBaseVO.java | 68 +++++ .../enterprise/vo/EnterpriseCreateReqVO.java | 12 + .../enterprise/vo/EnterpriseExcelVO.java | 67 +++++ .../enterprise/vo/EnterpriseExportReqVO.java | 62 +++++ .../enterprise/vo/EnterprisePageReqVO.java | 64 +++++ .../enterprise/vo/EnterpriseRespVO.java | 19 ++ .../enterprise/vo/EnterpriseUpdateReqVO.java | 18 ++ .../convert/enterprise/EnterpriseConvert.java | 37 +++ .../dataobject/enterprise/EnterpriseDO.java | 85 ++++++ .../mysql/enterprise/EnterpriseMapper.java | 59 ++++ .../service/enterprise/EnterpriseService.java | 74 ++++++ .../enterprise/EnterpriseServiceImpl.java | 86 ++++++ .../mapper/enterprise/EnterpriseMapper.xml | 12 + .../enterprise/EnterpriseServiceImplTest.java | 251 ++++++++++++++++++ 16 files changed, 1017 insertions(+) create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/EnterpriseController.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseBaseVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseCreateReqVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExcelVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExportReqVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterprisePageReqVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseRespVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseUpdateReqVO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/enterprise/EnterpriseConvert.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/enterprise/EnterpriseDO.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/enterprise/EnterpriseMapper.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseService.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseServiceImpl.java create mode 100644 win-module-wms/win-module-wms-biz/src/main/resources/mapper/enterprise/EnterpriseMapper.xml create mode 100644 win-module-wms/win-module-wms-biz/src/test/java/com/win/module/wms/service/enterprise/EnterpriseServiceImplTest.java diff --git a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java index 0f8dffa1..d2652442 100644 --- a/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java +++ b/win-module-wms/win-module-wms-api/src/main/java/com/win/module/wms/enums/ErrorCodeConstants.java @@ -793,5 +793,7 @@ public interface ErrorCodeConstants { ErrorCode TRANSFERLOG_NOT_EXISTS = new ErrorCode(1_000_165_000, "库存转移日志不存在"); //单据开关ErrorCode ErrorCode SWITCH_NOT_EXISTS = new ErrorCode(1_000_166_000, "单据开关不存在"); + //企业ErrorCode + ErrorCode ENTERPRISE_NOT_EXISTS = new ErrorCode(1_000_167_000, "企业不存在"); } diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/EnterpriseController.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/EnterpriseController.java new file mode 100644 index 00000000..4483fe26 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/EnterpriseController.java @@ -0,0 +1,101 @@ +package com.win.module.wms.controller.enterprise; + +import com.win.module.wms.controller.enterprise.vo.*; +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.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.common.pojo.CommonResult; +import static com.win.framework.common.pojo.CommonResult.success; + +import com.win.framework.excel.core.util.ExcelUtils; + +import com.win.framework.operatelog.core.annotations.OperateLog; +import static com.win.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; +import com.win.module.wms.convert.enterprise.EnterpriseConvert; +import com.win.module.wms.service.enterprise.EnterpriseService; + +@Tag(name = "管理后台 - 企业") +@RestController +@RequestMapping("/wms/enterprise") +@Validated +public class EnterpriseController { + + @Resource + private EnterpriseService enterpriseService; + + @PostMapping("/create") + @Operation(summary = "创建企业") + @PreAuthorize("@ss.hasPermission('wms:enterprise:create')") + public CommonResult createEnterprise(@Valid @RequestBody EnterpriseCreateReqVO createReqVO) { + return success(enterpriseService.createEnterprise(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新企业") + @PreAuthorize("@ss.hasPermission('wms:enterprise:update')") + public CommonResult updateEnterprise(@Valid @RequestBody EnterpriseUpdateReqVO updateReqVO) { + enterpriseService.updateEnterprise(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除企业") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('wms:enterprise:delete')") + public CommonResult deleteEnterprise(@RequestParam("id") Long id) { + enterpriseService.deleteEnterprise(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得企业") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('wms:enterprise:query')") + public CommonResult getEnterprise(@RequestParam("id") Long id) { + EnterpriseDO enterprise = enterpriseService.getEnterprise(id); + return success(EnterpriseConvert.INSTANCE.convert(enterprise)); + } + + @GetMapping("/list") + @Operation(summary = "获得企业列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('wms:enterprise:query')") + public CommonResult> getEnterpriseList(@RequestParam("ids") Collection ids) { + List list = enterpriseService.getEnterpriseList(ids); + return success(EnterpriseConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得企业分页") + @PreAuthorize("@ss.hasPermission('wms:enterprise:query')") + public CommonResult> getEnterprisePage(@Valid EnterprisePageReqVO pageVO) { + PageResult pageResult = enterpriseService.getEnterprisePage(pageVO); + return success(EnterpriseConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出企业 Excel") + @PreAuthorize("@ss.hasPermission('wms:enterprise:export')") + @OperateLog(type = EXPORT) + public void exportEnterpriseExcel(@Valid EnterpriseExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = enterpriseService.getEnterpriseList(exportReqVO); + // 导出 Excel + List datas = EnterpriseConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "企业.xls", "数据", EnterpriseExcelVO.class, datas); + } + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseBaseVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseBaseVO.java new file mode 100644 index 00000000..c0f5e486 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseBaseVO.java @@ -0,0 +1,68 @@ +package com.win.module.wms.controller.enterprise.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 企业 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class EnterpriseBaseVO { + + @Schema(description = "代码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "代码不能为空") + private String code; + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "简称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") + @NotNull(message = "简称不能为空") + private String shortName; + + @Schema(description = "地址") + private String address; + + @Schema(description = "是否可用", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否可用不能为空") + private String available; + + @Schema(description = "生效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime activeTime; + + @Schema(description = "失效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime expireTime; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime deletionTime; + + @Schema(description = "删除者ID", example = "18756") + private String deleterId; + + @Schema(description = "扩展属性") + private String extraProperties; + + @Schema(description = "并发乐观锁") + private String concurrencyStamp; + + @Schema(description = "地点ID", example = "14716") + private String siteId; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseCreateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseCreateReqVO.java new file mode 100644 index 00000000..00a32dba --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseCreateReqVO.java @@ -0,0 +1,12 @@ +package com.win.module.wms.controller.enterprise.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(description = "管理后台 - 企业创建 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class EnterpriseCreateReqVO extends EnterpriseBaseVO { + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExcelVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExcelVO.java new file mode 100644 index 00000000..0cc347e1 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExcelVO.java @@ -0,0 +1,67 @@ +package com.win.module.wms.controller.enterprise.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.alibaba.excel.annotation.ExcelProperty; + +/** + * 企业 Excel VO + * + * @author 超级管理员 + */ +@Data +public class EnterpriseExcelVO { + + @ExcelProperty("id") + private Long id; + + @ExcelProperty("代码") + private String code; + + @ExcelProperty("名称") + private String name; + + @ExcelProperty("简称") + private String shortName; + + @ExcelProperty("地址") + private String address; + + @ExcelProperty("是否可用") + private String available; + + @ExcelProperty("生效时间") + private LocalDateTime activeTime; + + @ExcelProperty("失效时间") + private LocalDateTime expireTime; + + @ExcelProperty("备注") + private String remark; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @ExcelProperty("删除时间") + private LocalDateTime deletionTime; + + @ExcelProperty("删除者ID") + private String deleterId; + + @ExcelProperty("扩展属性") + private String extraProperties; + + @ExcelProperty("并发乐观锁") + private String concurrencyStamp; + + @ExcelProperty("地点ID") + private String siteId; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExportReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExportReqVO.java new file mode 100644 index 00000000..352469be --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseExportReqVO.java @@ -0,0 +1,62 @@ +package com.win.module.wms.controller.enterprise.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.win.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.win.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 企业 Excel 导出 Request VO,参数和 EnterprisePageReqVO 是一致的") +@Data +public class EnterpriseExportReqVO { + + @Schema(description = "代码") + private String code; + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "简称", example = "李四") + private String shortName; + + @Schema(description = "地址") + private String address; + + @Schema(description = "是否可用") + private String available; + + @Schema(description = "生效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] activeTime; + + @Schema(description = "失效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] expireTime; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deletionTime; + + @Schema(description = "删除者ID", example = "18756") + private String deleterId; + + @Schema(description = "扩展属性") + private String extraProperties; + + @Schema(description = "并发乐观锁") + private String concurrencyStamp; + + @Schema(description = "地点ID", example = "14716") + private String siteId; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterprisePageReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterprisePageReqVO.java new file mode 100644 index 00000000..ba5db634 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterprisePageReqVO.java @@ -0,0 +1,64 @@ +package com.win.module.wms.controller.enterprise.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.win.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.win.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 EnterprisePageReqVO extends PageParam { + + @Schema(description = "代码") + private String code; + + @Schema(description = "名称", example = "芋艿") + private String name; + + @Schema(description = "简称", example = "李四") + private String shortName; + + @Schema(description = "地址") + private String address; + + @Schema(description = "是否可用") + private String available; + + @Schema(description = "生效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] activeTime; + + @Schema(description = "失效时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] expireTime; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deletionTime; + + @Schema(description = "删除者ID", example = "18756") + private String deleterId; + + @Schema(description = "扩展属性") + private String extraProperties; + + @Schema(description = "并发乐观锁") + private String concurrencyStamp; + + @Schema(description = "地点ID", example = "14716") + private String siteId; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseRespVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseRespVO.java new file mode 100644 index 00000000..72c769e3 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseRespVO.java @@ -0,0 +1,19 @@ +package com.win.module.wms.controller.enterprise.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 EnterpriseRespVO extends EnterpriseBaseVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29956") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseUpdateReqVO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseUpdateReqVO.java new file mode 100644 index 00000000..df8d5811 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/controller/enterprise/vo/EnterpriseUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.win.module.wms.controller.enterprise.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 企业更新 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class EnterpriseUpdateReqVO extends EnterpriseBaseVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29956") + @NotNull(message = "id不能为空") + private Long id; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/enterprise/EnterpriseConvert.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/enterprise/EnterpriseConvert.java new file mode 100644 index 00000000..cce79373 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/convert/enterprise/EnterpriseConvert.java @@ -0,0 +1,37 @@ +package com.win.module.wms.convert.enterprise; + +import java.util.*; + +import com.win.framework.common.pojo.PageResult; + +import com.win.module.wms.controller.enterprise.vo.EnterpriseCreateReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseExcelVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseRespVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseUpdateReqVO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; + +/** + * 企业 Convert + * + * @author 超级管理员 + */ +@Mapper +public interface EnterpriseConvert { + + EnterpriseConvert INSTANCE = Mappers.getMapper(EnterpriseConvert.class); + + EnterpriseDO convert(EnterpriseCreateReqVO bean); + + EnterpriseDO convert(EnterpriseUpdateReqVO bean); + + EnterpriseRespVO convert(EnterpriseDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/enterprise/EnterpriseDO.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/enterprise/EnterpriseDO.java new file mode 100644 index 00000000..96c302fe --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/dataobject/enterprise/EnterpriseDO.java @@ -0,0 +1,85 @@ +package com.win.module.wms.dal.dataobject.enterprise; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.win.framework.mybatis.core.dataobject.BaseDO; + +/** + * 企业 DO + * + * @author 超级管理员 + */ +@TableName("basic_enterprise") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EnterpriseDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 代码 + */ + private String code; + /** + * 名称 + */ + private String name; + /** + * 简称 + */ + private String shortName; + /** + * 地址 + */ + private String address; + /** + * 是否可用 + */ + private String available; + /** + * 生效时间 + */ + private LocalDateTime activeTime; + /** + * 失效时间 + */ + private LocalDateTime expireTime; + /** + * 备注 + */ + private String remark; + /** + * 删除时间 + */ + private LocalDateTime deletionTime; + /** + * 删除者ID + */ + private String deleterId; + /** + * 扩展属性 + */ + private String extraProperties; + /** + * 并发乐观锁 + */ + private String concurrencyStamp; + /** + * 地点ID + */ + private String siteId; + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/enterprise/EnterpriseMapper.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/enterprise/EnterpriseMapper.java new file mode 100644 index 00000000..10f093fc --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/dal/mysql/enterprise/EnterpriseMapper.java @@ -0,0 +1,59 @@ +package com.win.module.wms.dal.mysql.enterprise; + +import java.util.*; + +import com.win.framework.common.pojo.PageResult; +import com.win.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.win.framework.mybatis.core.mapper.BaseMapperX; +import com.win.module.wms.controller.enterprise.vo.EnterpriseExportReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterprisePageReqVO; +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 企业 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface EnterpriseMapper extends BaseMapperX { + + default PageResult selectPage(EnterprisePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(EnterpriseDO::getCode, reqVO.getCode()) + .likeIfPresent(EnterpriseDO::getName, reqVO.getName()) + .likeIfPresent(EnterpriseDO::getShortName, reqVO.getShortName()) + .eqIfPresent(EnterpriseDO::getAddress, reqVO.getAddress()) + .eqIfPresent(EnterpriseDO::getAvailable, reqVO.getAvailable()) + .betweenIfPresent(EnterpriseDO::getActiveTime, reqVO.getActiveTime()) + .betweenIfPresent(EnterpriseDO::getExpireTime, reqVO.getExpireTime()) + .eqIfPresent(EnterpriseDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(EnterpriseDO::getCreateTime, reqVO.getCreateTime()) + .betweenIfPresent(EnterpriseDO::getDeletionTime, reqVO.getDeletionTime()) + .eqIfPresent(EnterpriseDO::getDeleterId, reqVO.getDeleterId()) + .eqIfPresent(EnterpriseDO::getExtraProperties, reqVO.getExtraProperties()) + .eqIfPresent(EnterpriseDO::getConcurrencyStamp, reqVO.getConcurrencyStamp()) + .eqIfPresent(EnterpriseDO::getSiteId, reqVO.getSiteId()) + .orderByDesc(EnterpriseDO::getId)); + } + + default List selectList(EnterpriseExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(EnterpriseDO::getCode, reqVO.getCode()) + .likeIfPresent(EnterpriseDO::getName, reqVO.getName()) + .likeIfPresent(EnterpriseDO::getShortName, reqVO.getShortName()) + .eqIfPresent(EnterpriseDO::getAddress, reqVO.getAddress()) + .eqIfPresent(EnterpriseDO::getAvailable, reqVO.getAvailable()) + .betweenIfPresent(EnterpriseDO::getActiveTime, reqVO.getActiveTime()) + .betweenIfPresent(EnterpriseDO::getExpireTime, reqVO.getExpireTime()) + .eqIfPresent(EnterpriseDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(EnterpriseDO::getCreateTime, reqVO.getCreateTime()) + .betweenIfPresent(EnterpriseDO::getDeletionTime, reqVO.getDeletionTime()) + .eqIfPresent(EnterpriseDO::getDeleterId, reqVO.getDeleterId()) + .eqIfPresent(EnterpriseDO::getExtraProperties, reqVO.getExtraProperties()) + .eqIfPresent(EnterpriseDO::getConcurrencyStamp, reqVO.getConcurrencyStamp()) + .eqIfPresent(EnterpriseDO::getSiteId, reqVO.getSiteId()) + .orderByDesc(EnterpriseDO::getId)); + } + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseService.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseService.java new file mode 100644 index 00000000..01c73fc0 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseService.java @@ -0,0 +1,74 @@ +package com.win.module.wms.service.enterprise; + +import java.util.*; +import javax.validation.*; + +import com.win.module.wms.controller.enterprise.vo.EnterpriseCreateReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseExportReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterprisePageReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseUpdateReqVO; +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; +import com.win.framework.common.pojo.PageResult; + +/** + * 企业 Service 接口 + * + * @author 超级管理员 + */ +public interface EnterpriseService { + + /** + * 创建企业 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createEnterprise(@Valid EnterpriseCreateReqVO createReqVO); + + /** + * 更新企业 + * + * @param updateReqVO 更新信息 + */ + void updateEnterprise(@Valid EnterpriseUpdateReqVO updateReqVO); + + /** + * 删除企业 + * + * @param id 编号 + */ + void deleteEnterprise(Long id); + + /** + * 获得企业 + * + * @param id 编号 + * @return 企业 + */ + EnterpriseDO getEnterprise(Long id); + + /** + * 获得企业列表 + * + * @param ids 编号 + * @return 企业列表 + */ + List getEnterpriseList(Collection ids); + + /** + * 获得企业分页 + * + * @param pageReqVO 分页查询 + * @return 企业分页 + */ + PageResult getEnterprisePage(EnterprisePageReqVO pageReqVO); + + /** + * 获得企业列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 企业列表 + */ + List getEnterpriseList(EnterpriseExportReqVO exportReqVO); + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseServiceImpl.java b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseServiceImpl.java new file mode 100644 index 00000000..8a2ecbd0 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/java/com/win/module/wms/service/enterprise/EnterpriseServiceImpl.java @@ -0,0 +1,86 @@ +package com.win.module.wms.service.enterprise; + +import com.win.module.wms.controller.enterprise.vo.EnterpriseCreateReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseExportReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterprisePageReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseUpdateReqVO; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; + +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; +import com.win.framework.common.pojo.PageResult; + +import com.win.module.wms.convert.enterprise.EnterpriseConvert; +import com.win.module.wms.dal.mysql.enterprise.EnterpriseMapper; + +import static com.win.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.win.module.wms.enums.ErrorCodeConstants.ENTERPRISE_NOT_EXISTS; + +/** + * 企业 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class EnterpriseServiceImpl implements EnterpriseService { + + @Resource + private EnterpriseMapper enterpriseMapper; + + @Override + public Long createEnterprise(EnterpriseCreateReqVO createReqVO) { + // 插入 + EnterpriseDO enterprise = EnterpriseConvert.INSTANCE.convert(createReqVO); + enterpriseMapper.insert(enterprise); + // 返回 + return enterprise.getId(); + } + + @Override + public void updateEnterprise(EnterpriseUpdateReqVO updateReqVO) { + // 校验存在 + validateEnterpriseExists(updateReqVO.getId()); + // 更新 + EnterpriseDO updateObj = EnterpriseConvert.INSTANCE.convert(updateReqVO); + enterpriseMapper.updateById(updateObj); + } + + @Override + public void deleteEnterprise(Long id) { + // 校验存在 + validateEnterpriseExists(id); + // 删除 + enterpriseMapper.deleteById(id); + } + + private void validateEnterpriseExists(Long id) { + if (enterpriseMapper.selectById(id) == null) { + throw exception(ENTERPRISE_NOT_EXISTS); + } + } + + @Override + public EnterpriseDO getEnterprise(Long id) { + return enterpriseMapper.selectById(id); + } + + @Override + public List getEnterpriseList(Collection ids) { + return enterpriseMapper.selectBatchIds(ids); + } + + @Override + public PageResult getEnterprisePage(EnterprisePageReqVO pageReqVO) { + return enterpriseMapper.selectPage(pageReqVO); + } + + @Override + public List getEnterpriseList(EnterpriseExportReqVO exportReqVO) { + return enterpriseMapper.selectList(exportReqVO); + } + +} diff --git a/win-module-wms/win-module-wms-biz/src/main/resources/mapper/enterprise/EnterpriseMapper.xml b/win-module-wms/win-module-wms-biz/src/main/resources/mapper/enterprise/EnterpriseMapper.xml new file mode 100644 index 00000000..1e909852 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/main/resources/mapper/enterprise/EnterpriseMapper.xml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/win-module-wms/win-module-wms-biz/src/test/java/com/win/module/wms/service/enterprise/EnterpriseServiceImplTest.java b/win-module-wms/win-module-wms-biz/src/test/java/com/win/module/wms/service/enterprise/EnterpriseServiceImplTest.java new file mode 100644 index 00000000..0cd44d81 --- /dev/null +++ b/win-module-wms/win-module-wms-biz/src/test/java/com/win/module/wms/service/enterprise/EnterpriseServiceImplTest.java @@ -0,0 +1,251 @@ +package com.win.module.wms.service.enterprise; + +import com.win.module.wms.controller.enterprise.vo.EnterpriseCreateReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseExportReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterprisePageReqVO; +import com.win.module.wms.controller.enterprise.vo.EnterpriseUpdateReqVO; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import javax.annotation.Resource; + +import com.win.framework.test.core.ut.BaseDbUnitTest; + +import com.win.module.wms.dal.dataobject.enterprise.EnterpriseDO; +import com.win.module.wms.dal.mysql.enterprise.EnterpriseMapper; +import com.win.framework.common.pojo.PageResult; + +import org.springframework.context.annotation.Import; +import java.util.*; + +import static com.win.framework.test.core.util.AssertUtils.*; +import static com.win.framework.test.core.util.RandomUtils.*; +import static com.win.framework.common.util.date.LocalDateTimeUtils.*; +import static com.win.framework.common.util.object.ObjectUtils.*; +import static org.junit.jupiter.api.Assertions.*; + +/** + * {@link EnterpriseServiceImpl} 的单元测试类 + * + * @author 超级管理员 + */ +@Import(EnterpriseServiceImpl.class) +public class EnterpriseServiceImplTest extends BaseDbUnitTest { + + @Resource + private EnterpriseServiceImpl enterpriseService; + + @Resource + private EnterpriseMapper enterpriseMapper; + + @Test + public void testCreateEnterprise_success() { + // 准备参数 + EnterpriseCreateReqVO reqVO = randomPojo(EnterpriseCreateReqVO.class); + + // 调用 + Long enterpriseId = enterpriseService.createEnterprise(reqVO); + // 断言 + assertNotNull(enterpriseId); + // 校验记录的属性是否正确 + EnterpriseDO enterprise = enterpriseMapper.selectById(enterpriseId); + assertPojoEquals(reqVO, enterprise); + } + + @Test + public void testUpdateEnterprise_success() { + // mock 数据 + EnterpriseDO dbEnterprise = randomPojo(EnterpriseDO.class); + enterpriseMapper.insert(dbEnterprise);// @Sql: 先插入出一条存在的数据 + // 准备参数 + EnterpriseUpdateReqVO reqVO = randomPojo(EnterpriseUpdateReqVO.class, o -> { + o.setId(dbEnterprise.getId()); // 设置更新的 ID + }); + + // 调用 + enterpriseService.updateEnterprise(reqVO); + // 校验是否更新正确 + EnterpriseDO enterprise = enterpriseMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, enterprise); + } + + @Test + public void testUpdateEnterprise_notExists() { + // 准备参数 + EnterpriseUpdateReqVO reqVO = randomPojo(EnterpriseUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> enterpriseService.updateEnterprise(reqVO), ENTERPRISE_NOT_EXISTS); + } + + @Test + public void testDeleteEnterprise_success() { + // mock 数据 + EnterpriseDO dbEnterprise = randomPojo(EnterpriseDO.class); + enterpriseMapper.insert(dbEnterprise);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbEnterprise.getId(); + + // 调用 + enterpriseService.deleteEnterprise(id); + // 校验数据不存在了 + assertNull(enterpriseMapper.selectById(id)); + } + + @Test + public void testDeleteEnterprise_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> enterpriseService.deleteEnterprise(id), ENTERPRISE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetEnterprisePage() { + // mock 数据 + EnterpriseDO dbEnterprise = randomPojo(EnterpriseDO.class, o -> { // 等会查询到 + o.setCode(null); + o.setName(null); + o.setShortName(null); + o.setAddress(null); + o.setAvailable(null); + o.setActiveTime(null); + o.setExpireTime(null); + o.setRemark(null); + o.setCreateTime(null); + o.setDeletionTime(null); + o.setDeleterId(null); + o.setExtraProperties(null); + o.setConcurrencyStamp(null); + o.setSiteId(null); + }); + enterpriseMapper.insert(dbEnterprise); + // 测试 code 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setCode(null))); + // 测试 name 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setName(null))); + // 测试 shortName 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setShortName(null))); + // 测试 address 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setAddress(null))); + // 测试 available 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setAvailable(null))); + // 测试 activeTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setActiveTime(null))); + // 测试 expireTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setExpireTime(null))); + // 测试 remark 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setRemark(null))); + // 测试 createTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setCreateTime(null))); + // 测试 deletionTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setDeletionTime(null))); + // 测试 deleterId 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setDeleterId(null))); + // 测试 extraProperties 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setExtraProperties(null))); + // 测试 concurrencyStamp 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setConcurrencyStamp(null))); + // 测试 siteId 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setSiteId(null))); + // 准备参数 + EnterprisePageReqVO reqVO = new EnterprisePageReqVO(); + reqVO.setCode(null); + reqVO.setName(null); + reqVO.setShortName(null); + reqVO.setAddress(null); + reqVO.setAvailable(null); + reqVO.setActiveTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setExpireTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setRemark(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDeletionTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDeleterId(null); + reqVO.setExtraProperties(null); + reqVO.setConcurrencyStamp(null); + reqVO.setSiteId(null); + + // 调用 + PageResult pageResult = enterpriseService.getEnterprisePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbEnterprise, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetEnterpriseList() { + // mock 数据 + EnterpriseDO dbEnterprise = randomPojo(EnterpriseDO.class, o -> { // 等会查询到 + o.setCode(null); + o.setName(null); + o.setShortName(null); + o.setAddress(null); + o.setAvailable(null); + o.setActiveTime(null); + o.setExpireTime(null); + o.setRemark(null); + o.setCreateTime(null); + o.setDeletionTime(null); + o.setDeleterId(null); + o.setExtraProperties(null); + o.setConcurrencyStamp(null); + o.setSiteId(null); + }); + enterpriseMapper.insert(dbEnterprise); + // 测试 code 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setCode(null))); + // 测试 name 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setName(null))); + // 测试 shortName 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setShortName(null))); + // 测试 address 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setAddress(null))); + // 测试 available 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setAvailable(null))); + // 测试 activeTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setActiveTime(null))); + // 测试 expireTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setExpireTime(null))); + // 测试 remark 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setRemark(null))); + // 测试 createTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setCreateTime(null))); + // 测试 deletionTime 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setDeletionTime(null))); + // 测试 deleterId 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setDeleterId(null))); + // 测试 extraProperties 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setExtraProperties(null))); + // 测试 concurrencyStamp 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setConcurrencyStamp(null))); + // 测试 siteId 不匹配 + enterpriseMapper.insert(cloneIgnoreId(dbEnterprise, o -> o.setSiteId(null))); + // 准备参数 + EnterpriseExportReqVO reqVO = new EnterpriseExportReqVO(); + reqVO.setCode(null); + reqVO.setName(null); + reqVO.setShortName(null); + reqVO.setAddress(null); + reqVO.setAvailable(null); + reqVO.setActiveTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setExpireTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setRemark(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDeletionTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setDeleterId(null); + reqVO.setExtraProperties(null); + reqVO.setConcurrencyStamp(null); + reqVO.setSiteId(null); + + // 调用 + List list = enterpriseService.getEnterpriseList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbEnterprise, list.get(0)); + } + +}