feat: bug-784 钢构包订单添加缺件交货的功能

This commit is contained in:
曹鹏飞 2025-10-08 11:13:20 +08:00
parent 04b68647b3
commit 6a02cb9270
10 changed files with 151 additions and 25 deletions

View File

@ -323,7 +323,7 @@ public class StructuralPackageOrderController extends BaseController {
TrayItemVO ivo = Convert.convert(TrayItemVO.class, item);
ivo.setNo(tray.getNo());
if (Objects.equals(tray.getState(), (short) 3)) {
ivo.setStoreNum(item.getShipmentNum());
ivo.setStoreNum(item.getStoreNum());
}
return ivo;
}).toList());
@ -382,7 +382,7 @@ public class StructuralPackageOrderController extends BaseController {
*/
@GetMapping("getItems")
public ApiResult<List<DeliverStructuralPackageOrderTrayItemVO>> getItems(@Valid @RequestParam @NotNull Long id) {
return ApiResult.success(deliverStructuralPackageOrderTrayItemService.getListByTrayId(id));
return ApiResult.success(deliverStructuralPackageOrderTrayItemService.getListVOByTrayId(id));
}
/**
@ -391,7 +391,7 @@ public class StructuralPackageOrderController extends BaseController {
*/
@PostMapping("exportItems")
public void exportItems(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws IOException {
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListVOByTrayId(id);
EecExcelUtil.export("零件信息", "sheet1", list, response);
}
@ -417,7 +417,7 @@ public class StructuralPackageOrderController extends BaseController {
.setDrawingNo(trayVO.getPackageDrawingNo())
.setName(trayVO.getPackageDesc())
.setQrCode(QRCodeUtil.generateQRCodeBase64(trayVO.getPackageNo(), 100, 100));
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListVOByTrayId(id);
List<PackageMaterialDTO> items = list.stream().map(item -> new PackageMaterialDTO()
.setImage(item.getImage())
.setNo(item.getMaterialNo())
@ -445,7 +445,7 @@ public class StructuralPackageOrderController extends BaseController {
public void exportItemPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
DeliverStructuralPackageOrderExtendVO trayVO = deliverStructuralPackageOrderTrayService.getInfo(id);
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListVOByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> datas = new ArrayList<>();
for (DeliverStructuralPackageOrderTrayItemVO it : list) {
for (int i = 0, count = it.getShipmentNum().intValue(); i < count; i++) {
@ -526,12 +526,15 @@ public class StructuralPackageOrderController extends BaseController {
VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("托盘不存在");
VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Unpackaged.getState())).throwMessage("请勿重复打包");
DeliverStructuralPackageOrderVO order = deliverStructuralPackageOrderService.getInfo(tray.getOrderId());
List<DeliverStructuralPackageOrderTrayItemVO> trayItemVOS = deliverStructuralPackageOrderTrayItemService.getListByTrayId(tray.getId());
List<WmsStructuralPackageOrderTrayItem> trayItems = deliverStructuralPackageOrderTrayItemService.getListByTrayId(tray.getId());
List<String> materialNos = new ArrayList<>();
List<StructuralPackageMaterialQRCodeContentDTO> qrCodeDTOs = request.getQrCodes().stream().map(NoUtil::getStructuralPackageMaterialQRCodeContent).toList();
trayItemVOS.forEach(it -> {
List<StructuralPackageMaterialQRCodeContentDTO> dtos = qrCodeDTOs.stream()
.filter(qr -> StrUtil.equals(qr.getMaterialNo(), it.getMaterialNo()))
List<StructuralPackageMaterialQRCodeContentDTO> qrCodeDTOs = new ArrayList<>();
trayItems.forEach(it -> {
PackTrayItemQO ri = request.getItems().stream().filter(r -> StrUtil.equals(r.getMaterialNo(), it.getMaterialNo())).findFirst().orElse(null);
VUtil.trueThrowBusinessError(Objects.isNull(ri)).throwMessage(it.getMaterialNo() + "未扫码");
if (StrUtil.isBlank(ri.getRemark())) {
List<StructuralPackageMaterialQRCodeContentDTO> dtos = ri.getQrCodes().stream()
.map(NoUtil::getStructuralPackageMaterialQRCodeContent)
.toList();
if (it.getShipmentNum().compareTo(dtos.stream()
.map(StructuralPackageMaterialQRCodeContentDTO::getNum)
@ -543,6 +546,11 @@ public class StructuralPackageOrderController extends BaseController {
dto.setPackageNo(order.getPackageNo());
dto.setTrayItemId(it.getId());
});
qrCodeDTOs.addAll(dtos);
} else {
it.setOfflineRemark(ri.getRemark());
it.setOfflineReceived(false);
}
});
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(materialNos))
.throwMessage("以下物料的数量与托盘数量不一致:" + StrUtil.join(",", materialNos));
@ -737,6 +745,25 @@ public class StructuralPackageOrderController extends BaseController {
return ApiResult.success(vo);
}
/**
* 线下收货
* @param itemIds 零件项id列表
*/
@PostMapping("offlineReceive")
public ApiResult<Void> offlineReceive(@Valid @RequestBody @NotEmpty List<Long> itemIds) {
List<WmsStructuralPackageOrderTrayItem> items = deliverStructuralPackageOrderTrayItemService.listByIds(itemIds);
items.removeIf(it -> it.getOfflineReceived() != false);
items.forEach(it -> {
it.setOfflineReceived(true);
it.setOfflineReceiveTime(LocalDateTime.now());
it.setOfflineReceiveUser(UserUtil.getUserName());
});
if (CollectionUtil.isNotEmpty(items)) {
deliverStructuralPackageOrderTrayItemService.updateBatchById(items);
}
return ApiResult.success();
}
/**
* 收货PDA使用
* @param request 请求参数
@ -767,6 +794,9 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
.eq(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.update();
List<WmsStructuralPackageOrderTrayItem> items = deliverStructuralPackageOrderTrayItemService.getList(request.getId());
items.forEach(it -> it.setStoreNum(it.getShipmentNum()));
deliverStructuralPackageOrderTrayItemService.updateBatchById(items);
structuralPackageDeliverOrderService.updateStateByOrderId(request.getId());
SAPMaterialInfoInOrderDTO dto = CollectionUtil.get(sapService.zim004(order.getExternalOrderNo(), order.getSupplierCode(), order.getPackageNo()), 0);
VUtil.trueThrowBusinessError(Objects.isNull(dto)).throwMessage("ZIM_004未查询到数据");

View File

@ -0,0 +1,26 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.util.List;
@Data
public class PackTrayItemQO {
/**
* 零件编码
*/
@NotBlank
private String materialNo;
/**
* 二维码列表
*/
private List<String> qrCodes;
/**
* 线下交货原因
*/
private String remark;
}

View File

@ -16,8 +16,8 @@ public class PackTrayQO {
private String trayNo;
/**
* 二维码列表
* 零件列表
*/
@NotEmpty
private List<String> qrCodes;
private List<PackTrayItemQO> items;
}

View File

@ -60,4 +60,9 @@ public class StructuralPackageDeliverOrderVO {
* 工厂编号
*/
private String factoryNo;
/**
* 是否存在缺货零件
*/
private Boolean quehuo;
}

View File

@ -5,6 +5,8 @@ import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;
@Data
@Accessors(chain = true)
@ -67,4 +69,33 @@ public class TrayItemVO {
* 条码数量
*/
private String codeNum = "点击查看";
/**
* 是否线下
*/
private Boolean offline;
public Boolean getOffline() {
return Objects.nonNull(offlineReceived);
}
/**
* 线下交货原因
*/
private String offlineRemark;
/**
* 是否已线下交货
*/
private Boolean offlineReceived;
/**
* 线下收货人
*/
private String offlineReceiveUser;
/**
* 线下收货时间
*/
private LocalDateTime offlineReceiveTime;
}

View File

@ -116,4 +116,9 @@ public class WmsStructuralPackageOrder implements Serializable {
* 标志关键部件
*/
private String kzkri;
/**
* 是否存在缺货零件
*/
private Boolean quehuo;
}

View File

@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
@ -85,4 +86,24 @@ public class WmsStructuralPackageOrderTrayItem implements Serializable {
* 图号
*/
private String drawingNo;
/**
* 线下交货原因
*/
private String offlineRemark;
/**
* 是否已线下交货
*/
private Boolean offlineReceived;
/**
* 线下收货人
*/
private String offlineReceiveUser;
/**
* 线下收货时间
*/
private LocalDateTime offlineReceiveTime;
}

View File

@ -26,7 +26,9 @@ public interface IWmsStructuralPackageOrderTrayItemService extends IService<WmsS
void deleteByOrderIds(List<Long> deleteIds);
List<DeliverStructuralPackageOrderTrayItemVO> getListByTrayId(@Valid @NotNull Long id);
List<DeliverStructuralPackageOrderTrayItemVO> getListVOByTrayId(@Valid @NotNull Long id);
List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(@Valid @NotBlank String trayNo);
List<WmsStructuralPackageOrderTrayItem> getListByTrayId(Long id);
}

View File

@ -38,7 +38,7 @@ public class WmsStructuralPackageOrderTrayItemServiceImpl extends ServiceImpl<Wm
}
@Override
public List<DeliverStructuralPackageOrderTrayItemVO> getListByTrayId(Long id) {
public List<DeliverStructuralPackageOrderTrayItemVO> getListVOByTrayId(Long id) {
return baseMapper.getListByTrayId(id);
}
@ -46,4 +46,9 @@ public class WmsStructuralPackageOrderTrayItemServiceImpl extends ServiceImpl<Wm
public List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(String trayNo) {
return baseMapper.getSimpleListByTrayNo(trayNo);
}
@Override
public List<WmsStructuralPackageOrderTrayItem> getListByTrayId(Long id) {
return lambdaQuery().eq(WmsStructuralPackageOrderTrayItem::getTrayId, id).list();
}
}

View File

@ -3,8 +3,9 @@
<mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageDeliverOrderMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO">
select pdo.*, us.supplier_code, us.supplier_name,di."name" AS "factory_no"
select pdo.*, us.supplier_code, us.supplier_name,di."name" AS "factory_no",spo.quehuo
from wms_structural_package_deliver_order pdo
inner join wms_structural_package_order spo on pdo.id=spo.deliver_id
inner join user_supplier us on pdo.supplier_id=us.id
LEFT JOIN dictionary_item di ON pdo.factory_id=di."id"
<where>