From 1884ead27aeed443969d932461b8ce7e704783fb Mon Sep 17 00:00:00 2001 From: zxy Date: Fri, 22 May 2026 11:35:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(biz):=20=E6=9B=B4=E6=96=B0=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=85=A5=E5=BA=93=E5=87=BA=E5=BA=93=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=96=B0=E5=A2=9E=E5=8E=9F=E6=9D=90?= =?UTF-8?q?=E6=96=99=E5=85=A5=E5=BA=93=E5=87=BA=E5=BA=93=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RawStorageLogController.java | 94 ++++++++++ .../vo/RawStorageLogPageReqVO.java | 123 +++++++++++++ .../rawstoragelog/vo/RawStorageLogRespVO.java | 153 +++++++++++++++++ .../vo/RawStorageLogSaveReqVO.java | 118 +++++++++++++ .../prostoragelog/ProStorageLogDO.java | 53 ++++-- .../rawstoragelog/RawStorageLogDO.java | 161 ++++++++++++++++++ .../prostoragelog/ProStorageLogMapper.java | 12 +- .../rawstoragelog/RawStorageLogMapper.java | 63 +++++++ .../prostoragelog/ProStorageLogService.java | 2 + .../ProStorageLogServiceImpl.java | 18 ++ .../purreceipt/PurReceiptServiceImpl.java | 19 +++ .../rawstoragelog/RawStorageLogService.java | 57 +++++++ .../RawStorageLogServiceImpl.java | 88 ++++++++++ .../saledelivery/SaleDeliveryServiceImpl.java | 142 +++++++++------ .../src/types/auto-components.d.ts | 43 ++--- .../src/types/auto-imports.d.ts | 2 - 16 files changed, 1050 insertions(+), 98 deletions(-) create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/RawStorageLogController.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogPageReqVO.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogRespVO.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogSaveReqVO.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/rawstoragelog/RawStorageLogDO.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/rawstoragelog/RawStorageLogMapper.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogService.java create mode 100644 mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogServiceImpl.java diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/RawStorageLogController.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/RawStorageLogController.java new file mode 100644 index 0000000..dea9eeb --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/RawStorageLogController.java @@ -0,0 +1,94 @@ +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; +import com.ningxia.yunxi.chemmes.framework.excel.core.util.ExcelUtils; +import com.ningxia.yunxi.chemmes.framework.operatelog.core.annotations.OperateLog; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogPageReqVO; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogRespVO; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogSaveReqVO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO; +import com.ningxia.yunxi.chemmes.module.biz.service.rawstoragelog.RawStorageLogService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static com.ningxia.yunxi.chemmes.framework.common.pojo.CommonResult.success; +import static com.ningxia.yunxi.chemmes.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; + + +@Tag(name = "管理后台 - 入/出库日志") +@RestController +@RequestMapping("/twm/raw-storage-log") +@Validated +public class RawStorageLogController { + + @Resource + private RawStorageLogService rawStorageLogService; + + @PostMapping("/create") + @Operation(summary = "创建入/出库日志") + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:create')") + public CommonResult createRawStorageLog(@Valid @RequestBody RawStorageLogSaveReqVO createReqVO) { + return success(rawStorageLogService.createRawStorageLog(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新入/出库日志") + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:update')") + public CommonResult updateRawStorageLog(@Valid @RequestBody RawStorageLogSaveReqVO updateReqVO) { + rawStorageLogService.updateRawStorageLog(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除入/出库日志") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:delete')") + public CommonResult deleteRawStorageLog(@RequestParam("id") Integer id) { + rawStorageLogService.deleteRawStorageLog(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得入/出库日志") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:query')") + public CommonResult getRawStorageLog(@RequestParam("id") Integer id) { + RawStorageLogDO rawStorageLog = rawStorageLogService.getRawStorageLog(id); + return success(BeanUtils.toBean(rawStorageLog, RawStorageLogRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得入/出库日志分页") + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:query')") + public CommonResult> getRawStorageLogPage(@Valid RawStorageLogPageReqVO pageReqVO) { + PageResult pageResult = rawStorageLogService.getRawStorageLogPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RawStorageLogRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出入/出库日志 Excel") + @PreAuthorize("@ss.hasPermission('twm:raw-storage-log:export')") + @OperateLog(type = EXPORT) + public void exportRawStorageLogExcel(@Valid RawStorageLogPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = rawStorageLogService.getRawStorageLogPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "入/出库日志.xls", "数据", RawStorageLogRespVO.class, + BeanUtils.toBean(list, RawStorageLogRespVO.class)); + } + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogPageReqVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogPageReqVO.java new file mode 100644 index 0000000..f158264 --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogPageReqVO.java @@ -0,0 +1,123 @@ +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +import static com.ningxia.yunxi.chemmes.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 RawStorageLogPageReqVO extends PageParam { + + @Schema(description = "入/出库Id", example = "25543") + private Integer stockId; + + @Schema(description = "备注", example = "随便") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "1") + private Boolean status; + + @Schema(description = "仓储id", example = "29167") + private Integer storeHouseId; + + @Schema(description = "库区id", example = "22342") + private Integer storeAreaId; + + @Schema(description = "仓储编码") + private String storeHouseCd; + + @Schema(description = "仓储名称", example = "张三") + private String storeHouseName; + + @Schema(description = "库区编码") + private String storeAreCd; + + @Schema(description = "库区名称", example = "张三") + private String storeAreaName; + + @Schema(description = "物料id", example = "1835") + private Integer materialId; + + @Schema(description = "物料名称", example = "芋艿") + private String matName; + + @Schema(description = "物料编码") + private String matCode; + + @Schema(description = "规格型号") + private String spec; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "批次号") + private String lotNo; + + @Schema(description = "操作数量") + private BigDecimal operatorQty; + + @Schema(description = "单据类型 1为入库,2为出库", example = "1") + private Boolean operatorType; + + @Schema(description = "业务类型 (10 采购入库,11 盘盈入库,12 其它入库 21 生产领料 22 盘亏出库 23采购退料)", example = "1") + private Integer businessType; + + @Schema(description = "盘点数量") + private BigDecimal storageAft; + + @Schema(description = "盘点前数量") + private BigDecimal storageBef; + + @Schema(description = "入/出库子表Id", example = "21687") + private Integer stockItemId; + + @Schema(description = "入出库单号") + private String dpstNo; + + @Schema(description = "供应商编码") + private String supplierNo; + + @Schema(description = "供应商名称", example = "李四") + private String supplierName; + + @Schema(description = "供应商id", example = "31354") + private Integer supplierId; + + @Schema(description = "采购数量") + private BigDecimal purQty; + + @Schema(description = "业务日期") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDate[] billDate; + + @Schema(description = "操作人id", example = "16781") + private Integer operatorId; + + @Schema(description = "操作人", example = "芋艿") + private String operatorName; + + @Schema(description = "关联单号") + private String relarionNo; + + @Schema(description = "关联单号id", example = "21271") + private Integer relarionId; + + @Schema(description = "关联子单号id", example = "25577") + private Integer relarionDetailId; + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogRespVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogRespVO.java new file mode 100644 index 0000000..625bcbd --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogRespVO.java @@ -0,0 +1,153 @@ +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 入/出库日志 Response VO") +@Data +@ExcelIgnoreUnannotated +public class RawStorageLogRespVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30554") + @ExcelProperty("主键id") + private Integer id; + + @Schema(description = "入/出库Id", example = "25543") + @ExcelProperty("入/出库Id") + private Integer stockId; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "1") + @ExcelProperty("状态:1为保存;2为提交;3为作废") + private Boolean status; + + @Schema(description = "仓储id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29167") + @ExcelProperty("仓储id") + private Integer storeHouseId; + + @Schema(description = "库区id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342") + @ExcelProperty("库区id") + private Integer storeAreaId; + + @Schema(description = "仓储编码") + @ExcelProperty("仓储编码") + private String storeHouseCd; + + @Schema(description = "仓储名称", example = "张三") + @ExcelProperty("仓储名称") + private String storeHouseName; + + @Schema(description = "库区编码") + @ExcelProperty("库区编码") + private String storeAreCd; + + @Schema(description = "库区名称", example = "张三") + @ExcelProperty("库区名称") + private String storeAreaName; + + @Schema(description = "物料id", example = "1835") + @ExcelProperty("物料id") + private Integer materialId; + + @Schema(description = "物料名称", example = "芋艿") + @ExcelProperty("物料名称") + private String matName; + + @Schema(description = "物料编码") + @ExcelProperty("物料编码") + private String matCode; + + @Schema(description = "规格型号") + @ExcelProperty("规格型号") + private String spec; + + @Schema(description = "单位") + @ExcelProperty("单位") + private String unit; + + @Schema(description = "批次号") + @ExcelProperty("批次号") + private String lotNo; + + @Schema(description = "操作数量") + @ExcelProperty("操作数量") + private BigDecimal operatorQty; + + @Schema(description = "单据类型 1为入库,2为出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("单据类型 1为入库,2为出库") + private Boolean operatorType; + + @Schema(description = "业务类型 (10 采购入库,11 盘盈入库,12 其它入库 21 生产领料 22 盘亏出库 23采购退料)", example = "1") + @ExcelProperty("业务类型 (10 采购入库,11 盘盈入库,12 其它入库 21 生产领料 22 盘亏出库 23采购退料)") + private Integer businessType; + + @Schema(description = "盘点数量") + @ExcelProperty("盘点数量") + private BigDecimal storageAft; + + @Schema(description = "盘点前数量") + @ExcelProperty("盘点前数量") + private BigDecimal storageBef; + + @Schema(description = "入/出库子表Id", example = "21687") + @ExcelProperty("入/出库子表Id") + private Integer stockItemId; + + @Schema(description = "入出库单号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("入出库单号") + private String dpstNo; + + @Schema(description = "供应商编码") + @ExcelProperty("供应商编码") + private String supplierNo; + + @Schema(description = "供应商名称", example = "李四") + @ExcelProperty("供应商名称") + private String supplierName; + + @Schema(description = "供应商id", example = "31354") + @ExcelProperty("供应商id") + private Integer supplierId; + + @Schema(description = "采购数量") + @ExcelProperty("采购数量") + private BigDecimal purQty; + + @Schema(description = "业务日期") + @ExcelProperty("业务日期") + private LocalDate billDate; + + @Schema(description = "操作人id", example = "16781") + @ExcelProperty("操作人id") + private Integer operatorId; + + @Schema(description = "操作人", example = "芋艿") + @ExcelProperty("操作人") + private String operatorName; + + @Schema(description = "关联单号") + @ExcelProperty("关联单号") + private String relarionNo; + + @Schema(description = "关联单号id", example = "21271") + @ExcelProperty("关联单号id") + private Integer relarionId; + + @Schema(description = "关联子单号id", example = "25577") + @ExcelProperty("关联子单号id") + private Integer relarionDetailId; + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogSaveReqVO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogSaveReqVO.java new file mode 100644 index 0000000..64548a2 --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/controller/admin/rawstoragelog/vo/RawStorageLogSaveReqVO.java @@ -0,0 +1,118 @@ +package com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; +import java.time.LocalDate; + +@Schema(description = "管理后台 - 入/出库日志新增/修改 Request VO") +@Data +public class RawStorageLogSaveReqVO { + + @Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "30554") + private Integer id; + + @Schema(description = "入/出库Id", example = "25543") + private Integer stockId; + + @Schema(description = "备注", example = "随便") + private String description; + + @Schema(description = "状态:1为保存;2为提交;3为作废", example = "1") + private Boolean status; + + @Schema(description = "仓储id", requiredMode = Schema.RequiredMode.REQUIRED, example = "29167") + @NotNull(message = "仓储id不能为空") + private Integer storeHouseId; + + @Schema(description = "库区id", requiredMode = Schema.RequiredMode.REQUIRED, example = "22342") + @NotNull(message = "库区id不能为空") + private Integer storeAreaId; + + @Schema(description = "仓储编码") + private String storeHouseCd; + + @Schema(description = "仓储名称", example = "张三") + private String storeHouseName; + + @Schema(description = "库区编码") + private String storeAreCd; + + @Schema(description = "库区名称", example = "张三") + private String storeAreaName; + + @Schema(description = "物料id", example = "1835") + private Integer materialId; + + @Schema(description = "物料名称", example = "芋艿") + private String matName; + + @Schema(description = "物料编码") + private String matCode; + + @Schema(description = "规格型号") + private String spec; + + @Schema(description = "单位") + private String unit; + + @Schema(description = "批次号") + private String lotNo; + + @Schema(description = "操作数量") + private BigDecimal operatorQty; + + @Schema(description = "单据类型 1为入库,2为出库", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "单据类型 1为入库,2为出库不能为空") + private Boolean operatorType; + + @Schema(description = "业务类型 (10 采购入库,11 盘盈入库,12 其它入库 21 生产领料 22 盘亏出库 23采购退料)", example = "1") + private Integer businessType; + + @Schema(description = "盘点数量") + private BigDecimal storageAft; + + @Schema(description = "盘点前数量") + private BigDecimal storageBef; + + @Schema(description = "入/出库子表Id", example = "21687") + private Integer stockItemId; + + @Schema(description = "入出库单号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "入出库单号不能为空") + private String dpstNo; + + @Schema(description = "供应商编码") + private String supplierNo; + + @Schema(description = "供应商名称", example = "李四") + private String supplierName; + + @Schema(description = "供应商id", example = "31354") + private Integer supplierId; + + @Schema(description = "采购数量") + private BigDecimal purQty; + + @Schema(description = "业务日期") + private LocalDate billDate; + + @Schema(description = "操作人id", example = "16781") + private Integer operatorId; + + @Schema(description = "操作人", example = "芋艿") + private String operatorName; + + @Schema(description = "关联单号") + private String relarionNo; + + @Schema(description = "关联单号id", example = "21271") + private Integer relarionId; + + @Schema(description = "关联子单号id", example = "25577") + private Integer relarionDetailId; + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/prostoragelog/ProStorageLogDO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/prostoragelog/ProStorageLogDO.java index 8273491..338f6c1 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/prostoragelog/ProStorageLogDO.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/prostoragelog/ProStorageLogDO.java @@ -1,14 +1,13 @@ package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostoragelog; -import lombok.*; -import java.util.*; -import java.time.LocalDateTime; -import java.time.LocalDateTime; -import java.math.BigDecimal; -import java.math.BigDecimal; -import java.math.BigDecimal; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDate; /** * 成品入/出库日志 DO @@ -16,7 +15,7 @@ import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; * @author 管理员 */ @TableName("twm_pro_storage_log") -@KeySequence("twm_pro_storage_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@KeySequence("twm_pro_storage_log_seq") @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @@ -41,7 +40,7 @@ public class ProStorageLogDO extends BaseDO { /** * 状态:1为保存;2为提交;3为作废 */ - private Boolean status; + private String status; /** * 仓储id */ @@ -97,11 +96,11 @@ public class ProStorageLogDO extends BaseDO { /** * 单据类型 1为入库,2为出库 */ - private Boolean inOutType; + private String operatorType; /** - * 单据类型 (10 生产入库,11 盘盈入库,12 其它入库 21 成品入库 22 盘亏出库 23生产退库) + * 单据类型 (10 成品入库,11 盘盈入库,12 其它入库 21 成品出库 22 盘亏出库 23生产退库) */ - private Integer billType; + private String businessType; /** * 盘点数量 */ @@ -114,5 +113,33 @@ public class ProStorageLogDO extends BaseDO { * 入/出库子表Id */ private Integer stockItemId; + /** + * 业务日期 + */ + private LocalDate billDate; + /** + * 操作人id + */ + private String operatorId; + /** + * 操作人 + */ + private String operatorName; + /** + * 关联单号 + */ + private String relarionNo; + /** + * 关联单号id + */ + private Integer relarionId; + /** + * 关联子单号id + */ + private Integer relarionDetailId; + /** + * 入出库单号 + */ + private String dpstNo; } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/rawstoragelog/RawStorageLogDO.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/rawstoragelog/RawStorageLogDO.java new file mode 100644 index 0000000..7e395ad --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/dataobject/rawstoragelog/RawStorageLogDO.java @@ -0,0 +1,161 @@ +package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog; + +import com.baomidou.mybatisplus.annotation.KeySequence; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.dataobject.BaseDO; +import lombok.*; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * 入/出库日志 DO + * + * @author 管理员 + */ +@TableName("twm_raw_storage_log") +@KeySequence("twm_raw_storage_log_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RawStorageLogDO extends BaseDO { + + /** + * 主键id + */ + @TableId + private Integer id; + /** + * 入/出库Id + */ + private Integer stockId; + /** + * 备注 + */ + private String description; + /** + * 状态:1为保存;2为提交;3为作废 + */ + private Boolean status; + /** + * 仓储id + */ + private Integer storeHouseId; + /** + * 库区id + */ + private Integer storeAreaId; + /** + * 仓储编码 + */ + private String storeHouseCd; + /** + * 仓储名称 + */ + private String storeHouseName; + /** + * 库区编码 + */ + private String storeAreCd; + /** + * 库区名称 + */ + private String storeAreaName; + /** + * 物料id + */ + private Integer materialId; + /** + * 物料名称 + */ + private String matName; + /** + * 物料编码 + */ + private String matCode; + /** + * 规格型号 + */ + private String spec; + /** + * 单位 + */ + private String unit; + /** + * 批次号 + */ + private String lotNo; + /** + * 操作数量 + */ + private BigDecimal operatorQty; + /** + * 单据类型 1为入库,2为出库 + */ + private String operatorType; + /** + * 业务类型 (10 采购入库,11 盘盈入库,12 其它入库 21 生产领料 22 盘亏出库 23采购退料) + */ + private String businessType; + /** + * 盘点数量 + */ + private BigDecimal storageAft; + /** + * 盘点前数量 + */ + private BigDecimal storageBef; + /** + * 入/出库子表Id + */ + private Integer stockItemId; + /** + * 入出库单号 + */ + private String dpstNo; + /** + * 供应商编码 + */ + private String supplierNo; + /** + * 供应商名称 + */ + private String supplierName; + /** + * 供应商id + */ + private Integer supplierId; + /** + * 采购数量 + */ + private BigDecimal purQty; + /** + * 业务日期 + */ + private LocalDate billDate; + /** + * 操作人id + */ + private Integer operatorId; + /** + * 操作人 + */ + private String operatorName; + /** + * 关联单号 + */ + private String relarionNo; + /** + * 关联单号id + */ + private Integer relarionId; + /** + * 关联子单号id + */ + private Integer relarionDetailId; + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/prostoragelog/ProStorageLogMapper.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/prostoragelog/ProStorageLogMapper.java index 4b09b63..dfee830 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/prostoragelog/ProStorageLogMapper.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/prostoragelog/ProStorageLogMapper.java @@ -34,12 +34,20 @@ public interface ProStorageLogMapper extends BaseMapperX { .eqIfPresent(ProStorageLogDO::getUnit, reqVO.getUnit()) .eqIfPresent(ProStorageLogDO::getLotNo, reqVO.getLotNo()) .eqIfPresent(ProStorageLogDO::getOperatorQty, reqVO.getOperatorQty()) - .eqIfPresent(ProStorageLogDO::getInOutType, reqVO.getInOutType()) - .eqIfPresent(ProStorageLogDO::getBillType, reqVO.getBillType()) + .eqIfPresent(ProStorageLogDO::getOperatorType, reqVO.getInOutType()) + .eqIfPresent(ProStorageLogDO::getBusinessType, reqVO.getBillType()) .eqIfPresent(ProStorageLogDO::getStorageAft, reqVO.getStorageAft()) .eqIfPresent(ProStorageLogDO::getStorageBef, reqVO.getStorageBef()) .eqIfPresent(ProStorageLogDO::getStockItemId, reqVO.getStockItemId()) .orderByDesc(ProStorageLogDO::getId)); } + default String selectMaxPurReceiptNo(String operatorType) { + ProStorageLogDO proStorageLog = selectOne(new LambdaQueryWrapperX() + .eq(ProStorageLogDO::getOperatorType, operatorType) + .orderByDesc(ProStorageLogDO::getDpstNo) + .last("LIMIT 1")); + return proStorageLog != null ? proStorageLog.getDpstNo() : null; + } + } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/rawstoragelog/RawStorageLogMapper.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/rawstoragelog/RawStorageLogMapper.java new file mode 100644 index 0000000..300dba1 --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/dal/mysql/rawstoragelog/RawStorageLogMapper.java @@ -0,0 +1,63 @@ +package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.rawstoragelog; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX; +import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogPageReqVO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO; +import org.apache.ibatis.annotations.Mapper; + +/** + * 入/出库日志 Mapper + * + * @author 管理员 + */ +@Mapper +public interface RawStorageLogMapper extends BaseMapperX { + + default PageResult selectPage(RawStorageLogPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(RawStorageLogDO::getStockId, reqVO.getStockId()) + .eqIfPresent(RawStorageLogDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(RawStorageLogDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(RawStorageLogDO::getStatus, reqVO.getStatus()) + .eqIfPresent(RawStorageLogDO::getStoreHouseId, reqVO.getStoreHouseId()) + .eqIfPresent(RawStorageLogDO::getStoreAreaId, reqVO.getStoreAreaId()) + .eqIfPresent(RawStorageLogDO::getStoreHouseCd, reqVO.getStoreHouseCd()) + .likeIfPresent(RawStorageLogDO::getStoreHouseName, reqVO.getStoreHouseName()) + .eqIfPresent(RawStorageLogDO::getStoreAreCd, reqVO.getStoreAreCd()) + .likeIfPresent(RawStorageLogDO::getStoreAreaName, reqVO.getStoreAreaName()) + .eqIfPresent(RawStorageLogDO::getMaterialId, reqVO.getMaterialId()) + .likeIfPresent(RawStorageLogDO::getMatName, reqVO.getMatName()) + .eqIfPresent(RawStorageLogDO::getMatCode, reqVO.getMatCode()) + .eqIfPresent(RawStorageLogDO::getSpec, reqVO.getSpec()) + .eqIfPresent(RawStorageLogDO::getUnit, reqVO.getUnit()) + .eqIfPresent(RawStorageLogDO::getLotNo, reqVO.getLotNo()) + .eqIfPresent(RawStorageLogDO::getOperatorQty, reqVO.getOperatorQty()) + .eqIfPresent(RawStorageLogDO::getOperatorType, reqVO.getOperatorType()) + .eqIfPresent(RawStorageLogDO::getBusinessType, reqVO.getBusinessType()) + .eqIfPresent(RawStorageLogDO::getStorageAft, reqVO.getStorageAft()) + .eqIfPresent(RawStorageLogDO::getStorageBef, reqVO.getStorageBef()) + .eqIfPresent(RawStorageLogDO::getStockItemId, reqVO.getStockItemId()) + .eqIfPresent(RawStorageLogDO::getDpstNo, reqVO.getDpstNo()) + .eqIfPresent(RawStorageLogDO::getSupplierNo, reqVO.getSupplierNo()) + .likeIfPresent(RawStorageLogDO::getSupplierName, reqVO.getSupplierName()) + .eqIfPresent(RawStorageLogDO::getSupplierId, reqVO.getSupplierId()) + .eqIfPresent(RawStorageLogDO::getPurQty, reqVO.getPurQty()) +// .betweenIfPresent(RawStorageLogDO::getBillDate, reqVO.getBillDate()) + .eqIfPresent(RawStorageLogDO::getOperatorId, reqVO.getOperatorId()) + .likeIfPresent(RawStorageLogDO::getOperatorName, reqVO.getOperatorName()) + .eqIfPresent(RawStorageLogDO::getRelarionNo, reqVO.getRelarionNo()) + .eqIfPresent(RawStorageLogDO::getRelarionId, reqVO.getRelarionId()) + .eqIfPresent(RawStorageLogDO::getRelarionDetailId, reqVO.getRelarionDetailId()) + .orderByDesc(RawStorageLogDO::getId)); + } + + default String selectMaxNo(String operatorType) { + RawStorageLogDO logDO = selectOne(new LambdaQueryWrapperX() + .eq(RawStorageLogDO::getOperatorType, operatorType) + .orderByDesc(RawStorageLogDO::getDpstNo) + .last("LIMIT 1")); + return logDO != null ? logDO.getDpstNo() : null; + } +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogService.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogService.java index 7ebfbe3..f0f0e06 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogService.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogService.java @@ -52,4 +52,6 @@ public interface ProStorageLogService { */ PageResult getProStorageLogPage(ProStorageLogPageReqVO pageReqVO); + void saveProStorageLog(ProStorageLogDO saveReqVO); + } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogServiceImpl.java index b541b0b..232c182 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/prostoragelog/ProStorageLogServiceImpl.java @@ -1,6 +1,7 @@ package com.ningxia.yunxi.chemmes.module.biz.service.prostoragelog; import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.util.CodeGenerateUtils; import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; import com.ningxia.yunxi.chemmes.module.biz.controller.admin.prostoragelog.vo.ProStorageLogPageReqVO; import com.ningxia.yunxi.chemmes.module.biz.controller.admin.prostoragelog.vo.ProStorageLogSaveReqVO; @@ -67,4 +68,21 @@ public class ProStorageLogServiceImpl implements ProStorageLogService { return proStorageLogMapper.selectPage(pageReqVO); } + @Override + public void saveProStorageLog(ProStorageLogDO saveReqVO) { + String orderNumber = generatePurReceiptNo(saveReqVO.getOperatorType()); + saveReqVO.setDpstNo(orderNumber); + proStorageLogMapper.insert(saveReqVO); + } + + + private String generatePurReceiptNo(String operatorType) { + String prefix = "RK"; + if ("2".equals(operatorType)) { + prefix = "CK"; + } + String maxPurReceiptNo = proStorageLogMapper.selectMaxPurReceiptNo(operatorType); + return CodeGenerateUtils.generateCodeWithDateSequence(prefix, "yyyyMM", 3, maxPurReceiptNo); + } + } diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purreceipt/PurReceiptServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purreceipt/PurReceiptServiceImpl.java index 030a568..adc6f95 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purreceipt/PurReceiptServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/purreceipt/PurReceiptServiceImpl.java @@ -9,8 +9,10 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreceiptdetail.vo import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreceiptdetail.vo.PurReceiptDetailSaveReqVO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreceipt.PurReceiptDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreceiptdetail.PurReceiptDetailDO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO; import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreceipt.PurReceiptMapper; import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreceiptdetail.PurReceiptDetailMapper; +import com.ningxia.yunxi.chemmes.module.biz.service.rawstoragelog.RawStorageLogService; import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO; import com.ningxia.yunxi.chemmes.module.system.dal.mysql.user.AdminUserMapper; import org.springframework.stereotype.Service; @@ -43,6 +45,9 @@ public class PurReceiptServiceImpl implements PurReceiptService { @Resource private AdminUserMapper adminUserMapper; + @Resource + private RawStorageLogService rawStorageLogService; + @Override @Transactional(rollbackFor = Exception.class) @@ -70,7 +75,11 @@ public class PurReceiptServiceImpl implements PurReceiptService { // detail.setPurOrdDetailId(item.getPurOrdDetailId()); detail.setOrdQty(item.getOrdQty()); detail.setReceiptQty(item.getReceiptQty()); + detail.setId(null); purReceiptDetailMapper.insert(detail); + if ("2".equals(createReqVO.getPurStatus())) { + saveRwaStorageLog(purReceipt, detail); + } } } @@ -100,10 +109,20 @@ public class PurReceiptServiceImpl implements PurReceiptService { detail.setOrdQty(item.getOrdQty()); detail.setReceiptQty(item.getReceiptQty()); purReceiptDetailMapper.insert(detail); + if ("2".equals(updateReqVO.getPurStatus())) { + saveRwaStorageLog(updateObj, detail); + } } } } + private void saveRwaStorageLog(PurReceiptDO purReceipt, PurReceiptDetailDO item) { + RawStorageLogDO rawStorageLog = BeanUtils.toBean(item, RawStorageLogDO.class); + rawStorageLog.setRelarionId(purReceipt.getId()); + rawStorageLog.setRelarionNo(purReceipt.getPurReceiptNo()); + rawStorageLogService.saveRawStorageLog(rawStorageLog); + } + @Override @Transactional(rollbackFor = Exception.class) public void deletePurReceipt(Integer id) { diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogService.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogService.java new file mode 100644 index 0000000..6f2a137 --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogService.java @@ -0,0 +1,57 @@ +package com.ningxia.yunxi.chemmes.module.biz.service.rawstoragelog; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogPageReqVO; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogSaveReqVO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO; + +import javax.validation.Valid; + +/** + * 入/出库日志 Service 接口 + * + * @author 管理员 + */ +public interface RawStorageLogService { + + /** + * 创建入/出库日志 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createRawStorageLog(@Valid RawStorageLogSaveReqVO createReqVO); + + /** + * 更新入/出库日志 + * + * @param updateReqVO 更新信息 + */ + void updateRawStorageLog(@Valid RawStorageLogSaveReqVO updateReqVO); + + /** + * 删除入/出库日志 + * + * @param id 编号 + */ + void deleteRawStorageLog(Integer id); + + /** + * 获得入/出库日志 + * + * @param id 编号 + * @return 入/出库日志 + */ + RawStorageLogDO getRawStorageLog(Integer id); + + /** + * 获得入/出库日志分页 + * + * @param pageReqVO 分页查询 + * @return 入/出库日志分页 + */ + PageResult getRawStorageLogPage(RawStorageLogPageReqVO pageReqVO); + + void saveRawStorageLog(RawStorageLogDO rawStorageLog); + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogServiceImpl.java new file mode 100644 index 0000000..b98c6f2 --- /dev/null +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/rawstoragelog/RawStorageLogServiceImpl.java @@ -0,0 +1,88 @@ +package com.ningxia.yunxi.chemmes.module.biz.service.rawstoragelog; + +import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult; +import com.ningxia.yunxi.chemmes.framework.common.util.CodeGenerateUtils; +import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogPageReqVO; +import com.ningxia.yunxi.chemmes.module.biz.controller.admin.rawstoragelog.vo.RawStorageLogSaveReqVO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO; +import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.rawstoragelog.RawStorageLogMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; + +import javax.annotation.Resource; + +import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception; + +/** + * 入/出库日志 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class RawStorageLogServiceImpl implements RawStorageLogService { + + @Resource + private RawStorageLogMapper rawStorageLogMapper; + + @Override + public Integer createRawStorageLog(RawStorageLogSaveReqVO createReqVO) { + // 插入 + RawStorageLogDO rawStorageLog = BeanUtils.toBean(createReqVO, RawStorageLogDO.class); + rawStorageLogMapper.insert(rawStorageLog); + // 返回 + return rawStorageLog.getId(); + } + + @Override + public void updateRawStorageLog(RawStorageLogSaveReqVO updateReqVO) { + // 校验存在 + validateRawStorageLogExists(updateReqVO.getId()); + // 更新 + RawStorageLogDO updateObj = BeanUtils.toBean(updateReqVO, RawStorageLogDO.class); + rawStorageLogMapper.updateById(updateObj); + } + + @Override + public void deleteRawStorageLog(Integer id) { + // 校验存在 + validateRawStorageLogExists(id); + // 删除 + rawStorageLogMapper.deleteById(id); + } + + private void validateRawStorageLogExists(Integer id) { + if (rawStorageLogMapper.selectById(id) == null) { + throw exception("入/出库日志不存在`"); + } + + } + + @Override + public RawStorageLogDO getRawStorageLog(Integer id) { + return rawStorageLogMapper.selectById(id); + } + + @Override + public PageResult getRawStorageLogPage(RawStorageLogPageReqVO pageReqVO) { + return rawStorageLogMapper.selectPage(pageReqVO); + } + + @Override + public void saveRawStorageLog(RawStorageLogDO rawStorageLog) { + // 生成订单号 + rawStorageLog.setDpstNo(generateOrderNo(rawStorageLog.getOperatorType())); + rawStorageLogMapper.insert(rawStorageLog); + } + + private String generateOrderNo(String operatorType) { + String prefix = "RK"; + if ("2".equals(operatorType)) { + prefix = "CK"; + } + String maxPurReceiptNo = rawStorageLogMapper.selectMaxNo(operatorType); + return CodeGenerateUtils.generateCodeWithDateSequence(prefix, "yyyyMM", 3, maxPurReceiptNo); + } + +} diff --git a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/saledelivery/SaleDeliveryServiceImpl.java b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/saledelivery/SaleDeliveryServiceImpl.java index 5d1844b..7fd797c 100644 --- a/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/saledelivery/SaleDeliveryServiceImpl.java +++ b/mes-module-chemmes/mes-module-chemmes-biz/src/main/java/com/ningxia/yunxi/chemmes/module/biz/service/saledelivery/SaleDeliveryServiceImpl.java @@ -7,9 +7,8 @@ import com.ningxia.yunxi.chemmes.module.biz.controller.admin.saledelivery.vo.Sal import com.ningxia.yunxi.chemmes.module.biz.controller.admin.saledeliverydetail.vo.SaleDeliveryDetailSaveReqVO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.order.OrderDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.orderitem.OrderItemDO; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostorage.ProStorageDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostorageinventory.ProStorageInventoryDO; -import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostoragemat.ProStorageMatDO; +import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostoragelog.ProStorageLogDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.saledelivery.SaleDeliveryDO; import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.saledeliverydetail.SaleDeliveryDetailDO; import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.order.OrderMapper; @@ -20,6 +19,7 @@ import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.prostoragemat.ProStorageMa import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.saledelivery.SaleDeliveryMapper; import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.saledeliverydetail.SaleDeliveryDetailMapper; import com.ningxia.yunxi.chemmes.module.biz.service.prostorage.ProStorageService; +import com.ningxia.yunxi.chemmes.module.biz.service.prostoragelog.ProStorageLogService; import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO; import com.ningxia.yunxi.chemmes.module.system.dal.mysql.user.AdminUserMapper; import org.springframework.stereotype.Service; @@ -71,6 +71,9 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService { @Resource private ProStorageService proStorageService; + @Resource + private ProStorageLogService proStorageLogService; + @Override @Transactional(rollbackFor = Exception.class) public Integer createSaleDelivery(SaleDeliverySaveReqVO createReqVO) { @@ -230,66 +233,99 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService { if (detailList == null || detailList.isEmpty()) { throw exception("出库单明细不能为空"); } + // 存入 proStorageLogService + for (SaleDeliveryDetailDO saleDeliveryDetailDO : detailList) { - ProStorageDO proStorage = ProStorageDO.builder() - .billNo(proStorageService.generateSaleDeliveryNo()) - .operatorType(2) - .businessType(21) -// .billType("0") - .status(1) - .billDate(LocalDate.now()) - .operatorId(saleDelivery.getDeliveryEmpId()) - .operatorName(saleDelivery.getDeliveryEmpName()) - .relarionNo(saleDelivery.getSaleDeliveryNo()) - .relarionId(saleDelivery.getId()) - .sourceNo(saleDelivery.getSaleOrdNo()) - .sourceId(saleDelivery.getSaleOrdId()) - .build(); - proStorageMapper.insert(proStorage); - - for (SaleDeliveryDetailDO detail : detailList) { - ProStorageInventoryDO inventory = proStorageInventoryMapper.selectById(detail.getTwmStorageDetailId()); - if (inventory == null) { - throw exception("库存不存在:仓库[" + detail.getStoreHouseName() + "] 批次[" + detail.getLotNo() + "]"); - } - - BigDecimal deliveriedQty = detail.getDeliveriedQty() != null ? detail.getDeliveriedQty() : BigDecimal.ZERO; - if (inventory.getUseQty().compareTo(deliveriedQty) < 0) { - throw exception("库存不足:当前可用数量[" + inventory.getUseQty() + "] < 发货数量[" + deliveriedQty + "]"); - } - - inventory.setUseQty(inventory.getUseQty().subtract(deliveriedQty)); - inventory.setYardQty(inventory.getYardQty().subtract(deliveriedQty)); - inventory.setPackQty(inventory.getPackQty() - (detail.getDeliveriedBagQty())); - proStorageInventoryMapper.updateById(inventory); - ProStorageMatDO storageMat = ProStorageMatDO.builder() - .stockId(proStorage.getId().longValue()) - .storeHouseId(detail.getStoreHouseId()) - .storeAreaId(detail.getStoreAreaId()) - .storeHouseCd(detail.getStoreHouseCd()) - .storeHouseName(detail.getStoreHouseName()) - .storeAreCd(detail.getStoreAreCd()) - .storeAreaName(detail.getStoreAreaName()) + ProStorageLogDO proStorageLogDO = ProStorageLogDO.builder() + .stockId(saleDeliveryDetailDO.getId()) + .description("销售出库") + .status("2") + .storeHouseId(saleDeliveryDetailDO.getStoreHouseId()) + .storeAreaId(saleDeliveryDetailDO.getStoreAreaId()) + .storeHouseCd(saleDeliveryDetailDO.getStoreHouseCd()) + .storeHouseName(saleDeliveryDetailDO.getStoreHouseName()) + .storeAreCd(saleDeliveryDetailDO.getStoreAreCd()) + .storeAreaName(saleDeliveryDetailDO.getStoreAreaName()) .materialId(saleDelivery.getMaterialId()) .matName(saleDelivery.getMaterialName()) .matCode(saleDelivery.getMaterialCode()) .spec(saleDelivery.getSpec()) .unit(saleDelivery.getUnit()) - .lotNo(detail.getLotNo()) - .operatorQty(detail.getDeliveriedQty()) - .bagSpec(detail.getBagSpec()) - .bagQty(detail.getDeliveriedBagQty()) - - .relarionId(detail.getSaleDeliveryId().longValue()) - .planId(inventory.getPlanId()) - .proNo(inventory.getProNo()) - .sourceId(inventory.getId()) - .inventBillNo(inventory.getInventBillNo()) + .lotNo(saleDeliveryDetailDO.getLotNo()) + .operatorQty(saleDeliveryDetailDO.getDeliveriedQty()) + .operatorType("2") + .businessType("21") + .stockItemId(saleDeliveryDetailDO.getId()) + .billDate(LocalDate.now()) + .operatorId(saleDelivery.getDeliveryEmpId()) + .operatorName(saleDelivery.getDeliveryEmpName()) + .relarionNo(saleDelivery.getSaleDeliveryNo()) + .relarionId(saleDelivery.getId()) + .relarionDetailId(saleDeliveryDetailDO.getId()) .build(); - proStorageMatMapper.insert(storageMat); + proStorageLogService.saveProStorageLog(proStorageLogDO); } +// ProStorageDO proStorage = ProStorageDO.builder() +// .billNo(proStorageService.generateSaleDeliveryNo()) +// .operatorType(2) +// .businessType(21) +//// .billType("0") +// .status(1) +// .billDate(LocalDate.now()) +// .operatorId(saleDelivery.getDeliveryEmpId()) +// .operatorName(saleDelivery.getDeliveryEmpName()) +// .relarionNo(saleDelivery.getSaleDeliveryNo()) +// .relarionId(saleDelivery.getId()) +// .sourceNo(saleDelivery.getSaleOrdNo()) +// .sourceId(saleDelivery.getSaleOrdId()) +// .build(); +// proStorageMapper.insert(proStorage); +// +// for (SaleDeliveryDetailDO detail : detailList) { +// ProStorageInventoryDO inventory = proStorageInventoryMapper.selectById(detail.getTwmStorageDetailId()); +// if (inventory == null) { +// throw exception("库存不存在:仓库[" + detail.getStoreHouseName() + "] 批次[" + detail.getLotNo() + "]"); +// } +// +// BigDecimal deliveriedQty = detail.getDeliveriedQty() != null ? detail.getDeliveriedQty() : BigDecimal.ZERO; +// if (inventory.getUseQty().compareTo(deliveriedQty) < 0) { +// throw exception("库存不足:当前可用数量[" + inventory.getUseQty() + "] < 发货数量[" + deliveriedQty + "]"); +// } +// +// inventory.setUseQty(inventory.getUseQty().subtract(deliveriedQty)); +// inventory.setYardQty(inventory.getYardQty().subtract(deliveriedQty)); +// inventory.setPackQty(inventory.getPackQty() - (detail.getDeliveriedBagQty())); +// proStorageInventoryMapper.updateById(inventory); +// ProStorageMatDO storageMat = ProStorageMatDO.builder() +// .stockId(proStorage.getId().longValue()) +// .storeHouseId(detail.getStoreHouseId()) +// .storeAreaId(detail.getStoreAreaId()) +// .storeHouseCd(detail.getStoreHouseCd()) +// .storeHouseName(detail.getStoreHouseName()) +// .storeAreCd(detail.getStoreAreCd()) +// .storeAreaName(detail.getStoreAreaName()) +// .materialId(saleDelivery.getMaterialId()) +// .matName(saleDelivery.getMaterialName()) +// .matCode(saleDelivery.getMaterialCode()) +// .spec(saleDelivery.getSpec()) +// .unit(saleDelivery.getUnit()) +// .lotNo(detail.getLotNo()) +// .operatorQty(detail.getDeliveriedQty()) +// .bagSpec(detail.getBagSpec()) +// .bagQty(detail.getDeliveriedBagQty()) +// +// .relarionId(detail.getSaleDeliveryId().longValue()) +// .planId(inventory.getPlanId()) +// .proNo(inventory.getProNo()) +// .sourceId(inventory.getId()) +// .inventBillNo(inventory.getInventBillNo()) +// .build(); +// proStorageMatMapper.insert(storageMat); +// } + + if (saleDelivery.getSaleOrdId() != null && saleDelivery.getSaleOrdDetailId() != null) { OrderItemDO currentOrderItem = orderItemMapper.selectById(saleDelivery.getSaleOrdDetailId()); if (currentOrderItem == null) { @@ -332,7 +368,7 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService { } saleDelivery.setDeliveryStatus("2"); - saleDelivery.setTwmStorageId(proStorage.getId()); +// saleDelivery.setTwmStorageId(proStorage.getId()); saleDeliveryMapper.updateById(saleDelivery); } } diff --git a/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts index 11a8628..a783682 100644 --- a/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts +++ b/mes-ui/mes-ui-admin-vue3/src/types/auto-components.d.ts @@ -32,27 +32,13 @@ declare module 'vue' { Echart: typeof import('./../components/Echart/src/Echart.vue')['default'] Editor: typeof import('./../components/Editor/src/Editor.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] - ElAside: typeof import('element-plus/es')['ElAside'] - ElAutoResizer: typeof import('element-plus/es')['ElAutoResizer'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] - ElBadge: typeof import('element-plus/es')['ElBadge'] ElButton: typeof import('element-plus/es')['ElButton'] - ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElCard: typeof import('element-plus/es')['ElCard'] - ElCarousel: typeof import('element-plus/es')['ElCarousel'] - ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem'] - ElCascader: typeof import('element-plus/es')['ElCascader'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] ElCol: typeof import('element-plus/es')['ElCol'] - ElCollapse: typeof import('element-plus/es')['ElCollapse'] - ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] - ElCollapseTransition: typeof import('element-plus/es')['ElCollapseTransition'] - ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] - ElContainer: typeof import('element-plus/es')['ElContainer'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] - ElDescriptions: typeof import('element-plus/es')['ElDescriptions'] - ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem'] ElDialog: typeof import('element-plus/es')['ElDialog'] ElDivider: typeof import('element-plus/es')['ElDivider'] ElDrawer: typeof import('element-plus/es')['ElDrawer'] @@ -68,41 +54,27 @@ declare module 'vue' { ElementTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/ElementTask.vue')['default'] ElForm: typeof import('element-plus/es')['ElForm'] ElFormItem: typeof import('element-plus/es')['ElFormItem'] - ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] - ElImage: typeof import('element-plus/es')['ElImage'] ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] ElInput: typeof import('element-plus/es')['ElInput'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] - ElLink: typeof import('element-plus/es')['ElLink'] - ElMain: typeof import('element-plus/es')['ElMain'] ElOption: typeof import('element-plus/es')['ElOption'] ElPagination: typeof import('element-plus/es')['ElPagination'] ElPopover: typeof import('element-plus/es')['ElPopover'] ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadioButton: typeof import('element-plus/es')['ElRadioButton'] ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup'] - ElRate: typeof import('element-plus/es')['ElRate'] ElRow: typeof import('element-plus/es')['ElRow'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElSelect: typeof import('element-plus/es')['ElSelect'] ElSkeleton: typeof import('element-plus/es')['ElSkeleton'] - ElSlider: typeof import('element-plus/es')['ElSlider'] - ElSpace: typeof import('element-plus/es')['ElSpace'] ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] - ElTableV2: typeof import('element-plus/es')['ElTableV2'] ElTabPane: typeof import('element-plus/es')['ElTabPane'] ElTabs: typeof import('element-plus/es')['ElTabs'] ElTag: typeof import('element-plus/es')['ElTag'] - ElText: typeof import('element-plus/es')['ElText'] - ElTimeline: typeof import('element-plus/es')['ElTimeline'] - ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem'] - ElTimePicker: typeof import('element-plus/es')['ElTimePicker'] - ElTimeSelect: typeof import('element-plus/es')['ElTimeSelect'] ElTooltip: typeof import('element-plus/es')['ElTooltip'] - ElTransfer: typeof import('element-plus/es')['ElTransfer'] ElTree: typeof import('element-plus/es')['ElTree'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElUpload: typeof import('element-plus/es')['ElUpload'] @@ -118,11 +90,26 @@ declare module 'vue' { InputPassword: typeof import('./../components/InputPassword/src/InputPassword.vue')['default'] InputWithColor: typeof import('./../components/InputWithColor/index.vue')['default'] MagicCubeEditor: typeof import('./../components/MagicCubeEditor/index.vue')['default'] + Millexecute: typeof import('./../api/biz/millexecute/index.ts')['default'] + Milloutput: typeof import('./../api/biz/milloutput/index.ts')['default'] Pagination: typeof import('./../components/Pagination/index.vue')['default'] ProcessDesigner: typeof import('./../components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue')['default'] ProcessPalette: typeof import('./../components/bpmnProcessDesigner/package/palette/ProcessPalette.vue')['default'] ProcessViewer: typeof import('./../components/bpmnProcessDesigner/package/designer/ProcessViewer.vue')['default'] PropertiesPanel: typeof import('./../components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue')['default'] + Purapply: typeof import('./../api/biz/purapply/index.ts')['default'] + PurApplyForm: typeof import('./../views/biz/purapply/PurApplyForm.vue')['default'] + Purapplyitem: typeof import('./../api/biz/purapplyitem/index.ts')['default'] + PurApplyItemForm: typeof import('./../views/biz/purapplyitem/PurApplyItemForm.vue')['default'] + PurOrderSelectDialog: typeof import('./../views/biz/purreceipt/PurOrderSelectDialog.vue')['default'] + Purreceipt: typeof import('./../api/biz/purreceipt/index.ts')['default'] + Purreceiptdetail: typeof import('./../api/biz/purreceiptdetail/index.ts')['default'] + PurReceiptDetailForm: typeof import('./../views/biz/purreceiptdetail/PurReceiptDetailForm.vue')['default'] + PurReceiptForm: typeof import('./../views/biz/purreceipt/PurReceiptForm.vue')['default'] + Purreturn: typeof import('./../api/biz/purreturn/index.ts')['default'] + Purreturndetail: typeof import('./../api/biz/purreturndetail/index.ts')['default'] + PurReturnDetailForm: typeof import('./../views/biz/purreturndetail/PurReturnDetailForm.vue')['default'] + PurReturnForm: typeof import('./../views/biz/purreturn/PurReturnForm.vue')['default'] Qrcode: typeof import('./../components/Qrcode/src/Qrcode.vue')['default'] ReceiveTask: typeof import('./../components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts b/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts index 66aeaec..f525c74 100644 --- a/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts +++ b/mes-ui/mes-ui-admin-vue3/src/types/auto-imports.d.ts @@ -7,8 +7,6 @@ export {} declare global { const DICT_TYPE: typeof import('@/utils/dict')['DICT_TYPE'] const EffectScope: typeof import('vue')['EffectScope'] - const ElMessage: typeof import('element-plus/es')['ElMessage'] - const ElMessageBox: typeof import('element-plus/es')['ElMessageBox'] const computed: typeof import('vue')['computed'] const createApp: typeof import('vue')['createApp'] const customRef: typeof import('vue')['customRef']