feat: add warehouse location label data

besure_bit
ck-chenkang 3 weeks ago
parent fd654978e0
commit 14b8df60f6

@ -15,6 +15,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
@ -40,6 +42,9 @@ public class WarehouseLocationController {
@Resource
private WarehouseLocationService warehouseLocationService;
@Resource
private QrcodeRecordService qrcodeRecordService;
@PostMapping("/create")
@Operation(summary = "创建ERP 库位信息")
@PreAuthorize("@ss.hasPermission('erp:warehouse-location:create')")
@ -73,6 +78,19 @@ public class WarehouseLocationController {
return success(BeanUtils.toBean(warehouseLocation, WarehouseLocationRespVO.class));
}
@GetMapping("/print-data")
@Operation(summary = "获得库位打印数据")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('erp:bit-wms-location:print')")
public CommonResult<WarehouseLocationRespVO> getPrintData(@RequestParam("id") Long id) {
WarehouseLocationDO warehouseLocation = warehouseLocationService.getWarehouseLocation(id);
WarehouseLocationRespVO respVO = BeanUtils.toBean(warehouseLocation, WarehouseLocationRespVO.class);
String qrcodeUrl = qrcodeRecordService.selectQrcodeUrlByIdAndCode(
QrcodeBizTypeEnum.WAREHOUSE_LOCATION.getCode(), id, warehouseLocation.getCode());
respVO.setQrcodeUrl(qrcodeUrl);
return success(respVO);
}
@GetMapping("/page")
@Operation(summary = "获得ERP 库位信息分页")
@PreAuthorize("@ss.hasPermission('erp:warehouse-location:query')")

@ -65,8 +65,11 @@ public class WarehouseLocationRespVO {
@ExcelProperty("开启状态")
private Integer status;
@Schema(description = "二维码地址")
private String qrcodeUrl;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}
}

@ -0,0 +1,35 @@
package cn.iocoder.yudao.module.erp.handler;
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.handler.QrcodeBizHandler;
import cn.iocoder.yudao.module.erp.dal.mysql.warehouselocation.WarehouseLocationMapper;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class WarehouseLocationQrcodeBizHandler implements QrcodeBizHandler {
@Resource
private WarehouseLocationMapper warehouseLocationMapper;
@Override
public String getBizType() {
return QrcodeBizTypeEnum.WAREHOUSE_LOCATION.getCode();
}
@Override
public boolean exists(Long id) {
return warehouseLocationMapper.selectById(id) != null;
}
@Override
public String buildDeepLink(Long id) {
return "besure://warehouse-location/detail?id=" + id;
}
@Override
public String buildH5Path(Long id) {
return "/pages_function/pages/bitWms/stock?locationId=" + id;
}
}

@ -2,6 +2,9 @@ package cn.iocoder.yudao.module.erp.service.warehouselocation;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.common.enums.CodeTypeEnum;
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.erp.controller.admin.warehouselocation.vo.WarehouseLocationPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.warehouselocation.vo.WarehouseLocationSaveReqVO;
@ -14,6 +17,7 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@ -26,6 +30,8 @@ import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.WAREHOUSE_LOC
@Validated
public class WarehouseLocationServiceImpl implements WarehouseLocationService {
private static final String BIT_WAREHOUSE_LOCATION_CODE_RULE = "BIT_WAREHOUSE_LOCATION_CODE";
@Resource
private WarehouseLocationMapper warehouseLocationMapper;
@ -35,6 +41,9 @@ public class WarehouseLocationServiceImpl implements WarehouseLocationService {
@Resource
private AutoCodeUtil autoCodeUtil;
@Resource
private QrcodeRecordService qrcodeRecordService;
@Override
public Long createWarehouseLocation(WarehouseLocationSaveReqVO createReqVO) {
validateWarehouseAreaMatch(createReqVO.getWarehouseId(), createReqVO.getAreaId());
@ -45,6 +54,7 @@ public class WarehouseLocationServiceImpl implements WarehouseLocationService {
throw exception(WAREHOUSE_LOCATION_CODE_EXISTS);
}
warehouseLocationMapper.insert(warehouseLocation);
generateWarehouseLocationQrcode(warehouseLocation.getId(), warehouseLocation.getCode());
return warehouseLocation.getId();
}
@ -52,7 +62,9 @@ public class WarehouseLocationServiceImpl implements WarehouseLocationService {
public void updateWarehouseLocation(WarehouseLocationSaveReqVO updateReqVO) {
validateWarehouseLocationExists(updateReqVO.getId());
validateWarehouseAreaMatch(updateReqVO.getWarehouseId(), updateReqVO.getAreaId());
warehouseLocationMapper.updateById(BeanUtils.toBean(updateReqVO, WarehouseLocationDO.class));
WarehouseLocationDO updateObj = BeanUtils.toBean(updateReqVO, WarehouseLocationDO.class);
warehouseLocationMapper.updateById(updateObj);
generateWarehouseLocationQrcode(updateObj.getId(), updateObj.getCode());
}
@Override
@ -92,4 +104,24 @@ public class WarehouseLocationServiceImpl implements WarehouseLocationService {
return warehouseLocationMapper.selectPage(pageReqVO);
}
private void generateWarehouseLocationQrcode(Long id, String code) {
if (StringUtils.isBlank(code)) {
return;
}
CodeTypeEnum codeType = autoCodeUtil.queryCodeType(BIT_WAREHOUSE_LOCATION_CODE_RULE);
if (codeType == null) {
return;
}
try {
qrcodeRecordService.generateOrRefresh(
QrcodeBizTypeEnum.WAREHOUSE_LOCATION,
id,
code,
"DETAIL",
codeType);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}

@ -0,0 +1,74 @@
package cn.iocoder.yudao.module.erp.service.warehouselocation;
import cn.iocoder.yudao.module.common.enums.CodeTypeEnum;
import cn.iocoder.yudao.module.common.enums.QrcodeBizTypeEnum;
import cn.iocoder.yudao.module.common.service.qrcordrecord.QrcodeRecordService;
import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil;
import cn.iocoder.yudao.module.erp.controller.admin.warehouselocation.vo.WarehouseLocationSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.warehousearea.WarehouseAreaDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.warehouselocation.WarehouseLocationDO;
import cn.iocoder.yudao.module.erp.dal.mysql.warehousearea.WarehouseAreaMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.warehouselocation.WarehouseLocationMapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* {@link WarehouseLocationServiceImpl}
*/
@ExtendWith(MockitoExtension.class)
class WarehouseLocationServiceImplTest {
@InjectMocks
private WarehouseLocationServiceImpl warehouseLocationService;
@Mock
private WarehouseLocationMapper warehouseLocationMapper;
@Mock
private WarehouseAreaMapper warehouseAreaMapper;
@Mock
private AutoCodeUtil autoCodeUtil;
@Mock
private QrcodeRecordService qrcodeRecordService;
@Test
void createWarehouseLocation_generatesQrcodeRecord() throws Exception {
WarehouseLocationSaveReqVO reqVO = new WarehouseLocationSaveReqVO();
reqVO.setCode("A1");
reqVO.setName("A1");
reqVO.setWarehouseId(1L);
reqVO.setAreaId(1L);
reqVO.setAllowProductMix(false);
reqVO.setAllowBatchMix(false);
reqVO.setStatus(0);
WarehouseAreaDO area = new WarehouseAreaDO();
area.setId(1L);
area.setWarehouseId(1L);
when(warehouseAreaMapper.selectById(1L)).thenReturn(area);
when(autoCodeUtil.queryCodeType("BIT_WAREHOUSE_LOCATION_CODE")).thenReturn(CodeTypeEnum.QR);
when(warehouseLocationMapper.insert(any(WarehouseLocationDO.class))).thenAnswer(invocation -> {
WarehouseLocationDO location = invocation.getArgument(0);
location.setId(100L);
return 1;
});
Long id = warehouseLocationService.createWarehouseLocation(reqVO);
assertEquals(100L, id);
verify(qrcodeRecordService).generateOrRefresh(
eq(QrcodeBizTypeEnum.WAREHOUSE_LOCATION),
eq(100L),
eq("A1"),
eq("DETAIL"),
eq(CodeTypeEnum.QR));
}
}
Loading…
Cancel
Save