一些优化

This commit is contained in:
曹鹏飞 2025-08-26 18:14:19 +08:00
parent 722bd067fc
commit 95c7809730
23 changed files with 434 additions and 309 deletions

View File

@ -3,7 +3,6 @@ package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.wms.admin.pojo.dto.PdfPageDTO;
import com.nflg.wms.admin.service.BinService;
@ -300,18 +299,18 @@ public class InProduceOrderController extends BaseController {
*/
@GetMapping("exportOrderPdf")
public void exportDeliverOrder(HttpServletResponse response, @Valid @RequestParam @NotNull Long id) throws Exception {
// WmsInProduceOrder order = produceOrderService.getById(id);
// VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
// List<InProduceOrderItemVO> list = produceOrderItemService.getVOByOrderId(id);
// if (order.getList()) {
// list.removeIf(item -> Objects.equals(item.getParentId(), 0L));
// }
WmsInProduceOrder order = new WmsInProduceOrder()
.setNo(NoUtil.getInProduceNo());
List<InProduceOrderItemVO> list = new ArrayList<>();
for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) {
list.add(new InProduceOrderItemVO().setMaterialNo(RandomUtil.randomNumbers(10)).setMaterialDesc("非金属联件和紧固件等 M6 DIN 982 不锈钢304"));
WmsInProduceOrder order = produceOrderService.getById(id);
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在");
List<InProduceOrderItemVO> list = produceOrderItemService.getVOByOrderId(id);
if (order.getList()) {
list.removeIf(item -> Objects.equals(item.getParentId(), 0L));
}
// WmsInProduceOrder order = new WmsInProduceOrder()
// .setNo(NoUtil.getInProduceNo());
// List<InProduceOrderItemVO> list = new ArrayList<>();
// for (int i = 0, count = RandomUtil.randomInt(1, 100); i < count; i++) {
// list.add(new InProduceOrderItemVO().setMaterialNo(RandomUtil.randomNumbers(10)).setMaterialDesc("非金属联件和紧固件等 M6 DIN 982 不锈钢304"));
// }
InProduceOrderItemVO first = list.get(0);
Map<String, String> base = new HashMap<>();
base.put("date", DateUtil.format(LocalDateTime.now(), "yyyy-MM-dd"));

View File

@ -70,7 +70,7 @@ public class InventoryController extends BaseController {
* 保存库存盘点任务
* @param request 请求参数
*/
@PostMapping("save")
@PostMapping("check/save")
public ApiResult<Void> save(@Valid @RequestBody InventoryCheckTaskSaveQO request) {
inventoryCheckTaskService.save(request);
return ApiResult.success();
@ -80,7 +80,7 @@ public class InventoryController extends BaseController {
* 查询库存盘点任务
* @param request 请求参数
*/
@PostMapping("/check/search")
@PostMapping("check/search")
public ApiResult<PageData<InventoryCheckTaskVO>> searchCheckTask(@Valid @RequestBody InventoryCheckTaskSearchQO request) {
return ApiResult.success(inventoryCheckTaskService.search(request));
}
@ -90,7 +90,7 @@ public class InventoryController extends BaseController {
* @param id 任务ID
* @return 仓库列表
*/
@GetMapping("getTaskItems")
@GetMapping("check/getTaskItems")
public ApiResult<List<InventoryCheckTaskItemVO>> getTaskItems(@Valid @RequestParam(required = false) Long id) {
List<WmsInventoryCheckTaskItem> taskItems = Objects.isNull(id) ? Collections.emptyList() : inventoryCheckTaskItemService.lambdaQuery().eq(WmsInventoryCheckTaskItem::getTaskId, id).list();
List<WarehouseVO> warehouseVOS = warehouseService.getEnableList();
@ -118,7 +118,7 @@ public class InventoryController extends BaseController {
* 发布库存盘点任务
* @param id 任务id
*/
@PostMapping("publish")
@PostMapping("check/publish")
public ApiResult<Void> publish(@Valid @RequestParam @NotNull Long id) {
inventoryCheckTaskService.publish(id);
return ApiResult.success();
@ -128,7 +128,7 @@ public class InventoryController extends BaseController {
* 删除库存盘点任务
* @param id ID
*/
@PostMapping("delete")
@PostMapping("check/delete")
public ApiResult<Void> delete(@Valid @RequestParam @NotNull Long id) {
inventoryCheckTaskService.delete(id);
return ApiResult.success();
@ -137,7 +137,7 @@ public class InventoryController extends BaseController {
/**
* 获取用户的盘点任务PDA使用
*/
@GetMapping("getTaskByUser")
@GetMapping("check/getTaskByUser")
public ApiResult<List<InventoryCheckTaskItemVO>> getTaskByUser() {
return ApiResult.success(inventoryCheckTaskItemService.getTaskByUser(UserUtil.getUserId()));
}
@ -146,7 +146,7 @@ public class InventoryController extends BaseController {
* 盘点任务扫码PDA使用
* @param request 请求参数
*/
@PostMapping("scan")
@PostMapping("check/scan")
public ApiResult scan(@Valid @RequestBody InventoryCheckTaskScanQO request) {
WmsInventoryCheckTaskItem item = inventoryCheckTaskItemService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("未找到数据");
@ -186,7 +186,7 @@ public class InventoryController extends BaseController {
* 批量保存盘点结果PDA使用
* @param request 请求参数
*/
@PostMapping("saveScan")
@PostMapping("check/saveScan")
public ApiResult<String> saveScan(@Valid @RequestBody InventoryCheckTaskScanSaveQO request) {
InventoryCheckTaskItemVO item = inventoryCheckTaskItemService.getInfo(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(item)).throwMessage("未找到数据");
@ -244,7 +244,7 @@ public class InventoryController extends BaseController {
* 完成盘点任务PDA使用
* @param taskId 任务ID
*/
@PostMapping("complete")
@PostMapping("check/complete")
public ApiResult<Void> complete(@Valid @RequestParam @NotNull Long taskId) {
inventoryCheckTaskService.complete(taskId);
return ApiResult.success();
@ -254,9 +254,9 @@ public class InventoryController extends BaseController {
* 查看盘点结果
* @param request 请求参数
*/
@PostMapping("getMatrials")
public ApiResult<PageData<InventoryCheckTaskItemMaterialVO>> getMatrials(@Valid @RequestBody InventoryCheckTaskMaterialsQO request) {
return ApiResult.success(inventoryCheckTaskService.getMatrials(request));
@PostMapping("check/getMaterials")
public ApiResult<PageData<InventoryCheckTaskItemMaterialVO>> getMaterials(@Valid @RequestBody InventoryCheckTaskMaterialsQO request) {
return ApiResult.success(inventoryCheckTaskService.getMaterials(request));
}
/**
@ -264,7 +264,7 @@ public class InventoryController extends BaseController {
* @param materialId 物料记录id
* @return 扫码记录列表
*/
@GetMapping("getScanRecords")
@GetMapping("check/getScanRecords")
public ApiResult<List<InventoryCheckTaskScanRecord>> getScanRecords(@Valid @RequestParam @NotNull Long materialId) {
return ApiResult.success(inventoryCheckTaskScanRecordResitory.findByMaterialId(materialId));
}

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.lang.Pair;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
@ -16,16 +15,14 @@ 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.dto.SAPMaterialInfoInOrderDTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17Item1DTO;
import com.nflg.wms.admin.repository.PackageMaterialScanRecordRepository;
import com.nflg.wms.admin.service.BinService;
import com.nflg.wms.admin.service.SapService;
import com.nflg.wms.admin.service.StructuralPackageControllerService;
import com.nflg.wms.admin.util.NoUtil;
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.Constant;
import com.nflg.wms.common.constant.OrderState;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
@ -51,8 +48,6 @@ import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.retry.annotation.Backoff;
import org.springframework.retry.annotation.Retryable;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
@ -123,21 +118,12 @@ public class StructuralPackageOrderController extends BaseController {
@Resource
private IWmsStorageService storageService;
@Resource
private IWmsWarehouseService warehouseService;
@Resource
private IDictionaryService dictionaryService;
@Resource
private IWmsStorageBinService storageBinService;
@Resource
private IWmsBinService wmsBinService;
@Resource
private BinService binService;
@Resource
private StructuralPackageControllerService structuralPackageControllerService;
/**
* 搜索SAP订单
* @param request 请求参数
@ -541,7 +527,7 @@ public class StructuralPackageOrderController extends BaseController {
}
/**
* 打包托盘
* 打包托盘PDA使用
* @param request 请求参数
*/
@Transactional
@ -789,6 +775,7 @@ public class StructuralPackageOrderController extends BaseController {
.setItemName(order.getPackageDesc())
.setUnit(order.getUnit())
.setIsQuality(false)
.setKzkri(order.getKzkri())
.setUnqualifiedQty(BigDecimal.ZERO)
.setQualifiedQty(BigDecimal.valueOf(order.getNum()))
.setFactory("1010")
@ -805,11 +792,11 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 搜索上架任务列表PDA使用
* @param request 请求参数
* @param no 任务单号或原始单号
*/
@PostMapping("searchIn")
public ApiResult<PageData<InTaskVO>> searchIn(@Valid @RequestBody @NotNull InTaskSearchQO request) {
return ApiResult.success(inTaskService.searchForIn(request));
public ApiResult<List<InTaskVO>> searchIn(@Valid @RequestParam @NotBlank String no) {
return ApiResult.success(inTaskService.searchForIn(no));
}
/**
@ -817,8 +804,10 @@ public class StructuralPackageOrderController extends BaseController {
* @param taskNo 上架任务单号
*/
@GetMapping("getInTaskInfo")
public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotNull String taskNo) {
public ApiResult<List<InTaskInfoVO>> getInTaskInfo(@Valid @RequestParam @NotBlank String taskNo) {
WmsInTask task = inTaskService.getByNo(taskNo);
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架");
List<WmsInTaskItem> list = inTaskItemService.getListForStorage(taskNo);
List<InTaskInfoVO> datas = Convert.toList(InTaskInfoVO.class, list);
for (InTaskInfoVO item : datas) {
@ -835,183 +824,38 @@ public class StructuralPackageOrderController extends BaseController {
* 上架PDA使用
* @param request 请求参数
*/
@Transactional
@PostMapping("materialStorage")
public ApiResult<Void> materialStorage(@Valid @RequestBody @NotNull MaterialStorageQO request) {
WmsInTask task = inTaskService.lambdaQuery().eq(WmsInTask::getTaskNumber, request.getTaskNo()).one();
WmsInTask task = inTaskService.getByNo(request.getTaskNo());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
inTaskService.storage(request.getTaskNo());
VUtil.trueThrowBusinessError(!Objects.equals(task.getTaskStatus(), (short) 0)).throwMessage("请勿重复上架");
List<WmsInTaskItem> datas = inTaskItemService.getForIn(request);
if (CollectionUtil.isNotEmpty(datas)) {
for (WmsInTaskItem item : datas) {
materialStorageItem(task, item, request.getItems().stream()
.filter(it -> StrUtil.equals(it.getMaterialNo(), item.getItemCode()))
.findFirst()
.get());
}
datas.stream()
.filter(it -> request.getItems().stream().anyMatch(r -> StrUtil.equals(r.getMaterialNo(), it.getItemCode())))
.collect(Collectors.groupingBy(WmsInTaskItem::getPoNum))
.values()
.forEach(it -> structuralPackageControllerService.materialStorage(it, request.getItems()));
inTaskService.updateState(request.getTaskNo());
}
return ApiResult.success();
}
@Transactional
public void materialStorageItem(WmsInTask task, WmsInTaskItem item, MaterialStorageItemQO iqo) {
//判断是否更改了储位
syncStorage(iqo);
BigDecimal num = iqo.getNum();
if (Objects.nonNull(num) && num.compareTo(BigDecimal.ZERO) > 0) {
//TODO 调用SAP的越库接口
}
BigDecimal total = Objects.isNull(num) ? item.getQualifiedQty() : item.getQualifiedQty().subtract(num);
//同步入库信息到SAP
Pair<Pair<String, String>, Pair<String, String>> pair = syncInToSAP(task, item, total);
item.setMatDoc101(pair.getKey().getKey());
item.setDocYear101(pair.getKey().getValue());
item.setMatDoc103(pair.getValue().getKey());
item.setDocYear103(pair.getValue().getValue());
//保存库存信息
saveInventory(item, total);
item.setDataStatus((short) 3);
item.setFailResult("");
item.setStorageLocation(StrUtil.join(",", iqo.getBinNos()));
inTaskItemService.updateById(item);
}
@Retryable(
maxAttempts = 5, // 最大重试次数包括第一次调用
backoff = @Backoff(delay = 1000) // 重试间隔1秒
)
public void saveInventory(WmsInTaskItem item, BigDecimal total) {
WmsInventory inventory = inventoryService.lambdaQuery()
.eq(WmsInventory::getMaterialNo, item.getItemCode())
.eq(WmsInventory::getBatchNumber, item.getBatchNumber())
.one();
if (Objects.isNull(inventory)) {
inventory = new WmsInventory()
.setMaterialNo(item.getItemCode())
.setNum(total)
.setFactoryNo(item.getFactory())
.setWarehouseNo(item.getReceivedWarehouse())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
inventoryService.save(inventory);
} else {
inventory.setNum(inventory.getNum().add(total))
.setUpdateBy(UserUtil.getUserName())
.setUpdateTime(LocalDateTime.now());
inventoryService.updateById(inventory);
}
/**
* 搜索上架任务列表
* @param request 请求参数
*/
@PostMapping("searchTicket")
public ApiResult<PageData<InTaskVO>> searchTicket(@Valid @RequestBody @NotNull InTaskSearchQO request) {
return ApiResult.success(inTaskService.search(request));
}
/**
* 同步入库信息到SAP
* @param item 入库信息
* 获取上架任务明细
* @param taskNo 上架任务单号
*/
private Pair<Pair<String, String>, Pair<String, String>> syncInToSAP(WmsInTask task, WmsInTaskItem item, BigDecimal total) {
SAPMaterialInfoInOrderDTO zim004dto = sapService.zim004(item.getPoNum(), item.getSupplierNum(), item.getItemCode()).get(0);
// if (Objects.equals(task.getTaskFrom(), (short) 2) && item.getIsQuality()) {
// List<WmsSrmQualityInspection> qualityInspections = srmQualityInspectionService.lambdaQuery()
// .eq(WmsSrmQualityInspection::getItemCode, item.getItemCode())
// .eq(WmsSrmQualityInspection::getPoNum, item.getPoNum())
// .list();
// VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(qualityInspections)).throwMessage("未找到" + item.getItemCode() + "的质检报告");
// ZWM3A18DTO ZWM3A18DTO = new ZWM3A18DTO()
// .setEbeln(zim004dto.getEbeln())
// .setUsnam(UserUtil.getUserName())
// .setMblnr(qualityInspections.get(0).getReceiveNum())
// .setMjahr(DateTimeUtil.format(qualityInspections.get(0).getAcceptTime(), "yyyy"))
// .setItem1(new ZWM3A18Item1DTO()
// .setEbelp(zim004dto.getEbelp())
// .setErfmg(String.valueOf(qualityInspections.stream().map(WmsSrmQualityInspection::getInspectionQty).reduce(BigDecimal.ZERO, BigDecimal::add)))
// .setErfmg1(String.valueOf(qualityInspections.stream().map(WmsSrmQualityInspection::getQualifiedQty).reduce(BigDecimal.ZERO, BigDecimal::add)))
// .setErfmg2(String.valueOf(qualityInspections.stream().map(WmsSrmQualityInspection::getUnqualifiedQty).reduce(BigDecimal.ZERO, BigDecimal::add)))
// .setMatnr(item.getItemCode())
// .setMeins(item.getUnit())
// .setCharg(item.getBatchNumber())
// .setLgort(item.getReceivedWarehouse())
// .setWerks(item.getFactory())
// )
// .setItem2(qualityInspections.stream().map(q -> new ZWM3A17Item2DTO()
// .setEBELP(zim004dto.getEbelp())
// .setSERNR(q.getSerialNum())
// .setFLAG(q.getUnqualifiedQty().compareTo(BigDecimal.ZERO) > 0 ? "" : "X")
// ).toList()
// );
// return Pair.of(sapService.zwm3a18(ZWM3A18DTO), null);
// } else {
ZWM3A17DTO ZWM3A17DTO = new ZWM3A17DTO()
.setEbeln(zim004dto.getEbeln())
.setUsnam(UserUtil.getUserName())
.setItem1(List.of(new ZWM3A17Item1DTO()
.setEBELP(zim004dto.getEbelp())
.setMATNR(item.getItemCode())
.setERFMG(total)
.setMEINS(item.getUnit())
.setCHARG(item.getBatchNumber())
.setWERKS(item.getFactory())
.setLGORT(item.getReceivedWarehouse())
.setKZKRI(zim004dto.getKzkri()))
);
// if (Objects.equals(task.getTaskFrom(), (short) 2)){
// List<ZWM3A17Item2DTO> item2s = new ArrayList<>();
// StrUtil.split(item.getSerialNumber(), ";").forEach(serialNumber -> {
// item2s.add(new ZWM3A17Item2DTO()
// .setEBELP(zim004dto.getEbelp())
// .setSERNR(serialNumber)
// .setFLAG("X"));
// });
// ZWM3A17DTO.setItem2(item2s);
// }
return sapService.zwm3a17(ZWM3A17DTO);
// }
}
private void syncStorage(MaterialStorageItemQO qo) {
Set<String> dbMapBins = storageService.getBinNos(qo.getMaterialNo(), qo.getFactory(), qo.getReceivedWarehouse());
if (!qo.getBinNos().equals(dbMapBins)) {
//保存库位信息到数据库
DictionaryItem factory = dictionaryService.getItemByCode(Constant.DICTIONARY_FACTORY, qo.getFactory());
VUtil.trueThrowBusinessError(Objects.isNull(factory)).throwMessage("工厂(" + qo.getFactory() + ")不存在");
WmsWarehouse warehouse = warehouseService.lambdaQuery()
.eq(WmsWarehouse::getFactoryId, factory.getId())
.eq(WmsWarehouse::getNo, qo.getReceivedWarehouse())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(warehouse)).throwMessage("仓库(" + qo.getReceivedWarehouse() + ")不存在");
WmsStorage storage = storageService.lambdaQuery()
.eq(WmsStorage::getMaterialNo, qo.getMaterialNo())
.eq(WmsStorage::getWarehouseId, warehouse.getId())
.one();
if (Objects.isNull(storage)) {
storage = new WmsStorage()
.setWarehouseId(warehouse.getId())
.setMaterialNo(qo.getMaterialNo())
.setMaterialDesc(qo.getMaterialDesc())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
storageService.save(storage);
} else {
storageBinService.deleteByStorageId(storage.getId());
}
List<WmsBin> dbBins = wmsBinService.lambdaQuery().in(WmsBin::getNo, qo.getBinNos()).list();
qo.getBinNos().forEach(binNo -> {
if (dbBins.stream().noneMatch(it -> StrUtil.equals(it.getNo(), binNo))) {
WmsBin bin = new WmsBin()
.setNo(binNo)
.setName(binNo)
.setWarehouseId(warehouse.getId())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
wmsBinService.save(bin);
dbBins.add(bin);
}
});
WmsStorage finalStorage = storage;
storageBinService.saveBatch(dbBins.stream().map(bin -> new WmsStorageBin()
.setStorageId(finalStorage.getId())
.setBinId(bin.getId()))
.toList()
);
//调用SAP接口保存库位信息
sapService.zwm3A02(qo.getFactory(), qo.getMaterialNo(), qo.getReceivedWarehouse(), qo.getBinNos());
}
@GetMapping("getTicketItems")
public ApiResult<List<WmsInTaskItem>> getTicketItems(@Valid @RequestParam @NotBlank String taskNo) {
return ApiResult.success(inTaskItemService.getByNo(taskNo));
}
}

View File

@ -2,33 +2,30 @@ package com.nflg.wms.admin.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17Item1DTO;
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.Constant;
import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.BomMaterialDTO;
import com.nflg.wms.common.pojo.dto.PackageMaterialDTO;
import com.nflg.wms.common.pojo.dto.PackageMaterialExcelExportDTO;
import com.nflg.wms.common.pojo.dto.PackageMaterialExcelImportDTO;
import com.nflg.wms.common.pojo.dto.*;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.PackageVO;
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.WmsMaterial;
import com.nflg.wms.repository.entity.WmsModel;
import com.nflg.wms.repository.entity.WmsStructuralPackage;
import com.nflg.wms.repository.service.IWmsMaterialService;
import com.nflg.wms.repository.service.IWmsModelService;
import com.nflg.wms.repository.service.IWmsStructuralPackageService;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import com.nflg.wms.starter.service.BomMaterialService;
import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
@ -43,6 +40,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import org.ttzero.excel.entity.ListSheet;
@ -81,8 +79,34 @@ public class StructuralPackageControllerService {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private BomMaterialService bomMaterialService;
@Resource
private IWmsStorageService storageService;
@Resource
private IWmsWarehouseService warehouseService;
@Resource
private IDictionaryService dictionaryService;
@Resource
private IWmsStorageBinService storageBinService;
@Resource
private IWmsBinService wmsBinService;
@Resource
private SapService sapService;
@Resource
private IWmsInTaskItemService inTaskItemService;
@Resource
private IWmsInventoryService inventoryService;
@Transactional
public void add(@Valid PackageAddQO request) {
WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request);
@ -90,7 +114,7 @@ public class StructuralPackageControllerService {
structuralPackage.setCreateBy(UserUtil.getUserName());
structuralPackage.setCreateTime(LocalDateTime.now());
structuralPackage.setModelIds(StrUtil.join(",", request.getModelIds()));
request.getMaterials().forEach(it->{
request.getMaterials().forEach(it -> {
it.setCreateBy(UserUtil.getUserName());
it.setCreateTime(DateTimeUtil.format(LocalDateTime.now()));
});
@ -107,23 +131,23 @@ public class StructuralPackageControllerService {
}
public void update(@Valid PackageUpdateQO request) {
WmsStructuralPackage p=packageService.lambdaQuery().eq(WmsStructuralPackage::getId, request.getId()).one();
WmsStructuralPackage p = packageService.lambdaQuery().eq(WmsStructuralPackage::getId, request.getId()).one();
VUtil.trueThrowBusinessError(Objects.isNull(p)).throwMessage("无效的数据");
List<PackageMaterialDTO> materials=JSONUtil.toList(p.getMaterials(), PackageMaterialDTO.class);
List<PackageMaterialDTO> materials = JSONUtil.toList(p.getMaterials(), PackageMaterialDTO.class);
WmsStructuralPackage structuralPackage = Convert.convert(WmsStructuralPackage.class, request);
structuralPackage.setId(null);
structuralPackage.setOrderNo(p.getOrderNo());
structuralPackage.setCreateBy(UserUtil.getUserName());
structuralPackage.setCreateTime(LocalDateTime.now());
structuralPackage.setModelIds(StrUtil.join(",", request.getModelIds()));
request.getMaterials().forEach(it->{
PackageMaterialDTO dto=materials.stream().filter(m->m.getNo().equals(it.getNo())).findFirst().orElse(null);
if (Objects.nonNull(dto)){
request.getMaterials().forEach(it -> {
PackageMaterialDTO dto = materials.stream().filter(m -> m.getNo().equals(it.getNo())).findFirst().orElse(null);
if (Objects.nonNull(dto)) {
it.setCreateBy(dto.getCreateBy());
it.setCreateTime(dto.getCreateTime());
it.setUpdateBy(UserUtil.getUserName());
it.setUpdateTime(DateTimeUtil.format(LocalDateTime.now()));
}else {
} else {
it.setCreateBy(UserUtil.getUserName());
it.setCreateTime(DateTimeUtil.format(LocalDateTime.now()));
}
@ -152,12 +176,12 @@ public class StructuralPackageControllerService {
return packageService.getMaterials(request);
}
public void exportMaterials(HttpServletResponse response,Long packageId) throws IOException {
public void exportMaterials(HttpServletResponse response, Long packageId) throws IOException {
PackageVO vo = packageService.getInfo(packageId);
List<PackageMaterialExcelExportDTO> datas = vo.getMaterialList().stream().map(info -> Convert.convert(PackageMaterialExcelExportDTO.class, info)).collect(Collectors.toList());
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(vo.getNo()+"零件清单导出.xlsx", StandardCharsets.UTF_8));
if (CollectionUtil.isEmpty(datas)){
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode(vo.getNo() + "零件清单导出.xlsx", StandardCharsets.UTF_8));
if (CollectionUtil.isEmpty(datas)) {
datas.add(new PackageMaterialExcelExportDTO()
.setNo("(必填)零件编码")
.setName("(必填)零件名称")
@ -195,7 +219,7 @@ public class StructuralPackageControllerService {
}
@Transactional
public boolean checkAndImport(PackageVO vo,List<PackageMaterialExcelImportDTO> data) {
public boolean checkAndImport(PackageVO vo, List<PackageMaterialExcelImportDTO> data) {
List<PackageMaterialDTO> materialDTOS = new ArrayList<>();
for (PackageMaterialExcelImportDTO dto : data) {
PackageMaterialDTO materialDTO = new PackageMaterialDTO();
@ -222,23 +246,21 @@ public class StructuralPackageControllerService {
}
if (StrUtil.isBlank(dto.getNum())) {
sb.append("数量不能为空;");
}else if(!NumberUtils.isCreatable(dto.getNum())){
} else if (!NumberUtils.isCreatable(dto.getNum())) {
sb.append("数量无效;");
}
else {
} else {
materialDTO.setNum(new BigDecimal(dto.getNum()));
}
if (StrUtil.isBlank(dto.getWeight())) {
sb.append("重量不能为空;");
}else if(!NumberUtils.isCreatable(dto.getWeight())){
} else if (!NumberUtils.isCreatable(dto.getWeight())) {
sb.append("重量无效;");
}
else {
} else {
materialDTO.setWeight(new BigDecimal(dto.getWeight()));
}
if (StrUtil.isBlank(dto.getVersion())) {
sb.append("图纸版本不能为空;");
}else if (!NumberUtils.isCreatable(dto.getVersion())){
} else if (!NumberUtils.isCreatable(dto.getVersion())) {
sb.append("图纸版本无效;");
} else {
materialDTO.setVersion(Integer.valueOf(dto.getVersion()));
@ -266,25 +288,25 @@ public class StructuralPackageControllerService {
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
List<PackageMaterialDTO> materials = new ArrayList<>();
StringBuilder sb=new StringBuilder();
StringBuilder sb = new StringBuilder();
Sheet sheet = ExcelReader.read(file.getInputStream()).sheet(0);
sheet.rows().forEach(row -> {
switch (row.getRowNum()) {
case 2:
String no = row.getString(1);
VUtil.trueThrowBusinessError(StrUtil.isBlank(no)).throwMessage("钢构包编码不能为空");
BomMaterialDTO material=bomMaterialService.getMaterialInfo(no);
BomMaterialDTO material = bomMaterialService.getMaterialInfo(no);
VUtil.trueThrowBusinessError(Objects.isNull(material)).throwMessage("钢构包编码无效");
packageInfo.setNo(no);
packageInfo.setName(material.getMaterialDesc());
packageInfo.setDrawingNo(material.getDrawingNo());
String modelNo= row.getString(3);
String modelNo = row.getString(3);
VUtil.trueThrowBusinessError(StrUtil.isBlank(modelNo)).throwMessage("机型编号不能为空");
List<String> modelNos=StrUtil.split(modelNo, ",");
List<WmsModel> models=modelService.lambdaQuery().select(WmsModel::getId, WmsModel::getNo).eq(WmsModel::getEnable,true).in(WmsModel::getNo, modelNos).list();
List<String> modelNos = StrUtil.split(modelNo, ",");
List<WmsModel> models = modelService.lambdaQuery().select(WmsModel::getId, WmsModel::getNo).eq(WmsModel::getEnable, true).in(WmsModel::getNo, modelNos).list();
modelNos.removeIf(mno -> models.stream().anyMatch(model -> model.getNo().equals(mno)));
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(modelNos)).throwMessage("以下机型编号无效:"+StrUtil.join(",", modelNos));
packageInfo.setModelIds(StrUtil.join(",",models.stream().map(WmsModel::getId).toList()));
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(modelNos)).throwMessage("以下机型编号无效:" + StrUtil.join(",", modelNos));
packageInfo.setModelIds(StrUtil.join(",", models.stream().map(WmsModel::getId).toList()));
break;
case 3:
String cate = row.getString(1);
@ -292,7 +314,7 @@ public class StructuralPackageControllerService {
packageInfo.setCate(cate);
String eco = row.getString(3);
VUtil.trueThrowBusinessError(StrUtil.isBlank(eco)).throwMessage("ECO不能为空");
packageInfo.setEco( eco);
packageInfo.setEco(eco);
break;
case 4:
String remark = row.getString(3);
@ -302,18 +324,18 @@ public class StructuralPackageControllerService {
VUtil.trueThrowBusinessError(!NumberUtils.isCreatable(version)).throwMessage("版本号无效");
packageInfo.setVersion(new BigDecimal(version));
VUtil.trueThrowBusinessError(packageService.lambdaQuery()
.eq(WmsStructuralPackage::getNo, packageInfo.getNo())
.eq(WmsStructuralPackage::getVersion, packageInfo.getVersion())
.exists())
.eq(WmsStructuralPackage::getNo, packageInfo.getNo())
.eq(WmsStructuralPackage::getVersion, packageInfo.getVersion())
.exists())
.throwMessage("该版本已存在");
VUtil.trueThrowBusinessError(StrUtil.isBlank(packageInfo.getRemark())
&& packageService.lambdaQuery().eq(WmsStructuralPackage::getNo, packageInfo.getNo()).exists())
&& packageService.lambdaQuery().eq(WmsStructuralPackage::getNo, packageInfo.getNo()).exists())
.throwMessage("修改日志不能为空");
break;
default:
if (row.getRowNum() > 6){
if (row.getRowNum() > 6) {
String mno = row.getString(0);
if (StrUtil.isBlank(mno)){
if (StrUtil.isBlank(mno)) {
sb.append(StrUtil.format("第{}行零件编码不能为空;", row.getRowNum()));
break;
}
@ -328,20 +350,20 @@ public class StructuralPackageControllerService {
dto.setVersion(material1.getVersion());
dto.setStation(row.getString(1));
dto.setTray(row.getString(2));
String num=row.getString(3);
if (StrUtil.isBlank(num)){
String num = row.getString(3);
if (StrUtil.isBlank(num)) {
sb.append(StrUtil.format("第{}行数量不能为空;", row.getRowNum()));
}else if (!NumberUtils.isCreatable(num)){
} else if (!NumberUtils.isCreatable(num)) {
sb.append(StrUtil.format("第{}行数量无效;", row.getRowNum()));
}else {
} else {
dto.setNum(new BigDecimal(num));
}
num=row.getString(4);
if (StrUtil.isBlank(num)){
num = row.getString(4);
if (StrUtil.isBlank(num)) {
sb.append(StrUtil.format("第{}行重量不能为空;", row.getRowNum()));
}else if (!NumberUtils.isCreatable(num)){
} else if (!NumberUtils.isCreatable(num)) {
sb.append(StrUtil.format("第{}行重量无效;", row.getRowNum()));
}else {
} else {
dto.setWeight(new BigDecimal(num));
}
dto.setCreateBy(UserUtil.getUserName());
@ -351,7 +373,7 @@ public class StructuralPackageControllerService {
break;
}
});
VUtil.trueThrowBusinessError(!sb.isEmpty()).throwMessage("数据校验失败:"+ sb);
VUtil.trueThrowBusinessError(!sb.isEmpty()).throwMessage("数据校验失败:" + sb);
packageInfo.setWeight(materials.stream()
.map(m -> m.getWeight().multiply(m.getNum()))
.reduce(BigDecimal.ZERO, BigDecimal::add));
@ -392,6 +414,116 @@ public class StructuralPackageControllerService {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PdfGeneratorUtil.generatePdf(vo.getNo() + "老鼠图", html, outputStream);
InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
return fileUploadService.upload("tmp/sp/"+ RandomUtil.randomString(10)+".pdf",inputStream);
return fileUploadService.upload("tmp/sp/" + RandomUtil.randomString(10) + ".pdf", inputStream);
}
@Transactional
public void materialStorage(List<WmsInTaskItem> list, List<MaterialStorageItemQO> items) {
items.forEach(this::syncStorage);
try {
inventoryService.in(list.stream().map(it -> new InventoryDTO()
.setMaterialNo(it.getItemCode())
.setBatchNumber(it.getBatchNumber())
.setFactoryNo(it.getFactory())
.setWarehouseNo(it.getReceivedWarehouse())
.setNum(it.getInspectionQty()))
.toList()
);
Pair<Pair<String, String>, Pair<String, String>> pair = syncInToSAP(list);
list.forEach(it -> {
it.setMatDoc101(pair.getKey().getKey());
it.setDocYear101(pair.getKey().getValue());
it.setMatDoc103(pair.getValue().getKey());
it.setDocYear103(pair.getValue().getValue());
it.setDataStatus((short) 1);
it.setStorageLocation(StrUtil.join(",", items.stream()
.filter(f -> f.getMaterialNo().equals(it.getItemCode()))
.findFirst()
.get()
.getBinNos()));
});
inTaskItemService.saveBatch(list);
} catch (Exception ex) {
saveSapError(list, ex.getMessage());
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveSapError(List<WmsInTaskItem> list, String msg) {
list.forEach(it -> {
it.setFailResult(msg);
});
inTaskItemService.saveBatch(list);
}
/**
* 同步入库信息到SAP
*/
private Pair<Pair<String, String>, Pair<String, String>> syncInToSAP(List<WmsInTaskItem> list) {
ZWM3A17DTO ZWM3A17DTO = new ZWM3A17DTO()
.setEbeln(list.get(0).getPoNum())
.setUsnam(UserUtil.getUserName())
.setItem1(list.stream().map(it -> new ZWM3A17Item1DTO()
.setEBELP(it.getPoLineNumber())
.setMATNR(it.getItemCode())
.setERFMG(it.getInspectionQty())
.setMEINS(it.getUnit())
.setCHARG(it.getBatchNumber())
.setWERKS(it.getFactory())
.setLGORT(it.getReceivedWarehouse())
.setKZKRI(it.getKzkri())
).toList()
);
return sapService.zwm3a17(ZWM3A17DTO);
}
private void syncStorage(MaterialStorageItemQO qo) {
Set<String> dbMapBins = storageService.getBinNos(qo.getMaterialNo(), qo.getFactory(), qo.getReceivedWarehouse());
if (!qo.getBinNos().equals(dbMapBins)) {
//保存库位信息到数据库
DictionaryItem factory = dictionaryService.getItemByCode(Constant.DICTIONARY_FACTORY, qo.getFactory());
VUtil.trueThrowBusinessError(Objects.isNull(factory)).throwMessage("工厂(" + qo.getFactory() + ")不存在");
WmsWarehouse warehouse = warehouseService.lambdaQuery()
.eq(WmsWarehouse::getFactoryId, factory.getId())
.eq(WmsWarehouse::getNo, qo.getReceivedWarehouse())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(warehouse)).throwMessage("仓库(" + qo.getReceivedWarehouse() + ")不存在");
WmsStorage storage = storageService.lambdaQuery()
.eq(WmsStorage::getMaterialNo, qo.getMaterialNo())
.eq(WmsStorage::getWarehouseId, warehouse.getId())
.one();
if (Objects.isNull(storage)) {
storage = new WmsStorage()
.setWarehouseId(warehouse.getId())
.setMaterialNo(qo.getMaterialNo())
.setMaterialDesc(qo.getMaterialDesc())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
storageService.save(storage);
} else {
storageBinService.deleteByStorageId(storage.getId());
}
List<WmsBin> dbBins = wmsBinService.lambdaQuery().in(WmsBin::getNo, qo.getBinNos()).list();
qo.getBinNos().forEach(binNo -> {
if (dbBins.stream().noneMatch(it -> StrUtil.equals(it.getNo(), binNo))) {
WmsBin bin = new WmsBin()
.setNo(binNo)
.setName(binNo)
.setWarehouseId(warehouse.getId())
.setCreateBy(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now());
wmsBinService.save(bin);
dbBins.add(bin);
}
});
WmsStorage finalStorage = storage;
storageBinService.saveBatch(dbBins.stream().map(bin -> new WmsStorageBin()
.setStorageId(finalStorage.getId())
.setBinId(bin.getId()))
.toList()
);
//调用SAP接口保存库位信息
sapService.zwm3A02(qo.getFactory(), qo.getMaterialNo(), qo.getReceivedWarehouse(), qo.getBinNos());
}
}
}

View File

@ -81,4 +81,9 @@ public class SAPOrderDTO {
* 单位
*/
private String unit;
/**
* 标志关键部件
*/
private String kzkri;
}

View File

@ -25,8 +25,7 @@ public class MaterialStorageItemQO {
/**
* 工厂
*/
@NotBlank
private String factory;
private String factory = "1010";
/**
* 上架仓库

View File

@ -74,6 +74,12 @@ public class PackageDeliverOrderSaveItemQO {
@NotBlank
private String unit;
/**
* 标志关键部件
*/
@NotBlank
private String kzkri;
@JsonIgnore
private String key1;

View File

@ -149,4 +149,9 @@ public class DeliverStructuralPackageOrderVO {
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 标志关键部件
*/
private String kzkri;
}

View File

@ -4,20 +4,15 @@ import com.nflg.wms.common.pojo.dto.TrayScanInfoDTO;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class InTaskInfoVO {
/**
* 子任务id
*/
private Long id;
/**
* 采购订单号
*/
private String poNum;
private String taskNumber;
/**
* 采购订单行号
@ -25,9 +20,14 @@ public class InTaskInfoVO {
private String poLineNumber;
/**
* 工厂
* 采购订单号
*/
private String factory;
private String poNum;
/**
* 送货单行号
*/
private String lineNumber;
/**
* 送货单号
@ -45,25 +45,112 @@ public class InTaskInfoVO {
private String itemName;
/**
* 上架数量
* 物料单位
*/
private BigDecimal qualifiedQty;
private String unit;
/**
* 上架仓库
* 仓库编号
*/
private String receivedWarehouse;
/**
* 上架储位
* 储位
*/
private String binNos;
private String storageLocation;
/**
* 标志位
*/
private Short signPosition;
/**
* 是否质检
*/
private Boolean isQuality;
/**
* 不合格数量
*/
private BigDecimal unqualifiedQty;
/**
* 合格数量
*/
private BigDecimal qualifiedQty;
/**
* 工厂
*/
private String factory;
/**
* 数据状态 0 待上架1 已上架
*/
private Short dataStatus;
/**
* sap 同步失败原因
*/
private String failResult;
/**
* 上架操作人
*/
private Long operationUserId;
/**
* 上架操作人
*/
private String operationUserName;
/**
* 批次号
*/
private String batchNumber;
/**
* 总数量
*/
private BigDecimal inspectionQty;
/**
* 101物料凭证编号
*/
private String matDoc101;
/**
* 101物料凭证年度
*/
private String docYear101;
/**
* 103物料凭证编号
*/
private String matDoc103;
/**
* 103物料凭证年度
*/
private String docYear103;
/**
* 物料有效期
*/
private LocalDateTime periodTime;
private String inspectionOrder;
/**
* 供应商编码
*/
private String supplierNum;
/**
* 上架储位
*/
private String binNos;
/**
* 该订单下包含的托盘
*/

View File

@ -14,11 +14,6 @@ public class InTaskVO {
*/
private String taskNumber;
/**
* 任务来源 1钢构包送货单 2普通物料送货单
*/
private Short taskFrom;
/**
* 任务源单号
*/
@ -30,7 +25,7 @@ public class InTaskVO {
private LocalDateTime updateTime;
/**
* 0 待上架 1 上架中 2 已上架
* 0 待上架 1 已上架
*/
private Short taskStatus;
}

View File

@ -55,9 +55,4 @@ public class WmsInTask implements Serializable {
* 0 待上架 1 已上架
*/
private Short taskStatus;
/**
* SAP 同步成功或失败
*/
private Boolean sapStatus;
}

View File

@ -106,7 +106,7 @@ public class WmsInTaskItem implements Serializable {
private String factory;
/**
* 数据状态 0 待上架1 已上架2 sap同步失败
* 数据状态 0 待上架1 已上架
*/
private Short dataStatus;
@ -170,4 +170,9 @@ public class WmsInTaskItem implements Serializable {
* 供应商编码
*/
private String supplierNum;
/**
* 标志关键部件
*/
private String kzkri;
}

View File

@ -111,4 +111,9 @@ public class WmsStructuralPackageOrder implements Serializable {
* 最后更新时间
*/
private LocalDateTime updateTime;
/**
* 标志关键部件
*/
private String kzkri;
}

View File

@ -7,6 +7,8 @@ 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 接口
@ -17,5 +19,7 @@ import com.nflg.wms.repository.entity.WmsInTask;
*/
public interface WmsInTaskMapper extends BaseMapper<WmsInTask> {
IPage<InTaskVO> searchForIn(InTaskSearchQO request, Page<?> page);
List<InTaskVO> searchForIn(String no);
IPage<InTaskVO> search(InTaskSearchQO request, Page<Object> objectPage);
}

View File

@ -19,5 +19,5 @@ import com.nflg.wms.repository.entity.WmsInventoryCheckTask;
public interface WmsInventoryCheckTaskMapper extends BaseMapper<WmsInventoryCheckTask> {
IPage<InventoryCheckTaskVO> search(InventoryCheckTaskSearchQO request, Page<Object> objectPage);
IPage<InventoryCheckTaskItemMaterialVO> getMatrials(InventoryCheckTaskMaterialsQO request, Page<?> objectPage);
IPage<InventoryCheckTaskItemMaterialVO> getMaterials(InventoryCheckTaskMaterialsQO request, Page<?> objectPage);
}

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.MaterialStorageQO;
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;
@ -21,4 +22,6 @@ public interface IWmsInTaskItemService extends IService<WmsInTaskItem> {
List<WmsInTaskItem> getListForStorage(@Valid @NotNull String taskNo);
List<WmsInTaskItem> getForIn(@Valid @NotNull MaterialStorageQO request);
List<WmsInTaskItem> getByNo(@Valid @NotBlank String taskNo);
}

View File

@ -30,9 +30,13 @@ public interface IWmsInTaskService extends IService<WmsInTask> {
*/
boolean generateTask(List<WmsInTaskItem> tasks, short taskSource) ;
IPage<InTaskVO> searchForIn(@Valid @NotNull InTaskSearchQO request);
List<InTaskVO> searchForIn(@Valid @NotBlank String no);
void storage(@NotBlank String taskNo);
WmsInTask getByNo(@Valid @NotNull String taskNo);
void updateState(@NotBlank String taskNo);
IPage<InTaskVO> search(@Valid @NotNull InTaskSearchQO request);
}

View File

@ -30,5 +30,5 @@ public interface IWmsInventoryCheckTaskService extends IService<WmsInventoryChec
void complete(@Valid @NotNull Long taskId);
IPage<InventoryCheckTaskItemMaterialVO> getMatrials(@Valid InventoryCheckTaskMaterialsQO request);
IPage<InventoryCheckTaskItemMaterialVO> getMaterials(@Valid InventoryCheckTaskMaterialsQO request);
}

View File

@ -39,4 +39,11 @@ public class WmsInTaskItemServiceImpl extends ServiceImpl<WmsInTaskItemMapper, W
.eq(WmsInTaskItem::getItemCode, item.getMaterialNo())
.one()).filter(Objects::nonNull).toList();
}
@Override
public List<WmsInTaskItem> getByNo(String taskNo) {
return lambdaQuery()
.eq(WmsInTaskItem::getTaskNumber, taskNo)
.list();
}
}

View File

@ -88,8 +88,8 @@ public class WmsInTaskServiceImpl extends ServiceImpl<WmsInTaskMapper, WmsInTask
}
@Override
public IPage<InTaskVO> searchForIn(InTaskSearchQO request) {
return baseMapper.searchForIn(request, new Page<>(request.getPage(), request.getPageSize()));
public List<InTaskVO> searchForIn(String no) {
return baseMapper.searchForIn(no);
}
@Override
@ -106,4 +106,24 @@ public class WmsInTaskServiceImpl extends ServiceImpl<WmsInTaskMapper, WmsInTask
public WmsInTask getByNo(String taskNo) {
return lambdaQuery().eq(WmsInTask::getTaskNumber, taskNo).one();
}
@Override
public void updateState(String taskNo) {
if (!wmsTaskItemService.lambdaQuery()
.eq(WmsInTaskItem::getTaskNumber, taskNo)
.eq(WmsInTaskItem::getDataStatus, 0)
.exists()
) {
lambdaUpdate()
.set(WmsInTask::getTaskStatus, 1)
.set(WmsInTask::getUpdateTime, LocalDateTime.now())
.eq(WmsInTask::getTaskNumber, taskNo)
.update();
}
}
@Override
public IPage<InTaskVO> search(InTaskSearchQO request) {
return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -146,7 +146,7 @@ public class WmsInventoryCheckTaskServiceImpl extends ServiceImpl<WmsInventoryCh
}
@Override
public IPage<InventoryCheckTaskItemMaterialVO> getMatrials(InventoryCheckTaskMaterialsQO request) {
return baseMapper.getMatrials(request, new Page<>(request.getPage(), request.getPageSize()));
public IPage<InventoryCheckTaskItemMaterialVO> getMaterials(InventoryCheckTaskMaterialsQO request) {
return baseMapper.getMaterials(request, new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -5,15 +5,25 @@
<select id="searchForIn" resultType="com.nflg.wms.common.pojo.vo.InTaskVO">
SELECT *
FROM wms_in_task
where task_from=#{taskFrom} and task_status &lt; 1
<if test="request.startDate != null">
and create_time >= #{request.startDate}
</if>
<if test="request.endDate != null">
and create_time &lt;= #{request.endDate}
</if>
where task_status = 0
<if test="request.no != null and request.no!=''">
AND task_number like CONCAT('%', #{request.no}, '%')
</if>
</select>
<select id="search" resultType="com.nflg.wms.common.pojo.vo.InTaskVO">
SELECT *
FROM wms_in_task
<where>
<if test="request.startDate != null">
and create_time >= #{request.startDate}
</if>
<if test="request.endDate != null">
and create_time &lt;= #{request.endDate}
</if>
<if test="request.no != null and request.no!=''">
AND task_number like CONCAT('%', #{request.no}, '%')
</if>
</where>
</select>
</mapper>

View File

@ -21,7 +21,7 @@
</where>
</select>
<select id="getMatrials" resultType="com.nflg.wms.common.pojo.vo.InventoryCheckTaskItemMaterialVO">
<select id="getMaterials" resultType="com.nflg.wms.common.pojo.vo.InventoryCheckTaskItemMaterialVO">
SELECT ictim.*,di."name" AS "factory_no",wh."no" AS "warehouse_no",get_binnos(s.id) AS "bin_nos",i.num AS "inventory_num"
FROM wms_inventory_check_task_item_material ictim
LEFT JOIN wms_inventory_check_task_item icti ON ictim.item_id=icti."id"