ccongli-dev-0920
杨世强 1 year ago
parent 844e30ef25
commit 19f36ef0f3

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout;
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.warehouseout.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout.WarehouseOutDO;
import com.yunxi.scm.module.xxjj.convert.warehouseout.WarehouseOutConvert;
import com.yunxi.scm.module.xxjj.service.warehouseout.WarehouseOutService;
@Tag(name = "管理后台 - 领料单")
@RestController
@RequestMapping("/xxjj/warehouse-out")
@Validated
public class WarehouseOutController {
@Resource
private WarehouseOutService warehouseOutService;
@PostMapping("/create")
@Operation(summary = "创建领料单")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:create')")
public CommonResult<Long> createWarehouseOut(@Valid @RequestBody WarehouseOutCreateReqVO createReqVO) {
return success(warehouseOutService.createWarehouseOut(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新领料单")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:update')")
public CommonResult<Boolean> updateWarehouseOut(@Valid @RequestBody WarehouseOutUpdateReqVO updateReqVO) {
warehouseOutService.updateWarehouseOut(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除领料单")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:delete')")
public CommonResult<Boolean> deleteWarehouseOut(@RequestParam("id") Long id) {
warehouseOutService.deleteWarehouseOut(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得领料单")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:query')")
public CommonResult<WarehouseOutRespVO> getWarehouseOut(@RequestParam("id") Long id) {
WarehouseOutDO warehouseOut = warehouseOutService.getWarehouseOut(id);
return success(WarehouseOutConvert.INSTANCE.convert(warehouseOut));
}
@GetMapping("/list")
@Operation(summary = "获得领料单列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:query')")
public CommonResult<List<WarehouseOutRespVO>> getWarehouseOutList(@RequestParam("ids") Collection<Long> ids) {
List<WarehouseOutDO> list = warehouseOutService.getWarehouseOutList(ids);
return success(WarehouseOutConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得领料单分页")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:query')")
public CommonResult<PageResult<WarehouseOutRespVO>> getWarehouseOutPage(@Valid WarehouseOutPageReqVO pageVO) {
PageResult<WarehouseOutDO> pageResult = warehouseOutService.getWarehouseOutPage(pageVO);
return success(WarehouseOutConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出领料单 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-out:export')")
@OperateLog(type = EXPORT)
public void exportWarehouseOutExcel(@Valid WarehouseOutExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<WarehouseOutDO> list = warehouseOutService.getWarehouseOutList(exportReqVO);
// 导出 Excel
List<WarehouseOutExcelVO> datas = WarehouseOutConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "领料单.xls", "数据", WarehouseOutExcelVO.class, datas);
}
}

@ -0,0 +1,51 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 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 WarehouseOutBaseVO {
@Schema(description = "单据编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据编号不能为空")
private String documentNo;
@Schema(description = "领料仓库id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "领料仓库id不能为空")
private Long warehouseOut;
@Schema(description = "单据状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "单据状态不能为空")
private String status;
@Schema(description = "领料原因", example = "不香")
private String reason;
@Schema(description = "领料数量", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "领料数量不能为空")
private Integer outNum;
@Schema(description = "领料时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "领料时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime outTime;
@Schema(description = "完成时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "完成时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime finishTime;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 WarehouseOutCreateReqVO extends WarehouseOutBaseVO {
}

@ -0,0 +1,52 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 com.alibaba.excel.annotation.ExcelProperty;
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
/**
* Excel VO
*
* @author
*/
@Data
public class WarehouseOutExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("单据编号")
private String documentNo;
@ExcelProperty("领料仓库id")
private Long warehouseOut;
@ExcelProperty(value = "单据状态", converter = DictConvert.class)
@DictFormat("warehouse_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String status;
@ExcelProperty("领料原因")
private String reason;
@ExcelProperty("领料数量")
private Integer outNum;
@ExcelProperty("领料时间")
private LocalDateTime outTime;
@ExcelProperty("完成时间")
private LocalDateTime finishTime;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,43 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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参数和 WarehouseOutPageReqVO 是一致的")
@Data
public class WarehouseOutExportReqVO {
@Schema(description = "单据编号")
private String documentNo;
@Schema(description = "领料仓库id")
private Long warehouseOut;
@Schema(description = "单据状态", example = "1")
private String status;
@Schema(description = "领料原因", example = "不香")
private String reason;
@Schema(description = "领料数量")
private Integer outNum;
@Schema(description = "领料时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] outTime;
@Schema(description = "完成时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] finishTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,45 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 WarehouseOutPageReqVO extends PageParam {
@Schema(description = "单据编号")
private String documentNo;
@Schema(description = "领料仓库id")
private Long warehouseOut;
@Schema(description = "单据状态", example = "1")
private String status;
@Schema(description = "领料原因", example = "不香")
private String reason;
@Schema(description = "领料数量")
private Integer outNum;
@Schema(description = "领料时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] outTime;
@Schema(description = "完成时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] finishTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 WarehouseOutRespVO extends WarehouseOutBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "16399")
private Long id;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehouseout.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 WarehouseOutUpdateReqVO extends WarehouseOutBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "16399")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,102 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt;
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.warehousereceipt.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt.WarehouseReceiptDO;
import com.yunxi.scm.module.xxjj.convert.warehousereceipt.WarehouseReceiptConvert;
import com.yunxi.scm.module.xxjj.service.warehousereceipt.WarehouseReceiptService;
@Tag(name = "管理后台 - 入库单")
@RestController
@RequestMapping("/xxjj/warehouse-receipt")
@Validated
public class WarehouseReceiptController {
@Resource
private WarehouseReceiptService warehouseReceiptService;
@PostMapping("/create")
@Operation(summary = "创建入库单")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:create')")
public CommonResult<Long> createWarehouseReceipt(@Valid @RequestBody WarehouseReceiptCreateReqVO createReqVO) {
return success(warehouseReceiptService.createWarehouseReceipt(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新入库单")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:update')")
public CommonResult<Boolean> updateWarehouseReceipt(@Valid @RequestBody WarehouseReceiptUpdateReqVO updateReqVO) {
warehouseReceiptService.updateWarehouseReceipt(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除入库单")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:delete')")
public CommonResult<Boolean> deleteWarehouseReceipt(@RequestParam("id") Long id) {
warehouseReceiptService.deleteWarehouseReceipt(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得入库单")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:query')")
public CommonResult<WarehouseReceiptRespVO> getWarehouseReceipt(@RequestParam("id") Long id) {
WarehouseReceiptDO warehouseReceipt = warehouseReceiptService.getWarehouseReceipt(id);
return success(WarehouseReceiptConvert.INSTANCE.convert(warehouseReceipt));
}
@GetMapping("/list")
@Operation(summary = "获得入库单列表")
@Parameter(name = "ids", description = "编号列表", required = true, example = "1024,2048")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:query')")
public CommonResult<List<WarehouseReceiptRespVO>> getWarehouseReceiptList(@RequestParam("ids") Collection<Long> ids) {
List<WarehouseReceiptDO> list = warehouseReceiptService.getWarehouseReceiptList(ids);
return success(WarehouseReceiptConvert.INSTANCE.convertList(list));
}
@GetMapping("/page")
@Operation(summary = "获得入库单分页")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:query')")
public CommonResult<PageResult<WarehouseReceiptRespVO>> getWarehouseReceiptPage(@Valid WarehouseReceiptPageReqVO pageVO) {
PageResult<WarehouseReceiptDO> pageResult = warehouseReceiptService.getWarehouseReceiptPage(pageVO);
return success(WarehouseReceiptConvert.INSTANCE.convertPage(pageResult));
}
@GetMapping("/export-excel")
@Operation(summary = "导出入库单 Excel")
@PreAuthorize("@ss.hasPermission('xxjj:warehouse-receipt:export')")
@OperateLog(type = EXPORT)
public void exportWarehouseReceiptExcel(@Valid WarehouseReceiptExportReqVO exportReqVO,
HttpServletResponse response) throws IOException {
List<WarehouseReceiptDO> list = warehouseReceiptService.getWarehouseReceiptList(exportReqVO);
// 导出 Excel
List<WarehouseReceiptExcelVO> datas = WarehouseReceiptConvert.INSTANCE.convertList02(list);
ExcelUtils.write(response, "入库单.xls", "数据", WarehouseReceiptExcelVO.class, datas);
}
}

@ -0,0 +1,46 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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 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 WarehouseReceiptBaseVO {
@Schema(description = "单据编号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "单据编号不能为空")
private String documentNo;
@Schema(description = "入库仓库id", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "入库仓库id不能为空")
private Long warehouseReceipt;
@Schema(description = "单据状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "单据状态不能为空")
private String status;
@Schema(description = "单据类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
@NotNull(message = "单据类型不能为空")
private String type;
@Schema(description = "入库数量", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "入库数量不能为空")
private Integer receiptNum;
@Schema(description = "入库时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "入库时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime receiptTime;
}

@ -0,0 +1,14 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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 WarehouseReceiptCreateReqVO extends WarehouseReceiptBaseVO {
}

@ -0,0 +1,49 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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;
import com.yunxi.scm.framework.excel.core.annotations.DictFormat;
import com.yunxi.scm.framework.excel.core.convert.DictConvert;
/**
* Excel VO
*
* @author
*/
@Data
public class WarehouseReceiptExcelVO {
@ExcelProperty("编号")
private Long id;
@ExcelProperty("单据编号")
private String documentNo;
@ExcelProperty("入库仓库id")
private Long warehouseReceipt;
@ExcelProperty(value = "单据状态", converter = DictConvert.class)
@DictFormat("warehouse_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String status;
@ExcelProperty(value = "单据类型", converter = DictConvert.class)
@DictFormat("business_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
private String type;
@ExcelProperty("入库数量")
private Integer receiptNum;
@ExcelProperty("入库时间")
private LocalDateTime receiptTime;
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,39 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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参数和 WarehouseReceiptPageReqVO 是一致的")
@Data
public class WarehouseReceiptExportReqVO {
@Schema(description = "单据编号")
private String documentNo;
@Schema(description = "入库仓库id")
private Long warehouseReceipt;
@Schema(description = "单据状态", example = "2")
private String status;
@Schema(description = "单据类型", example = "2")
private String type;
@Schema(description = "入库数量")
private Integer receiptNum;
@Schema(description = "入库时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] receiptTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,41 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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 WarehouseReceiptPageReqVO extends PageParam {
@Schema(description = "单据编号")
private String documentNo;
@Schema(description = "入库仓库id")
private Long warehouseReceipt;
@Schema(description = "单据状态", example = "2")
private String status;
@Schema(description = "单据类型", example = "2")
private String type;
@Schema(description = "入库数量")
private Integer receiptNum;
@Schema(description = "入库时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] receiptTime;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

@ -0,0 +1,19 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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 WarehouseReceiptRespVO extends WarehouseReceiptBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24380")
private Long id;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}

@ -0,0 +1,18 @@
package com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.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 WarehouseReceiptUpdateReqVO extends WarehouseReceiptBaseVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24380")
@NotNull(message = "编号不能为空")
private Long id;
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.warehouseout;
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.warehouseout.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout.WarehouseOutDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface WarehouseOutConvert {
WarehouseOutConvert INSTANCE = Mappers.getMapper(WarehouseOutConvert.class);
WarehouseOutDO convert(WarehouseOutCreateReqVO bean);
WarehouseOutDO convert(WarehouseOutUpdateReqVO bean);
WarehouseOutRespVO convert(WarehouseOutDO bean);
List<WarehouseOutRespVO> convertList(List<WarehouseOutDO> list);
PageResult<WarehouseOutRespVO> convertPage(PageResult<WarehouseOutDO> page);
List<WarehouseOutExcelVO> convertList02(List<WarehouseOutDO> list);
}

@ -0,0 +1,34 @@
package com.yunxi.scm.module.xxjj.convert.warehousereceipt;
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.warehousereceipt.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt.WarehouseReceiptDO;
/**
* Convert
*
* @author
*/
@Mapper
public interface WarehouseReceiptConvert {
WarehouseReceiptConvert INSTANCE = Mappers.getMapper(WarehouseReceiptConvert.class);
WarehouseReceiptDO convert(WarehouseReceiptCreateReqVO bean);
WarehouseReceiptDO convert(WarehouseReceiptUpdateReqVO bean);
WarehouseReceiptRespVO convert(WarehouseReceiptDO bean);
List<WarehouseReceiptRespVO> convertList(List<WarehouseReceiptDO> list);
PageResult<WarehouseReceiptRespVO> convertPage(PageResult<WarehouseReceiptDO> page);
List<WarehouseReceiptExcelVO> convertList02(List<WarehouseReceiptDO> list);
}

@ -0,0 +1,63 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout;
import lombok.*;
import java.util.*;
import java.time.LocalDateTime;
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_out")
@KeySequence("xxjj_warehouse_out_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WarehouseOutDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String documentNo;
/**
* id
*/
private Long warehouseOut;
/**
*
*
* {@link TODO warehouse_type }
*/
private String status;
/**
*
*/
private String reason;
/**
*
*/
private Integer outNum;
/**
*
*/
private LocalDateTime outTime;
/**
*
*/
private LocalDateTime finishTime;
}

@ -0,0 +1,60 @@
package com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt;
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_receipt")
@KeySequence("xxjj_warehouse_receipt_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WarehouseReceiptDO extends BaseDO {
/**
*
*/
@TableId
private Long id;
/**
*
*/
private String documentNo;
/**
* id
*/
private Long warehouseReceipt;
/**
*
*
* {@link TODO warehouse_type }
*/
private String status;
/**
*
*
* {@link TODO business_type }
*/
private String type;
/**
*
*/
private Integer receiptNum;
/**
*
*/
private LocalDateTime receiptTime;
}

@ -0,0 +1,46 @@
package com.yunxi.scm.module.xxjj.dal.mysql.warehouseout;
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.warehouseout.WarehouseOutDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.warehouseout.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface WarehouseOutMapper extends BaseMapperX<WarehouseOutDO> {
default PageResult<WarehouseOutDO> selectPage(WarehouseOutPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WarehouseOutDO>()
.eqIfPresent(WarehouseOutDO::getDocumentNo, reqVO.getDocumentNo())
.eqIfPresent(WarehouseOutDO::getWarehouseOut, reqVO.getWarehouseOut())
.eqIfPresent(WarehouseOutDO::getStatus, reqVO.getStatus())
.eqIfPresent(WarehouseOutDO::getReason, reqVO.getReason())
.eqIfPresent(WarehouseOutDO::getOutNum, reqVO.getOutNum())
.betweenIfPresent(WarehouseOutDO::getOutTime, reqVO.getOutTime())
.betweenIfPresent(WarehouseOutDO::getFinishTime, reqVO.getFinishTime())
.betweenIfPresent(WarehouseOutDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WarehouseOutDO::getId));
}
default List<WarehouseOutDO> selectList(WarehouseOutExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<WarehouseOutDO>()
.eqIfPresent(WarehouseOutDO::getDocumentNo, reqVO.getDocumentNo())
.eqIfPresent(WarehouseOutDO::getWarehouseOut, reqVO.getWarehouseOut())
.eqIfPresent(WarehouseOutDO::getStatus, reqVO.getStatus())
.eqIfPresent(WarehouseOutDO::getReason, reqVO.getReason())
.eqIfPresent(WarehouseOutDO::getOutNum, reqVO.getOutNum())
.betweenIfPresent(WarehouseOutDO::getOutTime, reqVO.getOutTime())
.betweenIfPresent(WarehouseOutDO::getFinishTime, reqVO.getFinishTime())
.betweenIfPresent(WarehouseOutDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WarehouseOutDO::getId));
}
}

@ -0,0 +1,44 @@
package com.yunxi.scm.module.xxjj.dal.mysql.warehousereceipt;
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.warehousereceipt.WarehouseReceiptDO;
import org.apache.ibatis.annotations.Mapper;
import com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.vo.*;
/**
* Mapper
*
* @author
*/
@Mapper
public interface WarehouseReceiptMapper extends BaseMapperX<WarehouseReceiptDO> {
default PageResult<WarehouseReceiptDO> selectPage(WarehouseReceiptPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<WarehouseReceiptDO>()
.eqIfPresent(WarehouseReceiptDO::getDocumentNo, reqVO.getDocumentNo())
.eqIfPresent(WarehouseReceiptDO::getWarehouseReceipt, reqVO.getWarehouseReceipt())
.eqIfPresent(WarehouseReceiptDO::getStatus, reqVO.getStatus())
.eqIfPresent(WarehouseReceiptDO::getType, reqVO.getType())
.eqIfPresent(WarehouseReceiptDO::getReceiptNum, reqVO.getReceiptNum())
.betweenIfPresent(WarehouseReceiptDO::getReceiptTime, reqVO.getReceiptTime())
.betweenIfPresent(WarehouseReceiptDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WarehouseReceiptDO::getId));
}
default List<WarehouseReceiptDO> selectList(WarehouseReceiptExportReqVO reqVO) {
return selectList(new LambdaQueryWrapperX<WarehouseReceiptDO>()
.eqIfPresent(WarehouseReceiptDO::getDocumentNo, reqVO.getDocumentNo())
.eqIfPresent(WarehouseReceiptDO::getWarehouseReceipt, reqVO.getWarehouseReceipt())
.eqIfPresent(WarehouseReceiptDO::getStatus, reqVO.getStatus())
.eqIfPresent(WarehouseReceiptDO::getType, reqVO.getType())
.eqIfPresent(WarehouseReceiptDO::getReceiptNum, reqVO.getReceiptNum())
.betweenIfPresent(WarehouseReceiptDO::getReceiptTime, reqVO.getReceiptTime())
.betweenIfPresent(WarehouseReceiptDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(WarehouseReceiptDO::getId));
}
}

@ -20,7 +20,16 @@ public interface ErrorCodeConstants {
// ========== 工单 TODO 补充编号 ========== // ========== 工单 TODO 补充编号 ==========
ErrorCode WORK_ORDER_NOT_EXISTS = new ErrorCode(1002025009, "工单不存在"); ErrorCode WORK_ORDER_NOT_EXISTS = new ErrorCode(1002025009, "工单不存在");
// ========== 供应商 TODO 补充编号 ========== // ========== 供应商 TODO 补充编号 ==========
ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1002026009, "供应商不存在"); ErrorCode SUPPLIER_NOT_EXISTS = new ErrorCode(1002026010, "供应商不存在");
// ========== 业务线 TODO 补充编号 ==========
ErrorCode BUSINESS_LINE_NOT_EXISTS = new ErrorCode(1002025011, "业务线不存在");
// ========== 仓库 TODO 补充编号 ==========
ErrorCode WAREHOUSE_NOT_EXISTS = new ErrorCode(1002025012, "仓库不存在");
// ========== 入库单 TODO 补充编号 ==========
ErrorCode WAREHOUSE_RECEIPT_NOT_EXISTS = new ErrorCode(1002025013, "入库单不存在");
// ========== 领料单 TODO 补充编号 ==========
ErrorCode WAREHOUSE_OUT_NOT_EXISTS = new ErrorCode(1002025014, "领料单不存在");
// ========== 部门模块 1002004000 ========== // ========== 部门模块 1002004000 ==========
ErrorCode MaterialCategory_NAME_DUPLICATE = new ErrorCode(1002004000, "已经存在该名字的部门"); ErrorCode MaterialCategory_NAME_DUPLICATE = new ErrorCode(1002004000, "已经存在该名字的部门");
@ -31,8 +40,4 @@ public interface ErrorCodeConstants {
ErrorCode MaterialCategory_EXISTS_USER = new ErrorCode(1002004005, "部门中存在员工,无法删除"); ErrorCode MaterialCategory_EXISTS_USER = new ErrorCode(1002004005, "部门中存在员工,无法删除");
ErrorCode MaterialCategory_NOT_ENABLE = new ErrorCode(1002004006, "部门({})不处于开启状态,不允许选择"); ErrorCode MaterialCategory_NOT_ENABLE = new ErrorCode(1002004006, "部门({})不处于开启状态,不允许选择");
ErrorCode MaterialCategory_PARENT_IS_CHILD = new ErrorCode(1002004007, "不能设置自己的子部门为父部门"); 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, "仓库不存在");
} }

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.warehouseout;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.warehouseout.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout.WarehouseOutDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface WarehouseOutService {
/**
*
*
* @param createReqVO
* @return
*/
Long createWarehouseOut(@Valid WarehouseOutCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateWarehouseOut(@Valid WarehouseOutUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteWarehouseOut(Long id);
/**
*
*
* @param id
* @return
*/
WarehouseOutDO getWarehouseOut(Long id);
/**
*
*
* @param ids
* @return
*/
List<WarehouseOutDO> getWarehouseOutList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<WarehouseOutDO> getWarehouseOutPage(WarehouseOutPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<WarehouseOutDO> getWarehouseOutList(WarehouseOutExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.warehouseout;
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.warehouseout.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout.WarehouseOutDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.warehouseout.WarehouseOutConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.warehouseout.WarehouseOutMapper;
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 WarehouseOutServiceImpl implements WarehouseOutService {
@Resource
private WarehouseOutMapper warehouseOutMapper;
@Override
public Long createWarehouseOut(WarehouseOutCreateReqVO createReqVO) {
// 插入
WarehouseOutDO warehouseOut = WarehouseOutConvert.INSTANCE.convert(createReqVO);
warehouseOutMapper.insert(warehouseOut);
// 返回
return warehouseOut.getId();
}
@Override
public void updateWarehouseOut(WarehouseOutUpdateReqVO updateReqVO) {
// 校验存在
validateWarehouseOutExists(updateReqVO.getId());
// 更新
WarehouseOutDO updateObj = WarehouseOutConvert.INSTANCE.convert(updateReqVO);
warehouseOutMapper.updateById(updateObj);
}
@Override
public void deleteWarehouseOut(Long id) {
// 校验存在
validateWarehouseOutExists(id);
// 删除
warehouseOutMapper.deleteById(id);
}
private void validateWarehouseOutExists(Long id) {
if (warehouseOutMapper.selectById(id) == null) {
throw exception(WAREHOUSE_OUT_NOT_EXISTS);
}
}
@Override
public WarehouseOutDO getWarehouseOut(Long id) {
return warehouseOutMapper.selectById(id);
}
@Override
public List<WarehouseOutDO> getWarehouseOutList(Collection<Long> ids) {
return warehouseOutMapper.selectBatchIds(ids);
}
@Override
public PageResult<WarehouseOutDO> getWarehouseOutPage(WarehouseOutPageReqVO pageReqVO) {
return warehouseOutMapper.selectPage(pageReqVO);
}
@Override
public List<WarehouseOutDO> getWarehouseOutList(WarehouseOutExportReqVO exportReqVO) {
return warehouseOutMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,70 @@
package com.yunxi.scm.module.xxjj.service.warehousereceipt;
import java.util.*;
import javax.validation.*;
import com.yunxi.scm.module.xxjj.controller.admin.warehousereceipt.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt.WarehouseReceiptDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
/**
* Service
*
* @author
*/
public interface WarehouseReceiptService {
/**
*
*
* @param createReqVO
* @return
*/
Long createWarehouseReceipt(@Valid WarehouseReceiptCreateReqVO createReqVO);
/**
*
*
* @param updateReqVO
*/
void updateWarehouseReceipt(@Valid WarehouseReceiptUpdateReqVO updateReqVO);
/**
*
*
* @param id
*/
void deleteWarehouseReceipt(Long id);
/**
*
*
* @param id
* @return
*/
WarehouseReceiptDO getWarehouseReceipt(Long id);
/**
*
*
* @param ids
* @return
*/
List<WarehouseReceiptDO> getWarehouseReceiptList(Collection<Long> ids);
/**
*
*
* @param pageReqVO
* @return
*/
PageResult<WarehouseReceiptDO> getWarehouseReceiptPage(WarehouseReceiptPageReqVO pageReqVO);
/**
* , Excel
*
* @param exportReqVO
* @return
*/
List<WarehouseReceiptDO> getWarehouseReceiptList(WarehouseReceiptExportReqVO exportReqVO);
}

@ -0,0 +1,82 @@
package com.yunxi.scm.module.xxjj.service.warehousereceipt;
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.warehousereceipt.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt.WarehouseReceiptDO;
import com.yunxi.scm.framework.common.pojo.PageResult;
import com.yunxi.scm.module.xxjj.convert.warehousereceipt.WarehouseReceiptConvert;
import com.yunxi.scm.module.xxjj.dal.mysql.warehousereceipt.WarehouseReceiptMapper;
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 WarehouseReceiptServiceImpl implements WarehouseReceiptService {
@Resource
private WarehouseReceiptMapper warehouseReceiptMapper;
@Override
public Long createWarehouseReceipt(WarehouseReceiptCreateReqVO createReqVO) {
// 插入
WarehouseReceiptDO warehouseReceipt = WarehouseReceiptConvert.INSTANCE.convert(createReqVO);
warehouseReceiptMapper.insert(warehouseReceipt);
// 返回
return warehouseReceipt.getId();
}
@Override
public void updateWarehouseReceipt(WarehouseReceiptUpdateReqVO updateReqVO) {
// 校验存在
validateWarehouseReceiptExists(updateReqVO.getId());
// 更新
WarehouseReceiptDO updateObj = WarehouseReceiptConvert.INSTANCE.convert(updateReqVO);
warehouseReceiptMapper.updateById(updateObj);
}
@Override
public void deleteWarehouseReceipt(Long id) {
// 校验存在
validateWarehouseReceiptExists(id);
// 删除
warehouseReceiptMapper.deleteById(id);
}
private void validateWarehouseReceiptExists(Long id) {
if (warehouseReceiptMapper.selectById(id) == null) {
throw exception(WAREHOUSE_RECEIPT_NOT_EXISTS);
}
}
@Override
public WarehouseReceiptDO getWarehouseReceipt(Long id) {
return warehouseReceiptMapper.selectById(id);
}
@Override
public List<WarehouseReceiptDO> getWarehouseReceiptList(Collection<Long> ids) {
return warehouseReceiptMapper.selectBatchIds(ids);
}
@Override
public PageResult<WarehouseReceiptDO> getWarehouseReceiptPage(WarehouseReceiptPageReqVO pageReqVO) {
return warehouseReceiptMapper.selectPage(pageReqVO);
}
@Override
public List<WarehouseReceiptDO> getWarehouseReceiptList(WarehouseReceiptExportReqVO exportReqVO) {
return warehouseReceiptMapper.selectList(exportReqVO);
}
}

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunxi.scm.module.xxjj.dal.mysql.warehouseout.WarehouseOutMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yunxi.scm.module.xxjj.dal.mysql.warehousereceipt.WarehouseReceiptMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>

@ -0,0 +1,207 @@
package com.yunxi.scm.module.xxjj.service.warehouseout;
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.warehouseout.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehouseout.WarehouseOutDO;
import com.yunxi.scm.module.xxjj.dal.mysql.warehouseout.WarehouseOutMapper;
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 WarehouseOutServiceImpl}
*
* @author
*/
@Import(WarehouseOutServiceImpl.class)
public class WarehouseOutServiceImplTest extends BaseDbUnitTest {
@Resource
private WarehouseOutServiceImpl warehouseOutService;
@Resource
private WarehouseOutMapper warehouseOutMapper;
@Test
public void testCreateWarehouseOut_success() {
// 准备参数
WarehouseOutCreateReqVO reqVO = randomPojo(WarehouseOutCreateReqVO.class);
// 调用
Long warehouseOutId = warehouseOutService.createWarehouseOut(reqVO);
// 断言
assertNotNull(warehouseOutId);
// 校验记录的属性是否正确
WarehouseOutDO warehouseOut = warehouseOutMapper.selectById(warehouseOutId);
assertPojoEquals(reqVO, warehouseOut);
}
@Test
public void testUpdateWarehouseOut_success() {
// mock 数据
WarehouseOutDO dbWarehouseOut = randomPojo(WarehouseOutDO.class);
warehouseOutMapper.insert(dbWarehouseOut);// @Sql: 先插入出一条存在的数据
// 准备参数
WarehouseOutUpdateReqVO reqVO = randomPojo(WarehouseOutUpdateReqVO.class, o -> {
o.setId(dbWarehouseOut.getId()); // 设置更新的 ID
});
// 调用
warehouseOutService.updateWarehouseOut(reqVO);
// 校验是否更新正确
WarehouseOutDO warehouseOut = warehouseOutMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, warehouseOut);
}
@Test
public void testUpdateWarehouseOut_notExists() {
// 准备参数
WarehouseOutUpdateReqVO reqVO = randomPojo(WarehouseOutUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> warehouseOutService.updateWarehouseOut(reqVO), WAREHOUSE_OUT_NOT_EXISTS);
}
@Test
public void testDeleteWarehouseOut_success() {
// mock 数据
WarehouseOutDO dbWarehouseOut = randomPojo(WarehouseOutDO.class);
warehouseOutMapper.insert(dbWarehouseOut);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbWarehouseOut.getId();
// 调用
warehouseOutService.deleteWarehouseOut(id);
// 校验数据不存在了
assertNull(warehouseOutMapper.selectById(id));
}
@Test
public void testDeleteWarehouseOut_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> warehouseOutService.deleteWarehouseOut(id), WAREHOUSE_OUT_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetWarehouseOutPage() {
// mock 数据
WarehouseOutDO dbWarehouseOut = randomPojo(WarehouseOutDO.class, o -> { // 等会查询到
o.setDocumentNo(null);
o.setWarehouseOut(null);
o.setStatus(null);
o.setReason(null);
o.setOutNum(null);
o.setOutTime(null);
o.setFinishTime(null);
o.setCreateTime(null);
});
warehouseOutMapper.insert(dbWarehouseOut);
// 测试 documentNo 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setDocumentNo(null)));
// 测试 warehouseOut 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setWarehouseOut(null)));
// 测试 status 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setStatus(null)));
// 测试 reason 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setReason(null)));
// 测试 outNum 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setOutNum(null)));
// 测试 outTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setOutTime(null)));
// 测试 finishTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setFinishTime(null)));
// 测试 createTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setCreateTime(null)));
// 准备参数
WarehouseOutPageReqVO reqVO = new WarehouseOutPageReqVO();
reqVO.setDocumentNo(null);
reqVO.setWarehouseOut(null);
reqVO.setStatus(null);
reqVO.setReason(null);
reqVO.setOutNum(null);
reqVO.setOutTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setFinishTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<WarehouseOutDO> pageResult = warehouseOutService.getWarehouseOutPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbWarehouseOut, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetWarehouseOutList() {
// mock 数据
WarehouseOutDO dbWarehouseOut = randomPojo(WarehouseOutDO.class, o -> { // 等会查询到
o.setDocumentNo(null);
o.setWarehouseOut(null);
o.setStatus(null);
o.setReason(null);
o.setOutNum(null);
o.setOutTime(null);
o.setFinishTime(null);
o.setCreateTime(null);
});
warehouseOutMapper.insert(dbWarehouseOut);
// 测试 documentNo 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setDocumentNo(null)));
// 测试 warehouseOut 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setWarehouseOut(null)));
// 测试 status 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setStatus(null)));
// 测试 reason 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setReason(null)));
// 测试 outNum 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setOutNum(null)));
// 测试 outTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setOutTime(null)));
// 测试 finishTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setFinishTime(null)));
// 测试 createTime 不匹配
warehouseOutMapper.insert(cloneIgnoreId(dbWarehouseOut, o -> o.setCreateTime(null)));
// 准备参数
WarehouseOutExportReqVO reqVO = new WarehouseOutExportReqVO();
reqVO.setDocumentNo(null);
reqVO.setWarehouseOut(null);
reqVO.setStatus(null);
reqVO.setReason(null);
reqVO.setOutNum(null);
reqVO.setOutTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setFinishTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<WarehouseOutDO> list = warehouseOutService.getWarehouseOutList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbWarehouseOut, list.get(0));
}
}

@ -0,0 +1,199 @@
package com.yunxi.scm.module.xxjj.service.warehousereceipt;
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.warehousereceipt.vo.*;
import com.yunxi.scm.module.xxjj.dal.dataobject.warehousereceipt.WarehouseReceiptDO;
import com.yunxi.scm.module.xxjj.dal.mysql.warehousereceipt.WarehouseReceiptMapper;
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 WarehouseReceiptServiceImpl}
*
* @author
*/
@Import(WarehouseReceiptServiceImpl.class)
public class WarehouseReceiptServiceImplTest extends BaseDbUnitTest {
@Resource
private WarehouseReceiptServiceImpl warehouseReceiptService;
@Resource
private WarehouseReceiptMapper warehouseReceiptMapper;
@Test
public void testCreateWarehouseReceipt_success() {
// 准备参数
WarehouseReceiptCreateReqVO reqVO = randomPojo(WarehouseReceiptCreateReqVO.class);
// 调用
Long warehouseReceiptId = warehouseReceiptService.createWarehouseReceipt(reqVO);
// 断言
assertNotNull(warehouseReceiptId);
// 校验记录的属性是否正确
WarehouseReceiptDO warehouseReceipt = warehouseReceiptMapper.selectById(warehouseReceiptId);
assertPojoEquals(reqVO, warehouseReceipt);
}
@Test
public void testUpdateWarehouseReceipt_success() {
// mock 数据
WarehouseReceiptDO dbWarehouseReceipt = randomPojo(WarehouseReceiptDO.class);
warehouseReceiptMapper.insert(dbWarehouseReceipt);// @Sql: 先插入出一条存在的数据
// 准备参数
WarehouseReceiptUpdateReqVO reqVO = randomPojo(WarehouseReceiptUpdateReqVO.class, o -> {
o.setId(dbWarehouseReceipt.getId()); // 设置更新的 ID
});
// 调用
warehouseReceiptService.updateWarehouseReceipt(reqVO);
// 校验是否更新正确
WarehouseReceiptDO warehouseReceipt = warehouseReceiptMapper.selectById(reqVO.getId()); // 获取最新的
assertPojoEquals(reqVO, warehouseReceipt);
}
@Test
public void testUpdateWarehouseReceipt_notExists() {
// 准备参数
WarehouseReceiptUpdateReqVO reqVO = randomPojo(WarehouseReceiptUpdateReqVO.class);
// 调用, 并断言异常
assertServiceException(() -> warehouseReceiptService.updateWarehouseReceipt(reqVO), WAREHOUSE_RECEIPT_NOT_EXISTS);
}
@Test
public void testDeleteWarehouseReceipt_success() {
// mock 数据
WarehouseReceiptDO dbWarehouseReceipt = randomPojo(WarehouseReceiptDO.class);
warehouseReceiptMapper.insert(dbWarehouseReceipt);// @Sql: 先插入出一条存在的数据
// 准备参数
Long id = dbWarehouseReceipt.getId();
// 调用
warehouseReceiptService.deleteWarehouseReceipt(id);
// 校验数据不存在了
assertNull(warehouseReceiptMapper.selectById(id));
}
@Test
public void testDeleteWarehouseReceipt_notExists() {
// 准备参数
Long id = randomLongId();
// 调用, 并断言异常
assertServiceException(() -> warehouseReceiptService.deleteWarehouseReceipt(id), WAREHOUSE_RECEIPT_NOT_EXISTS);
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetWarehouseReceiptPage() {
// mock 数据
WarehouseReceiptDO dbWarehouseReceipt = randomPojo(WarehouseReceiptDO.class, o -> { // 等会查询到
o.setDocumentNo(null);
o.setWarehouseReceipt(null);
o.setStatus(null);
o.setType(null);
o.setReceiptNum(null);
o.setReceiptTime(null);
o.setCreateTime(null);
});
warehouseReceiptMapper.insert(dbWarehouseReceipt);
// 测试 documentNo 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setDocumentNo(null)));
// 测试 warehouseReceipt 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setWarehouseReceipt(null)));
// 测试 status 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setStatus(null)));
// 测试 type 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setType(null)));
// 测试 receiptNum 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setReceiptNum(null)));
// 测试 receiptTime 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setReceiptTime(null)));
// 测试 createTime 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setCreateTime(null)));
// 准备参数
WarehouseReceiptPageReqVO reqVO = new WarehouseReceiptPageReqVO();
reqVO.setDocumentNo(null);
reqVO.setWarehouseReceipt(null);
reqVO.setStatus(null);
reqVO.setType(null);
reqVO.setReceiptNum(null);
reqVO.setReceiptTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<WarehouseReceiptDO> pageResult = warehouseReceiptService.getWarehouseReceiptPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());
assertPojoEquals(dbWarehouseReceipt, pageResult.getList().get(0));
}
@Test
@Disabled // TODO 请修改 null 为需要的值,然后删除 @Disabled 注解
public void testGetWarehouseReceiptList() {
// mock 数据
WarehouseReceiptDO dbWarehouseReceipt = randomPojo(WarehouseReceiptDO.class, o -> { // 等会查询到
o.setDocumentNo(null);
o.setWarehouseReceipt(null);
o.setStatus(null);
o.setType(null);
o.setReceiptNum(null);
o.setReceiptTime(null);
o.setCreateTime(null);
});
warehouseReceiptMapper.insert(dbWarehouseReceipt);
// 测试 documentNo 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setDocumentNo(null)));
// 测试 warehouseReceipt 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setWarehouseReceipt(null)));
// 测试 status 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setStatus(null)));
// 测试 type 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setType(null)));
// 测试 receiptNum 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setReceiptNum(null)));
// 测试 receiptTime 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setReceiptTime(null)));
// 测试 createTime 不匹配
warehouseReceiptMapper.insert(cloneIgnoreId(dbWarehouseReceipt, o -> o.setCreateTime(null)));
// 准备参数
WarehouseReceiptExportReqVO reqVO = new WarehouseReceiptExportReqVO();
reqVO.setDocumentNo(null);
reqVO.setWarehouseReceipt(null);
reqVO.setStatus(null);
reqVO.setType(null);
reqVO.setReceiptNum(null);
reqVO.setReceiptTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
List<WarehouseReceiptDO> list = warehouseReceiptService.getWarehouseReceiptList(reqVO);
// 断言
assertEquals(1, list.size());
assertPojoEquals(dbWarehouseReceipt, list.get(0));
}
}

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 创建领料单
export function createWarehouseOut(data) {
return request({
url: '/xxjj/warehouse-out/create',
method: 'post',
data: data
})
}
// 更新领料单
export function updateWarehouseOut(data) {
return request({
url: '/xxjj/warehouse-out/update',
method: 'put',
data: data
})
}
// 删除领料单
export function deleteWarehouseOut(id) {
return request({
url: '/xxjj/warehouse-out/delete?id=' + id,
method: 'delete'
})
}
// 获得领料单
export function getWarehouseOut(id) {
return request({
url: '/xxjj/warehouse-out/get?id=' + id,
method: 'get'
})
}
// 获得领料单分页
export function getWarehouseOutPage(query) {
return request({
url: '/xxjj/warehouse-out/page',
method: 'get',
params: query
})
}
// 导出领料单 Excel
export function exportWarehouseOutExcel(query) {
return request({
url: '/xxjj/warehouse-out/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,54 @@
import request from '@/utils/request'
// 创建入库单
export function createWarehouseReceipt(data) {
return request({
url: '/xxjj/warehouse-receipt/create',
method: 'post',
data: data
})
}
// 更新入库单
export function updateWarehouseReceipt(data) {
return request({
url: '/xxjj/warehouse-receipt/update',
method: 'put',
data: data
})
}
// 删除入库单
export function deleteWarehouseReceipt(id) {
return request({
url: '/xxjj/warehouse-receipt/delete?id=' + id,
method: 'delete'
})
}
// 获得入库单
export function getWarehouseReceipt(id) {
return request({
url: '/xxjj/warehouse-receipt/get?id=' + id,
method: 'get'
})
}
// 获得入库单分页
export function getWarehouseReceiptPage(query) {
return request({
url: '/xxjj/warehouse-receipt/page',
method: 'get',
params: query
})
}
// 导出入库单 Excel
export function exportWarehouseReceiptExcel(query) {
return request({
url: '/xxjj/warehouse-receipt/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

@ -0,0 +1,457 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="单据编号" prop="documentNo">
<el-input
v-model="queryParams.documentNo"
placeholder="请输入单据编号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="领料仓库id" prop="warehouseOut">
<el-input
v-model="queryParams.warehouseOut"
placeholder="请输入领料仓库id"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="请选择单据状态"
clearable
size="small"
>
<el-option
v-for="dict in this.getDictDatas(DICT_TYPE.WAREHOUSE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="领料原因" prop="reason">
<el-input
v-model="queryParams.reason"
placeholder="请输入领料原因"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="领料数量" prop="outNum">
<el-input
v-model="queryParams.outNum"
placeholder="请输入领料数量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="领料时间" prop="outTime">
<el-date-picker
v-model="queryParams.outTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
/>
</el-form-item>
<el-form-item label="完成时间" prop="finishTime">
<el-date-picker
v-model="queryParams.finishTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
style="width: 240px"
value-format="yyyy-MM-dd HH:mm:ss"
type="daterange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="['00:00:00', '23:59:59']"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['xxjj:warehouse-out:create']"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['xxjj:warehouse-out:export']"
>导出</el-button
>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="单据编号" align="center" prop="documentNo" />
<el-table-column label="领料仓库id" align="center" prop="warehouseOut" />
<el-table-column label="单据状态" align="center" prop="status">
<template v-slot="scope">
<dict-tag
:type="DICT_TYPE.WAREHOUSE_TYPE"
:value="scope.row.status"
/>
</template>
</el-table-column>
<el-table-column label="领料原因" align="center" prop="reason" />
<el-table-column label="领料数量" align="center" prop="outNum" />
<el-table-column
label="领料时间"
align="center"
prop="outTime"
width="180"
>
<template v-slot="scope">
<span>{{ parseTime(scope.row.outTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="完成时间"
align="center"
prop="finishTime"
width="180"
>
<template v-slot="scope">
<span>{{ parseTime(scope.row.finishTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template v-slot="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:warehouse-out:update']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['xxjj:warehouse-out:delete']"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 对话框(添加 / 修改) -->
<el-dialog
:title="title"
:visible.sync="open"
width="500px"
v-dialogDrag
append-to-body
>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="单据编号" prop="documentNo">
<el-input v-model="form.documentNo" placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="领料仓库id" prop="warehouseOut">
<el-input
v-model="form.warehouseOut"
placeholder="请输入领料仓库id"
/>
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="dict in this.getDictDatas(DICT_TYPE.WAREHOUSE_TYPE)"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}</el-radio
>
</el-radio-group>
</el-form-item>
<el-form-item label="领料原因" prop="reason">
<el-input v-model="form.reason" placeholder="请输入领料原因" />
</el-form-item>
<el-form-item label="领料数量" prop="outNum">
<el-input v-model="form.outNum" placeholder="请输入领料数量" />
</el-form-item>
<el-form-item label="领料时间" prop="outTime">
<el-date-picker
clearable
v-model="form.outTime"
type="date"
value-format="timestamp"
placeholder="选择领料时间"
/>
</el-form-item>
<el-form-item label="完成时间" prop="finishTime">
<el-date-picker
clearable
v-model="form.finishTime"
type="date"
value-format="timestamp"
placeholder="选择完成时间"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
createWarehouseOut,
updateWarehouseOut,
deleteWarehouseOut,
getWarehouseOut,
getWarehouseOutPage,
exportWarehouseOutExcel,
} from "@/api/xxjj/warehouseOut";
export default {
name: "WarehouseOut",
components: {},
data() {
return {
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
documentNo: null,
warehouseOut: null,
status: null,
reason: null,
outNum: null,
outTime: [],
finishTime: [],
createTime: [],
},
//
form: {},
//
rules: {
documentNo: [
{ required: true, message: "单据编号不能为空", trigger: "blur" },
],
warehouseOut: [
{ required: true, message: "领料仓库id不能为空", trigger: "blur" },
],
status: [
{ required: true, message: "单据状态不能为空", trigger: "blur" },
],
outNum: [
{ required: true, message: "领料数量不能为空", trigger: "blur" },
],
outTime: [
{ required: true, message: "领料时间不能为空", trigger: "blur" },
],
finishTime: [
{ required: true, message: "完成时间不能为空", trigger: "blur" },
],
},
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
//
getWarehouseOutPage(this.queryParams).then((response) => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
documentNo: undefined,
warehouseOut: undefined,
status: undefined,
reason: undefined,
outNum: undefined,
outTime: undefined,
finishTime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加领料单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWarehouseOut(id).then((response) => {
this.form = response.data;
this.open = true;
this.title = "修改领料单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate((valid) => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateWarehouseOut(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createWarehouseOut(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除领料单编号为"' + id + '"的数据项?')
.then(function () {
return deleteWarehouseOut(id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = { ...this.queryParams };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal
.confirm("是否确认导出所有领料单数据项?")
.then(() => {
this.exportLoading = true;
return exportWarehouseOutExcel(params);
})
.then((response) => {
this.$download.excel(response, "领料单.xls");
this.exportLoading = false;
})
.catch(() => {});
},
},
};
</script>

@ -0,0 +1,284 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="单据编号" prop="documentNo">
<el-input v-model="queryParams.documentNo" placeholder="请输入单据编号" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="入库仓库id" prop="warehouseReceipt">
<el-input v-model="queryParams.warehouseReceipt" placeholder="请输入入库仓库id" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择单据状态" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WAREHOUSE_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="单据类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择单据类型" clearable size="small">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BUSINESS_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value"/>
</el-select>
</el-form-item>
<el-form-item label="入库数量" prop="receiptNum">
<el-input v-model="queryParams.receiptNum" placeholder="请输入入库数量" clearable @keyup.enter.native="handleQuery"/>
</el-form-item>
<el-form-item label="入库时间" prop="receiptTime">
<el-date-picker v-model="queryParams.receiptTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery"></el-button>
<el-button icon="el-icon-refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<!-- 操作工具栏 -->
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['xxjj:warehouse-receipt:create']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
v-hasPermi="['xxjj:warehouse-receipt:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<!-- 列表 -->
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="单据编号" align="center" prop="documentNo" />
<el-table-column label="入库仓库id" align="center" prop="warehouseReceipt" />
<el-table-column label="单据状态" align="center" prop="status">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.WAREHOUSE_TYPE" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="单据类型" align="center" prop="type">
<template v-slot="scope">
<dict-tag :type="DICT_TYPE.BUSINESS_TYPE" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="入库数量" align="center" prop="receiptNum" />
<el-table-column label="入库时间" align="center" prop="receiptTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.receiptTime) }}</span>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template v-slot="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template v-slot="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
v-hasPermi="['xxjj:warehouse-receipt:update']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
v-hasPermi="['xxjj:warehouse-receipt:delete']">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<!-- 对话框(添加 / 修改) -->
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="单据编号" prop="documentNo">
<el-input v-model="form.documentNo" placeholder="请输入单据编号" />
</el-form-item>
<el-form-item label="入库仓库id" prop="warehouseReceipt">
<el-input v-model="form.warehouseReceipt" placeholder="请输入入库仓库id" />
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-select v-model="form.status" placeholder="请选择单据状态">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.WAREHOUSE_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="单据类型" prop="type">
<el-select v-model="form.type" placeholder="请选择单据类型">
<el-option v-for="dict in this.getDictDatas(DICT_TYPE.BUSINESS_TYPE)"
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="入库数量" prop="receiptNum">
<el-input v-model="form.receiptNum" placeholder="请输入入库数量" />
</el-form-item>
<el-form-item label="入库时间" prop="receiptTime">
<el-date-picker clearable v-model="form.receiptTime" type="date" value-format="timestamp" placeholder="选择入库时间" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { createWarehouseReceipt, updateWarehouseReceipt, deleteWarehouseReceipt, getWarehouseReceipt, getWarehouseReceiptPage, exportWarehouseReceiptExcel } from "@/api/xxjj/warehouseReceipt";
export default {
name: "WarehouseReceipt",
components: {
},
data() {
return {
//
loading: true,
//
exportLoading: false,
//
showSearch: true,
//
total: 0,
//
list: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNo: 1,
pageSize: 10,
documentNo: null,
warehouseReceipt: null,
status: null,
type: null,
receiptNum: null,
receiptTime: [],
createTime: [],
},
//
form: {},
//
rules: {
documentNo: [{ required: true, message: "单据编号不能为空", trigger: "blur" }],
warehouseReceipt: [{ required: true, message: "入库仓库id不能为空", trigger: "blur" }],
status: [{ required: true, message: "单据状态不能为空", trigger: "change" }],
type: [{ required: true, message: "单据类型不能为空", trigger: "change" }],
receiptNum: [{ required: true, message: "入库数量不能为空", trigger: "blur" }],
receiptTime: [{ required: true, message: "入库时间不能为空", trigger: "blur" }],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询列表 */
getList() {
this.loading = true;
//
getWarehouseReceiptPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
id: undefined,
documentNo: undefined,
warehouseReceipt: undefined,
status: undefined,
type: undefined,
receiptNum: undefined,
receiptTime: undefined,
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加入库单";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id;
getWarehouseReceipt(id).then(response => {
this.form = response.data;
this.open = true;
this.title = "修改入库单";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (!valid) {
return;
}
//
if (this.form.id != null) {
updateWarehouseReceipt(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
return;
}
//
createWarehouseReceipt(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除入库单编号为"' + id + '"的数据项?').then(function() {
return deleteWarehouseReceipt(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = {...this.queryParams};
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有入库单数据项?').then(() => {
this.exportLoading = true;
return exportWarehouseReceiptExcel(params);
}).then(response => {
this.$download.excel(response, '入库单.xls');
this.exportLoading = false;
}).catch(() => {});
}
}
};
</script>
Loading…
Cancel
Save