添加功能

This commit is contained in:
曹鹏飞 2025-07-14 11:00:09 +08:00
parent cf16a46271
commit ea3c00ce24
15 changed files with 165 additions and 60 deletions

View File

@ -87,7 +87,7 @@ public class BinController extends BaseController {
}
/**
* 导出选中的仓库为空时导出模版
* 导出选中的储位为空时导出模版
* @param ids 选中的id集合
*/
@PostMapping("export")

View File

@ -6,6 +6,7 @@ import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.common.pojo.qo.BomSearchQO;
import com.nflg.wms.common.pojo.qo.BomUpdateQO;
import com.nflg.wms.common.pojo.vo.BomMaterialVO;
import com.nflg.wms.starter.BaseController;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
@ -50,7 +51,7 @@ public class BomController extends BaseController {
* @param request 搜索参数
*/
@PostMapping("search")
public ApiResult<PageData<BomMaterialDTO>> search(@Valid @RequestBody BomSearchQO request){
public ApiResult<PageData<BomMaterialVO>> search(@Valid @RequestBody BomSearchQO request){
return ApiResult.success(bomControllerService.search(request));
}

View File

@ -8,6 +8,7 @@ import com.google.common.collect.Sets;
import com.nflg.wms.admin.util.DateTimeUtil;
import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.QRCodeUtil;
import com.nflg.wms.admin.util.ThymeleafUtil;
import com.nflg.wms.common.constant.UserType;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
@ -37,10 +38,7 @@ import org.springframework.core.io.ClassPathResource;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import java.math.BigDecimal;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.*;
@ -157,18 +155,18 @@ public class DeliverNormalOrderController extends BaseController {
*/
@GetMapping("exportPdf")
public void exportPdf(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
// List<WmsDeliverNormalOrderItem> orders = deliverNormalOrderItemService.getByDeliverId(id);
// VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("没有需要导出的数据");
List<WmsDeliverNormalOrderItem> orders=new ArrayList<>();
orders.add(new WmsDeliverNormalOrderItem()
.setMaterialNo("TEST00001")
.setMaterialDesc("测试物料")
.setBatchNum(new BigDecimal("36"))
.setLableNum(4)
.setMinPackageNum(new BigDecimal("10"))
.setUniqNo(DateTimeUtil.getForDeliverOrderItemNo())
.setBatchNo("TEST00001")
);
List<WmsDeliverNormalOrderItem> orders = deliverNormalOrderItemService.getByDeliverId(id);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("没有需要导出的数据");
// List<WmsDeliverNormalOrderItem> orders=new ArrayList<>();
// orders.add(new WmsDeliverNormalOrderItem()
// .setMaterialNo("TEST00001")
// .setMaterialDesc("测试物料")
// .setBatchNum(new BigDecimal("36"))
// .setLableNum(4)
// .setMinPackageNum(new BigDecimal("10"))
// .setUniqNo(DateTimeUtil.getForDeliverOrderItemNo())
// .setBatchNo("TEST00001")
// );
List<DeliverNormalOrderItemDTO> datas = new ArrayList<>();
for (WmsDeliverNormalOrderItem order : orders) {
for (int i = 0; i < order.getLableNum(); i++) {
@ -184,15 +182,9 @@ public class DeliverNormalOrderController extends BaseController {
datas.add(dto);
}
}
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("/template/qrcode/");
resolver.setSuffix(".html");
templateEngine.setTemplateResolver(resolver);
Map<String, Object> variables = new HashMap<>();
variables.put("list", datas);
Context context = new Context();
context.setVariables(variables);
String html = templateEngine.process("dp", context);
String html = ThymeleafUtil.generator("/template/qrcode/", "dp", ".html", variables);
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
PdfGeneratorUtil.generatePdf("普通物料条码", html,baseUrl.toString(), response);
}

View File

@ -123,10 +123,10 @@ public class StructuralPackageController extends BaseController {
}
/**
* 导出钢构包
* 导出钢构包id为空时导出模板
*/
@GetMapping("exportKit")
public void exportKit(HttpServletResponse response,@Valid @RequestParam @NotNull Long id) throws Exception {
public void exportKit(HttpServletResponse response,@RequestParam(required = false) Long id) throws Exception {
packageControllerService.exportKit(response,id);
}

View File

@ -12,6 +12,7 @@ import com.nflg.wms.common.pojo.dto.BomImportExcelDTO;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.common.pojo.qo.BomSearchQO;
import com.nflg.wms.common.pojo.qo.BomUpdateQO;
import com.nflg.wms.common.pojo.vo.BomMaterialVO;
import com.nflg.wms.common.util.DateTimeUtil;
import com.nflg.wms.common.util.EecExcelUtil;
import com.nflg.wms.common.util.UserUtil;
@ -81,7 +82,7 @@ public class BomControllerService {
}).toList());
}
public PageData<BomMaterialDTO> search(@Valid BomSearchQO request) {
public PageData<BomMaterialVO> search(@Valid BomSearchQO request) {
return bomService.search(request);
}

View File

@ -103,7 +103,13 @@ public class StorageControllerService {
}
public IPage<StorageVO> search(@Valid StorageSearchQO request) {
return storageService.search(request);
IPage<StorageVO> page = storageService.search(request);
page.getRecords().forEach(storageVO ->
{
List<String> binNos = StrUtil.split(storageVO.getBinNos(), ",");
storageVO.setBinIds(binService.lambdaQuery().select(WmsBin::getId).in(WmsBin::getNo,binNos).list().stream().map(WmsBin::getId).toList());
});
return page;
}
@Transactional

View File

@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.ThymeleafUtil;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
@ -40,8 +41,6 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.ttzero.excel.entity.ListSheet;
import org.ttzero.excel.entity.TemplateSheet;
import org.ttzero.excel.entity.Workbook;
@ -325,32 +324,34 @@ public class StructuralPackageControllerService {
return ApiResult.success();
}
public void exportKit(HttpServletResponse response, @Valid @NotNull Long id) throws IOException {
PackageVO packageInfo = packageService.getInfo(id);
VUtil.trueThrowBusinessError(Objects.isNull(packageInfo)).throwMessage("数据不存在");
List<PackageMaterialDTO> list = JSONUtil.toList(packageInfo.getMaterials(), PackageMaterialDTO.class);
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(packageInfo.getNo()+"钢构包.xlsx", StandardCharsets.UTF_8));
new Workbook()
.addSheet(new TemplateSheet(new ClassPathResource("template/钢构包导出.xlsx").getInputStream())
.setData(packageInfo)
.setData("list", list)
).writeTo(response.getOutputStream());
public void exportKit(HttpServletResponse response, Long id) throws IOException {
if (Objects.isNull(id)) {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("钢构包导入模板.xlsx", StandardCharsets.UTF_8));
new Workbook()
.addSheet(new TemplateSheet(new ClassPathResource("template/钢构包导出.xlsx").getInputStream()))
.writeTo(response.getOutputStream());
} else {
PackageVO packageInfo = packageService.getInfo(id);
VUtil.trueThrowBusinessError(Objects.isNull(packageInfo)).throwMessage("数据不存在");
List<PackageMaterialDTO> list = JSONUtil.toList(packageInfo.getMaterials(), PackageMaterialDTO.class);
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(packageInfo.getNo() + "钢构包.xlsx", StandardCharsets.UTF_8));
new Workbook()
.addSheet(new TemplateSheet(new ClassPathResource("template/钢构包导出.xlsx").getInputStream())
.setData(packageInfo)
.setData("list", list)
).writeTo(response.getOutputStream());
}
}
public void exportPdf(HttpServletResponse response, @Valid @NotNull Long id) throws Exception {
PackageVO vo = packageService.getInfo(id);
VUtil.trueThrowBusinessError(Objects.isNull(vo)).throwMessage("数据不存在");
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("/template/");
resolver.setSuffix(".html");
templateEngine.setTemplateResolver(resolver);
Map<String, Object> variables = new HashMap<>();
variables.put("info", vo);
variables.put("list", vo.getMaterialList());
Context context = new Context();
context.setVariables(variables);
String html = templateEngine.process("StructuralPackage", context);
String html = ThymeleafUtil.generator("/template/", "StructuralPackage", ".html", variables);
PdfGeneratorUtil.generatePdf(vo.getNo() + "老鼠图", html, response);
}
}

View File

@ -0,0 +1,22 @@
package com.nflg.wms.admin.util;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import java.util.Map;
public class ThymeleafUtil {
public static String generator(String prefix,String template,String suffix, Map<String, Object> variables){
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix(prefix);
resolver.setSuffix(".html");
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(resolver);
engine.setEnableSpringELCompiler(true);
Context context = new Context();
context.setVariables(variables);
return engine.process("StructuralPackage", context);
}
}

View File

@ -12,7 +12,7 @@ public class BinExcelExportDTO {
* 仓库编码
*/
@ExcelColumn("*仓库编码")
private String warehouseCode;
private String warehouseNo;
/**
* 储位编码

View File

@ -15,5 +15,5 @@ public class PackageSearchQO extends PageQO {
/**
* 机型id
*/
private Long modelId;
private String modelId;
}

View File

@ -0,0 +1,70 @@
package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
@Accessors(chain = true)
public class BomMaterialVO {
private Long id;
/**
* 上级id
*/
private Long parentId;
/**
* SAP料号
*/
private String materialNo;
/**
* 物料描述
*/
private String materialDesc;
/**
* 图号
*/
private String drawingNo;
/**
* 数量
*/
private BigDecimal num;
/**
* 重量
*/
private BigDecimal materialWeight;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 最后更新人
*/
private String updateBy;
/**
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 子节点
*/
private List<BomMaterialVO> children;
}

View File

@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.vo;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class StorageVO {
@ -19,11 +20,21 @@ public class StorageVO {
*/
private String materialDescribe;
/**
* 仓库id
*/
private String warehouseId;
/**
* 仓库编码
*/
private String warehouseNo;
/**
* 储位id列表
*/
private List<Long> binIds;
/**
* 储位编码
*/

View File

@ -2,8 +2,8 @@ package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.common.pojo.qo.BomSearchQO;
import com.nflg.wms.common.pojo.vo.BomMaterialVO;
import com.nflg.wms.repository.entity.WmsBom;
import jakarta.validation.Valid;
@ -23,5 +23,5 @@ public interface IWmsBomService extends IService<WmsBom> {
void update(Long parentId, List<WmsBom> list);
PageData<BomMaterialDTO> search(@Valid BomSearchQO request);
PageData<BomMaterialVO> search(@Valid BomSearchQO request);
}

View File

@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.common.pojo.qo.BomSearchQO;
import com.nflg.wms.common.pojo.vo.BomMaterialVO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.WmsBom;
@ -55,7 +55,7 @@ public class WmsBomServiceImpl extends ServiceImpl<WmsBomMapper, WmsBom> impleme
}
@Override
public PageData<BomMaterialDTO> search(BomSearchQO request) {
public PageData<BomMaterialVO> search(BomSearchQO request) {
List<WmsBom> boms = lambdaQuery()
.like(StrUtil.isNotBlank(request.getNo()), WmsBom::getNo, request.getNo())
.like(StrUtil.isNotBlank(request.getDescribe()), WmsBom::getDescribe, request.getDescribe())
@ -64,34 +64,34 @@ public class WmsBomServiceImpl extends ServiceImpl<WmsBomMapper, WmsBom> impleme
if (CollectionUtil.isNotEmpty(parentIds)) {
boms.addAll(listByIds(parentIds));
}
List<BomMaterialDTO> datas = boms.stream()
List<BomMaterialVO> datas = boms.stream()
.filter(it -> it.getParentId() == 0L)
.sorted(Comparator.comparing(WmsBom::getId))
.skip((long) (request.getPage() - 1) * request.getPageSize())
.limit(request.getPageSize())
.map(it -> new BomMaterialDTO()
.map(it -> new BomMaterialVO()
.setId(it.getId())
.setParentId(it.getParentId())
.setMaterialNo(it.getNo())
.setMaterialDesc(it.getDescribe())
.setDrawingNo(it.getDrawingNo())
.setNum(it.getNum())
.setMaterialWeight(String.valueOf(it.getWeight()))
.setMaterialWeight(it.getWeight())
.setChildren(boms.stream()
.filter(child -> child.getParentId().equals(it.getId()))
.map(child -> {
return new BomMaterialDTO()
return new BomMaterialVO()
.setId(child.getId())
.setParentId(child.getParentId())
.setMaterialNo(child.getNo())
.setMaterialDesc(child.getDescribe())
.setDrawingNo(child.getDrawingNo())
.setNum(child.getNum())
.setMaterialWeight(String.valueOf(child.getWeight()));
.setMaterialWeight(child.getWeight());
})
.toList()
)).toList();
return new PageData<BomMaterialDTO>()
return new PageData<BomMaterialVO>()
.setPage(request.getPage())
.setPageSize(request.getPageSize())
.setTotal(datas.size())

View File

@ -7,6 +7,7 @@
FROM (
SELECT
s.*,
wh.id AS "warehouseId",
wh.no AS "warehouseNo",
m.no AS "materialNo",
m.describe AS "materialDescribe",