代码优化

This commit is contained in:
zc
2026-03-09 20:33:47 +08:00
parent df9479f870
commit fb05360c5e
7 changed files with 139 additions and 19 deletions

View File

@@ -44,4 +44,16 @@ public class WorkOrderReq implements Serializable {
@NotEmpty(message = "称重列表不能为空")
private List<WorkOrderInfoReq> workOrderInfos;
/**
* 手动填写的物料数量
*/
private String inputQuantity;
/**
* 电子秤重量
*/
private String ahDeviceWeight;
}

View File

@@ -79,9 +79,15 @@ public class WorkOrderResp extends BaseDetailResp {
private String photoUrl;
/**
* 总重量
* 计算总重量(标重)
*/
@Schema(description = "总重量")
@Schema(description = "计算总重量(标重)")
private BigDecimal totalCalculatedWeight;
/**
* 实际总重量
*/
@Schema(description = "实际总重量")
private BigDecimal totalWeight;
/**

View File

@@ -22,7 +22,7 @@ public interface WorkOrderService extends BaseService<WorkOrderResp, WorkOrderRe
* @param id 任务工单主键id
* @return 任务工单详情信息
*/
List<WorkOrderInfoResp> getDetail(Long id);
WorkOrderResp getDetail(Long id);
/**
* 创建任务工单
@@ -31,4 +31,19 @@ public interface WorkOrderService extends BaseService<WorkOrderResp, WorkOrderRe
* @return 任务工单信息
*/
WorkOrderResp addWorKerOrder(WorkOrderReq req);
/**
* 获取任务工单详情信息
*
* @param id 任务工单主键id
* @return 任务工单详情信息
*/
List<WorkOrderInfoResp> getWorkOrderInfos(Long id);
/**
* 校验物料数量和重量是否匹配
* @param req
* @return
*/
int validateWeighing(WorkOrderReq req);
}

View File

@@ -10,13 +10,15 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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.material.mapper.MaterialInfoMapper;
import top.wms.admin.material.model.entity.MaterialInfoDO;
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;
@@ -39,18 +41,22 @@ import java.util.List;
* @since 2026/03/03 17:09
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkOrderDO, WorkOrderResp, WorkOrderResp, WorkOrderQuery, WorkOrderReq> implements WorkOrderService {
private final WorkOrderInfoMapper workOrderInfoMapper;
private final MaterialInfoMapper materialInfoMapper;
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.groupBy("w.id");
this.sort(queryWrapper, pageQuery);
IPage<WorkOrderResp> page = baseMapper.selectWorkOrderPage(new Page<>(pageQuery.getPage(), pageQuery
@@ -60,7 +66,29 @@ private final WorkOrderInfoMapper workOrderInfoMapper;
}
@Override
public List<WorkOrderInfoResp> getDetail(Long id) {
public WorkOrderResp getDetail(Long id) {
WorkOrderDO workOrderDO = baseMapper.selectById(id);
WorkOrderResp workOrderResp = BeanUtil.copyProperties(workOrderDO, WorkOrderResp.class);
if (null != workOrderDO.getMaterialId()) {
MaterialInfoDO materialInfoDO = materialInfoMapper.selectById(workOrderDO.getMaterialId());
workOrderResp.setMaterialName(materialInfoDO.getMaterialName());
workOrderResp.setEncoding(materialInfoDO.getEncoding());
}
List<WorkOrderInfoDO> workOrderInfos = workOrderInfoMapper.selectList(new QueryWrapper<WorkOrderInfoDO>().eq("work_order_id", id));
if (CollUtil.isNotEmpty(workOrderInfos)) {
BigDecimal bigDecimal = new BigDecimal("0");
for (WorkOrderInfoDO workOrderInfoDO : workOrderInfos) {
bigDecimal = bigDecimal.add(workOrderInfoDO.getCalculatedWeight());
}
workOrderResp.setTotalCalculatedWeight(bigDecimal);
}
return workOrderResp;
}
@Override
public List<WorkOrderInfoResp> getWorkOrderInfos(Long id) {
return baseMapper.getDetail(id);
}
@@ -84,9 +112,11 @@ private final WorkOrderInfoMapper workOrderInfoMapper;
totalCount += workOrderInfoReq.getQuantity();
}
WorkOrderDO workOrder = new WorkOrderDO();
workOrder.setOrderNo(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN) + System.currentTimeMillis());
// 生成纯数字订单号:年月日时分秒 + 6位随机数
String timestamp = DateUtil.format(new Date(), "yyyyMMddHHmmss");
String randomNum = String.format("%06d", (int)(Math.random() * 1000000));
workOrder.setOrderNo(timestamp + randomNum);
String title = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN) + "-"
+ UserContextHolder.getUsername() + "-" + req.getMaterialName();
workOrder.setTitle(title);
@@ -100,8 +130,40 @@ private final WorkOrderInfoMapper workOrderInfoMapper;
workOrderInfoDOList.forEach(workOrderInfoDO -> workOrderInfoDO.setWorkOrderId(workOrder.getId()));
workOrderInfoMapper.insertBatch(workOrderInfoDOList);
return BeanUtil.copyProperties(workOrder, WorkOrderResp.class);
}
@Override
public int validateWeighing(WorkOrderReq req) {
log.info("validateWeighing req:{}", req);
String configValue = configService.getConfigValue("weight_float_ratio");
BigDecimal weightFloat = new BigDecimal("0.06");
if (StrUtil.isNotBlank(configValue)) {
weightFloat = new BigDecimal(configValue);
}
//计算标准重量
MaterialInfoDO materialInfoDO = materialInfoMapper.selectById(req.getMaterialId());
BigDecimal standardWeight = materialInfoDO.getUnitWeight().subtract(new BigDecimal(req.getInputQuantity()));
BigDecimal electronicWeight = new BigDecimal(req.getAhDeviceWeight());
// 检查 electronicWeight 是否大于 standardWeight
if (electronicWeight.compareTo(standardWeight) <= 0) {
log.error("电子秤重量必须大于标准重量");
return 500; // 电子秤重量必须大于标准重量
}
// 计算比值:(electronicWeight - standardWeight) / standardWeight
BigDecimal weightDifference = electronicWeight.subtract(standardWeight);
BigDecimal ratio = weightDifference.divide(standardWeight, 4, BigDecimal.ROUND_HALF_UP);
// 检查比值是否超过 6%
if (ratio.compareTo(weightFloat) > 0) {
log.error("比值超过 6%,当前比值: {}", ratio);
return 500; // 比值超过 6%
}
return 200; // 验证通过
}
}

View File

@@ -10,12 +10,10 @@
m.photo_url,
m.unit_weight,
u.card_no,
u.username createUserString,
count(*) as totalCount
u.username createUserString
from sys_work_order w
left join sys_material_info m on w.material_id = m.id
left join sys_user u on w.create_user = u.id
left join sys_work_order_info wi on w.id = wi.work_order_id
${ew.customSqlSegment}
</select>

View File

@@ -1,6 +1,7 @@
package top.wms.admin.controller.weighManage;
import cn.dev33.satoken.annotation.SaCheckPermission;
import cn.hutool.core.util.StrUtil;
import org.springframework.validation.annotation.Validated;
import top.continew.starter.extension.crud.enums.Api;
@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.*;
import lombok.RequiredArgsConstructor;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.log.annotation.Log;
import top.continew.starter.web.model.R;
import top.wms.admin.common.controller.BaseController;
import top.wms.admin.weighManage.model.query.WorkOrderQuery;
import top.wms.admin.weighManage.model.req.WorkOrderReq;
@@ -34,11 +36,17 @@ public class WorkOrderController extends BaseController<WorkOrderService, WorkOr
@Log(ignore = true)
@SaCheckPermission("workOrder:record:detail")
@GetMapping(value = "/{id}")
public List<WorkOrderInfoResp> getDetail(@PathVariable("id") Long id) {
return baseService.getDetail(id);
@GetMapping(value = "/info/{id}")
public List<WorkOrderInfoResp> getWorkOrderInfos(@PathVariable("id") Long id) {
return baseService.getWorkOrderInfos(id);
}
@Log(ignore = true)
@SaCheckPermission("workOrder:record:detail")
@GetMapping(value = "/{id}")
public WorkOrderResp getDetail(@PathVariable("id") Long id) {
return baseService.getDetail(id);
}
@SaCheckPermission("workOrder:record:add")
@PostMapping
@@ -46,4 +54,23 @@ public class WorkOrderController extends BaseController<WorkOrderService, WorkOr
return baseService.addWorKerOrder(req);
}
@PostMapping("/validateWeighing")
public R validateWeighing(@RequestBody WorkOrderReq req) {
if (null == req.getMaterialId()) {
return R.fail("400", "物料主键id不能为空");
}
if (StrUtil.isBlank(req.getInputQuantity())) {
return R.fail("400", "输入数量不能为空");
}
if (StrUtil.isBlank(req.getAhDeviceWeight())) {
return R.fail("400", "电子称重量不能为空");
}
int validateResult = baseService.validateWeighing(req);
if (validateResult != 200) {
return R.fail("500", "重量不匹配!");
}
return R.ok();
}
}

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}
# 连接超时时间