添加功能

This commit is contained in:
曹鹏飞 2025-08-21 18:08:11 +08:00
parent 6765075cbb
commit 8ac577a1f2
35 changed files with 495 additions and 95 deletions

View File

@ -9,10 +9,7 @@ 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.GongZhuangTaiZhangExcelCheckDTO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangAddQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckAddQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangSearchQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangUpdateQO;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.util.DateTimeUtil;
import com.nflg.wms.common.util.EecExcelUtil;
import com.nflg.wms.common.util.UserUtil;
@ -27,6 +24,7 @@ import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
@ -71,8 +69,8 @@ public class GongZhuangTaiZhangController extends BaseController {
*/
@PostMapping("add")
public ApiResult<Void> add(@Valid @RequestBody GongZhuangTaiZhangAddQO request) {
BomMaterialDTO materialDTO = bomMaterialService.getMaterialInfo(request.getNo());
VUtil.trueThrowBusinessError(Objects.isNull(materialDTO)).throwMessage("工装编号无效");
// BomMaterialDTO materialDTO = bomMaterialService.getMaterialInfo(request.getNo());
// VUtil.trueThrowBusinessError(Objects.isNull(materialDTO)).throwMessage("工装编号无效");
gongzhuangTaizhangService.add(request);
return ApiResult.success();
}
@ -110,7 +108,7 @@ public class GongZhuangTaiZhangController extends BaseController {
* 导出模版
*/
@GetMapping("export")
public void exportSelect(HttpServletResponse response) throws Exception {
public void export(HttpServletResponse response) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工装台账模板.xlsx", StandardCharsets.UTF_8));
List<GongZhuangTaiZhangAddQO> datas = new ArrayList<>();
@ -120,6 +118,19 @@ public class GongZhuangTaiZhangController extends BaseController {
.writeTo(response.getOutputStream());
}
/**
* 导出选中
*/
@GetMapping("exportSelect")
public void exportSelect(HttpServletResponse response, @Valid @RequestBody @NotEmpty List<String> ids) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工装台账.xlsx", StandardCharsets.UTF_8));
List<GongZhuangTaiZhangAddQO> datas = Convert.toList(GongZhuangTaiZhangAddQO.class, gongzhuangTaizhangService.listByIds(ids));
new Workbook()
.addSheet(new ListSheet<>(datas))
.writeTo(response.getOutputStream());
}
/**
* 导入
* @param file 文件
@ -179,6 +190,15 @@ public class GongZhuangTaiZhangController extends BaseController {
return false;
}
/**
* 获取检验记录列表
* @param request 请求参数
*/
@PostMapping("getCheckList")
public ApiResult<PageData<WmsGongzhuangTaizhangCheck>> getCheckList(GongZhuangTaiZhangCheckListQO request) {
return ApiResult.success(gongzhuangTaizhangCheckService.search(request));
}
/**
* 添加检验记录
* @param request 请求参数
@ -191,6 +211,26 @@ public class GongZhuangTaiZhangController extends BaseController {
return ApiResult.success();
}
/**
* 修改检验记录
* @param request 请求参数
*/
@PostMapping("updateCheck")
public ApiResult<Void> updateCheck(@Valid @RequestBody GongZhuangTaiZhangCheckUpdateQO request) {
gongzhuangTaizhangCheckService.update(request);
return ApiResult.success();
}
/**
* 删除检验记录
* @param ids 要删除的记录Id列表
*/
@PostMapping("deleteCheck")
public ApiResult<Void> deleteCheck(@Valid @RequestBody @NotEmpty List<Long> ids) {
gongzhuangTaizhangCheckService.removeBatchByIds(ids);
return ApiResult.success();
}
/**
* 导出检验模版
*/
@ -205,6 +245,19 @@ public class GongZhuangTaiZhangController extends BaseController {
.writeTo(response.getOutputStream());
}
/**
* 导出选中检验记录
*/
@GetMapping("exportCheckSelect")
public void exportCheckSelect(HttpServletResponse response, @Valid @RequestBody @NotEmpty List<String> ids) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工装检验明细.xlsx", StandardCharsets.UTF_8));
List<GongZhuangTaiZhangCheckAddQO> datas = Convert.toList(GongZhuangTaiZhangCheckAddQO.class, gongzhuangTaizhangCheckService.listByIds(ids));
new Workbook()
.addSheet(new ListSheet<>(datas))
.writeTo(response.getOutputStream());
}
/**
* 导入检验记录
* @param file 文件
@ -238,10 +291,10 @@ public class GongZhuangTaiZhangController extends BaseController {
if (Objects.isNull(dto.getNo())) {
sb.append("工装编号不能为空;");
} else {
BomMaterialDTO materialDTO =bomMaterialService.getMaterialInfo(dto.getNo());
if (Objects.isNull(materialDTO)){
sb.append("工装编号无效;");
}else {
// BomMaterialDTO materialDTO =bomMaterialService.getMaterialInfo(dto.getNo());
// if (Objects.isNull(materialDTO)){
// sb.append("工装编号无效;");
// }else {
WmsGongzhuangTaizhang dbInfo = gongzhuangTaizhangService.lambdaQuery().eq(WmsGongzhuangTaizhang::getNo, dto.getNo()).one();
if (Objects.isNull(dbInfo)) {
sb.append("请先添加工装编号;");
@ -249,7 +302,7 @@ public class GongZhuangTaiZhangController extends BaseController {
info.setCreateBy(UserUtil.getUserName());
info.setCreateTime(LocalDateTime.now());
}
}
// }
}
dto.setError(sb.toString());
infos.add(info);

View File

@ -4,7 +4,6 @@ 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.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
@ -31,6 +30,7 @@ import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.PackageMaterialDTO;
import com.nflg.wms.common.pojo.dto.SAPOrderDTO;
import com.nflg.wms.common.pojo.dto.SAPSyncFromDTO;
import com.nflg.wms.common.pojo.dto.StructuralPackageMaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.*;
@ -147,17 +147,21 @@ public class StructuralPackageOrderController extends BaseController {
public ApiResult<List<SAPOrderDTO>> searchSAPOrder(@Valid @RequestBody @NotNull SearchSAPOrderQO request) {
List<SAPMaterialInfoInOrderDTO> orders = sapService.zim004(request.getOrderNo(), request.getSupplierNo(), request.getMaterialNo());
UserSupplier supplier = userSupplierService.getByCode(request.getSupplierNo());
List<SAPOrderDTO> datas = orders.stream().map(order -> new SAPOrderDTO()
.setIndex(IdUtil.getSnowflakeNextId())
.setOrderNo(order.getEbeln())
.setSupplierName(supplier.getSupplierName())
.setOrderRowNo(order.getEbelp())
.setMaterialNo(order.getMatnr())
.setMaterialDesc(order.getMaktx())
.setOrderNum(order.getMenge())
.setReceivedNum(order.getWemng())
.setTransportNum(order.getTransportNum())
.setLbprt(order.getLbprt())).toList();
List<SAPOrderDTO> datas = orders.stream()
.map(order -> new SAPOrderDTO()
.setIndex(IdUtil.getSnowflakeNextId())
.setOrderNo(order.getEbeln())
.setSupplierName(supplier.getSupplierName())
.setOrderRowNo(order.getEbelp())
.setMaterialNo(order.getMatnr())
.setMaterialDesc(order.getMaktx())
.setOrderNum(order.getMenge())
.setReceivedNum(order.getWemng())
.setTransportNum(order.getTransportNum())
.setLbprt(order.getLbprt())
.setUnit(order.getMeins())
)
.toList();
if (Objects.equals(request.getType(), 1)) {
datas.forEach(it -> {
if (StrUtil.equals("2", it.getLbprt()) || StrUtil.equals("4", it.getLbprt())) {
@ -173,10 +177,10 @@ public class StructuralPackageOrderController extends BaseController {
*/
@PostMapping("generateTray")
public ApiResult<GenerateTrayVO> generateTray(@Valid @RequestBody @NotNull GenerateTrayQO request) {
return ApiResult.success(generateTray(request.getPackageId(), request.getNum()));
return ApiResult.success(generateTray(request.getPackageId(), request.getNum(), request.getOrderNum()));
}
private GenerateTrayVO generateTray(Long packageId, Integer num) {
private GenerateTrayVO generateTray(Long packageId, BigDecimal num, BigDecimal orderNum) {
PackageVO packageVO = structuralPackageService.getInfo(packageId);
VUtil.trueThrowBusinessError(Objects.isNull(packageVO)).throwMessage("钢构包不存在");
List<PackageMaterialDTO> materials = packageVO.getMaterialList();
@ -202,7 +206,8 @@ public class StructuralPackageOrderController extends BaseController {
.setMaterialDesc(material.getName())
.setVersion(material.getVersion())
.setWeight(material.getWeight())
.setPlanNum(material.getNum() * num)
.setPlanNum(material.getNum().multiply(orderNum))
.setShipmentNum(material.getNum().multiply(num))
.setImage(material.getImage())
);
if (Objects.nonNull(material.getWeight())) {
@ -239,7 +244,7 @@ public class StructuralPackageOrderController extends BaseController {
WmsStructuralPackageOrder order = Convert.convert(WmsStructuralPackageOrder.class, orderQO);
order.setOrderNo(orderNo);
deliverStructuralPackageOrderService.addOrUpdate(order);
GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), orderQO.getNum());
GenerateTrayVO trayVO = generateTray(orderQO.getPackageId(), orderQO.getNum(), orderQO.getPlanNum());
if (Objects.nonNull(orderQO.getId())) {
WmsStructuralPackageOrder o = deliverStructuralPackageOrderService.getById(orderQO.getId());
VUtil.trueThrowBusinessError(Objects.isNull(o)).throwMessage("订单不存在");
@ -254,8 +259,8 @@ public class StructuralPackageOrderController extends BaseController {
.setId(IdUtil.getSnowflakeNextId())
.setOrderId(order.getId())
.setNo(it.getNo())
.setWeight(BigDecimal.ZERO)
.setNum(0)
// .setWeight(BigDecimal.ZERO)
// .setNum(0)
.setStation(it.getStation())
.setTray(it.getTray())).toList();
List<WmsStructuralPackageOrderTrayItem> items = new ArrayList<>();
@ -265,8 +270,8 @@ public class StructuralPackageOrderController extends BaseController {
WmsStructuralPackageOrderTrayItem item = Convert.convert(WmsStructuralPackageOrderTrayItem.class, it);
item.setOrderId(order.getId());
item.setTrayId(tray.getId());
tray.setNum(tray.getNum() + (item.getPlanNum() * order.getNum()));
tray.setWeight(tray.getWeight().add(NumberUtil.mul(it.getWeight(), new BigDecimal(item.getPlanNum()))));
// tray.setNum(tray.getNum() + (item.getShipmentNum() * order.getNum()));
// tray.setWeight(tray.getWeight().add(NumberUtil.mul(it.getWeight(), new BigDecimal(item.getPlanNum()))));
return item;
}).toList()
);
@ -425,7 +430,7 @@ public class StructuralPackageOrderController extends BaseController {
.setNo(item.getMaterialNo())
.setDrawingNo(item.getDrawingNo())
.setName(item.getMaterialDesc())
.setNum(item.getPlanNum())
.setNum(item.getShipmentNum())
.setWeight(item.getWeight())
).toList();
Map<String, Object> variables = new HashMap<>();
@ -450,12 +455,19 @@ public class StructuralPackageOrderController extends BaseController {
List<DeliverStructuralPackageOrderTrayItemVO> list = deliverStructuralPackageOrderTrayItemService.getListByTrayId(id);
List<DeliverStructuralPackageOrderTrayItemVO> datas = new ArrayList<>();
for (DeliverStructuralPackageOrderTrayItemVO it : list) {
for (int i = 0; i < it.getPlanNum(); i++) {
for (int i = 0, count = it.getShipmentNum().intValue(); i < count; i++) {
DeliverStructuralPackageOrderTrayItemVO vo = BeanUtil.copy(it, DeliverStructuralPackageOrderTrayItemVO.class);
vo.setQrCode(it.getId() + "-" + (i + 1) + "^" + it.getMaterialNo() + "_" + it.getTrayNo() + "_1");
vo.setQrCodeImage(QRCodeUtil.generateQRCodeBase64(vo.getQrCode(), 200, 200));
datas.add(vo);
}
if (it.getShipmentNum().remainder(BigDecimal.ONE).compareTo(BigDecimal.ZERO) > 0) {
DeliverStructuralPackageOrderTrayItemVO vo = BeanUtil.copy(it, DeliverStructuralPackageOrderTrayItemVO.class);
vo.setQrCode(it.getId() + "-" + (it.getShipmentNum().intValue() + 1) + "^" + it.getMaterialNo() + "_" + it.getTrayNo() + "_" + it.getShipmentNum().remainder(BigDecimal.ONE));
vo.setQrCodeImage(QRCodeUtil.generateQRCodeBase64(vo.getQrCode(), 200, 200));
datas.add(vo);
}
}
Map<String, Object> variables = new HashMap<>();
variables.put("list", datas);
@ -519,7 +531,19 @@ public class StructuralPackageOrderController extends BaseController {
WmsStructuralPackageOrderTray tray = deliverStructuralPackageOrderTrayService.lambdaQuery().eq(WmsStructuralPackageOrderTray::getNo, request.getTrayNo()).one();
VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("托盘不存在");
VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Unpackaged.getState())).throwMessage("请勿重复打包");
VUtil.trueThrowBusinessError(tray.getNum().compareTo(request.getQrCodes().size()) != 0).throwMessage("打包数量不足");
List<DeliverStructuralPackageOrderTrayItemVO> trayItemVOS = deliverStructuralPackageOrderTrayItemService.getListByTrayId(tray.getId());
List<String> materialNos = new ArrayList<>();
List<StructuralPackageMaterialQRCodeContentDTO> qrCodeDTOs = request.getQrCodes().stream().map(NoUtil::getStructuralPackageMaterialQRCodeContent).toList();
trayItemVOS.forEach(it -> {
if (it.getShipmentNum().compareTo(qrCodeDTOs.stream()
.filter(qr -> StrUtil.equals(qr.getMaterialNo(), it.getMaterialNo()))
.map(StructuralPackageMaterialQRCodeContentDTO::getNum)
.reduce(BigDecimal.ZERO, BigDecimal::add)) != 0) {
materialNos.add(it.getMaterialNo());
}
});
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(materialNos))
.throwMessage("以下物料的数量与托盘数量不一致:" + StrUtil.join(",", materialNos));
VUtil.trueThrowBusinessError(!deliverStructuralPackageOrderTrayService.lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())
.set(WmsStructuralPackageOrderTray::getPackBy, UserUtil.getUserName())
@ -712,7 +736,7 @@ public class StructuralPackageOrderController extends BaseController {
log.error("{},{},{}未从SAP的ZIM_004接口查询仓库为空", it.getExternalOrderNo(), it.getSupplierCode(), it.getPackageNo());
} else {
it.setWarehouseNo(dto.getWarehouseNo());
it.setBinNos(binService.getBinNos(it.getPackageNo(),dto.getWerks(),dto.getWarehouseNo()));
it.setBinNos(binService.getBinNos(it.getPackageNo(), dto.getWerks(), dto.getWarehouseNo()));
}
});
DeliverStructuralPackageOrderForPackageVO vo = new DeliverStructuralPackageOrderForPackageVO();
@ -761,7 +785,7 @@ public class StructuralPackageOrderController extends BaseController {
.setNoteNum(structuralPackageDeliverOrderService.getNoByOrderId(request.getId()))
.setItemCode(order.getPackageNo())
.setItemName(order.getPackageDesc())
.setUnit("")
.setUnit(order.getUnit())
.setIsQuality(false)
.setUnqualifiedQty(BigDecimal.ZERO)
.setQualifiedQty(BigDecimal.valueOf(order.getNum()))
@ -818,8 +842,8 @@ public class StructuralPackageOrderController extends BaseController {
inTaskService.storage(request.getTaskNo());
List<WmsInTaskItem> datas = inTaskItemService.getForIn(request);
if (CollectionUtil.isNotEmpty(datas)) {
for (WmsInTaskItem item:datas){
materialStorageItem(task,item,request.getItems().stream()
for (WmsInTaskItem item : datas) {
materialStorageItem(task, item, request.getItems().stream()
.filter(it -> StrUtil.equals(it.getMaterialNo(), item.getItemCode()))
.findFirst()
.get());
@ -844,7 +868,7 @@ public class StructuralPackageOrderController extends BaseController {
item.setMatDoc103(pair.getValue().getKey());
item.setDocYear103(pair.getValue().getValue());
//保存库存信息
saveInventory(item,total);
saveInventory(item, total);
item.setDataStatus((short) 3);
item.setFailResult("");
item.setStorageLocation(StrUtil.join(",", iqo.getBinNos()));
@ -855,7 +879,7 @@ public class StructuralPackageOrderController extends BaseController {
maxAttempts = 5, // 最大重试次数包括第一次调用
backoff = @Backoff(delay = 1000) // 重试间隔1秒
)
public void saveInventory(WmsInTaskItem item,BigDecimal total){
public void saveInventory(WmsInTaskItem item, BigDecimal total) {
WmsInventory inventory = inventoryService.lambdaQuery()
.eq(WmsInventory::getMaterialNo, item.getItemCode())
.eq(WmsInventory::getBatchNumber, item.getBatchNumber())
@ -884,7 +908,7 @@ public class StructuralPackageOrderController extends BaseController {
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()
List<WmsSrmQualityInspection> qualityInspections = srmQualityInspectionService.lambdaQuery()
.eq(WmsSrmQualityInspection::getItemCode, item.getItemCode())
.eq(WmsSrmQualityInspection::getPoNum, item.getPoNum())
.list();
@ -950,26 +974,26 @@ public class StructuralPackageOrderController extends BaseController {
.eq(WmsWarehouse::getFactoryId, factory.getId())
.eq(WmsWarehouse::getNo, qo.getReceivedWarehouse())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(warehouse)).throwMessage("仓库("+qo.getReceivedWarehouse()+")不存在");
WmsStorage storage=storageService.lambdaQuery()
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()
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 {
} 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()
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())

View File

@ -28,6 +28,7 @@ import com.nflg.wms.starter.service.FileUploadService;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
@ -48,7 +49,7 @@ import java.util.List;
import java.util.Objects;
/**
* 工具物料管理
* 工具台账管理
*/
@RestController
@RequestMapping("/tool/material")
@ -124,6 +125,19 @@ public class ToolMaterialController extends BaseController {
.writeTo(response.getOutputStream());
}
/**
* 导出选中
*/
@GetMapping("exportSelect")
public void exportSelect(HttpServletResponse response, @Valid @RequestBody @NotEmpty List<String> ids) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工具物料信息.xlsx", StandardCharsets.UTF_8));
List<ToolMaterialAddQO> datas = Convert.toList(ToolMaterialAddQO.class, toolMaterialService.listByIds(ids));
new Workbook()
.addSheet(new ListSheet<>(datas))
.writeTo(response.getOutputStream());
}
/**
* 导入
* @param file 文件
@ -183,6 +197,15 @@ public class ToolMaterialController extends BaseController {
return false;
}
/**
* 获取检验记录列表
* @param request 请求参数
*/
@PostMapping("getCheckList")
public ApiResult<PageData<WmsToolMaterialCheck>> getCheckList(GongZhuangTaiZhangCheckListQO request) {
return ApiResult.success(toolMaterialCheckService.search(request));
}
/**
* 添加检验记录
* @param request 请求参数
@ -195,6 +218,26 @@ public class ToolMaterialController extends BaseController {
return ApiResult.success();
}
/**
* 修改检验记录
* @param request 请求参数
*/
@PostMapping("updateCheck")
public ApiResult<Void> updateCheck(@Valid @RequestBody ToolMaterialCheckUpdateQO request) {
toolMaterialCheckService.update(request);
return ApiResult.success();
}
/**
* 删除检验记录
* @param ids 要删除的记录Id列表
*/
@PostMapping("deleteCheck")
public ApiResult<Void> deleteCheck(@Valid @RequestBody @NotEmpty List<Long> ids) {
toolMaterialCheckService.removeBatchByIds(ids);
return ApiResult.success();
}
/**
* 导出检验模版
*/
@ -209,6 +252,19 @@ public class ToolMaterialController extends BaseController {
.writeTo(response.getOutputStream());
}
/**
* 导出选中检验记录
*/
@GetMapping("exportCheckSelect")
public void exportCheckSelect(HttpServletResponse response, @Valid @RequestBody @NotEmpty List<String> ids) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工具检验明细.xlsx", StandardCharsets.UTF_8));
List<ToolMaterialCheckAddQO> datas = Convert.toList(ToolMaterialCheckAddQO.class, toolMaterialCheckService.listByIds(ids));
new Workbook()
.addSheet(new ListSheet<>(datas))
.writeTo(response.getOutputStream());
}
/**
* 导入检验记录
* @param file 文件
@ -266,6 +322,15 @@ public class ToolMaterialController extends BaseController {
return false;
}
/**
* 获取维修记录列表
* @param request 请求参数
*/
@PostMapping("getMaintainList")
public ApiResult<PageData<WmsToolMaterialMaintain>> getMaintainList(GongZhuangTaiZhangCheckListQO request) {
return ApiResult.success(toolMaterialMaintainService.search(request));
}
/**
* 添加维修记录
* @param request 请求参数
@ -278,6 +343,26 @@ public class ToolMaterialController extends BaseController {
return ApiResult.success();
}
/**
* 修改维修记录
* @param request 请求参数
*/
@PostMapping("updateMaintain")
public ApiResult<Void> updateMaintain(@Valid @RequestBody ToolMaterialMaintainUpdateQO request) {
toolMaterialMaintainService.update(request);
return ApiResult.success();
}
/**
* 删除维修记录
* @param ids 要删除的记录Id列表
*/
@PostMapping("deleteMaintain")
public ApiResult<Void> deleteMaintain(@Valid @RequestBody @NotEmpty List<Long> ids) {
toolMaterialMaintainService.removeBatchByIds(ids);
return ApiResult.success();
}
/**
* 导出维修模版
*/
@ -292,6 +377,19 @@ public class ToolMaterialController extends BaseController {
.writeTo(response.getOutputStream());
}
/**
* 导出选中维修记录
*/
@GetMapping("exportMaintainsSelect")
public void exportMaintainsSelect(HttpServletResponse response, @Valid @RequestBody @NotEmpty List<String> ids) throws Exception {
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("工具维修明细.xlsx", StandardCharsets.UTF_8));
List<ToolMaterialMaintainAddQO> datas = Convert.toList(ToolMaterialMaintainAddQO.class, toolMaterialMaintainService.listByIds(ids));
new Workbook()
.addSheet(new ListSheet<>(datas))
.writeTo(response.getOutputStream());
}
/**
* 导入维修记录
* @param file 文件

View File

@ -22,7 +22,7 @@ public class SAPCommonService {
public SAPSyncParamsDTO getMaterialInfoInOrder(String orderNo, String supplierNo, String materialNo) {
//获取订单信息
SAPMaterialInfoInOrderDTO materialInfoInOrder = sapService.zim004(orderNo, supplierNo, materialNo);
SAPMaterialInfoInOrderDTO materialInfoInOrder = CollectionUtil.get(sapService.zim004(orderNo, supplierNo, materialNo), 0);
VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo);
SAPSyncParamsDTO syncParams = new SAPSyncParamsDTO();

View File

@ -226,7 +226,7 @@ public class StructuralPackageControllerService {
sb.append("数量无效;");
}
else {
materialDTO.setNum(Integer.valueOf(dto.getNum()));
materialDTO.setNum(new BigDecimal(dto.getNum()));
}
if (StrUtil.isBlank(dto.getWeight())) {
sb.append("重量不能为空;");
@ -334,7 +334,7 @@ public class StructuralPackageControllerService {
}else if (!NumberUtils.isCreatable(num)){
sb.append(StrUtil.format("第{}行数量无效;", row.getRowNum()));
}else {
dto.setNum(Integer.valueOf(num));
dto.setNum(new BigDecimal(num));
}
num=row.getString(4);
if (StrUtil.isBlank(num)){
@ -353,7 +353,7 @@ public class StructuralPackageControllerService {
});
VUtil.trueThrowBusinessError(!sb.isEmpty()).throwMessage("数据校验失败:"+ sb);
packageInfo.setWeight(materials.stream()
.map(m -> m.getWeight().multiply(new BigDecimal(m.getNum())))
.map(m -> m.getWeight().multiply(m.getNum()))
.reduce(BigDecimal.ZERO, BigDecimal::add));
packageInfo.setMaterials(JSONUtil.toJsonStr(materials));
packageService.add(packageInfo);

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.nflg.wms.common.pojo.dto.MaterialQRCodeContentDTO;
import com.nflg.wms.common.pojo.dto.StructuralPackageMaterialQRCodeContentDTO;
import com.nflg.wms.common.util.DateTimeUtil;
import java.math.BigDecimal;
@ -77,6 +78,21 @@ public class NoUtil {
.setSerialNo(CollectionUtil.get(contents, 8));
}
/**
* 解析钢构件零件物料二维码内容
* @param qrCode 二维码内容
* @return 解析后的内容
*/
public static StructuralPackageMaterialQRCodeContentDTO getStructuralPackageMaterialQRCodeContent(String qrCode) {
List<String> contents = StrUtil.split(qrCode, "_");
List<String> c1s = StrUtil.split(CollectionUtil.get(contents, 0), "^");
return new StructuralPackageMaterialQRCodeContentDTO()
.setUniqNo(c1s.size() == 1 ? qrCode : CollectionUtil.get(c1s, 0))
.setMaterialNo(c1s.size() == 1 ? CollectionUtil.get(c1s, 0) : CollectionUtil.get(c1s, 1))
.setTrayNo(CollectionUtil.get(contents, 1))
.setNum(new BigDecimal(CollectionUtil.get(contents, 2)));
}
public static String getOutProduceTicketNo() {
return "OPT" + DateTimeUtil.format(LocalDateTime.now(), "yyyyMMdd") + RandomUtil.randomNumbers(4);
}

View File

@ -38,7 +38,7 @@ public class PackageMaterialDTO {
/**
* 数量
*/
private Integer num;
private BigDecimal num;
/**
* 重量

View File

@ -76,4 +76,9 @@ public class SAPOrderDTO {
* 供应商名称
*/
private String supplierName;
/**
* 单位
*/
private String unit;
}

View File

@ -0,0 +1,31 @@
package com.nflg.wms.common.pojo.dto;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
public class StructuralPackageMaterialQRCodeContentDTO {
/**
* 唯一编号
*/
private String uniqNo;
/**
* 物料编号
*/
private String materialNo;
/**
* 托盘编号
*/
private String trayNo;
/**
* 数量
*/
private BigDecimal num;
}

View File

@ -4,6 +4,8 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class GenerateTrayQO {
@ -17,5 +19,11 @@ public class GenerateTrayQO {
* 数量
*/
@NotNull
private Integer num;
private BigDecimal num;
/**
* 采购订单数量
*/
@NotNull
private BigDecimal orderNum;
}

View File

@ -44,12 +44,6 @@ public class GongZhuangTaiZhangAddQO {
@ExcelColumn("机型")
private String model;
/**
* 入库时间
*/
@ExcelColumn("入库时间")
private String inTime;
/**
* 检验周期
*/

View File

@ -15,6 +15,13 @@ public class GongZhuangTaiZhangCheckAddQO {
@ExcelColumn("*工装编号")
private String no;
/**
* 工装名称
*/
@NotBlank
@ExcelColumn("工装名称")
private String name;
/**
* 检验时间
*/

View File

@ -0,0 +1,12 @@
package com.nflg.wms.common.pojo.qo;
import lombok.Data;
@Data
public class GongZhuangTaiZhangCheckListQO extends PageQO {
/**
* 编号
*/
private String no;
}

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class GongZhuangTaiZhangCheckUpdateQO extends GongZhuangTaiZhangCheckAddQO {
@NotNull
private Long id;
}

View File

@ -9,4 +9,9 @@ public class GongZhuangTaiZhangSearchQO extends PageQO {
* 工装编号
*/
private String no;
/**
* 工装名称
*/
private String name;
}

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -41,7 +42,13 @@ public class PackageDeliverOrderSaveItemQO {
* 数量
*/
@NotNull
private Integer num;
private BigDecimal num;
/**
* 计划数量
*/
@NotNull
private BigDecimal planNum;
/**
* 总重
@ -59,4 +66,10 @@ public class PackageDeliverOrderSaveItemQO {
*/
@NotNull
private Long modelId;
/**
* 单位
*/
@NotBlank
private String unit;
}

View File

@ -14,6 +14,13 @@ public class ToolMaterialCheckAddQO {
@ExcelColumn("*物料号")
private String no;
/**
* 物料名称
*/
@NotBlank
@ExcelColumn("*物料名称")
private String name;
/**
* 检验时间
*/

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class ToolMaterialCheckUpdateQO extends ToolMaterialCheckAddQO {
@NotNull
private Long id;
}

View File

@ -1,5 +1,6 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.ttzero.excel.annotation.ExcelColumn;
@ -14,6 +15,13 @@ public class ToolMaterialMaintainAddQO {
@ExcelColumn("*物料号")
private String no;
/**
* 物料名称
*/
@NotBlank
@ExcelColumn("*物料名称")
private String name;
/**
* 维修时间
*/

View File

@ -0,0 +1,11 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class ToolMaterialMaintainUpdateQO extends ToolMaterialMaintainAddQO {
@NotNull
private Long id;
}

View File

@ -65,19 +65,19 @@ public class DeliverStructuralPackageOrderTrayItemVO implements Serializable {
* 计划数量
*/
@ExcelColumn(value = "计划数量",colIndex = 7)
private Integer planNum;
private BigDecimal planNum;
/**
* 出货数量
*/
@ExcelColumn(value = "出货数量",colIndex = 8)
private Integer shipmentNum;
private BigDecimal shipmentNum;
/**
* 入库数量
*/
@ExcelColumn(value = "入库数量",colIndex = 9)
private Integer storeNum;
private BigDecimal storeNum;
/**
* 状态

View File

@ -39,6 +39,11 @@ public class DeliverStructuralPackageOrderVO {
@ExcelColumn(value = "钢构包名称",colIndex = 5)
private String packageDesc;
/**
* 单位
*/
private String unit;
/**
* 钢构包种类
*/

View File

@ -39,17 +39,17 @@ public class TrayItemVO {
/**
* 计划数量
*/
private Integer planNum;
private BigDecimal planNum;
/**
* 出货数量
*/
private Integer shipmentNum;
private BigDecimal shipmentNum;
/**
* 入库数量
*/
private Integer storeNum;
private BigDecimal storeNum = BigDecimal.ZERO;
/**
* 图片

View File

@ -62,11 +62,6 @@ public class WmsGongzhuangTaizhang implements Serializable {
*/
private String model;
/**
* 入库时间
*/
private String inTime;
/**
* 检验周期
*/

View File

@ -42,6 +42,11 @@ public class WmsStructuralPackageOrder implements Serializable {
*/
private Long packageId;
/**
* 单位
*/
private String unit;
/**
* 期望交期
*/
@ -65,7 +70,12 @@ public class WmsStructuralPackageOrder implements Serializable {
/**
* 数量
*/
private Short num;
private BigDecimal num;
/**
* 计划数量
*/
private BigDecimal planNum;
/**
* 总重

View File

@ -7,7 +7,6 @@ import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@ -55,15 +54,15 @@ public class WmsStructuralPackageOrderTray implements Serializable {
*/
private Short state;
/**
* 总重
*/
private BigDecimal weight;
/**
* 数量
*/
private Integer num;
// /**
// * 总重
// */
// private BigDecimal weight;
//
// /**
// * 数量
// */
// private BigDecimal num;
/**
* 打包人

View File

@ -64,17 +64,17 @@ public class WmsStructuralPackageOrderTrayItem implements Serializable {
/**
* 计划数量
*/
private Integer planNum;
private BigDecimal planNum;
/**
* 出货数量
*/
private Integer shipmentNum;
private BigDecimal shipmentNum;
/**
* 入库数量
*/
private Integer storeNum;
private BigDecimal storeNum;
/**
* 图片

View File

@ -1,7 +1,10 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckAddQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckUpdateQO;
import com.nflg.wms.repository.entity.WmsGongzhuangTaizhangCheck;
import jakarta.validation.Valid;
@ -16,4 +19,8 @@ import jakarta.validation.Valid;
public interface IWmsGongzhuangTaizhangCheckService extends IService<WmsGongzhuangTaizhangCheck> {
void add(@Valid GongZhuangTaiZhangCheckAddQO request);
void update(@Valid GongZhuangTaiZhangCheckUpdateQO request);
IPage<WmsGongzhuangTaizhangCheck> search(GongZhuangTaiZhangCheckListQO request);
}

View File

@ -1,7 +1,10 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialCheckAddQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialCheckUpdateQO;
import com.nflg.wms.repository.entity.WmsToolMaterialCheck;
import jakarta.validation.Valid;
@ -16,4 +19,8 @@ import jakarta.validation.Valid;
public interface IWmsToolMaterialCheckService extends IService<WmsToolMaterialCheck> {
void add(@Valid ToolMaterialCheckAddQO request);
void update(@Valid ToolMaterialCheckUpdateQO request);
IPage<WmsToolMaterialCheck> search(GongZhuangTaiZhangCheckListQO request);
}

View File

@ -1,7 +1,10 @@
package com.nflg.wms.repository.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialMaintainAddQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialMaintainUpdateQO;
import com.nflg.wms.repository.entity.WmsToolMaterialMaintain;
import jakarta.validation.Valid;
@ -16,4 +19,8 @@ import jakarta.validation.Valid;
public interface IWmsToolMaterialMaintainService extends IService<WmsToolMaterialMaintain> {
void add(@Valid ToolMaterialMaintainAddQO request);
void update(@Valid ToolMaterialMaintainUpdateQO request);
IPage<WmsToolMaterialMaintain> search(GongZhuangTaiZhangCheckListQO request);
}

View File

@ -1,8 +1,12 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckAddQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckUpdateQO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsGongzhuangTaizhangCheck;
import com.nflg.wms.repository.mapper.WmsGongzhuangTaizhangCheckMapper;
@ -13,9 +17,8 @@ import java.time.LocalDateTime;
/**
* <p>
* 服务实现类
* 服务实现类
* </p>
*
* @author 代码生成器生成
* @since 2025
*/
@ -24,9 +27,23 @@ public class WmsGongzhuangTaizhangCheckServiceImpl extends ServiceImpl<WmsGongzh
@Override
public void add(GongZhuangTaiZhangCheckAddQO request) {
WmsGongzhuangTaizhangCheck info= Convert.convert(WmsGongzhuangTaizhangCheck.class, request);
WmsGongzhuangTaizhangCheck info = Convert.convert(WmsGongzhuangTaizhangCheck.class, request);
info.setCreateBy(UserUtil.getUserName());
info.setCreateTime(LocalDateTime.now());
save(info);
}
@Override
public void update(GongZhuangTaiZhangCheckUpdateQO request) {
WmsGongzhuangTaizhangCheck info = Convert.convert(WmsGongzhuangTaizhangCheck.class, request);
info.setCreateBy(null);
info.setCreateTime(null);
updateById(info);
}
@Override
public IPage<WmsGongzhuangTaizhangCheck> search(GongZhuangTaiZhangCheckListQO request) {
return lambdaQuery().eq(WmsGongzhuangTaizhangCheck::getNo, request.getNo())
.page(new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -67,6 +67,7 @@ public class WmsGongzhuangTaizhangServiceImpl extends ServiceImpl<WmsGongzhuangT
public IPage<WmsGongzhuangTaizhang> search(GongZhuangTaiZhangSearchQO request) {
return lambdaQuery()
.like(StrUtil.isNotBlank(request.getNo()), WmsGongzhuangTaizhang::getNo, request.getNo())
.like(StrUtil.isNotBlank(request.getName()), WmsGongzhuangTaizhang::getName, request.getName())
.page(new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -1,8 +1,12 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialCheckAddQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialCheckUpdateQO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsToolMaterialCheck;
import com.nflg.wms.repository.mapper.WmsToolMaterialCheckMapper;
@ -29,4 +33,19 @@ public class WmsToolMaterialCheckServiceImpl extends ServiceImpl<WmsToolMaterial
info.setCreateTime(LocalDateTime.now());
save(info);
}
@Override
public void update(ToolMaterialCheckUpdateQO request) {
WmsToolMaterialCheck info = Convert.convert(WmsToolMaterialCheck.class, request);
info.setNo(null);
info.setCreateBy(null);
info.setCreateTime(null);
updateById(info);
}
@Override
public IPage<WmsToolMaterialCheck> search(GongZhuangTaiZhangCheckListQO request) {
return lambdaQuery().eq(WmsToolMaterialCheck::getNo, request.getNo())
.page(new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -1,8 +1,12 @@
package com.nflg.wms.repository.service.impl;
import cn.hutool.core.convert.Convert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nflg.wms.common.pojo.qo.GongZhuangTaiZhangCheckListQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialMaintainAddQO;
import com.nflg.wms.common.pojo.qo.ToolMaterialMaintainUpdateQO;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.repository.entity.WmsToolMaterialMaintain;
import com.nflg.wms.repository.mapper.WmsToolMaterialMaintainMapper;
@ -29,4 +33,19 @@ public class WmsToolMaterialMaintainServiceImpl extends ServiceImpl<WmsToolMater
info.setCreateTime(LocalDateTime.now());
save(info);
}
@Override
public void update(ToolMaterialMaintainUpdateQO request) {
WmsToolMaterialMaintain info = Convert.convert(WmsToolMaterialMaintain.class, request);
info.setNo(null);
info.setCreateBy(null);
info.setCreateTime(null);
updateById(info);
}
@Override
public IPage<WmsToolMaterialMaintain> search(GongZhuangTaiZhangCheckListQO request) {
return lambdaQuery().eq(WmsToolMaterialMaintain::getNo, request.getNo())
.page(new Page<>(request.getPage(), request.getPageSize()));
}
}

View File

@ -161,8 +161,8 @@ public class SRMController extends BaseController {
.setUnit(request.getUnit())
.setUnqualifiedQty(request.getUnqualifiedQty())
.setQualifiedQty(request.getQualifiedQty())
.setSerialNumber(String.valueOf(request.getSerialNum()))
.setSerialNumber(String.valueOf(request.getSerialNum()))
// .setSerialNumber(String.valueOf(request.getSerialNum()))
// .setSerialNumber(String.valueOf(request.getSerialNum()))
.setLineNumber(String.valueOf(request.getLineNumber()))
.setNoteNum(request.getNoteNum())
.setInspectionOrder(request.receiveNum)