Merge branch 'dev' into dev_user0622

# Conflicts:
#	mhd_wms/src/main/resources/mapper/pickingOrder/PickingOrderMapper.xml
This commit is contained in:
王奎兴
2026-07-02 19:09:31 +08:00
30 changed files with 858 additions and 246 deletions
@@ -336,6 +336,17 @@ public class ReviewOrderApplicationService {
syncOutOrderCheckQtyByReviewConfirm(reviewOrderId, loginUser);
// 与出库单「复核确认」一致:复核数量与拣货数量不一致时生成复核异常单(FHYC)
genOutOrderAbnormalAfterReviewConfirm(reviewOrderId);
// 校验:复核确认前,已复核数量必须等于计划数量
List<ReviewMaterialDetailPO> details = reviewOrderMapper.queryDetailByReviewOrderId(reviewOrderId);
if (!CollectionUtils.isEmpty(details)) {
for (ReviewMaterialDetailPO detail : details) {
BigDecimal reviewed = nz(detail.getReviewedQty());
BigDecimal plan = nz(detail.getMaterialPlanQty());
if (reviewed.compareTo(plan) != 0) {
throw new ServiceException("该物料已复核数量不等于计划数量");
}
}
}
ReviewOrder order = reviewOrderMapper.selectById(reviewOrderId);
if (order == null) {
continue;
@@ -38,6 +38,8 @@ import com.mhd.wms.domain.materialBaseInfo.repository.facade.IMaterialBaseInfoSe
import com.mhd.wms.domain.materialBaseInfo.repository.po.MaterialBaseInfoPO;
import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO;
import com.mhd.wms.domain.pickingMaterialDetail.repository.mapper.PickingMaterialDetailMapper;
import com.mhd.wms.domain.receiptMaterialDetail.entity.ReceiptMaterialDetail;
import com.mhd.wms.domain.receiptMaterialDetail.repository.facade.IReceiptMaterialDetailService;
import com.mhd.wms.domain.receiptOrderAccount.entity.ReceiptOrderAccount;
import com.mhd.wms.domain.receiptOrderAccount.repository.facade.IReceiptOrderAccountService;
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
@@ -107,6 +109,8 @@ public class StockInOrderApplicationService {
@Autowired
private IStockReceiptOrderService stockReceiptOrderService;
@Autowired
private IReceiptMaterialDetailService receiptMaterialDetailService;
@Autowired
private IStockOutOrderService stockOutOrderService;
@Autowired
private IHandoverTaskOrderService handoverTaskOrderService;
@@ -452,9 +456,36 @@ public class StockInOrderApplicationService {
throw new ServiceException("入库单不存在,入库单ID" + inOrderId);
}
// 只有已创建状态(status = 1)的入库单可以删除
if (stockInOrderPO.getStatus() == null || !stockInOrderPO.getStatus().equals(1)) {
throw new ServiceException("只有已创建状态的入库单可以删除,入库单号:" + stockInOrderPO.getInOrderNumber() + ",当前状态:" + getStatusName(stockInOrderPO.getStatus()));
// if (stockInOrderPO.getStatus() == null || !stockInOrderPO.getStatus().equals(1)) {
// throw new ServiceException("只有已创建状态的入库单可以删除,入库单号:" + stockInOrderPO.getInOrderNumber() + ",当前状态:" + getStatusName(stockInOrderPO.getStatus()));
// }
List<InMaterialDetail> list = inMaterialDetailService.list(new LambdaQueryWrapper<InMaterialDetail>()
.eq(InMaterialDetail::getInOrderNumber, stockInOrderPO.getInOrderNumber())
.eq(InMaterialDetail::getDelFlag, 1));
if (list != null && list.size() > 0) {
for (InMaterialDetail inMaterialDetail : list) {
inMaterialDetail.setDelFlag(2);
inMaterialDetailService.updateById(inMaterialDetail);
}
}
StockReceiptOrder stockReceiptOrder = stockReceiptOrderService.getOne(new LambdaQueryWrapper<StockReceiptOrder>()
.eq(StockReceiptOrder::getInOrderNumber, stockInOrderPO.getInOrderNumber())
.eq(StockReceiptOrder::getDelFlag, 1),false);
if (stockReceiptOrder != null) {
stockReceiptOrder.setDelFlag(2);
stockReceiptOrderService.updateById(stockReceiptOrder);
List<ReceiptMaterialDetail> list1 = receiptMaterialDetailService.list(new LambdaQueryWrapper<ReceiptMaterialDetail>()
.eq(ReceiptMaterialDetail::getReceiptOrderNumber, stockReceiptOrder.getReceiptOrderNumber())
.eq(ReceiptMaterialDetail::getDelFlag, 1));
if (list1 != null && list1.size() > 0) {
for (ReceiptMaterialDetail receiptMaterialDetail : list1) {
receiptMaterialDetail.setDelFlag(2);
receiptMaterialDetailService.updateById(receiptMaterialDetail);
}
}
}
}
return stockInOrderDomainService.delete(inOrderIds);
@@ -229,4 +229,8 @@ public class MaterialInventoryPO extends MaterialBasePO {
@ApiModelProperty("LOT编号")
@Excel(name = "LOT编号")
private String lotNumber;
@ApiModelProperty("规格型号")
@Excel(name = "规格型号")
private String specificationModel;
}
@@ -250,4 +250,13 @@ public class MaterialInventoryDO extends MaterialBaseDO {
private String expiryDateStr;
private String productionDateStr;
private String updateTimeStr;
private String expiryDateStart;
private String expiryDateEnd;
private String productionDateStart;
private String productionDateEnd;
private String updateTimeStart;
private String updateTimeEnd;
}
@@ -125,6 +125,9 @@ public class PickingOrderPO extends StockOutOrderBasePO {
@ApiModelProperty("出库单号")
@Excel(name = "出库单号")
private String outOrderNumber;
@ApiModelProperty("出库单id")
@Excel(name = "出库单id")
private String outOrderId;
@ApiModelProperty("业务单号")
@Excel(name = "业务单号")
@@ -405,4 +405,7 @@ public class ShelfMaterialDetailPO extends BaseVOEntity {
private BigDecimal erpPriceGw;
//申报总价
private BigDecimal amountGw;
@ApiModelProperty("规格型号")
private String specificationModel;
}
@@ -27,6 +27,7 @@ import com.mhd.wms.domain.materialBaseInfo.repository.todo.MaterialBaseInfoDO;
import com.mhd.wms.domain.outMaterialDetail.repository.todo.OutMaterialDetailDO;
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
import com.mhd.wms.domain.stockOutOrder.repository.mapper.StockOutOrderMapper;
import com.mhd.wms.domain.stockOutOrder.repository.todo.StockOutOrderDO;
import com.mhd.wms.domain.stockOutOrder.service.StockOutOrderDomainService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -58,6 +59,8 @@ public class ExcelParseService {
private MaterialBaseInfoApplicationService materialBaseInfoService;
@Autowired
private StockOutOrderDomainService stockOutOrderDomainService;
@Autowired
private StockOutOrderMapper stockOutOrderMapper;
@Resource
private UserServiceFeign userServiceFeign;
/**
@@ -111,6 +114,10 @@ public class ExcelParseService {
stockOutOrder.setWarehouseName(warehouseName);
stockOutOrder.setWarehouseCode(warehouseCode);
stockOutOrder.setWarehouseId(warehouseId);
stockOutOrder.setSalesmanId(String.valueOf(loginUser.getUserPo().getUserId()));
stockOutOrder.setSalesmanName(loginUser.getUserPo().getUserName());
String settlementCurrency = stockOutOrderMapper.getSettlementCurrency(shipperId);
stockOutOrder.setSettlementCurrency(settlementCurrency);
initDict(stockOutOrder);
if (loginUser != null){
stockOutOrder.setTopOrganizationId(loginUser.getUserPo().getTopOrganizationId());
@@ -236,17 +243,17 @@ public class ExcelParseService {
errorMsg.append(validateShipperMaterialDetails(stockOutOrder));
if (stockOutOrder.getMaterialDetailList() == null || stockOutOrder.getMaterialDetailList().isEmpty()) errorMsg.append("物料明细列表不能为空或匹配不上物料信息; ");
if (StringUtils.isEmpty(stockOutOrder.getTo())) errorMsg.append("To不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getEntrustNo())) errorMsg.append("委托单号不能为空; ");
// if (StringUtils.isEmpty(stockOutOrder.getEntrustNo())) errorMsg.append("委托单号不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getCarrier())) errorMsg.append("承运商不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getTransportModeCode())) errorMsg.append("运输方式不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getSupervisionModeCode())) errorMsg.append("监督方式不能为空; ");
// if (StringUtils.isEmpty(stockOutOrder.getContainerNo())) errorMsg.append("柜号不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getDepartureArrivalCountry())) errorMsg.append("出发/到达国家不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getManufacturer())) errorMsg.append("制造商不能为空; ");
// if (StringUtils.isEmpty(stockOutOrder.getManufacturer())) errorMsg.append("制造商不能为空; ");
// if (ObjectUtil.isEmpty(stockOutOrder.getOutboundDate())) errorMsg.append("出仓日期不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getContactPerson())) errorMsg.append("联系人不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getTel())) errorMsg.append("Tel不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getFax())) errorMsg.append("Fax不能为空; ");
// if (StringUtils.isEmpty(stockOutOrder.getTel())) errorMsg.append("Tel不能为空; ");
// if (StringUtils.isEmpty(stockOutOrder.getFax())) errorMsg.append("Fax不能为空; ");
if (ObjectUtil.isEmpty(stockOutOrder.getShipperId())) errorMsg.append("客户名称不能为空或匹配不上客户信息; ");
//if (StringUtils.isEmpty(stockOutOrder.getNeedDeclareFlag())) errorMsg.append("是否需要申报不能为空; ");
if (StringUtils.isEmpty(stockOutOrder.getDeclareCustoms())) errorMsg.append("申报地关区不能为空; ");
@@ -34,7 +34,12 @@ public class HeaderListener extends AnalysisEventListener<Map<Integer, Object>>
// 将Map转换为List再转为数组
List<String> dataList = mapToList(stringData);
Object[] rowData = listToArray(dataList);
String stringValue1 = getStringValue(rowData[0]);
if (stringValue1 != null && !stringValue1.isEmpty()) {
if ("备注:".equals(stringValue1)) {
stockOutOrder.setRemark(getStringValue(rowData[1]));
}
}
// 根据行号提取对应信息
switch (rowNum) {
case 4: // 第5行to仓库联系人车型及车牌委托编码
@@ -37,6 +37,8 @@ public interface StockOutOrderMapper extends BaseMapper<StockOutOrder> {
public String getUserNcCode(@Param("id") Long id);
public String getSettlementCurrency(@Param("id") Long id);
public Long getKcId(@Param("lotNo") String lotNo);
public String getInOrderNumber(@Param("id") Long id);
@@ -194,4 +194,13 @@ public class MaterialInventoryDTO extends MaterialBaseDTO {
private String productionDateStr;
private String updateTimeStr;
private String expiryDateStart;
private String expiryDateEnd;
private String productionDateStart;
private String productionDateEnd;
private String updateTimeStart;
private String updateTimeEnd;
}