优化
This commit is contained in:
@@ -72,4 +72,9 @@ public class MaterialInfoDO extends BaseDO {
|
||||
*/
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记
|
||||
*/
|
||||
private String mark;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -92,4 +92,10 @@ public class MaterialInfoReq implements Serializable {
|
||||
@Schema(description = "批次")
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记
|
||||
*/
|
||||
@Schema(description = "标记")
|
||||
private String mark;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -52,4 +52,14 @@ public class WorkOrderDO extends BaseDO {
|
||||
*/
|
||||
private Integer totalCount;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
*/
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记号
|
||||
*/
|
||||
private String mark;
|
||||
|
||||
}
|
||||
@@ -56,4 +56,20 @@ public class WorkOrderInfoDO extends BaseDO {
|
||||
* 计算重量
|
||||
*/
|
||||
private BigDecimal calculatedWeight;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
*/
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记号
|
||||
*/
|
||||
private String mark;
|
||||
|
||||
/**
|
||||
* 称重数量
|
||||
*/
|
||||
private Integer weightQuantity;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -65,4 +65,9 @@ public class WorkOrderInfoReq implements Serializable {
|
||||
@Schema(description = "抓拍的图片")
|
||||
private String imgUrl;
|
||||
|
||||
/**
|
||||
* 称重数量
|
||||
*/
|
||||
private Integer weightQuantity;
|
||||
|
||||
}
|
||||
@@ -52,4 +52,14 @@ public class WorkOrderReq implements Serializable {
|
||||
*/
|
||||
private String calculatedWeight;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
*/
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记号
|
||||
*/
|
||||
private String mark;
|
||||
|
||||
}
|
||||
@@ -69,4 +69,20 @@ public class WorkOrderInfoResp {
|
||||
@Schema(description = "抓拍的图片")
|
||||
private String imgUrl;
|
||||
|
||||
/**
|
||||
* 批次
|
||||
*/
|
||||
@Schema(description = "批次")
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记号
|
||||
*/
|
||||
private String mark;
|
||||
|
||||
/**
|
||||
* 称重数量
|
||||
*/
|
||||
private Integer weightQuantity;
|
||||
|
||||
}
|
||||
|
||||
@@ -108,4 +108,8 @@ public class WorkOrderResp extends BaseDetailResp {
|
||||
@Schema(description = "批次")
|
||||
private String batch;
|
||||
|
||||
/**
|
||||
* 标记号
|
||||
*/
|
||||
private String mark;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -76,7 +76,7 @@ public class VmCommandController {
|
||||
} catch (NumberFormatException e) {
|
||||
throw new BusinessException("相机识别异常");
|
||||
}
|
||||
|
||||
response = "success";
|
||||
} else if (StrUtil.equals(response, materialCode)) {
|
||||
response = "success";
|
||||
} else {
|
||||
|
||||
@@ -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);
|
||||
// }
|
||||
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user