|
|
|
@ -1,27 +1,35 @@
|
|
|
|
|
package org.dromara.wms.service.impl;
|
|
|
|
|
|
|
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.github.yulichang.toolkit.JoinWrappers;
|
|
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import org.dromara.common.core.exception.ServiceException;
|
|
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
|
|
import org.dromara.common.core.utils.StringUtils;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
|
import org.dromara.wms.domain.BaseMaterialCategory;
|
|
|
|
|
import org.dromara.wms.domain.WmsBaseWarehouse;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.dromara.wms.domain.bo.WmsInstockRecordBo;
|
|
|
|
|
import org.dromara.wms.domain.vo.WmsInstockRecordVo;
|
|
|
|
|
import org.dromara.wms.domain.WmsInstockRecord;
|
|
|
|
|
import org.dromara.wms.domain.bo.WmsInstockOrderBo;
|
|
|
|
|
import org.dromara.wms.domain.bo.WmsInstockPrintBo;
|
|
|
|
|
import org.dromara.wms.domain.bo.WmsInstockRecordBo;
|
|
|
|
|
import org.dromara.wms.domain.bo.WmsInventoryBo;
|
|
|
|
|
import org.dromara.wms.domain.vo.WmsInstockOrderVo;
|
|
|
|
|
import org.dromara.wms.domain.vo.WmsInstockPrintVo;
|
|
|
|
|
import org.dromara.wms.domain.vo.WmsInstockRecordVo;
|
|
|
|
|
import org.dromara.wms.domain.vo.WmsInventoryVo;
|
|
|
|
|
import org.dromara.wms.mapper.WmsInstockOrderMapper;
|
|
|
|
|
import org.dromara.wms.mapper.WmsInstockRecordMapper;
|
|
|
|
|
import org.dromara.wms.service.IWmsInstockRecordService;
|
|
|
|
|
import org.dromara.wms.service.*;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 入库记录Service业务层处理
|
|
|
|
@ -34,6 +42,11 @@ import java.util.Collection;
|
|
|
|
|
public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
|
|
|
|
|
|
|
|
|
|
private final WmsInstockRecordMapper baseMapper;
|
|
|
|
|
private final IWmsInventoryService inventoryService;
|
|
|
|
|
private final IWmsInstockOrderService instockOrderService;
|
|
|
|
|
private final WmsInstockOrderMapper instockOrderMapper;
|
|
|
|
|
private final IWmsInstockDetailService instockDetailService;
|
|
|
|
|
private final IWmsInstockPrintService instockPrintService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询入库记录
|
|
|
|
@ -149,4 +162,80 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
|
|
|
|
|
}
|
|
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 完成入库质检操作,将指定入库单的物料库存更新到库存表中
|
|
|
|
|
*
|
|
|
|
|
* @param instockCode 入库单编号,用于查询对应的入库记录
|
|
|
|
|
* @return Boolean 质检完成操作是否成功执行。如果入库记录不存在则返回false,否则返回true
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public Boolean completeQualityCheck(String instockCode) {
|
|
|
|
|
// 查询入库单信息
|
|
|
|
|
WmsInstockOrderBo orderBo = new WmsInstockOrderBo();
|
|
|
|
|
orderBo.setInstockCode(instockCode);
|
|
|
|
|
List<WmsInstockOrderVo> orders = instockOrderService.queryList(orderBo);
|
|
|
|
|
if (orders.isEmpty()) {
|
|
|
|
|
throw new ServiceException("入库单不存在 " + instockCode);
|
|
|
|
|
}
|
|
|
|
|
WmsInstockOrderVo order = orders.get(0);
|
|
|
|
|
|
|
|
|
|
// 查询入库打印记录(这些是去质检的对象)
|
|
|
|
|
WmsInstockPrintBo printBo = new WmsInstockPrintBo();
|
|
|
|
|
printBo.setInstockCode(instockCode);
|
|
|
|
|
List<WmsInstockPrintVo> prints = instockPrintService.queryList(printBo);
|
|
|
|
|
if (prints.isEmpty()) {
|
|
|
|
|
throw new ServiceException("无打印记录可质检 " + instockCode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 遍历打印记录,生成入库记录并更新库存
|
|
|
|
|
for (WmsInstockPrintVo print : prints) {
|
|
|
|
|
// 构造入库记录对象
|
|
|
|
|
WmsInstockRecordBo recordBo = new WmsInstockRecordBo();
|
|
|
|
|
recordBo.setInstockCode(instockCode);
|
|
|
|
|
recordBo.setBatchCode(print.getBatchCode());
|
|
|
|
|
|
|
|
|
|
recordBo.setMaterialId(print.getMaterialId());
|
|
|
|
|
recordBo.setWarehouseId(order.getWarehouseId());
|
|
|
|
|
recordBo.setMaterialCode(print.getMaterialCode());
|
|
|
|
|
recordBo.setMaterialName(print.getMaterialName());
|
|
|
|
|
// TODO: 获取库位
|
|
|
|
|
// recordBo.setLocationCode();
|
|
|
|
|
recordBo.setInstockQty(print.getApportionQty().doubleValue()); // Use apportionQty as qualified quantity
|
|
|
|
|
recordBo.setMaterialCategoryId(print.getMaterialCategoryId());
|
|
|
|
|
// 设置ERP同步状态为质检通过
|
|
|
|
|
// recordBo.setErpSynchronousStatus("QC_PASSED");
|
|
|
|
|
// recordBo.setErpSynchronousQty(print.getApportionQty().doubleValue());
|
|
|
|
|
|
|
|
|
|
// 插入入库记录
|
|
|
|
|
insertByBo(recordBo);
|
|
|
|
|
|
|
|
|
|
// 更新库存信息
|
|
|
|
|
WmsInventoryVo inventoryVo = inventoryService.queryByBatchAndLocation(recordBo.getBatchCode(), recordBo.getLocationCode());
|
|
|
|
|
double qty = recordBo.getInstockQty();
|
|
|
|
|
if (inventoryVo == null) {
|
|
|
|
|
// 如果库存记录不存在,则新增一条库存记录
|
|
|
|
|
WmsInventoryBo inventoryBo = new WmsInventoryBo();
|
|
|
|
|
inventoryBo.setBatchCode(recordBo.getBatchCode());
|
|
|
|
|
inventoryBo.setMaterialId(recordBo.getMaterialId());
|
|
|
|
|
inventoryBo.setStoreId(recordBo.getWarehouseId());
|
|
|
|
|
inventoryBo.setLocationCode(recordBo.getLocationCode());
|
|
|
|
|
inventoryBo.setMaterialCategoryId(Long.valueOf(recordBo.getMaterialCategoryId()));
|
|
|
|
|
inventoryBo.setInventoryQty(new BigDecimal(qty));
|
|
|
|
|
inventoryBo.setLockState("0");//锁定状态(0未锁定,1锁定)
|
|
|
|
|
inventoryBo.setInventoryStatus("1");//库存状态(0库存归0,1正常)
|
|
|
|
|
inventoryService.insertByBo(inventoryBo);
|
|
|
|
|
} else {
|
|
|
|
|
// 如果库存记录存在,则更新库存数量
|
|
|
|
|
WmsInventoryBo update = new WmsInventoryBo();
|
|
|
|
|
update.setInventoryId(inventoryVo.getInventoryId());
|
|
|
|
|
update.setInventoryQty(inventoryVo.getInventoryQty().add(new BigDecimal(qty)));
|
|
|
|
|
inventoryService.updateByBo(update);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|