feat(controller): 新增钢构件订单管理功能

- 实现钢构件订单的搜索、保存、删除等基础操作
- 添加托盘生成功能和订单托盘详情查询接口
- 集成SAP订单搜索功能和供应商信息关联
- 实现订单导出功能包括PDF和Excel格式
- 添加二维码生成和物料扫描记录功能
- 实现打包流程和送货单创建功能
- 添加零件标签、托盘标签、齐套标签导出功能
- 集成条码扫描和库存管理相关服务
This commit is contained in:
曹鹏飞 2026-03-31 09:59:16 +08:00
parent 194e3c8a75
commit 3fccb47858
9 changed files with 89 additions and 21 deletions

View File

@ -53,6 +53,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.ttzero.excel.entity.ListMapSheet;
import org.ttzero.excel.entity.ListSheet;
import org.ttzero.excel.entity.Workbook;
import java.io.ByteArrayInputStream;
@ -132,6 +133,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 搜索SAP订单
*
* @param request 请求参数
*/
@PostMapping("searchSAPOrder")
@ -349,6 +351,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 搜索
*
* @param request 请求参数
*/
@PostMapping("search")
@ -358,6 +361,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 根据单据号获取列表
*
* @param orderNo 单据号
*/
@GetMapping("getList")
@ -367,6 +371,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 获取订单托盘详情
*
* @param id 订单id
*/
@GetMapping("getTrayInfo")
@ -399,6 +404,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 删除
*
* @param ids 要删除的id列表
*/
@PostMapping("delete")
@ -409,6 +415,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 根据订单状态搜索
*
* @param request 请求参数
*/
@PostMapping("searchByState")
@ -418,6 +425,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出选中的id列表
*
* @param ids id列表
*/
@PostMapping("exportByIds")
@ -428,6 +436,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出搜索结果
*
* @param request 搜索参数
*/
@PostMapping("exportSearchByState")
@ -441,6 +450,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 获取托盘零件列表
*
* @param id 托盘id
*/
@GetMapping("getItems")
@ -450,6 +460,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出托盘零件列表
*
* @param id 托盘id
*/
@PostMapping("exportItems")
@ -460,6 +471,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出老鼠图PDF
*
* @param id 托盘id
*/
@GetMapping("exportPdf")
@ -502,6 +514,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出零件标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportItemPdf")
@ -537,6 +550,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出零件标签图片ZIP
*
* @param id 托盘id
*/
@GetMapping(value = "exportItemImageZip", produces = "application/zip")
@ -586,6 +600,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出托盘标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportTrayPdf")
@ -602,6 +617,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出托盘标签图片
*
* @param id 托盘id
*/
@GetMapping(value = "exportTrayImage", produces = MediaType.IMAGE_PNG_VALUE)
@ -621,6 +637,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出齐套标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportQiTaoPdf")
@ -639,6 +656,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出齐套标签图片
*
* @param id 托盘id
*/
@GetMapping(value = "exportQiTaoImage", produces = MediaType.IMAGE_PNG_VALUE)
@ -672,6 +690,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 打包托盘PDA使用
*
* @param request 请求参数
*/
@Transactional
@ -729,6 +748,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 保存物料二维码扫描记录
*
* @param qrCodes 二维码列表
* @param type 类型
*/
@ -755,6 +775,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 退回到未打包
*
* @param id 托盘id
*/
@GetMapping("backToUnpackaged")
@ -776,6 +797,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 创建送货单
*
* @param ids 托盘id
*/
@Transactional
@ -809,6 +831,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 搜索送货单
*
* @param request 查询参数
*/
@PostMapping("searchDeliverOrder")
@ -818,6 +841,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 获取送货单详情信息
*
* @param id 送货单ID
*/
@GetMapping("getDeliverOrderInfo")
@ -827,6 +851,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出送货单
*
* @param id 送货单id
*/
@GetMapping("exportDeliverOrder")
@ -873,6 +898,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 根据送货单号查询订单信息PDA使用
*
* @param orderNo 送货单号
*/
@GetMapping("getInfoByDeliverOrderNo")
@ -915,6 +941,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 线下收货
*
* @param itemIds 零件项id列表
*/
@Transactional
@ -943,6 +970,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 收货PDA使用
*
* @param request 请求参数
*/
@Transactional
@ -1145,12 +1173,12 @@ public class StructuralPackageOrderController extends BaseController {
*/
@PostMapping("exportTemplate")
public void exportTemplate(HttpServletResponse response) throws IOException {
Map<String, Object> datas = new LinkedHashMap<>();
Map<String, String> datas = new LinkedHashMap<>();
datas.put("供应商编码*", "必填");
datas.put("机型*", "必填");
datas.put("机台序号*", "必填");
datas.put("钢构包物料*", "必填");
datas.put("期望交期", "不填为今天格式2025/10/05");
datas.put("期望交期", "不填为今天格式2025-03-05");
datas.put("采购订单号*", "必填");
datas.put("行项目*", "0010");
datas.put("数量*", "必填");
@ -1163,12 +1191,12 @@ public class StructuralPackageOrderController extends BaseController {
*/
@PostMapping("importOrder")
public ApiResult importOrder(MultipartFile file) throws IOException {
List<Map<String, Object>> datas = EecExcelUtil.handlerExcel(file.getInputStream());
List<StructuralPackageOrderExportDTO> datas = EecExcelUtil.getExcelContext(file.getInputStream(), StructuralPackageOrderExportDTO.class);
List<StructuralPackageOrderImportDTO> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
datas.forEach(data -> {
sb.setLength(0);
String supplierCode = StrUtil.trim(data.get("供应商编码*").toString());
String supplierCode = StrUtil.trim(data.getSupplierCode()); //StrUtil.trim(data.get("供应商编码*").toString());
Long supplierId = null;
if (StrUtil.isBlank(supplierCode)) {
sb.append("供应商编码不能为空;");
@ -1180,7 +1208,7 @@ public class StructuralPackageOrderController extends BaseController {
supplierId = supplier.getId();
}
}
String modelNo = StrUtil.trim(data.get("机型*").toString());
String modelNo = StrUtil.trim(data.getModelNo()); //StrUtil.trim(data.get("机型*").toString());
Long modelId = null;
if (StrUtil.isBlank(modelNo)) {
sb.append("机型不能为空;");
@ -1195,7 +1223,7 @@ public class StructuralPackageOrderController extends BaseController {
modelId = model.getId();
}
}
String workbenchNo = StrUtil.trim(data.get("机台序号*").toString());
String workbenchNo = StrUtil.trim(data.getWorkbenchNo()); //StrUtil.trim(data.get("机台序号*").toString());
Long workbenchId = null;
if (StrUtil.isBlank(workbenchNo)) {
sb.append("机台序号不能为空;");
@ -1210,7 +1238,7 @@ public class StructuralPackageOrderController extends BaseController {
workbenchId = workbench.getId();
}
}
String materialNo = StrUtil.trim(data.get("钢构包物料*").toString());
String materialNo = StrUtil.trim(data.getMaterialNo()); //StrUtil.trim(data.get("钢构包物料*").toString());
PackageVO packageVO = null;
if (StrUtil.isBlank(materialNo)) {
sb.append("钢构包物料不能为空;");
@ -1220,13 +1248,13 @@ public class StructuralPackageOrderController extends BaseController {
sb.append("钢构包物料无效;");
}
}
String expectDeliveryDate = StrUtil.trim(data.get("期望交期").toString());
String expectDeliveryDate = StrUtil.trim(data.getExpectDeliveryDate()); //StrUtil.trim(data.get("期望交期").toString());
if (StrUtil.isBlank(expectDeliveryDate)) {
expectDeliveryDate = DateTimeUtil.format(LocalDate.now(), "yyyy/MM/dd");
expectDeliveryDate = DateTimeUtil.format(LocalDate.now(), "yyyy-MM-dd");
} else if (!DateTimeUtil.isValidDate(expectDeliveryDate)) {
sb.append("期望交期无效;");
sb.append("期望交期格式不正确应为2026-03-30;");
}
String snum = StrUtil.trim(data.get("数量*").toString());
String snum = StrUtil.trim(data.getNum()); //StrUtil.trim(data.get("数量*").toString());
BigDecimal num = null;
if (StrUtil.isBlank(snum)) {
sb.append("数量不能为空;");
@ -1238,8 +1266,8 @@ public class StructuralPackageOrderController extends BaseController {
sb.append("数量必须大于0;");
}
}
String poNum = StrUtil.trim(data.get("采购订单号*").toString());
String rowNo = StrUtil.trim(data.get("行项目*").toString());
String poNum = StrUtil.trim(data.getPoNum()); //StrUtil.trim(data.get("采购订单号*").toString());
String rowNo = StrUtil.trim(data.getRowNo()); // StrUtil.trim(data.get("行项目*").toString());
BigDecimal transportNum = num;
if (StrUtil.isBlank(poNum)) {
sb.append("采购订单号不能为空;");
@ -1290,13 +1318,13 @@ public class StructuralPackageOrderController extends BaseController {
.setTransportNum(transportNum)
);
} else {
data.put("错误信息", sb.toString());
data.setError(sb.toString());
}
});
if (list.size() != datas.size()) {
try (ByteArrayOutputStream osOut = new ByteArrayOutputStream()) {
new Workbook()
.addSheet(new ListMapSheet<>(datas))
.addSheet(new ListSheet<>(datas))
.writeTo(osOut);
try (ByteArrayInputStream isIn = new ByteArrayInputStream(osOut.toByteArray())) {
return ApiResult.error(STATE.DataNoCheckPass, "导入文件失败", fileUploadService.upload("temp/" + DateTimeUtil.format(LocalDate.now(), "yyyyMMdd") + "/" + IdUtil.fastUUID() + ".xlsx", isIn, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
@ -1315,6 +1343,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 添加备注
*
* @param request 请求参数
*/
@PostMapping("itemRemark")

View File

@ -0,0 +1,35 @@
package com.nflg.wms.admin.pojo.dto;
import lombok.Data;
import org.ttzero.excel.annotation.ExcelColumn;
@Data
public class StructuralPackageOrderExportDTO {
@ExcelColumn(value = "供应商编码*")
private String supplierCode;
@ExcelColumn(value = "机型*")
private String modelNo;
@ExcelColumn(value = "机台序号*")
private String workbenchNo;
@ExcelColumn(value = "钢构包物料*")
private String materialNo;
@ExcelColumn(value = "期望交期")
private String expectDeliveryDate;
@ExcelColumn(value = "采购订单号*")
private String poNum;
@ExcelColumn(value = "行项目*")
private String rowNo;
@ExcelColumn(value = "数量*")
private String num;
@ExcelColumn(value = "错误信息")
private String error;
}

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>成本中心领料单</title>
<title th:text="${base.title}">成本中心领料单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>成品订单入库单</title>
<title th:text="${base.title}">成品订单入库单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>生产补料单</title>
<title th:text="${base.title}">生产补料单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>生产退料单</title>
<title th:text="${base.title}">生产退料单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>生产领料出库单</title>
<title th:text="${base.title}">生产领料出库单</title>
<style>
@page {
size: A4 landscape; /* 横向 A4 */

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>成品发货领料单</title>
<title th:text="${base.title}">成品发货领料单</title>
<style>
@media print {
@page {

View File

@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* <p>
@ -26,6 +27,9 @@ public class WmsComponentPackingServiceImpl extends ServiceImpl<WmsComponentPack
@Override
public IPage<ComponentPackingVO> search(ComponentPackingQO request) {
if (Objects.nonNull(request.getStartDate())){
request.setStartDate(request.getStartDate().minusDays(1));
}
return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize()));
}