Compare commits

...

8 Commits

Author SHA1 Message Date
曹鹏飞 a205964d40 feat: 添加功能 2025-07-27 21:05:02 +08:00
曹鹏飞 8b4f9c0fbe Merge remote-tracking branch '惠信/dev_zhangke' into develop 2025-07-25 17:48:01 +08:00
曹鹏飞 12cdeaece4 添加功能 2025-07-25 17:46:55 +08:00
zhangke c7b0c89970 feat(repository): 生成新的实体和接口
- 生成 IWmsInTaskItemService、IWmsInTaskService、IWmsSrmMaterialReceiptService 接口
- 生成 WmsInTask、WmsInTaskItem、WmsSrmMaterialReceipt 实体类
- 生成 WmsInTaskItemMapper、WmsInTaskMapper、WmsSrmMaterialReceiptMapper 映射接口
- 更新 SRMController 中的代码,使用新的实体和接口- 删除旧的 WmsTask、WmsTaskItem 实体和相关接口
2025-07-25 16:52:40 +08:00
zhangke cc46fe1364 Merge branch 'refs/heads/develop' into dev_zhangke 2025-07-25 16:09:45 +08:00
zhangke 773b7fc347 Merge branch 'develop' into dev_zhangke
# Conflicts:
#	nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java
2025-07-25 15:09:50 +08:00
zhangke 4ee73bc191 tt 2025-07-25 15:09:12 +08:00
zhangke 0665a12cb8 添加SAP Mac环境下的动态库 2025-07-23 17:04:06 +08:00
37 changed files with 1047 additions and 142 deletions

Binary file not shown.

View File

@ -0,0 +1,9 @@
Manifest-Version: 1.0
keyname: SAP JCO
keyvendor: sap.com
keylocation: SAP SE
sapjco release: 3.1
sapjco patch level: 12
sapjco os: darwinarm64

View File

@ -118,6 +118,11 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>cn.idev.excel</groupId>
<artifactId>fastexcel</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
<build>

View File

@ -1,13 +1,16 @@
package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nflg.wms.common.pojo.qo.SRMOrderReceiveQO;
import com.nflg.wms.common.pojo.qo.SRMQualityInspectionResult;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.entity.WmsSrmOrder;
import com.nflg.wms.repository.entity.WmsSrmOrderItem;
import com.nflg.wms.repository.service.IWmsSrmOrderItemService;
import com.nflg.wms.repository.service.IWmsSrmOrderService;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -18,6 +21,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
@ -34,18 +39,24 @@ public class SRMController extends BaseController {
@Resource
private IWmsSrmOrderItemService srmOrderItemService;
@Resource
private IWmsSrmQualityInspectionService srmQualityInspectionService;
@Resource
private IWmsInTaskService taskService;
/**
* 接收SRM送货单
*/
@Transactional
@PostMapping("/SendNFDelivery")
public Object receiveOrder(@RequestBody SRMOrderReceiveQO request){
public Object receiveOrder(@RequestBody SRMOrderReceiveQO request) {
try {
WmsSrmOrder order=srmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.getNoteNum()).one();
if (Objects.nonNull(order)){
WmsSrmOrder order = srmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.getNoteNum()).one();
if (Objects.nonNull(order)) {
srmOrderService.removeById(order);
srmOrderItemService.remove(new LambdaQueryWrapper<WmsSrmOrderItem>().eq(WmsSrmOrderItem::getOrderId,order.getId()));
}else {
srmOrderItemService.remove(new LambdaQueryWrapper<WmsSrmOrderItem>().eq(WmsSrmOrderItem::getOrderId, order.getId()));
} else {
order = new WmsSrmOrder()
.setId(IdUtil.getSnowflakeNextId())
.setIuCode(request.getIuCode())
@ -58,14 +69,104 @@ public class SRMController extends BaseController {
srmOrderService.save(order);
}
WmsSrmOrder finalOrder = order;
srmOrderItemService.saveBatch(request.getResultSet().stream().map(it->{
WmsSrmOrderItem item= Convert.convert(WmsSrmOrderItem.class, it);
srmOrderItemService.saveBatch(request.getResultSet().stream().map(it -> {
WmsSrmOrderItem item = Convert.convert(WmsSrmOrderItem.class, it);
item.setOrderId(finalOrder.getId());
return item;
}).toList());
return 0;
}catch (Exception ex){
log.error("SRM送货单保存失败",ex);
} catch (Exception ex) {
log.error("SRM送货单保存失败", ex);
return ex.getMessage();
}
}
/**
* SRM 推送质检单到WMS
*/
@Transactional
@PostMapping("/SendNFInspect")
public Object receiveQualityInspection(@RequestBody SRMQualityInspectionResult request) {
Integer result = 1;
try {
WmsSrmQualityInspection inspect = srmQualityInspectionService.lambdaQuery()
.eq(WmsSrmQualityInspection::getInspectionNum, request.getInspectionNum())
.one();
List<WmsInTaskItem> tasks = new ArrayList<WmsInTaskItem>();
if (Objects.nonNull(inspect)) {
inspect.setFactory(request.getFactory())
.setDeliveryQty(request.getDeliveryQty())
.setInspectionResult(request.getInspectionResult())
.setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setSupplerNum(request.getSupplierNum())
.setInspectionType(request.getInspectionType())
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setInspectionQty(request.getInspectionQty())
.setUnit(request.getUnit())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setPoNum(request.getPoNum())
.setQualifiedQty(request.getQualifiedQty())
.setMaterialBatch(request.getMaterialBatch())
.setSerialNum(request.getSerialNum())
.setLineNumber(request.getLineNumber())
.setNoteNum(request.getNoteNum())
.setLastModifyTime(LocalDateTime.now());
result = srmQualityInspectionService.updateById(inspect) ? 0 : 1;
} else {
inspect = new WmsSrmQualityInspection()
.setId(IdUtil.getSnowflakeNextId())
.setInspectionNum(request.getInspectionNum())
.setFactory(request.getFactory())
.setDeliveryQty(request.getDeliveryQty())
.setInspectionResult(request.getInspectionResult())
.setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setSupplerNum(request.getSupplierNum())
.setInspectionType(request.getInspectionType())
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setInspectionQty(request.getInspectionQty())
.setUnit(request.getUnit())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setPoNum(request.getPoNum())
.setQualifiedQty(request.getQualifiedQty())
.setMaterialBatch(request.getMaterialBatch())
.setSerialNum(request.getSerialNum())
.setLineNumber(request.getLineNumber())
.setNoteNum(request.getNoteNum())
.setAcceptTime(LocalDateTime.now());
result = srmQualityInspectionService.save(inspect) ? 0 : 1;
}
tasks.add(
new WmsInTaskItem().setItemCode(request.getItemCode())
.setItemName(request.getItemName())
.setReceivedWarehouse(request.getReceivedWarehouse())
.setInspectionQty(request.getInspectionQty())
.setIsQuality(true)
.setFactory(request.getFactory())
.setFailResult(request.unqualifiedReason)
.setPoLineNumber(String.valueOf(request.getPoLineNumber()))
.setPoNum(request.getPoNum())
.setUnit(request.getUnit())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setQualifiedQty(request.getQualifiedQty())
.setSerialNumber(String.valueOf(request.getSerialNum()))
.setSerialNumber(String.valueOf(request.getSerialNum()))
.setLineNumber(String.valueOf(request.getLineNumber()))
.setNoteNum(request.getNoteNum())
.setInspectionOrder(request.receiveNum)
);
if (result == 0 && CollectionUtil.isNotEmpty(tasks))
if (!taskService.generateTask(tasks, (short) 1))
log.error("质检单生成上架任务失败");
return result;
} catch (Exception ex) {
log.error("SRM送货单保存失败", ex);
return ex.getMessage();
}
}

View File

@ -7,6 +7,12 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.idev.excel.EasyExcel;
import cn.idev.excel.enums.CellDataTypeEnum;
import cn.idev.excel.metadata.data.ImageData;
import cn.idev.excel.metadata.data.WriteCellData;
import cn.idev.excel.write.metadata.WriteSheet;
import cn.idev.excel.write.metadata.fill.FillConfig;
import com.nflg.wms.admin.pojo.document.PackageMaterialScanRecord;
import com.nflg.wms.admin.pojo.document.PackageMaterialScanRecordItem;
import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
@ -24,10 +30,7 @@ import com.nflg.wms.common.pojo.dto.SAPOrderDTO;
import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.BeanUtil;
import com.nflg.wms.common.util.EecExcelUtil;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.common.util.*;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.BaseController;
@ -41,6 +44,8 @@ import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@ -50,7 +55,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -94,7 +102,10 @@ public class StructuralPackageOrderController extends BaseController {
private IWmsStructuralPackageDeliverOrderMapService structuralPackageDeliverOrderMapService;
@Resource
private IWmsStructuralPackageStorageTaskService structuralPackageStorageTaskService;
private IWmsInTaskService inTaskService;
@Resource
private IUserSupplierService userSupplierService;
/**
* 搜索SAP订单
@ -558,6 +569,52 @@ public class StructuralPackageOrderController extends BaseController {
return ApiResult.success(structuralPackageDeliverOrderService.search(request));
}
/**
* 导出送货单
* @param id 送货单id
*/
@GetMapping("exportDeliverOrder")
public void exportDeliverOrder(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
WmsStructuralPackageDeliverOrder deliverOrder=structuralPackageDeliverOrderService.getById(id);
VUtil.trueThrowBusinessError(Objects.isNull(deliverOrder)).throwMessage("送货单不存在");
Map<String, Object> info = new HashMap<>();
info.put("deliverOrderNo", deliverOrder.getNo());
WriteCellData<Void> writeCellData = new WriteCellData<>();
writeCellData.setType(CellDataTypeEnum.EMPTY);
ImageData imageData = new ImageData();
imageData.setImageType(ImageData.ImageType.PICTURE_TYPE_PNG);
imageData.setImage(QRCodeUtil.generateQRCode(deliverOrder.getNo(), 100, 100));
imageData.setTop(5);
imageData.setRight(5);
imageData.setBottom(5);
imageData.setLeft(5);
imageData.setRelativeFirstRowIndex(0);
imageData.setRelativeFirstColumnIndex(0);
imageData.setRelativeLastRowIndex(2);
imageData.setRelativeLastColumnIndex(0);
writeCellData.setImageDataList(List.of(imageData));
info.put("qrCodeUrl", writeCellData);
UserSupplier supplier=userSupplierService.getByUserId(deliverOrder.getSupplierId());
VUtil.trueThrowBusinessError(Objects.isNull(supplier)).throwMessage("供应商不存在");
info.put("supplierName", supplier.getSupplierName());
info.put("abbreviation", supplier.getAbbreviation());
info.put("today", DateTimeUtil.format(LocalDate.now(), "yyyy-MM-dd"));
List<DeliverStructuralPackageOrderForPackageItemVO> datas = deliverStructuralPackageOrderService.getInfoByDeliverOrderNo(deliverOrder.getNo());
datas.forEach(it -> {
it.setTrayNum(Math.toIntExact(deliverStructuralPackageOrderTrayService.lambdaQuery()
.eq(WmsStructuralPackageOrderTray::getOrderId, it.getId())
.count()));
});
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(deliverOrder.getNo() + "送货单.xlsx", StandardCharsets.UTF_8));
try (cn.idev.excel.ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(new ClassPathResource("template/钢构包送货单模版.xlsx").getInputStream()).build()) {
WriteSheet writeSheet = EasyExcel.writerSheet().build();
FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
excelWriter.fill(datas, fillConfig, writeSheet);
excelWriter.fill(info, writeSheet);
}
}
/**
* 根据送货单号查询订单信息PDA使用
* @param orderNo 送货单号
@ -574,6 +631,7 @@ public class StructuralPackageOrderController extends BaseController {
.stream()
.map(WmsStructuralPackageOrderTray::getNo)
.toList());
it.setTrayNum(it.getTrayNos().size());
//SAP
SAPMaterialInfoInOrderDTO dto1 = sapService.getMaterialInfoInOrder(it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
if (Objects.isNull(dto1)) {
@ -604,6 +662,8 @@ public class StructuralPackageOrderController extends BaseController {
@Transactional
@PostMapping("receive")
public ApiResult<Void> receive(@Valid @RequestBody @NotNull StructuralPackageOrderReceiveQO request) {
DeliverStructuralPackageOrderVO order=deliverStructuralPackageOrderService.getInfo(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
List<String> trayNos = deliverStructuralPackageOrderTrayService.lambdaQuery()
.select(WmsStructuralPackageOrderTray::getNo)
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
@ -626,25 +686,23 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.update();
//创建上架任务
String deliverOrderNo = structuralPackageDeliverOrderService.getNoByOrderId(request.getId());
String taskNo = "NFS" + deliverOrderNo;
if (Objects.isNull(structuralPackageStorageTaskService.lambdaQuery().eq(WmsStructuralPackageStorageTask::getNo, taskNo).one())){
structuralPackageStorageTaskService.save(new WmsStructuralPackageStorageTask()
.setNo(taskNo)
.setSourceFrom(1)
.setSourceNo(deliverOrderNo)
.setCreateTime(LocalDateTime.now())
);
}
VUtil.trueThrowBusinessError(!inTaskService.generateTask(List.of(new WmsInTaskItem()
.setPoNum(order.getExternalOrderNo())
.setPoLineNumber(order.getRowNo())
.setLineNumber(String.valueOf(order.getId()))
.setNoteNum(structuralPackageDeliverOrderService.getNoByOrderId(request.getId()))
.setItemCode(order.getPackageNo())
.setItemName(order.getPackageDesc())
.setUnit("")
.setIsQuality(false)
.setUnqualifiedQty(BigDecimal.ZERO)
.setQualifiedQty(BigDecimal.valueOf(order.getNum()))
.setFactory("1010")
.setDataStatus((short)0)
.setOperationUserId(UserUtil.getUserId())
.setOperationUserName(UserUtil.getUserName())
.setBatchNumber(order.getModelNo())), (short) 1))
.throwMessage("创建上架任务失败");
return ApiResult.success();
}
/**
* 搜索上架任务
* @param request 查询参数
*/
@PostMapping("searchStorageTask")
public ApiResult<PageData<WmsStructuralPackageStorageTask>> searchStorageTask(@Valid @RequestBody @NotNull StructuralPackageStorageTaskSearchQO request){
return ApiResult.success(structuralPackageStorageTaskService.search(request));
}
}

View File

@ -0,0 +1,120 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class SRMQualityInspectionResult {
/**
质检单号
*/
public String inspectionNum;
/**
工厂
*/
public String factory;
/**
送货数量
*/
public BigDecimal deliveryQty;
/**
检验结果
*/
public String inspectionResult;
/**
物料号
*/
public String itemCode;
/**
供应商代码
*/
public String supplierNum;
/**
检验类型
*/
public String inspectionType;
/**
采购单行号
*/
public String poLineNumber;
/**
检验数量
*/
public BigDecimal inspectionQty;
/**
物料描述
*/
public String itemName;
/**
单位
*/
public String unit;
/**
收货仓库
*/
public String receivedWarehouse;
/**
不合格原因
*/
public String unqualifiedReason;
/**
采购订单号
*/
public String poNum;
/**
物料凭证收货时SAP返回的凭证
*/
public String receiveNum;
/**
不合格数量
*/
public BigDecimal unqualifiedQty;
/**
合格数量合格数量
*/
public BigDecimal qualifiedQty;
/**
收货时的凭证
*/
public String materialBatch;
/**
收货时的批次
*/
public String receiveBatchNum;
/**
收货时的序列号
*/
public String serialNum;
/**
送货单行号
*/
public String lineNumber;
/**
送货单号
*/
public String noteNum;
}

View File

@ -43,6 +43,16 @@ public class DeliverStructuralPackageOrderForPackageItemVO {
*/
private String packageDesc;
/**
* 钢构包图号
*/
private String packageDrawingNo;
/**
* 钢构包备注
*/
private String packageRemark;
/**
* 仓库编号
*/
@ -58,6 +68,11 @@ public class DeliverStructuralPackageOrderForPackageItemVO {
*/
private BigDecimal weight;
/**
* 数量
*/
private Integer num;
/**
* 机台号
*/

View File

@ -9,7 +9,7 @@ import java.time.LocalDateTime;
@Data
public class DeliverStructuralPackageOrderVO {
// private Long id;
private Long id;
/**
* 单据号

View File

@ -23,8 +23,8 @@ import java.time.LocalDateTime;
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_structural_package_storage_task")
public class WmsStructuralPackageStorageTask implements Serializable {
@TableName("wms_in_task")
public class WmsInTask implements Serializable {
private static final long serialVersionUID = 1L;
@ -32,19 +32,19 @@ public class WmsStructuralPackageStorageTask implements Serializable {
private Long id;
/**
* 任务单号
* 任务SJ-+任务源单号
*/
private String no;
private String taskNumber;
/**
* 来源1采购单入库
* 1钢构包送货单 2普通物料送货单
*/
private Integer sourceFrom;
private Short taskFrom;
/**
* 源单号
* 任务源单号
*/
private String sourceNo;
private String orderNumber;
/**
* 创建时间
@ -52,7 +52,17 @@ public class WmsStructuralPackageStorageTask implements Serializable {
private LocalDateTime createTime;
/**
* 上架时间
* 最后一次添加任务单的时间
*/
private LocalDateTime storeTime;
private LocalDateTime updateTime;
/**
* 0 待上架 1 上架中 2 已上架
*/
private Short taskStatus;
/**
* SAP 同步成功或失败
*/
private Boolean sapStatus;
}

View File

@ -0,0 +1,152 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_in_task_item")
public class WmsInTaskItem implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
private String taskNumber;
private String poLineNumber;
private String poNum;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
*/
private String noteNum;
/**
* 物料编号
*/
private String itemCode;
/**
* 物料描述
*/
private String itemName;
/**
* 物料单位
*/
private String unit;
/**
* 仓库编号
*/
private String receivedWarehouse;
/**
* 储位
*/
private String storageLocation;
/**
* 标志位
*/
private Short signPosition;
/**
* 是否质检
*/
private Boolean isQuality;
/**
* 不合格数量
*/
private BigDecimal unqualifiedQty;
/**
* 合格数量
*/
private BigDecimal qualifiedQty;
/**
* 工厂
*/
private String factory;
/**
* 数据状态 0 待上架1 已上架2 sap同步失败
*/
private Short dataStatus;
/**
* sap 同步失败原因
*/
private String failResult;
/**
* 上架操作人
*/
private Long operationUserId;
/**
* 上架操作人
*/
private String operationUserName;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号,多个序列号使用;号隔开
*/
private String serialNumber;
/**
* 报检数量
*/
private BigDecimal inspectionQty;
/**
* 物料凭证编号
*/
private String materialVoucherNum;
/**
* 物料凭证年度
*/
private String materialVoucherYear;
/**
* 物料有效期
*/
private LocalDateTime periodTime;
private String inspectionOrder;
}

View File

@ -0,0 +1,66 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_srm_material_receipt")
public class WmsSrmMaterialReceipt implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
/**
* 普通物料送货单的详情ID
*/
private Long orderItemId;
/**
* 收货数量如果是需要质检的数量为0
*/
private BigDecimal receiptNum;
/**
* 是否质检
*/
private Boolean isQuality;
/**
* 越库数量
*/
private BigDecimal crossNumber;
/**
* 收货数量
*/
private LocalDateTime createTime;
/**
* 收货人编号
*/
private Integer createUserId;
/**
* 收货人名称
*/
private String createUserName;
}

View File

@ -0,0 +1,149 @@
package com.nflg.wms.repository.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_srm_quality_inspection")
public class WmsSrmQualityInspection implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 质检单号
*/
private String inspectionNum;
/**
* 工厂
*/
private String factory;
/**
* 送货数量
*/
private BigDecimal deliveryQty;
/**
* 检验结果
*/
private String inspectionResult;
/**
* 物料编号
*/
private String itemCode;
/**
* 供应商代码
*/
private String supplerNum;
/**
* 检验类型
*/
private String inspectionType;
/**
* 采购单行号
*/
private String poLineNumber;
/**
* 检验数量
*/
private BigDecimal inspectionQty;
/**
* 物料描述
*/
private String itemName;
/**
* 物料单位
*/
private String unit;
/**
* 仓库编号
*/
private String receivedWarehouse;
/**
* 不合格原因
*/
private String unqualifiedReason;
/**
* 采购订单号
*/
private String poNum;
/**
* 物料凭证收货时SAP返回的凭证
*/
private String receiveNum;
/**
* 不合格数量
*/
private BigDecimal unqualifiedQty;
/**
* 合格数量
*/
private BigDecimal qualifiedQty;
/**
* 收货时的凭证
*/
private String materialBatch;
/**
* 收货时的序列号
*/
private String serialNum;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
*/
private String noteNum;
/**
* 接收时间
*/
private LocalDateTime acceptTime;
/**
* 最后修改时间
*/
private LocalDateTime lastModifyTime;
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsInTaskItem;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsInTaskItemMapper extends BaseMapper<WmsInTaskItem> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsInTask;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsInTaskMapper extends BaseMapper<WmsInTask> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsSrmMaterialReceiptMapper extends BaseMapper<WmsSrmMaterialReceipt> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsSrmQualityInspectionMapper extends BaseMapper<WmsSrmQualityInspection> {
}

View File

@ -1,20 +0,0 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.pojo.qo.StructuralPackageStorageTaskSearchQO;
import com.nflg.wms.repository.entity.WmsStructuralPackageStorageTask;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsStructuralPackageStorageTaskMapper extends BaseMapper<WmsStructuralPackageStorageTask> {
IPage<WmsStructuralPackageStorageTask> search(StructuralPackageStorageTaskSearchQO request, Page<?> objectPage);
}

View File

@ -0,0 +1,17 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsInTaskItemService extends IService<WmsInTaskItem> {
}

View File

@ -0,0 +1,26 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsInTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsInTaskService extends IService<WmsInTask> {
/**
* 生成入库任务
* @param tasks 任务详情
* @param taskSource 来源 1钢构包送货单 2普通物料送货单
* @return
*/
boolean generateTask(List<WmsInTaskItem> tasks, short taskSource) ;
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsSrmMaterialReceiptService extends IService<WmsSrmMaterialReceipt> {
}

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsSrmQualityInspectionService extends IService<WmsSrmQualityInspection> {
}

View File

@ -1,21 +0,0 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.StructuralPackageStorageTaskSearchQO;
import com.nflg.wms.repository.entity.WmsStructuralPackageStorageTask;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
/**
* <p>
* 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsStructuralPackageStorageTaskService extends IService<WmsStructuralPackageStorageTask> {
IPage<WmsStructuralPackageStorageTask> search(@Valid @NotNull StructuralPackageStorageTaskSearchQO request);
}

View File

@ -0,0 +1,20 @@
package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.mapper.WmsInTaskItemMapper;
import com.nflg.wms.repository.service.IWmsInTaskItemService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsInTaskItemServiceImpl extends ServiceImpl<WmsInTaskItemMapper, WmsInTaskItem> implements IWmsInTaskItemService {
}

View File

@ -0,0 +1,85 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.nflg.wms.repository.entity.WmsInTask;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.mapper.WmsInTaskMapper;
import com.nflg.wms.repository.service.IWmsInTaskItemService;
import com.nflg.wms.repository.service.IWmsInTaskService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsInTaskServiceImpl extends ServiceImpl<WmsInTaskMapper, WmsInTask> implements IWmsInTaskService {
@Resource
private IWmsInTaskItemService wmsTaskItemService;
@Override
@Transactional
public boolean generateTask(List<WmsInTaskItem> tasks, short taskSource) {
boolean result = false;
if (Objects.isNull(tasks) || CollectionUtil.isEmpty(tasks)) {
return result;
}
try {
List<WmsInTask> newTaskList = new ArrayList<WmsInTask>();
List<WmsInTask> oldTaskList = new ArrayList<WmsInTask>();
tasks.forEach(task -> {
String taskNumber = "SJ-" + task.getNoteNum();
task.setId(IdUtil.getSnowflake().nextId());
task.setTaskNumber(taskNumber);
WmsInTask wmsInTask = lambdaQuery().eq(WmsInTask::getTaskNumber, taskNumber).one();
if (Objects.isNull(wmsInTask)) {
if (!newTaskList.stream().anyMatch(t -> t.getTaskNumber().equals(taskNumber))) {
newTaskList.add(new WmsInTask().setTaskFrom(taskSource)
.setId(IdUtil.getSnowflakeNextId())
.setTaskNumber(taskNumber)
.setOrderNumber(task.getNoteNum())
.setCreateTime(LocalDateTime.now())
.setUpdateTime(LocalDateTime.now())
);
}
} else {
if (!oldTaskList.stream().anyMatch(t -> t.getTaskNumber().equals(taskNumber))) {
wmsInTask.setUpdateTime(LocalDateTime.now());
oldTaskList.add(wmsInTask);
}
}
});
if (CollectionUtil.isNotEmpty(newTaskList)) {
result = saveBatch(newTaskList);
}
if (result && CollectionUtil.isNotEmpty(oldTaskList)) {
result = updateBatchById(oldTaskList);
}
if (result) {
result = wmsTaskItemService.saveBatch(tasks);
}
} catch (Exception e) {
log.error("生成上架任务失败", e);
}
return result;
}
}

View File

@ -0,0 +1,20 @@
package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt;
import com.nflg.wms.repository.mapper.WmsSrmMaterialReceiptMapper;
import com.nflg.wms.repository.service.IWmsSrmMaterialReceiptService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsSrmMaterialReceiptServiceImpl extends ServiceImpl<WmsSrmMaterialReceiptMapper, WmsSrmMaterialReceipt> implements IWmsSrmMaterialReceiptService {
}

View File

@ -0,0 +1,20 @@
package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsSrmQualityInspection;
import com.nflg.wms.repository.mapper.WmsSrmQualityInspectionMapper;
import com.nflg.wms.repository.service.IWmsSrmQualityInspectionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsSrmQualityInspectionServiceImpl extends ServiceImpl<WmsSrmQualityInspectionMapper, WmsSrmQualityInspection> implements IWmsSrmQualityInspectionService {
}

View File

@ -1,27 +0,0 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.StructuralPackageStorageTaskSearchQO;
import com.nflg.wms.repository.entity.WmsStructuralPackageStorageTask;
import com.nflg.wms.repository.mapper.WmsStructuralPackageStorageTaskMapper;
import com.nflg.wms.repository.service.IWmsStructuralPackageStorageTaskService;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsStructuralPackageStorageTaskServiceImpl extends ServiceImpl<WmsStructuralPackageStorageTaskMapper, WmsStructuralPackageStorageTask> implements IWmsStructuralPackageStorageTaskService {
@Override
public IPage<WmsStructuralPackageStorageTask> search(StructuralPackageStorageTaskSearchQO request) {
return baseMapper.search(request,new Page<>(request.getPage(),request.getPageSize()));
}
}

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsInTaskItemMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsInTaskMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsSrmMaterialReceiptMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsSrmQualityInspectionMapper">
</mapper>

View File

@ -62,7 +62,7 @@
<select id="getInfoByDeliverOrderNo" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderForPackageItemVO">
SELECT o.*,m.no||wb."no" AS "workbench_code",us.supplier_code,us.supplier_name,sp."no" AS "package_no"
,sp."name" AS "package_desc"
,sp."name" AS "package_desc",sp.drawing_no as "package_drawing_no",sp.remark as "package_remark",o.num
FROM wms_structural_package_deliver_order pdo
inner join wms_structural_package_deliver_order_map pdom on pdo.id=pdom.deliver_id
LEFT JOIN wms_structural_package_order o on o.id=pdom.order_id

View File

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageStorageTaskMapper">
<select id="search" resultType="com.nflg.wms.repository.entity.WmsStructuralPackageStorageTask">
select *
from wms_structural_package_storage_task
<where>
<if test="request.type != null">
and source_from=#{type}
</if>
<if test="request.taskNo != null and request.taskNo!=''">
and "no" like concat('%', #{request.taskNo}, '%')
</if>
<if test="request.orderNo != null and request.orderNo!=''">
and source_no like concat('%', #{request.orderNo}, '%')
</if>
<if test="request.startDate!=null">
and create_time >= #{request.startDate}
</if>
<if test="request.endDate!=null">
and create_time &lt;= #{request.endDate}
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsTaskItemMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nflg.wms.repository.mapper.WmsTaskMapper">
</mapper>

View File

@ -33,7 +33,7 @@ public class CodeGeneratorTest {
)
.strategyConfig(builder -> {
builder
.addInclude("wms_structural_package_storage_task") //只生成指定表
.addInclude("wms_srm_material_receipt") //只生成指定表
.entityBuilder().idType(IdType.ASSIGN_ID)
.enableLombok()
.enableChainModel()