This commit is contained in:
zc
2026-03-25 17:36:06 +08:00
parent c4f29d3ee5
commit 402d04294c
43 changed files with 16600 additions and 16581 deletions

View File

@@ -5,11 +5,11 @@ import top.wms.admin.fullWorkOrder.model.entity.FullWorkOrderDO;
import org.springframework.stereotype.Repository;
/**
* 整箱领取记录 Mapper
*
* @author zc
* @since 2026/03/24 09:36
*/
* 整箱领取记录 Mapper
*
* @author zc
* @since 2026/03/24 09:36
*/
@Repository
public interface FullWorkOrderMapper extends BaseMapper<FullWorkOrderDO> {

View File

@@ -3,7 +3,6 @@ package top.wms.admin.fullWorkOrder.service;
import top.continew.starter.extension.crud.service.BaseService;
import top.wms.admin.fullWorkOrder.model.query.FullWorkOrderQuery;
import top.wms.admin.fullWorkOrder.model.req.FullWorkOrderReq;
import top.wms.admin.fullWorkOrder.model.resp.FullWorkOrderDetailResp;
import top.wms.admin.fullWorkOrder.model.resp.FullWorkOrderResp;
/**

View File

@@ -15,8 +15,6 @@ import top.wms.admin.fullWorkOrder.model.query.FullWorkOrderQuery;
import top.wms.admin.fullWorkOrder.model.req.FullWorkOrderReq;
import top.wms.admin.fullWorkOrder.model.resp.FullWorkOrderResp;
import top.wms.admin.fullWorkOrder.service.FullWorkOrderService;
import top.wms.admin.materialProcess.model.query.MaterialProcessQuery;
import top.wms.admin.materialProcess.model.resp.MaterialProcessResp;
import java.util.Date;
import java.util.List;
@@ -37,12 +35,10 @@ public class FullWorkOrderServiceImpl extends BaseServiceImpl<FullWorkOrderMappe
String randomNum = String.format("%06d", (int)(Math.random() * 1000000));
req.setOrderNo(timestamp + randomNum);
String title = DateUtil.format(new Date(), DatePattern.CHINESE_DATE_PATTERN) + "-" + UserContextHolder
.getUsername();
.getUsername();
req.setTitle(title);
}
@Override
public void export(FullWorkOrderQuery query, SortQuery sortQuery, HttpServletResponse response) {
List<FullWorkOrderResp> list = super.list(query, sortQuery, this.getDetailClass());
@@ -50,5 +46,4 @@ public class FullWorkOrderServiceImpl extends BaseServiceImpl<FullWorkOrderMappe
ExcelUtils.export(list, "整箱领取导出记录", FullWorkOrderResp.class, response);
}
}

View File

@@ -4,6 +4,7 @@ import lombok.Data;
import com.baomidou.mybatisplus.annotation.TableName;
import top.wms.admin.common.enums.LightLevelEnum;
import top.wms.admin.common.model.entity.BaseDO;
import java.io.Serial;
@@ -56,4 +57,9 @@ public class MaterialInfoDO extends BaseDO {
* 流程ID
*/
private Long materialProcessId;
/**
* 灯光等级
*/
private Integer lightLevel;
}

View File

@@ -1,6 +1,5 @@
package top.wms.admin.material.model.req;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@@ -40,6 +39,12 @@ public class MaterialImportRowReq implements Serializable {
@NotNull(message = "物料单位重量不能为空")
private BigDecimal unitWeight;
/**
* 灯光等级
*/
@Schema(description = "灯光等级")
private String lightLevelName;
/*
* 物料规格
* */

View File

@@ -73,4 +73,10 @@ public class MaterialInfoReq implements Serializable {
@Schema(description = "流程ID")
@NotNull(message = "流程ID不能为空")
private Long materialProcessId;
/**
* 灯光等级
*/
@Schema(description = "灯光等级")
private Integer lightLevel;
}

View File

@@ -2,10 +2,9 @@ package top.wms.admin.material.model.resp;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import top.wms.admin.common.enums.LightLevelEnumConverter;
import top.wms.admin.common.model.resp.BaseDetailResp;
import java.io.Serial;
@@ -28,28 +27,28 @@ public class MaterialInfoResp extends BaseDetailResp {
* 物料名称
*/
@Schema(description = "物料名称")
@ExcelProperty(value = "物料名称")
@ExcelProperty(value = "物料名称", order = 1)
private String materialName;
/**
* 物料编码
*/
@Schema(description = "物料编码")
@ExcelProperty(value = "物料编码")
@ExcelProperty(value = "物料编码", order = 2)
private String encoding;
/**
* 物料单位重量(g)
*/
@Schema(description = "物料单位重量(g)")
@ExcelProperty(value = "物料单位重量(g)")
@ExcelProperty(value = "物料单位重量(g)", order = 3)
private Double unitWeight;
/**
* 物料规格
*/
@Schema(description = "物料规格")
@ExcelProperty(value = "物料规格")
@ExcelProperty(value = "物料规格", order = 5)
private String materialSpec;
/**
@@ -87,7 +86,6 @@ public class MaterialInfoResp extends BaseDetailResp {
@ExcelIgnore
private Long materialProcessId;
/**
* 品类下行浮动范围(%
*/
@@ -102,4 +100,11 @@ public class MaterialInfoResp extends BaseDetailResp {
@ExcelIgnore
private BigDecimal upFloatRatio;
/**
* 颜色灯光值
*/
@Schema(description = "灯光等级")
@ExcelProperty(value = "灯光等级", converter = LightLevelEnumConverter.class, order = 4)
private Integer lightLevel;
}

View File

@@ -3,7 +3,6 @@ package top.wms.admin.material.service;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import top.continew.starter.extension.crud.service.BaseService;
import top.wms.admin.material.model.entity.MaterialInfoDO;
import top.wms.admin.material.model.query.MaterialInfoQuery;
import top.wms.admin.material.model.req.MaterialInfoImportReq;
import top.wms.admin.material.model.req.MaterialInfoReq;

View File

@@ -39,6 +39,8 @@ import top.continew.starter.file.excel.util.ExcelUtils;
import top.continew.starter.web.util.FileUploadUtils;
import top.wms.admin.common.constant.CacheConstants;
import top.wms.admin.common.context.UserContextHolder;
import top.wms.admin.common.enums.LightLevelEnum;
import top.wms.admin.common.enums.LightLevelEnumConverter;
import top.wms.admin.common.util.SecureUtils;
import top.wms.admin.material.mapper.MaterialInfoMapper;
import top.wms.admin.material.model.entity.MaterialInfoDO;
@@ -204,17 +206,34 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
//查询物料类型
List<String> collect = importMaterialList.stream().map(MaterialImportRowReq::getTypeName).distinct().toList();
Map<String, Long> materialTypeMap = new HashMap<>();
if(CollUtil.isNotEmpty(collect)){
List<MaterialTypeDO> materialTypeList = materialTypeMapper.selectList(new LambdaQueryWrapper<MaterialTypeDO>().in(MaterialTypeDO::getTypeName, collect));
materialTypeMap = materialTypeList.stream().collect(Collectors.toMap(MaterialTypeDO::getTypeName, MaterialTypeDO::getId, (k1, v1) -> v1));
if (CollUtil.isNotEmpty(collect)) {
List<MaterialTypeDO> materialTypeList = materialTypeMapper
.selectList(new LambdaQueryWrapper<MaterialTypeDO>().in(MaterialTypeDO::getTypeName, collect));
materialTypeMap = materialTypeList.stream()
.collect(Collectors.toMap(MaterialTypeDO::getTypeName, MaterialTypeDO::getId, (k1, v1) -> v1));
}
//查询物料流程
List<String> collect1 = importMaterialList.stream().map(MaterialImportRowReq::getProcessName).distinct().toList();
List<MaterialProcessDO> materialProcessList = materialProcessMapper.selectList(new LambdaQueryWrapper<MaterialProcessDO>().in(MaterialProcessDO::getProcessName, collect1));
List<String> collect1 = importMaterialList.stream()
.map(MaterialImportRowReq::getProcessName)
.distinct()
.toList();
List<MaterialProcessDO> materialProcessList = materialProcessMapper
.selectList(new LambdaQueryWrapper<MaterialProcessDO>().in(MaterialProcessDO::getProcessName, collect1));
Map<String, Long> materialProcessMap = new HashMap<>();
if(CollUtil.isNotEmpty(materialProcessList)) {
materialProcessMap = materialProcessList.stream().collect(Collectors.toMap(MaterialProcessDO::getProcessName, MaterialProcessDO::getId, (k1, v1) -> v1));
if (CollUtil.isNotEmpty(materialProcessList)) {
materialProcessMap = materialProcessList.stream()
.collect(Collectors.toMap(MaterialProcessDO::getProcessName, MaterialProcessDO::getId, (k1, v1) -> v1));
}
//处理灯光等级
Map<String, Integer> lightLevelMap = new HashMap<>();
importMaterialList.forEach(row -> {
if (row.getLightLevelName() != null) {
Integer valueByDescription = LightLevelEnum.getValueByDescription(row.getLightLevelName());
if(null != valueByDescription){
lightLevelMap.put(row.getLightLevelName(), valueByDescription);
}
}
});
// 批量操作数据库集合
List<MaterialInfoDO> insertList = new ArrayList<>();
@@ -230,6 +249,7 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
materialDO.setMaterialSpec(StrUtil.isNotBlank(row.getMaterialSpec()) ? row.getMaterialSpec() : null);
materialDO.setMaterialProcessId(materialProcessMap.get(row.getProcessName()));
materialDO.setMaterialTypeId(materialTypeMap.get(row.getTypeName()));
materialDO.setLightLevel(lightLevelMap.get(row.getLightLevelName()));
// 修改 or 新增
if (UPDATE.validate(req.getDuplicateName(), row.getMaterialName(), existName)) {
materialDO.setMaterialName(row.getMaterialName());
@@ -283,9 +303,7 @@ public class MaterialInfoServiceImpl extends BaseServiceImpl<MaterialInfoMapper,
*/
private List<MaterialImportRowReq> filterImportData(List<MaterialImportRowReq> importRowList) {
// 校验过滤
return importRowList.stream()
.filter(row -> ValidationUtil.validate(row).isEmpty())
.toList();
return importRowList.stream().filter(row -> ValidationUtil.validate(row).isEmpty()).toList();
}
/**

View File

@@ -1,7 +1,6 @@
package top.wms.admin.materialProcess.model.req;
import lombok.Data;
import lombok.experimental.Accessors;
import top.wms.admin.system.enums.ImportPolicyEnum;
import java.io.Serial;

View File

@@ -2,12 +2,10 @@ package top.wms.admin.materialProcess.model.req;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;
/**
* 物料流程导入行数据
*

View File

@@ -1,7 +1,6 @@
package top.wms.admin.materialProcess.model.resp;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serial;
import java.io.Serializable;

View File

@@ -23,18 +23,21 @@ public interface MaterialProcessService extends BaseService<MaterialProcessResp,
/**
* 获取流程下拉列表
*
* @return 流程下拉列表
*/
List<LabelValueResp> getSelectList();
/**
* 下载导入模板
*
* @param response 响应对象
*/
void downloadImportTemplate(HttpServletResponse response) throws Exception;
/**
* 解析导入文件
*
* @param file 导入文件
* @return 解析响应
*/
@@ -42,6 +45,7 @@ public interface MaterialProcessService extends BaseService<MaterialProcessResp,
/**
* 导入物料流程
*
* @param req 导入请求
* @return 导入响应
*/

View File

@@ -25,7 +25,6 @@ import top.continew.starter.file.excel.util.ExcelUtils;
import top.continew.starter.web.util.FileUploadUtils;
import top.wms.admin.common.constant.CacheConstants;
import top.wms.admin.common.context.UserContextHolder;
import top.wms.admin.material.model.resp.MaterialInfoResp;
import top.wms.admin.materialProcess.mapper.MaterialProcessMapper;
import top.wms.admin.materialProcess.mapstruct.MaterialProcessConvert;
import top.wms.admin.materialProcess.model.entity.MaterialProcessDO;
@@ -56,16 +55,15 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
private final MaterialProcessConvert materialProcessConvert;
@Override
public void beforeAdd(MaterialProcessReq req) {
// 校验流程名称是否重复
MaterialProcessDO processDO = baseMapper.selectOne(Wrappers.lambdaQuery(MaterialProcessDO.class)
.eq(MaterialProcessDO::getProcessName, req.getProcessName()));
.eq(MaterialProcessDO::getProcessName, req.getProcessName()));
CheckUtils.throwIf(ObjectUtil.isNotEmpty(processDO), "流程名称已存在");
// 校验流程编码是否重复
processDO = baseMapper.selectOne(Wrappers.lambdaQuery(MaterialProcessDO.class)
.eq(MaterialProcessDO::getProcessCode, req.getProcessCode()));
.eq(MaterialProcessDO::getProcessCode, req.getProcessCode()));
CheckUtils.throwIf(ObjectUtil.isNotEmpty(processDO), "流程编码已存在");
}
@@ -73,15 +71,16 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
public void beforeUpdate(MaterialProcessReq req, Long id) {
// 校验流程名称是否重复
MaterialProcessDO processDO = baseMapper.selectOne(Wrappers.lambdaQuery(MaterialProcessDO.class)
.eq(MaterialProcessDO::getProcessName, req.getProcessName()).ne(MaterialProcessDO::getId, id));
.eq(MaterialProcessDO::getProcessName, req.getProcessName())
.ne(MaterialProcessDO::getId, id));
CheckUtils.throwIf(ObjectUtil.isNotEmpty(processDO), "流程名称已存在");
// 校验流程编码是否重复
processDO = baseMapper.selectOne(Wrappers.lambdaQuery(MaterialProcessDO.class)
.eq(MaterialProcessDO::getProcessCode, req.getProcessCode()).ne(MaterialProcessDO::getId, id));
.eq(MaterialProcessDO::getProcessCode, req.getProcessCode())
.ne(MaterialProcessDO::getId, id));
CheckUtils.throwIf(ObjectUtil.isNotEmpty(processDO), "流程编码已存在");
}
@Override
public void export(MaterialProcessQuery query, SortQuery sortQuery, HttpServletResponse response) {
List<MaterialProcessResp> list = super.list(query, sortQuery, this.getDetailClass());
@@ -99,7 +98,7 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
public void downloadImportTemplate(HttpServletResponse response) throws Exception {
try {
FileUploadUtils.download(response, ResourceUtil
.getStream("templates/import/materialProcess.xlsx"), "物料流程导入模板.xlsx");
.getStream("templates/import/materialProcess.xlsx"), "物料流程导入模板.xlsx");
} catch (Exception e) {
log.error("下载用户导入模板失败:", e);
response.setCharacterEncoding(CharsetUtil.UTF_8);
@@ -223,8 +222,7 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
if (fieldValues.isEmpty()) {
return 0;
}
return (int)this.count(Wrappers.<MaterialProcessDO>lambdaQuery()
.in(dbField, fieldValues));
return (int)this.count(Wrappers.<MaterialProcessDO>lambdaQuery().in(dbField, fieldValues));
}
/**
@@ -234,9 +232,7 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
*/
private List<MaterialProcessImportRowReq> filterImportData(List<MaterialProcessImportRowReq> importRowList) {
// 校验过滤
return importRowList.stream()
.filter(row -> ValidationUtil.validate(row).isEmpty())
.toList();
return importRowList.stream().filter(row -> ValidationUtil.validate(row).isEmpty()).toList();
}
/**
@@ -274,8 +270,8 @@ public class MaterialProcessServiceImpl extends BaseServiceImpl<MaterialProcessM
List<String> existName,
List<String> existCode) {
return list.stream()
.anyMatch(row -> EXIT.validate(req.getDuplicateName(), row.getProcessName(), existName) || EXIT
.validate(req.getDuplicateCode(), row.getProcessCode(), existCode));
.anyMatch(row -> EXIT.validate(req.getDuplicateName(), row.getProcessName(), existName) || EXIT.validate(req
.getDuplicateCode(), row.getProcessCode(), existCode));
}
/**

View File

@@ -10,7 +10,6 @@ import top.continew.starter.data.core.enums.QueryType;
import java.io.Serial;
import java.io.Serializable;
import java.time.*;
import java.math.BigDecimal;
/**
* 物料品类查询条件

View File

@@ -139,7 +139,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
MaterialInfoDO materialInfoDO = materialInfoMapper.selectById(req.getMaterialId());
CheckUtils.throwIf((materialInfoDO == null || null == materialInfoDO.getMaterialTypeId()), "该物料信息不全,请先维护!");
MaterialTypeDO materialTypeDO = materialTypeMapper.selectById(materialInfoDO.getMaterialTypeId());
CheckUtils.throwIf((materialTypeDO == null || null == materialTypeDO.getDownFloatRatio() || null == materialTypeDO.getUpFloatRatio()), "该物料品类信息不全,请先维护!");
CheckUtils.throwIf((materialTypeDO == null || null == materialTypeDO
.getDownFloatRatio() || null == materialTypeDO.getUpFloatRatio()), "该物料品类信息不全,请先维护!");
//下行浮动范围
BigDecimal downFloatRatio = materialTypeDO.getDownFloatRatio();
@@ -152,7 +153,8 @@ public class WorkOrderServiceImpl extends BaseServiceImpl<WorkOrderMapper, WorkO
// 计算比值:(实重 - 标重) / 标重
BigDecimal weightDifference = electronicWeight.subtract(standardWeight);
BigDecimal ratio = weightDifference.divide(standardWeight, 4, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100));
BigDecimal ratio = weightDifference.divide(standardWeight, 4, BigDecimal.ROUND_HALF_UP)
.multiply(BigDecimal.valueOf(100));
log.info("ratio当前比值:{}%", ratio);
// 检查比值是否超过上行浮动范围