代码优化
This commit is contained in:
@@ -44,4 +44,16 @@ public class WorkOrderReq implements Serializable {
|
||||
@NotEmpty(message = "称重列表不能为空")
|
||||
private List<WorkOrderInfoReq> workOrderInfos;
|
||||
|
||||
|
||||
/**
|
||||
* 手动填写的物料数量
|
||||
*/
|
||||
private String inputQuantity;
|
||||
|
||||
|
||||
/**
|
||||
* 电子秤重量
|
||||
*/
|
||||
private String ahDeviceWeight;
|
||||
|
||||
}
|
||||
@@ -79,9 +79,15 @@ public class WorkOrderResp extends BaseDetailResp {
|
||||
private String photoUrl;
|
||||
|
||||
/**
|
||||
* 总重量
|
||||
* 计算总重量(标重)
|
||||
*/
|
||||
@Schema(description = "总重量")
|
||||
@Schema(description = "计算总重量(标重)")
|
||||
private BigDecimal totalCalculatedWeight;
|
||||
|
||||
/**
|
||||
* 实际总重量
|
||||
*/
|
||||
@Schema(description = "实际总重量")
|
||||
private BigDecimal totalWeight;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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; // 验证通过
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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}
|
||||
# 连接超时时间
|
||||
|
||||
Reference in New Issue
Block a user