diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/controller/StStrategyConfigController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/controller/StStrategyConfigController.java new file mode 100644 index 00000000..e8da854c --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/controller/StStrategyConfigController.java @@ -0,0 +1,65 @@ +package org.nl.wms.base_manage.strategy.controller; + + +import org.nl.common.anno.Log; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.base_manage.strategy.service.IStStrategyConfigService; +import org.nl.wms.base_manage.strategy.service.dao.StStrategyConfig; +import org.nl.wms.base_manage.strategy.service.dto.StrategyQuery; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +/** + *

+ * 仓储策略配置表 前端控制器 + *

+ * + * @author generator + * @since 2024-04-07 + */ +@RestController +@RequestMapping("/api/strategy") +public class StStrategyConfigController { + + @Autowired + private IStStrategyConfigService iStStrategyConfigService; + + @GetMapping + @Log("分页查询") + public ResponseEntity query(StrategyQuery query, PageQuery page) { + return new ResponseEntity<>(iStStrategyConfigService.pageQuery(query, page), HttpStatus.OK); + } + + @PostMapping + @Log("新增") + public ResponseEntity create(@Validated @RequestBody StStrategyConfig dao) { + iStStrategyConfigService.create(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @Log("修改") + public ResponseEntity update(@Validated @RequestBody StStrategyConfig dao) { + iStStrategyConfigService.update(dao); + return new ResponseEntity<>(HttpStatus.OK); + } + + @DeleteMapping + @Log("删除") + public ResponseEntity delete(@RequestBody Long[] ids) { + iStStrategyConfigService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/changeActive") + @Log("修改启用状态") + public ResponseEntity changeActive(@Validated @RequestBody StStrategyConfig dao) { + iStStrategyConfigService.changeActive(dao); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/IStStrategyConfigService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/IStStrategyConfigService.java new file mode 100644 index 00000000..cfa88e23 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/IStStrategyConfigService.java @@ -0,0 +1,48 @@ +package org.nl.wms.base_manage.strategy.service; + +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.base_manage.strategy.service.dao.StStrategyConfig; +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.wms.base_manage.strategy.service.dto.StrategyQuery; + +/** + *

+ * 仓储策略配置表 服务类 + *

+ * + * @author generator + * @since 2024-04-07 + */ +public interface IStStrategyConfigService extends IService { + + /** + * 分页查询 + * @param query,page / + * @return JSONObject + */ + Object pageQuery(StrategyQuery query, PageQuery page); + + /** + * 新增 + * @param dao:实体类 + */ + void create(StStrategyConfig dao); + + /** + * 修改 + * @param dao: 实体类 + */ + void update(StStrategyConfig dao); + + /** + * 删除 + * @param ids : 标识 + */ + void deleteAll(Long[] ids); + + /** + * 修改启用状态 + * @param dao:实体类 + */ + void changeActive(StStrategyConfig dao); +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/StStrategyConfig.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/StStrategyConfig.java new file mode 100644 index 00000000..85958345 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/StStrategyConfig.java @@ -0,0 +1,102 @@ +package org.nl.wms.base_manage.strategy.service.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + *

+ * 仓储策略配置表 + *

+ * + * @author generator + * @since 2024-04-07 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("st_strategy_config") +public class StStrategyConfig implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 策略标识 + */ + @TableId + private String id; + + /** + * 策略编码 + */ + private String strategy_code; + + /** + * 策略名称 + */ + private String strategy_name; + + /** + * 策略类型 + */ + private String strategy_type; + + /** + * 类处理类型 + */ + private String class_type; + + /** + * 参数 + */ + private String param; + + /** + * 描述 + */ + private String remark; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人名称 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_id; + + /** + * 修改人名称 + */ + private String update_name; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 是否删除 + */ + private String is_delete; + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/StStrategyConfigMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/StStrategyConfigMapper.java new file mode 100644 index 00000000..92cf73b7 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/StStrategyConfigMapper.java @@ -0,0 +1,29 @@ +package org.nl.wms.base_manage.strategy.service.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.nl.common.domain.entity.PageQuery; +import org.nl.wms.base_manage.strategy.service.dao.StStrategyConfig; +import org.nl.wms.base_manage.strategy.service.dto.StrategyQuery; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 仓储策略配置表 Mapper 接口 + *

+ * + * @author generator + * @since 2024-04-07 + */ +public interface StStrategyConfigMapper extends BaseMapper { + + /** + * 分页查询 + * @param query:查询条件 + * @param pageQuery 分页 + * @return List + */ + List getPageQuery(@Param("query") StrategyQuery query, @Param("pageQuery") PageQuery pageQuery); +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/xml/StStrategyConfigMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/xml/StStrategyConfigMapper.xml new file mode 100644 index 00000000..13240bfc --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dao/mapper/xml/StStrategyConfigMapper.xml @@ -0,0 +1,20 @@ + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dto/StrategyQuery.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dto/StrategyQuery.java new file mode 100644 index 00000000..d404f746 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/dto/StrategyQuery.java @@ -0,0 +1,25 @@ +package org.nl.wms.base_manage.strategy.service.dto; + +import lombok.Data; +import org.nl.common.domain.entity.BaseQuery; +import org.nl.common.domain.entity.QParam; +import org.nl.common.enums.QueryTEnum; +import org.nl.wms.base_manage.measure.service.dao.BmMeasureUnit; +import org.nl.wms.base_manage.strategy.service.dao.StStrategyConfig; + +/* + * @author ZZQ + * @Date 2023/5/4 19:49 + */ +@Data +public class StrategyQuery extends BaseQuery { + + private String strategy_name; + + @Override + public void paramMapping() { + super.doP.put("strategy_name", QParam.builder().k(new String[]{"strategy_name"}).type(QueryTEnum.LK).build()); + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/impl/StStrategyConfigServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/impl/StStrategyConfigServiceImpl.java new file mode 100644 index 00000000..831db438 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/strategy/service/impl/StStrategyConfigServiceImpl.java @@ -0,0 +1,114 @@ +package org.nl.wms.base_manage.strategy.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.Page; +import com.github.pagehelper.PageHelper; +import org.nl.common.TableDataInfo; +import org.nl.common.domain.entity.PageQuery; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.wms.base_manage.strategy.service.IStStrategyConfigService; +import org.nl.wms.base_manage.strategy.service.dao.StStrategyConfig; +import org.nl.wms.base_manage.strategy.service.dao.mapper.StStrategyConfigMapper; +import org.nl.wms.base_manage.strategy.service.dto.StrategyQuery; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + *

+ * 仓储策略配置表 服务实现类 + *

+ * + * @author generator + * @since 2024-04-07 + */ +@Service +public class StStrategyConfigServiceImpl extends ServiceImpl implements IStStrategyConfigService { + + @Override + public Object pageQuery(StrategyQuery query, PageQuery pageQuery) { + Page page = PageHelper.startPage(pageQuery.getPage() + 1, pageQuery.getSize()); + page.setOrderBy("create_time DESC"); + List mstDetail = this.baseMapper.getPageQuery(query, pageQuery); + + TableDataInfo build = TableDataInfo.build(mstDetail); + build.setTotalElements(page.getTotal()); + return build; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(StStrategyConfig dao) { + + StStrategyConfig oldDao = this.getOne( + new QueryWrapper().lambda() + .eq(StStrategyConfig::getStrategy_name, dao.getStrategy_name()) + ); + + if (ObjectUtil.isNotEmpty(oldDao)) { + throw new BadRequestException("已存在相同名称的策略【"+dao.getStrategy_name()+"】"); + } + + dao.setId(IdUtil.getStringId()); + dao.setStrategy_code("000"); + dao.setIs_used("1"); + dao.setIs_delete("0"); + dao.setCreate_id(SecurityUtils.getCurrentUserId()); + dao.setCreate_name(SecurityUtils.getCurrentNickName()); + dao.setCreate_time(DateUtil.now()); + this.save(dao); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(StStrategyConfig dao) { + + dao.setUpdate_id(SecurityUtils.getCurrentUserId()); + dao.setUpdate_name(SecurityUtils.getCurrentNickName()); + dao.setUpdate_time(DateUtil.now()); + this.updateById(dao); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(Long[] ids) { + this.update( + new UpdateWrapper().lambda() + .set(StStrategyConfig::getUpdate_id,SecurityUtils.getCurrentUserId()) + .set(StStrategyConfig::getUpdate_name, SecurityUtils.getCurrentNickName()) + .set(StStrategyConfig::getUpdate_time, DateUtil.now()) + .set(StStrategyConfig::getIs_delete, "1") + .in(StStrategyConfig::getId, ids) + ); + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void changeActive(StStrategyConfig dao) { + + String isUsed = "1"; + if (StrUtil.equals("1", dao.getIs_used())) { + isUsed = "0"; + } + + dao.setIs_used(isUsed); + dao.setUpdate_time(DateUtil.now()); + dao.setUpdate_id(SecurityUtils.getCurrentUserId()); + dao.setUpdate_name(SecurityUtils.getCurrentNickName()); + this.updateById(dao); + } + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/controller/StIvtStructattrController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/controller/StIvtStructattrController.java new file mode 100644 index 00000000..8f0a8b4e --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/controller/StIvtStructattrController.java @@ -0,0 +1,21 @@ +package org.nl.wms.base_manage.struct.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 仓位属性表 前端控制器 + *

+ * + * @author generator + * @since 2024-04-08 + */ +@RestController +@RequestMapping("/stIvtStructattr") +public class StIvtStructattrController { + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/IStIvtStructattrService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/IStIvtStructattrService.java new file mode 100644 index 00000000..e3b752d7 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/IStIvtStructattrService.java @@ -0,0 +1,16 @@ +package org.nl.wms.base_manage.struct.service; + +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 仓位属性表 服务类 + *

+ * + * @author generator + * @since 2024-04-08 + */ +public interface IStIvtStructattrService extends IService { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/StIvtStructattr.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/StIvtStructattr.java new file mode 100644 index 00000000..d6fc0eb2 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/StIvtStructattr.java @@ -0,0 +1,200 @@ +package org.nl.wms.base_manage.struct.service.dao; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 仓位属性表 + *

+ * + * @author generator + * @since 2024-04-08 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("st_ivt_structattr") +public class StIvtStructattr implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 仓位标识 + */ + private String id; + + /** + * 仓位编码 + */ + private String struct_code; + + /** + * 仓位名称 + */ + private String struct_name; + + /** + * 库区标识 + */ + private String sect_id; + + /** + * 仓库标识 + */ + private String stor_id; + + /** + * 容量 + */ + private BigDecimal capacity; + + /** + * 宽度 + */ + private BigDecimal width; + + /** + * 高度 + */ + private BigDecimal height; + + /** + * 深度 + */ + private BigDecimal zdepth; + + /** + * 承受重量 + */ + private BigDecimal weight; + + /** + * 起始X坐标 + */ + private BigDecimal xqty; + + /** + * 起始Y坐标 + */ + private BigDecimal yqty; + + /** + * 起始Z坐标 + */ + private BigDecimal zqty; + + /** + * 排 + */ + private BigDecimal row_num; + + /** + * 列 + */ + private BigDecimal col_num; + + /** + * 层 + */ + private BigDecimal layer_num; + + /** + * 块 + */ + private BigDecimal block_num; + + /** + * 入库顺序 + */ + private BigDecimal in_order_seq; + + /** + * 出库库顺序 + */ + private BigDecimal out_order_seq; + + /** + * 放置类型 + */ + private String placement_type; + + /** + * 超限货位关联的货位编号 + */ + private String control_code; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 是否临时仓位 + */ + private Boolean is_temp; + + /** + * 是否启用 + */ + private Boolean is_used; + + /** + * 是否判断高度 + */ + private String is_zdepth; + + /** + * 是否空载具 + */ + private Boolean is_emp; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 存储载具号 + */ + private String vehicle_code; + + /** + * 备注 + */ + private String remark; + + /** + * 背景图片 + */ + private String back_ground_pic; + + /** + * 前景色 + */ + private String front_ground_color; + + /** + * 背景色 + */ + private String back_ground_color; + + /** + * 字体显示方向 + */ + private String font_direction_scode; + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/StIvtStructattrMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/StIvtStructattrMapper.java new file mode 100644 index 00000000..f7e368b5 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/StIvtStructattrMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.base_manage.struct.service.dao.mapper; + +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 仓位属性表 Mapper 接口 + *

+ * + * @author generator + * @since 2024-04-08 + */ +public interface StIvtStructattrMapper extends BaseMapper { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml new file mode 100644 index 00000000..a79535e3 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/dao/mapper/xml/StIvtStructattrMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/impl/StIvtStructattrServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/impl/StIvtStructattrServiceImpl.java new file mode 100644 index 00000000..e4fb4615 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/struct/service/impl/StIvtStructattrServiceImpl.java @@ -0,0 +1,20 @@ +package org.nl.wms.base_manage.struct.service.impl; + +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.struct.service.dao.mapper.StIvtStructattrMapper; +import org.nl.wms.base_manage.struct.service.IStIvtStructattrService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 仓位属性表 服务实现类 + *

+ * + * @author generator + * @since 2024-04-08 + */ +@Service +public class StIvtStructattrServiceImpl extends ServiceImpl implements IStIvtStructattrService { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/controller/MdPbStoragevehicleextController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/controller/MdPbStoragevehicleextController.java new file mode 100644 index 00000000..03fd6647 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/controller/MdPbStoragevehicleextController.java @@ -0,0 +1,21 @@ +package org.nl.wms.base_manage.vehicleext.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 载具扩展属性信息表 前端控制器 + *

+ * + * @author generator + * @since 2024-04-09 + */ +@RestController +@RequestMapping("/mdPbStoragevehicleext") +public class MdPbStoragevehicleextController { + +} + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/IMdPbStoragevehicleextService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/IMdPbStoragevehicleextService.java new file mode 100644 index 00000000..5ae051f2 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/IMdPbStoragevehicleextService.java @@ -0,0 +1,16 @@ +package org.nl.wms.base_manage.vehicleext.service; + +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 载具扩展属性信息表 服务类 + *

+ * + * @author generator + * @since 2024-04-09 + */ +public interface IMdPbStoragevehicleextService extends IService { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/MdPbStoragevehicleext.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/MdPbStoragevehicleext.java new file mode 100644 index 00000000..2e405763 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/MdPbStoragevehicleext.java @@ -0,0 +1,70 @@ +package org.nl.wms.base_manage.vehicleext.service.dao; + +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 载具扩展属性信息表 + *

+ * + * @author generator + * @since 2024-04-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("md_pb_storagevehicleext") +public class MdPbStoragevehicleext implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 载具编码 + */ + private String storagevehicle_code; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 数量 + */ + private BigDecimal qty; + + /** + * 重量 + */ + private BigDecimal weight; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 数量计量单位标识 + */ + private String qty_unit_id; + + /** + * 备注 + */ + private String remark; + + /** + * 入库时间 + */ + private String insert_time; + + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/MdPbStoragevehicleextMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/MdPbStoragevehicleextMapper.java new file mode 100644 index 00000000..12653619 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/MdPbStoragevehicleextMapper.java @@ -0,0 +1,16 @@ +package org.nl.wms.base_manage.vehicleext.service.dao.mapper; + +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 载具扩展属性信息表 Mapper 接口 + *

+ * + * @author generator + * @since 2024-04-09 + */ +public interface MdPbStoragevehicleextMapper extends BaseMapper { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/xml/MdPbStoragevehicleextMapper.xml b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/xml/MdPbStoragevehicleextMapper.xml new file mode 100644 index 00000000..0dbedb9b --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/dao/mapper/xml/MdPbStoragevehicleextMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/impl/MdPbStoragevehicleextServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/impl/MdPbStoragevehicleextServiceImpl.java new file mode 100644 index 00000000..00317609 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicleext/service/impl/MdPbStoragevehicleextServiceImpl.java @@ -0,0 +1,20 @@ +package org.nl.wms.base_manage.vehicleext.service.impl; + +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; +import org.nl.wms.base_manage.vehicleext.service.dao.mapper.MdPbStoragevehicleextMapper; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 载具扩展属性信息表 服务实现类 + *

+ * + * @author generator + * @since 2024-04-09 + */ +@Service +public class MdPbStoragevehicleextServiceImpl extends ServiceImpl implements IMdPbStoragevehicleextService { + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/AlleyAveRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/AlleyAveRuleHandler.java index 08da6b7c..e34409c7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/AlleyAveRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/AlleyAveRuleHandler.java @@ -1,17 +1,240 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 巷道均衡策略 */ -public class AlleyAveRuleHandler extends DecisionHandler { +@Service +public class AlleyAveRuleHandler extends DecisionHandler { + + /** + * 仓位服务 + */ + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 巷道均衡策略 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识(此方法只根据物料进行匹配) + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + // in查询条件处理 + List blockNumIn = attrList.stream() + .map(StIvtStructattr::getBlock_num) + .distinct() + .collect(Collectors.toList()); + + // 查询相同巷道货位相同物料 + List blockAttrList = iStIvtStructattrService.list( + new QueryWrapper().lambda() + .eq(StIvtStructattr::getMaterial_id, jsonParam.getString("materialId")) + .in(StIvtStructattr::getBlock_num, blockNumIn) + ); + + // 如果为空说明这些巷道都没有相同物料的巷道,则返回所有仓位 + if (ObjectUtil.isEmpty(blockAttrList)) { + return attrList; + } + + // 计算每个巷道的相同物料 + Map> collectMap = blockAttrList.stream() + .collect(Collectors.groupingBy(StIvtStructattr::getBlock_num)); + + // 巷道 + int blockNum = blockAttrList.get(0).getBlock_num().intValue(); + // 集合数量 + int size = blockAttrList.size(); + for (BigDecimal num : collectMap.keySet()) { + int min = Math.min(size, collectMap.get(num).size()); + + if (size > min) { + // 返回最小的巷道 + blockNum = num.intValue(); + size = min; + } + + } + + // 匹配相同巷道的集合并返回 + int finalBlockNum = blockNum; + return attrList.stream() + .filter(row -> row.getBlock_num().intValue() == finalBlockNum) + .collect(Collectors.toList()); + } + + /** + * 出库策略 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据明细物料匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + // 找出物料最多的巷道 + int blockNum = getMaxMaterial(attrList); + + // 匹配此巷道对应的仓位物料 + StIvtStructattr attrDao = attrList.stream() + .filter(row -> row.getBlock_num().intValue() == blockNum) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(attrDao)) { + continue; + } + + // 添加需返回的仓位物料 + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; + } + + /** + * 出库策略 - 查询物料最多的巷道 + * @param attrList: 仓位物料 + * @return 巷道 + */ + private int getMaxMaterial(List attrList) { + // 根据巷道分组 + Map> collectMap = attrList.stream() + .collect(Collectors.groupingBy(StIvtStructattr::getBlock_num)); + + // 找最大物料巷道 + // 巷道 + int blockNum = attrList.get(0).getBlock_num().intValue(); + // 集合数量 + int size = 0; + + for (BigDecimal num : collectMap.keySet()) { + int max = Math.max(size, collectMap.get(num).size()); + + if (size < max) { + // 返回最大的巷道 + blockNum = num.intValue(); + size = max; + } + } + + return blockNum; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/ClusterRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/ClusterRuleHandler.java index 2b727dac..983f5129 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/ClusterRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/ClusterRuleHandler.java @@ -1,17 +1,180 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.IStIvtStructattrService; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 同类型聚簇策略 */ -public class ClusterRuleHandler extends DecisionHandler { +@Service +public class ClusterRuleHandler extends DecisionHandler { + + /** + * 仓位服务 + */ + @Autowired + private IStIvtStructattrService iStIvtStructattrService; + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 同类物品集中原则 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识(此方法只根据物料、排进行匹配) + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + + // in查询条件处理 + List rowNumIn = attrList.stream() + .map(StIvtStructattr::getRow_num) + .distinct() + .collect(Collectors.toList()); + + // 查询仓位中是否有相同的物料 + List attrLikeList = iStIvtStructattrService.list( + new QueryWrapper().lambda() + .eq(StIvtStructattr::getMaterial_id, jsonParam.getString("materialId")) + .in(StIvtStructattr::getRow_num, rowNumIn) + ); + + if (ObjectUtil.isEmpty(attrLikeList)) { + return attrList; + } + + // 取其中一个排进行匹配并返回 + return attrList.stream() + .filter(row -> row.getRow_num().intValue() == attrLikeList.get(0).getRow_num().intValue()) + .collect(Collectors.toList()); + } + + /** + * 出库策略 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据明细物料匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + + // 添加需返回的仓位物料 + StIvtStructattr attrDao = attrList.get(0); + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/FIFORuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/FIFORuleHandler.java index a8841aa1..ebbf6912 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/FIFORuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/FIFORuleHandler.java @@ -1,17 +1,153 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 先进先出策略 */ -public class FIFORuleHandler extends DecisionHandler { +public class FIFORuleHandler extends DecisionHandler { + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 巷道均衡策略 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识 + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + + return attrList; + } + + /** + * 出库策略 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + // 查询对应的载具物料,根据入库时间升序(先进先出规则) + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + .orderByAsc(MdPbStoragevehicleext::getInsert_time) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + + // 添加需返回的仓位物料 + StIvtStructattr attrDao = attrList.get(0); + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/LimitStorageRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/LimitStorageRuleHandler.java index 9e63efa4..5ded3ee1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/LimitStorageRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/LimitStorageRuleHandler.java @@ -1,17 +1,160 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 货位限位策略:限高,限宽,双货位 */ -public class LimitStorageRuleHandler extends DecisionHandler { +@Service +public class LimitStorageRuleHandler extends DecisionHandler { + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 货位限位策略:根据货位的长宽高 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略:判断货位的长宽高 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识、width: 宽度、 height:高度、zdepth:深度 + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + + // 判断长宽高是否符合要求 + return attrList.stream() + .filter(row -> row.getWidth().doubleValue() <= jsonParam.getDoubleValue("width") && + row.getHeight().doubleValue() <= jsonParam.getDoubleValue("height") && + row.getZdepth().doubleValue() <= jsonParam.getDoubleValue("zdepth") + ) + .collect(Collectors.toList()); + } + + /** + * 出库策略:默认出库 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + // 查询对应的载具物料 + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + + // 添加需返回的仓位物料 + StIvtStructattr attrDao = attrList.get(0); + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/NearbyRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/NearbyRuleHandler.java index 9bfae7dd..c3493719 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/NearbyRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/NearbyRuleHandler.java @@ -1,17 +1,162 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 就近放置策略:根据物料ABC类区分 */ -public class NearbyRuleHandler extends DecisionHandler { +@Service +public class NearbyRuleHandler extends DecisionHandler { + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 就近放置策略:根据出入库顺序进行判断 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略:默认入库顺序数小的一方为靠近出口方向 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识 + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + + return attrList.stream() + .sorted(Comparator.comparing(StIvtStructattr::getIn_order_seq)) + .collect(Collectors.toList()); + } + + /** + * 出库策略:默认出库顺序数大的一方为靠近出口方向 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 先进行顺序排序 + attrList = attrList.stream() + .sorted(Comparator.comparing(StIvtStructattr::getIn_order_seq)) + .collect(Collectors.toList()); + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + // 查询对应的载具物料 + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + + // 添加需返回的仓位物料 + StIvtStructattr attrDao = attrList.get(0); + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/WeightRuleHandler.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/WeightRuleHandler.java index 54dcd71d..f91f1626 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/WeightRuleHandler.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/decision_manage/handler/service/impl/base/WeightRuleHandler.java @@ -1,17 +1,158 @@ package org.nl.wms.decision_manage.handler.service.impl.base; +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.nl.common.domain.exception.BadRequestException; +import org.nl.wms.base_manage.struct.service.dao.StIvtStructattr; +import org.nl.wms.base_manage.vehicleext.service.IMdPbStoragevehicleextService; +import org.nl.wms.base_manage.vehicleext.service.dao.MdPbStoragevehicleext; import org.nl.wms.decision_manage.handler.service.DecisionHandler; +import org.nl.wms.stor_manage.service.in.iostor_dtl.IStIvtIostorinvdtlInService; +import org.nl.wms.stor_manage.service.in.iostor_dtl.dao.StIvtIostorinvdtlIn; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.stream.Collectors; /* * @author ZZQ * @Date 2024/4/6 16:18 * 轻上重下策略 */ -public class WeightRuleHandler extends DecisionHandler { +@Service +public class WeightRuleHandler extends DecisionHandler { + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlInService iStIvtIostorinvdtlService; + + /** + * 载具扩展属性服务服务 + */ + @Autowired + private IMdPbStoragevehicleextService iMdPbStoragevehicleextService; + + /** + * 轻上重下策略:根据物品的重量 + * @param list :仓位集合 + * @param param:物料相关信息、出入类型:{ + * ioType: 出入类型 + * materialId: 物料标识 + * ... + * } + * @return List :仓位集合 + */ @Override - public List handler(List list, String param) { - return null; + public List handler(List list, String param) { + // 判断仓位是否为空 + if (ObjectUtil.isEmpty(list)) { + throw new BadRequestException("仓位集合为空!"); + } + + // 判断策略类型 + JSONObject jsonParam = JSONObject.parseObject(param, JSONObject.class); + + List resultList = new ArrayList<>(); + + switch (jsonParam.getString("ioType")) { + case "1": + // 入库策略 + resultList = inHandler(list,jsonParam); + break; + case "2": + // 出库策略 + resultList = outHandler(list,jsonParam); + break; + case "3": + // 通用策略 + break; + default: + throw new BadRequestException("策略类型错误!"); + } + return resultList; + } + + /** + * 入库策略:根据重量找对应的货位 + * @param attrList :仓位集合 + * @param jsonParam:materialId :物料标识、weight: 重量 + * @return List :仓位集合 + */ + private List inHandler(List attrList, JSONObject jsonParam) { + // 过滤对应的货位 + return attrList.stream() + .filter(row -> row.getWeight().doubleValue() <= jsonParam.getDoubleValue("weight")) + .sorted(Comparator.comparing(StIvtStructattr::getWeight)) + .collect(Collectors.toList()); + } + + /** + * 出库策略:默认出库 + * @param attrList :仓位物料信息 + * @param jsonParam:iostorinvdtlId : 出入库明细标识(此方法只根据时间匹配) + * @return List :需出库仓位集合 + */ + private List outHandler(List attrList, JSONObject jsonParam) { + + // 查询对应的出入库明细 + StIvtIostorinvdtlIn dtlDao = iStIvtIostorinvdtlService.getById(jsonParam.getString("iostorinvdtlId")); + + // 查询传入仓位物料中的数量是否满足明细中的数量 + List vehicleCodeIn = attrList.stream() + .map(StIvtStructattr::getVehicle_code) + .distinct() + .collect(Collectors.toList()); + + // 查询对应的载具物料 + List extList = iMdPbStoragevehicleextService.list( + new QueryWrapper().lambda() + .in(MdPbStoragevehicleext::getStoragevehicle_code, vehicleCodeIn) + ); + + double attrQty = extList.stream() + .map(MdPbStoragevehicleext::getQty) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .doubleValue(); + + if (dtlDao.getUnassign_qty().doubleValue() > attrQty) { + // 说明不满足所需重量则全部返回 + return attrList; + } + + // 需返回仓位物料集合 + List resultList = new ArrayList<>(); + // 满足所需数量: 根据巷道进行平均分配 + double unAssingQty = dtlDao.getUnassign_qty().doubleValue(); + + while (unAssingQty > 0) { + + // 添加需返回的仓位物料 + StIvtStructattr attrDao = attrList.get(0); + resultList.add(attrDao); + + // 减去未分配重量 + MdPbStoragevehicleext extDao = extList.stream() + .filter(row -> row.getStoragevehicle_code().equals(attrDao.getVehicle_code())) + .findFirst().orElse(null); + + if (ObjectUtil.isEmpty(extDao)) { + throw new BadRequestException("未查询到载具对应的物料【"+attrDao.getVehicle_code()+"】"); + } + + unAssingQty = NumberUtil.sub(unAssingQty,extDao.getQty().doubleValue()); + + // 移出此仓位物料,方便下一轮进行匹配 + attrList.remove(attrDao); + } + + return resultList; } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java index 6bc0a96a..ce03e8c3 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java @@ -11,7 +11,11 @@ import org.springframework.web.bind.annotation.RestController; *

* * @author generator +<<<<<<< HEAD:wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/controller/StIvtIostorinvController.java + * @since 2024-04-08 +======= * @since 2024-04-09 +>>>>>>> 4d92078988aaae9ca50b029b3d3f00ded39a2bfc:wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/controller/early_msg/AlmEarlyMsgController.java */ @RestController @RequestMapping("/almEarlyMsg") diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/controller/StIvtIostorinvdtlController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/controller/StIvtIostorinvdtlController.java index 27beb886..55e7109c 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/controller/StIvtIostorinvdtlController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/stor_manage/controller/StIvtIostorinvdtlController.java @@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.RestController; *

* * @author generator - * @since 2024-03-29 + * @since 2024-04-08 */ @RestController @RequestMapping("/stIvtIostorinvdtl") diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java index 2e328907..788e9918 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/system_manage/service/menu/impl/SysMenuServiceImpl.java @@ -461,4 +461,4 @@ public class SysMenuServiceImpl extends ServiceImpl impl baseMapper.getMenusByRole(systemType,category); return null; } -} +} \ No newline at end of file diff --git a/wms_pro/qd/src/views/wms/base_manage/strategy/AddDialog.vue b/wms_pro/qd/src/views/wms/base_manage/strategy/AddDialog.vue new file mode 100644 index 00000000..0382277e --- /dev/null +++ b/wms_pro/qd/src/views/wms/base_manage/strategy/AddDialog.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/wms_pro/qd/src/views/wms/base_manage/strategy/index.vue b/wms_pro/qd/src/views/wms/base_manage/strategy/index.vue new file mode 100644 index 00000000..c6713489 --- /dev/null +++ b/wms_pro/qd/src/views/wms/base_manage/strategy/index.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/wms_pro/qd/src/views/wms/base_manage/strategy/strategy.js b/wms_pro/qd/src/views/wms/base_manage/strategy/strategy.js new file mode 100644 index 00000000..7fd8782c --- /dev/null +++ b/wms_pro/qd/src/views/wms/base_manage/strategy/strategy.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/strategy', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/strategy/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/strategy', + method: 'put', + data + }) +} + +export function changeActive(data) { + return request({ + url: 'api/strategy/changeActive', + method: 'put', + data + }) +} + +export default { add, edit, del, changeActive }