Browse Source

2025-10-16

采购标签生成增加导入功能
master
fengyuan_yang 11 months ago
parent
commit
ad03b64b23
  1. 2
      src/main/java/com/gaotao/modules/oa/service/impl/PurchaseArrivalServiceImpl.java
  2. 73
      src/main/java/com/gaotao/modules/wms/controller/WmsPrintController.java
  3. 33
      src/main/java/com/gaotao/modules/wms/dao/WmsPrintDao.java
  4. 73
      src/main/java/com/gaotao/modules/wms/entity/PoOrderRollNoImportData.java
  5. 22
      src/main/java/com/gaotao/modules/wms/service/WmsPrintService.java
  6. 156
      src/main/java/com/gaotao/modules/wms/service/impl/WmsPrintServiceImpl.java
  7. 106
      src/main/resources/mapper/wms/WmsPrintMapper.xml

2
src/main/java/com/gaotao/modules/oa/service/impl/PurchaseArrivalServiceImpl.java

@ -159,7 +159,7 @@ public class PurchaseArrivalServiceImpl implements PurchaseArrivalService {
params2.add(relatedOrderLineNo);
params2.add("");
params2.add(requiredQtyCount);
params2.add(orderQty);
params2.add(requiredQty);
params2.add("SYSTEM");
params2.add(supplierId);
params2.add("IQC");

73
src/main/java/com/gaotao/modules/wms/controller/WmsPrintController.java

@ -3,18 +3,16 @@ package com.gaotao.modules.wms.controller;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.common.utils.R;
import com.gaotao.modules.inventoryStock.entity.InventoryStockOutData;
import com.gaotao.modules.toolman.entity.ToolHeader;
import com.gaotao.modules.toolman.query.ToolHeaderQuery;
import com.gaotao.modules.wms.data.InboundQcResultData;
import com.gaotao.modules.wms.data.PoOrderRollNoOutData;
import com.gaotao.modules.wms.entity.PoOrderRollNoImportData;
import com.gaotao.modules.wms.service.WmsPrintService;
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;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
@RestController
@ -128,5 +126,68 @@ public class WmsPrintController {
return R.ok().put("rows", rows);
}
/**
* @description 采购标签Excel批量导入
* @author AI
* @date 2025/10/16
* @param file Excel文件
* @param site 工厂
* @param buNo BU
* @param orderNo 通知单号
* @param partNo 物料编码
* @param partDesc 物料名称
* @param poOrderNo 采购订单号
* @param poItemNo 采购订单行号
* @param supplierId 供应商编码
* @param supplierName 供应商名称
* @param orderQty 订单数量
* @param inspectionNo 检验单号
* @param createBy 创建人
* @return R
*/
@PostMapping("/uploadPoPartPrintExcel")
public R uploadPoPartPrintExcel(@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "site") String site,
@RequestParam(value = "buNo") String buNo,
@RequestParam(value = "orderNo") String orderNo,
@RequestParam(value = "partNo") String partNo,
@RequestParam(value = "partDesc") String partDesc,
@RequestParam(value = "poOrderNo") String poOrderNo,
@RequestParam(value = "poItemNo") String poItemNo,
@RequestParam(value = "supplierId") String supplierId,
@RequestParam(value = "supplierName") String supplierName,
@RequestParam(value = "orderQty") String orderQty,
@RequestParam(value = "inspectionNo") String inspectionNo,
@RequestParam(value = "createBy") String createBy){
PoOrderRollNoImportData importData = new PoOrderRollNoImportData();
importData.setSite(site);
importData.setBuNo(buNo);
importData.setOrderNo(orderNo);
importData.setPartNo(partNo);
importData.setPartDesc(partDesc);
importData.setPoOrderNo(poOrderNo);
importData.setPoItemNo(poItemNo);
importData.setSupplierId(supplierId);
importData.setSupplierName(supplierName);
importData.setOrderQty(orderQty);
importData.setInspectionNo(inspectionNo);
importData.setCreateBy(createBy);
wmsPrintService.uploadPoPartPrintExcel(file, importData);
return R.ok("导入成功");
}
/**
* @description 查询文件ID用于下载模板
* @author AI
* @date 2025/10/16
* @param params 查询参数
* @return R
*/
@PostMapping("/queryFileId")
public R queryFileId(@RequestBody Map<String, String> params){
Map<String, Object> result = wmsPrintService.queryFileId(params);
return R.ok().put("data", result);
}
}

33
src/main/java/com/gaotao/modules/wms/dao/WmsPrintDao.java

@ -1,10 +1,8 @@
package com.gaotao.modules.wms.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.modules.inventoryStock.entity.InventoryStockOutData;
import com.gaotao.modules.pms.data.QcDetailReport;
import com.gaotao.modules.wms.data.InboundQcResultData;
import com.gaotao.modules.wms.data.PoOrderRollNoOutData;
import org.apache.ibatis.annotations.Mapper;
@ -59,4 +57,35 @@ public interface WmsPrintDao {
*/
List<InventoryStockOutData> getWarehouseList(InventoryStockOutData data);
/**
* @description 查询物料有效期信息
* @author AI
* @date 2025/10/16
* @param site 工厂
* @param buNo BU
* @param partNo 物料编码
* @return 物料有效期信息
*/
PoOrderRollNoOutData getPartExpirationInfo(@Param("site") String site, @Param("buNo") String buNo, @Param("partNo") String partNo);
/**
* @description 查询文件信息
* @author AI
* @date 2025/10/16
* @param orderRef1 参考1
* @param orderRef2 参考2
* @return 文件信息
*/
java.util.Map<String, Object> queryFileId(@Param("orderRef1") String orderRef1, @Param("orderRef2") String orderRef2);
/**
* @description 检查标签条码是否已存在
* @author AI
* @date 2025/10/16
* @param site 工厂
* @param rollNo 标签条码
* @return 存在返回数量不存在返回0
*/
int checkRollNoExists(@Param("site") String site, @Param("rollNo") String rollNo);
}

73
src/main/java/com/gaotao/modules/wms/entity/PoOrderRollNoImportData.java

@ -0,0 +1,73 @@
package com.gaotao.modules.wms.entity;
import lombok.Data;
/**
* @CLASSNAME PoOrderRollNoImportData
* @DESCRIPTION 采购标签导入数据实体
* @DATE 2025/10/16
* @VERSION 1.0
**/
@Data
public class PoOrderRollNoImportData {
/**
* 工厂
*/
private String site;
/**
* BU
*/
private String buNo;
/**
* 通知单号
*/
private String orderNo;
/**
* 物料编码
*/
private String partNo;
/**
* 物料名称
*/
private String partDesc;
/**
* 采购订单号
*/
private String poOrderNo;
/**
* 采购订单行号
*/
private String poItemNo;
/**
* 供应商编码
*/
private String supplierId;
/**
* 供应商名称
*/
private String supplierName;
/**
* 订单数量
*/
private String orderQty;
/**
* 检验单号
*/
private String inspectionNo;
/**
* 创建人
*/
private String createBy;
}

22
src/main/java/com/gaotao/modules/wms/service/WmsPrintService.java

@ -4,9 +4,11 @@ import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.inventoryStock.entity.InventoryStockOutData;
import com.gaotao.modules.wms.data.InboundQcResultData;
import com.gaotao.modules.wms.data.PoOrderRollNoOutData;
import org.springframework.web.bind.annotation.RequestBody;
import com.gaotao.modules.wms.entity.PoOrderRollNoImportData;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* @CLASSNAME WmsPrintService
@ -59,4 +61,22 @@ public interface WmsPrintService {
* @return 仓库列表
*/
List<InventoryStockOutData> getWarehouseList(InventoryStockOutData inData);
/**
* @description 采购标签Excel批量导入
* @author AI
* @date 2025/10/16
* @param file Excel文件
* @param importData 导入数据
*/
void uploadPoPartPrintExcel(MultipartFile file, PoOrderRollNoImportData importData);
/**
* @description 查询文件ID用于下载模板
* @author AI
* @date 2025/10/16
* @param params 查询参数
* @return 文件信息
*/
Map<String, Object> queryFileId(Map<String, String> params);
}

156
src/main/java/com/gaotao/modules/wms/service/impl/WmsPrintServiceImpl.java

@ -5,22 +5,28 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gaotao.common.utils.DateUtils;
import com.gaotao.common.utils.PageUtils;
import com.gaotao.modules.inventoryStock.entity.InventoryStockOutData;
import com.gaotao.modules.pms.data.QcDetailReport;
import com.gaotao.modules.sys.entity.SysUserEntity;
import com.gaotao.modules.trans.entity.TransNoControl;
import com.gaotao.modules.trans.service.TransNoControlService;
import com.gaotao.modules.wms.dao.WmsPrintDao;
import com.gaotao.modules.wms.data.InboundQcResultData;
import com.gaotao.modules.wms.data.PoOrderRollNoOutData;
import com.gaotao.modules.wms.entity.PoOrderRollNoImportData;
import com.gaotao.modules.wms.service.WmsPrintService;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Map;
/**
* @CLASSNAME WmsPrintServiceImpl
@ -137,4 +143,150 @@ public class WmsPrintServiceImpl implements WmsPrintService {
public List<InventoryStockOutData> getWarehouseList(InventoryStockOutData inData){
return wmsPrintDao.getWarehouseList(inData);
}
@Override
@Transactional
public void uploadPoPartPrintExcel(MultipartFile file, PoOrderRollNoImportData importData) {
InputStream is = null;
XSSFWorkbook workbook = null;
try {
// 转流
is = file.getInputStream();
// 读取工作簿
workbook = new XSSFWorkbook(is);
// 读取工作表
XSSFSheet sheet = workbook.getSheetAt(0);
// 获取行数
int rows = sheet.getPhysicalNumberOfRows();
// 查询物料有效期信息只需查询一次
PoOrderRollNoOutData partInfo = wmsPrintDao.getPartExpirationInfo(
importData.getSite(),
importData.getBuNo(),
importData.getPartNo()
);
// 遍历每一行从第二行开始
for (int j = 1; j < rows; j++) {
// 获得该行
XSSFRow row = sheet.getRow(j);
if (row == null) {
continue;
}
// 创建保存对象
PoOrderRollNoOutData saveData = new PoOrderRollNoOutData();
// 从主信息行获取的字段
saveData.setSite(importData.getSite());
saveData.setBuNo(importData.getBuNo());
saveData.setInspectionNo(importData.getInspectionNo());
saveData.setOrderNo(importData.getPoOrderNo());
saveData.setItemNo(importData.getPoItemNo());
saveData.setPartNo(importData.getPartNo());
saveData.setPartDesc(importData.getPartDesc());
saveData.setSupplierId(importData.getSupplierId());
saveData.setSupplierName(importData.getSupplierName());
saveData.setOrderQty(importData.getOrderQty());
// 从Excel中读取的字段
// 标签条码roll_no- 第1列索引0
String rollNo = null;
if (row.getCell(0) != null) {
if (row.getCell(0).getCellType() == org.apache.poi.ss.usermodel.CellType.NUMERIC) {
// 如果是数字类型转换为字符串
rollNo = String.valueOf((long)row.getCell(0).getNumericCellValue());
} else {
rollNo = row.getCell(0).getStringCellValue();
}
} else {
throw new RuntimeException("第" + (j + 1) + "行:标签条码不能为空");
}
// 校验标签条码是否重复
int existCount = wmsPrintDao.checkRollNoExists(importData.getSite(), rollNo);
if (existCount > 0) {
throw new RuntimeException("第" + (j + 1) + "行:标签条码 [" + rollNo + "] 已存在,不能重复导入");
}
saveData.setRollNo(rollNo);
// 标签数量roll_qty- 第2列索引1
if (row.getCell(1) != null) {
saveData.setRollQty(new BigDecimal(row.getCell(1).getNumericCellValue()));
} else {
throw new RuntimeException("第" + (j + 1) + "行:标签数量不能为空");
}
// 批次号batch_no- 第3列索引2
if (row.getCell(2) != null) {
if (row.getCell(2).getCellType() == org.apache.poi.ss.usermodel.CellType.NUMERIC) {
saveData.setBatchNo(String.valueOf((long)row.getCell(2).getNumericCellValue()));
} else {
String batchNo = row.getCell(2).getStringCellValue();
// 如果批次号是 * 则设置为空字符串
saveData.setBatchNo("*".equals(batchNo) ? "" : batchNo);
}
} else {
saveData.setBatchNo("");
}
// 生产日期production_date- 第4列索引3
if (row.getCell(3) != null) {
if (row.getCell(3).getCellType() == org.apache.poi.ss.usermodel.CellType.NUMERIC) {
saveData.setProductionDate(row.getCell(3).getDateCellValue());
} else {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
saveData.setProductionDate(sdf.parse(row.getCell(3).getStringCellValue()));
}
} else {
throw new RuntimeException("第" + (j + 1) + "行:生产日期不能为空");
}
// 默认值字段
saveData.setCreatedBy(importData.getCreateBy());
saveData.setDelflag("N");
saveData.setVersion(0);
saveData.setPrintFlag(0);
saveData.setHardtagInFlag("未入库");
// 计算有效期相关日期
if (partInfo != null && "Y".equals(partInfo.getExpirationFlag()) && saveData.getProductionDate() != null) {
if (partInfo.getExpirationDay() != null && partInfo.getExpirationDay() > 0) {
saveData.setExpirationDate(DateUtils.addDateDays(saveData.getProductionDate(), partInfo.getExpirationDay()));
}
if (partInfo.getExpirationWarningDay() != null && partInfo.getExpirationWarningDay() > 0) {
saveData.setExpirationWarningDate(DateUtils.addDateDays(saveData.getProductionDate(), partInfo.getExpirationWarningDay()));
}
}
// 保存数据
wmsPrintDao.savePoOrderRollNo(saveData);
}
} catch (Exception e) {
throw new RuntimeException("导入失败:" + e.getMessage());
} finally {
try {
if (workbook != null) {
workbook.close();
}
if (is != null) {
is.close();
}
} catch (Exception e) {
// 忽略关闭异常
}
}
}
@Override
public Map<String, Object> queryFileId(Map<String, String> params) {
String orderRef1 = params.get("orderRef1");
String orderRef2 = params.get("orderRef2");
Map<String, Object> result = wmsPrintDao.queryFileId(orderRef1, orderRef2);
if (result == null) {
throw new RuntimeException("未找到模板文件");
}
return result;
}
}

106
src/main/resources/mapper/wms/WmsPrintMapper.xml

@ -4,11 +4,27 @@
<mapper namespace="com.gaotao.modules.wms.dao.WmsPrintDao">
<select id="getInboundQcResultData" resultType="InboundQcResultData">
select
a.site,a.bu_no,d.inspection_no as order_no,a.order_status,d.part_no,d.part_desc,D.related_order_no AS po_orderNo,D.related_order_line_no AS po_itemNo,c.SupplierName,c.supplierID as supplierId,
b.inspector_date,b.submit_date,a.order_qty,roll_qty,roll_count,inspection_result,disposal_measures,
B.batch_qualified_qty,b.inspector_no
from inbound_notification_head a
SELECT
a.site,
a.bu_no,
d.inspection_no AS order_no,
a.order_status,
d.part_no,
d.part_desc,
D.related_order_no AS po_orderNo,
D.related_order_line_no AS po_itemNo,
c.SupplierName,
c.supplierID AS supplierId,
b.inspector_date,
b.submit_date,
a.order_qty,
roll_qty,
roll_count,
inspection_result,
disposal_measures,
B.batch_qualified_qty,
b.inspector_no
from inbound_notification_head a
inner join inbound_notification_detail D on a.site = D.site and a.bu_no = D.bu_no and a.order_no = D.order_no AND A.order_type ='采购入库'
left join qc_iqc_record b on D.site = b.site and D.bu_no = b.bu_no and D.inspection_no = b.inspection_no
inner join Supplier c on a.site = c.Site and a.Supplier_ID = c.supplierID
@ -48,23 +64,41 @@
<select id="getPoOrderRollNoOutData" resultType="PoOrderRollNoOutData">
select ROW_NUMBER() OVER (ORDER BY a.created_date) orderId,a.site,a.bu_no,a.inspection_no,a.order_no,a.item_no,a.roll_no,a.roll_qty,a.part_no,a.part_desc,a.supplier_id,a.supplier_name,
a.order_qty,a.created_by,a.created_date,a.update_by,a.updated_date,a.delflag,a.version,a.print_flag,a.citem_code,
a.citem_class,a.sendto_address,a.hardtag_in_flag,a.batch_no,a.production_date,a.validity_period,a.chip_disk_no,
a.expiration_warning_date,a.expiration_date
SELECT
ROW_NUMBER () OVER (ORDER BY a.created_date) orderId,
a.site,
a.bu_no,
a.inspection_no,
a.order_no,
a.item_no,
a.roll_no,
a.roll_qty,
a.part_no,
a.part_desc,
a.supplier_id,
a.supplier_name,
a.order_qty,
a.created_by,
a.created_date,
a.update_by,
a.updated_date,
a.delflag,
a.version,
a.print_flag,
a.citem_code,
a.citem_class,
a.sendto_address,
a.hardtag_in_flag,
a.batch_no,
a.production_date,
a.validity_period,
a.chip_disk_no,
a.expiration_warning_date,
a.expiration_date
from po_order_roll_no a
<where>
and A.site=#{site}
and A.bu_no=#{buNo}
and A.inspection_no=#{inspectionNo,jdbcType=VARCHAR}
</where>
where
A.site = #{site} and A.bu_no = #{buNo}
and A.inspection_no = #{inspectionNo,jdbcType=VARCHAR}
</select>
<select id="getInboundQcResultOtherData" resultType="PoOrderRollNoOutData">
@ -189,6 +223,36 @@
</select>
<!-- 查询物料有效期信息 -->
<select id="getPartExpirationInfo" resultType="PoOrderRollNoOutData">
SELECT
expiration_flag as expirationFlag,
expiration_day as expirationDay,
expiration_warning_day as expirationWarningDay
FROM part
WHERE site = #{site}
AND bu_no = #{buNo}
AND PartNo = #{partNo}
</select>
<!-- 查询文件信息 -->
<select id="queryFileId" resultType="java.util.HashMap">
SELECT
id,
file_name as fileName
FROM sys_oss
WHERE order_ref1 = #{orderRef1}
AND order_ref2 = #{orderRef2}
</select>
<!-- 检查标签条码是否已存在 -->
<select id="checkRollNoExists" resultType="int">
SELECT COUNT(1)
FROM po_order_roll_no
WHERE site = #{site}
AND roll_no = #{rollNo}
</select>
<!-- 更新库存标签属性 -->
<update id="updateInventoryStockAttribute">
UPDATE inventory_stock

Loading…
Cancel
Save