refactor(biz): 重构采购退料和销售发货功能
This commit is contained in:
parent
70c8bebf0e
commit
2fd6b57e09
@ -155,4 +155,17 @@ public class PurReceiptDetailRespVO {
|
|||||||
@ExcelProperty("单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)")
|
@ExcelProperty("单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)")
|
||||||
private String billType;
|
private String billType;
|
||||||
|
|
||||||
|
@Schema(description = "仓库名称", example = "王五")
|
||||||
|
@ExcelProperty("仓库名称")
|
||||||
|
private String storeHouseName;
|
||||||
|
|
||||||
|
@Schema(description = "仓库id", example = "2172")
|
||||||
|
@ExcelProperty("仓库id")
|
||||||
|
private Long storeHouseId;
|
||||||
|
|
||||||
|
@Schema(description = "仓库编码", example = "王五")
|
||||||
|
@ExcelProperty("仓库编码")
|
||||||
|
private String storeHouseCd;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,7 +31,7 @@ public class PurReturnPageReqVO extends PageParam {
|
|||||||
private String supplierName;
|
private String supplierName;
|
||||||
|
|
||||||
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
||||||
private String purStatus;
|
private String returnStatus;
|
||||||
|
|
||||||
@Schema(description = "采购入库单主表id", example = "3872")
|
@Schema(description = "采购入库单主表id", example = "3872")
|
||||||
private Integer purReceiptId;
|
private Integer purReceiptId;
|
||||||
|
|||||||
@ -43,7 +43,7 @@ public class PurReturnRespVO {
|
|||||||
|
|
||||||
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
||||||
@ExcelProperty("单据状态(1 已创建 2 已确认 )")
|
@ExcelProperty("单据状态(1 已创建 2 已确认 )")
|
||||||
private String purStatus;
|
private String returnStatus;
|
||||||
|
|
||||||
@Schema(description = "备注", example = "你猜")
|
@Schema(description = "备注", example = "你猜")
|
||||||
@ExcelProperty("备注")
|
@ExcelProperty("备注")
|
||||||
@ -74,6 +74,6 @@ public class PurReturnRespVO {
|
|||||||
private String billType;
|
private String billType;
|
||||||
|
|
||||||
@Schema(description = "采购退料单子表列表")
|
@Schema(description = "采购退料单子表列表")
|
||||||
private List<PurReturnDetailRespVO> returnDetailList;
|
private List<PurReturnDetailRespVO> items;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,8 +2,10 @@ package com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo;
|
|||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo.PurReturnDetailSaveReqVO;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 采购退料单主新增/修改 Request VO")
|
@Schema(description = "管理后台 - 采购退料单主新增/修改 Request VO")
|
||||||
@Data
|
@Data
|
||||||
@ -25,7 +27,7 @@ public class PurReturnSaveReqVO {
|
|||||||
private String supplierName;
|
private String supplierName;
|
||||||
|
|
||||||
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
||||||
private String purStatus;
|
private String returnStatus;
|
||||||
|
|
||||||
@Schema(description = "备注", example = "你猜")
|
@Schema(description = "备注", example = "你猜")
|
||||||
private String remark;
|
private String remark;
|
||||||
@ -48,4 +50,7 @@ public class PurReturnSaveReqVO {
|
|||||||
@Schema(description = "单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)", example = "2")
|
@Schema(description = "单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)", example = "2")
|
||||||
private String billType;
|
private String billType;
|
||||||
|
|
||||||
|
@Schema(description = "采购退料单子表列表")
|
||||||
|
private List<PurReturnDetailSaveReqVO> items;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,15 +1,14 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo;
|
package com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.Data;
|
||||||
import java.util.*;
|
|
||||||
import java.util.*;
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import com.alibaba.excel.annotation.*;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 采购退料单子 Response VO")
|
@Schema(description = "管理后台 - 采购退料单子 Response VO")
|
||||||
@Data
|
@Data
|
||||||
@ -125,7 +124,7 @@ public class PurReturnDetailRespVO {
|
|||||||
|
|
||||||
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
@Schema(description = "单据状态(1 已创建 2 已确认 )", example = "2")
|
||||||
@ExcelProperty("单据状态(1 已创建 2 已确认 )")
|
@ExcelProperty("单据状态(1 已创建 2 已确认 )")
|
||||||
private String purStatus;
|
private String returnStatus;
|
||||||
|
|
||||||
@Schema(description = "采购入库单主表id", example = "3872")
|
@Schema(description = "采购入库单主表id", example = "3872")
|
||||||
@ExcelProperty("采购入库单主表id")
|
@ExcelProperty("采购入库单主表id")
|
||||||
@ -147,4 +146,10 @@ public class PurReturnDetailRespVO {
|
|||||||
@ExcelProperty("单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)")
|
@ExcelProperty("单据类型(1 标准采购 2设备采购 3 标准采购退料 4设备采购退料)")
|
||||||
private String billType;
|
private String billType;
|
||||||
|
|
||||||
|
// 入库时间
|
||||||
|
@Schema(description = "入库时间")
|
||||||
|
@ExcelProperty("入库时间")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime inStorageTime;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -53,10 +53,10 @@ public class SaleDeliveryDetailSaveReqVO {
|
|||||||
|
|
||||||
private String unit;
|
private String unit;
|
||||||
|
|
||||||
private BigDecimal stockQty;
|
|
||||||
|
|
||||||
private Integer stockBag;
|
|
||||||
|
|
||||||
private String inventBillNo;
|
private String inventBillNo;
|
||||||
|
|
||||||
|
private BigDecimal yardQty;
|
||||||
|
|
||||||
|
private Integer packQty;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,7 @@ public class PurReturnDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 单据状态(1 已创建 2 已确认 )
|
* 单据状态(1 已创建 2 已确认 )
|
||||||
*/
|
*/
|
||||||
private String purStatus;
|
private String returnStatus;
|
||||||
/**
|
/**
|
||||||
* 备注
|
* 备注
|
||||||
*/
|
*/
|
||||||
@ -55,7 +55,7 @@ public class PurReturnDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 采购入库单主表id
|
* 采购入库单主表id
|
||||||
*/
|
*/
|
||||||
private Integer purReceiptId;
|
private Long purReceiptId;
|
||||||
/**
|
/**
|
||||||
* 采购入库单号
|
* 采购入库单号
|
||||||
*/
|
*/
|
||||||
@ -63,7 +63,7 @@ public class PurReturnDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 退料人id
|
* 退料人id
|
||||||
*/
|
*/
|
||||||
private Integer returnEmpId;
|
private Long returnEmpId;
|
||||||
/**
|
/**
|
||||||
* 退料人名称
|
* 退料人名称
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -83,4 +83,8 @@ public class SaleDeliveryDetailDO extends BaseDO {
|
|||||||
|
|
||||||
private String inventBillNo;
|
private String inventBillNo;
|
||||||
|
|
||||||
|
private BigDecimal yardQty;
|
||||||
|
|
||||||
|
private Integer packQty;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -87,6 +87,9 @@ public interface PurReceiptDetailMapper extends BaseMapperX<PurReceiptDetailDO>
|
|||||||
.selectAs(PurReceiptDO::getReceiptEmpId, PurReceiptDetailRespVO::getReceiptEmpId)
|
.selectAs(PurReceiptDO::getReceiptEmpId, PurReceiptDetailRespVO::getReceiptEmpId)
|
||||||
.selectAs(PurReceiptDO::getReceiptEmpName, PurReceiptDetailRespVO::getReceiptEmpName)
|
.selectAs(PurReceiptDO::getReceiptEmpName, PurReceiptDetailRespVO::getReceiptEmpName)
|
||||||
.selectAs(PurReceiptDO::getBillType, PurReceiptDetailRespVO::getBillType)
|
.selectAs(PurReceiptDO::getBillType, PurReceiptDetailRespVO::getBillType)
|
||||||
|
.selectAs(PurReceiptDO::getStoreHouseName, PurReceiptDetailRespVO::getStoreHouseName)
|
||||||
|
.selectAs(PurReceiptDO::getStoreHouseId, PurReceiptDetailRespVO::getStoreHouseId)
|
||||||
|
.selectAs(PurReceiptDO::getStoreHouseCd, PurReceiptDetailRespVO::getStoreHouseCd)
|
||||||
// LEFT JOIN 主表
|
// LEFT JOIN 主表
|
||||||
.leftJoin(PurReceiptDO.class, PurReceiptDO::getId, PurReceiptDetailDO::getPurReceiptId)
|
.leftJoin(PurReceiptDO.class, PurReceiptDO::getId, PurReceiptDetailDO::getPurReceiptId)
|
||||||
// 查询条件 - 子表
|
// 查询条件 - 子表
|
||||||
@ -96,6 +99,8 @@ public interface PurReceiptDetailMapper extends BaseMapperX<PurReceiptDetailDO>
|
|||||||
.eq(pageReqVO.getMaterialId() != null, PurReceiptDetailDO::getMaterialId, pageReqVO.getMaterialId())
|
.eq(pageReqVO.getMaterialId() != null, PurReceiptDetailDO::getMaterialId, pageReqVO.getMaterialId())
|
||||||
.like(pageReqVO.getMaterialCode() != null, PurReceiptDetailDO::getMaterialCode, pageReqVO.getMaterialCode())
|
.like(pageReqVO.getMaterialCode() != null, PurReceiptDetailDO::getMaterialCode, pageReqVO.getMaterialCode())
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getMaterialName()), PurReceiptDetailDO::getMaterialName, pageReqVO.getMaterialName())
|
.like(StringUtils.isNotBlank(pageReqVO.getMaterialName()), PurReceiptDetailDO::getMaterialName, pageReqVO.getMaterialName())
|
||||||
|
// (t.receipt_qty - t.return_qty) > 0
|
||||||
|
.apply("t.receipt_qty - t.return_qty > 0")
|
||||||
// 查询条件 - 主表
|
// 查询条件 - 主表
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getPurReceiptNo()), PurReceiptDO::getPurReceiptNo, pageReqVO.getPurReceiptNo())
|
.like(StringUtils.isNotBlank(pageReqVO.getPurReceiptNo()), PurReceiptDO::getPurReceiptNo, pageReqVO.getPurReceiptNo())
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getSupplierName()), PurReceiptDO::getSupplierName, pageReqVO.getSupplierName())
|
.like(StringUtils.isNotBlank(pageReqVO.getSupplierName()), PurReceiptDO::getSupplierName, pageReqVO.getSupplierName())
|
||||||
|
|||||||
@ -1,13 +1,11 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturn;
|
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturn;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
||||||
import com.ningxia.yunxi.chemmes.framework.mybatis.core.mapper.BaseMapperX;
|
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.purreturn.vo.PurReturnPageReqVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturn.PurReturnDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturn.PurReturnDO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购退料单主 Mapper
|
* 采购退料单主 Mapper
|
||||||
@ -23,7 +21,7 @@ public interface PurReturnMapper extends BaseMapperX<PurReturnDO> {
|
|||||||
.betweenIfPresent(PurReturnDO::getReceiptDate, reqVO.getReceiptDate())
|
.betweenIfPresent(PurReturnDO::getReceiptDate, reqVO.getReceiptDate())
|
||||||
.eqIfPresent(PurReturnDO::getSupplierId, reqVO.getSupplierId())
|
.eqIfPresent(PurReturnDO::getSupplierId, reqVO.getSupplierId())
|
||||||
.likeIfPresent(PurReturnDO::getSupplierName, reqVO.getSupplierName())
|
.likeIfPresent(PurReturnDO::getSupplierName, reqVO.getSupplierName())
|
||||||
.eqIfPresent(PurReturnDO::getPurStatus, reqVO.getPurStatus())
|
.eqIfPresent(PurReturnDO::getReturnStatus, reqVO.getReturnStatus())
|
||||||
.eqIfPresent(PurReturnDO::getPurReceiptId, reqVO.getPurReceiptId())
|
.eqIfPresent(PurReturnDO::getPurReceiptId, reqVO.getPurReceiptId())
|
||||||
.eqIfPresent(PurReturnDO::getPurReceiptNo, reqVO.getPurReceiptNo())
|
.eqIfPresent(PurReturnDO::getPurReceiptNo, reqVO.getPurReceiptNo())
|
||||||
.eqIfPresent(PurReturnDO::getTwmStorageId, reqVO.getTwmStorageId())
|
.eqIfPresent(PurReturnDO::getTwmStorageId, reqVO.getTwmStorageId())
|
||||||
@ -31,4 +29,11 @@ public interface PurReturnMapper extends BaseMapperX<PurReturnDO> {
|
|||||||
.orderByDesc(PurReturnDO::getId));
|
.orderByDesc(PurReturnDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
default String selectMaxPurReturnNo() {
|
||||||
|
PurReturnDO purReturnDO = selectOne(new LambdaQueryWrapperX<PurReturnDO>()
|
||||||
|
.select(PurReturnDO::getPurReturnNo)
|
||||||
|
.orderByDesc(PurReturnDO::getId)
|
||||||
|
.last("LIMIT 1"));
|
||||||
|
return purReturnDO == null ? null : purReturnDO.getPurReturnNo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -11,6 +11,8 @@ import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturndetail.PurRe
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购退料单子 Mapper
|
* 采购退料单子 Mapper
|
||||||
*
|
*
|
||||||
@ -60,7 +62,7 @@ public interface PurReturnDetailMapper extends BaseMapperX<PurReturnDetailDO> {
|
|||||||
.selectAs(PurReturnDO::getReceiptDate, PurReturnDetailRespVO::getReceiptDate)
|
.selectAs(PurReturnDO::getReceiptDate, PurReturnDetailRespVO::getReceiptDate)
|
||||||
.selectAs(PurReturnDO::getSupplierId, PurReturnDetailRespVO::getSupplierId)
|
.selectAs(PurReturnDO::getSupplierId, PurReturnDetailRespVO::getSupplierId)
|
||||||
.selectAs(PurReturnDO::getSupplierName, PurReturnDetailRespVO::getSupplierName)
|
.selectAs(PurReturnDO::getSupplierName, PurReturnDetailRespVO::getSupplierName)
|
||||||
.selectAs(PurReturnDO::getPurStatus, PurReturnDetailRespVO::getPurStatus)
|
.selectAs(PurReturnDO::getReturnStatus, PurReturnDetailRespVO::getReturnStatus)
|
||||||
.selectAs(PurReturnDO::getPurReceiptId, PurReturnDetailRespVO::getPurReceiptId)
|
.selectAs(PurReturnDO::getPurReceiptId, PurReturnDetailRespVO::getPurReceiptId)
|
||||||
.selectAs(PurReturnDO::getPurReceiptNo, PurReturnDetailRespVO::getPurReceiptNo)
|
.selectAs(PurReturnDO::getPurReceiptNo, PurReturnDetailRespVO::getPurReceiptNo)
|
||||||
.selectAs(PurReturnDO::getReturnEmpId, PurReturnDetailRespVO::getReturnEmpId)
|
.selectAs(PurReturnDO::getReturnEmpId, PurReturnDetailRespVO::getReturnEmpId)
|
||||||
@ -80,7 +82,7 @@ public interface PurReturnDetailMapper extends BaseMapperX<PurReturnDetailDO> {
|
|||||||
.like(StringUtils.isNotBlank(pageReqVO.getStoreHouseName()), PurReturnDetailDO::getStoreHouseName, pageReqVO.getStoreHouseName())
|
.like(StringUtils.isNotBlank(pageReqVO.getStoreHouseName()), PurReturnDetailDO::getStoreHouseName, pageReqVO.getStoreHouseName())
|
||||||
// 查询条件 - 主表
|
// 查询条件 - 主表
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getSupplierName()), PurReturnDO::getSupplierName, pageReqVO.getSupplierName())
|
.like(StringUtils.isNotBlank(pageReqVO.getSupplierName()), PurReturnDO::getSupplierName, pageReqVO.getSupplierName())
|
||||||
.eq(pageReqVO.getPurStatus() != null, PurReturnDO::getPurStatus, pageReqVO.getPurStatus())
|
.eq(pageReqVO.getPurStatus() != null, PurReturnDO::getReturnStatus, pageReqVO.getPurStatus())
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getPurReceiptNo()), PurReturnDO::getPurReceiptNo, pageReqVO.getPurReceiptNo())
|
.like(StringUtils.isNotBlank(pageReqVO.getPurReceiptNo()), PurReturnDO::getPurReceiptNo, pageReqVO.getPurReceiptNo())
|
||||||
.like(StringUtils.isNotBlank(pageReqVO.getReturnEmpName()), PurReturnDO::getReturnEmpName, pageReqVO.getReturnEmpName())
|
.like(StringUtils.isNotBlank(pageReqVO.getReturnEmpName()), PurReturnDO::getReturnEmpName, pageReqVO.getReturnEmpName())
|
||||||
.eq(pageReqVO.getBillType() != null, PurReturnDO::getBillType, pageReqVO.getBillType())
|
.eq(pageReqVO.getBillType() != null, PurReturnDO::getBillType, pageReqVO.getBillType())
|
||||||
@ -88,5 +90,14 @@ public interface PurReturnDetailMapper extends BaseMapperX<PurReturnDetailDO> {
|
|||||||
|
|
||||||
return selectJoinPage(pageReqVO, PurReturnDetailRespVO.class, wrapper);
|
return selectJoinPage(pageReqVO, PurReturnDetailRespVO.class, wrapper);
|
||||||
}
|
}
|
||||||
|
// 根据主表的ID删除子表的数据
|
||||||
|
default void deletePurReturnDetailByPurReturnId(Integer purReturnId) {
|
||||||
|
delete(new LambdaQueryWrapperX<PurReturnDetailDO>().eq(PurReturnDetailDO::getPurReturnId, purReturnId));
|
||||||
|
}
|
||||||
|
|
||||||
|
default List<PurReturnDetailDO> selectListByPurReturnId(Integer purReturnId) {
|
||||||
|
return selectList(new LambdaQueryWrapperX<PurReturnDetailDO>().eq(PurReturnDetailDO::getPurReturnId, purReturnId));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,23 +1,39 @@
|
|||||||
package com.ningxia.yunxi.chemmes.module.biz.service.purreturn;
|
package com.ningxia.yunxi.chemmes.module.biz.service.purreturn;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.ningxia.yunxi.chemmes.framework.common.pojo.PageResult;
|
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.framework.common.util.object.BeanUtils;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnPageReqVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnPageReqVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnRespVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnRespVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnSaveReqVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturn.vo.PurReturnSaveReqVO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo.PurReturnDetailRespVO;
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo.PurReturnDetailRespVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.purreturndetail.vo.PurReturnDetailSaveReqVO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreceiptdetail.PurReceiptDetailDO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturn.PurReturnDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturn.PurReturnDO;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturndetail.PurReturnDetailDO;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.purreturndetail.PurReturnDetailDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstorageinventory.RawStorageInventoryDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.rawstoragelog.RawStorageLogDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.supplier.SupplierDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreceiptdetail.PurReceiptDetailMapper;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturn.PurReturnMapper;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturn.PurReturnMapper;
|
||||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturndetail.PurReturnDetailMapper;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.purreturndetail.PurReturnDetailMapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.rawstorageinventory.RawStorageInventoryMapper;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.service.rawstorageinventory.RawStorageInventoryService;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.service.rawstoragelog.RawStorageLogService;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.biz.service.supplier.SupplierService;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.dal.dataobject.user.AdminUserDO;
|
||||||
|
import com.ningxia.yunxi.chemmes.module.system.service.user.AdminUserService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
import static com.ningxia.yunxi.chemmes.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购退料单主 Service 实现类
|
* 采购退料单主 Service 实现类
|
||||||
@ -26,38 +42,138 @@ import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceE
|
|||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@Validated
|
@Validated
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class PurReturnServiceImpl implements PurReturnService {
|
public class PurReturnServiceImpl implements PurReturnService {
|
||||||
|
|
||||||
@Resource
|
private final PurReturnMapper purReturnMapper;
|
||||||
private PurReturnMapper purReturnMapper;
|
|
||||||
|
private final PurReturnDetailMapper purReturnDetailMapper;
|
||||||
|
|
||||||
|
private final AdminUserService adminUserService;
|
||||||
|
|
||||||
|
private final PurReceiptDetailMapper purreceiptDetailMapper;
|
||||||
|
|
||||||
|
private final RawStorageInventoryService rawStorageInventoryService;
|
||||||
|
|
||||||
|
private final RawStorageInventoryMapper rawStorageInventoryMapper;
|
||||||
|
|
||||||
|
private final SupplierService supplierService;
|
||||||
|
|
||||||
|
private final RawStorageLogService rawStorageLogService;
|
||||||
|
|
||||||
@Resource
|
|
||||||
private PurReturnDetailMapper purReturnDetailMapper;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Integer createPurReturn(PurReturnSaveReqVO createReqVO) {
|
public Integer createPurReturn(PurReturnSaveReqVO createReqVO) {
|
||||||
// 插入
|
// 插入主表
|
||||||
PurReturnDO purReturn = BeanUtils.toBean(createReqVO, PurReturnDO.class);
|
PurReturnDO purReturn = BeanUtils.toBean(createReqVO, PurReturnDO.class);
|
||||||
|
Long userId = getLoginUserId();
|
||||||
|
AdminUserDO adminUserDO = adminUserService.getUser(userId);
|
||||||
|
purReturn.setReturnEmpId(adminUserDO.getId());
|
||||||
|
purReturn.setReturnEmpName(adminUserDO.getUsername());
|
||||||
|
purReturn.setPurReturnNo(generateBillNo());
|
||||||
purReturnMapper.insert(purReturn);
|
purReturnMapper.insert(purReturn);
|
||||||
|
saveDetails(createReqVO, purReturn.getId());
|
||||||
|
if ("2".equals(createReqVO.getReturnStatus())) {
|
||||||
|
processReturn(purReturn);
|
||||||
|
}
|
||||||
|
|
||||||
// 返回
|
// 返回
|
||||||
return purReturn.getId();
|
return purReturn.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void saveDetails(PurReturnSaveReqVO createReqVO, Integer purReturn) {
|
||||||
public void updatePurReturn(PurReturnSaveReqVO updateReqVO) {
|
// 插入子表
|
||||||
// 校验存在
|
for (PurReturnDetailSaveReqVO detailReqVO : createReqVO.getItems()) {
|
||||||
validatePurReturnExists(updateReqVO.getId());
|
PurReturnDetailDO detail = BeanUtils.toBean(detailReqVO, PurReturnDetailDO.class);
|
||||||
// 更新
|
detail.setPurReturnId(purReturn);
|
||||||
PurReturnDO updateObj = BeanUtils.toBean(updateReqVO, PurReturnDO.class);
|
detail.setId(null);
|
||||||
purReturnMapper.updateById(updateObj);
|
purReturnDetailMapper.insert(detail);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updatePurReturn(PurReturnSaveReqVO updateReqVO) {
|
||||||
|
// 校验存在
|
||||||
|
validatePurReturnExists(updateReqVO.getId());
|
||||||
|
// 更新主表
|
||||||
|
PurReturnDO updateObj = BeanUtils.toBean(updateReqVO, PurReturnDO.class);
|
||||||
|
Long userId = getLoginUserId();
|
||||||
|
AdminUserDO adminUserDO = adminUserService.getUser(userId);
|
||||||
|
updateObj.setReturnEmpId(userId);
|
||||||
|
updateObj.setReturnEmpName(adminUserDO.getUsername());
|
||||||
|
purReturnMapper.updateById(updateObj);
|
||||||
|
|
||||||
|
// 删除原有子表数据
|
||||||
|
purReturnDetailMapper.deletePurReturnDetailByPurReturnId(updateReqVO.getId());
|
||||||
|
|
||||||
|
// 插入新子表数据
|
||||||
|
saveDetails(updateReqVO, updateReqVO.getId());
|
||||||
|
if ("2".equals(updateReqVO.getReturnStatus())) {
|
||||||
|
processReturn(updateObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processReturn(PurReturnDO purReturnDO) {
|
||||||
|
List<PurReturnDetailDO> purReturnDetailDOS = purReturnDetailMapper.selectListByPurReturnId(purReturnDO.getId());
|
||||||
|
SupplierDO supplier = supplierService.getSupplier(purReturnDO.getSupplierId());
|
||||||
|
for (PurReturnDetailDO purReturnDetailDO : purReturnDetailDOS) {
|
||||||
|
PurReceiptDetailDO purReceiptDetailDO = purreceiptDetailMapper.selectById(purReturnDetailDO.getPurReceiptDetailId());
|
||||||
|
RawStorageInventoryDO rawStorageInventory = rawStorageInventoryMapper.selectOne(new LambdaQueryWrapper<RawStorageInventoryDO>().eq(RawStorageInventoryDO::getInventBillNo, purReturnDetailDO.getInventBillNo()));
|
||||||
|
rawStorageInventory.setYardQty(rawStorageInventory.getYardQty().subtract(purReturnDetailDO.getReturnQty()));
|
||||||
|
purReceiptDetailDO.setReturnQty(purReceiptDetailDO.getReturnQty().add(purReturnDetailDO.getReturnQty()));
|
||||||
|
purreceiptDetailMapper.updateById(purReceiptDetailDO);
|
||||||
|
//twm_raw_storage_log 插入
|
||||||
|
RawStorageLogDO rawStorageLog = new RawStorageLogDO();
|
||||||
|
// rawStorageLog.setStockId();
|
||||||
|
rawStorageLog.setStatus("2");
|
||||||
|
rawStorageLog.setStoreHouseId(purReturnDetailDO.getStoreHouseId());
|
||||||
|
rawStorageLog.setStoreAreaId(purReturnDetailDO.getStoreAreaId());
|
||||||
|
rawStorageLog.setStoreHouseCd(purReturnDetailDO.getStoreHouseCd());
|
||||||
|
rawStorageLog.setStoreHouseName(purReturnDetailDO.getStoreHouseName());
|
||||||
|
rawStorageLog.setStoreAreCd(purReturnDetailDO.getStoreAreCd());
|
||||||
|
rawStorageLog.setStoreAreaName(purReturnDetailDO.getStoreAreaName());
|
||||||
|
rawStorageLog.setMaterialId(purReturnDetailDO.getMaterialId());
|
||||||
|
rawStorageLog.setMatName(purReturnDetailDO.getMaterialName());
|
||||||
|
rawStorageLog.setMatCode(purReturnDetailDO.getMaterialCode());
|
||||||
|
rawStorageLog.setSpec(purReturnDetailDO.getSpec());
|
||||||
|
rawStorageLog.setUnit(purReturnDetailDO.getUnit());
|
||||||
|
rawStorageLog.setLotNo(purReturnDetailDO.getLotNo());
|
||||||
|
rawStorageLog.setOperatorQty(purReturnDetailDO.getReturnQty());
|
||||||
|
rawStorageLog.setOperatorType("2");
|
||||||
|
rawStorageLog.setBusinessType("23");
|
||||||
|
// rawStorageLog.setStorageAft();
|
||||||
|
// rawStorageLog.setStorageBef();
|
||||||
|
// rawStorageLog.setStockItemId();
|
||||||
|
// rawStorageLog.setDpstNo();
|
||||||
|
rawStorageLog.setSupplierNo(supplier.getSupplierNo());
|
||||||
|
rawStorageLog.setSupplierName(purReturnDO.getSupplierName());
|
||||||
|
rawStorageLog.setSupplierId(purReturnDO.getSupplierId());
|
||||||
|
// rawStorageLog.setPurQty();
|
||||||
|
rawStorageLog.setBillDate(LocalDate.now());
|
||||||
|
rawStorageLog.setOperatorId(purReturnDO.getReturnEmpId());
|
||||||
|
rawStorageLog.setOperatorName(purReturnDO.getReturnEmpName());
|
||||||
|
rawStorageLog.setRelarionNo(purReturnDO.getPurReturnNo());
|
||||||
|
rawStorageLog.setRelarionId(purReturnDO.getId());
|
||||||
|
rawStorageLog.setRelarionDetailId(purReturnDetailDO.getId());
|
||||||
|
rawStorageLog.setInventBillNo(purReturnDetailDO.getInventBillNo());
|
||||||
|
rawStorageLogService.saveRawStorageLog(rawStorageLog);
|
||||||
|
rawStorageInventoryMapper.updateById(rawStorageInventory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void deletePurReturn(Integer id) {
|
public void deletePurReturn(Integer id) {
|
||||||
// 校验存在
|
// 校验存在
|
||||||
validatePurReturnExists(id);
|
validatePurReturnExists(id);
|
||||||
// 删除
|
// 删除
|
||||||
purReturnMapper.deleteById(id);
|
purReturnMapper.deleteById(id);
|
||||||
|
purReturnDetailMapper.deletePurReturnDetailByPurReturnId(id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void validatePurReturnExists(Integer id) {
|
private void validatePurReturnExists(Integer id) {
|
||||||
@ -78,20 +194,24 @@ public class PurReturnServiceImpl implements PurReturnService {
|
|||||||
if (purReturn == null) {
|
if (purReturn == null) {
|
||||||
throw exception("采购退料单主不存在");
|
throw exception("采购退料单主不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 转换为VO
|
// 转换为VO
|
||||||
PurReturnRespVO respVO = BeanUtils.toBean(purReturn, PurReturnRespVO.class);
|
PurReturnRespVO respVO = BeanUtils.toBean(purReturn, PurReturnRespVO.class);
|
||||||
|
|
||||||
// 查询子表数据
|
// 查询子表数据
|
||||||
List<PurReturnDetailDO> detailList = purReturnDetailMapper.selectList(
|
List<PurReturnDetailDO> detailList = purReturnDetailMapper.selectList(
|
||||||
new LambdaQueryWrapper<PurReturnDetailDO>()
|
new LambdaQueryWrapper<PurReturnDetailDO>()
|
||||||
.eq(PurReturnDetailDO::getPurReturnId, id)
|
.eq(PurReturnDetailDO::getPurReturnId, id)
|
||||||
);
|
);
|
||||||
|
|
||||||
// 转换子表数据
|
// 转换子表数据
|
||||||
List<PurReturnDetailRespVO> detailRespVOList = BeanUtils.toBean(detailList, PurReturnDetailRespVO.class);
|
List<PurReturnDetailRespVO> detailRespVOList = BeanUtils.toBean(detailList, PurReturnDetailRespVO.class);
|
||||||
respVO.setReturnDetailList(detailRespVOList);
|
for (PurReturnDetailRespVO purReturnDetailRespVO : detailRespVOList) {
|
||||||
|
PurReceiptDetailDO purReceiptDetailDO = purreceiptDetailMapper.selectById(purReturnDetailRespVO.getPurReceiptDetailId());
|
||||||
|
purReturnDetailRespVO.setInStorageTime(purReceiptDetailDO.getCreateTime());
|
||||||
|
}
|
||||||
|
respVO.setItems(detailRespVOList);
|
||||||
|
|
||||||
return respVO;
|
return respVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,4 +220,11 @@ public class PurReturnServiceImpl implements PurReturnService {
|
|||||||
return purReturnMapper.selectPage(pageReqVO);
|
return purReturnMapper.selectPage(pageReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 生成单号
|
||||||
|
private String generateBillNo() {
|
||||||
|
String maxPurReturnNo = purReturnMapper.selectMaxPurReturnNo();
|
||||||
|
return CodeGenerateUtils.generateBillNo("SCT", maxPurReturnNo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -165,13 +165,6 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
|||||||
List<SaleDeliveryDetailDO> detailList = saleDeliveryDetailMapper.selectBySaleDeliveryId(id);
|
List<SaleDeliveryDetailDO> detailList = saleDeliveryDetailMapper.selectBySaleDeliveryId(id);
|
||||||
// 转换为子表VO列表
|
// 转换为子表VO列表
|
||||||
saleDeliveryVO.setDetailList(BeanUtils.toBean(detailList, SaleDeliveryDetailSaveReqVO.class));
|
saleDeliveryVO.setDetailList(BeanUtils.toBean(detailList, SaleDeliveryDetailSaveReqVO.class));
|
||||||
for (SaleDeliveryDetailSaveReqVO saleDeliveryDetailSaveReqVO : saleDeliveryVO.getDetailList()) {
|
|
||||||
ProStorageInventoryDO storageInventoryDO = proStorageInventoryMapper.selectById(saleDeliveryDetailSaveReqVO.getTwmStorageDetailId());
|
|
||||||
if (storageInventoryDO != null) {
|
|
||||||
saleDeliveryDetailSaveReqVO.setStockQty(storageInventoryDO.getYardQty());
|
|
||||||
saleDeliveryDetailSaveReqVO.setStockBag(storageInventoryDO.getPackQty());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return saleDeliveryVO;
|
return saleDeliveryVO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,7 +210,8 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
|||||||
// 存入 proStorageLogService
|
// 存入 proStorageLogService
|
||||||
for (SaleDeliveryDetailDO saleDeliveryDetailDO : detailList) {
|
for (SaleDeliveryDetailDO saleDeliveryDetailDO : detailList) {
|
||||||
ProStorageLogDO proStorageLogDO = ProStorageLogDO.builder()
|
ProStorageLogDO proStorageLogDO = ProStorageLogDO.builder()
|
||||||
.stockId(saleDeliveryDetailDO.getId())
|
// .stockId(saleDeliveryDetailDO.getId())
|
||||||
|
// .stockItemId(saleDeliveryDetailDO.getId())
|
||||||
.description("销售出库")
|
.description("销售出库")
|
||||||
.status("2")
|
.status("2")
|
||||||
.storeHouseId(saleDeliveryDetailDO.getStoreHouseId())
|
.storeHouseId(saleDeliveryDetailDO.getStoreHouseId())
|
||||||
@ -235,7 +229,6 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
|||||||
.operatorQty(saleDeliveryDetailDO.getDeliveriedQty())
|
.operatorQty(saleDeliveryDetailDO.getDeliveriedQty())
|
||||||
.operatorType("2")
|
.operatorType("2")
|
||||||
.businessType("21")
|
.businessType("21")
|
||||||
.stockItemId(saleDeliveryDetailDO.getId())
|
|
||||||
.billDate(LocalDate.now())
|
.billDate(LocalDate.now())
|
||||||
.operatorId(saleDelivery.getDeliveryEmpId())
|
.operatorId(saleDelivery.getDeliveryEmpId())
|
||||||
.operatorName(saleDelivery.getDeliveryEmpName())
|
.operatorName(saleDelivery.getDeliveryEmpName())
|
||||||
@ -272,8 +265,8 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BigDecimal deliveriedQty = detail.getDeliveriedQty() != null ? detail.getDeliveriedQty() : BigDecimal.ZERO;
|
BigDecimal deliveriedQty = detail.getDeliveriedQty() != null ? detail.getDeliveriedQty() : BigDecimal.ZERO;
|
||||||
if (inventory.getUseQty().compareTo(deliveriedQty) < 0) {
|
if (inventory.getYardQty().compareTo(deliveriedQty) < 0) {
|
||||||
throw exception("库存不足:当前可用数量[" + inventory.getUseQty() + "] < 发货数量[" + deliveriedQty + "]");
|
throw exception("库存不足:当前可用数量[" + inventory.getYardQty() + "] < 发货数量[" + deliveriedQty + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
inventory.setUseQty(inventory.getUseQty().subtract(deliveriedQty));
|
inventory.setUseQty(inventory.getUseQty().subtract(deliveriedQty));
|
||||||
|
|||||||
@ -1,47 +1,47 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
|
|
||||||
export interface PurReturnVO {
|
export interface PurReturnVO {
|
||||||
id: number
|
id: number
|
||||||
purReturnNo: string
|
purReturnNo: string
|
||||||
receiptDate: localdate
|
receiptDate: localdate
|
||||||
supplierId: number
|
supplierId: number
|
||||||
supplierName: string
|
supplierName: string
|
||||||
purStatus: string
|
returnStatus: string
|
||||||
remark: string
|
remark: string
|
||||||
purReceiptId: number
|
purReceiptId: number
|
||||||
purReceiptNo: string
|
purReceiptNo: string
|
||||||
returnEmpId: number
|
returnEmpId: number
|
||||||
returnEmpName: string
|
returnEmpName: string
|
||||||
twmStorageId: number
|
twmStorageId: number
|
||||||
billType: string
|
billType: string
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询采购退料单主分页
|
// 查询采购退料单主分页
|
||||||
export const getPurReturnPage = async (params) => {
|
export const getPurReturnPage = async (params) => {
|
||||||
return await request.get({ url: `/biz/pur-return/page`, params })
|
return await request.get({ url: `/biz/pur-return/page`, params })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询采购退料单主详情
|
// 查询采购退料单主详情
|
||||||
export const getPurReturn = async (id: number) => {
|
export const getPurReturn = async (id: number) => {
|
||||||
return await request.get({ url: `/biz/pur-return/get?id=` + id })
|
return await request.get({ url: `/biz/pur-return/get?id=` + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增采购退料单主
|
// 新增采购退料单主
|
||||||
export const createPurReturn = async (data: PurReturnVO) => {
|
export const createPurReturn = async (data: PurReturnVO) => {
|
||||||
return await request.post({ url: `/biz/pur-return/create`, data })
|
return await request.post({ url: `/biz/pur-return/create`, data })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改采购退料单主
|
// 修改采购退料单主
|
||||||
export const updatePurReturn = async (data: PurReturnVO) => {
|
export const updatePurReturn = async (data: PurReturnVO) => {
|
||||||
return await request.put({ url: `/biz/pur-return/update`, data })
|
return await request.put({ url: `/biz/pur-return/update`, data })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除采购退料单主
|
// 删除采购退料单主
|
||||||
export const deletePurReturn = async (id: number) => {
|
export const deletePurReturn = async (id: number) => {
|
||||||
return await request.delete({ url: `/biz/pur-return/delete?id=` + id })
|
return await request.delete({ url: `/biz/pur-return/delete?id=` + id })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 导出采购退料单主 Excel
|
// 导出采购退料单主 Excel
|
||||||
export const exportPurReturn = async (params) => {
|
export const exportPurReturn = async (params) => {
|
||||||
return await request.download({ url: `/biz/pur-return/export-excel`, params })
|
return await request.download({ url: `/biz/pur-return/export-excel`, params })
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,8 +7,6 @@ export {}
|
|||||||
declare global {
|
declare global {
|
||||||
const DICT_TYPE: typeof import('@/utils/dict')['DICT_TYPE']
|
const DICT_TYPE: typeof import('@/utils/dict')['DICT_TYPE']
|
||||||
const EffectScope: typeof import('vue')['EffectScope']
|
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 computed: typeof import('vue')['computed']
|
||||||
const createApp: typeof import('vue')['createApp']
|
const createApp: typeof import('vue')['createApp']
|
||||||
const customRef: typeof import('vue')['customRef']
|
const customRef: typeof import('vue')['customRef']
|
||||||
|
|||||||
@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
import * as PurReceiptApi from '@/api/biz/purreceipt'
|
import * as PurReceiptDetailApi from '@/api/biz/purreceiptdetail'
|
||||||
import Dialog from '@/components/Dialog/src/Dialog.vue'
|
import Dialog from '@/components/Dialog/src/Dialog.vue'
|
||||||
import Pagination from '@/components/Pagination/index.vue'
|
import Pagination from '@/components/Pagination/index.vue'
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ const queryParams = reactive({
|
|||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const data = await PurReceiptApi.getPurReceiptPage(queryParams)
|
const data = await PurReceiptDetailApi.getPurReceiptDetailPage(queryParams)
|
||||||
receiptList.value = data.list || []
|
receiptList.value = data.list || []
|
||||||
total.value = data.total || 0
|
total.value = data.total || 0
|
||||||
} finally {
|
} finally {
|
||||||
@ -170,6 +170,7 @@ const handleSave = () => {
|
|||||||
// 转换数据格式
|
// 转换数据格式
|
||||||
const selectData = selectedRows.map(row => ({
|
const selectData = selectedRows.map(row => ({
|
||||||
id: row.id,
|
id: row.id,
|
||||||
|
purReceiptDetailId: row.id,
|
||||||
purReceiptNo: row.purReceiptNo,
|
purReceiptNo: row.purReceiptNo,
|
||||||
billType: row.billType,
|
billType: row.billType,
|
||||||
receiptDate: row.receiptDate,
|
receiptDate: row.receiptDate,
|
||||||
@ -180,11 +181,17 @@ const handleSave = () => {
|
|||||||
returnedQty: row.returnedQty || 0,
|
returnedQty: row.returnedQty || 0,
|
||||||
spec: row.spec,
|
spec: row.spec,
|
||||||
storeHouseName: row.storeHouseName,
|
storeHouseName: row.storeHouseName,
|
||||||
|
storeHouseId: row.storeHouseId,
|
||||||
|
storeHouseCd: row.storeHouseCd,
|
||||||
|
storeAreaId: row.storeAreaId,
|
||||||
|
storeAreCd: row.storeAreCd,
|
||||||
storeAreaName: row.storeAreaName,
|
storeAreaName: row.storeAreaName,
|
||||||
unit: row.unit,
|
unit: row.unit,
|
||||||
supplierId: row.supplierId,
|
supplierId: row.supplierId,
|
||||||
materialId: row.materialId,
|
materialId: row.materialId,
|
||||||
purReceiptId: row.purReceiptId,
|
purReceiptId: row.purReceiptId,
|
||||||
|
lotNo: row.lotNo,
|
||||||
|
inventBillNo: row.inventBillNo,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
emit('select', selectData)
|
emit('select', selectData)
|
||||||
|
|||||||
@ -51,8 +51,8 @@
|
|||||||
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="单据状态" prop="purStatus">
|
<el-form-item label="单据状态" prop="returnStatus">
|
||||||
<el-select v-model="formData.purStatus" disabled class="!w-full">
|
<el-select v-model="formData.returnStatus" disabled class="!w-full">
|
||||||
<el-option label="已创建" value="1" />
|
<el-option label="已创建" value="1" />
|
||||||
<el-option label="已确认" value="2" />
|
<el-option label="已确认" value="2" />
|
||||||
</el-select>
|
</el-select>
|
||||||
@ -128,19 +128,10 @@
|
|||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="批次号" prop="lotNo" min-width="100px" align="center">
|
<el-table-column label="批次号" prop="lotNo" min-width="100px" align="center" />
|
||||||
<template #default="scope">
|
|
||||||
<el-input
|
|
||||||
v-model="scope.row.lotNo"
|
|
||||||
placeholder="请输入"
|
|
||||||
:disabled="formType === 'detail'"
|
|
||||||
class="!w-120px"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column label="仓储名称" prop="storeHouseName" min-width="120px" align="center" />
|
<el-table-column label="仓储名称" prop="storeHouseName" min-width="120px" align="center" />
|
||||||
<el-table-column label="库区名称" prop="storeAreaName" min-width="120px" align="center" />
|
<el-table-column label="库区名称" prop="storeAreaName" min-width="120px" align="center" />
|
||||||
<el-table-column label="入库日期" prop="receiptDate" min-width="100px" align="center" />
|
<el-table-column label="入库日期" prop="inStorageTime" min-width="100px" align="center" :formatter="dateFormatter2" />
|
||||||
<el-table-column label="单位" prop="unit" min-width="60px" align="center" :formatter="getUnitName" />
|
<el-table-column label="单位" prop="unit" min-width="60px" align="center" :formatter="getUnitName" />
|
||||||
<el-table-column label="操作" min-width="80px" align="center">
|
<el-table-column label="操作" min-width="80px" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
@ -159,7 +150,6 @@
|
|||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="dialogVisible = false">取消</el-button>
|
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handleSave"
|
@click="handleSave"
|
||||||
@ -169,9 +159,11 @@
|
|||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handleConfirm"
|
@click="handleConfirm"
|
||||||
:disabled="formLoading || formData.purStatus === '2'"
|
:disabled="formLoading || formData.returnStatus === '2'"
|
||||||
v-if="formType !== 'detail'"
|
v-if="formType !== 'detail'"
|
||||||
>确认</el-button>
|
>确认</el-button>
|
||||||
|
<el-button @click="dialogVisible = false">取消</el-button>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
||||||
@ -185,8 +177,8 @@ import Dialog from '@/components/Dialog/src/Dialog.vue'
|
|||||||
import PurReceiptSelectDialog from './PurReceiptSelectDialog.vue'
|
import PurReceiptSelectDialog from './PurReceiptSelectDialog.vue'
|
||||||
import * as PurReturnApi from '@/api/biz/purreturn'
|
import * as PurReturnApi from '@/api/biz/purreturn'
|
||||||
import * as SupplierApi from '@/api/biz/supplier'
|
import * as SupplierApi from '@/api/biz/supplier'
|
||||||
import * as PurReceiptApi from '@/api/biz/purreceipt'
|
|
||||||
import { getUnitName } from '@/utils/dict'
|
import { getUnitName } from '@/utils/dict'
|
||||||
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
@ -207,7 +199,7 @@ const formData = reactive({
|
|||||||
receiptDate: new Date().toISOString().split('T')[0],
|
receiptDate: new Date().toISOString().split('T')[0],
|
||||||
supplierId: undefined,
|
supplierId: undefined,
|
||||||
supplierName: undefined,
|
supplierName: undefined,
|
||||||
purStatus: '1',
|
returnStatus: '1',
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
purReceiptId: undefined,
|
purReceiptId: undefined,
|
||||||
purReceiptNo: undefined,
|
purReceiptNo: undefined,
|
||||||
@ -251,12 +243,7 @@ const open = async (type: string, id?: number) => {
|
|||||||
const data = await PurReturnApi.getPurReturn(id)
|
const data = await PurReturnApi.getPurReturn(id)
|
||||||
Object.assign(formData, data)
|
Object.assign(formData, data)
|
||||||
// 加载明细数据
|
// 加载明细数据
|
||||||
detailList.value = data?.items || data?.detailList || []
|
detailList.value = data.items || []
|
||||||
// 设置供应商名称
|
|
||||||
const supplier = supplierOptions.value.find(s => s.id === formData.supplierId)
|
|
||||||
if (supplier) {
|
|
||||||
formData.supplierName = supplier.supplierName
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@ -339,6 +326,9 @@ const handleSave = async () => {
|
|||||||
|
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
|
|
||||||
|
// 保存时强制设置 returnStatus = 1
|
||||||
|
formData.returnStatus = '1'
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
...formData,
|
...formData,
|
||||||
items: detailList.value,
|
items: detailList.value,
|
||||||
@ -381,7 +371,7 @@ const handleConfirm = async () => {
|
|||||||
|
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
|
|
||||||
formData.purStatus = '2'
|
formData.returnStatus = '2'
|
||||||
const data = {
|
const data = {
|
||||||
...formData,
|
...formData,
|
||||||
items: detailList.value,
|
items: detailList.value,
|
||||||
@ -409,7 +399,7 @@ const resetForm = () => {
|
|||||||
receiptDate: new Date().toISOString().split('T')[0],
|
receiptDate: new Date().toISOString().split('T')[0],
|
||||||
supplierId: undefined,
|
supplierId: undefined,
|
||||||
supplierName: undefined,
|
supplierName: undefined,
|
||||||
purStatus: '1',
|
returnStatus: '1',
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
purReceiptId: undefined,
|
purReceiptId: undefined,
|
||||||
purReceiptNo: undefined,
|
purReceiptNo: undefined,
|
||||||
@ -419,7 +409,6 @@ const resetForm = () => {
|
|||||||
billType: '3',
|
billType: '3',
|
||||||
})
|
})
|
||||||
detailList.value = []
|
detailList.value = []
|
||||||
purReceiptOptions.value = []
|
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -47,9 +47,9 @@
|
|||||||
class="!w-200px"
|
class="!w-200px"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="单据状态" prop="purStatus">
|
<el-form-item label="单据状态" prop="returnStatus">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="queryParams.purStatus"
|
v-model="queryParams.returnStatus"
|
||||||
placeholder="请选择单据状态"
|
placeholder="请选择单据状态"
|
||||||
clearable
|
clearable
|
||||||
class="!w-150px"
|
class="!w-150px"
|
||||||
@ -98,10 +98,10 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="退料单号" align="center" prop="purReturnNo" />
|
<el-table-column label="退料单号" align="center" prop="purReturnNo" />
|
||||||
<el-table-column label="供应商" align="center" prop="supplierName" width="300px" />
|
<el-table-column label="供应商" align="center" prop="supplierName" width="300px" />
|
||||||
<el-table-column label="单据状态" align="center" prop="purStatus" >
|
<el-table-column label="单据状态" align="center" prop="returnStatus" >
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span v-if="scope.row.purStatus === '1'" class="text-blue">已创建</span>
|
<span v-if="scope.row.returnStatus === '1'" class="text-blue">已创建</span>
|
||||||
<span v-else-if="scope.row.purStatus === '2'" class="text-green">已确认</span>
|
<span v-else-if="scope.row.returnStatus === '2'" class="text-green">已确认</span>
|
||||||
<span v-else>-</span>
|
<span v-else>-</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@ -115,7 +115,7 @@
|
|||||||
type="primary"
|
type="primary"
|
||||||
@click="openForm('update', scope.row.id)"
|
@click="openForm('update', scope.row.id)"
|
||||||
v-hasPermi="['biz:pur-return:update']"
|
v-hasPermi="['biz:pur-return:update']"
|
||||||
v-if="scope.row.purStatus === '1' "
|
v-if="scope.row.returnStatus === '1' "
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -124,7 +124,7 @@
|
|||||||
type="danger"
|
type="danger"
|
||||||
@click="handleDelete(scope.row.id)"
|
@click="handleDelete(scope.row.id)"
|
||||||
v-hasPermi="['biz:pur-return:delete']"
|
v-hasPermi="['biz:pur-return:delete']"
|
||||||
v-if="scope.row.purStatus === '1' "
|
v-if="scope.row.returnStatus === '1' "
|
||||||
>
|
>
|
||||||
删除
|
删除
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -241,10 +241,6 @@ const getDetailList = async (id: number) => {
|
|||||||
}
|
}
|
||||||
// 后端返回的数据中,明细在items字段中
|
// 后端返回的数据中,明细在items字段中
|
||||||
detailList.value = data?.items || data || []
|
detailList.value = data?.items || data || []
|
||||||
// 将主信息中的仓储名称和库区名称填充到每个明细项中
|
|
||||||
detailList.value.forEach(item => {
|
|
||||||
item.storeHouseName = mainInfo.value.storeHouseName
|
|
||||||
})
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取退料物料详情失败:', error)
|
console.error('获取退料物料详情失败:', error)
|
||||||
detailList.value = []
|
detailList.value = []
|
||||||
|
|||||||
@ -128,8 +128,8 @@
|
|||||||
<el-table-column label="仓库" prop="warehouse" min-width="150px" align="center" />
|
<el-table-column label="仓库" prop="warehouse" min-width="150px" align="center" />
|
||||||
<el-table-column label="库区" prop="warehouseArea" min-width="150px" align="center" />
|
<el-table-column label="库区" prop="warehouseArea" min-width="150px" align="center" />
|
||||||
<el-table-column label="批次号" prop="batchNo" min-width="150px" align="center" />
|
<el-table-column label="批次号" prop="batchNo" min-width="150px" align="center" />
|
||||||
<el-table-column label="库存数量" prop="stockQty" min-width="150px" align="center" />
|
<el-table-column label="库存数量" prop="yardQty" min-width="150px" align="center" />
|
||||||
<el-table-column label="库存袋数" prop="stockBag" min-width="150px" align="center" />
|
<el-table-column label="库存袋数" prop="packQty" min-width="150px" align="center" />
|
||||||
<el-table-column label="单袋规格" prop="bagSpec" min-width="150px" align="center" />
|
<el-table-column label="单袋规格" prop="bagSpec" min-width="150px" align="center" />
|
||||||
<el-table-column label="发货袋数" prop="deliveriedBag" min-width="120px" align="center" />
|
<el-table-column label="发货袋数" prop="deliveriedBag" min-width="120px" align="center" />
|
||||||
<el-table-column label="发货数量" prop="deliveriedQty" min-width="120px" align="center" />
|
<el-table-column label="发货数量" prop="deliveriedQty" min-width="120px" align="center" />
|
||||||
@ -254,8 +254,8 @@ const open = async (id: number) => {
|
|||||||
warehouse: item.storeHouseName || '',
|
warehouse: item.storeHouseName || '',
|
||||||
warehouseArea: item.storeAreaName || '',
|
warehouseArea: item.storeAreaName || '',
|
||||||
batchNo: item.lotNo || '',
|
batchNo: item.lotNo || '',
|
||||||
stockQty: item.stockQty || '',
|
yardQty: item.yardQty || '',
|
||||||
stockBag: item.stockBag || '',
|
packQty: item.packQty || '',
|
||||||
bagSpec: item.bagSpec || '',
|
bagSpec: item.bagSpec || '',
|
||||||
deliveriedBag: item.deliveriedBagQty || item.deliveriedBag || '',
|
deliveriedBag: item.deliveriedBagQty || item.deliveriedBag || '',
|
||||||
deliveriedQty: item.deliveriedQty || '',
|
deliveriedQty: item.deliveriedQty || '',
|
||||||
|
|||||||
@ -169,14 +169,14 @@
|
|||||||
{{ scope.row.batchNo }}
|
{{ scope.row.batchNo }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="库存数量" prop="stockQty" min-width="150px" align="center">
|
<el-table-column label="库存数量" prop="yardQty" min-width="150px" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.stockQty }}
|
{{ scope.row.yardQty }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="库存袋数" prop="stockBag" min-width="150px" align="center">
|
<el-table-column label="库存袋数" prop="packQty" min-width="150px" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.stockBag }}
|
{{ scope.row.packQty }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="单袋规格" prop="bagSpec" min-width="150px" align="center">
|
<el-table-column label="单袋规格" prop="bagSpec" min-width="150px" align="center">
|
||||||
@ -505,8 +505,9 @@ const open = async (type: string, id?: number) => {
|
|||||||
deliveriedBag: item.deliveriedBagQty || '',
|
deliveriedBag: item.deliveriedBagQty || '',
|
||||||
deliveriedQty: item.deliveriedQty || '',
|
deliveriedQty: item.deliveriedQty || '',
|
||||||
remark: item.remark || '',
|
remark: item.remark || '',
|
||||||
stockQty: item.stockQty || '',
|
yardQty: item.yardQty || item.stockQty || '',
|
||||||
stockBag: item.stockBag || '',
|
packQty: item.packQty || item.stockBag || '',
|
||||||
|
inventBillNo: item.inventBillNo || '',
|
||||||
}))
|
}))
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
@ -698,6 +699,8 @@ const handleInventorySelect = (data: any[]) => {
|
|||||||
deliveriedQty: '', // 发货数量
|
deliveriedQty: '', // 发货数量
|
||||||
remark: '', // 备注
|
remark: '', // 备注
|
||||||
inventBillNo: inventory.inventBillNo, // 库存单号
|
inventBillNo: inventory.inventBillNo, // 库存单号
|
||||||
|
packQty: inventory.packQty || 0, // 库存袋数
|
||||||
|
yardQty: inventory.yardQty || 0, // 库存数量
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 如果已存在,不做处理
|
// 如果已存在,不做处理
|
||||||
@ -835,6 +838,8 @@ const submitForm = async () => {
|
|||||||
deliveriedQty: item.deliveriedQty,
|
deliveriedQty: item.deliveriedQty,
|
||||||
remark: item.remark,
|
remark: item.remark,
|
||||||
inventBillNo: item.inventBillNo,
|
inventBillNo: item.inventBillNo,
|
||||||
|
packQty: item.packQty || 0,
|
||||||
|
yardQty: item.yardQty || 0,
|
||||||
// 库存单号
|
// 库存单号
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@ -888,6 +893,8 @@ const submitAudit = async () => {
|
|||||||
deliveriedQty: item.deliveriedQty,
|
deliveriedQty: item.deliveriedQty,
|
||||||
remark: item.remark,
|
remark: item.remark,
|
||||||
inventBillNo: item.inventBillNo,
|
inventBillNo: item.inventBillNo,
|
||||||
|
packQty: item.packQty || '',
|
||||||
|
yardQty: item.yardQty || '',
|
||||||
// 库存单号
|
// 库存单号
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user