feat(biz): 更新成品入库出库日志功能并新增原材料入库出库日志模块
This commit is contained in:
parent
bd434cf25e
commit
1884ead27a
@ -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<Integer> createRawStorageLog(@Valid @RequestBody RawStorageLogSaveReqVO createReqVO) {
|
||||
return success(rawStorageLogService.createRawStorageLog(createReqVO));
|
||||
}
|
||||
|
||||
@PutMapping("/update")
|
||||
@Operation(summary = "更新入/出库日志")
|
||||
@PreAuthorize("@ss.hasPermission('twm:raw-storage-log:update')")
|
||||
public CommonResult<Boolean> 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<Boolean> 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<RawStorageLogRespVO> 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<PageResult<RawStorageLogRespVO>> getRawStorageLogPage(@Valid RawStorageLogPageReqVO pageReqVO) {
|
||||
PageResult<RawStorageLogDO> 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<RawStorageLogDO> list = rawStorageLogService.getRawStorageLogPage(pageReqVO).getList();
|
||||
// 导出 Excel
|
||||
ExcelUtils.write(response, "入/出库日志.xls", "数据", RawStorageLogRespVO.class,
|
||||
BeanUtils.toBean(list, RawStorageLogRespVO.class));
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -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;
|
||||
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
}
|
||||
@ -34,12 +34,20 @@ public interface ProStorageLogMapper extends BaseMapperX<ProStorageLogDO> {
|
||||
.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<ProStorageLogDO>()
|
||||
.eq(ProStorageLogDO::getOperatorType, operatorType)
|
||||
.orderByDesc(ProStorageLogDO::getDpstNo)
|
||||
.last("LIMIT 1"));
|
||||
return proStorageLog != null ? proStorageLog.getDpstNo() : null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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<RawStorageLogDO> {
|
||||
|
||||
default PageResult<RawStorageLogDO> selectPage(RawStorageLogPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<RawStorageLogDO>()
|
||||
.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<RawStorageLogDO>()
|
||||
.eq(RawStorageLogDO::getOperatorType, operatorType)
|
||||
.orderByDesc(RawStorageLogDO::getDpstNo)
|
||||
.last("LIMIT 1"));
|
||||
return logDO != null ? logDO.getDpstNo() : null;
|
||||
}
|
||||
}
|
||||
@ -52,4 +52,6 @@ public interface ProStorageLogService {
|
||||
*/
|
||||
PageResult<ProStorageLogDO> getProStorageLogPage(ProStorageLogPageReqVO pageReqVO);
|
||||
|
||||
void saveProStorageLog(ProStorageLogDO saveReqVO);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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<RawStorageLogDO> getRawStorageLogPage(RawStorageLogPageReqVO pageReqVO);
|
||||
|
||||
void saveRawStorageLog(RawStorageLogDO rawStorageLog);
|
||||
|
||||
}
|
||||
@ -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<RawStorageLogDO> 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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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']
|
||||
|
||||
@ -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']
|
||||
|
||||
Loading…
Reference in New Issue
Block a user