Compare commits

...

6 Commits

Author SHA1 Message Date
曹鹏飞 6226770de9 Merge branch 'feature/bug-788' into develop 2025-10-10 10:14:27 +08:00
曹鹏飞 3fa3afdbd4 Merge branch 'feature/bug-784' into develop 2025-10-10 10:14:16 +08:00
曹鹏飞 40d8de59b6 feat: bug-784 钢构包订单添加缺件交货的功能 2025-10-10 10:14:04 +08:00
曹鹏飞 314a5303a5 feat: bug-788 库存物料条码打印问题修改 2025-10-10 10:13:15 +08:00
曹鹏飞 f877f48f9d Merge branch 'feature/bug-788' into develop 2025-10-10 09:40:26 +08:00
曹鹏飞 02e02977fa feat: bug-788 库存物料条码打印问题修改 2025-10-09 16:01:37 +08:00
7 changed files with 80 additions and 33 deletions

View File

@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.admin.util.PdfGeneratorUtil;
import com.nflg.wms.admin.util.QRCodeUtil;
import com.nflg.wms.admin.util.ThymeleafUtil;
@ -13,18 +12,15 @@ import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.BarcodePrintingAddDTO;
import com.nflg.wms.common.pojo.dto.DeliverNormalOrderItemDTO;
import com.nflg.wms.common.pojo.dto.GongZhuangTaiZhangExcelCheckDTO;
import com.nflg.wms.common.pojo.qo.BarcodePrintingAddQO;
import com.nflg.wms.common.pojo.qo.BarcodePrintingEditQO;
import com.nflg.wms.common.pojo.qo.BarcodePrintingIdsQO;
import com.nflg.wms.common.pojo.qo.BarcodePrintingQO;
import com.nflg.wms.common.pojo.qo.SRMOrderSearchQO;
import com.nflg.wms.common.pojo.vo.BarcodePrintingVO;
import com.nflg.wms.common.pojo.vo.SrmOrderVO;
import com.nflg.wms.common.util.DateTimeUtil;
import com.nflg.wms.common.util.EecExcelUtil;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.WmsInProduceOrder;
import com.nflg.wms.repository.entity.WmsInProduceOrderItem;
import com.nflg.wms.repository.entity.WmsInventoryBarcodePrinting;
import com.nflg.wms.repository.service.IWmsInventoryBarcodePrintingService;
import com.nflg.wms.starter.BaseController;
@ -33,9 +29,12 @@ import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -48,8 +47,10 @@ import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URL;
import java.text.DecimalFormat;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.*;
/**
@ -60,14 +61,13 @@ import java.util.*;
@RestController
@RequestMapping("/barcode")
public class BarcodePrintingController extends BaseController {
@Resource
private IWmsInventoryBarcodePrintingService printingService;
@Resource
private FileUploadService fileUploadService;
private static final DecimalFormat DF = new DecimalFormat("0.00");
/**
* 列表
*/
@ -82,8 +82,8 @@ public class BarcodePrintingController extends BaseController {
*/
@PostMapping("items")
@ApiMark(moduleName = "仓储物流打印", apiName = "获取编辑记录")
public ApiResult<List<BarcodePrintingVO>> getItems(@Valid @RequestBody BarcodePrintingIdsQO request) {
List<WmsInventoryBarcodePrinting> items = printingService.listByIds(request.getIds());
public ApiResult<List<BarcodePrintingVO>> getItems(@Valid @RequestBody @NotEmpty List<Long> ids) {
List<WmsInventoryBarcodePrinting> items = printingService.listByIds(ids);
List<BarcodePrintingVO> vos = new ArrayList<>();
if (CollectionUtil.isNotEmpty(items)) {
vos = Convert.toList(BarcodePrintingVO.class, items);
@ -96,11 +96,8 @@ public class BarcodePrintingController extends BaseController {
*/
@PostMapping("delete")
@ApiMark(moduleName = "仓储物流打印", apiName = "批量删除记录")
public ApiResult<Void> deleteBarcodes(@Valid @RequestBody BarcodePrintingIdsQO request) {
if (CollectionUtil.isEmpty(request.getIds())) {
VUtil.trueThrowBusinessError(true).throwMessage("没有需要删除的数据");
}
printingService.removeByIds(request.getIds());
public ApiResult<Void> deleteBarcodes(@Valid @RequestBody @NotEmpty List<Long> ids) {
printingService.removeByIds(ids);
return ApiResult.success();
}
@ -114,11 +111,33 @@ public class BarcodePrintingController extends BaseController {
if (CollectionUtil.isEmpty(request)) {
VUtil.trueThrowBusinessError(true).throwMessage("没有需要保存的数据");
}
List<WmsInventoryBarcodePrinting> items = Convert.toList(WmsInventoryBarcodePrinting.class, request);
List<WmsInventoryBarcodePrinting> items = request.stream().map(item -> {
WmsInventoryBarcodePrinting data = Convert.convert(WmsInventoryBarcodePrinting.class, item);
if (Objects.isNull(data.getId())) {
data.setCreateBy(UserUtil.getUserName());
data.setCreateTime(LocalDateTime.now());
} else {
data.setUpdateBy(UserUtil.getUserName());
data.setUpdateTime(LocalDateTime.now());
}
return data;
}).toList();
printingService.saveOrUpdateBatch(items);
return ApiResult.success();
}
/**
* 导出模板
*/
@GetMapping("export")
public void exportKit(HttpServletResponse response) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("库存物料打印导入模板.xlsx", StandardCharsets.UTF_8));
new Workbook()
.addSheet(new ListSheet<>(List.of(new BarcodePrintingAddQO())))
.writeTo(response.getOutputStream());
}
/**
* 导入物料清单
* @param file 文件
@ -148,10 +167,13 @@ public class BarcodePrintingController extends BaseController {
if (item.getPackingNum() == null || item.getPackingNum().compareTo(BigDecimal.ZERO) <= 0) {
errorBuild.append("最小包装量必填");
}
if (errorBuild.length() > 0) {
if (!errorBuild.isEmpty()) {
item.setError(errorBuild.toString());
} else {
codes.add(Convert.convert(WmsInventoryBarcodePrinting.class, item));
WmsInventoryBarcodePrinting entity = Convert.convert(WmsInventoryBarcodePrinting.class, item);
entity.setCreateBy(UserUtil.getUserName());
entity.setCreateTime(LocalDateTime.now());
codes.add(entity);
}
}
if (data.stream().noneMatch(it -> StrUtil.isNotBlank(it.getError()))
@ -174,20 +196,19 @@ public class BarcodePrintingController extends BaseController {
}
private String generateQRContent(DeliverNormalOrderItemDTO order, String indexNo) {
String content = StrUtil.format("{}${}${}${}${}${}${}${}"
String content = StrUtil.format("{}${}${}${}${}${}${}${}${}"
, order.getPrintNo(), order.getExternalOrderNo(), order.getRowNo(), order.getMaterialNo(), order.getPrintNum()
, order.getMaterialDesc(), order.getBatchNo(), Optional.ofNullable(indexNo).orElse(""));
, order.getMaterialDesc(), "", order.getBatchNo(), Optional.ofNullable(indexNo).orElse(""));
log.debug("二维码内容:" + content);
return content;
}
/**
* 导出物料条码pdf整张或者一张一个
* @param request 打印IDs
* @param type 1逐个2一页
* @param request 请求参数
*/
@PostMapping("exportMaterialsPdf")
public void exportMaterials(HttpServletResponse response, @Valid @RequestParam @NotNull BarcodePrintingIdsQO request, @Valid @RequestParam @NotNull Integer type) throws Exception {
public void exportMaterials(HttpServletResponse response, @Valid @RequestBody @NotNull BarcodePrintingIdsQO request) throws Exception {
List<WmsInventoryBarcodePrinting> codelist = printingService.listByIds(request.getIds());
VUtil.trueThrowBusinessError(Objects.isNull(codelist)).throwMessage("订单不存在");
List<DeliverNormalOrderItemDTO> datas = new ArrayList<>();
@ -209,7 +230,7 @@ public class BarcodePrintingController extends BaseController {
//i += 1;
}
} else {
Integer codeNum = item.getQty().divide(item.getPackingNum(), 0, RoundingMode.UP).intValue();
int codeNum = item.getQty().divide(item.getPackingNum(), 0, RoundingMode.UP).intValue();
for (int j = 0; j < codeNum; j++) {
dto.setPrintNo(IdUtil.getSnowflakeNextIdStr());
dto.setPrintNum(item.getPackingNum().toString());
@ -222,7 +243,7 @@ public class BarcodePrintingController extends BaseController {
}
Map<String, Object> variables = new HashMap<>();
variables.put("list", datas);
if (Objects.equals(type, 1)) {
if (Objects.equals(request.getType(), 1)) {
String html = ThymeleafUtil.generator("/template/qrcode/", "Inv-1", ".html", variables);
URL baseUrl = new ClassPathResource("template/qrcode/").getURL();
PdfGeneratorUtil.generatePdf("库存物料条码(逐个)", html, baseUrl.toString(), response);

View File

@ -561,6 +561,13 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
.eq(WmsStructuralPackageOrderTray::getNo, request.getTrayNo())
.update()).throwMessage("打包失败,请重试");
deliverStructuralPackageOrderTrayItemService.updateBatchById(trayItems);
if (trayItems.stream().anyMatch(it -> Objects.nonNull(it.getOfflineReceived()))) {
deliverStructuralPackageOrderService.lambdaUpdate()
.set(WmsStructuralPackageOrder::getQuehuo, true)
.eq(WmsStructuralPackageOrder::getId, tray.getOrderId())
.update();
}
saveMaterialQrCodeScanRecord(qrCodeDTOs, 1);
return ApiResult.success();
}

View File

@ -1,5 +1,7 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
@ -8,5 +10,13 @@ import java.util.List;
@Data
@Accessors(chain = true)
public class BarcodePrintingIdsQO {
@NotEmpty
private List<Long> ids;
/**
* 1逐个2一页
*/
@NotNull
private Integer type;
}

View File

@ -159,4 +159,9 @@ public class DeliverStructuralPackageOrderVO {
* 送货单id
*/
private Long deliverId;
/**
* 是否存在缺货零件
*/
private Boolean quehuo;
}

View File

@ -19,22 +19,22 @@
FROM
wms_inventory_barcode_printing
<where>
<if test="request != null and request.materialNos != null and request.materialNos != ''">
<if test="request.materialNos != null and request.materialNos != ''">
AND material_no IN
<foreach item="materialNo" index="index" collection="request.materialNos.split(',')"
open="(" separator="," close=")">
#{materialNo}
</foreach>
</if>
<if test="request != null and request.batchNumbers != null and request.batchNumbers != ''">
<if test="request.batchNumbers != null and request.batchNumbers != ''">
AND batch_number IN
<foreach item="batchNo" index="index" collection="request.batchNumbers.split(',')"
open="(" separator="," close=")">
#{batchNo}
</foreach>
</if>
<if test="request != null and request.serialNumber != null and request.serialNumber != ''">
AND serial_numbers LIKE CONCAT('%', #{serialNumber}, '%')
<if test="request.serialNumber != null and request.serialNumber != ''">
AND serial_numbers LIKE CONCAT('%', #{request.serialNumber}, '%')
</if>
<if test="request != null and request.materialDes != null and request.materialDes != ''">
AND material_des LIKE CONCAT('%', #{request.materialDes}, '%')

View File

@ -3,9 +3,13 @@
<mapper namespace="com.nflg.wms.repository.mapper.WmsStructuralPackageDeliverOrderMapper">
<select id="search" resultType="com.nflg.wms.common.pojo.vo.StructuralPackageDeliverOrderVO">
select pdo.*, us.supplier_code, us.supplier_name,di."name" AS "factory_no",spo.quehuo
select pdo.*, us.supplier_code, us.supplier_name,di."name" AS "factory_no",EXISTS(
SELECT 1
FROM wms_structural_package_deliver_order_map pdom
INNER JOIN wms_structural_package_order spo on pdom.order_id=spo.id
WHERE spo.quehuo AND pdom.deliver_id=pdo.id
) AS quehuo
from wms_structural_package_deliver_order pdo
inner join wms_structural_package_order spo on pdo.id=spo.deliver_id
inner join user_supplier us on pdo.supplier_id=us.id
LEFT JOIN dictionary_item di ON pdo.factory_id=di."id"
<where>

View File

@ -4,7 +4,7 @@
<select id="search" 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",sp.drawing_no as "packageDrawingNo"
,sp."no" AS "package_no",sp."name" AS "package_desc",m."no" AS "model_no",sp.drawing_no as "packageDrawingNo",o.quehuo
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.id