添加功能

This commit is contained in:
曹鹏飞 2025-07-24 18:51:12 +08:00
parent 2937eeeab2
commit 58637851e4
34 changed files with 495 additions and 66 deletions

View File

@ -61,11 +61,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>

View File

@ -3,6 +3,7 @@ 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 cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
@ -20,8 +21,10 @@ import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.PackageMaterialDTO;
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;
@ -35,6 +38,7 @@ import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
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.transaction.annotation.Transactional;
@ -47,7 +51,6 @@ import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URL;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@ -55,6 +58,7 @@ import java.util.stream.Collectors;
/**
* 钢构件订单管理
*/
@Slf4j
@RestController
@RequestMapping("/deliver/order/package")
public class StructuralPackageOrderController extends BaseController {
@ -89,6 +93,9 @@ public class StructuralPackageOrderController extends BaseController {
@Resource
private IWmsStructuralPackageDeliverOrderMapService structuralPackageDeliverOrderMapService;
@Resource
private IWmsStructuralPackageStorageTaskService structuralPackageStorageTaskService;
/**
* 搜索SAP订单
* @param request 请求参数
@ -141,7 +148,7 @@ public class StructuralPackageOrderController extends BaseController {
.setMaterialDesc(material.getName())
.setVersion(material.getVersion())
.setWeight(material.getWeight())
.setPlanNum(material.getNum().multiply(BigDecimal.valueOf(num)))
.setPlanNum(material.getNum()*num)
.setImage(material.getImage())
);
if (Objects.nonNull(material.getWeight())) {
@ -194,7 +201,7 @@ public class StructuralPackageOrderController extends BaseController {
.setOrderId(order.getId())
.setNo(it.getNo())
.setWeight(BigDecimal.ZERO)
.setNum(BigDecimal.ZERO)
.setNum(0)
.setStation(it.getStation())
.setTray(it.getTray())).toList();
List<WmsStructuralPackageOrderTrayItem> items = new ArrayList<>();
@ -204,8 +211,8 @@ public class StructuralPackageOrderController extends BaseController {
WmsStructuralPackageOrderTrayItem item = Convert.convert(WmsStructuralPackageOrderTrayItem.class, it);
item.setOrderId(order.getId());
item.setTrayId(tray.getId());
tray.setNum(tray.getNum().add(item.getPlanNum().multiply(BigDecimal.valueOf(order.getNum()))));
tray.setWeight(tray.getWeight().add(item.getPlanNum().multiply(it.getWeight())));
tray.setNum(tray.getNum()+(item.getPlanNum()*order.getNum()));
tray.setWeight(tray.getWeight().add(NumberUtil.mul(it.getWeight(),new BigDecimal(item.getPlanNum()))));
return item;
}).toList()
);
@ -391,12 +398,17 @@ public class StructuralPackageOrderController extends BaseController {
DeliverStructuralPackageOrderExtendVO trayVO = deliverStructuralPackageOrderTrayService.getInfo(id);
VUtil.trueThrowBusinessError(Objects.isNull(trayVO)).throwMessage("数据不存在");
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> datas = new ArrayList<>();
for (DeliverStructuralPackageOrderTrayItemVO it : list) {
it.setQrCode(com.nflg.wms.common.util.DateTimeUtil.format(LocalDate.now(),"yyyyMMdd")+RandomUtil.randomString(6) +"_"+it.getMaterialNo() + "_" + it.getTrayNo() + "_1");
it.setQrCodeImage("data:image/png;base64," + Base64.getEncoder().encodeToString(QRCodeUtil.generateQRCode(it.getQrCode(), 200, 200)));
for (int i = 0; i < it.getPlanNum(); i++) {
DeliverStructuralPackageOrderTrayItemVO vo = BeanUtil.copy(it, DeliverStructuralPackageOrderTrayItemVO.class);
vo.setQrCode(it.getId() + "-" + (i + 1) + "^" + it.getMaterialNo() + "_" + it.getTrayNo() + "_1");
vo.setQrCodeImage("data:image/png;base64," + Base64.getEncoder().encodeToString(QRCodeUtil.generateQRCode(vo.getQrCode(), 200, 200)));
datas.add(vo);
}
}
Map<String, Object> variables = new HashMap<>();
variables.put("list", list);
variables.put("list", datas);
String html = ThymeleafUtil.generator("/template/qrcode/", "spitem", ".html", variables);
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
PdfGeneratorUtil.generatePdf(trayVO.getExternalOrderNo() + "-" + trayVO.getWorkbenchCode() + "标签", html, baseUrl.toString(), response);
@ -439,7 +451,7 @@ public class StructuralPackageOrderController extends BaseController {
}
/**
* 根据托盘号获取托盘信息(打包用)
* 根据托盘号获取托盘信息PDA使用
*/
@GetMapping("getTrayInfoByNo")
public ApiResult<DeliverStructuralPackageOrderTrayVO> getTrayInfoByNo(@Valid @RequestParam @NotBlank String trayNo){
@ -459,13 +471,13 @@ public class StructuralPackageOrderController extends BaseController {
WmsStructuralPackageOrderTray tray = deliverStructuralPackageOrderTrayService.lambdaQuery().eq(WmsStructuralPackageOrderTray::getNo, request.getTrayNo()).one();
VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("托盘不存在");
VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Unpackaged.getState())).throwMessage("请勿重复打包");
VUtil.trueThrowBusinessError(tray.getNum().compareTo(BigDecimal.valueOf(request.getQrCodes().size())) == 0).throwMessage("打包数量不足");
VUtil.trueThrowBusinessError(tray.getNum().compareTo(request.getQrCodes().size()) != 0).throwMessage("打包数量不足");
VUtil.trueThrowBusinessError(!deliverStructuralPackageOrderTrayService.lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())
.set(WmsStructuralPackageOrderTray::getPackBy, UserUtil.getUserName())
.set(WmsStructuralPackageOrderTray::getPackTime, LocalDateTime.now())
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
.eq(WmsStructuralPackageOrderTray::getTray, request.getTrayNo())
.eq(WmsStructuralPackageOrderTray::getNo, request.getTrayNo())
.update()).throwMessage("打包失败,请重试");
packageMaterialScanRecordRepository.saveAll(request.getQrCodes().stream().map(qrCode -> {
List<String> qrContents = StrUtil.split(qrCode, "^");
@ -519,7 +531,7 @@ public class StructuralPackageOrderController extends BaseController {
.throwMessage("采购单号必须一致");
Long packageId = trays.get(0).getPackageId();
String externalOrderNo = trays.get(0).getExternalOrderNo();
Long supplierId=trays.get(0).getSupplierId();
Long supplierId = trays.get(0).getSupplierId();
List<Long> tids = deliverStructuralPackageOrderTrayService.getIdsByMaterialAndExternalOrderNo(packageId, externalOrderNo);
VUtil.trueThrowBusinessError(tids.size() != ids.size()).throwMessage("数据未齐套");
String deliverOrderNo = RandomUtil.randomString(10);
@ -532,6 +544,7 @@ public class StructuralPackageOrderController extends BaseController {
structuralPackageDeliverOrderMapService.saveBatch(ids.stream().map(id -> new WmsStructuralPackageDeliverOrderMap()
.setDeliverId(deliverOrder.getId())
.setOrderId(id)).toList());
deliverStructuralPackageOrderTrayService.setStateByIds(ids, OrderState.InTransit);
return ApiResult.success();
}
@ -545,12 +558,92 @@ public class StructuralPackageOrderController extends BaseController {
}
/**
* 根据送货单号查询订单信息
* 根据送货单号查询订单信息PDA使用
* @param orderNo 送货单号
*/
@GetMapping("getInfoByExternalOrderNo")
public ApiResult<DeliverStructuralPackageOrderForPackageVO> getInfoByExternalOrderNo(@Valid @RequestParam @NotBlank String orderNo){
List<DeliverStructuralPackageOrderForPackageItemVO> datas=deliverStructuralPackageOrderService.getInfoByExternalOrderNo(orderNo);
return ApiResult.success(new DeliverStructuralPackageOrderForPackageVO());
public ApiResult<DeliverStructuralPackageOrderForPackageVO> getInfoByExternalOrderNo(@Valid @RequestParam @NotBlank String orderNo) {
List<DeliverStructuralPackageOrderForPackageItemVO> datas = deliverStructuralPackageOrderService.getInfoByExternalOrderNo(orderNo);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(datas)).throwMessage("未找到数据");
datas.forEach(it -> {
it.setTrayNos(deliverStructuralPackageOrderTrayService.lambdaQuery()
.select(WmsStructuralPackageOrderTray::getNo)
.eq(WmsStructuralPackageOrderTray::getOrderId, it.getId())
.list()
.stream()
.map(WmsStructuralPackageOrderTray::getNo)
.toList());
//SAP
SAPMaterialInfoInOrderDTO dto1 = sapService.getMaterialInfoInOrder(it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
if (Objects.isNull(dto1)) {
log.error("{},{},{}未从SAP的ZIM_004接口查询到数据", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
} else if (StrUtil.isBlank(dto1.getWarehouseNo())) {
log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
} else {
it.setWarehouseNo(dto1.getWarehouseNo());
List<SAPSyncFromDTO> dtos = sapService.getStorage("1010", List.of(dto1.getWarehouseNo()), List.of(it.getPackageNo()), null, null);
if (CollectionUtil.isEmpty(dtos)) {
log.error("{},{},{}未从SAP的ZWM3A01接口查询到数据", "1010", dto1.getWarehouseNo(), it.getPackageNo());
} else {
it.setBinNos(dtos.get(0).getBinNos());
}
}
});
DeliverStructuralPackageOrderForPackageVO vo = new DeliverStructuralPackageOrderForPackageVO();
vo.setItems(datas);
vo.setSupplierCode(datas.get(0).getSupplierCode());
vo.setSupplierName(datas.get(0).getSupplierName());
return ApiResult.success(vo);
}
/**
* 收货PDA使用
* @param request 请求参数
*/
@Transactional
@PostMapping("receive")
public ApiResult<Void> receive(@Valid @RequestBody @NotNull StructuralPackageOrderReceiveQO request) {
List<String> trayNos = deliverStructuralPackageOrderTrayService.lambdaQuery()
.select(WmsStructuralPackageOrderTray::getNo)
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
.list()
.stream()
.map(WmsStructuralPackageOrderTray::getNo)
.toList();
VUtil.trueThrowBusinessError(!new HashSet<>(trayNos).equals(new HashSet<>(request.getTrayNos())))
.throwMessage("托盘未齐套");
VUtil.trueThrowBusinessError(!deliverStructuralPackageOrderTrayService.lambdaQuery()
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
.eq(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.exists())
.throwMessage("没有需要收货的数据");
deliverStructuralPackageOrderTrayService.lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, OrderState.Received.getState())
.set(WmsStructuralPackageOrderTray::getReceiveBy,UserUtil.getUserName())
.set(WmsStructuralPackageOrderTray::getReceiveTime, LocalDateTime.now())
.eq(WmsStructuralPackageOrderTray::getOrderId, request.getId())
.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())
);
}
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

@ -13,4 +13,9 @@ public class SAPMaterialInfoInOrderDTO {
* 未收货数量
*/
private BigDecimal transportNum;
/**
* 仓库编号
*/
private String warehouseNo;
}

View File

@ -6,15 +6,13 @@ import com.nflg.wms.admin.pojo.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.dto.SAPOrderDTO;
import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
import com.sap.conn.jco.*;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Slf4j
@Component
@ -26,9 +24,57 @@ public class SapService {
@Resource
private JCoRepository repository;
/**
* 获取库存信息
* @param factory 工厂编号
* @param warehouseNos 仓库编号列表
* @param beginTime 开始时间格式yyyyMMdd
* @param endTime 结束时间格式yyyyMMdd
*/
public List<SAPSyncFromDTO> getStorage(String factory, List<String> warehouseNos,List<String> materialNos, String beginTime, String endTime) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_WERKS", factory);
parameters.put("I_TYPE", Objects.nonNull(beginTime) || Objects.nonNull(endTime) ? "I" : "A");
if (Objects.nonNull(beginTime)) {
parameters.put("S_DATE", beginTime);
}
if (Objects.nonNull(endTime)) {
parameters.put("E_DATE", endTime);
}
Map<String, List<Map<String, Object>>> tables = new HashMap<>();
List<Map<String, Object>> warehouses = new ArrayList<>();
warehouseNos.forEach(warehouseNo -> {
warehouses.add(Map.of("LGORT", warehouseNo));
});
tables.put("IT_LGORT", warehouses);
List<Map<String, Object>> materials = new ArrayList<>();
materialNos.forEach(materialNo -> {
materials.add(Map.of("MATNR", materialNo));
});
tables.put("IT_MATNR", materials);
JCoTable tOut = exec("ZWM3A01", parameters, tables);
List<SAPSyncFromDTO> result = new ArrayList<>();
for (int i = 0; i < tOut.getNumRows(); i++) {
tOut.setRow(i);
result.add(new SAPSyncFromDTO()
.setFactoryNo(tOut.getString("WERKS"))
.setMaterialNo(tOut.getString("MATNR"))
.setMaterialDesc(tOut.getString("MAKTX"))
.setWarehouseNo(tOut.getString("LGORT"))
.setWarehouseName(tOut.getString("LGOBE"))
.setBinNos(tOut.getString("LGPBE")))
;
}
log.debug("数据:{}", JSONUtil.toJsonStr(result));
return result;
}
/**
* 获取订单中物料的信息
* @param orderNo 送货单号
* @param orderNo 采购单号
* @param supplierNo 供应商编号
* @param materialNo 物料编号
*/
@ -42,7 +88,8 @@ public class SapService {
tOut.setRow(0);
return new SAPMaterialInfoInOrderDTO()
.setTransportNum(tOut.getBigDecimal("WSHSL"));
.setTransportNum(tOut.getBigDecimal("WSHSL"))
.setWarehouseNo(tOut.getString("LGORT"));
}
/**
@ -77,6 +124,10 @@ public class SapService {
return exec(functionName, parameters, null,"T_OUT");
}
private JCoTable exec(String functionName, Map<String, Object> parameters, Map<String, List<Map<String, Object>>> tables) {
return exec(functionName, parameters, tables,"T_OUT");
}
private JCoTable exec(String functionName, Map<String, Object> parameters, Map<String, List<Map<String, Object>>> tables,String outName) {
try {
log.info("SAP functionName:{}",functionName);

View File

@ -226,7 +226,7 @@ public class StructuralPackageControllerService {
sb.append("数量无效;");
}
else {
materialDTO.setNum(new BigDecimal(dto.getNum()));
materialDTO.setNum(Integer.valueOf(dto.getNum()));
}
if (StrUtil.isBlank(dto.getWeight())) {
sb.append("重量不能为空;");
@ -334,7 +334,7 @@ public class StructuralPackageControllerService {
}else if (!NumberUtils.isCreatable(num)){
sb.append(StrUtil.format("第{}行数量无效;", row.getRowNum()));
}else {
dto.setNum(new BigDecimal(num));
dto.setNum(Integer.valueOf(num));
}
num=row.getString(4);
if (StrUtil.isBlank(num)){
@ -353,7 +353,7 @@ public class StructuralPackageControllerService {
});
VUtil.trueThrowBusinessError(!sb.isEmpty()).throwMessage("数据校验失败:"+ sb);
packageInfo.setWeight(materials.stream()
.map(m -> m.getWeight().multiply(m.getNum()))
.map(m -> m.getWeight().multiply(new BigDecimal(m.getNum())))
.reduce(BigDecimal.ZERO, BigDecimal::add));
packageInfo.setMaterials(JSONUtil.toJsonStr(materials));
packageService.add(packageInfo);

View File

@ -10,7 +10,9 @@ import java.util.Objects;
public enum OrderState {
Unpackaged((short) 0, "未打包"),
Packaged((short) 1, "已打包");
Packaged((short) 1, "已打包"),
InTransit((short) 2, "在途"),
Received((short) 3, "已收货");
private final short state;
private final String description;

View File

@ -38,7 +38,7 @@ public class PackageMaterialDTO {
/**
* 数量
*/
private BigDecimal num;
private Integer num;
/**
* 重量

View File

@ -14,7 +14,7 @@ public class SAPSyncFromDTO {
private String materialDesc;
private String warehouseNo;
private String warehouseName;
private String binNo;
private String binNos;
public String getMaterialNo() {
return StrUtil.removeAllPrefix(materialNo, "0");

View File

@ -0,0 +1,23 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.util.List;
@Data
public class StructuralPackageOrderReceiveQO {
/**
* wms订单ID
*/
@NotNull
private Long id;
/**
* 该订单下包含的托盘号
*/
@NotEmpty
private List<String> trayNos;
}

View File

@ -0,0 +1,22 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
@Data
public class StructuralPackageStorageTaskSearchQO extends SearchBaseQO{
/**
* 任务单号
*/
private String taskNo;
/**
* 原始单号
*/
private String orderNo;
/**
* 任务类型1采购单入库
*/
private Integer type;
}

View File

@ -3,10 +3,16 @@ package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class DeliverStructuralPackageOrderForPackageItemVO {
/**
* wms订单ID
*/
private Long id;
/**
* 供应商代码
*/
@ -37,6 +43,16 @@ public class DeliverStructuralPackageOrderForPackageItemVO {
*/
private String packageDesc;
/**
* 仓库编号
*/
private String warehouseNo;
/**
* 储位编号
*/
private String binNos;
/**
* 总重
*/
@ -51,4 +67,9 @@ public class DeliverStructuralPackageOrderForPackageItemVO {
* 托盘数量
*/
private Integer trayNum;
/**
* 该订单下包含的托盘号
*/
private List<String> trayNos;
}

View File

@ -5,11 +5,12 @@ import lombok.Data;
import lombok.experimental.Accessors;
import org.ttzero.excel.annotation.ExcelColumn;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
@Accessors
public class DeliverStructuralPackageOrderTrayItemVO {
public class DeliverStructuralPackageOrderTrayItemVO implements Serializable {
/**
* 序号
@ -64,19 +65,19 @@ public class DeliverStructuralPackageOrderTrayItemVO {
* 计划数量
*/
@ExcelColumn(value = "计划数量",colIndex = 7)
private BigDecimal planNum;
private Integer planNum;
/**
* 出货数量
*/
@ExcelColumn(value = "出货数量",colIndex = 8)
private BigDecimal shipmentNum;
private Integer shipmentNum;
/**
* 入库数量
*/
@ExcelColumn(value = "入库数量",colIndex = 9)
private BigDecimal storeNum;
private Integer storeNum;
/**
* 状态

View File

@ -39,17 +39,17 @@ public class TrayItemVO {
/**
* 计划数量
*/
private BigDecimal planNum;
private Integer planNum;
/**
* 出货数量
*/
private BigDecimal shipmentNum;
private Integer shipmentNum;
/**
* 入库数量
*/
private BigDecimal storeNum;
private Integer storeNum;
/**
* 图片

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.util;
import cn.hutool.json.JSONUtil;
public class BeanUtil {
public static <T> T copy(Object source, Class<T> clazz) {
String data= JSONUtil.toJsonStr(source);
return JSONUtil.toBean(data, clazz);
}
}

View File

@ -63,7 +63,7 @@ public class WmsStructuralPackageOrderTray implements Serializable {
/**
* 数量
*/
private BigDecimal num;
private Integer num;
/**
* 打包人
@ -76,4 +76,28 @@ public class WmsStructuralPackageOrderTray implements Serializable {
*/
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private LocalDateTime packTime;
/**
* 创建送货单人
*/
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String sendBy;
/**
* 创建送货单时间
*/
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private LocalDateTime sendTime;
/**
* 收货人
*/
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private String receiveBy;
/**
* 收货时间
*/
@TableField(updateStrategy = FieldStrategy.ALWAYS)
private LocalDateTime receiveTime;
}

View File

@ -64,17 +64,17 @@ public class WmsStructuralPackageOrderTrayItem implements Serializable {
/**
* 计划数量
*/
private BigDecimal planNum;
private Integer planNum;
/**
* 出货数量
*/
private BigDecimal shipmentNum;
private Integer shipmentNum;
/**
* 入库数量
*/
private BigDecimal storeNum;
private Integer storeNum;
/**
* 图片

View File

@ -0,0 +1,58 @@
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.time.LocalDateTime;
/**
* <p>
*
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("wms_structural_package_storage_task")
public class WmsStructuralPackageStorageTask implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 任务单号
*/
private String no;
/**
* 来源1采购单入库
*/
private Integer sourceFrom;
/**
* 来源单号
*/
private String sourceNo;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 上架时间
*/
private LocalDateTime storeTime;
}

View File

@ -22,4 +22,6 @@ public interface WmsStructuralPackageDeliverOrderMapper extends BaseMapper<WmsSt
IPage<StructuralPackageDeliverOrderVO> search(StructuralPackageDeliverOrderSearchQO request, List<Long> externalOrderIds, Page<?> objectPage);
List<Long> getIdsByExternalOrderNo(String externalOrderNo);
String getNoByOrderId(Long id);
}

View File

@ -0,0 +1,20 @@
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

@ -19,4 +19,6 @@ import jakarta.validation.constraints.NotNull;
public interface IWmsStructuralPackageDeliverOrderService extends IService<WmsStructuralPackageDeliverOrder> {
IPage<StructuralPackageDeliverOrderVO> search(@Valid @NotNull StructuralPackageDeliverOrderSearchQO request);
String getNoByOrderId(@NotNull Long id);
}

View File

@ -2,12 +2,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.constant.OrderState;
import com.nflg.wms.common.pojo.qo.StructuralPackageOrderSearchByStateQO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderExtendVO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderTrayVO;
import com.nflg.wms.repository.entity.WmsStructuralPackageOrderTray;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@ -41,4 +43,6 @@ public interface IWmsStructuralPackageOrderTrayService extends IService<WmsStruc
DeliverStructuralPackageOrderTrayVO getInfoByNo(@Valid @NotBlank String trayNo);
List<Long> getIdsByMaterialAndExternalOrderNo(Long packageId, String externalOrderNo);
void setStateByIds(@Valid @NotEmpty List<Long> ids, OrderState state);
}

View File

@ -0,0 +1,21 @@
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

@ -3,7 +3,6 @@ package com.nflg.wms.repository.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.cglib.CglibUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.qo.DepartmentAddQO;
@ -11,6 +10,7 @@ import com.nflg.wms.common.pojo.qo.DepartmentSearchQO;
import com.nflg.wms.common.pojo.qo.DepartmentUpdateQO;
import com.nflg.wms.common.pojo.vo.DepartmentSimpleVO;
import com.nflg.wms.common.pojo.vo.DepartmentVO;
import com.nflg.wms.common.util.BeanUtil;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.Department;
@ -66,7 +66,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
public void update(DepartmentUpdateQO request) {
Department dept1 = getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(dept1)).throwMessage("部门不存在");
Department dept2 = CglibUtil.copy(dept1, Department.class);
Department dept2 = BeanUtil.copy(dept1, Department.class);
dept2.setName(request.getName())
.setParentId(request.getParentId())
.setUpdateBy(UserUtil.getUserName())

View File

@ -1,6 +1,5 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.extra.cglib.CglibUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -10,6 +9,7 @@ import com.nflg.wms.common.pojo.qo.RoleSearchQO;
import com.nflg.wms.common.pojo.qo.RoleUpdateQO;
import com.nflg.wms.common.pojo.vo.MenuVO;
import com.nflg.wms.common.pojo.vo.RoleVO;
import com.nflg.wms.common.util.BeanUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.Menu;
import com.nflg.wms.repository.entity.Role;
@ -60,7 +60,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
public void update(RoleUpdateQO request, String userName) {
Role role1 = getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(role1)).throwMessage("角色不存在");
Role role2 = CglibUtil.copy(role1, Role.class);
Role role2 = BeanUtil.copy(role1, Role.class);
role2.setCode(request.getCode())
.setName(request.getName())
.setEnable(request.getEnable())
@ -80,7 +80,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
public void enable(EnableQO request, String userName) {
Role role1 = getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(role1)).throwMessage("角色不存在");
Role role2 = CglibUtil.copy(role1, Role.class);
Role role2 = BeanUtil.copy(role1, Role.class);
role2.setEnable(request.getEnable())
.setUpdateBy(userName)
.setUpdateTime(LocalDateTime.now());

View File

@ -9,8 +9,6 @@ import com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO;
import com.nflg.wms.repository.entity.WmsStructuralPackageDeliverOrder;
import com.nflg.wms.repository.mapper.WmsStructuralPackageDeliverOrderMapper;
import com.nflg.wms.repository.service.IWmsStructuralPackageDeliverOrderService;
import com.nflg.wms.repository.service.IWmsStructuralPackageOrderService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
@ -26,9 +24,6 @@ import java.util.List;
@Service
public class WmsStructuralPackageDeliverOrderServiceImpl extends ServiceImpl<WmsStructuralPackageDeliverOrderMapper, WmsStructuralPackageDeliverOrder> implements IWmsStructuralPackageDeliverOrderService {
@Resource
private IWmsStructuralPackageOrderService wmsStructuralPackageOrderService;
@Override
public IPage<StructuralPackageDeliverOrderVO> search(StructuralPackageDeliverOrderSearchQO request) {
List<Long> externalOrderIds = null;
@ -37,4 +32,9 @@ public class WmsStructuralPackageDeliverOrderServiceImpl extends ServiceImpl<Wms
}
return baseMapper.search(request,externalOrderIds,new Page<>(request.getPage(),request.getPageSize()));
}
@Override
public String getNoByOrderId(Long id) {
return baseMapper.getNoByOrderId(id);
}
}

View File

@ -4,14 +4,17 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.constant.OrderState;
import com.nflg.wms.common.pojo.qo.StructuralPackageOrderSearchByStateQO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderExtendVO;
import com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderTrayVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsStructuralPackageOrderTray;
import com.nflg.wms.repository.mapper.WmsStructuralPackageOrderTrayMapper;
import com.nflg.wms.repository.service.IWmsStructuralPackageOrderTrayService;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -74,4 +77,15 @@ public class WmsStructuralPackageOrderTrayServiceImpl extends ServiceImpl<WmsStr
public List<Long> getIdsByMaterialAndExternalOrderNo(Long packageId, String externalOrderNo) {
return baseMapper.getIdsByMaterialAndExternalOrderNo(packageId, externalOrderNo);
}
}
@Override
public void setStateByIds(List<Long> ids, OrderState state) {
lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, state.getState())
.set(WmsStructuralPackageOrderTray::getSendBy, UserUtil.getUserName())
.set(WmsStructuralPackageOrderTray::getSendTime, LocalDateTime.now())
.eq(WmsStructuralPackageOrderTray::getState, state.getState() - 1)
.in(WmsStructuralPackageOrderTray::getId, ids)
.update();
}
}

View File

@ -0,0 +1,27 @@
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

@ -34,4 +34,11 @@
inner join wms_structural_package_deliver_order_map om on o.id=om.order_id
where o.external_order_no like concat('%',#{externalOrderNo},'%')
</select>
<select id="getNoByOrderId" resultType="java.lang.String">
select pdo.no
from wms_structural_package_deliver_order pdo
inner join wms_structural_package_deliver_order_map pdom on pdo.id=pdom.deliver_id
where pdom.order_id=#{id}
</select>
</mapper>

View File

@ -60,14 +60,14 @@
order by id desc
</select>
<select id="getInfoByExternalOrderNo"
resultType="com.nflg.wms.common.pojo.vo.DeliverStructuralPackageOrderForPackageItemVO">
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"
<select id="getInfoByExternalOrderNo" 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"
FROM wms_structural_package_order o
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_workbench wb ON o.workbench_id=wb."id"
LEFT JOIN wms_model m on o.model_id=m."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"
where o.external_order_no=#{orderNo}
</select>
</mapper>

View File

@ -0,0 +1,26 @@
<?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

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

View File

@ -98,7 +98,7 @@ public class SyncStorageFromSAPProcessor implements BasicProcessor {
for (DictionaryItem fy : dbFactorys) {
log.info("处理工厂:{}", fy.getValue());
try {
List<SAPSyncFromDTO> list = sapService.SyncStorage(fy.getValue(), warehouseNos, beginDate, endDate);
List<SAPSyncFromDTO> list = sapService.getStorage(fy.getValue(), warehouseNos, beginDate, endDate);
if (CollectionUtil.isEmpty(list)) {
log.info("没有获取到数据");
} else {

View File

@ -27,7 +27,7 @@ public class SapService {
* @param beginTime 开始时间格式yyyyMMdd
* @param endTime 结束时间格式yyyyMMdd
*/
public List<SAPSyncFromDTO> SyncStorage(String factory, List<String> warehouseNos, String beginTime, String endTime) throws JCoException {
public List<SAPSyncFromDTO> getStorage(String factory, List<String> warehouseNos, String beginTime, String endTime) throws JCoException {
Map<String, Object> parameters = new HashMap<>();
parameters.put("I_WERKS", factory);
parameters.put("I_TYPE", Objects.nonNull(beginTime) || Objects.nonNull(endTime) ? "I" : "A");

View File

@ -88,7 +88,7 @@ public class SapTestService {
for (DictionaryItem fy: dbFactorys){
log.info("处理工厂:{}", fy.getValue());
try {
List<SAPSyncFromDTO> list = sapService.SyncStorage(fy.getValue(), warehouseNos, beginDate, endDate);
List<SAPSyncFromDTO> list = sapService.getStorage(fy.getValue(), warehouseNos, beginDate, endDate);
if (CollectionUtil.isEmpty(list)) {
log.info("没有获取到数据");
} else {