优化
This commit is contained in:
@@ -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> {
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
/*
|
||||
* 物料规格
|
||||
* */
|
||||
|
||||
@@ -73,4 +73,10 @@ public class MaterialInfoReq implements Serializable {
|
||||
@Schema(description = "流程ID")
|
||||
@NotNull(message = "流程ID不能为空")
|
||||
private Long materialProcessId;
|
||||
|
||||
/**
|
||||
* 灯光等级
|
||||
*/
|
||||
@Schema(description = "灯光等级")
|
||||
private Integer lightLevel;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
* 物料流程导入行数据
|
||||
*
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 导入响应
|
||||
*/
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* 物料品类查询条件
|
||||
|
||||
@@ -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);
|
||||
|
||||
// 检查比值是否超过上行浮动范围
|
||||
|
||||
Reference in New Issue
Block a user