feat: 添加功能

This commit is contained in:
曹鹏飞 2025-07-28 18:37:45 +08:00
parent 79b3685830
commit 03dc0985de
48 changed files with 837 additions and 199 deletions

View File

@ -19,12 +19,10 @@ import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrder;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrderPrint;
import com.nflg.wms.repository.entity.WmsNormalPrintOrder;
import com.nflg.wms.repository.entity.WmsWorkbench;
import com.nflg.wms.repository.service.IWmsDeliverNormalOrderPrintService;
import com.nflg.wms.repository.service.IWmsDeliverNormalOrderService;
import com.nflg.wms.repository.service.IWmsWorkbenchService;
import com.nflg.wms.repository.service.WmsNormalPrintOrderService;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@ -44,21 +42,18 @@ import java.util.*;
import java.util.stream.Collectors;
/**
* 常规送货单订单管理
* 普通物料订单管理
*/
@RestController
@RequestMapping("/deliver/order/normal")
public class NormalDeliverOrderController extends BaseController {
public class NormalOrderController extends BaseController {
@Resource
private IWmsDeliverNormalOrderService deliverNormalOrderService;
private WmsNormalPrintOrderService deliverNormalOrderService;
@Resource
private IWmsWorkbenchService workbenchService;
@Resource
private IWmsDeliverNormalOrderPrintService deliverNormalOrderPrintService;
/**
* 保存
*/
@ -77,16 +72,16 @@ public class NormalDeliverOrderController extends BaseController {
List<Long> ids= request.getItems().stream().map(DeliverNormalOrderSaveItemQO::getId).filter(Objects::nonNull).toList();
String orderNo;
if (CollectionUtil.isNotEmpty(ids)) {
Set<String> orderNos = deliverNormalOrderService.lambdaQuery().select(WmsDeliverNormalOrder::getOrderNo).in(WmsDeliverNormalOrder::getId).list().stream().map(WmsDeliverNormalOrder::getOrderNo).collect(Collectors.toSet());
Set<String> orderNos = deliverNormalOrderService.lambdaQuery().select(WmsNormalPrintOrder::getOrderNo).in(WmsNormalPrintOrder::getId).list().stream().map(WmsNormalPrintOrder::getOrderNo).collect(Collectors.toSet());
VUtil.trueThrowBusinessError(orderNos.size() > 1).throwMessage("单据号不一致");
orderNo = orderNos.iterator().next();
} else {
orderNo = getDeliverNormalOrderNo();
}
List<WmsDeliverNormalOrder> forAdd=new ArrayList<>();
List<WmsDeliverNormalOrder> forUpdate=new ArrayList<>();
List<WmsNormalPrintOrder> forAdd=new ArrayList<>();
List<WmsNormalPrintOrder> forUpdate=new ArrayList<>();
request.getItems().forEach(it -> {
WmsDeliverNormalOrder item= Convert.convert(WmsDeliverNormalOrder.class, it);
WmsNormalPrintOrder item= Convert.convert(WmsNormalPrintOrder.class, it);
item.setWorkbenchId(workbenches.stream().filter(w->Objects.equals(w.getNo(),it.getWorkbenchNo())).findFirst().get().getId());
if (Objects.isNull(item.getId())){
item.setOrderNo(orderNo);
@ -154,19 +149,11 @@ public class NormalDeliverOrderController extends BaseController {
// .setBatchNo("TEST00001")
// );
List<DeliverNormalOrderItemDTO> datas = new ArrayList<>();
List<WmsDeliverNormalOrderPrint> prints=new ArrayList<>();
for (DeliverNormalOrderVO order : orders) {
WmsDeliverNormalOrderPrint print=new WmsDeliverNormalOrderPrint();
print.setDeliverId(order.getId());
print.setBatchNum(order.getBatchNum());
print.setMinPackageNum(order.getMinPackageNum());
print.setLableNum(order.getLableNum());
print.setNo(NoUtil.getForOrderPrintNo());
prints.add(print);
for (int i = 0; i < order.getLableNum(); i++) {
DeliverNormalOrderItemDTO dto = Convert.convert(DeliverNormalOrderItemDTO.class, order);
dto.setIndex(i);
dto.setPrintNo(print.getNo() + "-" + i);
dto.setPrintNo(order.getId() + "-" + i);
if (i == order.getLableNum() - 1) {
dto.setPrintNum(order.getBatchNum().divideAndRemainder(order.getMinPackageNum())[1]);
} else {
@ -176,7 +163,6 @@ public class NormalDeliverOrderController extends BaseController {
datas.add(dto);
}
}
deliverNormalOrderPrintService.saveBatch(prints);
Map<String, Object> variables = new HashMap<>();
variables.put("list", datas);
String html = ThymeleafUtil.generator("/template/qrcode/", "dp", ".html", variables);

View File

@ -14,8 +14,9 @@ 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;
import com.nflg.wms.admin.pojo.dto.ZIM003DTO;
import com.nflg.wms.admin.pojo.dto.ZIM003Item1DTO;
import com.nflg.wms.admin.repository.PackageMaterialScanRecordRepository;
import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.util.NoUtil;
@ -104,9 +105,18 @@ public class StructuralPackageOrderController extends BaseController {
@Resource
private IWmsInTaskService inTaskService;
@Resource
private IWmsInTaskItemService inTaskItemService;
@Resource
private IUserSupplierService userSupplierService;
@Resource
private IWmsInventoryService inventoryService;
@Resource
private IWmsStorageService storageService;
/**
* 搜索SAP订单
* @param request 请求参数
@ -245,6 +255,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 搜索
* @param request 请求参数
*/
@PostMapping("search")
public ApiResult<PageData<DeliverStructuralPackageOrderVO>> search(@Valid @RequestBody StructuralPackageOrderSearchQO request) {
@ -253,7 +264,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 根据单据号获取列表
*
* @param orderNo 单据号
*/
@GetMapping("getList")
@ -295,6 +305,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 删除
* @param ids 要删除的id列表
*/
@PostMapping("delete")
public ApiResult<Void> delete(@Valid @RequestBody @NotEmpty List<Long> ids) {
@ -304,6 +315,7 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 根据订单状态搜索
* @param request 请求参数
*/
@PostMapping("searchByState")
public ApiResult<PageData<DeliverStructuralPackageOrderExtendVO>> searchByState(@Valid @RequestBody StructuralPackageOrderSearchByStateQO request) {
@ -312,7 +324,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出选中的id列表
*
* @param ids id列表
*/
@PostMapping("exportByIds")
@ -323,7 +334,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出搜索结果
*
* @param request 搜索参数
*/
@PostMapping("exportSearchByState")
@ -337,7 +347,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 获取托盘零件列表
*
* @param id 托盘id
*/
@GetMapping("getItems")
@ -347,7 +356,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出托盘零件列表
*
* @param id 托盘id
*/
@PostMapping("exportItems")
@ -358,7 +366,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出老鼠图PDF
*
* @param id 托盘id
*/
@GetMapping("exportPdf")
@ -401,7 +408,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出零件标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportItemPdf")
@ -427,7 +433,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出托盘标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportTrayPdf")
@ -444,7 +449,6 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 导出齐套标签PDF
*
* @param id 托盘id
*/
@GetMapping("exportQiTaoPdf")
@ -490,22 +494,42 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
.eq(WmsStructuralPackageOrderTray::getNo, request.getTrayNo())
.update()).throwMessage("打包失败,请重试");
packageMaterialScanRecordRepository.saveAll(request.getQrCodes().stream().map(qrCode -> {
saveMaterialQrCodeScanRecord(request.getQrCodes(),1);
return ApiResult.success();
}
/**
* 保存物料二维码扫描记录
* @param content 二维码内容列表
* @param type 类型
*/
private void saveMaterialQrCodeScanRecord(List<String> content,Integer type){
packageMaterialScanRecordRepository.saveAll(content.stream().map(qrCode -> {
List<String> qrContents = StrUtil.split(qrCode, "^");
if (CollectionUtil.isEmpty(qrContents)) {
return null;
qrContents=StrUtil.split(qrContents.get(1), "_");
return new PackageMaterialScanRecord()
.setUniqNo(qrCode)
.setContent(qrCode)
.setMaterialNo(qrContents.get(0))
.setTrayNo(qrContents.get(1))
.setType(type)
.setNum(qrContents.get(2))
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now());
}else {
List<String> datas = StrUtil.split(qrContents.get(1), "_");
return new PackageMaterialScanRecord()
.setUniqNo(qrContents.get(0))
.setContent(qrCode)
.setMaterialNo(datas.get(0))
.setTrayNo(datas.get(1))
.setType(type)
.setNum(datas.get(2))
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now());
}
List<String> datas = StrUtil.split(qrContents.get(1), "_");
return new PackageMaterialScanRecord()
.setUniqNo(qrContents.get(0))
.setContent(qrContents.get(1))
.setMaterialNo(datas.get(0))
.setRecords(List.of(new PackageMaterialScanRecordItem()
.setType(1)
.setCreateBy(UserUtil.getUserName())
.setCreateTime(Instant.now())));
}).toList());
return ApiResult.success();
}).filter(Objects::nonNull).toList());
}
/**
@ -569,6 +593,15 @@ public class StructuralPackageOrderController extends BaseController {
return ApiResult.success(structuralPackageDeliverOrderService.search(request));
}
/**
* 获取送货单详情信息
* @param id 送货单ID
*/
@GetMapping("getDeliverOrderInfo")
public ApiResult<List<DeliverStructuralPackageOrderVO>> getDeliverOrderInfo(@Valid @RequestParam @NotNull Long id){
return ApiResult.success(structuralPackageDeliverOrderService.getInfo(id));
}
/**
* 导出送货单
* @param id 送货单id
@ -685,24 +718,102 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
.eq(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.update();
structuralPackageDeliverOrderService.updateStateByOrderId(request.getId());
//创建上架任务
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))
.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)
.setReceivedWarehouse(storageService.getWarehouseNo("1010",order.getPackageNo()))
.setOperationUserId(UserUtil.getUserId())
.setOperationUserName(UserUtil.getUserName())
.setBatchNumber(order.getModelNo())), (short) 1))
.throwMessage("创建上架任务失败");
return ApiResult.success();
}
/**
* 搜索上架任务列表PDA使用
* @param request 请求参数
*/
@PostMapping("searchIn")
public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestBody @NotNull InTaskSearchQO request){
return ApiResult.success(inTaskService.searchForIn(request));
}
/**
* 获取上架任务详情PDA使用
* @param taskNo 上架任务单号
*/
@GetMapping("getInTaskInfo")
public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotNull String taskNo) {
List<WmsInTaskItem> list = inTaskItemService.getListForStorage(taskNo);
List<InTaskInfoVO> datas = Convert.toList(InTaskInfoVO.class, list);
for (InTaskInfoVO item : datas) {
SAPSyncFromDTO dto = sapService.getStorage(item.getFactory(), item.getReceivedWarehouse(), item.getItemCode());
if (Objects.nonNull(dto)) {
item.setBinNos(dto.getBinNos());
}
}
return ApiResult.success(datas);
}
/**
* 上架PDA使用
* @param request 请求参数
*/
@Transactional
@PostMapping("materialStorage")
public ApiResult<Void> materialStorage(@Valid @RequestBody @NotNull MaterailStorageQO request) {
WmsInTask task=inTaskService.lambdaQuery().eq(WmsInTask::getTaskNumber, request.getTaskNo()).one();
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
inTaskService.storage(request.getTaskNo());
List<WmsInTaskItem> datas = inTaskItemService.storage(request);
if (CollectionUtil.isNotEmpty(datas)) {
inventoryService.saveBatch(datas.stream().map(ti -> {
BigDecimal num = request.getItems().stream()
.filter(it -> StrUtil.equals(it.getMaterialNo(), ti.getItemCode()))
.findFirst()
.get()
.getNum();
BigDecimal total = Objects.isNull(num) ? ti.getQualifiedQty() : ti.getQualifiedQty().subtract(num);
SAPMaterialInfoInOrderDTO dto = sapService.getMaterialInfoInOrder(ti.getPoNum(), ti.getSupplierNum(), ti.getItemCode());
sapService.zim003(new ZIM003DTO()
.setEbeln(dto.getEbeln())
.setUsnam(UserUtil.getUserName())
.setItem(new ZIM003Item1DTO()
.setEBELP(dto.getEbelp())
.setMATNR(ti.getItemCode())
.setERFMG(String.valueOf(total))
.setMEINS("")
.setCHARG(ti.getBatchNumber())
.setWERKS(ti.getFactory())
.setLGORT(ti.getReceivedWarehouse())
.setKZKRI(ti.getIsQuality() ? "1" : "0")
)
);
return new WmsInventory()
.setMaterialNo(ti.getItemCode())
.setNum(total)
.setFactoryNo(ti.getFactory())
.setWarehouseNo(ti.getReceivedWarehouse())
.setBinNos(ti.getStorageLocation())
.setExternalOrderNo(ti.getPoNum())
.setRowNo(ti.getPoLineNumber())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
}).toList()
);
}
return ApiResult.success();
}
}

View File

@ -5,7 +5,7 @@ import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.List;
import java.time.Instant;
@Data
@Accessors(chain = true)
@ -31,7 +31,37 @@ public class PackageMaterialScanRecord {
private String content;
/**
* 扫描记录
* 托盘号
*/
private List<PackageMaterialScanRecordItem> records;
}
private String trayNo;
/**
* 批次号
*/
private String batchNo;
/**
* 序列号
*/
private String serialNo;
/**
* 数量
*/
private String num;
/**
* 扫描类型1打包
*/
private Integer type;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private Instant createTime;
}

View File

@ -1,30 +0,0 @@
package com.nflg.wms.admin.pojo.document;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import java.time.Instant;
@Data
@Accessors(chain = true)
public class PackageMaterialScanRecordItem {
@Id
private String id;
/**
* 扫描类型1打包
*/
private Integer type;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private Instant createTime;
}

View File

@ -18,4 +18,19 @@ public class SAPMaterialInfoInOrderDTO {
* 仓库编号
*/
private String warehouseNo;
/**
* 采购凭证号
*/
private String ebeln;
/**
* 采购凭证的项目编号
*/
private String ebelp;
/**
* 打印参数
*/
private String lbprt;
}

View File

@ -0,0 +1,21 @@
package com.nflg.wms.admin.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class ZIM003DTO {
/**
* 采购凭证号
*/
private String ebeln;
/**
* 用户名
*/
private String usnam;
private ZIM003Item1DTO item;
}

View File

@ -0,0 +1,29 @@
package com.nflg.wms.admin.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class ZIM003Item1DTO {
private String EBELP;
private String MATNR;
private String ERFMG;
private String MEINS;
private String CHARG;
private String WERKS;
private String LGORT;
private String KZKRI;
private String SERNR;
private String FLAG;
}

View File

@ -3,6 +3,7 @@ package com.nflg.wms.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.admin.pojo.dto.ZIM003DTO;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.dto.SAPOrderDTO;
@ -24,6 +25,29 @@ public class SapService {
@Resource
private JCoRepository repository;
/**
* 扫码入库
* @param dto 数据
*/
public void zim003(ZIM003DTO dto){
Map<String, Object> parameters = new HashMap<>();
parameters.put("EBELP", dto.getEbeln());
parameters.put("USNAM", dto.getUsnam());
}
/**
* 获取库存信息
* @param factory 工厂编号
* @param warehouseNo 仓库编号
* @param materialNo 物料编号
*/
public SAPSyncFromDTO getStorage(String factory, String warehouseNo,String materialNo) {
return getStorage(factory, Collections.singletonList(warehouseNo), Collections.singletonList(materialNo), null, null)
.stream().findFirst().orElse(null);
}
/**
* 获取库存信息
* @param factory 工厂编号
@ -89,7 +113,10 @@ public class SapService {
tOut.setRow(0);
return new SAPMaterialInfoInOrderDTO()
.setTransportNum(tOut.getBigDecimal("WSHSL"))
.setWarehouseNo(tOut.getString("LGORT"));
.setWarehouseNo(tOut.getString("LGORT"))
.setEbeln(tOut.getString("EBELN"))
.setEbelp(tOut.getString("EBELP"))
.setLbprt(tOut.getString("LBPRT"));
}
/**

View File

@ -1,6 +1,5 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
@ -10,12 +9,6 @@ public class DeliverNormalOrderSaveItemQO {
private Long id;
/**
* 订单类型0采购单1送货单
*/
@NotNull
private Integer type;
/**
* 送货单号
*/

View File

@ -0,0 +1,19 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class InTaskSearchQO {
/**
* 任务来源 1钢构包送货单 2普通物料送货单
*/
@NotNull
private short taskFrom;
/**
* 任务单号或原始单号
*/
private String no;
}

View File

@ -0,0 +1,29 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class MaterailStorageItemQO {
/**
* 物料编号
*/
@NotBlank
private String materialNo;
/**
* 储位列表
*/
@NotEmpty
private List<String> binNos;
/**
* 越库数量
*/
private BigDecimal num=BigDecimal.ZERO;
}

View File

@ -0,0 +1,23 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
import java.util.List;
@Data
public class MaterailStorageQO {
/**
* 上架任务单号
*/
@NotBlank
private String taskNo;
/**
* 物料储位设置
*/
@NotEmpty
private List<MaterailStorageItemQO> items;
}

View File

@ -0,0 +1,59 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class InTaskInfoVO {
/**
* 子任务id
*/
private Long id;
/**
* 采购订单号
*/
private String poNum;
/**
* 采购订单行号
*/
private String poLineNumber;
/**
* 工厂
*/
private String factory;
/**
* 送货单号
*/
private String noteNum;
/**
* 物料编号
*/
private String itemCode;
/**
* 物料描述
*/
private String itemName;
/**
* 上架数量
*/
private BigDecimal qualifiedQty;
/**
* 上架仓库
*/
private String receivedWarehouse;
/**
* 上架储位
*/
private String binNos;
}

View File

@ -0,0 +1,31 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class InTaskVO {
private Long id;
/**
* 任务单号
*/
private String taskNumber;
/**
* 任务来源 1钢构包送货单 2普通物料送货单
*/
private Short taskFrom;
/**
* 任务源单号
*/
private String orderNumber;
/**
* 任务时间
*/
private LocalDateTime updateTime;
}

View File

@ -49,12 +49,12 @@ public class StructuralPackageDeliverOrderVO {
/**
* 供应商代码
*/
private Long supplierCode;
private String supplierCode;
/**
* 供应商名称
*/
private Long supplierName;
private String supplierName;
/**
* 工厂编号

View File

@ -34,8 +34,14 @@ public class WmsInTaskItem implements Serializable {
private String taskNumber;
/**
* 采购订单行号
*/
private String poLineNumber;
/**
* 采购订单号
*/
private String poNum;
/**
@ -148,5 +154,10 @@ public class WmsInTaskItem implements Serializable {
*/
private LocalDateTime periodTime;
private String inspectionOrder;
private String inspectionOrder;
/**
* 供应商编码
*/
private String supplierNum;
}

View File

@ -14,7 +14,7 @@ import java.time.LocalDateTime;
/**
* <p>
* 送货单普通物料打印记录
*
* </p>
*
* @author 代码生成器生成
@ -24,8 +24,8 @@ import java.time.LocalDateTime;
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_deliver_normal_order_print")
public class WmsDeliverNormalOrderPrint implements Serializable {
@TableName("wms_inventory")
public class WmsInventory implements Serializable {
private static final long serialVersionUID = 1L;
@ -33,29 +33,29 @@ public class WmsDeliverNormalOrderPrint implements Serializable {
private Long id;
/**
* 单据id
* 物料编号
*/
private Long deliverId;
private String materialNo;
/**
* 唯一码
* 工厂编号
*/
private String no;
private String factoryNo;
/**
* 本批数量
* 仓库编号
*/
private BigDecimal batchNum;
private String warehouseNo;
/**
* 最小包装数量
* 储位编号逗号分隔
*/
private BigDecimal minPackageNum;
private String binNos;
/**
* 标签数量
* 数量
*/
private Integer lableNum;
private BigDecimal num;
/**
* 创建人
@ -66,4 +66,24 @@ public class WmsDeliverNormalOrderPrint implements Serializable {
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 采购单订单号
*/
private String externalOrderNo;
/**
* 采购单订单行号
*/
private String rowNo;
}

View File

@ -24,8 +24,8 @@ import java.time.LocalDateTime;
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_deliver_normal_order")
public class WmsDeliverNormalOrder implements Serializable {
@TableName("wms_normal_print_order")
public class WmsNormalPrintOrder implements Serializable {
private static final long serialVersionUID = 1L;
@ -42,23 +42,18 @@ public class WmsDeliverNormalOrder implements Serializable {
*/
private Long supplierId;
/**
* 订单类型0采购单1送货单
*/
private Integer type;
/**
* 送货单号
*/
private String externalDeliverNo;
/**
* 订单号
* 采购单订单号
*/
private String externalOrderNo;
/**
* 订单行号
* 采购单订单行号
*/
private String rowNo;

View File

@ -37,7 +37,7 @@ public class WmsStructuralPackageDeliverOrder implements Serializable {
private String no;
/**
* 状态0待收货1已收货2-已完结
* 状态0待收货1收货中2已收货
*/
private Short state;

View File

@ -1,16 +0,0 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrderPrint;
/**
* <p>
* 送货单普通物料打印记录 Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsDeliverNormalOrderPrintMapper extends BaseMapper<WmsDeliverNormalOrderPrint> {
}

View File

@ -1,8 +1,12 @@
package com.nflg.wms.repository.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.nflg.wms.common.pojo.qo.InTaskSearchQO;
import com.nflg.wms.common.pojo.vo.InTaskVO;
import com.nflg.wms.repository.entity.WmsInTask;
import java.util.List;
/**
* <p>
* Mapper 接口
@ -13,4 +17,5 @@ import com.nflg.wms.repository.entity.WmsInTask;
*/
public interface WmsInTaskMapper extends BaseMapper<WmsInTask> {
List<InTaskVO> searchForIn(InTaskSearchQO request);
}

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.WmsInventory;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface WmsInventoryMapper extends BaseMapper<WmsInventory> {
}

View File

@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrder;
import com.nflg.wms.repository.entity.WmsNormalPrintOrder;
import java.util.List;
@ -17,7 +17,7 @@ import java.util.List;
* @author 代码生成器生成
* @since 2025
*/
public interface WmsDeliverNormalOrderMapper extends BaseMapper<WmsDeliverNormalOrder> {
public interface WmsNormalPrintOrderMapper extends BaseMapper<WmsNormalPrintOrder> {
IPage<DeliverNormalOrderVO> search(DeliverNormalOrderSearchQO request, Page<?> page);

View File

@ -25,4 +25,6 @@ public interface WmsStorageMapper extends BaseMapper<WmsStorage> {
List<StorageVO> getList(List<Long> ids);
List<StorageVO> searchNonPage(@Param("request") StorageSearchQO request);
String getWarehouseNo(String factoryNo, String materialNo);
}

View File

@ -4,6 +4,7 @@ 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.StructuralPackageDeliverOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO;
import com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO;
import com.nflg.wms.repository.entity.WmsStructuralPackageDeliverOrder;
@ -24,4 +25,8 @@ public interface WmsStructuralPackageDeliverOrderMapper extends BaseMapper<WmsSt
List<Long> getIdsByExternalOrderNo(String externalOrderNo);
String getNoByOrderId(Long id);
boolean allReceived(Long deliverId);
List<DeliverStructuralPackageOrderVO> getInfo(Long id);
}

View File

@ -1,16 +0,0 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrderPrint;
/**
* <p>
* 送货单普通物料打印记录 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsDeliverNormalOrderPrintService extends IService<WmsDeliverNormalOrderPrint> {
}

View File

@ -1,7 +1,10 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.MaterailStorageQO;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@ -14,4 +17,8 @@ import java.util.List;
* @since 2025
*/
public interface IWmsInTaskItemService extends IService<WmsInTaskItem> {
List<WmsInTaskItem> getListForStorage(@Valid @NotNull String taskNo);
List<WmsInTaskItem> storage(@Valid @NotNull MaterailStorageQO request);
}

View File

@ -1,8 +1,13 @@
package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsInTask;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.InTaskSearchQO;
import com.nflg.wms.common.pojo.vo.InTaskVO;
import com.nflg.wms.repository.entity.WmsInTask;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@ -23,4 +28,8 @@ public interface IWmsInTaskService extends IService<WmsInTask> {
* @return
*/
boolean generateTask(List<WmsInTaskItem> tasks, short taskSource) ;
List<InTaskVO> searchForIn(@Valid @NotNull InTaskSearchQO request);
void storage(@NotBlank String taskNo);
}

View File

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

View File

@ -0,0 +1,16 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.WmsNormalPrintOrder;
/**
* <p>
* 送货单普通物料 服务类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsNormalPrintOrderService extends IService<WmsNormalPrintOrder> {
}

View File

@ -34,4 +34,6 @@ public interface IWmsStorageService extends IService<WmsStorage> {
List<StorageVO> getList(List<Long> ids);
List<StorageVO> searchNonPage(@Valid StorageSearchQO request);
String getWarehouseNo(String factoryNo,String materialNo);
}

View File

@ -3,11 +3,14 @@ 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.StructuralPackageDeliverOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO;
import com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO;
import com.nflg.wms.repository.entity.WmsStructuralPackageDeliverOrder;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import java.util.List;
/**
* <p>
* 服务类
@ -21,4 +24,8 @@ public interface IWmsStructuralPackageDeliverOrderService extends IService<WmsSt
IPage<StructuralPackageDeliverOrderVO> search(@Valid @NotNull StructuralPackageDeliverOrderSearchQO request);
String getNoByOrderId(@NotNull Long id);
void updateStateByOrderId(@NotNull Long orderId);
List<DeliverStructuralPackageOrderVO> getInfo(@Valid @NotNull Long id);
}

View File

@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrder;
import com.nflg.wms.repository.entity.WmsNormalPrintOrder;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@ -18,7 +18,7 @@ import java.util.List;
* @author 代码生成器生成
* @since 2025
*/
public interface IWmsDeliverNormalOrderService extends IService<WmsDeliverNormalOrder> {
public interface WmsNormalPrintOrderService extends IService<WmsNormalPrintOrder> {
void delete(@Valid @NotNull Long id);

View File

@ -1,20 +0,0 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrderPrint;
import com.nflg.wms.repository.mapper.WmsDeliverNormalOrderPrintMapper;
import com.nflg.wms.repository.service.IWmsDeliverNormalOrderPrintService;
import org.springframework.stereotype.Service;
/**
* <p>
* 送货单普通物料打印记录 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Service
public class WmsDeliverNormalOrderPrintServiceImpl extends ServiceImpl<WmsDeliverNormalOrderPrintMapper, WmsDeliverNormalOrderPrint> implements IWmsDeliverNormalOrderPrintService {
}

View File

@ -1,10 +1,16 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.MaterailStorageQO;
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;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
/**
* <p>
@ -17,4 +23,29 @@ import org.springframework.stereotype.Service;
@Service
public class WmsInTaskItemServiceImpl extends ServiceImpl<WmsInTaskItemMapper, WmsInTaskItem> implements IWmsInTaskItemService {
@Override
public List<WmsInTaskItem> getListForStorage(String taskNo) {
return lambdaQuery()
.eq(WmsInTaskItem::getTaskNumber, taskNo)
.eq(WmsInTaskItem::getDataStatus, 0)
.list();
}
@Transactional
@Override
public List<WmsInTaskItem> storage(MaterailStorageQO request) {
return request.getItems().stream().map(item -> {
WmsInTaskItem taskItem = lambdaQuery()
.eq(WmsInTaskItem::getTaskNumber, request.getTaskNo())
.eq(WmsInTaskItem::getDataStatus, 0)
.eq(WmsInTaskItem::getItemCode, item.getMaterialNo())
.one();
if (Objects.nonNull(taskItem)){
taskItem.setDataStatus((short) 1);
taskItem.setStorageLocation(StrUtil.join(",", item.getBinNos()));
updateById(taskItem);
}
return taskItem;
}).filter(Objects::nonNull).toList();
}
}

View File

@ -2,12 +2,14 @@ package com.nflg.wms.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.InTaskSearchQO;
import com.nflg.wms.common.pojo.vo.InTaskVO;
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;
@ -82,4 +84,19 @@ public class WmsInTaskServiceImpl extends ServiceImpl<WmsInTaskMapper, WmsInTask
return result;
}
@Override
public List<InTaskVO> searchForIn(InTaskSearchQO request) {
return baseMapper.searchForIn(request);
}
@Override
public void storage(String taskNo) {
lambdaUpdate()
.set(WmsInTask::getTaskStatus, 2)
.set(WmsInTask::getUpdateTime, LocalDateTime.now())
.lt(WmsInTask::getTaskStatus, 2)
.eq(WmsInTask::getTaskNumber, taskNo)
.update();
}
}

View File

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

View File

@ -5,9 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO;
import com.nflg.wms.repository.entity.WmsDeliverNormalOrder;
import com.nflg.wms.repository.mapper.WmsDeliverNormalOrderMapper;
import com.nflg.wms.repository.service.IWmsDeliverNormalOrderService;
import com.nflg.wms.repository.entity.WmsNormalPrintOrder;
import com.nflg.wms.repository.mapper.WmsNormalPrintOrderMapper;
import com.nflg.wms.repository.service.WmsNormalPrintOrderService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -22,7 +22,7 @@ import java.util.List;
* @since 2025
*/
@Service
public class WmsDeliverNormalOrderServiceImpl extends ServiceImpl<WmsDeliverNormalOrderMapper, WmsDeliverNormalOrder> implements IWmsDeliverNormalOrderService {
public class WmsNormalPrintOrderServiceImpl extends ServiceImpl<WmsNormalPrintOrderMapper, WmsNormalPrintOrder> implements WmsNormalPrintOrderService {
@Transactional
@Override

View File

@ -89,4 +89,9 @@ public class WmsStorageServiceImpl extends ServiceImpl<WmsStorageMapper, WmsStor
public List<StorageVO> searchNonPage(StorageSearchQO request) {
return baseMapper.searchNonPage(request);
}
@Override
public String getWarehouseNo(String factoryNo,String materialNo) {
return baseMapper.getWarehouseNo(factoryNo,materialNo);
}
}

View File

@ -5,12 +5,18 @@ 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.StructuralPackageDeliverOrderSearchQO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO;
import com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsStructuralPackageDeliverOrder;
import com.nflg.wms.repository.entity.WmsStructuralPackageDeliverOrderMap;
import com.nflg.wms.repository.mapper.WmsStructuralPackageDeliverOrderMapper;
import com.nflg.wms.repository.service.IWmsStructuralPackageDeliverOrderMapService;
import com.nflg.wms.repository.service.IWmsStructuralPackageDeliverOrderService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -24,6 +30,9 @@ import java.util.List;
@Service
public class WmsStructuralPackageDeliverOrderServiceImpl extends ServiceImpl<WmsStructuralPackageDeliverOrderMapper, WmsStructuralPackageDeliverOrder> implements IWmsStructuralPackageDeliverOrderService {
@Resource
private IWmsStructuralPackageDeliverOrderMapService wmsStructuralPackageDeliverOrderMapService;
@Override
public IPage<StructuralPackageDeliverOrderVO> search(StructuralPackageDeliverOrderSearchQO request) {
List<Long> externalOrderIds = null;
@ -37,4 +46,20 @@ public class WmsStructuralPackageDeliverOrderServiceImpl extends ServiceImpl<Wms
public String getNoByOrderId(Long id) {
return baseMapper.getNoByOrderId(id);
}
@Override
public void updateStateByOrderId(Long orderId) {
WmsStructuralPackageDeliverOrderMap map=wmsStructuralPackageDeliverOrderMapService.lambdaQuery().eq(WmsStructuralPackageDeliverOrderMap::getOrderId, orderId).one();
lambdaUpdate()
.set(WmsStructuralPackageDeliverOrder::getState, baseMapper.allReceived(map.getDeliverId())?2:1)
.set(WmsStructuralPackageDeliverOrder::getUpdateTime, LocalDateTime.now())
.set(WmsStructuralPackageDeliverOrder::getUpdateBy, UserUtil.getUserName())
.eq(WmsStructuralPackageDeliverOrder::getId, map.getDeliverId())
.update();
}
@Override
public List<DeliverStructuralPackageOrderVO> getInfo(Long id) {
return baseMapper.getInfo(id);
}
}

View File

@ -2,4 +2,12 @@
<!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">
<select id="searchForIn" resultType="com.nflg.wms.common.pojo.vo.InTaskVO">
SELECT *
FROM wms_in_task
where task_from=#{taskFrom} and task_status &lt; 2
<if test="no != null and no!=''">
AND task_number like CONCAT('%', #{no}, '%')
</if>
</select>
</mapper>

View File

@ -1,5 +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.WmsDeliverNormalOrderPrintMapper">
<mapper namespace="com.nflg.wms.repository.mapper.WmsInventoryMapper">
</mapper>

View File

@ -1,9 +1,9 @@
<?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.WmsDeliverNormalOrderMapper">
<mapper namespace="com.nflg.wms.repository.mapper.WmsNormalPrintOrderMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO">
select o.*,us.supplier_name,us.supplier_code, wb.no as workbench_no
from wms_deliver_normal_order o
from wms_normal_print_order o
left join user_supplier us on o.supplier_id=us.user_id
left join wms_workbench wb on o.workbench_id=wb.id
<where>
@ -30,7 +30,7 @@
<select id="getList" resultType="com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO">
select o.*,us.supplier_name,us.supplier_code, wb.no as workbench_no
from wms_deliver_normal_order o
from wms_normal_print_order o
left join user_supplier us on o.supplier_id=us.user_id
left join wms_workbench wb on o.workbench_id=wb.id
where o.id in

View File

@ -68,4 +68,12 @@
</if>
</where>
</select>
<select id="getWarehouseNo" resultType="java.lang.String">
SELECT wh."no"
FROM wms_storage s
INNER JOIN wms_warehouse wh ON s.warehouse_id = wh."id"
INNER JOIN dictionary_item di ON wh.factory_id = di."id"
WHERE s.material_no = #{materialNo} and di."value" = #{factoryNo}
</select>
</mapper>

View File

@ -42,4 +42,30 @@
inner join wms_structural_package_deliver_order_map pdom on pdo.id=pdom.deliver_id
where pdom.order_id=#{id}
</select>
<select id="allReceived" resultType="boolean">
SELECT EXISTS
(
SELECT
om.*
FROM
wms_structural_package_deliver_order_map om
INNER JOIN wms_structural_package_order_tray ot ON om.order_id = ot.order_id
WHERE
om.deliver_id = #{deliverId} AND ot."state" != 3
)
</select>
<select id="getInfo" resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderVO">
SELECT o.*,m.no||wb."no" AS "workbench_code",us.supplier_code,us.supplier_name,sp.order_no AS "package_order_no"
,sp."no" AS "package_no",sp."name" AS "package_desc",m."no" AS "model_no"
FROM wms_structural_package_order o
inner join wms_structural_package_deliver_order_map om on o.id = om.order_id
LEFT JOIN wms_workbench wb ON o.workbench_id = wb."id"
LEFT JOIN user_supplier us ON o.supplier_id = us.user_id
LEFT JOIN wms_structural_package sp ON o.package_id = sp."id"
LEFT JOIN wms_model m on o.model_id = m."id"
where om.deliver_id = #{id}
order by id desc
</select>
</mapper>

View File

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

View File

@ -0,0 +1,64 @@
package com.nflg.wms.scheduled.processor;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.service.IWmsInTaskItemService;
import com.nflg.wms.scheduled.service.SapService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
import tech.powerjob.worker.core.processor.ProcessResult;
import tech.powerjob.worker.core.processor.TaskContext;
import tech.powerjob.worker.core.processor.sdk.BasicProcessor;
import tech.powerjob.worker.log.OmsLogger;
import java.util.List;
/**
* 同步物料库存信息到SAP
*/
@Component(value = "SyncStorageToSAPProcessor")
public class SyncStorageToSAPProcessor implements BasicProcessor {
@Resource
private SapService sapService;
@Resource
private IWmsInTaskItemService inTaskItemService;
@Override
public ProcessResult process(TaskContext context) {
OmsLogger log = context.getOmsLogger();
String param = context.getInstanceParams();
log.info("任务参数:" + param);
List<Long> ids = StrUtil.split(param, ',').stream().map(Long::parseLong).toList();
List<WmsInTaskItem> datas = inTaskItemService.lambdaQuery()
.in(CollectionUtil.isNotEmpty(ids), WmsInTaskItem::getId, ids)
.in(WmsInTaskItem::getDataStatus, List.of(1, 3))
.list();
log.info("待处理数据数量:" + datas.size());
if (CollectionUtil.isNotEmpty(datas)) {
for (int i = 0; i < datas.size(); i++) {
WmsInTaskItem data = datas.get(i);
log.info("({}/{})处理数据:", i + 1, datas.size(), data.getItemCode());
try {
sapService.saveStorage(data.getFactory(), data.getItemCode(), data.getReceivedWarehouse(), StrUtil.split(data.getStorageLocation(), ","));
data.setDataStatus((short) 2);
} catch (Exception ex) {
data.setDataStatus((short) 3);
data.setFailResult(ex.getMessage());
log.error("处理数据失败:{}", ex.getMessage());
} finally {
inTaskItemService.lambdaUpdate()
.set(WmsInTaskItem::getDataStatus, data.getDataStatus())
.set(WmsInTaskItem::getFailResult, data.getFailResult())
.eq(WmsInTaskItem::getId, data.getId())
.update();
log.info("处理完成");
}
}
}
log.info("处理完成");
return new ProcessResult(true);
}
}

View File

@ -1,8 +1,10 @@
package com.nflg.wms.scheduled.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
import com.nflg.wms.common.util.VUtil;
import com.sap.conn.jco.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -20,6 +22,32 @@ public class SapService {
@Resource
private JCoRepository repository;
/**
* 保存库存
* @param factory 工厂编号
* @param materialNo 物料编号
* @param warehouseNo 仓库编号
* @param binNos 储位编号列表
*/
public void saveStorage(String factory,String materialNo,String warehouseNo,List<String> binNos) throws JCoException {
Map<String, Object> parameters = new HashMap<>();
parameters.put("WERKS", factory);
parameters.put("MATNR", materialNo);
parameters.put("LGORT", warehouseNo);
parameters.put("LGPBE", StrUtil.join("/",binNos));
JCoTable tOut = exec("ZWM3A02", parameters);
if (tOut.getNumRows() > 0){
tOut.setRow(0);
VUtil.trueThrowBusinessError(StrUtil.equals(tOut.getString("E_TYPE"),"E"))
.throwMessage(tOut.getString("E_MSG"));
}else {
log.error("保存库存失败");
VUtil.trueThrowBusinessError(true).throwMessage("保存库存失败");
}
}
/**
* 获取库存信息
* @param factory 工厂编号
@ -63,6 +91,10 @@ public class SapService {
return result;
}
private JCoTable exec(String functionName, Map<String, Object> parameters) throws JCoException {
return exec(functionName, parameters, null);
}
private JCoTable exec(String functionName, Map<String, Object> parameters, Map<String, List<Map<String, Object>>> tables) throws JCoException {
JCoFunction function = repository.getFunction(functionName);
log.info("SAP ImportParameter:{}", JSONUtil.toJsonStr(parameters));