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

View File

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

View File

@ -5,6 +5,8 @@ import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@ -67,4 +69,33 @@ public class TrayItemVO {
* 条码数量 * 条码数量
*/ */
private String codeNum = "点击查看"; 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 String kzkri;
/**
* 是否存在缺货零件
*/
private Boolean quehuo;
} }

View File

@ -10,6 +10,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
@ -85,4 +86,24 @@ public class WmsStructuralPackageOrderTrayItem implements Serializable {
* 图号 * 图号
*/ */
private String drawingNo; 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); 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<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(@Valid @NotBlank String trayNo);
List<WmsStructuralPackageOrderTrayItem> getListByTrayId(Long id);
} }

View File

@ -38,7 +38,7 @@ public class WmsStructuralPackageOrderTrayItemServiceImpl extends ServiceImpl<Wm
} }
@Override @Override
public List<DeliverStructuralPackageOrderTrayItemVO> getListByTrayId(Long id) { public List<DeliverStructuralPackageOrderTrayItemVO> getListVOByTrayId(Long id) {
return baseMapper.getListByTrayId(id); return baseMapper.getListByTrayId(id);
} }
@ -46,4 +46,9 @@ public class WmsStructuralPackageOrderTrayItemServiceImpl extends ServiceImpl<Wm
public List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(String trayNo) { public List<DeliverStructuralPackageOrderTrayItemSimpleVO> getSimpleListByTrayNo(String trayNo) {
return baseMapper.getSimpleListByTrayNo(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"> <mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageDeliverOrderMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO"> <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 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 inner join user_supplier us on pdo.supplier_id=us.id
LEFT JOIN dictionary_item di ON pdo.factory_id=di."id" LEFT JOIN dictionary_item di ON pdo.factory_id=di."id"
<where> <where>