This commit is contained in:
zc
2026-04-16 00:42:25 +08:00
parent eda31fcffd
commit f88d4d8fe7
19 changed files with 177 additions and 45 deletions

View File

@@ -72,4 +72,9 @@ public class MaterialInfoDO extends BaseDO {
*/
private String batch;
/**
* 标记
*/
private String mark;
}

View File

@@ -36,4 +36,18 @@ public class MaterialInfoQuery implements Serializable {
@Schema(description = "物料编码")
@Query(type = QueryType.EQ)
private String encoding;
/**
* 批次
*/
@Schema(description = "批次")
@Query(type = QueryType.EQ)
private String batch;
/**
* 标记
*/
@Schema(description = "标记")
@Query(type = QueryType.EQ)
private String mark;
}

View File

@@ -30,4 +30,12 @@ public class BatchImportRowReq implements Serializable {
@Length(max = 255, message = "批次长度不能超过 {max} 个字符")
private String batch;
/**
* 标记
*/
@Schema(description = "标记")
@NotBlank(message = "标记不能为空")
@Length(max = 25, message = "标记长度不能超过 {max} 个字符")
private String mark;
}

View File

@@ -92,4 +92,10 @@ public class MaterialInfoReq implements Serializable {
@Schema(description = "批次")
private String batch;
/**
* 标记
*/
@Schema(description = "标记")
private String mark;
}

View File

@@ -113,4 +113,11 @@ public class MaterialInfoResp extends BaseDetailResp {
@ExcelProperty(value = "批次", order = 7)
private String batch;
/**
* 标记
*/
@Schema(description = "标记")
@ExcelProperty(value = "标记", order = 8)
private String mark;
}

View File

@@ -543,6 +543,7 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
MaterialInfoDO materialInfoDO = new MaterialInfoDO();
materialInfoDO.setEncoding(row.getEncoding());
materialInfoDO.setBatch(row.getBatch());
materialInfoDO.setMark(row.getMark());
materialInfoDO.setUpdateUser(UserContextHolder.getUserId());
return materialInfoDO;
}).toList();

View File

@@ -52,4 +52,14 @@ public class WorkOrderDO extends BaseDO {
*/
private Integer totalCount;
/**
* 批次
*/
private String batch;
/**
* 标记号
*/
private String mark;
}

View File

@@ -56,4 +56,20 @@ public class WorkOrderInfoDO extends BaseDO {
* 计算重量
*/
private BigDecimal calculatedWeight;
/**
* 批次
*/
private String batch;
/**
* 标记号
*/
private String mark;
/**
* 称重数量
*/
private Integer weightQuantity;
}

View File

@@ -3,6 +3,7 @@ package top.wms.admin.weighManage.model.query;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serial;
import java.io.Serializable;
@@ -56,11 +57,19 @@ public class WorkOrderQuery implements Serializable {
* 创建开始时间
*/
@Schema(description = "创建开始时间")
private Date startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime startDate;
/**
* 创建结束时间
*/
@Schema(description = "创建结束时间")
private Date endTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endDate;
/**
* 批次
*/
private String batch;
}

View File

@@ -65,4 +65,9 @@ public class WorkOrderInfoReq implements Serializable {
@Schema(description = "抓拍的图片")
private String imgUrl;
/**
* 称重数量
*/
private Integer weightQuantity;
}

View File

@@ -52,4 +52,14 @@ public class WorkOrderReq implements Serializable {
*/
private String calculatedWeight;
/**
* 批次
*/
private String batch;
/**
* 标记号
*/
private String mark;
}

View File

@@ -69,4 +69,20 @@ public class WorkOrderInfoResp {
@Schema(description = "抓拍的图片")
private String imgUrl;
/**
* 批次
*/
@Schema(description = "批次")
private String batch;
/**
* 标记号
*/
private String mark;
/**
* 称重数量
*/
private Integer weightQuantity;
}

View File

@@ -108,4 +108,8 @@ public class WorkOrderResp extends BaseDetailResp {
@Schema(description = "批次")
private String batch;
/**
* 标记号
*/
private String mark;
}

View File

@@ -20,7 +20,6 @@ import top.wms.admin.material.mapper.MaterialInfoMapper;
import top.wms.admin.material.model.entity.MaterialInfoDO;
import top.wms.admin.materialType.mapper.MaterialTypeMapper;
import top.wms.admin.materialType.model.entity.MaterialTypeDO;
import top.wms.admin.system.service.ConfigService;
import top.wms.admin.weighManage.mapper.WorkOrderInfoMapper;
import top.wms.admin.weighManage.mapper.WorkOrderMapper;
import top.wms.admin.weighManage.model.entity.WorkOrderDO;
@@ -55,13 +54,17 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
private final MaterialTypeMapper materialTypeMapper;
private final ConfigService configService;
@Override
public PageResp<WorkOrderResp> page(WorkOrderQuery query, PageQuery pageQuery) {
QueryWrapper<WorkOrderDO> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(query.getMaterialName()), "m.material_name", query.getMaterialName());
queryWrapper.eq(null != query.getOrderNo(), "w.order_no", query.getOrderNo());
queryWrapper.eq(StrUtil.isNotBlank(query.getBatch()), "w.batch", query.getBatch());
queryWrapper.eq(StrUtil.isNotBlank(query.getUserName()), "u.username", query.getUserName());
queryWrapper.eq(StrUtil.isNotBlank(query.getCarNo()), "u.card_no", query.getCarNo());
queryWrapper.eq(StrUtil.isNotBlank(query.getEncoding()), "m.encoding", query.getEncoding());
queryWrapper.ge(null != query.getStartDate(), "w.create_time", query.getStartDate());
queryWrapper.le(null != query.getEndDate(), "w.create_time", query.getEndDate());
this.sort(queryWrapper, pageQuery);
IPage<WorkOrderResp> page = baseMapper.selectWorkOrderPage(new Page<>(pageQuery.getPage(), pageQuery
@@ -78,9 +81,12 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
MaterialInfoDO materialInfoDO = materialInfoMapper.selectById(workOrderDO.getMaterialId());
workOrderResp.setMaterialName(materialInfoDO.getMaterialName());
workOrderResp.setEncoding(materialInfoDO.getEncoding());
workOrderResp.setBatch(materialInfoDO.getBatch());
}
List<WorkOrderInfoDO> infos = workOrderInfoMapper.selectList(new QueryWrapper<WorkOrderInfoDO>()
.eq("work_order_id", id));
if (CollUtil.isNotEmpty(infos)) {
workOrderResp.setWorkOrderInfos(BeanUtil.copyToList(infos, WorkOrderInfoResp.class));
}
return workOrderResp;
}
@@ -118,6 +124,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
.getUsername() + "-" + materialInfoDO.getMaterialName();
workOrder.setTitle(title);
workOrder.setMaterialId(req.getMaterialId());
workOrder.setBatch(materialInfoDO.getBatch());
workOrder.setMark(materialInfoDO.getMark());
workOrder.setTotalWeight(totalWeight);
workOrder.setTotalCount(totalCount);
workOrder.setTotalCalculatedWeight(materialInfoDO.getUnitWeight().multiply(BigDecimal.valueOf(totalCount)));
@@ -125,7 +133,11 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
//新增工单详情列表信息
List<WorkOrderInfoDO> workOrderInfoDOList = BeanUtil.copyToList(req.getWorkOrderInfos(), WorkOrderInfoDO.class);
workOrderInfoDOList.forEach(workOrderInfoDO -> workOrderInfoDO.setWorkOrderId(workOrder.getId()));
workOrderInfoDOList.forEach(workOrderInfoDO -> {
workOrderInfoDO.setWorkOrderId(workOrder.getId());
workOrderInfoDO.setBatch(materialInfoDO.getBatch());
workOrderInfoDO.setMark(materialInfoDO.getMark());
});
workOrderInfoMapper.insertBatch(workOrderInfoDOList);
return BeanUtil.copyProperties(workOrder, WorkOrderResp.class);
@@ -162,7 +174,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (ratio.compareTo(upFloatRatio) > 0) {
log.info("比值超过 {}%", upFloatRatio);
map.put("code", "502");
map.put("msg", "数量不足");
map.put("msg", "数量过多,请减少");
return map;
}
@@ -170,7 +182,7 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
if (ratio.compareTo(downFloatRatio) < 0) {
log.info("比值超过下限 {}%", downFloatRatio);
map.put("code", "501");
map.put("msg", "数量过多");
map.put("msg", "数量不足,请添加");
return map;
}

View File

@@ -78,7 +78,7 @@
</update>
<update id="updateBatchNull">
UPDATE sys_material_info SET batch = null
UPDATE sys_material_info SET batch = null, mark = null
</update>
<update id="updateBatchByCode">
@@ -93,6 +93,14 @@
</foreach>
ELSE batch
END,
mark = CASE
<foreach collection="list" item="item" separator="">
<if test="item.mark != null and item.mark != ''">
WHEN encoding = #{item.encoding} THEN #{item.mark}
</if>
</foreach>
ELSE mark
END,
update_user = CASE
<foreach collection="list" item="item" separator="">
<if test="item.updateUser != null">

View File

@@ -50,7 +50,7 @@ public class MaterialTypeController extends BaseController<MaterialTypeService,
@Log(ignore = true)
@Operation(summary = "下载导入模板", description = "下载导入模板")
@SaCheckPermission("admin:materialType:import")
@SaCheckPermission("materialType:materialType:import")
@GetMapping(value = "/importTemplate", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void downloadImportTemplate(HttpServletResponse response) throws IOException {
baseService.downloadImportTemplate(response);
@@ -58,7 +58,7 @@ public class MaterialTypeController extends BaseController<MaterialTypeService,
@Log(ignore = true)
@Operation(summary = "解析导入数据", description = "解析导入数据")
@SaCheckPermission("admin:materialType:import")
@SaCheckPermission("materialType:materialType:import")
@PostMapping("/parseImport")
public MaterialTypeImportParseResp parseImport(@NotNull(message = "文件不能为空") MultipartFile file) {
ValidationUtils.throwIf(file::isEmpty, "文件不能为空");
@@ -66,7 +66,7 @@ public class MaterialTypeController extends BaseController<MaterialTypeService,
}
@Operation(summary = "导入数据", description = "导入数据")
@SaCheckPermission("admin:materialType:import")
@SaCheckPermission("materialType:materialType:import")
@PostMapping(value = "/import")
public MaterialTypeImportResp importMaterial(@Validated @RequestBody MaterialTypeImportReq req) {
return baseService.importMaterial(req);

View File

@@ -76,7 +76,7 @@ public class VmCommandController {
} catch (NumberFormatException e) {
throw new BusinessException("相机识别异常");
}
response = "success";
} else if (StrUtil.equals(response, materialCode)) {
response = "success";
} else {

View File

@@ -28,9 +28,9 @@ import java.util.regex.Pattern;
public class AHDZCConnect {
//老设备只能跑jar包的
// private static final String PORT_NAME = "COM12";
private static final String PORT_NAME = "COM12";
//新设备(环境齐全的)
private static final String PORT_NAME = "COM13";
// private static final String PORT_NAME = "COM13";
private static final int BAUD_RATE = 9600;
private static final int DATA_BITS = 8;
private static final int STOP_BITS = 1;
@@ -55,9 +55,9 @@ public class AHDZCConnect {
private ScheduledExecutorService executorService;
// todo 模拟数据生成
// private ScheduledFuture<?> mockDataTask;
// private final AtomicBoolean isMockDataRunning = new AtomicBoolean(false);
// private final Random random = new Random();
// private ScheduledFuture<?> mockDataTask;
// private final AtomicBoolean isMockDataRunning = new AtomicBoolean(false);
// private final Random random = new Random();
/**
* 初始化并启动电子秤服务
@@ -76,8 +76,8 @@ public class AHDZCConnect {
start();
// todo 模拟数据生成
// isMockDataRunning.set(true);
// startMockData();
// isMockDataRunning.set(true);
// startMockData();
return R.ok();
}
@@ -227,6 +227,7 @@ public class AHDZCConnect {
// 解析数据,提取数字和重量单位
String weightStr = data.trim();
log.info("电子称原始数据: {}", weightStr);
// 使用正则表达式提取数字(包括小数点)
Pattern pattern = Pattern.compile("[-+]?\\d*\\.?\\d+");
Matcher matcher = pattern.matcher(weightStr);
@@ -339,7 +340,7 @@ public class AHDZCConnect {
log.info("========================================");
// todo 模拟数据生成
// stopMockData();
// stopMockData();
try {
if (executorService != null && !executorService.isShutdown()) {
@@ -361,32 +362,32 @@ public class AHDZCConnect {
}
// todo 模拟数据生成
// private void startMockData() {
// if (executorService == null || executorService.isShutdown()) {
// log.warn("[模拟数据] 线程池未初始化或已关闭");
// return;
// }
//
// mockDataTask = executorService.scheduleAtFixedRate(() -> {
// if (!isMockDataRunning.get()) {
// private void startMockData() {
// if (executorService == null || executorService.isShutdown()) {
// log.warn("[模拟数据] 线程池未初始化或已关闭");
// return;
// }
//
// try {
// ScaleWebSocketHandler.sendMessage(String.valueOf(random.nextInt(100) + 1));
// log.debug("[模拟数据] 发送重量数据: 37.8");
// } catch (Exception e) {
// log.error("[模拟数据] 发送异常: {}", e.getMessage());
// }
// }, 0, 1, TimeUnit.SECONDS);
// }
// mockDataTask = executorService.scheduleAtFixedRate(() -> {
// if (!isMockDataRunning.get()) {
// return;
// }
//
// private void stopMockData() {
// if (mockDataTask != null && !mockDataTask.isCancelled()) {
// mockDataTask.cancel(false);
// mockDataTask = null;
// try {
// ScaleWebSocketHandler.sendMessage(String.valueOf(random.nextInt(100) + 1));
// log.debug("[模拟数据] 发送重量数据: 37.8");
// } catch (Exception e) {
// log.error("[模拟数据] 发送异常: {}", e.getMessage());
// }
// }, 0, 3, TimeUnit.SECONDS);
// }
//
// private void stopMockData() {
// if (mockDataTask != null && !mockDataTask.isCancelled()) {
// mockDataTask.cancel(false);
// mockDataTask = null;
// }
// isMockDataRunning.set(false);
// }
// isMockDataRunning.set(false);
// }
}