Compare commits
3 Commits
32f88b1443
...
e4d6de61ae
| Author | SHA1 | Date | |
|---|---|---|---|
| e4d6de61ae | |||
| 73c1bc9d01 | |||
|
|
ae9a607da1 |
@@ -55,4 +55,10 @@ public interface MaterialInfoService extends BaseService<MaterialInfoResp, Mater
|
|||||||
* 照片批量上传处理
|
* 照片批量上传处理
|
||||||
* */
|
* */
|
||||||
void uploadMaterialPhotos(MultipartFile file);
|
void uploadMaterialPhotos(MultipartFile file);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 称重时照片抓取
|
||||||
|
* */
|
||||||
|
String catchPhoto(MultipartFile file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -413,4 +413,13 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
|
|||||||
.forEach(code -> log.warn("物料编码 [{}] 不存在,照片更新失败", code));
|
.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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,4 +41,10 @@ public class WorkOrderDO extends BaseDO {
|
|||||||
* 总重量
|
* 总重量
|
||||||
*/
|
*/
|
||||||
private BigDecimal totalWeight;
|
private BigDecimal totalWeight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 总数量
|
||||||
|
*/
|
||||||
|
private Integer totalCount;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,8 @@ import lombok.Data;
|
|||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建或修改任务工单信息参数
|
* 创建或修改任务工单信息参数
|
||||||
@@ -31,19 +32,20 @@ public class WorkOrderInfoReq implements Serializable {
|
|||||||
* 物料主键id
|
* 物料主键id
|
||||||
*/
|
*/
|
||||||
@Schema(description = "物料主键id")
|
@Schema(description = "物料主键id")
|
||||||
|
@NotNull(message = "物料主键id不能为空")
|
||||||
private Long materialId;
|
private Long materialId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 称重次数
|
* 称重次数
|
||||||
*/
|
*/
|
||||||
@Schema(description = "称重次数")
|
@Schema(description = "称重次数")
|
||||||
private int weightTime;
|
private Integer weightTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物料数量
|
* 物料数量
|
||||||
*/
|
*/
|
||||||
@Schema(description = "物料数量")
|
@Schema(description = "物料数量")
|
||||||
private BigDecimal quantity;
|
private Integer quantity;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 称重重量
|
* 称重重量
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
|||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.time.*;
|
|
||||||
import java.math.BigDecimal;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,17 +27,21 @@ public class WorkOrderReq implements Serializable {
|
|||||||
* 物料主键id
|
* 物料主键id
|
||||||
*/
|
*/
|
||||||
@Schema(description = "物料主键id")
|
@Schema(description = "物料主键id")
|
||||||
|
@NotNull(message = "物料主键id不能为空")
|
||||||
private Long materialId;
|
private Long materialId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人
|
* 物料名称
|
||||||
*/
|
*/
|
||||||
@Schema(description = "创建人")
|
@Schema(description = "物料名称")
|
||||||
private List<WorkOrderInfoReq> workOrderInfos;
|
@NotBlank(message = "物料名称不能为空")
|
||||||
|
private String materialName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 称重列表
|
||||||
*/
|
*/
|
||||||
@Schema(description = "创建时间")
|
@Schema(description = "称重列表")
|
||||||
private LocalDateTime createTime;
|
@NotEmpty(message = "称重列表不能为空")
|
||||||
|
private List<WorkOrderInfoReq> workOrderInfos;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -30,6 +30,12 @@ public class WorkOrderResp extends BaseDetailResp {
|
|||||||
@Schema(description = "卡号")
|
@Schema(description = "卡号")
|
||||||
private String cardNo;
|
private String cardNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 工单编号
|
||||||
|
*/
|
||||||
|
@Schema(description = "工单编号")
|
||||||
|
private String orderNo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标题
|
* 标题
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package top.wms.admin.weighManage.service.impl;
|
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 cn.hutool.core.util.StrUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
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.query.PageQuery;
|
||||||
import top.continew.starter.extension.crud.model.resp.PageResp;
|
import top.continew.starter.extension.crud.model.resp.PageResp;
|
||||||
import top.continew.starter.extension.crud.service.BaseServiceImpl;
|
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.mapper.WorkOrderMapper;
|
||||||
import top.wms.admin.weighManage.model.entity.WorkOrderDO;
|
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.query.WorkOrderQuery;
|
||||||
|
import top.wms.admin.weighManage.model.req.WorkOrderInfoReq;
|
||||||
import top.wms.admin.weighManage.model.req.WorkOrderReq;
|
import top.wms.admin.weighManage.model.req.WorkOrderReq;
|
||||||
import top.wms.admin.weighManage.model.resp.WorkOrderInfoResp;
|
import top.wms.admin.weighManage.model.resp.WorkOrderInfoResp;
|
||||||
import top.wms.admin.weighManage.model.resp.WorkOrderResp;
|
import top.wms.admin.weighManage.model.resp.WorkOrderResp;
|
||||||
import top.wms.admin.weighManage.service.WorkOrderService;
|
import top.wms.admin.weighManage.service.WorkOrderService;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -31,6 +42,9 @@ import java.util.List;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkOrderDO, WorkOrderResp, WorkOrderResp, WorkOrderQuery, WorkOrderReq> implements WorkOrderService {
|
public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkOrderDO, WorkOrderResp, WorkOrderResp, WorkOrderQuery, WorkOrderReq> implements WorkOrderService {
|
||||||
|
|
||||||
|
private final WorkOrderInfoMapper workOrderInfoMapper;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResp<WorkOrderResp> page(WorkOrderQuery query, PageQuery pageQuery) {
|
public PageResp<WorkOrderResp> page(WorkOrderQuery query, PageQuery pageQuery) {
|
||||||
QueryWrapper<WorkOrderDO> queryWrapper = new QueryWrapper<>();
|
QueryWrapper<WorkOrderDO> queryWrapper = new QueryWrapper<>();
|
||||||
@@ -50,13 +64,44 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
|
|||||||
return baseMapper.getDetail(id);
|
return baseMapper.getDetail(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WorkOrderResp addWorKerOrder(WorkOrderReq req) {
|
public void afterDelete(List<Long> ids) {
|
||||||
|
workOrderInfoMapper.delete(new QueryWrapper<WorkOrderInfoDO>().in("work_order_id", ids));
|
||||||
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -82,4 +82,10 @@ public class MaterialInfoController extends BaseController<MaterialInfoService,
|
|||||||
baseService.uploadMaterialPhotos(zipFile);
|
baseService.uploadMaterialPhotos(zipFile);
|
||||||
return R.ok();
|
return R.ok();
|
||||||
}
|
}
|
||||||
|
@Operation(summary = "照片抓取", description = "照片抓取")
|
||||||
|
@PostMapping("/import/catch")
|
||||||
|
public String catchPhoto(@RequestParam("file")MultipartFile file) {
|
||||||
|
CheckUtils.throwIfEmpty(file,"照片抓取失败,请重新抓取");
|
||||||
|
return baseService.catchPhoto(file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package top.wms.admin.controller.weighManage;
|
package top.wms.admin.controller.weighManage;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
import top.continew.starter.extension.crud.enums.Api;
|
import top.continew.starter.extension.crud.enums.Api;
|
||||||
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@@ -41,7 +42,7 @@ public class WorkOrderController extends BaseController<WorkOrderService, WorkOr
|
|||||||
|
|
||||||
@SaCheckPermission("workOrder:record:add")
|
@SaCheckPermission("workOrder:record:add")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
public WorkOrderResp addWorKerOrder(@RequestBody WorkOrderReq req) {
|
public WorkOrderResp addWorKerOrder(@Validated @RequestBody WorkOrderReq req) {
|
||||||
return baseService.addWorKerOrder(req);
|
return baseService.addWorKerOrder(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,9 +52,11 @@ public class AHDZCConnect {
|
|||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
// 项目启动时初始化并启动服务
|
// 项目启动时初始化并启动服务
|
||||||
|
if (false) {
|
||||||
ScaleService();
|
ScaleService();
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@PreDestroy
|
@PreDestroy
|
||||||
public void destroy() {
|
public void destroy() {
|
||||||
@@ -191,8 +193,8 @@ public class AHDZCConnect {
|
|||||||
|
|
||||||
// 解析数据,提取数字和重量单位
|
// 解析数据,提取数字和重量单位
|
||||||
String weightStr = data.trim();
|
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);
|
Matcher matcher = pattern.matcher(weightStr);
|
||||||
|
|
||||||
if (matcher.find()) {
|
if (matcher.find()) {
|
||||||
|
|||||||
@@ -48,12 +48,12 @@ spring.data:
|
|||||||
## Redis 配置(单机模式)
|
## Redis 配置(单机模式)
|
||||||
redis:
|
redis:
|
||||||
# 地址
|
# 地址
|
||||||
host: ${REDIS_HOST:192.168.2.30}
|
# host: ${REDIS_HOST:192.168.2.30}
|
||||||
# host: ${REDIS_HOST:127.0.0.1}
|
host: ${REDIS_HOST:127.0.0.1}
|
||||||
# 端口(默认 6379)
|
# 端口(默认 6379)
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
# 密码(未设置密码时请注释掉)
|
# 密码(未设置密码时请注释掉)
|
||||||
password: ${REDIS_PWD:redis2025}
|
# password: ${REDIS_PWD:redis2025}
|
||||||
# 数据库索引
|
# 数据库索引
|
||||||
database: ${REDIS_DB:1}
|
database: ${REDIS_DB:1}
|
||||||
# 连接超时时间
|
# 连接超时时间
|
||||||
|
|||||||
Reference in New Issue
Block a user