Compare commits

..

3 Commits

Author SHA1 Message Date
e4d6de61ae Merge branch 'refs/heads/master' into master_lz 2026-03-06 17:59:47 +08:00
73c1bc9d01 称重抓取 2026-03-06 17:58:55 +08:00
zc
ae9a607da1 代码优化 2026-03-06 15:55:06 +08:00
12 changed files with 110 additions and 25 deletions

View File

@@ -55,4 +55,10 @@ public interface MaterialInfoService extends BaseService<MaterialInfoResp, Mater
* 照片批量上传处理
* */
void uploadMaterialPhotos(MultipartFile file);
/*
* 称重时照片抓取
* */
String catchPhoto(MultipartFile file);
}

View File

@@ -413,4 +413,13 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
.forEach(code -> log.warn("物料编码 [{}] 不存在,照片更新失败", code));
}
@Override
public String catchPhoto(MultipartFile file){
String photoStoragePath = "catch" + DateUtil.today() + "/";
FileInfo fileInfo = fileService.upload(file, photoStoragePath, null, true, true);
CheckUtils.throwIfEmpty(fileInfo.getUrl(),"上传失败,请重新上传");
return fileInfo.getUrl();
}
}

View File

@@ -41,4 +41,10 @@ public class WorkOrderDO extends BaseDO {
* 总重量
*/
private BigDecimal totalWeight;
/**
* 总数量
*/
private Integer totalCount;
}

View File

@@ -6,7 +6,8 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import jakarta.validation.constraints.*;
/**
* 创建或修改任务工单信息参数
@@ -31,19 +32,20 @@ public class WorkOrderInfoReq implements Serializable {
* 物料主键id
*/
@Schema(description = "物料主键id")
@NotNull(message = "物料主键id不能为空")
private Long materialId;
/**
* 称重次数
*/
@Schema(description = "称重次数")
private int weightTime;
private Integer weightTime;
/**
* 物料数量
*/
@Schema(description = "物料数量")
private BigDecimal quantity;
private Integer quantity;
/**
* 称重重量

View File

@@ -8,8 +8,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
import java.io.Serial;
import java.io.Serializable;
import java.time.*;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -29,17 +27,21 @@ public class WorkOrderReq implements Serializable {
* 物料主键id
*/
@Schema(description = "物料主键id")
@NotNull(message = "物料主键id不能为空")
private Long materialId;
/**
* 创建人
* 物料名称
*/
@Schema(description = "创建人")
private List<WorkOrderInfoReq> workOrderInfos;
@Schema(description = "物料名称")
@NotBlank(message = "物料名称不能为空")
private String materialName;
/**
* 创建时间
* 称重列表
*/
@Schema(description = "创建时间")
private LocalDateTime createTime;
@Schema(description = "称重列表")
@NotEmpty(message = "称重列表不能为空")
private List<WorkOrderInfoReq> workOrderInfos;
}

View File

@@ -30,6 +30,12 @@ public class WorkOrderResp extends BaseDetailResp {
@Schema(description = "卡号")
private String cardNo;
/**
* 工单编号
*/
@Schema(description = "工单编号")
private String orderNo;
/**
* 标题
*/

View File

@@ -1,5 +1,10 @@
package top.wms.admin.weighManage.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,14 +16,20 @@ import org.springframework.stereotype.Service;
import top.continew.starter.extension.crud.model.query.PageQuery;
import top.continew.starter.extension.crud.model.resp.PageResp;
import top.continew.starter.extension.crud.service.BaseServiceImpl;
import top.wms.admin.common.context.UserContextHolder;
import top.wms.admin.weighManage.mapper.WorkOrderInfoMapper;
import top.wms.admin.weighManage.mapper.WorkOrderMapper;
import top.wms.admin.weighManage.model.entity.WorkOrderDO;
import top.wms.admin.weighManage.model.entity.WorkOrderInfoDO;
import top.wms.admin.weighManage.model.query.WorkOrderQuery;
import top.wms.admin.weighManage.model.req.WorkOrderInfoReq;
import top.wms.admin.weighManage.model.req.WorkOrderReq;
import top.wms.admin.weighManage.model.resp.WorkOrderInfoResp;
import top.wms.admin.weighManage.model.resp.WorkOrderResp;
import top.wms.admin.weighManage.service.WorkOrderService;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
@@ -31,6 +42,9 @@ import java.util.List;
@RequiredArgsConstructor
public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkOrderDO, WorkOrderResp, WorkOrderResp, WorkOrderQuery, WorkOrderReq> implements WorkOrderService {
private final WorkOrderInfoMapper workOrderInfoMapper;
@Override
public PageResp<WorkOrderResp> page(WorkOrderQuery query, PageQuery pageQuery) {
QueryWrapper<WorkOrderDO> queryWrapper = new QueryWrapper<>();
@@ -50,13 +64,44 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
return baseMapper.getDetail(id);
}
@Override
public WorkOrderResp addWorKerOrder(WorkOrderReq req) {
return null;
public void afterDelete(List<Long> ids) {
workOrderInfoMapper.delete(new QueryWrapper<WorkOrderInfoDO>().in("work_order_id", ids));
}
@Override
public WorkOrderResp addWorKerOrder(WorkOrderReq req) {
if (CollUtil.isEmpty(req.getWorkOrderInfos())) {
throw new IllegalArgumentException("称重列表不能为空");
}
BigDecimal totalWeight = new BigDecimal("0");
int totalCount = 0;
for (WorkOrderInfoReq workOrderInfoReq : req.getWorkOrderInfos()) {
totalWeight = workOrderInfoReq.getWeight().add(totalWeight);
totalCount += workOrderInfoReq.getQuantity();
}
WorkOrderDO workOrder = new WorkOrderDO();
workOrder.setOrderNo(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN) + System.currentTimeMillis());
String title = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN) + "-"
+ UserContextHolder.getUsername() + "-" + req.getMaterialName();
workOrder.setTitle(title);
workOrder.setMaterialId(req.getMaterialId());
workOrder.setTotalWeight(totalWeight);
workOrder.setTotalCount(totalCount);
baseMapper.insert(workOrder);
//新增工单详情列表信息
List<WorkOrderInfoDO> workOrderInfoDOList = BeanUtil.copyToList(req.getWorkOrderInfos(), WorkOrderInfoDO.class);
workOrderInfoDOList.forEach(workOrderInfoDO -> workOrderInfoDO.setWorkOrderId(workOrder.getId()));
workOrderInfoMapper.insertBatch(workOrderInfoDOList);
return BeanUtil.copyProperties(workOrder, WorkOrderResp.class);
}
}

View File

@@ -82,4 +82,10 @@ public class MaterialInfoController extends BaseController<MaterialInfoService,
baseService.uploadMaterialPhotos(zipFile);
return R.ok();
}
@Operation(summary = "照片抓取", description = "照片抓取")
@PostMapping("/import/catch")
public String catchPhoto(@RequestParam("file")MultipartFile file) {
CheckUtils.throwIfEmpty(file,"照片抓取失败,请重新抓取");
return baseService.catchPhoto(file);
}
}

View File

@@ -1,6 +1,7 @@
package top.wms.admin.controller.weighManage;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.validation.annotation.Validated;
import top.continew.starter.extension.crud.enums.Api;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -41,7 +42,7 @@ public class WorkOrderController extends BaseController<WorkOrderService, WorkOr
@SaCheckPermission("workOrder:record:add")
@PostMapping
public WorkOrderResp addWorKerOrder(@RequestBody WorkOrderReq req) {
public WorkOrderResp addWorKerOrder(@Validated @RequestBody WorkOrderReq req) {
return baseService.addWorKerOrder(req);
}

View File

@@ -52,9 +52,11 @@ public class AHDZCConnect {
@PostConstruct
public void init() {
// 项目启动时初始化并启动服务
if (false) {
ScaleService();
start();
}
}
@PreDestroy
public void destroy() {
@@ -191,8 +193,8 @@ public class AHDZCConnect {
// 解析数据,提取数字和重量单位
String weightStr = data.trim();
// 使用正则表达式提取数字和重量单位
Pattern pattern = java.util.regex.Pattern.compile("[-+]?\\d*\\.?\\d+\\s*[a-zA-Z]*");
// 使用正则表达式提取数字(包括小数点)
Pattern pattern = java.util.regex.Pattern.compile("[-+]?\\d*\\.?\\d+");
Matcher matcher = pattern.matcher(weightStr);
if (matcher.find()) {

View File

@@ -48,12 +48,12 @@ spring.data:
## Redis 配置(单机模式)
redis:
# 地址
host: ${REDIS_HOST:192.168.2.30}
# host: ${REDIS_HOST:127.0.0.1}
# host: ${REDIS_HOST:192.168.2.30}
host: ${REDIS_HOST:127.0.0.1}
# 端口(默认 6379
port: ${REDIS_PORT:6379}
# 密码(未设置密码时请注释掉)
password: ${REDIS_PWD:redis2025}
# password: ${REDIS_PWD:redis2025}
# 数据库索引
database: ${REDIS_DB:1}
# 连接超时时间