一些优化
This commit is contained in:
parent
722bd067fc
commit
95c7809730
|
|
@ -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"));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,4 +81,9 @@ public class SAPOrderDTO {
|
|||
* 单位
|
||||
*/
|
||||
private String unit;
|
||||
|
||||
/**
|
||||
* 标志:关键部件
|
||||
*/
|
||||
private String kzkri;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,8 +25,7 @@ public class MaterialStorageItemQO {
|
|||
/**
|
||||
* 工厂
|
||||
*/
|
||||
@NotBlank
|
||||
private String factory;
|
||||
private String factory = "1010";
|
||||
|
||||
/**
|
||||
* 上架仓库
|
||||
|
|
|
|||
|
|
@ -74,6 +74,12 @@ public class PackageDeliverOrderSaveItemQO {
|
|||
@NotBlank
|
||||
private String unit;
|
||||
|
||||
/**
|
||||
* 标志:关键部件
|
||||
*/
|
||||
@NotBlank
|
||||
private String kzkri;
|
||||
|
||||
@JsonIgnore
|
||||
private String key1;
|
||||
|
||||
|
|
|
|||
|
|
@ -149,4 +149,9 @@ public class DeliverStructuralPackageOrderVO {
|
|||
* 最后更新时间
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 标志:关键部件
|
||||
*/
|
||||
private String kzkri;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 该订单下包含的托盘
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -55,9 +55,4 @@ public class WmsInTask implements Serializable {
|
|||
* 0 待上架 1 已上架
|
||||
*/
|
||||
private Short taskStatus;
|
||||
|
||||
/**
|
||||
* SAP 同步成功或失败
|
||||
*/
|
||||
private Boolean sapStatus;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,4 +111,9 @@ public class WmsStructuralPackageOrder implements Serializable {
|
|||
* 最后更新时间
|
||||
*/
|
||||
private LocalDateTime updateTime;
|
||||
|
||||
/**
|
||||
* 标志:关键部件
|
||||
*/
|
||||
private String kzkri;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 < 1
|
||||
<if test="request.startDate != null">
|
||||
and create_time >= #{request.startDate}
|
||||
</if>
|
||||
<if test="request.endDate != null">
|
||||
and create_time <= #{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 <= #{request.endDate}
|
||||
</if>
|
||||
<if test="request.no != null and request.no!=''">
|
||||
AND task_number like CONCAT('%', #{request.no}, '%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue