Merge branch 'dev' into dev-ty1.2
# Conflicts: # mhd_wms/src/main/java/com/mhd/wms/domain/handoverTaskOrder/service/HandoverTaskOrderDomainService.java # mhd_wms/src/main/java/com/mhd/wms/domain/stockInOrder/repository/todo/StockInOrderDO.java # mhd_wms/src/main/java/com/mhd/wms/domain/stockOutOrder/repository/todo/StockOutOrderDO.java # mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockInOrder/StockInOrderDTO.java # mhd_wms/src/main/java/com/mhd/wms/interfaces/dto/stockOutOrder/StockOutOrderDTO.java
This commit is contained in:
+3
-2
@@ -476,7 +476,8 @@ public class ReviewOrderApplicationService {
|
||||
handoverTaskOrderDO.setShipperId(stockOutOrderPO.getShipperId());
|
||||
handoverTaskOrderDO.setShipperName(stockOutOrderPO.getShipperName());
|
||||
handoverTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("JJZYLS"));
|
||||
handoverTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("JJZY"));
|
||||
// handoverTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("JJZY"));
|
||||
handoverTaskOrderDO.setTaskNumber("HD-"+stockOutOrderPO.getOutOrderNumber());
|
||||
handoverTaskOrderDO.setStatus(1);
|
||||
handoverTaskOrderDO.setOrderTypeCode(stockOutOrderPO.getOrderTypeCode());
|
||||
handoverTaskOrderDO.setOrderTypeName(stockOutOrderPO.getOrderTypeName());
|
||||
@@ -1302,4 +1303,4 @@ public class ReviewOrderApplicationService {
|
||||
setter.accept(parsed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
package com.mhd.wms.application.service.signature;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
|
||||
import com.mhd.wms.domain.stockOutOrder.entity.StockOutOrder;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.facade.IStockOutOrderService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 签名自动任务:超过上架时间/出库交接时间 24 小时的订单自动设为已签名
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SignatureAutoTaskService {
|
||||
|
||||
@Autowired
|
||||
private IStockInOrderService stockInOrderService;
|
||||
@Autowired
|
||||
private IStockOutOrderService stockOutOrderService;
|
||||
|
||||
/** 每30分钟执行一次 */
|
||||
@Scheduled(fixedDelay = 1800000)
|
||||
public void autoSignature() {
|
||||
Date cutoffTime = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
|
||||
int inCount = autoSignInOrders(cutoffTime);
|
||||
int outCount = autoSignOutOrders(cutoffTime);
|
||||
if (inCount > 0 || outCount > 0) {
|
||||
log.info("签名自动任务完成 - 入库签名:{}条,出库签名:{}条", inCount, outCount);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 入库单自动签名:completionTime 超过 24h 且 signatureStatus=1(待签名) 的设为已签名
|
||||
*/
|
||||
private int autoSignInOrders(Date cutoffTime) {
|
||||
List<StockInOrder> list = stockInOrderService.list(
|
||||
new LambdaQueryWrapper<StockInOrder>()
|
||||
.eq(StockInOrder::getSignatureStatus, 1)
|
||||
.eq(StockInOrder::getStatus, 5)
|
||||
.lt(StockInOrder::getCompletionTime, cutoffTime)
|
||||
.isNotNull(StockInOrder::getCompletionTime)
|
||||
);
|
||||
if (list.isEmpty()) return 0;
|
||||
List<Long> ids = list.stream().map(StockInOrder::getInOrderId).collect(Collectors.toList());
|
||||
stockInOrderService.update(new LambdaUpdateWrapper<StockInOrder>()
|
||||
.in(StockInOrder::getInOrderId, ids)
|
||||
.set(StockInOrder::getSignatureStatus, 2)
|
||||
.set(StockInOrder::getSignatureTime, new Date())
|
||||
.set(StockInOrder::getSignatureRemark, "系统自动签名:上架完成超过24小时")
|
||||
);
|
||||
return ids.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库单自动签名:completeTime 超过 24h 且 signatureStatus=1(待签名) 的设为已签名
|
||||
*/
|
||||
private int autoSignOutOrders(Date cutoffTime) {
|
||||
List<StockOutOrder> list = stockOutOrderService.list(
|
||||
new LambdaQueryWrapper<StockOutOrder>()
|
||||
.eq(StockOutOrder::getSignatureStatus, 1)
|
||||
.eq(StockOutOrder::getStatus, 9)
|
||||
.lt(StockOutOrder::getCompleteTime, cutoffTime)
|
||||
.isNotNull(StockOutOrder::getCompleteTime)
|
||||
);
|
||||
if (list.isEmpty()) return 0;
|
||||
List<Long> ids = list.stream().map(StockOutOrder::getOutOrderId).collect(Collectors.toList());
|
||||
stockOutOrderService.update(new LambdaUpdateWrapper<StockOutOrder>()
|
||||
.in(StockOutOrder::getOutOrderId, ids)
|
||||
.set(StockOutOrder::getSignatureStatus, 2)
|
||||
.set(StockOutOrder::getSignatureTime, new Date())
|
||||
.set(StockOutOrder::getSignatureRemark, "系统自动签名:出库交接完成超过24小时")
|
||||
);
|
||||
return ids.size();
|
||||
}
|
||||
}
|
||||
+144
-1
@@ -160,7 +160,7 @@ public class StockInOrderApplicationService {
|
||||
if (loginUser != null && loginUser.getUserPo() != null){
|
||||
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long frontendOrganizationId = stockInOrderDO.getOrganizationId(); // 前端传递的 organizationId
|
||||
|
||||
|
||||
// 数据权限:根据 organizationId 来设置查询权限
|
||||
// 当前登录用户的 organizationId 为 2827 时,可查全部组织数据;其他组织只能查自己
|
||||
if (userOrganizationId != null && userOrganizationId == 2827L) {
|
||||
@@ -282,6 +282,94 @@ public class StockInOrderApplicationService {
|
||||
return stockInOrderPOS;
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA入库签名列表查询
|
||||
*
|
||||
* <p>参照简易模式快捷入库列表 {@link #queryList(StockInOrderDO)} 实现:
|
||||
* 查询入库单状态为「已入库」(status=5) 的入库单列表,
|
||||
* 支持按「作业任务人员」(workUserName) like 模糊查询以及其他常规查询条件。</p>
|
||||
*/
|
||||
public List<StockInOrderPO> querySignatureList(StockInOrderDO stockInOrderDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long frontendOrganizationId = stockInOrderDO.getOrganizationId();
|
||||
|
||||
// 数据权限:与 queryList 保持一致
|
||||
if (userOrganizationId != null && userOrganizationId == 2827L) {
|
||||
if (frontendOrganizationId != null) {
|
||||
stockInOrderDO.setOrganizationId(frontendOrganizationId);
|
||||
stockInOrderDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
stockInOrderDO.setOrganizationId(null);
|
||||
stockInOrderDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
if (frontendOrganizationId != null && userOrganizationId != null) {
|
||||
if (!frontendOrganizationId.equals(userOrganizationId)) {
|
||||
stockInOrderDO.setOrganizationId(userOrganizationId);
|
||||
}
|
||||
} else {
|
||||
if (userOrganizationId != null) {
|
||||
stockInOrderDO.setOrganizationId(userOrganizationId);
|
||||
}
|
||||
}
|
||||
if (stockInOrderDO.getOrganizationId() == null) {
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1) {
|
||||
stockInOrderDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
stockInOrderDO.setTopOrganizationId(2827L);
|
||||
}
|
||||
}
|
||||
// 默认仓库
|
||||
if (stockInOrderDO.getWarehouseId() == null) {
|
||||
AssociationWarehouseCacheDO associationWarehouseCacheDO =
|
||||
SystemServiceCacheUtil.getAssociationWarehouseCache(loginUser.getUserid());
|
||||
if (associationWarehouseCacheDO != null) {
|
||||
stockInOrderDO.setWarehouseId(associationWarehouseCacheDO.getWarehouseId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 入库签名列表固定「已入库」状态过滤
|
||||
// if (stockInOrderDO.getStatus() == null) {
|
||||
// stockInOrderDO.setStatus(5);
|
||||
// }
|
||||
|
||||
List<StockInOrderPO> stockInOrderPOS = stockInOrderDomainService.querySignatureList(stockInOrderDO);
|
||||
// 状态/签名字段翻译,便于 PDA 端直接展示
|
||||
for (StockInOrderPO stockInOrderPO : stockInOrderPOS) {
|
||||
// 状态名称
|
||||
Integer status = stockInOrderPO.getStatus();
|
||||
if (status != null) {
|
||||
if (status == 5) {
|
||||
stockInOrderPO.setStatusName("已入库");
|
||||
} else if (status == 4) {
|
||||
stockInOrderPO.setStatusName("上架中");
|
||||
} else if (status == 3) {
|
||||
stockInOrderPO.setStatusName("收货中");
|
||||
} else if (status == 2) {
|
||||
stockInOrderPO.setStatusName("已审核");
|
||||
} else if (status == 1) {
|
||||
stockInOrderPO.setStatusName("已创建");
|
||||
}
|
||||
}
|
||||
// 签名状态名称
|
||||
Integer signatureStatus = stockInOrderPO.getSignatureStatus();
|
||||
if (signatureStatus != null) {
|
||||
if (signatureStatus == 1) {
|
||||
stockInOrderPO.setSignatureStatusName("待签名");
|
||||
} else if (signatureStatus == 2) {
|
||||
stockInOrderPO.setSignatureStatusName("已签名");
|
||||
}
|
||||
}
|
||||
}
|
||||
return stockInOrderPOS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 新增入库单
|
||||
@@ -569,6 +657,11 @@ public class StockInOrderApplicationService {
|
||||
|
||||
/**
|
||||
* 获取入库单详细信息
|
||||
*
|
||||
* <p>回显入库单基本信息、物料明细以及 PDA入库签名相关字段
|
||||
* (签名状态、签名时间、签名图片、签名备注)。<br>
|
||||
* 与 PDA入库签名列表({@link #querySignatureList(StockInOrderDO)})字段保持一致,
|
||||
* 供 PDA 端「入库签名详情页 - 电子签名/物料明细」两个 tab 数据回显使用。</p>
|
||||
*/
|
||||
public StockInOrderPO getInfo(Long inOrderId)
|
||||
{
|
||||
@@ -646,6 +739,24 @@ public class StockInOrderApplicationService {
|
||||
info.setMaterialDetailList(materialDetailList);
|
||||
}
|
||||
|
||||
// PDA入库签名 - 签名状态名称翻译(待签名/已签名),便于 PDA 详情页直接展示
|
||||
Integer signatureStatus = info.getSignatureStatus();
|
||||
if (signatureStatus != null) {
|
||||
if (signatureStatus == 1) {
|
||||
info.setSignatureStatusName("待签名");
|
||||
} else if (signatureStatus == 2) {
|
||||
info.setSignatureStatusName("已签名");
|
||||
}
|
||||
}
|
||||
|
||||
// 入库单状态名称翻译
|
||||
Integer status = info.getStatus();
|
||||
if (status != null) {
|
||||
if (status == 5) {
|
||||
info.setStatusName("已入库");
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -668,6 +779,11 @@ public class StockInOrderApplicationService {
|
||||
return b;
|
||||
}
|
||||
|
||||
public Boolean remarkEasyMode(StockInOrderDO stockInOrderDO){
|
||||
Boolean b = stockInOrderDomainService.remarkEasyMode(stockInOrderDO);
|
||||
return b;
|
||||
}
|
||||
|
||||
public Boolean updateQuantity( BigDecimal quantity, Long materialDetailId,BigDecimal area,
|
||||
BigDecimal volume,BigDecimal weight){
|
||||
Boolean result = false;
|
||||
@@ -2807,4 +2923,31 @@ public class StockInOrderApplicationService {
|
||||
}
|
||||
stockInOrderService.updateById(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA批量入库签名
|
||||
*/
|
||||
public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
|
||||
List<Long> inOrderIds = dto.getInOrderIds();
|
||||
if (inOrderIds == null || inOrderIds.isEmpty()) {
|
||||
return AjaxResult.error("请选择需要签名的入库单");
|
||||
}
|
||||
int success = 0;
|
||||
Date now = new Date();
|
||||
for (Long id : inOrderIds) {
|
||||
StockInOrder entity = new StockInOrder();
|
||||
entity.setInOrderId(id);
|
||||
entity.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2);
|
||||
entity.setSignatureTime(dto.getSignatureTime() != null ? dto.getSignatureTime() : now);
|
||||
entity.setSignaturePic(dto.getSignaturePic());
|
||||
if (dto.getEvidencePics() != null && !dto.getEvidencePics().isEmpty()) {
|
||||
entity.setEvidencePics(String.join(",", dto.getEvidencePics()));
|
||||
}
|
||||
entity.setSignatureRemark(dto.getSignatureRemark());
|
||||
stockInOrderService.updateById(entity);
|
||||
success++;
|
||||
}
|
||||
return AjaxResult.success("批量签名成功,共" + success + "条");
|
||||
}
|
||||
|
||||
}
|
||||
+89
@@ -322,6 +322,60 @@ public class StockOutOrderApplicationService {
|
||||
return stockOutOrderPOS;
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA出库签名列表查询
|
||||
*
|
||||
* <p>参照简易模式快捷出库列表实现,默认 status=已出库(9),支持 workUserNameLike 模糊查询。</p>
|
||||
*/
|
||||
public List<StockOutOrderPO> querySignatureList(StockOutOrderDO stockOutOrderDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
if (loginUser != null && loginUser.getUserPo() != null) {
|
||||
Long userOrganizationId = loginUser.getUserPo().getOrganizationId();
|
||||
Long frontendOrganizationId = stockOutOrderDO.getOrganizationId();
|
||||
if (userOrganizationId != null && userOrganizationId == 2827L) {
|
||||
if (frontendOrganizationId != null) {
|
||||
stockOutOrderDO.setOrganizationId(frontendOrganizationId);
|
||||
stockOutOrderDO.setTopOrganizationId(null);
|
||||
} else {
|
||||
stockOutOrderDO.setOrganizationId(null);
|
||||
stockOutOrderDO.setTopOrganizationId(null);
|
||||
}
|
||||
} else {
|
||||
if (frontendOrganizationId != null && userOrganizationId != null) {
|
||||
if (!frontendOrganizationId.equals(userOrganizationId)) {
|
||||
stockOutOrderDO.setOrganizationId(userOrganizationId);
|
||||
}
|
||||
} else {
|
||||
if (userOrganizationId != null) {
|
||||
stockOutOrderDO.setOrganizationId(userOrganizationId);
|
||||
}
|
||||
}
|
||||
if (stockOutOrderDO.getOrganizationId() == null) {
|
||||
Long topOrganizationId = loginUser.getUserPo().getTopOrganizationId();
|
||||
if (topOrganizationId != null && topOrganizationId != 1) {
|
||||
stockOutOrderDO.setTopOrganizationId(topOrganizationId);
|
||||
}
|
||||
} else {
|
||||
stockOutOrderDO.setTopOrganizationId(2827L);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (stockOutOrderDO.getStatus() == null) {
|
||||
stockOutOrderDO.setStatus(9);
|
||||
}
|
||||
List<StockOutOrderPO> list = stockOutOrderDomainService.querySignatureList(stockOutOrderDO);
|
||||
for (StockOutOrderPO po : list) {
|
||||
Integer ss = po.getSignatureStatus();
|
||||
if (ss != null) {
|
||||
po.setSignatureStatusName(ss == 1 ? "待签名" : ss == 2 ? "已签名" : null);
|
||||
}
|
||||
if (po.getStatus() != null && po.getStatus() == 9) {
|
||||
po.setStatusName("已出库");
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增出库单
|
||||
@@ -430,6 +484,15 @@ public class StockOutOrderApplicationService {
|
||||
List<DeliveryDetailsLink> list = deliveryDetailsLinkService.list(new LambdaQueryWrapper<DeliveryDetailsLink>().eq(DeliveryDetailsLink::getOrderNumber, stockOutOrderPO.getOutOrderNumber()));
|
||||
stockOutOrderPO.setDeliveryDetailsLinkList(list);
|
||||
|
||||
// PDA出库签名 - 签名状态名称翻译
|
||||
Integer signatureStatus = stockOutOrderPO.getSignatureStatus();
|
||||
if (signatureStatus != null) {
|
||||
stockOutOrderPO.setSignatureStatusName(signatureStatus == 1 ? "待签名" : signatureStatus == 2 ? "已签名" : null);
|
||||
}
|
||||
if (stockOutOrderPO.getStatus() != null && stockOutOrderPO.getStatus() == 9) {
|
||||
stockOutOrderPO.setStatusName("已出库");
|
||||
}
|
||||
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
@@ -2047,4 +2110,30 @@ public class StockOutOrderApplicationService {
|
||||
stockOutOrderService.updateById(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA批量出库签名
|
||||
*/
|
||||
public AjaxResult batchSignature(com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
|
||||
List<Long> outOrderIds = dto.getOutOrderIds();
|
||||
if (outOrderIds == null || outOrderIds.isEmpty()) {
|
||||
return AjaxResult.error("请选择需要签名的出库单");
|
||||
}
|
||||
int success = 0;
|
||||
Date now = new Date();
|
||||
for (Long id : outOrderIds) {
|
||||
StockOutOrder entity = new StockOutOrder();
|
||||
entity.setOutOrderId(id);
|
||||
entity.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2);
|
||||
entity.setSignatureTime(dto.getSignatureTime() != null ? dto.getSignatureTime() : now);
|
||||
entity.setSignaturePic(dto.getSignaturePic());
|
||||
if (dto.getEvidencePics() != null && !dto.getEvidencePics().isEmpty()) {
|
||||
entity.setEvidencePics(String.join(",", dto.getEvidencePics()));
|
||||
}
|
||||
entity.setSignatureRemark(dto.getSignatureRemark());
|
||||
stockOutOrderService.updateById(entity);
|
||||
success++;
|
||||
}
|
||||
return AjaxResult.success("批量签名成功,共" + success + "条");
|
||||
}
|
||||
|
||||
}
|
||||
+10
-4
@@ -328,7 +328,9 @@ public class HandoverTaskOrderDomainService {
|
||||
if (soo != null && "1".equals(soo.getNeedDeclareFlag())) {
|
||||
continue; // 需报关,跳过
|
||||
}
|
||||
pushOms(handoverTaskOrderId);
|
||||
if (soo != null && !"yang_pin_chu_ku".equals(soo.getBusinessType())) {
|
||||
pushOms(handoverTaskOrderId);
|
||||
}
|
||||
}
|
||||
HandoverTaskOrder handoverTaskOrder = handoverTaskOrderService.getById(handoverTaskOrderIds.get(0));
|
||||
stockOutOrderService.update(null,new UpdateWrapper<StockOutOrder>().lambda().set(StockOutOrder::getBillingJson,handoverTaskOrderDO.getBillingJson()).eq(StockOutOrder::getOutOrderNumber,handoverTaskOrder.getOrderNumber()));
|
||||
@@ -441,13 +443,17 @@ public class HandoverTaskOrderDomainService {
|
||||
materialInventoryParamDO.setExpiryDate(materialInventoryPO.getExpiryDate());
|
||||
materialInventoryParamDO.setType("4");
|
||||
materialInventoryParamDO.setWarehouseId(materialInventoryPO.getWarehouseId());
|
||||
materialInventoryService.kctzjl(materialInventoryParamDO, "出库", loginUser);
|
||||
materialInventoryService.xgkc(materialInventoryParamDO);
|
||||
|
||||
MaterialInventoryOmsParamDO materialInventoryOmsParamDO = new MaterialInventoryOmsParamDO();
|
||||
BeanUtils.copyProperties(materialInventoryParamDO, materialInventoryOmsParamDO);
|
||||
materialInventoryOmsParamDO.setKctzType("出库");
|
||||
materialInventoryOmsParamDO.setLoginUser(loginUser);
|
||||
omsServiceFeign.omsEdit(materialInventoryOmsParamDO);
|
||||
if (stockOutOrder != null && !"yang_pin_chu_ku".equals(stockOutOrder.getBusinessType())) {
|
||||
materialInventoryService.kctzjl(materialInventoryParamDO,"出库",loginUser);
|
||||
materialInventoryService.xgkc(materialInventoryParamDO);
|
||||
//库存推送oms
|
||||
omsServiceFeign.omsEdit(materialInventoryOmsParamDO);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
@@ -399,6 +399,22 @@ public class InMaterialDetail extends BaseVOEntity {
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date drinkDate;
|
||||
|
||||
@ApiModelProperty("来货验收是否合格;1 合格,0 不合格")
|
||||
@Excel(name = "来货验收是否合格;1 合格,0 不合格")
|
||||
private String arrivalAcceptQualified;
|
||||
|
||||
@ApiModelProperty("包装是否破损;1 破损,0 完好")
|
||||
@Excel(name = "包装是否破损;1 破损,0 完好")
|
||||
private String packageDamaged;
|
||||
|
||||
@ApiModelProperty("是否解冻 / 水渍;1 是,0 否")
|
||||
@Excel(name = "是否解冻 / 水渍;1 是,0 否")
|
||||
private String isThawWaterstain;
|
||||
|
||||
@ApiModelProperty("问题货是否已通知客户;1 已通知,0 未通知")
|
||||
@Excel(name = "问题货是否已通知客户;1 已通知,0 未通知")
|
||||
private String notifyCustomerAbnormal;
|
||||
|
||||
|
||||
//订单行号
|
||||
private String lineNumGw;
|
||||
|
||||
+16
@@ -424,6 +424,22 @@ public class InMaterialDetailPO extends StockInOrderBasePO {
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date drinkDate;
|
||||
|
||||
@ApiModelProperty("来货验收是否合格;1 合格,0 不合格")
|
||||
@Excel(name = "来货验收是否合格;1 合格,0 不合格")
|
||||
private String arrivalAcceptQualified;
|
||||
|
||||
@ApiModelProperty("包装是否破损;1 破损,0 完好")
|
||||
@Excel(name = "包装是否破损;1 破损,0 完好")
|
||||
private String packageDamaged;
|
||||
|
||||
@ApiModelProperty("是否解冻 / 水渍;1 是,0 否")
|
||||
@Excel(name = "是否解冻 / 水渍;1 是,0 否")
|
||||
private String isThawWaterstain;
|
||||
|
||||
@ApiModelProperty("问题货是否已通知客户;1 已通知,0 未通知")
|
||||
@Excel(name = "问题货是否已通知客户;1 已通知,0 未通知")
|
||||
private String notifyCustomerAbnormal;
|
||||
|
||||
//订单行号
|
||||
private String lineNumGw;
|
||||
//物料规格
|
||||
|
||||
+16
@@ -390,6 +390,22 @@ public class InMaterialDetailDO extends StockInOrderBaseDO {
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date drinkDate;
|
||||
|
||||
@ApiModelProperty("来货验收是否合格;1 合格,0 不合格")
|
||||
@Excel(name = "来货验收是否合格;1 合格,0 不合格")
|
||||
private String arrivalAcceptQualified;
|
||||
|
||||
@ApiModelProperty("包装是否破损;1 破损,0 完好")
|
||||
@Excel(name = "包装是否破损;1 破损,0 完好")
|
||||
private String packageDamaged;
|
||||
|
||||
@ApiModelProperty("是否解冻 / 水渍;1 是,0 否")
|
||||
@Excel(name = "是否解冻 / 水渍;1 是,0 否")
|
||||
private String isThawWaterstain;
|
||||
|
||||
@ApiModelProperty("问题货是否已通知客户;1 已通知,0 未通知")
|
||||
@Excel(name = "问题货是否已通知客户;1 已通知,0 未通知")
|
||||
private String notifyCustomerAbnormal;
|
||||
|
||||
//订单行号
|
||||
private String lineNumGw;
|
||||
//物料规格
|
||||
|
||||
+26
-4
@@ -405,7 +405,12 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
stockOutOrderPO.setAlreadyAllocationQuantity(orderThisAssignIncrement);
|
||||
stockOutOrderPO.setAllocationQuantity(totalAllocationQuantity);
|
||||
//分配(修改库存)
|
||||
xgkc(outMaterialDetailList,outOrderNumber,loginUser);
|
||||
List<StockOutOrder> stockOutOrderList = stockOutOrderMapper.selectList(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (!CollectionUtils.isEmpty(stockOutOrderList) && "yang_pin_chu_ku".equals(stockOutOrderList.get(0).getBusinessType())) {
|
||||
xgkc(outMaterialDetailList,outOrderNumber,loginUser);
|
||||
}
|
||||
//保存物料明细信息
|
||||
outMaterialDetailList.forEach(outMaterialDetail -> {
|
||||
outMaterialDetail.setIsAllocated("1");
|
||||
@@ -535,7 +540,12 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
//保存物料明细信息
|
||||
saveOrUpdateBatch(outMaterialDetailList);
|
||||
//取消分配(修改库存)
|
||||
qxfp(outMaterialDetailDOList,outOrderNumber,loginUser);
|
||||
List<StockOutOrder> stockOutOrderList = stockOutOrderMapper.selectList(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (!CollectionUtils.isEmpty(stockOutOrderList) && "yang_pin_chu_ku".equals(stockOutOrderList.get(0).getBusinessType())) {
|
||||
qxfp(outMaterialDetailDOList,outOrderNumber,loginUser);
|
||||
}
|
||||
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
@@ -973,7 +983,14 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
//保存物料明细信息
|
||||
updateBatchById(outMaterialDetailList);
|
||||
//取消分配
|
||||
qxfp(outMaterialDetailDOList,outOrderNumber,loginUser);
|
||||
|
||||
List<StockOutOrder> stockOutOrderList = stockOutOrderMapper.selectList(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (!CollectionUtils.isEmpty(stockOutOrderList) && "yang_pin_chu_ku".equals(stockOutOrderList.get(0).getBusinessType())) {
|
||||
qxfp(outMaterialDetailDOList,outOrderNumber,loginUser);
|
||||
}
|
||||
|
||||
return stockOutOrderPO;
|
||||
}
|
||||
|
||||
@@ -1076,7 +1093,12 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
|
||||
List<OutMaterialDetailDO> children = outMaterialDetail.getChildren();
|
||||
if (!CollectionUtils.isEmpty(children)) {
|
||||
childrenqxfp(children,outOrderNumber,loginUser);
|
||||
List<StockOutOrder> stockOutOrderList = stockOutOrderMapper.selectList(new QueryWrapper<StockOutOrder>().lambda()
|
||||
.eq(StockOutOrder::getOutOrderNumber, outOrderNumber)
|
||||
.eq(StockOutOrder::getDelFlag, 1));
|
||||
if (!CollectionUtils.isEmpty(stockOutOrderList) && "yang_pin_chu_ku".equals(stockOutOrderList.get(0).getBusinessType())) {
|
||||
childrenqxfp(children,outOrderNumber,loginUser);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -870,7 +870,7 @@ public class PickingOrderDomainService {
|
||||
handoverTaskOrderDO.setShipperId(pickingOrderPO.getShipperId());
|
||||
handoverTaskOrderDO.setShipperName(pickingOrderPO.getShipperName());
|
||||
handoverTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("JJZYLS"));
|
||||
handoverTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("JJZY"));
|
||||
handoverTaskOrderDO.setTaskNumber("HD-"+pickingOrderPO.getOutOrderNumber());
|
||||
handoverTaskOrderDO.setStatus(1);
|
||||
handoverTaskOrderDO.setOrderTypeCode(pickingOrderPO.getOrderTypeCode());
|
||||
handoverTaskOrderDO.setOrderTypeName(pickingOrderPO.getOrderTypeName());
|
||||
|
||||
+3
-2
@@ -115,7 +115,8 @@ public class ReviewOrderDomainService {
|
||||
Date now = new Date();
|
||||
|
||||
ReviewOrder header = new ReviewOrder();
|
||||
header.setReviewOrderNumber(reviewOrderNumber);
|
||||
// header.setReviewOrderNumber(reviewOrderNumber);
|
||||
header.setReviewOrderNumber("RE-"+stockOutOrder.getOutOrderNumber());
|
||||
header.setOutOrderId(stockOutOrder.getOutOrderId());
|
||||
header.setOutOrderNumber(stockOutOrder.getOutOrderNumber());
|
||||
header.setOrganizationId(stockOutOrder.getOrganizationId());
|
||||
@@ -329,4 +330,4 @@ public class ReviewOrderDomainService {
|
||||
}
|
||||
return loginUser.getUsername();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,8 @@ package com.mhd.wms.domain.reviewOrder.repository.po;
|
||||
|
||||
import com.mhd.common.core.web.domain.BaseVOEntity;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
@@ -18,24 +20,28 @@ import java.util.List;
|
||||
@ApiModel(value = "复核单主表", description = "复核单主表展示")
|
||||
public class ReviewOrderPO extends BaseVOEntity {
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("复核单主键")
|
||||
private Long reviewOrderId;
|
||||
|
||||
@ApiModelProperty("复核单号")
|
||||
private String reviewOrderNumber;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("出库单ID")
|
||||
private Long outOrderId;
|
||||
|
||||
@ApiModelProperty("出库单号")
|
||||
private String outOrderNumber;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("组织ID")
|
||||
private Long organizationId;
|
||||
|
||||
@ApiModelProperty("组织名称")
|
||||
private String organizationName;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("一级组织ID")
|
||||
private Long topOrganizationId;
|
||||
|
||||
@@ -50,6 +56,7 @@ public class ReviewOrderPO extends BaseVOEntity {
|
||||
@ApiModelProperty("复核下发时间")
|
||||
private Date issuedTime;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("仓库ID")
|
||||
private Long warehouseId;
|
||||
|
||||
@@ -59,6 +66,7 @@ public class ReviewOrderPO extends BaseVOEntity {
|
||||
@ApiModelProperty("仓库名称")
|
||||
private String warehouseName;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("客户ID")
|
||||
private Long customerId;
|
||||
|
||||
@@ -68,6 +76,7 @@ public class ReviewOrderPO extends BaseVOEntity {
|
||||
@ApiModelProperty("客户名称")
|
||||
private String customerName;
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
@ApiModelProperty("货主ID")
|
||||
private Long shipperId;
|
||||
|
||||
|
||||
@@ -392,4 +392,22 @@ public class StockInOrder extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("任务下发用户ID")
|
||||
private String taskIssueUserId;
|
||||
|
||||
// ========== PDA入库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL,单张)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
+10
@@ -32,4 +32,14 @@ public interface StockInOrderMapper extends BaseMapper<StockInOrder>
|
||||
StockInOrderPO selectByInOrderNumber(@Param("inOrderNumber") String inOrderNumber);
|
||||
|
||||
String queryWarehouseUserId(@Param("organizationId") Long organizationId, @Param("warehouseId") Long warehouseId, @Param("topOrganizationId") Long topOrganizationId);
|
||||
|
||||
void updateExecution(@Param("inOrderNumber") String inOrderNumber, @Param("remark") String remark);
|
||||
|
||||
/**
|
||||
* 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(用于取最大序号+1,防止删单后单号重复)
|
||||
* 包含: reserve_stock_in_order, reservation_stock_in_order, execution_stock_in_order, WMS stock_in_order
|
||||
*/
|
||||
List<String> getMaxStockInOrderByPrefixAndOrgAndWarehouse(@Param("prefix") String prefix,
|
||||
@Param("organizationId") Long organizationId,
|
||||
@Param("warehouseId") Long warehouseId);
|
||||
}
|
||||
+21
@@ -456,4 +456,25 @@ public class StockInOrderPO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("任务下发用户ID")
|
||||
private String taskIssueUserId;
|
||||
|
||||
// ========== PDA入库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名状态名称")
|
||||
private String signatureStatusName;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
+28
@@ -449,6 +449,34 @@ public class StockInOrderDO extends BaseVOEntity {
|
||||
@ApiModelProperty("任务移除用户ID")
|
||||
private String removeUserId;
|
||||
|
||||
// ========== PDA入库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名状态名称")
|
||||
private String signatureStatusName;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
|
||||
/**
|
||||
* PDA入库签名列表专用:作业任务人员模糊查询字段(与 workUserName LIKE 同义,
|
||||
* 单独提供是为了避免和现有 workUserName(精确/等值)逻辑冲突)。
|
||||
*/
|
||||
@ApiModelProperty("作业任务人员模糊查询")
|
||||
private String workUserNameLike;
|
||||
|
||||
@ApiModelProperty("是否返回物料明细(导出时传 true)")
|
||||
private Boolean needDetail;
|
||||
}
|
||||
+237
-5
@@ -1,5 +1,6 @@
|
||||
package com.mhd.wms.domain.stockInOrder.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
@@ -16,8 +17,11 @@ import com.mhd.common.core.utils.bean.BeanUtils;
|
||||
import com.mhd.common.core.utils.uuid.IdGenerator;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.OmsServiceFeign;
|
||||
import com.mhd.system.api.SystemServiceFeign;
|
||||
import com.mhd.system.api.domain.ElectronicSignatureSyncDTO;
|
||||
import com.mhd.system.api.domain.PackDetailFeignPO;
|
||||
import com.mhd.system.api.domain.WarehouseFeignPO;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import com.mhd.wms.domain.inMaterialDetail.entity.InMaterialDetail;
|
||||
import com.mhd.wms.domain.inMaterialDetail.repository.facade.IInMaterialDetailService;
|
||||
@@ -42,6 +46,7 @@ import com.mhd.wms.domain.shelfMaterialDetail.repository.po.ShelfMaterialDetailP
|
||||
import com.mhd.wms.domain.shelfMaterialDetail.repository.todo.ShelfMaterialDetailDO;
|
||||
import com.mhd.wms.domain.stockInOrder.entity.StockInOrder;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.facade.IStockInOrderService;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.mapper.StockInOrderMapper;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.po.StockInOrderPO;
|
||||
import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
|
||||
import com.mhd.wms.domain.stockReceiptOrder.entity.StockReceiptOrder;
|
||||
@@ -82,6 +87,8 @@ public class StockInOrderDomainService {
|
||||
@Autowired
|
||||
private IStockInOrderService stockInOrderService;
|
||||
@Autowired
|
||||
private StockInOrderMapper stockInOrderMapper;
|
||||
@Autowired
|
||||
private IInMaterialDetailService materialDetailService;
|
||||
@Autowired
|
||||
private StockReceiptOrderDomainService stockReceiptOrderDomainService;
|
||||
@@ -97,6 +104,8 @@ public class StockInOrderDomainService {
|
||||
private IMaterialWarehouseControlService materialWarehouseControlService;
|
||||
@Resource
|
||||
private SystemServiceFeign systemServiceFeign;
|
||||
@Resource
|
||||
private OmsServiceFeign omsServiceFeign;
|
||||
@Autowired
|
||||
private IReceiptMaterialDetailService receiptMaterialDetailService;
|
||||
@Autowired
|
||||
@@ -115,13 +124,99 @@ public class StockInOrderDomainService {
|
||||
return stockInOrderService.queryList(stockInOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA入库签名列表查询
|
||||
*
|
||||
* <p>参照简易模式快捷入库列表({@link #queryList(StockInOrderDO)})实现,
|
||||
* 默认查询 status=已入库(5) 的入库单;同时支持「作业任务人员」模糊查询及其他业务字段。</p>
|
||||
*
|
||||
* @param stockInOrderDO 查询条件
|
||||
* @return 入库单列表
|
||||
*/
|
||||
public List<StockInOrderPO> querySignatureList(StockInOrderDO stockInOrderDO) {
|
||||
// 入库签名列表固定按「已入库」状态过滤
|
||||
if (stockInOrderDO.getStatus() == null) {
|
||||
// stockInOrderDO.setStatus(5);
|
||||
List<Integer> list = new ArrayList<>();
|
||||
list.add(2);
|
||||
list.add(3);
|
||||
list.add(4);
|
||||
list.add(5);
|
||||
stockInOrderDO.setStatusList(list);
|
||||
}
|
||||
// 委托给 queryList,复用 selectStockInOrderPo1 中现有的查询条件(包括新加的 workUserNameLike、signatureStatus)
|
||||
return stockInOrderService.queryList(stockInOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从单号列表中提取最大序号
|
||||
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||
* 即使中间有删单,也能保证序号递增不重复
|
||||
*
|
||||
* @param orderNumbers 匹配的单号列表
|
||||
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||
* @return 最大序号值,列表为空时返回0
|
||||
*/
|
||||
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
int maxSeq = 0;
|
||||
for (String orderNumber : orderNumbers) {
|
||||
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||
try {
|
||||
String seqStr = orderNumber.substring(prefixLength);
|
||||
int seq = Integer.parseInt(seqStr);
|
||||
if (seq > maxSeq) {
|
||||
maxSeq = seq;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// 序号部分非数字,跳过
|
||||
}
|
||||
}
|
||||
}
|
||||
return maxSeq;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增入库单
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insert(StockInOrderDO stockInOrderDO) {
|
||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
||||
// stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
||||
|
||||
//设置入库单号
|
||||
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("获取仓库信息失败");
|
||||
}
|
||||
//仓库信息
|
||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||
if (prefix == null || prefix.isEmpty()) {
|
||||
prefix = "RK";
|
||||
}
|
||||
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||
String datePrefix = prefix + dateStr;
|
||||
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||
} else {
|
||||
//历史累加: 前缀 + 历史最大序号+1
|
||||
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||
}
|
||||
|
||||
// //设置默认值
|
||||
// setDefaultValues(stockInOrderDO);
|
||||
// //设置物料信息
|
||||
@@ -146,8 +241,35 @@ public class StockInOrderDomainService {
|
||||
*/
|
||||
public Boolean batchInsert(List<StockInOrderDO> stockInOrderDOList) {
|
||||
for (StockInOrderDO stockInOrderDO : stockInOrderDOList){
|
||||
if (StringUtils.isBlank(stockInOrderDO.getInOrderNumber())){
|
||||
stockInOrderDO.setInOrderNumber(OrderSequence.getOrderCode("RK"));
|
||||
//设置入库单号
|
||||
Long warehouseId = stockInOrderDO.getWarehouseId();
|
||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("获取仓库信息失败");
|
||||
}
|
||||
//仓库信息
|
||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||
String prefix = warehouseFeignPO.getInOrderNoPrefix();
|
||||
if (prefix == null || prefix.isEmpty()) {
|
||||
prefix = "RK";
|
||||
}
|
||||
Long organizationId = stockInOrderDO.getOrganizationId();
|
||||
Long warehouseIdForCount = stockInOrderDO.getWarehouseId();
|
||||
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||
String datePrefix = prefix + dateStr;
|
||||
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockInOrderDO.setInOrderNumber(datePrefix + seq);
|
||||
} else {
|
||||
//历史累加: 前缀 + 历史最大序号+1
|
||||
List<String> orderNumbers = stockInOrderMapper.getMaxStockInOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockInOrderDO.setInOrderNumber(prefix + seq);
|
||||
}
|
||||
// //设置物料信息
|
||||
// setMaterialDetailInfo(stockInOrderDO);
|
||||
@@ -403,6 +525,8 @@ public class StockInOrderDomainService {
|
||||
if (StringUtils.isEmpty(inOrderNumber)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
StockInOrder stockInOrder = stockInOrderService.getOne(new QueryWrapper<StockInOrder>().lambda()
|
||||
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
|
||||
.eq(StockInOrder::getDelFlag, 1)
|
||||
@@ -410,6 +534,15 @@ public class StockInOrderDomainService {
|
||||
if (stockInOrder == null || AUDIT_STATUS_PASS == stockInOrder.getAuditStatus()) {
|
||||
return;
|
||||
}
|
||||
|
||||
//生成电子签名
|
||||
StockInOrderPO info = getInfo(stockInOrder.getInOrderId());
|
||||
List<InMaterialDetail> materialDetails = materialDetailService.list(new QueryWrapper<InMaterialDetail>().lambda()
|
||||
.eq(InMaterialDetail::getInOrderNumber, inOrderNumber)
|
||||
.eq(InMaterialDetail::getDelFlag, 1));
|
||||
genElectronicSignature(info,materialDetails);
|
||||
|
||||
|
||||
StockInOrderDO auditDO = new StockInOrderDO();
|
||||
auditDO.setInOrderIds(Collections.singletonList(stockInOrder.getInOrderId()));
|
||||
auditDO.setAuditStatus(AUDIT_STATUS_PASS);
|
||||
@@ -503,6 +636,52 @@ public class StockInOrderDomainService {
|
||||
.in(StockInOrder::getInOrderId, stockInOrderDO.getInOrderIds()));
|
||||
}
|
||||
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean remarkEasyMode(StockInOrderDO stockInOrderDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
|
||||
String userRealName = loginUser.getUserPo() != null && loginUser.getUserPo().getUserName() != null
|
||||
? loginUser.getUserPo().getUserName()
|
||||
: (loginUser.getRealname() != null ? loginUser.getRealname() : loginUser.getUsername());
|
||||
String inOrderNumber = stockInOrderDO.getInOrderNumber();
|
||||
|
||||
List<InMaterialDetailDO> materialDetailList = stockInOrderDO.getMaterialDetailList();
|
||||
List<InMaterialDetailDO> receiptMaterialDetailList = materialDetailList.stream()
|
||||
.filter(m -> m.getRemark() != null && m.getRemark() != "")
|
||||
.collect(Collectors.toList());
|
||||
String orderRemark = stockInOrderDO.getRemark();
|
||||
if (receiptMaterialDetailList!=null && receiptMaterialDetailList.size()>0) {
|
||||
for (InMaterialDetailDO inMaterialDetailDO : receiptMaterialDetailList) {
|
||||
String notifyCustomerAbnormal = inMaterialDetailDO.getNotifyCustomerAbnormal();
|
||||
String isThawWaterstain = inMaterialDetailDO.getIsThawWaterstain();
|
||||
String packageDamaged = inMaterialDetailDO.getPackageDamaged();
|
||||
String arrivalAcceptQualified = inMaterialDetailDO.getArrivalAcceptQualified();
|
||||
String remark = inMaterialDetailDO.getRemark();
|
||||
Long materialDetailId = inMaterialDetailDO.getMaterialDetailId();
|
||||
InMaterialDetail inMaterialDetail = materialDetailService.getById(materialDetailId);
|
||||
inMaterialDetail.setNotifyCustomerAbnormal(notifyCustomerAbnormal);
|
||||
inMaterialDetail.setIsThawWaterstain(isThawWaterstain);
|
||||
inMaterialDetail.setPackageDamaged(packageDamaged);
|
||||
inMaterialDetail.setArrivalAcceptQualified(arrivalAcceptQualified);
|
||||
inMaterialDetail.setRemark(remark);
|
||||
orderRemark = orderRemark + "," + remark;
|
||||
materialDetailService.updateById(inMaterialDetail);
|
||||
}
|
||||
}
|
||||
if (orderRemark != null && !orderRemark.isEmpty()) {
|
||||
String[] remarks = orderRemark.split(",");
|
||||
List<String> list = Arrays.asList(remarks);
|
||||
orderRemark = list.stream().distinct().collect(Collectors.joining(","));
|
||||
stockInOrderService.update(null, new UpdateWrapper<StockInOrder>().lambda()
|
||||
.set(StockInOrder::getRemark, orderRemark)
|
||||
.eq(StockInOrder::getInOrderNumber, inOrderNumber)
|
||||
.eq(StockInOrder::getDelFlag, 1));
|
||||
stockInOrderMapper.updateExecution(inOrderNumber, orderRemark);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean receiptEasyMode(StockInOrderDO stockInOrderDO) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
@@ -592,7 +771,8 @@ public class StockInOrderDomainService {
|
||||
stockShelfOrder = list.get(0);
|
||||
} else {
|
||||
BeanUtils.copyProperties(stockReceiptOrder, stockShelfOrder);
|
||||
stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
|
||||
// stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
|
||||
stockShelfOrder.setShelfOrderNumber("SH-"+inOrderNumber);
|
||||
stockShelfOrder.setBatchNo(batchNo);
|
||||
stockShelfOrderService.save(stockShelfOrder);
|
||||
}
|
||||
@@ -861,7 +1041,8 @@ public class StockInOrderDomainService {
|
||||
stockInOrderPOList.forEach(p -> {
|
||||
StockReceiptOrderDO stockReceiptOrderDO = new StockReceiptOrderDO();
|
||||
BeanUtils.copyProperties(p, stockReceiptOrderDO);
|
||||
stockReceiptOrderDO.setReceiptOrderNumber(OrderSequence.getOrderCode("SH"));
|
||||
stockReceiptOrderDO.setReceiptOrderNumber("RV-"+p.getInOrderNumber());
|
||||
// stockReceiptOrderDO.setReceiptOrderNumber(OrderSequence.getOrderCode("SH"));
|
||||
List<InMaterialDetailPO> inMaterialDetailPOs = inMaterialDetailListMap.get(p.getInOrderNumber());
|
||||
if (!CollectionUtils.isEmpty(inMaterialDetailPOs)){
|
||||
List<ReceiptMaterialDetailDO> receiptMaterialDetailDOList = new ArrayList<>();
|
||||
@@ -1227,4 +1408,55 @@ public class StockInOrderDomainService {
|
||||
public List<InMaterialDetailPO> queryNoticePrintDetail(StockInOrderDO stockInOrderDO) {
|
||||
return stockInOrderService.queryNoticePrintDetail(stockInOrderDO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 生成入库电子签名记录(上架完成触发)
|
||||
*/
|
||||
private void genElectronicSignature(StockInOrderPO stockShelfOrderPO, List<InMaterialDetail> shelfMaterialDetailList) {
|
||||
try {
|
||||
ElectronicSignatureSyncDTO dto = new ElectronicSignatureSyncDTO();
|
||||
dto.setOrderId(stockShelfOrderPO.getInOrderId());
|
||||
dto.setOrderNumber(stockShelfOrderPO.getInOrderNumber());
|
||||
dto.setOrderType("IN");
|
||||
dto.setOrganizationId(stockShelfOrderPO.getOrganizationId());
|
||||
dto.setOrganizationName(stockShelfOrderPO.getOrganizationName());
|
||||
dto.setTopOrganizationId(stockShelfOrderPO.getTopOrganizationId());
|
||||
dto.setWarehouseId(stockShelfOrderPO.getWarehouseId());
|
||||
dto.setWarehouseCode(stockShelfOrderPO.getWarehouseCode());
|
||||
dto.setWarehouseName(stockShelfOrderPO.getWarehouseName());
|
||||
|
||||
List<ElectronicSignatureSyncDTO.MaterialDetailItem> items = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(shelfMaterialDetailList)) {
|
||||
for (InMaterialDetail detail : shelfMaterialDetailList) {
|
||||
ElectronicSignatureSyncDTO.MaterialDetailItem item = new ElectronicSignatureSyncDTO.MaterialDetailItem();
|
||||
item.setMaterialBaseInfoId(detail.getMaterialBaseInfoId());
|
||||
item.setMaterialCode(detail.getMaterialCode());
|
||||
item.setMaterialName(detail.getMaterialName());
|
||||
item.setQuantity(detail.getShelvesQuantity());
|
||||
item.setUnitCode(detail.getUnitCode());
|
||||
item.setUnitName(detail.getUnitName());
|
||||
item.setBatchNumber(detail.getBatchNumber());
|
||||
item.setLotNumber(detail.getLotNo());
|
||||
item.setWarehouseId(detail.getWarehouseId());
|
||||
item.setWarehouseCode(detail.getWarehouseCode());
|
||||
item.setWarehouseName(detail.getWarehouseName());
|
||||
item.setStorageSectionId(detail.getStorageSectionId());
|
||||
item.setStorageSectionCode(detail.getStorageCode());
|
||||
item.setStorageSectionName(detail.getStorageName());
|
||||
item.setStorageLocationId(detail.getStorageLocationId());
|
||||
item.setStorageLocationCode(detail.getStorageLocationCode());
|
||||
item.setStorageLocationName(detail.getStorageLocationName());
|
||||
item.setUniqueId(detail.getUniqueId());
|
||||
items.add(item);
|
||||
}
|
||||
}
|
||||
dto.setMaterialDetailList(items);
|
||||
|
||||
log.info("生成入库电子签名记录,订单号:{},物料条目数:{}", stockShelfOrderPO.getInOrderNumber(), items.size());
|
||||
omsServiceFeign.saveSignature(dto);
|
||||
} catch (Exception e) {
|
||||
log.error("生成入库电子签名记录失败,订单号:{}", stockShelfOrderPO.getInOrderNumber(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -434,4 +434,22 @@ public class StockOutOrder extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("任务下发用户ID")
|
||||
private String taskIssueUserId;
|
||||
|
||||
// ========== PDA出库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL,单张)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
+8
@@ -46,4 +46,12 @@ public interface StockOutOrderMapper extends BaseMapper<StockOutOrder> {
|
||||
public String getOpWhLoc(@Param("id") Long id);
|
||||
|
||||
public String getInLotNo(@Param("inOrderNumber") String inOrderNumber, @Param("baseId") Long baseId);
|
||||
|
||||
/**
|
||||
* 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(用于取最大序号+1,防止删单后单号重复)
|
||||
* 包含: reserve_stock_in_order, reservation_stock_in_order, execution_stock_in_order, WMS stock_in_order
|
||||
*/
|
||||
List<String> getMaxStockOutOrderByPrefixAndOrgAndWarehouse(@Param("prefix") String prefix,
|
||||
@Param("organizationId") Long organizationId,
|
||||
@Param("warehouseId") Long warehouseId);
|
||||
}
|
||||
+24
@@ -463,4 +463,28 @@ public class StockOutOrderPO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("任务下发用户ID")
|
||||
private String taskIssueUserId;
|
||||
|
||||
// ========== PDA出库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名状态名称")
|
||||
private String signatureStatusName;
|
||||
|
||||
@ApiModelProperty("出库单状态名称")
|
||||
private String statusName;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
}
|
||||
+22
@@ -516,4 +516,26 @@ public class StockOutOrderDO extends BaseVOEntity {
|
||||
|
||||
@ApiModelProperty("是否返回物料明细(导出时传 true)")
|
||||
private Boolean needDetail;
|
||||
|
||||
// ========== PDA出库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64/URL)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片(逗号分隔多张OSS URL)")
|
||||
private String evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
|
||||
/** PDA出库签名列表专用:作业任务人员模糊查询字段 */
|
||||
@ApiModelProperty("作业任务人员模糊查询")
|
||||
private String workUserNameLike;
|
||||
}
|
||||
+225
-9
@@ -1,5 +1,6 @@
|
||||
package com.mhd.wms.domain.stockOutOrder.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@@ -14,10 +15,9 @@ import com.mhd.common.core.utils.StringUtils;
|
||||
import com.mhd.common.core.utils.bean.BeanUtils;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.OmsServiceFeign;
|
||||
import com.mhd.system.api.SystemServiceFeign;
|
||||
import com.mhd.system.api.domain.BatchDetailFeignPO;
|
||||
import com.mhd.system.api.domain.DeliveryDetailsLink;
|
||||
import com.mhd.system.api.domain.PackDetailFeignPO;
|
||||
import com.mhd.system.api.domain.*;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
import com.mhd.wms.application.service.handoverTaskOrder.HandoverTaskOrderApplicationService;
|
||||
import com.mhd.wms.application.service.pickingOrder.PickingOrderApplicationService;
|
||||
@@ -88,6 +88,7 @@ import com.mhd.wms.domain.stockInOrder.repository.todo.StockInOrderDO;
|
||||
import com.mhd.wms.domain.stockInOrder.service.StockInOrderDomainService;
|
||||
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.po.StockOutOrderPO;
|
||||
import com.mhd.wms.domain.stockOutOrder.repository.todo.StockOutOrderDO;
|
||||
import com.mhd.wms.domain.waveOrder.factorys.WaveOrderServiceFactory;
|
||||
@@ -168,6 +169,8 @@ public class StockOutOrderDomainService {
|
||||
@Autowired
|
||||
private StockInOrderMapper stockInOrderMapper;
|
||||
@Autowired
|
||||
private StockOutOrderMapper stockOutOrderMapper;
|
||||
@Autowired
|
||||
private PickingOrderApplicationService pickingOrderApplicationService;
|
||||
@Autowired
|
||||
private HandoverTaskOrderApplicationService handoverTaskOrderApplicationService;
|
||||
@@ -177,6 +180,8 @@ public class StockOutOrderDomainService {
|
||||
private ReviewOrderMapper reviewOrderMapper;
|
||||
@Autowired
|
||||
private ReviewMaterialDetailMapper reviewMaterialDetailMapper;
|
||||
@Autowired
|
||||
private OmsServiceFeign omsServiceFeign;
|
||||
|
||||
/**
|
||||
* 分页查询出库单列表
|
||||
@@ -185,13 +190,89 @@ public class StockOutOrderDomainService {
|
||||
return stockOutOrderService.queryList(stockOutOrderDO);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA出库签名列表查询,默认 status=已出库(9)
|
||||
*/
|
||||
public List<StockOutOrderPO> querySignatureList(StockOutOrderDO stockOutOrderDO) {
|
||||
if (stockOutOrderDO.getStatus() == null) {
|
||||
stockOutOrderDO.setStatus(9);
|
||||
}
|
||||
return stockOutOrderService.queryList(stockOutOrderDO);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 从单号列表中提取最大序号
|
||||
* 单号格式: prefix + 数字序号(如 RK260807001 中 prefix=RK260807, 序号=001)
|
||||
* 即使中间有删单,也能保证序号递增不重复
|
||||
*
|
||||
* @param orderNumbers 匹配的单号列表
|
||||
* @param prefixLength 前缀长度(序号从该位置开始截取)
|
||||
* @return 最大序号值,列表为空时返回0
|
||||
*/
|
||||
private int extractMaxSequenceNumber(List<String> orderNumbers, int prefixLength) {
|
||||
if (orderNumbers == null || orderNumbers.isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
int maxSeq = 0;
|
||||
for (String orderNumber : orderNumbers) {
|
||||
if (orderNumber != null && orderNumber.length() > prefixLength) {
|
||||
try {
|
||||
String seqStr = orderNumber.substring(prefixLength);
|
||||
int seq = Integer.parseInt(seqStr);
|
||||
if (seq > maxSeq) {
|
||||
maxSeq = seq;
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// 序号部分非数字,跳过
|
||||
}
|
||||
}
|
||||
}
|
||||
return maxSeq;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增出库单
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insert(StockOutOrderDO stockOutOrderDO) {
|
||||
stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
|
||||
// stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
|
||||
|
||||
//设置单号
|
||||
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("获取仓库信息失败");
|
||||
}
|
||||
//仓库信息
|
||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
||||
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
||||
prefix = warehouseFeignPO.getSampleOutOrderNoPrefix();
|
||||
}
|
||||
if (prefix == null || prefix.isEmpty()) {
|
||||
prefix = "CK";
|
||||
}
|
||||
Long organizationId = stockOutOrderDO.getOrganizationId();
|
||||
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
|
||||
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||
String datePrefix = prefix + dateStr;
|
||||
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockOutOrderDO.setOutOrderNumber(datePrefix + seq);
|
||||
} else {
|
||||
//历史累加: 前缀 + 历史最大序号+1
|
||||
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockOutOrderDO.setOutOrderNumber(prefix + seq);
|
||||
}
|
||||
|
||||
//设置物料信息
|
||||
//setMaterialDetailInfo(stockOutOrderDO);
|
||||
//统计种类
|
||||
@@ -219,8 +300,38 @@ public class StockOutOrderDomainService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean batchInsert(List<StockOutOrderDO> stockOutOrderDOList) {
|
||||
for (StockOutOrderDO stockOutOrderDO : stockOutOrderDOList){
|
||||
if (StringUtils.isBlank(stockOutOrderDO.getOutOrderNumber())){
|
||||
stockOutOrderDO.setOutOrderNumber(OrderSequence.getOrderCode("CK"));
|
||||
//设置单号
|
||||
Long warehouseId = stockOutOrderDO.getWarehouseId();
|
||||
AjaxResult ajaxResult = systemServiceFeign.getWarehouseInfoByWarehouseId(warehouseId);
|
||||
if (!"200".equals(String.valueOf(ajaxResult.get("code")))) {
|
||||
throw new ServiceException("获取仓库信息失败");
|
||||
}
|
||||
//仓库信息
|
||||
WarehouseFeignPO warehouseFeignPO = com.alibaba.fastjson.JSON.parseObject(com.alibaba.fastjson2.JSONObject.toJSONString(ajaxResult.get("data")), WarehouseFeignPO.class);
|
||||
String orderNoGenerateRule = warehouseFeignPO.getOrderNoGenerateRule();
|
||||
String prefix = warehouseFeignPO.getOutOrderNoPrefix();
|
||||
if ("yang_pin_chu_ku".equals(stockOutOrderDO.getBusinessType())) {
|
||||
prefix = warehouseFeignPO.getSampleOutOrderNoPrefix();
|
||||
}
|
||||
if (prefix == null || prefix.isEmpty()) {
|
||||
prefix = "CK";
|
||||
}
|
||||
Long organizationId = stockOutOrderDO.getOrganizationId();
|
||||
Long warehouseIdForCount = stockOutOrderDO.getWarehouseId();
|
||||
if (orderNoGenerateRule != null && "0".equals(orderNoGenerateRule)) {
|
||||
//日期累加: 前缀 + 当前日期yymmdd + 当天最大序号+1
|
||||
String dateStr = new SimpleDateFormat("yyMMdd").format(new Date());
|
||||
String datePrefix = prefix + dateStr;
|
||||
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(datePrefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, datePrefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockOutOrderDO.setOutOrderNumber(datePrefix + seq);
|
||||
} else {
|
||||
//历史累加: 前缀 + 历史最大序号+1
|
||||
List<String> orderNumbers = stockOutOrderMapper.getMaxStockOutOrderByPrefixAndOrgAndWarehouse(prefix, organizationId, warehouseIdForCount);
|
||||
int maxSeq = extractMaxSequenceNumber(orderNumbers, prefix.length());
|
||||
String seq = String.format("%03d", maxSeq + 1);
|
||||
stockOutOrderDO.setOutOrderNumber(prefix + seq);
|
||||
}
|
||||
//设置物料信息
|
||||
setMaterialDetailInfo(stockOutOrderDO);
|
||||
@@ -785,7 +896,8 @@ public class StockOutOrderDomainService {
|
||||
PickingOrderDO pickingOrderDO = new PickingOrderDO();
|
||||
BeanUtils.copyProperties(p, pickingOrderDO);
|
||||
pickingOrderDO.setOrderNumber(p.getOutOrderNumber());
|
||||
pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
|
||||
// pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
|
||||
pickingOrderDO.setPickingOrderNumber("PK-"+p.getOutOrderNumber());
|
||||
pickingOrderDO.setQuantity(p.getAllocationQuantity());
|
||||
if (pickingOrderDO.getWarehouseId() == null && p.getWarehouseId() != null) {
|
||||
pickingOrderDO.setWarehouseId(p.getWarehouseId());
|
||||
@@ -1089,6 +1201,8 @@ public class StockOutOrderDomainService {
|
||||
handoverTaskOrderDO.setHandoverTaskOrderIds(handoverTaskOrderId);
|
||||
handoverTaskOrderDomainService.completeHandover(handoverTaskOrderDO);
|
||||
}
|
||||
//出库交接后生成电子签名记录
|
||||
genElectronicSignature(stockOutOrder);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
@@ -1122,7 +1236,7 @@ public class StockOutOrderDomainService {
|
||||
PickingOrderDO pickingOrderDO = new PickingOrderDO();
|
||||
BeanUtils.copyProperties(p, pickingOrderDO);
|
||||
pickingOrderDO.setOrderNumber(p.getOutOrderNumber());
|
||||
pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
|
||||
pickingOrderDO.setPickingOrderNumber("PK-"+p.getOutOrderNumber());
|
||||
pickingOrderDO.setQuantity(p.getAllocationQuantity());
|
||||
if (pickingOrderDO.getWarehouseId() == null && p.getWarehouseId() != null) {
|
||||
pickingOrderDO.setWarehouseId(p.getWarehouseId());
|
||||
@@ -2038,7 +2152,7 @@ public class StockOutOrderDomainService {
|
||||
handoverTaskOrderDO.setShipperId(stockOutOrderPO.getShipperId());
|
||||
handoverTaskOrderDO.setShipperName(stockOutOrderPO.getShipperName());
|
||||
handoverTaskOrderDO.setSerialNumber(OrderSequence.getOrderCode("JJZYLS"));
|
||||
handoverTaskOrderDO.setTaskNumber(OrderSequence.getOrderCode("JJZY"));
|
||||
handoverTaskOrderDO.setTaskNumber("HD-"+stockOutOrderPO.getOutOrderNumber());
|
||||
handoverTaskOrderDO.setStatus(1);
|
||||
handoverTaskOrderDO.setOrderTypeCode(stockOutOrderPO.getOrderTypeCode());
|
||||
handoverTaskOrderDO.setOrderTypeName(stockOutOrderPO.getOrderTypeName());
|
||||
@@ -2373,4 +2487,106 @@ public class StockOutOrderDomainService {
|
||||
public List<OutMaterialDetailPO> queryOutStockNoticePrintDetailGF(StockOutOrderDTO stockOutOrderDTO) {
|
||||
return stockOutOrderService.queryOutStockNoticePrintDetailGF(stockOutOrderDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成出库电子签名记录(出库交接触发,StockOutOrder实体入口)
|
||||
*/
|
||||
private void genElectronicSignature(StockOutOrder stockOutOrder) {
|
||||
try {
|
||||
StockOutOrderDO queryDO = new StockOutOrderDO();
|
||||
queryDO.setOutOrderNumber(stockOutOrder.getOutOrderNumber());
|
||||
List<StockOutOrderPO> poList = stockOutOrderService.queryList(queryDO);
|
||||
if (CollectionUtil.isEmpty(poList)) {
|
||||
log.warn("生成出库电子签名记录失败,未查到出库单:{}", stockOutOrder.getOutOrderNumber());
|
||||
return;
|
||||
}
|
||||
genElectronicSignature(poList.get(0));
|
||||
} catch (Exception e) {
|
||||
log.error("生成出库电子签名记录失败,订单号:{}", stockOutOrder.getOutOrderNumber(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成出库电子签名记录
|
||||
*/
|
||||
private void genElectronicSignature(StockOutOrderPO stockOutOrderPO) {
|
||||
try {
|
||||
// 查询出库物料明细
|
||||
List<OutMaterialDetail> detailList = outMaterialDetailService.list(
|
||||
new LambdaQueryWrapper<OutMaterialDetail>()
|
||||
.eq(OutMaterialDetail::getOutOrderNumber, stockOutOrderPO.getOutOrderNumber()));
|
||||
|
||||
ElectronicSignatureSyncDTO dto = new ElectronicSignatureSyncDTO();
|
||||
dto.setOrderId(stockOutOrderPO.getOutOrderId());
|
||||
dto.setOrderNumber(stockOutOrderPO.getOutOrderNumber());
|
||||
dto.setOrderType("OUT");
|
||||
dto.setOrganizationId(stockOutOrderPO.getOrganizationId());
|
||||
dto.setOrganizationName(stockOutOrderPO.getOrganizationName());
|
||||
dto.setTopOrganizationId(stockOutOrderPO.getTopOrganizationId());
|
||||
dto.setWarehouseId(stockOutOrderPO.getWarehouseId());
|
||||
dto.setWarehouseCode(stockOutOrderPO.getWarehouseCode());
|
||||
dto.setWarehouseName(stockOutOrderPO.getWarehouseName());
|
||||
|
||||
List<ElectronicSignatureSyncDTO.MaterialDetailItem> items = new ArrayList<>();
|
||||
if (org.springframework.util.CollectionUtils.isEmpty(detailList)) {
|
||||
// 回退:直接通过 IOutMaterialDetailService 查询 PO 列表
|
||||
OutMaterialDetailDO queryDO = new OutMaterialDetailDO();
|
||||
queryDO.setOutOrderNumber(stockOutOrderPO.getOutOrderNumber());
|
||||
List<OutMaterialDetailPO> poList = outMaterialDetailService.queryList(queryDO);
|
||||
if (!org.springframework.util.CollectionUtils.isEmpty(poList)) {
|
||||
for (OutMaterialDetailPO detail : poList) {
|
||||
ElectronicSignatureSyncDTO.MaterialDetailItem item = new ElectronicSignatureSyncDTO.MaterialDetailItem();
|
||||
item.setMaterialBaseInfoId(detail.getMaterialBaseInfoId());
|
||||
item.setMaterialCode(detail.getMaterialCode());
|
||||
item.setMaterialName(detail.getMaterialName());
|
||||
item.setQuantity(detail.getCheckQuantity());
|
||||
item.setUnitCode(detail.getUnitCode());
|
||||
item.setUnitName(detail.getUnitName());
|
||||
item.setBatchNumber(detail.getBatchNumber());
|
||||
item.setLotNumber(detail.getLotNo());
|
||||
item.setWarehouseId(detail.getWarehouseId());
|
||||
item.setWarehouseCode(detail.getWarehouseCode());
|
||||
item.setWarehouseName(detail.getWarehouseName());
|
||||
item.setStorageSectionId(detail.getStorageSectionId());
|
||||
item.setStorageSectionCode(detail.getStorageCode());
|
||||
item.setStorageSectionName(detail.getStorageName());
|
||||
item.setStorageLocationId(detail.getStorageLocationId());
|
||||
item.setStorageLocationCode(detail.getStorageLocationCode());
|
||||
item.setStorageLocationName(detail.getStorageLocationName());
|
||||
item.setUniqueId(detail.getUniqueId());
|
||||
items.add(item);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (OutMaterialDetail detail : detailList) {
|
||||
ElectronicSignatureSyncDTO.MaterialDetailItem item = new ElectronicSignatureSyncDTO.MaterialDetailItem();
|
||||
item.setMaterialBaseInfoId(detail.getMaterialBaseInfoId());
|
||||
item.setMaterialCode(detail.getMaterialCode());
|
||||
item.setMaterialName(detail.getMaterialName());
|
||||
item.setQuantity(detail.getCheckQuantity());
|
||||
item.setUnitCode(detail.getUnitCode());
|
||||
item.setUnitName(detail.getUnitName());
|
||||
item.setBatchNumber(detail.getBatchNumber());
|
||||
item.setLotNumber(detail.getLotNo());
|
||||
item.setWarehouseId(detail.getWarehouseId());
|
||||
item.setWarehouseCode(detail.getWarehouseCode());
|
||||
item.setWarehouseName(detail.getWarehouseName());
|
||||
item.setStorageSectionId(detail.getStorageSectionId());
|
||||
item.setStorageSectionCode(detail.getStorageCode());
|
||||
item.setStorageSectionName(detail.getStorageName());
|
||||
item.setStorageLocationId(detail.getStorageLocationId());
|
||||
item.setStorageLocationCode(detail.getStorageLocationCode());
|
||||
item.setStorageLocationName(detail.getStorageLocationName());
|
||||
item.setUniqueId(detail.getUniqueId());
|
||||
items.add(item);
|
||||
}
|
||||
}
|
||||
dto.setMaterialDetailList(items);
|
||||
|
||||
log.info("生成出库电子签名记录,订单号:{},物料条目数:{}", stockOutOrderPO.getOutOrderNumber(), items.size());
|
||||
omsServiceFeign.saveSignature(dto);
|
||||
} catch (Exception e) {
|
||||
log.error("生成出库电子签名记录失败,订单号:{}", stockOutOrderPO.getOutOrderNumber(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -173,7 +173,7 @@ public class StockReceiptOrderDomainService {
|
||||
stockReceiptOrderDOList.forEach(stockReceiptOrderDO -> {
|
||||
StockReceiptOrder stockReceiptOrder = JSONUtil.toBean(JSONUtil.toJsonStr(stockReceiptOrderDO), StockReceiptOrder.class);
|
||||
// 仓库以入库单为准;delive_task 在 genDeliveTask 中从 stock_in_order 读取。收货单实体仓库字段 exist=false 不落库。
|
||||
stockReceiptOrder.setReceiptOrderNumber(OrderSequence.getOrderCode("SH"));
|
||||
stockReceiptOrder.setReceiptOrderNumber("RV-"+stockReceiptOrderDO.getInOrderNumber());
|
||||
stockReceiptOrder.setCreateBy(loginUser.getUserid());
|
||||
stockReceiptOrder.setCreateByName(userRealName);
|
||||
stockReceiptOrder.setCreateTime(new Date());
|
||||
@@ -1583,7 +1583,7 @@ public class StockReceiptOrderDomainService {
|
||||
} else {
|
||||
stockShelfOrderDO.setTaskDistributionTime(null);
|
||||
}
|
||||
stockShelfOrderDO.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
|
||||
stockShelfOrderDO.setShelfOrderNumber("SH-"+stockReceiptOrderPO.getInOrderNumber());
|
||||
stockShelfOrderDO.setStatus(1);
|
||||
//本次上架数量
|
||||
BigDecimal receiptQuantity = BigDecimal.ZERO;
|
||||
|
||||
+55
-1
@@ -22,6 +22,7 @@ import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.common.security.utils.SecurityUtils;
|
||||
import com.mhd.system.api.OmsServiceFeign;
|
||||
import com.mhd.system.api.SystemServiceFeign;
|
||||
import com.mhd.system.api.domain.ElectronicSignatureSyncDTO;
|
||||
import com.mhd.system.api.domain.ContainerFeignPO;
|
||||
import com.mhd.system.api.domain.MaterialInventoryOmsParamDO;
|
||||
import com.mhd.system.api.model.LoginUser;
|
||||
@@ -186,7 +187,8 @@ public class StockShelfOrderDomainService {
|
||||
BeanUtils.copyProperties(stockShelfOrderDO, stockShelfOrder, "createBy","createByName","createTime",
|
||||
"updateBy","updateByName","updateTime");
|
||||
if (StringUtils.isBlank(stockShelfOrder.getShelfOrderNumber())){
|
||||
stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
|
||||
// stockShelfOrder.setShelfOrderNumber(OrderSequence.getOrderCode("SJ"));
|
||||
stockShelfOrder.setShelfOrderNumber("SH-"+stockShelfOrder.getInOrderNumber());
|
||||
}
|
||||
// PDA收货完成=是否下发是(1),PC收货完成/无单收货/整单收货=是否下发否(2),DO未设置时默认2
|
||||
stockShelfOrder.setTaskDistribution(stockShelfOrderDO.getTaskDistribution() != null ? stockShelfOrderDO.getTaskDistribution() : 2);
|
||||
@@ -877,6 +879,8 @@ public class StockShelfOrderDomainService {
|
||||
}
|
||||
if (businessOrderNumber != null) stockShelfOrderService.updateOmsReserveOrder(businessOrderNumber,
|
||||
shelvesQuantity == null ? null : shelvesQuantity);
|
||||
//生成电子签名记录
|
||||
// genElectronicSignature(stockShelfOrderPO, shelfMaterialDetailList);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2016,4 +2020,54 @@ public class StockShelfOrderDomainService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成入库电子签名记录(上架完成触发)
|
||||
*/
|
||||
private void genElectronicSignature(StockShelfOrderPO stockShelfOrderPO, List<ShelfMaterialDetail> shelfMaterialDetailList) {
|
||||
try {
|
||||
ElectronicSignatureSyncDTO dto = new ElectronicSignatureSyncDTO();
|
||||
dto.setOrderId(stockShelfOrderPO.getShelfOrderId());
|
||||
dto.setOrderNumber(stockShelfOrderPO.getShelfOrderNumber());
|
||||
dto.setOrderType("IN");
|
||||
dto.setOrganizationId(stockShelfOrderPO.getOrganizationId());
|
||||
dto.setOrganizationName(stockShelfOrderPO.getOrganizationName());
|
||||
dto.setTopOrganizationId(stockShelfOrderPO.getTopOrganizationId());
|
||||
dto.setWarehouseId(stockShelfOrderPO.getWarehouseId());
|
||||
dto.setWarehouseCode(stockShelfOrderPO.getWarehouseCode());
|
||||
dto.setWarehouseName(stockShelfOrderPO.getWarehouseName());
|
||||
|
||||
List<ElectronicSignatureSyncDTO.MaterialDetailItem> items = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(shelfMaterialDetailList)) {
|
||||
for (ShelfMaterialDetail detail : shelfMaterialDetailList) {
|
||||
ElectronicSignatureSyncDTO.MaterialDetailItem item = new ElectronicSignatureSyncDTO.MaterialDetailItem();
|
||||
item.setMaterialBaseInfoId(detail.getMaterialBaseInfoId());
|
||||
item.setMaterialCode(detail.getMaterialCode());
|
||||
item.setMaterialName(detail.getMaterialName());
|
||||
item.setQuantity(detail.getShelvesQuantity());
|
||||
item.setUnitCode(detail.getUnitCode());
|
||||
item.setUnitName(detail.getUnitName());
|
||||
item.setBatchNumber(detail.getBatchNumber());
|
||||
item.setLotNumber(detail.getLotNumber());
|
||||
item.setWarehouseId(detail.getWarehouseId());
|
||||
item.setWarehouseCode(detail.getWarehouseCode());
|
||||
item.setWarehouseName(detail.getWarehouseName());
|
||||
item.setStorageSectionId(detail.getStorageSectionId());
|
||||
item.setStorageSectionCode(detail.getStorageCode());
|
||||
item.setStorageSectionName(detail.getStorageName());
|
||||
item.setStorageLocationId(detail.getStorageLocationId());
|
||||
item.setStorageLocationCode(detail.getStorageLocationCode());
|
||||
item.setStorageLocationName(detail.getStorageLocationName());
|
||||
item.setUniqueId(detail.getUniqueId());
|
||||
items.add(item);
|
||||
}
|
||||
}
|
||||
dto.setMaterialDetailList(items);
|
||||
|
||||
log.info("生成入库电子签名记录,订单号:{},物料条目数:{}", stockShelfOrderPO.getShelfOrderNumber(), items.size());
|
||||
omsServiceFeign.saveSignature(dto);
|
||||
} catch (Exception e) {
|
||||
log.error("生成入库电子签名记录失败,订单号:{}", stockShelfOrderPO.getShelfOrderNumber(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -211,7 +211,7 @@ public class WaveOrderDomainService {
|
||||
PickingOrderDO pickingOrderDO = new PickingOrderDO();
|
||||
BeanUtils.copyProperties(p, pickingOrderDO);
|
||||
pickingOrderDO.setOrderNumber(p.getWaveOrderNumber());
|
||||
pickingOrderDO.setPickingOrderNumber(OrderSequence.getOrderCode("JH"));
|
||||
pickingOrderDO.setPickingOrderNumber("PK-"+p.getWaveOrderNumber());
|
||||
pickingOrderDO.setQuantity(p.getAllocationQuantity());
|
||||
pickingOrderDO.setWeightLimit(p.getWeightLimit());
|
||||
pickingOrderDO.setVolumeLimit(p.getVolumeLimit());
|
||||
@@ -329,4 +329,4 @@ public class WaveOrderDomainService {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
+17
@@ -387,6 +387,23 @@ public class InMaterialDetailDTO extends BaseVOEntity {
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||
private Date drinkDate;
|
||||
|
||||
@ApiModelProperty("来货验收是否合格;1 合格,0 不合格")
|
||||
@Excel(name = "来货验收是否合格;1 合格,0 不合格")
|
||||
private String arrivalAcceptQualified;
|
||||
|
||||
@ApiModelProperty("包装是否破损;1 破损,0 完好")
|
||||
@Excel(name = "包装是否破损;1 破损,0 完好")
|
||||
private String packageDamaged;
|
||||
|
||||
@ApiModelProperty("是否解冻 / 水渍;1 是,0 否")
|
||||
@Excel(name = "是否解冻 / 水渍;1 是,0 否")
|
||||
private String isThawWaterstain;
|
||||
|
||||
@ApiModelProperty("问题货是否已通知客户;1 已通知,0 未通知")
|
||||
@Excel(name = "问题货是否已通知客户;1 已通知,0 未通知")
|
||||
private String notifyCustomerAbnormal;
|
||||
|
||||
//订单行号
|
||||
private String lineNumGw;
|
||||
//物料规格
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.mhd.wms.interfaces.dto.signature;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* PDA批量签名请求DTO
|
||||
*
|
||||
* <p>支持四种签名方式:电子签名、附件上传、扫二维码、系统自动。</p>
|
||||
*/
|
||||
@Data
|
||||
public class BatchSignatureDTO {
|
||||
|
||||
@ApiModelProperty("入库单ID列表")
|
||||
private List<Long> inOrderIds;
|
||||
|
||||
@ApiModelProperty("出库单ID列表")
|
||||
private List<Long> outOrderIds;
|
||||
|
||||
@ApiModelProperty("签名状态:2-已签名(PDA端直接传2表示签完)")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间(PDA端可传当前时间)")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTime;
|
||||
|
||||
@ApiModelProperty("手写签名图片(base64或URL,单张)")
|
||||
private String signaturePic;
|
||||
|
||||
@ApiModelProperty("拍照取证图片列表(base64或URL,多张)")
|
||||
private List<String> evidencePics;
|
||||
|
||||
@ApiModelProperty("签名备注")
|
||||
private String signatureRemark;
|
||||
|
||||
@ApiModelProperty("签名方式:1-扫描二维码 2-电子签名 3-打印手写签名 4-超时自动签名")
|
||||
private Integer signatureMode;
|
||||
}
|
||||
@@ -448,4 +448,24 @@ public class StockInOrderDTO extends StockInOrderBaseDTO {
|
||||
|
||||
@ApiModelProperty("是否返回物料明细(导出时传 true)")
|
||||
private Boolean needDetail;
|
||||
|
||||
// ========== PDA入库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
@ApiModelProperty("签名时间起")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTimeFrom;
|
||||
|
||||
@ApiModelProperty("签名时间止")
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date signatureTimeTo;
|
||||
|
||||
/**
|
||||
* PDA入库签名列表专用:作业任务人员模糊查询字段。
|
||||
*/
|
||||
@ApiModelProperty("作业任务人员(模糊查询)")
|
||||
private String workUserNameLike;
|
||||
}
|
||||
@@ -505,4 +505,12 @@ public class StockOutOrderDTO extends StockOutOrderBaseDTO {
|
||||
|
||||
@ApiModelProperty("是否返回物料明细(导出时传 true)")
|
||||
private Boolean needDetail;
|
||||
|
||||
// ========== PDA出库签名字段 ==========
|
||||
@ApiModelProperty("签名状态:1-待签名 2-已签名")
|
||||
private Integer signatureStatus;
|
||||
|
||||
/** PDA出库签名列表专用:作业任务人员模糊查询字段 */
|
||||
@ApiModelProperty("作业任务人员(模糊查询)")
|
||||
private String workUserNameLike;
|
||||
}
|
||||
+52
@@ -64,6 +64,25 @@ public class StockInOrderApi extends BaseController {
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA入库签名列表查询
|
||||
*
|
||||
* <p>查询入库单状态「已入库」(status=5) 的入库单列表,
|
||||
* 同时支持「作业任务人员」(workUserName) like 模糊查询,
|
||||
* 参照简易模式快捷入库列表实现。响应中包含签名相关字段(签名状态、签名时间、签名图片、签名备注)。</p>
|
||||
*/
|
||||
@ApiOperation("PDA入库签名列表查询")
|
||||
@GetMapping("/signatureList")
|
||||
public TableDataInfo signatureList(StockInOrderDTO stockInOrderDTO) {
|
||||
//转换实体
|
||||
StockInOrderDO stockInOrderDO = stockInOrderAssembler.toDO(stockInOrderDTO);
|
||||
startPage();
|
||||
List<StockInOrderPO> list = stockInOrderApplicationService.querySignatureList(stockInOrderDO);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 编辑入库单
|
||||
*/
|
||||
@@ -219,6 +238,28 @@ public class StockInOrderApi extends BaseController {
|
||||
return AjaxResult.success(stockInOrderApplicationService.receiptEasyMode(stockInOrderDO));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 审核入库单
|
||||
*/
|
||||
@ApiOperation("pda简易模式调整备注")
|
||||
@PostMapping(value = "/remarkEasyMode")
|
||||
public AjaxResult remarkEasyMode(@RequestBody StockInOrderDTO stockInOrderDTO) {
|
||||
StockInOrderDO stockInOrderDO = stockInOrderAssembler.toDO(stockInOrderDTO);
|
||||
List<InMaterialDetailDTO> materialDetailList = stockInOrderDTO.getMaterialDetailList();
|
||||
if (materialDetailList != null && !materialDetailList.isEmpty()) {
|
||||
List<InMaterialDetailDO> inMaterialDetailDOList = new ArrayList<>();
|
||||
for (InMaterialDetailDTO dto : materialDetailList) {
|
||||
InMaterialDetailDO detailDO = new InMaterialDetailDO();
|
||||
BeanUtils.copyProperties(dto, detailDO);
|
||||
inMaterialDetailDOList.add(detailDO);
|
||||
}
|
||||
stockInOrderDO.setMaterialDetailList(inMaterialDetailDOList);
|
||||
}
|
||||
|
||||
return AjaxResult.success(stockInOrderApplicationService.remarkEasyMode(stockInOrderDO));
|
||||
}
|
||||
|
||||
@ApiOperation("pda简易模式修改计划数量")
|
||||
@GetMapping(value = "/updateQuantity")
|
||||
public AjaxResult updateQuantity(@RequestParam BigDecimal quantity,
|
||||
@@ -295,4 +336,15 @@ public class StockInOrderApi extends BaseController {
|
||||
return stockInOrderApplicationService.batchPush(idList);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA批量入库签名
|
||||
*
|
||||
* <p>勾选多条入库记录批量签名,更新入库表的签名状态、签名时间、签名图片、签名备注。</p>
|
||||
*/
|
||||
@ApiOperation("PDA批量入库签名")
|
||||
@PostMapping("/batchSignature")
|
||||
public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
|
||||
return stockInOrderApplicationService.batchSignature(dto);
|
||||
}
|
||||
|
||||
}
|
||||
+27
@@ -116,6 +116,22 @@ public class StockOutOrderApi extends BaseController {
|
||||
return handoverTaskOrderDomainService.customsConfirmOut(outOrderNumbers);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA出库签名列表查询
|
||||
*
|
||||
* <p>查询出库单状态「已出库」(status=9) 的出库单列表,
|
||||
* 支持「作业任务人员」(workUserName) like 模糊查询,
|
||||
* 参照简易模式快捷出库列表实现。</p>
|
||||
*/
|
||||
@ApiOperation("PDA出库签名列表查询")
|
||||
@GetMapping("/signatureList")
|
||||
public TableDataInfo signatureList(StockOutOrderDTO stockOutOrderDTO) {
|
||||
StockOutOrderDO stockOutOrderDO = stockOutOrderAssembler.toDO(stockOutOrderDTO);
|
||||
startPage();
|
||||
List<StockOutOrderPO> list = stockOutOrderApplicationService.querySignatureList(stockOutOrderDO);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传并解析出仓委托单Excel
|
||||
*/
|
||||
@@ -582,4 +598,15 @@ public class StockOutOrderApi extends BaseController {
|
||||
}
|
||||
return stockOutOrderApplicationService.batchPush(idList);
|
||||
}
|
||||
|
||||
/**
|
||||
* PDA批量出库签名
|
||||
*
|
||||
* <p>勾选多条出库记录批量签名,更新出库表的签名状态、签名时间、签名图片、签名备注。</p>
|
||||
*/
|
||||
@ApiOperation("PDA批量出库签名")
|
||||
@PostMapping("/batchSignature")
|
||||
public AjaxResult batchSignature(@RequestBody com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO dto) {
|
||||
return stockOutOrderApplicationService.batchSignature(dto);
|
||||
}
|
||||
}
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
package com.mhd.wms.interfaces.facadeApi.stockSignature;
|
||||
|
||||
import com.mhd.common.core.web.controller.BaseController;
|
||||
import com.mhd.common.core.web.domain.AjaxResult;
|
||||
import com.mhd.system.api.domain.SignatureBatchFeignDTO;
|
||||
import com.mhd.wms.application.service.stockInOrder.StockInOrderApplicationService;
|
||||
import com.mhd.wms.application.service.stockOutOrder.StockOutOrderApplicationService;
|
||||
import com.mhd.wms.interfaces.dto.signature.BatchSignatureDTO;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 库存签名API(供OMS端Feign调用,统一更新WMS入/出库单签名字段)
|
||||
*
|
||||
* <p>OMS端批量签名后,通过Feign调用此API,
|
||||
* 更新WMS stock_in_order / stock_out_order 表的签名状态、签名时间、签名图片、签名备注。</p>
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/stockSignatureApi")
|
||||
@Api(tags = "库存签名(OMS→WMS)")
|
||||
public class StockSignatureApi extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private StockInOrderApplicationService stockInOrderApplicationService;
|
||||
|
||||
@Autowired
|
||||
private StockOutOrderApplicationService stockOutOrderApplicationService;
|
||||
|
||||
/**
|
||||
* 批量签名(OMS→WMS)
|
||||
*
|
||||
* <p>接收SignatureBatchFeignDTO,映射为BatchSignatureDTO后,分别调用
|
||||
* StockInOrderApplicationService.batchSignature 和
|
||||
* StockOutOrderApplicationService.batchSignature。</p>
|
||||
*/
|
||||
@ApiOperation("OMS批量签名-更新WMS入/出库单签名字段")
|
||||
@PostMapping("/batchSign")
|
||||
public AjaxResult batchSign(@RequestBody SignatureBatchFeignDTO dto) {
|
||||
if (dto == null) {
|
||||
return AjaxResult.error("请求参数不能为空");
|
||||
}
|
||||
boolean hasIn = dto.getInOrderIds() != null && !dto.getInOrderIds().isEmpty();
|
||||
boolean hasOut = dto.getOutOrderIds() != null && !dto.getOutOrderIds().isEmpty();
|
||||
if (!hasIn && !hasOut) {
|
||||
return AjaxResult.error("请指定入库单ID列表或出库单ID列表");
|
||||
}
|
||||
|
||||
// 映射 SignatureBatchFeignDTO → BatchSignatureDTO
|
||||
BatchSignatureDTO batchDTO = new BatchSignatureDTO();
|
||||
batchDTO.setInOrderIds(dto.getInOrderIds());
|
||||
batchDTO.setOutOrderIds(dto.getOutOrderIds());
|
||||
batchDTO.setSignatureStatus(dto.getSignatureStatus() != null ? dto.getSignatureStatus() : 2);
|
||||
batchDTO.setSignatureTime(dto.getSignatureTime());
|
||||
batchDTO.setSignaturePic(dto.getSignaturePic());
|
||||
batchDTO.setSignatureRemark(dto.getSignatureRemark());
|
||||
// evidencePics: Feign DTO中是comma-separated String → List<String>
|
||||
if (dto.getEvidencePics() != null && !dto.getEvidencePics().isEmpty()) {
|
||||
batchDTO.setEvidencePics(java.util.Arrays.asList(dto.getEvidencePics().split(",")));
|
||||
}
|
||||
|
||||
String msg = "";
|
||||
if (hasIn) {
|
||||
AjaxResult inResult = stockInOrderApplicationService.batchSignature(batchDTO);
|
||||
log.info("OMS→WMS批量入库签名完成:{}条,结果:{}", dto.getInOrderIds().size(),
|
||||
inResult != null ? inResult.get("msg") : "OK");
|
||||
msg += "入库签名完成";
|
||||
}
|
||||
if (hasOut) {
|
||||
AjaxResult outResult = stockOutOrderApplicationService.batchSignature(batchDTO);
|
||||
log.info("OMS→WMS批量出库签名完成:{}条,结果:{}", dto.getOutOrderIds().size(),
|
||||
outResult != null ? outResult.get("msg") : "OK");
|
||||
if (!msg.isEmpty()) msg += ",";
|
||||
msg += "出库签名完成";
|
||||
}
|
||||
|
||||
return AjaxResult.success(msg);
|
||||
}
|
||||
}
|
||||
@@ -14,18 +14,18 @@ spring:
|
||||
nacos:
|
||||
discovery:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
server-addr: 10.33.0.129:6010
|
||||
# server-addr: 10.33.0.129:6010
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.102.192.30:6848
|
||||
server-addr: 10.102.192.30:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
# server-addr: 10.102.192.105:6848
|
||||
config:
|
||||
# server-addr: 127.0.0.1:8848
|
||||
server-addr: 10.33.0.129:6010
|
||||
# server-addr: 10.33.0.129:6010
|
||||
# 线上测试环境配置 容器名+端口号
|
||||
# server-addr: 10.102.192.30:6848
|
||||
server-addr: 10.102.192.30:6848
|
||||
username: nacos
|
||||
password: manhuoda@2023
|
||||
#线上正式环境
|
||||
|
||||
@@ -5,7 +5,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<mapper namespace="com.mhd.wms.domain.handoverTaskOrder.repository.mapper.HandoverTaskOrderMapper">
|
||||
|
||||
<resultMap type="com.mhd.wms.domain.handoverTaskOrder.repository.po.HandoverTaskOrderPO" id="HandoverTaskOrderResult">
|
||||
<result property="handoverTaskOrderId" column="handover_task_order_id" />
|
||||
<id property="handoverTaskOrderId" column="handover_task_order_id" />
|
||||
<result property="organizationId" column="organization_id" />
|
||||
<result property="organizationName" column="organization_name" />
|
||||
<result property="topOrganizationId" column="top_organization_id" />
|
||||
@@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
|
||||
|
||||
<sql id="selectHandoverTaskOrderPo">
|
||||
a.handover_task_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.serial_number, a.task_number, a.status, a.platform_id,
|
||||
a.handover_task_order_id AS handover_task_order_id, a.organization_id, a.organization_name, a.top_organization_id, a.serial_number, a.task_number, a.status, a.platform_id,
|
||||
a.platform_code, a.platform_name, a.platform_use_time_id, a.platform_use_start_time, a.platform_use_end_time, a.platform_use_status,
|
||||
a.order_type_code, a.order_type_name, a.expect_time, a.warehouse_id, a.warehouse_code, a.warehouse_name, a.shipper_id,
|
||||
a.shipper_name, a.order_number, a.picking_order_number, a.remark, a.task_distribution, a.task_distribution_time, a.create_time, a.create_by, a.create_by_name, a.update_time,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<mapper namespace="com.mhd.wms.domain.reviewOrder.repository.mapper.ReviewOrderMapper">
|
||||
|
||||
<resultMap type="com.mhd.wms.domain.reviewOrder.repository.po.ReviewOrderPO" id="ReviewOrderResult">
|
||||
<result property="reviewOrderId" column="review_order_id"/>
|
||||
<id property="reviewOrderId" column="review_order_id"/>
|
||||
<result property="reviewOrderNumber" column="review_order_number"/>
|
||||
<result property="outOrderId" column="out_order_id"/>
|
||||
<result property="outOrderNumber" column="out_order_number"/>
|
||||
@@ -84,7 +84,7 @@
|
||||
</resultMap>
|
||||
|
||||
<sql id="reviewOrderSelectColumns">
|
||||
a.review_order_id,
|
||||
a.review_order_id AS review_order_id,
|
||||
a.review_order_number,
|
||||
a.out_order_id,
|
||||
a.out_order_number,
|
||||
|
||||
@@ -105,6 +105,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="workUserName" column="WORK_USER_NAME" />
|
||||
<result property="workTaskReceiveStatus" column="WORK_TASK_RECEIVE_STATUS" />
|
||||
<result property="taskIssueUserId" column="TASK_ISSUE_USER_ID" />
|
||||
<result property="signatureStatus" column="SIGNATURE_STATUS" />
|
||||
<result property="signatureTime" column="SIGNATURE_TIME" />
|
||||
<result property="signaturePic" column="SIGNATURE_PIC" />
|
||||
<result property="evidencePics" column="EVIDENCE_PICS" />
|
||||
<result property="signatureRemark" column="SIGNATURE_REMARK" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectStockInOrderPo">
|
||||
@@ -138,7 +143,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
a."TO", a.CONTACT_PERSON, a.VEHICLE_INFO, a.CONSIGNMENT_NO, a.TEL, a.DRIVER_SIGNATURE, a.FAX, a.DECLARATION_AREA, a.MANUFACTURER,
|
||||
a.CUSTOMS_BROKER_INFO, a.DELIVERY_ADDRESS, a.ENTRY_EXIT_CUSTOMS, a.ORIGIN_DESTINATION_COUNTRY, a.CARRIER, a.CONTAINER_NO,
|
||||
a.TRANSPORT_METHOD, a.SUPERVISION_METHOD, a.CUSTOMS_INSPECTION, a.NEED_CUSTOMS_DECLARATION, a.NEED_TRANSPORT,
|
||||
a.WAREHOUSE_DATE, a.COMPLETION_TIME, a.ORDER_DATE,a.stock_in_order,a.business_order_no,a.WORK_USER_ID,a.WORK_TASK_RECEIVE_STATUS,a.TASK_ISSUE_USER_ID,a.WORK_USER_NAME
|
||||
a.WAREHOUSE_DATE, a.COMPLETION_TIME, a.ORDER_DATE,a.stock_in_order,a.business_order_no,a.WORK_USER_ID,a.WORK_TASK_RECEIVE_STATUS,a.TASK_ISSUE_USER_ID,a.WORK_USER_NAME,
|
||||
a.SIGNATURE_STATUS, a.SIGNATURE_TIME, a.SIGNATURE_PIC, a.EVIDENCE_PICS, a.SIGNATURE_REMARK
|
||||
</sql>
|
||||
|
||||
<sql id="joinStockInOrderPo">
|
||||
@@ -356,6 +362,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<if test="queryUserId != null">
|
||||
and a.TASK_ISSUE_USER_ID like concat('%', #{queryUserId}, '%')
|
||||
</if>
|
||||
<!-- PDA入库签名列表:作业任务人员模糊查询 -->
|
||||
<if test="workUserNameLike != null and workUserNameLike != ''">
|
||||
and a.WORK_USER_NAME like concat('%', #{workUserNameLike}, '%')
|
||||
</if>
|
||||
<!-- PDA入库签名列表:按签名状态精确查询 -->
|
||||
<if test="signatureStatus != null">
|
||||
and a.SIGNATURE_STATUS = #{signatureStatus}
|
||||
</if>
|
||||
<!-- 报关相关字段查询条件 -->
|
||||
<if test="to != null and to != ''">
|
||||
and a."TO" like concat('%', #{to}, '%')
|
||||
@@ -595,4 +609,64 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
WHERE warehouse_id = #{warehouseId} AND del_flag = 1 AND organization_id = #{organizationId} AND top_organization_id = #{topOrganizationId}
|
||||
</select>
|
||||
|
||||
|
||||
<update id="updateExecution" parameterType="java.lang.String">
|
||||
update NGWL_TEST_OMS.EXECUTION_STOCK_IN_ORDER
|
||||
<set>
|
||||
<if test="remark != null and remark != ''">NOTICE_REMARK = #{remark},</if>
|
||||
update_time = sysdate()
|
||||
</set>
|
||||
where in_order_number = #{inOrderNumber} and del_flag = 1
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(取最大序号+1,防止删单后单号重复) -->
|
||||
<select id="getMaxStockInOrderByPrefixAndOrgAndWarehouse" resultType="java.lang.String">
|
||||
SELECT in_order_number FROM NGWL_TEST_OMS.reserve_stock_in_order
|
||||
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT in_order_number FROM NGWL_TEST_OMS.reservation_stock_in_order
|
||||
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT in_order_number FROM NGWL_TEST_OMS.execution_stock_in_order
|
||||
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT in_order_number FROM stock_in_order
|
||||
WHERE in_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
@@ -104,6 +104,11 @@
|
||||
<result property="workUserName" column="WORK_USER_NAME" />
|
||||
<result property="workTaskReceiveStatus" column="WORK_TASK_RECEIVE_STATUS" />
|
||||
<result property="taskIssueUserId" column="TASK_ISSUE_USER_ID" />
|
||||
<result property="signatureStatus" column="SIGNATURE_STATUS" />
|
||||
<result property="signatureTime" column="SIGNATURE_TIME" />
|
||||
<result property="signaturePic" column="SIGNATURE_PIC" />
|
||||
<result property="evidencePics" column="EVIDENCE_PICS" />
|
||||
<result property="signatureRemark" column="SIGNATURE_REMARK" />
|
||||
</resultMap>
|
||||
|
||||
|
||||
@@ -124,7 +129,8 @@
|
||||
a.CUSTOMS_DECLARER_INFO,a.DELIVERY_ADDR,a.ENTRY_EXIT_CUSTOMS,a.DEPARTURE_ARRIVAL_COUNTRY,a.CARRIER,a.CONTAINER_NO,a.CONTAINER_NO_NAME,a.OUTBOUND_DATE,
|
||||
a.COMPLETE_TIME,a.ORDER_DATE,a.TRANSPORT_MODE_CODE,a.TRANSPORT_MODE_NAME,a.SUPERVISION_MODE_CODE,a.SUPERVISION_MODE_NAME,
|
||||
a.CUSTOMS_INSPECTION_FLAG,a.NEED_DECLARE_FLAG,a.NEED_TRANSPORT_FLAG,a.picture_app,a.billing_json,a.SETTLEMENT_CURRENCY,
|
||||
a.SALESMAN_ID,a.SALESMAN_NAME,a.business_order_no,a.RETURN_QUANTITY,a.WORK_USER_ID,a.WORK_TASK_RECEIVE_STATUS,a.TASK_ISSUE_USER_ID,a.WORK_USER_NAME
|
||||
a.SALESMAN_ID,a.SALESMAN_NAME,a.business_order_no,a.RETURN_QUANTITY,a.WORK_USER_ID,a.WORK_TASK_RECEIVE_STATUS,a.TASK_ISSUE_USER_ID,a.WORK_USER_NAME,
|
||||
a.SIGNATURE_STATUS, a.SIGNATURE_TIME, a.SIGNATURE_PIC, a.EVIDENCE_PICS, a.SIGNATURE_REMARK
|
||||
</sql>
|
||||
|
||||
|
||||
@@ -340,6 +346,14 @@
|
||||
<if test="pushStatus != null">
|
||||
and a.PUSH_STATUS = #{pushStatus}
|
||||
</if>
|
||||
<!-- PDA出库签名列表:作业任务人员模糊查询 -->
|
||||
<if test="workUserNameLike != null and workUserNameLike != ''">
|
||||
and a.WORK_USER_NAME like concat('%', #{workUserNameLike}, '%')
|
||||
</if>
|
||||
<!-- PDA出库签名列表:按签名状态精确查询 -->
|
||||
<if test="signatureStatus != null">
|
||||
and a.SIGNATURE_STATUS = #{signatureStatus}
|
||||
</if>
|
||||
<!-- 出库明细:物料名称、物料编码(同一明细行同时满足;与出库明细口径一致)。关联 material_base_info 避免明细冗余名称与主档不一致时筛不到 -->
|
||||
<if test="(materialName != null and materialName != '') or (materialCode != null and materialCode != '')">
|
||||
and exists (
|
||||
@@ -512,4 +526,53 @@
|
||||
<select id="getInLotNo" resultType="java.lang.String">
|
||||
select LOT_NO from "NGWL_TEST_WMS".IN_MATERIAL_DETAIL where MATERIAL_BASE_INFO_ID = #{baseId} and IN_ORDER_NUMBER = #{inOrderNumber}
|
||||
</select>
|
||||
|
||||
<!-- 跨4张入库单表查询指定前缀+组织+仓库的所有入库单号(取最大序号+1,防止删单后单号重复) -->
|
||||
<select id="getMaxStockOutOrderByPrefixAndOrgAndWarehouse" resultType="java.lang.String">
|
||||
SELECT out_order_number FROM NGWL_TEST_OMS.reserve_stock_out_order
|
||||
WHERE out_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT out_order_number FROM NGWL_TEST_OMS.reservation_stock_out_order
|
||||
WHERE out_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT out_order_number FROM NGWL_TEST_OMS.execution_stock_out_order
|
||||
WHERE out_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
|
||||
UNION ALL
|
||||
|
||||
SELECT out_order_number FROM stock_out_order
|
||||
WHERE out_order_number LIKE concat(#{prefix}, '%')
|
||||
AND del_flag = 1
|
||||
<if test="organizationId != null">
|
||||
AND organization_id = #{organizationId}
|
||||
</if>
|
||||
<if test="warehouseId != null">
|
||||
AND warehouse_id = #{warehouseId}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
Reference in New Issue
Block a user