diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/BusinessLineController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/BusinessLineController.java new file mode 100644 index 0000000..8345847 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/BusinessLineController.java @@ -0,0 +1,110 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline; + +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 com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; +import com.yunxi.scm.module.xxjj.convert.businessline.BusinessLineConvert; +import com.yunxi.scm.module.xxjj.service.businessline.BusinessLineService; + +@Tag(name = "管理后台 - 业务线") +@RestController +@RequestMapping("/xxjj/business-line") +@Validated +public class BusinessLineController { + + @Resource + private BusinessLineService businessLineService; + + @GetMapping("/tree") + @Operation(summary = "获得业务线/仓库") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:tree')") + public CommonResult> getBusinessLineTree(@Valid BusinessLinePageReqVO pageVO) { + List pageResult = businessLineService.getBusinessLineTree(); + return success(BusinessLineConvert.INSTANCE.convertList(pageResult)); + } + + @PostMapping("/create") + @Operation(summary = "创建业务线") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:create')") + public CommonResult createBusinessLine(@Valid @RequestBody BusinessLineCreateReqVO createReqVO) { + return success(businessLineService.createBusinessLine(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新业务线") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:update')") + public CommonResult updateBusinessLine(@Valid @RequestBody BusinessLineUpdateReqVO updateReqVO) { + businessLineService.updateBusinessLine(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除业务线") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:business-line:delete')") + public CommonResult deleteBusinessLine(@RequestParam("id") Long id) { + businessLineService.deleteBusinessLine(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得业务线") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:query')") + public CommonResult getBusinessLine(@RequestParam("id") Long id) { + BusinessLineDO businessLine = businessLineService.getBusinessLine(id); + return success(BusinessLineConvert.INSTANCE.convert(businessLine)); + } + + @GetMapping("/list") + @Operation(summary = "获得业务线列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:query')") + public CommonResult> getBusinessLineList(@RequestParam("ids") Collection ids) { + List list = businessLineService.getBusinessLineList(ids); + return success(BusinessLineConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得业务线分页") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:query')") + public CommonResult> getBusinessLinePage(@Valid BusinessLinePageReqVO pageVO) { + PageResult pageResult = businessLineService.getBusinessLinePage(pageVO); + return success(BusinessLineConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出业务线 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:business-line:export')") + @OperateLog(type = EXPORT) + public void exportBusinessLineExcel(@Valid BusinessLineExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = businessLineService.getBusinessLineList(exportReqVO); + // 导出 Excel + List datas = BusinessLineConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "业务线.xls", "数据", BusinessLineExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineBaseVO.java new file mode 100644 index 0000000..8effb2c --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineBaseVO.java @@ -0,0 +1,86 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +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 javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 业务线 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class BusinessLineBaseVO { + + @Schema(description = "业务线编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "业务线编号不能为空") + private String businessCode; + + @Schema(description = "业务线名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotNull(message = "业务线名称不能为空") + private String businessName; + + @Schema(description = "业务线简称") + private String businessSimple; + + @Schema(description = "业务线LOGO", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "业务线LOGO不能为空") + private String businessLogo; + + @Schema(description = "隶属企业", requiredMode = Schema.RequiredMode.REQUIRED, example = "16269") + @NotNull(message = "隶属企业不能为空") + private Long affiliatCompanyId; + + @Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "类型不能为空") + private String type; + + @Schema(description = "所属行业", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "所属行业不能为空") + private String industry; + + @Schema(description = "所在城市", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "所在城市不能为空") + private String city; + + @Schema(description = "成立时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "成立时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime establishDate; + + @Schema(description = "归属人员", requiredMode = Schema.RequiredMode.REQUIRED, example = "12837") + @NotNull(message = "归属人员不能为空") + private Long belongUserId; + + @Schema(description = "品牌/业务线/事业群名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") + @NotNull(message = "品牌/业务线/事业群名称不能为空") + private String brandName; + + @Schema(description = "电话", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "电话不能为空") + private Integer phone; + + @Schema(description = "传真") + private String fax; + + @Schema(description = "网址", example = "https://www.iocoder.cn") + private String url; + + @Schema(description = "介绍") + private String description; + + @TableField(exist = false) + private List children; + + @TableField(exist = false) + private String name; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineCreateReqVO.java new file mode 100644 index 0000000..604875a --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.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 BusinessLineCreateReqVO extends BusinessLineBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExcelVO.java new file mode 100644 index 0000000..778ef2d --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExcelVO.java @@ -0,0 +1,71 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.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 com.alibaba.excel.annotation.ExcelProperty; + +/** + * 业务线 Excel VO + * + * @author 芋道源码 + */ +@Data +public class BusinessLineExcelVO { + + @ExcelProperty("业务id") + private Long id; + + @ExcelProperty("业务线编号") + private String businessCode; + + @ExcelProperty("业务线名称") + private String businessName; + + @ExcelProperty("业务线简称") + private String businessSimple; + + @ExcelProperty("业务线LOGO") + private String businessLogo; + + @ExcelProperty("隶属企业") + private Long affiliatCompanyId; + + @ExcelProperty("类型") + private String type; + + @ExcelProperty("所属行业") + private String industry; + + @ExcelProperty("所在城市") + private String city; + + @ExcelProperty("成立时间") + private LocalDateTime establishDate; + + @ExcelProperty("归属人员") + private Long belongUserId; + + @ExcelProperty("品牌/业务线/事业群名称") + private String brandName; + + @ExcelProperty("电话") + private Integer phone; + + @ExcelProperty("传真") + private String fax; + + @ExcelProperty("网址") + private String url; + + @ExcelProperty("介绍") + private String description; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExportReqVO.java new file mode 100644 index 0000000..db833b7 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineExportReqVO.java @@ -0,0 +1,48 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 业务线 Excel 导出 Request VO,参数和 BusinessLinePageReqVO 是一致的") +@Data +public class BusinessLineExportReqVO { + + @Schema(description = "业务线编号") + private String businessCode; + + @Schema(description = "业务线名称", example = "赵六") + private String businessName; + + @Schema(description = "隶属企业", example = "16269") + private Long affiliatCompanyId; + + @Schema(description = "类型", example = "1") + private String type; + + @Schema(description = "所属行业") + private String industry; + + @Schema(description = "所在城市") + private String city; + + @Schema(description = "成立时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] establishDate; + + @Schema(description = "品牌/业务线/事业群名称", example = "张三") + private String brandName; + + @Schema(description = "电话") + private Integer phone; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLinePageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLinePageReqVO.java new file mode 100644 index 0000000..b829715 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLinePageReqVO.java @@ -0,0 +1,50 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.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 BusinessLinePageReqVO extends PageParam { + + @Schema(description = "业务线编号") + private String businessCode; + + @Schema(description = "业务线名称", example = "赵六") + private String businessName; + + @Schema(description = "隶属企业", example = "16269") + private Long affiliatCompanyId; + + @Schema(description = "类型", example = "1") + private String type; + + @Schema(description = "所属行业") + private String industry; + + @Schema(description = "所在城市") + private String city; + + @Schema(description = "成立时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] establishDate; + + @Schema(description = "品牌/业务线/事业群名称", example = "张三") + private String brandName; + + @Schema(description = "电话") + private Integer phone; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineRespVO.java new file mode 100644 index 0000000..49fb05e --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.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 BusinessLineRespVO extends BusinessLineBaseVO { + + @Schema(description = "业务id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12404") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineUpdateReqVO.java new file mode 100644 index 0000000..c96b9ee --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/businessline/vo/BusinessLineUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.businessline.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 BusinessLineUpdateReqVO extends BusinessLineBaseVO { + + @Schema(description = "业务id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12404") + @NotNull(message = "业务id不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/material/vo/MaterialBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/material/vo/MaterialBaseVO.java index 4406af6..bb8f7e3 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/material/vo/MaterialBaseVO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/material/vo/MaterialBaseVO.java @@ -76,7 +76,7 @@ public class MaterialBaseVO { private String materialAddress; @Schema(description = "物料产品区分") - private String distinct; + private String diff; @TableField(exist = false) private String materialCategoryName; diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/WarehouseController.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/WarehouseController.java new file mode 100644 index 0000000..b460fde --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/WarehouseController.java @@ -0,0 +1,102 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse; + +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 com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.common.pojo.CommonResult; +import static com.yunxi.scm.framework.common.pojo.CommonResult.success; + +import com.yunxi.scm.framework.excel.core.util.ExcelUtils; + +import com.yunxi.scm.framework.operatelog.core.annotations.OperateLog; +import static com.yunxi.scm.framework.operatelog.core.enums.OperateTypeEnum.*; + +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import com.yunxi.scm.module.xxjj.convert.warehouse.WarehouseConvert; +import com.yunxi.scm.module.xxjj.service.warehouse.WarehouseService; + +@Tag(name = "管理后台 - 仓库") +@RestController +@RequestMapping("/xxjj/warehouse") +@Validated +public class WarehouseController { + + @Resource + private WarehouseService warehouseService; + + @PostMapping("/create") + @Operation(summary = "创建仓库") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:create')") + public CommonResult createWarehouse(@Valid @RequestBody WarehouseCreateReqVO createReqVO) { + return success(warehouseService.createWarehouse(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新仓库") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:update')") + public CommonResult updateWarehouse(@Valid @RequestBody WarehouseUpdateReqVO updateReqVO) { + warehouseService.updateWarehouse(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除仓库") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:delete')") + public CommonResult deleteWarehouse(@RequestParam("id") Long id) { + warehouseService.deleteWarehouse(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得仓库") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:query')") + public CommonResult getWarehouse(@RequestParam("id") Long id) { + WarehouseDO warehouse = warehouseService.getWarehouse(id); + return success(WarehouseConvert.INSTANCE.convert(warehouse)); + } + + @GetMapping("/list") + @Operation(summary = "获得仓库列表") + @Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:query')") + public CommonResult> getWarehouseList(@RequestParam("ids") Collection ids) { + List list = warehouseService.getWarehouseList(ids); + return success(WarehouseConvert.INSTANCE.convertList(list)); + } + + @GetMapping("/page") + @Operation(summary = "获得仓库分页") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:query')") + public CommonResult> getWarehousePage(@Valid WarehousePageReqVO pageVO) { + PageResult pageResult = warehouseService.getWarehousePage(pageVO); + return success(WarehouseConvert.INSTANCE.convertPage(pageResult)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出仓库 Excel") + @PreAuthorize("@ss.hasPermission('xxjj:warehouse:export')") + @OperateLog(type = EXPORT) + public void exportWarehouseExcel(@Valid WarehouseExportReqVO exportReqVO, + HttpServletResponse response) throws IOException { + List list = warehouseService.getWarehouseList(exportReqVO); + // 导出 Excel + List datas = WarehouseConvert.INSTANCE.convertList02(list); + ExcelUtils.write(response, "仓库.xls", "数据", WarehouseExcelVO.class, datas); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseBaseVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseBaseVO.java new file mode 100644 index 0000000..0c78485 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseBaseVO.java @@ -0,0 +1,63 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO; +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 javax.validation.constraints.*; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +/** + * 仓库 Base VO,提供给添加、修改、详细的子 VO 使用 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成 + */ +@Data +public class WarehouseBaseVO { + + @Schema(description = "仓库编号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "仓库编号不能为空") + private String warehouseCode; + + @Schema(description = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") + @NotNull(message = "仓库名称不能为空") + private String warehouseName; + + @Schema(description = "仓库简称") + private String warehouseSimple; + + @Schema(description = "隶属业务线", requiredMode = Schema.RequiredMode.REQUIRED, example = "28362") + @NotNull(message = "隶属业务线不能为空") + private Long affiliatLineId; + + @Schema(description = "类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "类型不能为空") + private String type; + + @Schema(description = "所在城市", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "所在城市不能为空") + private String city; + + @Schema(description = "成立时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "成立时间不能为空") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime establishDate; + + @Schema(description = "归属人员", requiredMode = Schema.RequiredMode.REQUIRED, example = "21767") + @NotNull(message = "归属人员不能为空") + private Long belongUserId; + + @Schema(description = "介绍") + private String description; + + @TableField(exist = false) + private String name; + @TableField(exist = false) + private List children; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseCreateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseCreateReqVO.java new file mode 100644 index 0000000..350cb16 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseCreateReqVO.java @@ -0,0 +1,14 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.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 WarehouseCreateReqVO extends WarehouseBaseVO { + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExcelVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExcelVO.java new file mode 100644 index 0000000..eb5fec5 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExcelVO.java @@ -0,0 +1,53 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.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 com.alibaba.excel.annotation.ExcelProperty; + +/** + * 仓库 Excel VO + * + * @author 芋道源码 + */ +@Data +public class WarehouseExcelVO { + + @ExcelProperty("仓库id") + private Long id; + + @ExcelProperty("仓库编号") + private String warehouseCode; + + @ExcelProperty("仓库名称") + private String warehouseName; + + @ExcelProperty("仓库简称") + private String warehouseSimple; + + @ExcelProperty("隶属业务线") + private Long affiliatLineId; + + @ExcelProperty("类型") + private String type; + + @ExcelProperty("所在城市") + private String city; + + @ExcelProperty("成立时间") + private LocalDateTime establishDate; + + @ExcelProperty("归属人员") + private Long belongUserId; + + @ExcelProperty("介绍") + private String description; + + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExportReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExportReqVO.java new file mode 100644 index 0000000..50b2302 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseExportReqVO.java @@ -0,0 +1,39 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import java.time.LocalDateTime; +import org.springframework.format.annotation.DateTimeFormat; + +import static com.yunxi.scm.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 仓库 Excel 导出 Request VO,参数和 WarehousePageReqVO 是一致的") +@Data +public class WarehouseExportReqVO { + + @Schema(description = "仓库编号") + private String warehouseCode; + + @Schema(description = "仓库名称", example = "芋艿") + private String warehouseName; + + @Schema(description = "隶属业务线", example = "28362") + private Long affiliatLineId; + + @Schema(description = "类型", example = "1") + private String type; + + @Schema(description = "所在城市") + private String city; + + @Schema(description = "成立时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] establishDate; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehousePageReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehousePageReqVO.java new file mode 100644 index 0000000..414fcc9 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehousePageReqVO.java @@ -0,0 +1,41 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import com.yunxi.scm.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static com.yunxi.scm.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 WarehousePageReqVO extends PageParam { + + @Schema(description = "仓库编号") + private String warehouseCode; + + @Schema(description = "仓库名称", example = "芋艿") + private String warehouseName; + + @Schema(description = "隶属业务线", example = "28362") + private Long affiliatLineId; + + @Schema(description = "类型", example = "1") + private String type; + + @Schema(description = "所在城市") + private String city; + + @Schema(description = "成立时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] establishDate; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseRespVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseRespVO.java new file mode 100644 index 0000000..1d53d7d --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseRespVO.java @@ -0,0 +1,19 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.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 WarehouseRespVO extends WarehouseBaseVO { + + @Schema(description = "仓库id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6005") + private Long id; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + private LocalDateTime createTime; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseUpdateReqVO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseUpdateReqVO.java new file mode 100644 index 0000000..39e2aeb --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/controller/admin/warehouse/vo/WarehouseUpdateReqVO.java @@ -0,0 +1,18 @@ +package com.yunxi.scm.module.xxjj.controller.admin.warehouse.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 WarehouseUpdateReqVO extends WarehouseBaseVO { + + @Schema(description = "仓库id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6005") + @NotNull(message = "仓库id不能为空") + private Long id; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/businessline/BusinessLineConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/businessline/BusinessLineConvert.java new file mode 100644 index 0000000..6362901 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/businessline/BusinessLineConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.businessline; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; + +/** + * 业务线 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface BusinessLineConvert { + + BusinessLineConvert INSTANCE = Mappers.getMapper(BusinessLineConvert.class); + + BusinessLineDO convert(BusinessLineCreateReqVO bean); + + BusinessLineDO convert(BusinessLineUpdateReqVO bean); + + BusinessLineRespVO convert(BusinessLineDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/warehouse/WarehouseConvert.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/warehouse/WarehouseConvert.java new file mode 100644 index 0000000..433eaee --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/convert/warehouse/WarehouseConvert.java @@ -0,0 +1,34 @@ +package com.yunxi.scm.module.xxjj.convert.warehouse; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; + +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; + +/** + * 仓库 Convert + * + * @author 芋道源码 + */ +@Mapper +public interface WarehouseConvert { + + WarehouseConvert INSTANCE = Mappers.getMapper(WarehouseConvert.class); + + WarehouseDO convert(WarehouseCreateReqVO bean); + + WarehouseDO convert(WarehouseUpdateReqVO bean); + + WarehouseRespVO convert(WarehouseDO bean); + + List convertList(List list); + + PageResult convertPage(PageResult page); + + List convertList02(List list); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/businessline/BusinessLineDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/businessline/BusinessLineDO.java new file mode 100644 index 0000000..8b9e03f --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/businessline/BusinessLineDO.java @@ -0,0 +1,99 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.businessline; + +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 业务线 DO + * + * @author 芋道源码 + */ +@TableName("xxjj_business_line") +@KeySequence("xxjj_business_line_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BusinessLineDO extends BaseDO { + + /** + * 业务id + */ + @TableId + private Long id; + /** + * 业务线编号 + */ + private String businessCode; + /** + * 业务线名称 + */ + private String businessName; + /** + * 业务线简称 + */ + private String businessSimple; + /** + * 业务线LOGO + */ + private String businessLogo; + /** + * 隶属企业 + */ + private Long affiliatCompanyId; + /** + * 类型 + */ + private String type; + /** + * 所属行业 + */ + private String industry; + /** + * 所在城市 + */ + private String city; + /** + * 成立时间 + */ + private LocalDateTime establishDate; + /** + * 归属人员 + */ + private Long belongUserId; + /** + * 品牌/业务线/事业群名称 + */ + private String brandName; + /** + * 电话 + */ + private Integer phone; + /** + * 传真 + */ + private String fax; + /** + * 网址 + */ + private String url; + /** + * 介绍 + */ + private String description; + + @TableField(exist = false) + private List children; + + @TableField(exist = false) + private String name; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/material/MaterialDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/material/MaterialDO.java index 622cec0..c335fa0 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/material/MaterialDO.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/material/MaterialDO.java @@ -97,7 +97,7 @@ public class MaterialDO extends BaseDO { /** * 物料产品区分 */ - private String distinct; + private String diff; diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/warehouse/WarehouseDO.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/warehouse/WarehouseDO.java new file mode 100644 index 0000000..8a1f0b7 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/dataobject/warehouse/WarehouseDO.java @@ -0,0 +1,75 @@ +package com.yunxi.scm.module.xxjj.dal.dataobject.warehouse; + +import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import com.yunxi.scm.framework.mybatis.core.dataobject.BaseDO; + +/** + * 仓库 DO + * + * @author 芋道源码 + */ +@TableName("xxjj_warehouse") +@KeySequence("xxjj_warehouse_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WarehouseDO extends BaseDO { + + /** + * 仓库id + */ + @TableId + private Long id; + /** + * 仓库编号 + */ + private String warehouseCode; + /** + * 仓库名称 + */ + private String warehouseName; + /** + * 仓库简称 + */ + private String warehouseSimple; + /** + * 隶属业务线 + */ + private Long affiliatLineId; + /** + * 类型 + */ + private String type; + /** + * 所在城市 + */ + private String city; + /** + * 成立时间 + */ + private LocalDateTime establishDate; + /** + * 归属人员 + */ + private Long belongUserId; + /** + * 介绍 + */ + private String description; + + + @TableField(exist = false) + private String name; + @TableField(exist = false) + private List children; + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/businessline/BusinessLineMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/businessline/BusinessLineMapper.java new file mode 100644 index 0000000..97ea5d5 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/businessline/BusinessLineMapper.java @@ -0,0 +1,52 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.businessline; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; + +/** + * 业务线 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface BusinessLineMapper extends BaseMapperX { + + default PageResult selectPage(BusinessLinePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BusinessLineDO::getBusinessCode, reqVO.getBusinessCode()) + .likeIfPresent(BusinessLineDO::getBusinessName, reqVO.getBusinessName()) + .eqIfPresent(BusinessLineDO::getAffiliatCompanyId, reqVO.getAffiliatCompanyId()) + .eqIfPresent(BusinessLineDO::getType, reqVO.getType()) + .eqIfPresent(BusinessLineDO::getIndustry, reqVO.getIndustry()) + .eqIfPresent(BusinessLineDO::getCity, reqVO.getCity()) + .betweenIfPresent(BusinessLineDO::getEstablishDate, reqVO.getEstablishDate()) + .likeIfPresent(BusinessLineDO::getBrandName, reqVO.getBrandName()) + .eqIfPresent(BusinessLineDO::getPhone, reqVO.getPhone()) + .betweenIfPresent(BusinessLineDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BusinessLineDO::getId)); + } + + default List selectList(BusinessLineExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(BusinessLineDO::getBusinessCode, reqVO.getBusinessCode()) + .likeIfPresent(BusinessLineDO::getBusinessName, reqVO.getBusinessName()) + .eqIfPresent(BusinessLineDO::getAffiliatCompanyId, reqVO.getAffiliatCompanyId()) + .eqIfPresent(BusinessLineDO::getType, reqVO.getType()) + .eqIfPresent(BusinessLineDO::getIndustry, reqVO.getIndustry()) + .eqIfPresent(BusinessLineDO::getCity, reqVO.getCity()) + .betweenIfPresent(BusinessLineDO::getEstablishDate, reqVO.getEstablishDate()) + .likeIfPresent(BusinessLineDO::getBrandName, reqVO.getBrandName()) + .eqIfPresent(BusinessLineDO::getPhone, reqVO.getPhone()) + .betweenIfPresent(BusinessLineDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BusinessLineDO::getId)); + } + + List queryBusinessLineTree(); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/customer/CustomerMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/customer/CustomerMapper.java index d047c0a..16f1c0d 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/customer/CustomerMapper.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/customer/CustomerMapper.java @@ -8,6 +8,8 @@ import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO; import org.apache.ibatis.annotations.Mapper; import com.yunxi.scm.module.xxjj.controller.admin.customer.vo.*; +import org.apache.ibatis.annotations.Param; +import org.checkerframework.checker.units.qual.C; /** * 客户信息 Mapper @@ -47,4 +49,6 @@ public interface CustomerMapper extends BaseMapperX { .orderByDesc(CustomerDO::getId)); } + List queryCustomerTree(@Param("id") Long id); + } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/warehouse/WarehouseMapper.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/warehouse/WarehouseMapper.java new file mode 100644 index 0000000..23f5663 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/dal/mysql/warehouse/WarehouseMapper.java @@ -0,0 +1,47 @@ +package com.yunxi.scm.module.xxjj.dal.mysql.warehouse; + +import java.util.*; + +import com.yunxi.scm.framework.common.pojo.PageResult; +import com.yunxi.scm.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.yunxi.scm.framework.mybatis.core.mapper.BaseMapperX; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import org.apache.ibatis.annotations.Mapper; +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import org.apache.ibatis.annotations.Param; + +/** + * 仓库 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface WarehouseMapper extends BaseMapperX { + + default PageResult selectPage(WarehousePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WarehouseDO::getWarehouseCode, reqVO.getWarehouseCode()) + .likeIfPresent(WarehouseDO::getWarehouseName, reqVO.getWarehouseName()) + .eqIfPresent(WarehouseDO::getAffiliatLineId, reqVO.getAffiliatLineId()) + .eqIfPresent(WarehouseDO::getType, reqVO.getType()) + .eqIfPresent(WarehouseDO::getCity, reqVO.getCity()) + .betweenIfPresent(WarehouseDO::getEstablishDate, reqVO.getEstablishDate()) + .betweenIfPresent(WarehouseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WarehouseDO::getId)); + } + + default List selectList(WarehouseExportReqVO reqVO) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(WarehouseDO::getWarehouseCode, reqVO.getWarehouseCode()) + .likeIfPresent(WarehouseDO::getWarehouseName, reqVO.getWarehouseName()) + .eqIfPresent(WarehouseDO::getAffiliatLineId, reqVO.getAffiliatLineId()) + .eqIfPresent(WarehouseDO::getType, reqVO.getType()) + .eqIfPresent(WarehouseDO::getCity, reqVO.getCity()) + .betweenIfPresent(WarehouseDO::getEstablishDate, reqVO.getEstablishDate()) + .betweenIfPresent(WarehouseDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WarehouseDO::getId)); + } + + List queryWarehouseTree(@Param("id") Long id); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java index a08039b..703a614 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/enums/ErrorCodeConstants.java @@ -26,4 +26,8 @@ public interface ErrorCodeConstants { ErrorCode MaterialCategory_EXISTS_USER = new ErrorCode(1002004005, "部门中存在员工,无法删除"); ErrorCode MaterialCategory_NOT_ENABLE = new ErrorCode(1002004006, "部门({})不处于开启状态,不允许选择"); ErrorCode MaterialCategory_PARENT_IS_CHILD = new ErrorCode(1002004007, "不能设置自己的子部门为父部门"); + // ========== 业务线 TODO 补充编号 ========== + ErrorCode BUSINESS_LINE_NOT_EXISTS = new ErrorCode(1002025007, "业务线不存在"); + // ========== 仓库 TODO 补充编号 ========== + ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1002025008, "仓库不存在"); } diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineService.java new file mode 100644 index 0000000..d7e7895 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineService.java @@ -0,0 +1,78 @@ +package com.yunxi.scm.module.xxjj.service.businessline; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 业务线 Service 接口 + * + * @author 芋道源码 + */ +public interface BusinessLineService { + + /** + * 创建业务线 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createBusinessLine(@Valid BusinessLineCreateReqVO createReqVO); + + /** + * 更新业务线 + * + * @param updateReqVO 更新信息 + */ + void updateBusinessLine(@Valid BusinessLineUpdateReqVO updateReqVO); + + /** + * 删除业务线 + * + * @param id 编号 + */ + void deleteBusinessLine(Long id); + + /** + * 获得业务线 + * + * @param id 编号 + * @return 业务线 + */ + BusinessLineDO getBusinessLine(Long id); + + /** + * 获得业务线列表 + * + * @param ids 编号 + * @return 业务线列表 + */ + List getBusinessLineList(Collection ids); + + /** + * 获得业务线分页 + * + * @param pageReqVO 分页查询 + * @return 业务线分页 + */ + PageResult getBusinessLinePage(BusinessLinePageReqVO pageReqVO); + + /** + * 获得业务线列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 业务线列表 + */ + List getBusinessLineList(BusinessLineExportReqVO exportReqVO); + + /** + * 获得业务线树 + * + * @param + * @return 业务线分页 + */ + List getBusinessLineTree(); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImpl.java new file mode 100644 index 0000000..32d6517 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImpl.java @@ -0,0 +1,106 @@ +package com.yunxi.scm.module.xxjj.service.businessline; + +import com.yunxi.scm.module.xxjj.dal.dataobject.customer.CustomerDO; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import com.yunxi.scm.module.xxjj.dal.mysql.customer.CustomerMapper; +import com.yunxi.scm.module.xxjj.dal.mysql.warehouse.WarehouseMapper; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.businessline.BusinessLineConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.businessline.BusinessLineMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 业务线 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class BusinessLineServiceImpl implements BusinessLineService { + + @Resource + private BusinessLineMapper businessLineMapper; + @Resource + private WarehouseMapper warehouseMapper; + @Resource + private CustomerMapper customerMapper; + + @Override + public Long createBusinessLine(BusinessLineCreateReqVO createReqVO) { + // 插入 + BusinessLineDO businessLine = BusinessLineConvert.INSTANCE.convert(createReqVO); + businessLineMapper.insert(businessLine); + // 返回 + return businessLine.getId(); + } + + @Override + public void updateBusinessLine(BusinessLineUpdateReqVO updateReqVO) { + // 校验存在 + validateBusinessLineExists(updateReqVO.getId()); + // 更新 + BusinessLineDO updateObj = BusinessLineConvert.INSTANCE.convert(updateReqVO); + businessLineMapper.updateById(updateObj); + } + + @Override + public void deleteBusinessLine(Long id) { + // 校验存在 + validateBusinessLineExists(id); + // 删除 + businessLineMapper.deleteById(id); + } + + private void validateBusinessLineExists(Long id) { + if (businessLineMapper.selectById(id) == null) { + throw exception(BUSINESS_LINE_NOT_EXISTS); + } + } + + @Override + public BusinessLineDO getBusinessLine(Long id) { + return businessLineMapper.selectById(id); + } + + @Override + public List getBusinessLineList(Collection ids) { + return businessLineMapper.selectBatchIds(ids); + } + + @Override + public PageResult getBusinessLinePage(BusinessLinePageReqVO pageReqVO) { + return businessLineMapper.selectPage(pageReqVO); + } + + @Override + public List getBusinessLineList(BusinessLineExportReqVO exportReqVO) { + return businessLineMapper.selectList(exportReqVO); + } + + @Override + public List getBusinessLineTree() { + List businessLineDOList = businessLineMapper.queryBusinessLineTree(); + if (businessLineDOList != null && businessLineDOList.size() > 0){ + for (BusinessLineDO entity : businessLineDOList) { + List warehouseDOList = warehouseMapper.queryWarehouseTree(entity.getId()); + entity.setChildren(warehouseDOList); +// for (WarehouseDO warehouseEntity : warehouseDOList){ +// List customerDOList = customerMapper.queryCustomerTree(warehouseEntity.getId()); +// warehouseEntity.setChildren(customerDOList); +// } + } + } + return businessLineDOList; + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseService.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseService.java new file mode 100644 index 0000000..8d4595d --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseService.java @@ -0,0 +1,70 @@ +package com.yunxi.scm.module.xxjj.service.warehouse; + +import java.util.*; +import javax.validation.*; +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +/** + * 仓库 Service 接口 + * + * @author 芋道源码 + */ +public interface WarehouseService { + + /** + * 创建仓库 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWarehouse(@Valid WarehouseCreateReqVO createReqVO); + + /** + * 更新仓库 + * + * @param updateReqVO 更新信息 + */ + void updateWarehouse(@Valid WarehouseUpdateReqVO updateReqVO); + + /** + * 删除仓库 + * + * @param id 编号 + */ + void deleteWarehouse(Long id); + + /** + * 获得仓库 + * + * @param id 编号 + * @return 仓库 + */ + WarehouseDO getWarehouse(Long id); + + /** + * 获得仓库列表 + * + * @param ids 编号 + * @return 仓库列表 + */ + List getWarehouseList(Collection ids); + + /** + * 获得仓库分页 + * + * @param pageReqVO 分页查询 + * @return 仓库分页 + */ + PageResult getWarehousePage(WarehousePageReqVO pageReqVO); + + /** + * 获得仓库列表, 用于 Excel 导出 + * + * @param exportReqVO 查询条件 + * @return 仓库列表 + */ + List getWarehouseList(WarehouseExportReqVO exportReqVO); + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImpl.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImpl.java new file mode 100644 index 0000000..22c5e09 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImpl.java @@ -0,0 +1,82 @@ +package com.yunxi.scm.module.xxjj.service.warehouse; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; + +import java.util.*; +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import com.yunxi.scm.module.xxjj.convert.warehouse.WarehouseConvert; +import com.yunxi.scm.module.xxjj.dal.mysql.warehouse.WarehouseMapper; + +import static com.yunxi.scm.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; + +/** + * 仓库 Service 实现类 + * + * @author 芋道源码 + */ +@Service +@Validated +public class WarehouseServiceImpl implements WarehouseService { + + @Resource + private WarehouseMapper warehouseMapper; + + @Override + public Long createWarehouse(WarehouseCreateReqVO createReqVO) { + // 插入 + WarehouseDO warehouse = WarehouseConvert.INSTANCE.convert(createReqVO); + warehouseMapper.insert(warehouse); + // 返回 + return warehouse.getId(); + } + + @Override + public void updateWarehouse(WarehouseUpdateReqVO updateReqVO) { + // 校验存在 + validateWarehouseExists(updateReqVO.getId()); + // 更新 + WarehouseDO updateObj = WarehouseConvert.INSTANCE.convert(updateReqVO); + warehouseMapper.updateById(updateObj); + } + + @Override + public void deleteWarehouse(Long id) { + // 校验存在 + validateWarehouseExists(id); + // 删除 + warehouseMapper.deleteById(id); + } + + private void validateWarehouseExists(Long id) { + if (warehouseMapper.selectById(id) == null) { + throw exception(WAREHOUSE_NOT_EXISTS); + } + } + + @Override + public WarehouseDO getWarehouse(Long id) { + return warehouseMapper.selectById(id); + } + + @Override + public List getWarehouseList(Collection ids) { + return warehouseMapper.selectBatchIds(ids); + } + + @Override + public PageResult getWarehousePage(WarehousePageReqVO pageReqVO) { + return warehouseMapper.selectPage(pageReqVO); + } + + @Override + public List getWarehouseList(WarehouseExportReqVO exportReqVO) { + return warehouseMapper.selectList(exportReqVO); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/businessline/BusinessLineMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/businessline/BusinessLineMapper.xml new file mode 100644 index 0000000..66612e7 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/businessline/BusinessLineMapper.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/customer/CustomerMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/customer/CustomerMapper.xml index 6f5b3b5..78d7542 100644 --- a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/customer/CustomerMapper.xml +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/customer/CustomerMapper.xml @@ -2,11 +2,9 @@ - + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/warehouse/WarehouseMapper.xml b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/warehouse/WarehouseMapper.xml new file mode 100644 index 0000000..db877fb --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/main/resources/mapper/warehouse/WarehouseMapper.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImplTest.java new file mode 100644 index 0000000..b455db9 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/businessline/BusinessLineServiceImplTest.java @@ -0,0 +1,223 @@ +package com.yunxi.scm.module.xxjj.service.businessline; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.businessline.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.businessline.BusinessLineDO; +import com.yunxi.scm.module.xxjj.dal.mysql.businessline.BusinessLineMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link BusinessLineServiceImpl} 的单元测试类 + * + * @author 芋道源码 + */ +@Import(BusinessLineServiceImpl.class) +public class BusinessLineServiceImplTest extends BaseDbUnitTest { + + @Resource + private BusinessLineServiceImpl businessLineService; + + @Resource + private BusinessLineMapper businessLineMapper; + + @Test + public void testCreateBusinessLine_success() { + // 准备参数 + BusinessLineCreateReqVO reqVO = randomPojo(BusinessLineCreateReqVO.class); + + // 调用 + Long businessLineId = businessLineService.createBusinessLine(reqVO); + // 断言 + assertNotNull(businessLineId); + // 校验记录的属性是否正确 + BusinessLineDO businessLine = businessLineMapper.selectById(businessLineId); + assertPojoEquals(reqVO, businessLine); + } + + @Test + public void testUpdateBusinessLine_success() { + // mock 数据 + BusinessLineDO dbBusinessLine = randomPojo(BusinessLineDO.class); + businessLineMapper.insert(dbBusinessLine);// @Sql: 先插入出一条存在的数据 + // 准备参数 + BusinessLineUpdateReqVO reqVO = randomPojo(BusinessLineUpdateReqVO.class, o -> { + o.setId(dbBusinessLine.getId()); // 设置更新的 ID + }); + + // 调用 + businessLineService.updateBusinessLine(reqVO); + // 校验是否更新正确 + BusinessLineDO businessLine = businessLineMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, businessLine); + } + + @Test + public void testUpdateBusinessLine_notExists() { + // 准备参数 + BusinessLineUpdateReqVO reqVO = randomPojo(BusinessLineUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> businessLineService.updateBusinessLine(reqVO), BUSINESS_LINE_NOT_EXISTS); + } + + @Test + public void testDeleteBusinessLine_success() { + // mock 数据 + BusinessLineDO dbBusinessLine = randomPojo(BusinessLineDO.class); + businessLineMapper.insert(dbBusinessLine);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbBusinessLine.getId(); + + // 调用 + businessLineService.deleteBusinessLine(id); + // 校验数据不存在了 + assertNull(businessLineMapper.selectById(id)); + } + + @Test + public void testDeleteBusinessLine_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> businessLineService.deleteBusinessLine(id), BUSINESS_LINE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetBusinessLinePage() { + // mock 数据 + BusinessLineDO dbBusinessLine = randomPojo(BusinessLineDO.class, o -> { // 等会查询到 + o.setBusinessCode(null); + o.setBusinessName(null); + o.setAffiliatCompanyId(null); + o.setType(null); + o.setIndustry(null); + o.setCity(null); + o.setEstablishDate(null); + o.setBrandName(null); + o.setPhone(null); + o.setCreateTime(null); + }); + businessLineMapper.insert(dbBusinessLine); + // 测试 businessCode 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBusinessCode(null))); + // 测试 businessName 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBusinessName(null))); + // 测试 affiliatCompanyId 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setAffiliatCompanyId(null))); + // 测试 type 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setType(null))); + // 测试 industry 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setIndustry(null))); + // 测试 city 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setCity(null))); + // 测试 establishDate 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setEstablishDate(null))); + // 测试 brandName 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBrandName(null))); + // 测试 phone 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setPhone(null))); + // 测试 createTime 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setCreateTime(null))); + // 准备参数 + BusinessLinePageReqVO reqVO = new BusinessLinePageReqVO(); + reqVO.setBusinessCode(null); + reqVO.setBusinessName(null); + reqVO.setAffiliatCompanyId(null); + reqVO.setType(null); + reqVO.setIndustry(null); + reqVO.setCity(null); + reqVO.setEstablishDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setBrandName(null); + reqVO.setPhone(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = businessLineService.getBusinessLinePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbBusinessLine, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetBusinessLineList() { + // mock 数据 + BusinessLineDO dbBusinessLine = randomPojo(BusinessLineDO.class, o -> { // 等会查询到 + o.setBusinessCode(null); + o.setBusinessName(null); + o.setAffiliatCompanyId(null); + o.setType(null); + o.setIndustry(null); + o.setCity(null); + o.setEstablishDate(null); + o.setBrandName(null); + o.setPhone(null); + o.setCreateTime(null); + }); + businessLineMapper.insert(dbBusinessLine); + // 测试 businessCode 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBusinessCode(null))); + // 测试 businessName 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBusinessName(null))); + // 测试 affiliatCompanyId 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setAffiliatCompanyId(null))); + // 测试 type 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setType(null))); + // 测试 industry 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setIndustry(null))); + // 测试 city 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setCity(null))); + // 测试 establishDate 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setEstablishDate(null))); + // 测试 brandName 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setBrandName(null))); + // 测试 phone 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setPhone(null))); + // 测试 createTime 不匹配 + businessLineMapper.insert(cloneIgnoreId(dbBusinessLine, o -> o.setCreateTime(null))); + // 准备参数 + BusinessLineExportReqVO reqVO = new BusinessLineExportReqVO(); + reqVO.setBusinessCode(null); + reqVO.setBusinessName(null); + reqVO.setAffiliatCompanyId(null); + reqVO.setType(null); + reqVO.setIndustry(null); + reqVO.setCity(null); + reqVO.setEstablishDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setBrandName(null); + reqVO.setPhone(null); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = businessLineService.getBusinessLineList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbBusinessLine, list.get(0)); + } + +} diff --git a/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImplTest.java b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImplTest.java new file mode 100644 index 0000000..e11ee86 --- /dev/null +++ b/yunxi-module-xxjj/yunxi-module-xxjj-biz/src/test/java/com/yunxi/scm/module/xxjj/service/warehouse/WarehouseServiceImplTest.java @@ -0,0 +1,199 @@ +package com.yunxi.scm.module.xxjj.service.warehouse; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.mock.mockito.MockBean; + +import javax.annotation.Resource; + +import com.yunxi.scm.framework.test.core.ut.BaseDbUnitTest; + +import com.yunxi.scm.module.xxjj.controller.admin.warehouse.vo.*; +import com.yunxi.scm.module.xxjj.dal.dataobject.warehouse.WarehouseDO; +import com.yunxi.scm.module.xxjj.dal.mysql.warehouse.WarehouseMapper; +import com.yunxi.scm.framework.common.pojo.PageResult; + +import javax.annotation.Resource; +import org.springframework.context.annotation.Import; +import java.util.*; +import java.time.LocalDateTime; + +import static cn.hutool.core.util.RandomUtil.*; +import static com.yunxi.scm.module.xxjj.enums.ErrorCodeConstants.*; +import static com.yunxi.scm.framework.test.core.util.AssertUtils.*; +import static com.yunxi.scm.framework.test.core.util.RandomUtils.*; +import static com.yunxi.scm.framework.common.util.date.LocalDateTimeUtils.*; +import static com.yunxi.scm.framework.common.util.object.ObjectUtils.*; +import static com.yunxi.scm.framework.common.util.date.DateUtils.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +/** + * {@link WarehouseServiceImpl} 的单元测试类 + * + * @author 芋道源码 + */ +@Import(WarehouseServiceImpl.class) +public class WarehouseServiceImplTest extends BaseDbUnitTest { + + @Resource + private WarehouseServiceImpl warehouseService; + + @Resource + private WarehouseMapper warehouseMapper; + + @Test + public void testCreateWarehouse_success() { + // 准备参数 + WarehouseCreateReqVO reqVO = randomPojo(WarehouseCreateReqVO.class); + + // 调用 + Long warehouseId = warehouseService.createWarehouse(reqVO); + // 断言 + assertNotNull(warehouseId); + // 校验记录的属性是否正确 + WarehouseDO warehouse = warehouseMapper.selectById(warehouseId); + assertPojoEquals(reqVO, warehouse); + } + + @Test + public void testUpdateWarehouse_success() { + // mock 数据 + WarehouseDO dbWarehouse = randomPojo(WarehouseDO.class); + warehouseMapper.insert(dbWarehouse);// @Sql: 先插入出一条存在的数据 + // 准备参数 + WarehouseUpdateReqVO reqVO = randomPojo(WarehouseUpdateReqVO.class, o -> { + o.setId(dbWarehouse.getId()); // 设置更新的 ID + }); + + // 调用 + warehouseService.updateWarehouse(reqVO); + // 校验是否更新正确 + WarehouseDO warehouse = warehouseMapper.selectById(reqVO.getId()); // 获取最新的 + assertPojoEquals(reqVO, warehouse); + } + + @Test + public void testUpdateWarehouse_notExists() { + // 准备参数 + WarehouseUpdateReqVO reqVO = randomPojo(WarehouseUpdateReqVO.class); + + // 调用, 并断言异常 + assertServiceException(() -> warehouseService.updateWarehouse(reqVO), WAREHOUSE_NOT_EXISTS); + } + + @Test + public void testDeleteWarehouse_success() { + // mock 数据 + WarehouseDO dbWarehouse = randomPojo(WarehouseDO.class); + warehouseMapper.insert(dbWarehouse);// @Sql: 先插入出一条存在的数据 + // 准备参数 + Long id = dbWarehouse.getId(); + + // 调用 + warehouseService.deleteWarehouse(id); + // 校验数据不存在了 + assertNull(warehouseMapper.selectById(id)); + } + + @Test + public void testDeleteWarehouse_notExists() { + // 准备参数 + Long id = randomLongId(); + + // 调用, 并断言异常 + assertServiceException(() -> warehouseService.deleteWarehouse(id), WAREHOUSE_NOT_EXISTS); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetWarehousePage() { + // mock 数据 + WarehouseDO dbWarehouse = randomPojo(WarehouseDO.class, o -> { // 等会查询到 + o.setWarehouseCode(null); + o.setWarehouseName(null); + o.setAffiliatLineId(null); + o.setType(null); + o.setCity(null); + o.setEstablishDate(null); + o.setCreateTime(null); + }); + warehouseMapper.insert(dbWarehouse); + // 测试 warehouseCode 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setWarehouseCode(null))); + // 测试 warehouseName 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setWarehouseName(null))); + // 测试 affiliatLineId 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setAffiliatLineId(null))); + // 测试 type 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setType(null))); + // 测试 city 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setCity(null))); + // 测试 establishDate 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setEstablishDate(null))); + // 测试 createTime 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setCreateTime(null))); + // 准备参数 + WarehousePageReqVO reqVO = new WarehousePageReqVO(); + reqVO.setWarehouseCode(null); + reqVO.setWarehouseName(null); + reqVO.setAffiliatLineId(null); + reqVO.setType(null); + reqVO.setCity(null); + reqVO.setEstablishDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + PageResult pageResult = warehouseService.getWarehousePage(reqVO); + // 断言 + assertEquals(1, pageResult.getTotal()); + assertEquals(1, pageResult.getList().size()); + assertPojoEquals(dbWarehouse, pageResult.getList().get(0)); + } + + @Test + @Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解 + public void testGetWarehouseList() { + // mock 数据 + WarehouseDO dbWarehouse = randomPojo(WarehouseDO.class, o -> { // 等会查询到 + o.setWarehouseCode(null); + o.setWarehouseName(null); + o.setAffiliatLineId(null); + o.setType(null); + o.setCity(null); + o.setEstablishDate(null); + o.setCreateTime(null); + }); + warehouseMapper.insert(dbWarehouse); + // 测试 warehouseCode 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setWarehouseCode(null))); + // 测试 warehouseName 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setWarehouseName(null))); + // 测试 affiliatLineId 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setAffiliatLineId(null))); + // 测试 type 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setType(null))); + // 测试 city 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setCity(null))); + // 测试 establishDate 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setEstablishDate(null))); + // 测试 createTime 不匹配 + warehouseMapper.insert(cloneIgnoreId(dbWarehouse, o -> o.setCreateTime(null))); + // 准备参数 + WarehouseExportReqVO reqVO = new WarehouseExportReqVO(); + reqVO.setWarehouseCode(null); + reqVO.setWarehouseName(null); + reqVO.setAffiliatLineId(null); + reqVO.setType(null); + reqVO.setCity(null); + reqVO.setEstablishDate(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28)); + + // 调用 + List list = warehouseService.getWarehouseList(reqVO); + // 断言 + assertEquals(1, list.size()); + assertPojoEquals(dbWarehouse, list.get(0)); + } + +} diff --git a/yunxi-ui-admin/src/api/xxjj/businessLine.js b/yunxi-ui-admin/src/api/xxjj/businessLine.js new file mode 100644 index 0000000..304ee1f --- /dev/null +++ b/yunxi-ui-admin/src/api/xxjj/businessLine.js @@ -0,0 +1,62 @@ +import request from '@/utils/request' + +// 创建业务线 +export function createBusinessLine(data) { + return request({ + url: '/xxjj/business-line/create', + method: 'post', + data: data + }) +} + +// 更新业务线 +export function updateBusinessLine(data) { + return request({ + url: '/xxjj/business-line/update', + method: 'put', + data: data + }) +} + +// 删除业务线 +export function deleteBusinessLine(id) { + return request({ + url: '/xxjj/business-line/delete?id=' + id, + method: 'delete' + }) +} + +// 获得业务线 +export function getBusinessLine(id) { + return request({ + url: '/xxjj/business-line/get?id=' + id, + method: 'get' + }) +} + +// 获得业务线分页 +export function getBusinessLinePage(query) { + return request({ + url: '/xxjj/business-line/page', + method: 'get', + params: query + }) +} + +// 导出业务线 Excel +export function exportBusinessLineExcel(query) { + return request({ + url: '/xxjj/business-line/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} + +export function getBusinessLintTree(query) { + return request({ + url: '/xxjj/business-line/tree', + method: 'get', + params: query + }) +} diff --git a/yunxi-ui-admin/src/api/xxjj/warehouse.js b/yunxi-ui-admin/src/api/xxjj/warehouse.js new file mode 100644 index 0000000..bb3efa1 --- /dev/null +++ b/yunxi-ui-admin/src/api/xxjj/warehouse.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 创建仓库 +export function createWarehouse(data) { + return request({ + url: '/xxjj/warehouse/create', + method: 'post', + data: data + }) +} + +// 更新仓库 +export function updateWarehouse(data) { + return request({ + url: '/xxjj/warehouse/update', + method: 'put', + data: data + }) +} + +// 删除仓库 +export function deleteWarehouse(id) { + return request({ + url: '/xxjj/warehouse/delete?id=' + id, + method: 'delete' + }) +} + +// 获得仓库 +export function getWarehouse(id) { + return request({ + url: '/xxjj/warehouse/get?id=' + id, + method: 'get' + }) +} + +// 获得仓库分页 +export function getWarehousePage(query) { + return request({ + url: '/xxjj/warehouse/page', + method: 'get', + params: query + }) +} + +// 导出仓库 Excel +export function exportWarehouseExcel(query) { + return request({ + url: '/xxjj/warehouse/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/yunxi-ui-admin/src/utils/dict.js b/yunxi-ui-admin/src/utils/dict.js index 8e96091..83d7381 100644 --- a/yunxi-ui-admin/src/utils/dict.js +++ b/yunxi-ui-admin/src/utils/dict.js @@ -102,6 +102,12 @@ export const DICT_TYPE = { CUSTOMER_NATUER: 'customer_nature', //客户性质 COOPERATION_MODE: 'cooperation_mode', //客户合作模式 + // ============= BUSINESSLINE 模块================= + BUSINESS_TYPE: 'business_type', //业务线类型 + + // ============= WAREHOUSE 模块================= + WAREHOUSE_TYPE: 'warehouse_type', //仓库类型 + } /** diff --git a/yunxi-ui-admin/src/views/xxjj/businessAndWarehouse/index.vue b/yunxi-ui-admin/src/views/xxjj/businessAndWarehouse/index.vue new file mode 100644 index 0000000..fc2bc29 --- /dev/null +++ b/yunxi-ui-admin/src/views/xxjj/businessAndWarehouse/index.vue @@ -0,0 +1,1097 @@ + + + + + diff --git a/yunxi-ui-admin/src/views/xxjj/businessLine/index.vue b/yunxi-ui-admin/src/views/xxjj/businessLine/index.vue new file mode 100644 index 0000000..9e59a0d --- /dev/null +++ b/yunxi-ui-admin/src/views/xxjj/businessLine/index.vue @@ -0,0 +1,336 @@ + + + diff --git a/yunxi-ui-admin/src/views/xxjj/customer/index.vue b/yunxi-ui-admin/src/views/xxjj/customer/index.vue index 328a0a9..dd78acf 100644 --- a/yunxi-ui-admin/src/views/xxjj/customer/index.vue +++ b/yunxi-ui-admin/src/views/xxjj/customer/index.vue @@ -1,54 +1,134 @@ diff --git a/yunxi-ui-admin/src/views/xxjj/product/index.vue b/yunxi-ui-admin/src/views/xxjj/product/index.vue index 36b348a..305d21f 100644 --- a/yunxi-ui-admin/src/views/xxjj/product/index.vue +++ b/yunxi-ui-admin/src/views/xxjj/product/index.vue @@ -1,13 +1,29 @@