执行及取消执行;

This commit is contained in:
王奎兴
2026-06-26 10:52:57 +08:00
parent 92acdb4f20
commit ed4d6111a5
19 changed files with 928 additions and 14 deletions
@@ -41,6 +41,10 @@ public interface ExecutionStockInOrderMapper extends BaseMapper<ExecutionStockIn
public String getUserNcCode(@Param("id") Long id);
public void delWOrder(@Param("inOrderNumber") String inOrderNumber);
public void delWOrderDetail(@Param("inOrderNumber") String inOrderNumber);
List<ExecutionStockInOrderPO> queryNoticePrint(ExecutionStockInOrderDO stockInOrderDO);
List<ExecutionInMaterialDetailPO> queryNoticePrintDetail(ExecutionStockInOrderDO stockInOrderDO);
@@ -306,6 +306,11 @@ public class ExecutionStockInOrderApplicationService {
return b;
}
public Boolean cancelAuditState(ExecutionStockInOrderDO stockInOrderDO){
Boolean b = stockInOrderDomainService.cancelAuditState(stockInOrderDO);
return b;
}
/**
* @description 下发入库单
* @author ZhouGY
@@ -429,6 +429,39 @@ public class ExecutionStockInOrderDomainService {
.in(ExecutionStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
}
@Transactional(rollbackFor = Exception.class)
public Boolean cancelAuditState(ExecutionStockInOrderDO stockInOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Integer issueStatus = stockInOrderDO.getIssueStatus();
// 获取用户姓名(优先从UserPo获取,如果为空则使用realname,最后使用username作为兜底)
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
? loginUser.getUserPo().getUserName()
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
//逻辑删除w入库单信息
List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
if (inOrderIds == null || inOrderIds.isEmpty()) {
for (Long inOrderId : inOrderIds) {
ExecutionStockInOrder executionStockInOrder = reservationStockInOrderMapper.selectById(inOrderId);
if (executionStockInOrder != null) {
String inOrderNumber = executionStockInOrder.getInOrderNumber();
reservationStockInOrderMapper.delWOrder(inOrderNumber);
reservationStockInOrderMapper.delWOrderDetail(inOrderNumber);
}
}
}
return stockInOrderService.update(null, new UpdateWrapper<ExecutionStockInOrder>().lambda()
.set(ExecutionStockInOrder::getIssueId, null)
.set(ExecutionStockInOrder::getIssueName, null)
.set(ExecutionStockInOrder::getIssueTime, null)
.set(ExecutionStockInOrder::getUpdateBy, loginUser.getUserid())
.set(ExecutionStockInOrder::getUpdateByName, userRealName)
.set(ExecutionStockInOrder::getUpdateTime, new Date())
.set(ExecutionStockInOrder::getIssueStatus, issueStatus)
.in(ExecutionStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
}
/**
* @description 审核入库单
* @author ZhouGY
@@ -5,6 +5,7 @@ import com.mhd.oms.domain.executionOutMaterialDetail.repository.po.ExecutionOutM
import com.mhd.oms.domain.executionStockOutOrder.entity.ExecutionStockOutOrder;
import com.mhd.oms.domain.executionStockOutOrder.repository.po.ExecutionStockOutOrderPO;
import com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockOutOrderDO;
import org.apache.ibatis.annotations.Param;
//import com.mhd.oms.domain.reservationOutMaterialDetail.repository.po.ExecutionOutMaterialDetailPO;
import java.util.List;
@@ -31,4 +32,9 @@ public interface ExecutionStockOutOrderMapper extends BaseMapper<ExecutionStockO
* 出库单提货单打印-明细
*/
List<ExecutionOutMaterialDetailPO> queryOutStockNoticePrintDetail(ExecutionStockOutOrderDO stockOutOrderDO);
public void delWOrder(@Param("outOrderNumber") String outOrderNumber);
public void delWOrderDetail(@Param("outOrderNumber") String outOrderNumber);
}
@@ -826,6 +826,10 @@ public class ExecutionStockOutOrderApplicationService {
return stockOutOrderDomainService.auditState(stockOutOrderDO);
}
public Boolean cancelAuditState(ExecutionStockOutOrderDO stockOutOrderDO){
return stockOutOrderDomainService.auditState(stockOutOrderDO);
}
/**
* @description 下发入库单
* @author ZhouGY
@@ -27,6 +27,7 @@ import com.mhd.oms.domain.executionStockInOrder.repository.mapper.ExecutionStock
import com.mhd.oms.domain.executionStockInOrder.repository.po.MaterialBaseInfoPO;
import com.mhd.oms.domain.executionStockOutOrder.entity.ExecutionStockOutOrder;
import com.mhd.oms.domain.executionStockOutOrder.repository.facade.IExecutionStockOutOrderService;
import com.mhd.oms.domain.executionStockOutOrder.repository.mapper.ExecutionStockOutOrderMapper;
import com.mhd.oms.domain.executionStockOutOrder.repository.po.ExecutionStockOutOrderPO;
import com.mhd.oms.domain.executionStockOutOrder.repository.todo.ExecutionStockOutOrderDO;
import com.mhd.oms.domain.reservationDeliveryDetailsLink.entity.ReservationDeliveryDetailsLink;
@@ -68,6 +69,8 @@ public class ExecutionStockOutOrderDomainService {
@Autowired
private ExecutionStockInOrderMapper reservationStockInOrderMapper;
@Autowired
private ExecutionStockOutOrderMapper executionStockOutOrderMapper;
@Autowired
private BusinessDocumentOrderMapper businessDocumentOrderMapper;
@Autowired
private ExecuteOrderMapper executeOrderMapper;
@@ -296,6 +299,38 @@ public class ExecutionStockOutOrderDomainService {
.in(ExecutionStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds()));
}
@Transactional(rollbackFor = Exception.class)
public Boolean cancelAuditState(ExecutionStockOutOrderDO stockOutOrderDO) {
LoginUser loginUser = SecurityUtils.getLoginUser();
Integer issueStatus = stockOutOrderDO.getIssueStatus();
// 获取用户姓名(优先从UserPo获取,如果为空则使用realname,最后使用username作为兜底)
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
? loginUser.getUserPo().getUserName()
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
List<Long> outOrderIds = stockOutOrderDO.getOutOrderIds();
if (outOrderIds != null && outOrderIds.size() > 0) {
for (Long outOrderId : outOrderIds) {
ExecutionStockOutOrder executionStockOutOrder = stockOutOrderService.getById(outOrderId);
String outOrderNumber = executionStockOutOrder.getOutOrderNumber();
StockOutOrder stockOutOrder = new StockOutOrder();
stockOutOrder.setOutOrderNumber(outOrderNumber);
wmsServiceFeign.cancelExecutionOrder(stockOutOrder);
//还原oms库存及调整记录
}
}
return stockOutOrderService.update(null, new UpdateWrapper<ExecutionStockOutOrder>().lambda()
.set(ExecutionStockOutOrder::getIssueId, null)
.set(ExecutionStockOutOrder::getIssueName, userRealName)
.set(ExecutionStockOutOrder::getIssueTime, new Date())
.set(ExecutionStockOutOrder::getUpdateBy, loginUser.getUserid())
.set(ExecutionStockOutOrder::getUpdateByName, userRealName)
.set(ExecutionStockOutOrder::getUpdateTime, new Date())
.set(ExecutionStockOutOrder::getIssueStatus, issueStatus)
.in(ExecutionStockOutOrder::getOutOrderId, stockOutOrderDO.getOutOrderIds()));
}
/**
* @description 审核出库单
* @author ZhouGY
@@ -348,6 +383,11 @@ public class ExecutionStockOutOrderDomainService {
outMaterialDetailList.add(outMaterialDetail);
}
wmsServiceFeign.omsOutOrderAddDetail(outMaterialDetailList);
String outOrderNumber = byId.getOutOrderNumber();
com.mhd.system.api.domain.StockOutOrderDTO stockOutOrderDTO = new com.mhd.system.api.domain.StockOutOrderDTO();
stockOutOrderDTO.setOutOrderNumber(outOrderNumber);
wmsServiceFeign.execution(stockOutOrderDTO);
}
return update;
}
@@ -40,6 +40,15 @@ public interface ReservationStockInOrderMapper extends BaseMapper<ReservationSto
public String getUserNcCode(@Param("id") Long id);
public Long getTopOrgId(@Param("id") Long id);
public String getOrgName(@Param("id") Long id);
public Long getOrgId(@Param("id") Long id);
public String getWarehouseCode(@Param("id") Long id);
public String getWarehouseName(@Param("id") Long id);
List<ReservationStockInOrderPO> queryNoticePrint(ReservationStockInOrderDO stockInOrderDO);
List<ReservationInMaterialDetailPO> queryNoticePrintDetail(ReservationStockInOrderDO stockInOrderDO);
@@ -13,6 +13,10 @@ import com.mhd.common.core.web.domain.AjaxResult;
import com.mhd.common.security.utils.SecurityUtils;
import com.mhd.oms.domain.businessDocumentOrder.entity.BusinessDocumentOrder;
import com.mhd.oms.domain.businessDocumentOrder.repository.mapper.BusinessDocumentOrderMapper;
import com.mhd.oms.domain.executionInMaterialDetail.entity.ExecutionInMaterialDetail;
import com.mhd.oms.domain.executionInMaterialDetail.repository.facade.IExecutionInMaterialDetailService;
import com.mhd.oms.domain.executionStockInOrder.entity.ExecutionStockInOrder;
import com.mhd.oms.domain.executionStockInOrder.repository.facade.IExecutionStockInOrderService;
import com.mhd.oms.domain.reservationInMaterialDetail.entity.ReservationInMaterialDetail;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.facade.IReservationInMaterialDetailService;
import com.mhd.oms.domain.reservationInMaterialDetail.repository.po.ReservationInMaterialDetailPO;
@@ -29,6 +33,8 @@ import com.mhd.oms.domain.reservationStockInOrder.repository.po.ReservationStock
import com.mhd.oms.domain.reservationStockInOrder.repository.todo.ReservationStockInOrderDO;
import com.mhd.oms.domain.reservationStockOutOrder.entity.ReservationStockOutOrder;
import com.mhd.oms.domain.reservationStockOutOrder.repository.facade.IReservationStockOutOrderService;
import com.mhd.oms.domain.reserveInMaterialDetail.entity.ReserveInMaterialDetail;
import com.mhd.oms.domain.reserveStockInOrder.entity.ReserveStockInOrder;
import com.mhd.system.api.SystemServiceFeign;
import com.mhd.system.api.WmsServiceFeign;
import com.mhd.system.api.domain.*;
@@ -43,6 +49,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -61,6 +68,10 @@ public class ReservationStockInOrderDomainService {
@Autowired
private IReservationInMaterialDetailService materialDetailService;
@Autowired
private IExecutionStockInOrderService executionStockInOrderService;
@Autowired
private IExecutionInMaterialDetailService executionInMaterialDetailService;
@Autowired
private IReservationStockOutOrderService stockOutOrderService;
// @Autowired
// private ReservationStockReceiptOrderDomainService stockReceiptOrderDomainService;
@@ -455,27 +466,97 @@ public class ReservationStockInOrderDomainService {
.in(ReservationStockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
//todo下发推送到wms
// List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
// for (Long inOrderId : inOrderIds) {
// ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);
// StockInOrder stockInOrder = new StockInOrder();
// BeanUtils.copyProperties(byId, stockInOrder,"inOrderId");
// stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId()));
// wmsServiceFeign.omsInOrderAdd(stockInOrder);
// String inOrderNumber = stockInOrder.getInOrderNumber();
// List<ReservationInMaterialDetail> materialDetailList = materialDetailService.list(new QueryWrapper<ReservationInMaterialDetail>().lambda().eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber));
// List<InMaterialDetail> inMaterialDetailList = new ArrayList<>();
// for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) {
// InMaterialDetail inMaterialDetail = new InMaterialDetail();
// BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail,"materialDetailId");
// inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
// inMaterialDetailList.add(inMaterialDetail);
// }
// wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList);
// }
//todo下发推送到入库业务单
List<Long> inOrderIds = stockInOrderDO.getInOrderIds();
for (Long inOrderId : inOrderIds) {
// Long inOrderId = stockInOrderDO.getInOrderId();
ReservationStockInOrder byId = stockInOrderService.getById(inOrderId);
StockInOrder stockInOrder = new StockInOrder();
BeanUtils.copyProperties(byId, stockInOrder,"inOrderId");
stockInOrder.setOmsStockInOrderId(String.valueOf(byId.getInOrderId()));
wmsServiceFeign.omsInOrderAdd(stockInOrder);
String inOrderNumber = stockInOrder.getInOrderNumber();
String inOrderNumber = byId.getInOrderNumber();
List<ReservationInMaterialDetail> materialDetailList = materialDetailService.list(new QueryWrapper<ReservationInMaterialDetail>().lambda().eq(ReservationInMaterialDetail::getInOrderNumber, inOrderNumber));
List<InMaterialDetail> inMaterialDetailList = new ArrayList<>();
for (ReservationInMaterialDetail reservationInMaterialDetail : materialDetailList) {
InMaterialDetail inMaterialDetail = new InMaterialDetail();
BeanUtils.copyProperties(reservationInMaterialDetail, inMaterialDetail,"materialDetailId");
inMaterialDetail.setOmsInMaterialDetail(String.valueOf(reservationInMaterialDetail.getMaterialDetailId()));
inMaterialDetailList.add(inMaterialDetail);
}
wmsServiceFeign.omsInOrderAddDetail(inMaterialDetailList);
// 按照 warehouseId 分组
Map<Long, List<ReservationInMaterialDetail>> materialDetailGroupByWarehouse = materialDetailList.stream()
.collect(Collectors.groupingBy(ReservationInMaterialDetail::getWarehouseId));
materialDetailGroupByWarehouse.forEach((warehouseId, details) -> {
Long topOrgId = reservationStockInOrderMapper.getTopOrgId(warehouseId);
Long orgId = reservationStockInOrderMapper.getOrgId(warehouseId);
String orgName = reservationStockInOrderMapper.getOrgName(warehouseId);
String warehouseCode = reservationStockInOrderMapper.getWarehouseCode(warehouseId);
String warehouseName = reservationStockInOrderMapper.getWarehouseName(warehouseId);
ExecutionStockInOrder reservationStockInOrder = new ExecutionStockInOrder();
BeanUtils.copyProperties(byId, reservationStockInOrder,"inOrderId","issueStatus","issueTime","issueId","issueName","reservationAuditId","reservationAuditName","reservationAuditTime");
reservationStockInOrder.setIssueStatus(0);
reservationStockInOrder.setOrderTypeCode("pu_tong_ru_ku");
reservationStockInOrder.setOrderTypeName("普通入库");
reservationStockInOrder.setReservationOrderSource("客户预约");
reservationStockInOrder.setWarehouseId(warehouseId);
reservationStockInOrder.setOrganizationId(orgId);
reservationStockInOrder.setOrganizationName(orgName);
reservationStockInOrder.setTopOrganizationId(topOrgId);
reservationStockInOrder.setWarehouseCode(warehouseCode);
reservationStockInOrder.setWarehouseName(warehouseName);
List<ExecutionInMaterialDetail> inMaterialDetailList = new ArrayList<>();
int index = 1;
for (ReservationInMaterialDetail reserveInMaterialDetail : details) {
ExecutionInMaterialDetail reservationInMaterialDetail = new ExecutionInMaterialDetail();
BeanUtils.copyProperties(reserveInMaterialDetail, reservationInMaterialDetail,"materialDetailId");
reservationInMaterialDetail.setQuantity(reserveInMaterialDetail.getQuantity());
reservationInMaterialDetail.setOrganizationId(orgId);
reservationInMaterialDetail.setOrganizationName(orgName);
reservationInMaterialDetail.setTopOrganizationId(topOrgId);
reservationInMaterialDetail.setWarehouseCode(warehouseCode);
reservationInMaterialDetail.setWarehouseName(warehouseName);
// String lot = generateDateSerialNumber();
// lot = lot+"-"+index;
// index++;
// reservationInMaterialDetail.setLotNo(lot);
inMaterialDetailList.add(reservationInMaterialDetail);
}
BigDecimal quantity = details.stream().map(ReservationInMaterialDetail::getQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
reservationStockInOrder.setQuantity(quantity);
executionStockInOrderService.save(reservationStockInOrder);
executionInMaterialDetailService.saveBatch(inMaterialDetailList);
});
}
return update;
}
public String generateDateSerialNumber() {
// 1. 获取当前时间,格式化为:yyMMdd (2位年+2位月+2位日)
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
String datePart = sdf.format(new Date());
// 2. 生成 000~999 的 3 位随机数(不足补零)
Random random = new Random();
int randomNum = random.nextInt(1000); // 0~999
String randomPart = String.format("%03d", randomNum); // 自动补前导零
// 3. 拼接结果
return datePart + randomPart;
}
/**
* @description 入库单返回结果
* @author ZhouGY