feat(biz): 新增发货状态管理功能
This commit is contained in:
parent
2eef93f948
commit
57a06c7fee
@ -53,4 +53,8 @@ public class SaleDeliveryDetailSaveReqVO {
|
||||
|
||||
private String unit;
|
||||
|
||||
private BigDecimal stockQty;
|
||||
|
||||
private Integer stockBag;
|
||||
|
||||
}
|
||||
|
||||
@ -98,6 +98,4 @@ public class StoreHouseController {
|
||||
List<StoreHouseDO> list = storeHouseService.getStoreHouseSelect(storeType);
|
||||
return success(BeanUtils.toBean(list, StoreHouseRespVO.class));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -81,4 +81,9 @@ public class OrderItemDO extends BaseDO {
|
||||
*/
|
||||
private String ordItemStatus;
|
||||
|
||||
/**
|
||||
* 发货状态(1 未发货 2 部分发货 3 全部发货)
|
||||
*/
|
||||
private String deliveryStatus;
|
||||
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ public class ProStorageDO extends BaseDO {
|
||||
/**
|
||||
* 操作类型 1为入库,2为出库
|
||||
*/
|
||||
private Boolean operatorType;
|
||||
private Integer operatorType;
|
||||
/**
|
||||
* 业务类型 (10 生产入库,11 盘盈入库,12 其它入库 21 成品出库 22 盘亏出库 23生产退库)
|
||||
*/
|
||||
@ -47,7 +47,7 @@ public class ProStorageDO extends BaseDO {
|
||||
/**
|
||||
* 状态:1 已创建;2 提交
|
||||
*/
|
||||
private Boolean status;
|
||||
private Integer status;
|
||||
/**
|
||||
* 业务日期
|
||||
*/
|
||||
@ -55,7 +55,7 @@ public class ProStorageDO extends BaseDO {
|
||||
/**
|
||||
* 操作人id
|
||||
*/
|
||||
private Integer operatorId;
|
||||
private String operatorId;
|
||||
/**
|
||||
* 操作人
|
||||
*/
|
||||
|
||||
@ -117,5 +117,9 @@ public class ProStorageInventoryDO extends BaseDO {
|
||||
* 生产计划号
|
||||
*/
|
||||
private String proNo;
|
||||
/**
|
||||
* 盘点单号
|
||||
*/
|
||||
private String inventBillNo;
|
||||
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.prostoragemat;
|
||||
|
||||
import lombok.*;
|
||||
import java.util.*;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalDateTime;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 成品入/出库子 DO
|
||||
@ -91,11 +91,11 @@ public class ProStorageMatDO extends BaseDO {
|
||||
/**
|
||||
* 来源单号id
|
||||
*/
|
||||
private Integer sourceId;
|
||||
private Long sourceId;
|
||||
/**
|
||||
* 关联单号id
|
||||
*/
|
||||
private Integer relarionId;
|
||||
private Long relarionId;
|
||||
/**
|
||||
* 单袋规格
|
||||
*/
|
||||
@ -113,4 +113,6 @@ public class ProStorageMatDO extends BaseDO {
|
||||
*/
|
||||
private String proNo;
|
||||
|
||||
private String inventBillNo;
|
||||
|
||||
}
|
||||
|
||||
@ -81,4 +81,5 @@ public class SaleDeliveryDetailDO extends BaseDO {
|
||||
*/
|
||||
private Integer deliveriedBagQty;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -68,19 +68,12 @@ public interface OrderItemMapper extends BaseMapperX<OrderItemDO> {
|
||||
// LEFT JOIN 主表
|
||||
.leftJoin(OrderDO.class, OrderDO::getId, OrderItemDO::getSaleOrdId)
|
||||
// 查询条件 - 子表
|
||||
.like(StringUtils.hasText(pageReqVO.getMaterialCode()), OrderItemDO::getMaterialCode, pageReqVO.getMaterialCode())
|
||||
.like(StringUtils.hasText(pageReqVO.getMaterialName()), OrderItemDO::getMaterialName, pageReqVO.getMaterialName())
|
||||
.eq(StringUtils.hasText(pageReqVO.getOrdItemStatus()), OrderItemDO::getOrdItemStatus, pageReqVO.getOrdItemStatus())
|
||||
.ne(OrderItemDO::getDeliveryStatus, "3")
|
||||
|
||||
// 查询条件 - 主表
|
||||
.eq( OrderDO::getOrdStatus, "2")
|
||||
.like(StringUtils.hasText(pageReqVO.getSaleOrdNo()), OrderDO::getSaleOrdNo, pageReqVO.getSaleOrdNo())
|
||||
.eq(pageReqVO.getCustId() != null, OrderDO::getCustId, pageReqVO.getCustId())
|
||||
.like(StringUtils.hasText(pageReqVO.getCustName()), OrderDO::getCustName, pageReqVO.getCustName())
|
||||
.eq(pageReqVO.getSaleMan() != null, OrderDO::getSaleMan, pageReqVO.getSaleMan())
|
||||
.eq(pageReqVO.getSaleDeptId() != null, OrderDO::getSaleDeptId, pageReqVO.getSaleDeptId())
|
||||
.eq(StringUtils.hasText(pageReqVO.getOrdType()), OrderDO::getOrdType, pageReqVO.getOrdType())
|
||||
.eq(StringUtils.hasText(pageReqVO.getOrdStatus()), OrderDO::getOrdStatus, pageReqVO.getOrdStatus())
|
||||
.eq(StringUtils.hasText(pageReqVO.getProStatus()), OrderDO::getProStatus, pageReqVO.getProStatus())
|
||||
.eq(StringUtils.hasText(pageReqVO.getDeliveryStatus()), OrderDO::getDeliveryStatus, pageReqVO.getDeliveryStatus())
|
||||
.orderByDesc(OrderItemDO::getId);
|
||||
|
||||
return selectJoinPage(pageReqVO, OrderItemWithOrderRespVO.class, wrapper);
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.ningxia.yunxi.chemmes.module.biz.dal.mysql.prostorage;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
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;
|
||||
@ -34,4 +35,12 @@ public interface ProStorageMapper extends BaseMapperX<ProStorageDO> {
|
||||
.orderByDesc(ProStorageDO::getId));
|
||||
}
|
||||
|
||||
default String selectMaxBillNo() {
|
||||
ProStorageDO proStorage = selectOne(new LambdaQueryWrapper<ProStorageDO>()
|
||||
.orderByDesc(ProStorageDO::getBillNo)
|
||||
.last("LIMIT 1"));
|
||||
return proStorage != null ? proStorage.getBillNo() : null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -107,6 +107,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
List<OrderItemDO> orderItems = BeanUtils.toBean(list, OrderItemDO.class);
|
||||
orderItems.forEach(item ->
|
||||
item.setSaleOrdId(saleOrdId)
|
||||
.setDeliveryStatus("1")
|
||||
.setId(null)
|
||||
);
|
||||
orderItemMapper.insertBatch(orderItems);
|
||||
|
||||
@ -52,4 +52,6 @@ public interface ProStorageService {
|
||||
*/
|
||||
PageResult<ProStorageDO> getProStoragePage(ProStoragePageReqVO pageReqVO);
|
||||
|
||||
String generateSaleDeliveryNo();
|
||||
|
||||
}
|
||||
|
||||
@ -10,6 +10,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
import static com.ningxia.yunxi.chemmes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
|
||||
@ -67,4 +69,21 @@ public class ProStorageServiceImpl implements ProStorageService {
|
||||
return proStorageMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String generateSaleDeliveryNo() {
|
||||
String ym = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMM"));
|
||||
|
||||
String maxBillNo = proStorageMapper.selectMaxBillNo();
|
||||
|
||||
if (maxBillNo == null || maxBillNo.length() < 9
|
||||
|| !maxBillNo.substring(2, 8).equals(ym)) {
|
||||
return "CK" + ym + "001";
|
||||
} else {
|
||||
String prefix = maxBillNo.substring(0, 8);
|
||||
int sequence = Integer.parseInt(maxBillNo.substring(8));
|
||||
sequence++;
|
||||
return prefix + String.format("%03d", sequence);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -5,10 +5,21 @@ import com.ningxia.yunxi.chemmes.framework.common.util.object.BeanUtils;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.saledelivery.vo.SaleDeliveryPageReqVO;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.controller.admin.saledelivery.vo.SaleDeliverySaveReqVO;
|
||||
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.saledelivery.SaleDeliveryDO;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.dataobject.saledeliverydetail.SaleDeliveryDetailDO;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.order.OrderMapper;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.orderitem.OrderItemMapper;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.prostorage.ProStorageMapper;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.prostorageinventory.ProStorageInventoryMapper;
|
||||
import com.ningxia.yunxi.chemmes.module.biz.dal.mysql.prostoragemat.ProStorageMatMapper;
|
||||
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.system.dal.dataobject.user.AdminUserDO;
|
||||
import com.ningxia.yunxi.chemmes.module.system.dal.mysql.user.AdminUserMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -16,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.List;
|
||||
@ -41,6 +53,23 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
@Resource
|
||||
private AdminUserMapper adminUserMapper;
|
||||
|
||||
@Resource
|
||||
private ProStorageInventoryMapper proStorageInventoryMapper;
|
||||
|
||||
@Resource
|
||||
private ProStorageMapper proStorageMapper;
|
||||
|
||||
@Resource
|
||||
private ProStorageMatMapper proStorageMatMapper;
|
||||
|
||||
@Resource
|
||||
private OrderItemMapper orderItemMapper;
|
||||
|
||||
@Resource
|
||||
private OrderMapper orderMapper;
|
||||
|
||||
@Resource
|
||||
private ProStorageService proStorageService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -56,10 +85,12 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
AdminUserDO adminUserDO = adminUserMapper.selectById(userId);
|
||||
saleDelivery.setDeliveryEmpId(String.valueOf(adminUserDO.getId()));
|
||||
saleDelivery.setDeliveryEmpName(adminUserDO.getNickname());
|
||||
|
||||
saleDelivery.setSaleOrdDetailId(createReqVO.getSaleOrdDetailId());
|
||||
saleDeliveryMapper.insert(saleDelivery);
|
||||
|
||||
createSaleDeliveryDetailList(saleDelivery.getId(), createReqVO.getDetailList());
|
||||
if ("2".equals(createReqVO.getDeliveryStatus())) {
|
||||
confirmSaleDelivery(saleDelivery.getId());
|
||||
}
|
||||
|
||||
// 返回
|
||||
return saleDelivery.getId();
|
||||
@ -74,6 +105,9 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
SaleDeliveryDO updateObj = BeanUtils.toBean(updateReqVO, SaleDeliveryDO.class);
|
||||
saleDeliveryMapper.updateById(updateObj);
|
||||
updateSaleDeliveryDetailList(updateReqVO.getId(), updateReqVO.getDetailList());
|
||||
if ("2".equals(updateReqVO.getDeliveryStatus())) {
|
||||
confirmSaleDelivery(updateReqVO.getId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -146,7 +180,13 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
List<SaleDeliveryDetailDO> detailList = saleDeliveryDetailMapper.selectBySaleDeliveryId(id);
|
||||
// 转换为子表VO列表
|
||||
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;
|
||||
}
|
||||
|
||||
@ -156,7 +196,6 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 生成销售出库单号
|
||||
* 规则:SC + 年份(4位) + 月份(2位) + 流水号(3位)
|
||||
@ -166,8 +205,7 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
|
||||
String maxSaleDeliveryNo = saleDeliveryMapper.selectMaxSaleDeliveryNo();
|
||||
|
||||
if (maxSaleDeliveryNo == null || maxSaleDeliveryNo.length() < 9
|
||||
|| !maxSaleDeliveryNo.substring(2, 8).equals(ym)) {
|
||||
if (maxSaleDeliveryNo == null || maxSaleDeliveryNo.length() < 9 || !maxSaleDeliveryNo.substring(2, 8).equals(ym)) {
|
||||
return "SC" + ym + "001";
|
||||
} else {
|
||||
String prefix = maxSaleDeliveryNo.substring(0, 8);
|
||||
@ -176,4 +214,123 @@ public class SaleDeliveryServiceImpl implements SaleDeliveryService {
|
||||
return prefix + String.format("%03d", sequence);
|
||||
}
|
||||
}
|
||||
|
||||
private void confirmSaleDelivery(Integer id) {
|
||||
SaleDeliveryDO saleDelivery = saleDeliveryMapper.selectById(id);
|
||||
if (saleDelivery == null) {
|
||||
throw exception("销售出库单不存在");
|
||||
}
|
||||
|
||||
// if ("2".equals(saleDelivery.getDeliveryStatus())) {
|
||||
// throw exception("该出库单已确认,无需重复确认");
|
||||
// }
|
||||
|
||||
List<SaleDeliveryDetailDO> detailList = saleDeliveryDetailMapper.selectBySaleDeliveryId(saleDelivery.getId());
|
||||
if (detailList == null || detailList.isEmpty()) {
|
||||
throw exception("出库单明细不能为空");
|
||||
}
|
||||
|
||||
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.getSaleOrdNo())
|
||||
.relarionId(saleDelivery.getSaleOrdId())
|
||||
.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(inventory.getId())
|
||||
.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) {
|
||||
throw exception("订单明细不存在");
|
||||
}
|
||||
|
||||
BigDecimal currentDeliveriedQty = currentOrderItem.getDeliveriedQty() != null ? currentOrderItem.getDeliveriedQty() : BigDecimal.ZERO;
|
||||
BigDecimal deliveryQty = saleDelivery.getDeliveriedQty() != null ? saleDelivery.getDeliveriedQty() : BigDecimal.ZERO;
|
||||
BigDecimal totalDeliveriedQty = currentDeliveriedQty.add(deliveryQty);
|
||||
currentOrderItem.setDeliveriedQty(totalDeliveriedQty);
|
||||
if (totalDeliveriedQty.compareTo(currentOrderItem.getOrdQty()) == 0) {
|
||||
currentOrderItem.setDeliveryStatus("3");
|
||||
} else if (totalDeliveriedQty.compareTo(currentOrderItem.getOrdQty()) < 0) {
|
||||
currentOrderItem.setDeliveryStatus("2");
|
||||
} else {
|
||||
throw exception("订单明细发货数量不能大于订单数量");
|
||||
}
|
||||
orderItemMapper.updateById(currentOrderItem);
|
||||
|
||||
List<OrderItemDO> allOrderItems = orderItemMapper.selectBySaleOrdId(saleDelivery.getSaleOrdId());
|
||||
|
||||
boolean allShipped = true;
|
||||
|
||||
for (OrderItemDO item : allOrderItems) {
|
||||
if (!"3".equals(item.getDeliveryStatus())) {
|
||||
allShipped = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
OrderDO order = orderMapper.selectById(saleDelivery.getSaleOrdId());
|
||||
if (order != null) {
|
||||
if (allShipped) {
|
||||
order.setDeliveryStatus("3");
|
||||
} else {
|
||||
order.setDeliveryStatus("2");
|
||||
}
|
||||
orderMapper.updateById(order);
|
||||
}
|
||||
}
|
||||
|
||||
saleDelivery.setDeliveryStatus("2");
|
||||
saleDeliveryMapper.updateById(saleDelivery);
|
||||
}
|
||||
}
|
||||
|
||||
@ -169,6 +169,7 @@ const getList = async () => {
|
||||
saleOrdId: order.id,
|
||||
custId: order.custId, // 添加客户ID
|
||||
deliveriedQty: item.deliveriedQty || 0,
|
||||
itemId: item.id
|
||||
})),
|
||||
}
|
||||
})
|
||||
@ -239,8 +240,8 @@ const emitSelect = (row) => {
|
||||
remaimQty: ((row.ordQty || 0) - (row.deliveriedQty || 0)) || 0,
|
||||
deliveriedQty: row.deliveriedQty || 0,
|
||||
unit: row.unit,
|
||||
itemId: row.itemId
|
||||
}
|
||||
console.log('emitSelect data:', selectData)
|
||||
emit('select', selectData)
|
||||
dialogVisible.value = false
|
||||
}
|
||||
|
||||
@ -171,12 +171,12 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="库存数量" prop="stockQty" width="150px" align="center">
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.stockQty" placeholder="库存数量" readonly />
|
||||
{{ scope.row.stockQty }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="库存袋数" prop="stockBag" width="150px" align="center">
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.stockBag" placeholder="库存袋数" readonly />
|
||||
{{ scope.row.stockBag }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单袋规格" prop="bagSpec" width="150px" align="center">
|
||||
@ -188,7 +188,7 @@
|
||||
<template #default="scope">
|
||||
<MoneyInput
|
||||
v-model="scope.row.deliveriedBag"
|
||||
:decimal-places="2"
|
||||
:decimal-places="0"
|
||||
:allow-negative="false"
|
||||
:show-prefix="false"
|
||||
placeholder="请输入"
|
||||
@ -280,6 +280,7 @@ const getToday = () => {
|
||||
const formData = reactive({
|
||||
id: undefined,
|
||||
saleDeliveryNo: '自动生成',
|
||||
saleOrdDetailId: undefined,
|
||||
deliveryDate: getToday(),
|
||||
deliveryStatus: '1',
|
||||
deliveryType: '1',
|
||||
@ -486,6 +487,7 @@ const open = async (type: string, id?: number) => {
|
||||
// 映射字段,确保表格能正确显示
|
||||
productList.value = itemsData.map((item: any) => ({
|
||||
id: item.id,
|
||||
twmStorageDetailId: item.twmStorageDetailId || item.id,
|
||||
storeHouseId: item.storeHouseId,
|
||||
storeHouseCd: item.storeHouseCd || '',
|
||||
storeAreaId: item.storeAreaId,
|
||||
@ -497,6 +499,8 @@ const open = async (type: string, id?: number) => {
|
||||
deliveriedBag: item.deliveriedBagQty || '',
|
||||
deliveriedQty: item.deliveriedQty || '',
|
||||
remark: item.remark || '',
|
||||
stockQty: item.stockQty || '',
|
||||
stockBag: item.stockBag || '',
|
||||
}))
|
||||
} finally {
|
||||
formLoading.value = false
|
||||
@ -523,6 +527,7 @@ const loadSaleOrderOptions = async () => {
|
||||
spec: item.spec,
|
||||
ordQty: item.ordQty,
|
||||
remaimQty: item.remaimQty,
|
||||
saleOrdDetailId: item.itemId,
|
||||
}))
|
||||
} catch (e) {
|
||||
console.error('加载销售订单失败', e)
|
||||
@ -539,6 +544,7 @@ const handleSaleOrderChange = async (value: number) => {
|
||||
formData.ordQty = order.ordQty
|
||||
formData.remaimQty = order.remaimQty
|
||||
formData.deliveriedQty = order.remaimQty
|
||||
formData.saleOrdDetailId = order.saleOrdDetailId
|
||||
}
|
||||
}
|
||||
|
||||
@ -564,6 +570,7 @@ const handleOrderSelect = async (data: any) => {
|
||||
formData.saleOrdNo = data.saleOrdNo
|
||||
formData.custId = data.custId
|
||||
formData.custName = data.custName
|
||||
formData.saleOrdDetailId = data.itemId
|
||||
formData.materialName = data.materialName
|
||||
formData.materialId = data.materialId
|
||||
formData.materialCode = data.materialCode
|
||||
@ -661,6 +668,7 @@ const handleInventorySelect = (data: any[]) => {
|
||||
// 不存在则新增
|
||||
productList.value.push({
|
||||
inventoryId: inventory.id, // 库存ID,用于判断是否已存在
|
||||
twmStorageDetailId: inventory.id, // 库存明细ID
|
||||
storeHouseId: inventory.storeHouseId, // 仓储ID
|
||||
storeHouseCd: inventory.storeHouseCd, // 仓储编码
|
||||
storeAreaId: inventory.storeAreaId, // 库区ID
|
||||
@ -682,9 +690,7 @@ const handleInventorySelect = (data: any[]) => {
|
||||
|
||||
/** 删除产品项 */
|
||||
const removeProductItem = (index: number) => {
|
||||
if (productList.value.length > 1) {
|
||||
productList.value.splice(index, 1)
|
||||
}
|
||||
productList.value.splice(index, 1)
|
||||
}
|
||||
|
||||
/** 提交表单 */
|
||||
@ -800,7 +806,7 @@ const submitForm = async () => {
|
||||
try {
|
||||
// 将产品信息数据传输到 detailList,字段对应后端
|
||||
const detailList = productList.value.map(item => ({
|
||||
twmStorageDetailId: item.id,
|
||||
twmStorageDetailId: item.twmStorageDetailId || item.id || item.inventoryId,
|
||||
storeHouseId: item.storeHouseId,
|
||||
storeHouseName: item.warehouse,
|
||||
storeHouseCd: item.storeHouseCd,
|
||||
@ -848,7 +854,8 @@ const submitAudit = async () => {
|
||||
try {
|
||||
// 将产品信息数据传输到 detailList,字段对应后端
|
||||
const detailList = productList.value.map(item => ({
|
||||
id: item.id,
|
||||
id: item.id || item.inventoryId,
|
||||
twmStorageDetailId: item.twmStorageDetailId || item.id || item.inventoryId,
|
||||
storeHouseId: item.storeHouseId,
|
||||
storeHouseName: item.warehouse,
|
||||
storeHouseCd: item.storeHouseCd,
|
||||
@ -887,6 +894,7 @@ const resetForm = () => {
|
||||
Object.assign(formData, {
|
||||
id: undefined,
|
||||
saleDeliveryNo: '自动生成',
|
||||
saleOrdDetailId: undefined,
|
||||
deliveryDate: getToday(),
|
||||
deliveryStatus: '1',
|
||||
deliveryType: '1',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user