Compare commits

...

3 Commits

Author SHA1 Message Date
曹鹏飞 6bae50dab8 feat: 添加功能 2025-07-29 18:23:13 +08:00
曹鹏飞 e2bbb7c430 Merge remote-tracking branch '惠信/dev_zhangke' into develop 2025-07-29 18:16:00 +08:00
zhangke e04287b0c6 feat(admin): 实现收货单推送SRM系统功能
- 新增收货单推送SRM系统的接口和相关逻辑
- 添加一键收货功能,自动处理收货单中的所有物料
- 优化收货单处理流程,支持质检物料和非质检物料的分别处理
- 新增SRM系统Token获取和缓存机制
-调整数据库表结构,增加供应商编码等字段
2025-07-29 18:07:29 +08:00
11 changed files with 203 additions and 42 deletions

View File

@ -2,7 +2,6 @@ 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.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Sets;
@ -39,7 +38,6 @@ import org.springframework.core.io.ClassPathResource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.net.URL;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
@ -151,26 +149,26 @@ public class NormalOrderController extends BaseController {
*/
@PostMapping("exportPdfPerPage")
public void exportPdfPerPage(HttpServletResponse response, @Valid @RequestBody @NotNull List<Long> ids) throws Exception {
List<DeliverNormalOrderVO> orders=new ArrayList<>();
for (int i = 0,count=RandomUtil.randomInt(1,50); i < count; i++) {
BigDecimal batchNum = RandomUtil.randomBigDecimal(new BigDecimal("10"));
BigDecimal minPackageNum = RandomUtil.randomBigDecimal(new BigDecimal("1"),new BigDecimal("3"));
BigDecimal[] result = batchNum.divideAndRemainder(minPackageNum);
orders.add(new DeliverNormalOrderVO()
.setId(IdUtil.getSnowflakeNextId())
.setMaterialNo(RandomUtil.randomNumbers(10))
.setMaterialDesc(RandomUtil.randomString(10))
.setBatchNum(batchNum)
.setMinPackageNum(minPackageNum)
.setSupplierCode(RandomUtil.randomString(10))
.setSupplierName(RandomUtil.randomString(10))
.setExternalOrderNo(RandomUtil.randomNumbers(10))
.setRowNo(RandomUtil.randomString(10))
.setIndexNo(RandomUtil.randomString(10))
.setLableNum(result[1].compareTo(BigDecimal.ZERO)==0?result[0].intValue():result[0].intValue()+1)
);
}
// List<DeliverNormalOrderVO> orders = deliverNormalOrderService.getList(ids);
// List<DeliverNormalOrderVO> orders=new ArrayList<>();
// for (int i = 0,count=RandomUtil.randomInt(1,50); i < count; i++) {
// BigDecimal batchNum = RandomUtil.randomBigDecimal(new BigDecimal("10"));
// BigDecimal minPackageNum = RandomUtil.randomBigDecimal(new BigDecimal("1"),new BigDecimal("3"));
// BigDecimal[] result = batchNum.divideAndRemainder(minPackageNum);
// orders.add(new DeliverNormalOrderVO()
// .setId(IdUtil.getSnowflakeNextId())
// .setMaterialNo(RandomUtil.randomNumbers(10))
// .setMaterialDesc(RandomUtil.randomString(10))
// .setBatchNum(batchNum)
// .setMinPackageNum(minPackageNum)
// .setSupplierCode(RandomUtil.randomString(10))
// .setSupplierName(RandomUtil.randomString(10))
// .setExternalOrderNo(RandomUtil.randomNumbers(10))
// .setRowNo(RandomUtil.randomString(10))
// .setIndexNo(RandomUtil.randomString(10))
// .setLableNum(result[1].compareTo(BigDecimal.ZERO)==0?result[0].intValue():result[0].intValue()+1)
// );
// }
List<DeliverNormalOrderVO> orders = deliverNormalOrderService.getList(ids);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("没有需要打印的数据");
exportPdfPerPage(convert(orders),response);
}
@ -181,26 +179,26 @@ public class NormalOrderController extends BaseController {
*/
@PostMapping("exportPdfOnePage")
public void exportPdfOnePage(HttpServletResponse response, @Valid @RequestBody @NotNull List<Long> ids) throws Exception {
List<DeliverNormalOrderVO> orders=new ArrayList<>();
for (int i = 0,count=RandomUtil.randomInt(1,50); i < count; i++) {
BigDecimal batchNum = RandomUtil.randomBigDecimal(new BigDecimal("10"));
BigDecimal minPackageNum = RandomUtil.randomBigDecimal(new BigDecimal("1"),new BigDecimal("3"));
BigDecimal[] result = batchNum.divideAndRemainder(minPackageNum);
orders.add(new DeliverNormalOrderVO()
.setId(IdUtil.getSnowflakeNextId())
.setMaterialNo(RandomUtil.randomNumbers(10))
.setMaterialDesc(RandomUtil.randomString(10))
.setBatchNum(batchNum)
.setMinPackageNum(minPackageNum)
.setSupplierCode(RandomUtil.randomString(10))
.setSupplierName(RandomUtil.randomString(10))
.setExternalOrderNo(RandomUtil.randomNumbers(10))
.setRowNo(RandomUtil.randomString(10))
.setIndexNo(RandomUtil.randomString(10))
.setLableNum(result[1].compareTo(BigDecimal.ZERO)==0?result[0].intValue():result[0].intValue()+1)
);
}
// List<DeliverNormalOrderVO> orders = deliverNormalOrderService.getList(ids);
// List<DeliverNormalOrderVO> orders=new ArrayList<>();
// for (int i = 0,count=RandomUtil.randomInt(1,50); i < count; i++) {
// BigDecimal batchNum = RandomUtil.randomBigDecimal(new BigDecimal("10"));
// BigDecimal minPackageNum = RandomUtil.randomBigDecimal(new BigDecimal("1"),new BigDecimal("3"));
// BigDecimal[] result = batchNum.divideAndRemainder(minPackageNum);
// orders.add(new DeliverNormalOrderVO()
// .setId(IdUtil.getSnowflakeNextId())
// .setMaterialNo(RandomUtil.randomNumbers(10))
// .setMaterialDesc(RandomUtil.randomString(10))
// .setBatchNum(batchNum)
// .setMinPackageNum(minPackageNum)
// .setSupplierCode(RandomUtil.randomString(10))
// .setSupplierName(RandomUtil.randomString(10))
// .setExternalOrderNo(RandomUtil.randomNumbers(10))
// .setRowNo(RandomUtil.randomString(10))
// .setIndexNo(RandomUtil.randomString(10))
// .setLableNum(result[1].compareTo(BigDecimal.ZERO)==0?result[0].intValue():result[0].intValue()+1)
// );
// }
List<DeliverNormalOrderVO> orders = deliverNormalOrderService.getList(ids);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("没有需要打印的数据");
exportPdfInAll(convert(orders),response);
}

View File

@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.client.RestTemplate;
@ -31,6 +32,7 @@ import java.util.concurrent.TimeUnit;
import static cn.dev33.satoken.SaManager.log;
@Component
public class NormalPGIControllerService {
@Resource

View File

@ -0,0 +1,84 @@
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_material_receipt_item")
public class WmsSrmMaterialReceiptItem implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
/**
* 收货信息ID
*/
private Long receiptId;
/**
* 二维码编号
*/
private String codeId;
/**
* 数量
*/
private BigDecimal codeNum;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号,多个序列号使用;号隔开
*/
private String serialNumber;
/**
* 二维码内容
*/
private String codeContent;
/**
* 收货人编号
*/
private Long createUserId;
/**
* 收货人名称
*/
private String createUserName;
/**
* 扫描时间
*/
private LocalDateTime createTime;
/**
* 送货单的单号ID
*/
private Long orderItemId;
}

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

View File

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

View File

@ -1,6 +1,7 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.vo.SRMOrderItemVO;
import com.nflg.wms.repository.entity.WmsSrmOrderItem;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@ -18,4 +19,6 @@ import java.util.List;
public interface IWmsSrmOrderItemService extends IService<WmsSrmOrderItem> {
List<WmsSrmOrderItem> getByDeliverOrderId(@Valid @NotNull Long id);
SRMOrderItemVO getOrderItem(Long orderId);
}

View File

@ -2,7 +2,9 @@ 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.SRMOrderSearchQO;
import com.nflg.wms.common.pojo.qo.SearchDeliverOrderQO;
import com.nflg.wms.common.pojo.vo.SrmOrderVO;
import com.nflg.wms.repository.entity.WmsSrmOrder;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
@ -18,4 +20,6 @@ import jakarta.validation.constraints.NotNull;
public interface IWmsSrmOrderService extends IService<WmsSrmOrder> {
IPage<WmsSrmOrder> search(@Valid @NotNull SearchDeliverOrderQO request);
IPage<SrmOrderVO> search(@Valid SRMOrderSearchQO request);
}

View File

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

View File

@ -1,6 +1,7 @@
package com.nflg.wms.repository.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.vo.SRMOrderItemVO;
import com.nflg.wms.repository.entity.WmsSrmOrderItem;
import com.nflg.wms.repository.mapper.WmsSrmOrderItemMapper;
import com.nflg.wms.repository.service.IWmsSrmOrderItemService;
@ -23,4 +24,9 @@ public class WmsSrmOrderItemServiceImpl extends ServiceImpl<WmsSrmOrderItemMappe
public List<WmsSrmOrderItem> getByDeliverOrderId(Long id) {
return lambdaQuery().eq(WmsSrmOrderItem::getOrderId, id).list();
}
@Override
public SRMOrderItemVO getOrderItem(Long orderId) {
return baseMapper.getOrderItem(orderId);
}
}

View File

@ -4,7 +4,9 @@ import cn.hutool.core.util.StrUtil;
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.SRMOrderSearchQO;
import com.nflg.wms.common.pojo.qo.SearchDeliverOrderQO;
import com.nflg.wms.common.pojo.vo.SrmOrderVO;
import com.nflg.wms.repository.entity.WmsSrmOrder;
import com.nflg.wms.repository.mapper.WmsSrmOrderMapper;
import com.nflg.wms.repository.service.IWmsSrmOrderService;
@ -31,4 +33,9 @@ public class WmsSrmOrderServiceImpl extends ServiceImpl<WmsSrmOrderMapper, WmsSr
.le(Objects.nonNull(request.getEndDate()), WmsSrmOrder::getCreateTime, request.getEndDate())
.page(new Page<>(request.getPage(),request.getPageSize()));
}
@Override
public IPage<SrmOrderVO> search(SRMOrderSearchQO 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.WmsSrmMaterialReceiptItemMapper">
</mapper>