diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java index 19b4010..55c7454 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/bst/ivt/stockingivt/service/impl/BstIvtStockingivtServiceImpl.java @@ -21,10 +21,10 @@ import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubeMovePointDto; import org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto; import org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil; +import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; -import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.nl.wms.ext.acs.service.WmsToAcsService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java index c91bc43..ed378b3 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdis.java @@ -22,7 +22,6 @@ import java.math.BigDecimal; @EqualsAndHashCode(callSuper = false) @TableName("st_ivt_iostorinvdis") @Builder -@AllArgsConstructor public class StIvtIostorinvdis implements Serializable { private static final long serialVersionUID = 1L; @@ -163,4 +162,5 @@ public class StIvtIostorinvdis implements Serializable { */ private String is_upload; + } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java index f00e7bf..e1acb61 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtIostorinvdtl.java @@ -18,9 +18,9 @@ import java.math.BigDecimal; * @since 2023-11-16 */ @Data -@Builder @EqualsAndHashCode(callSuper = false) @TableName("st_ivt_iostorinvdtl") +@Builder public class StIvtIostorinvdtl implements Serializable { private static final long serialVersionUID = 1L; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java index a7d2ef1..c397fc4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.IostorInvQuery; import org.springframework.data.domain.Pageable; import java.util.List; @@ -42,4 +43,11 @@ public interface StIvtIostorinvMapper extends BaseMapper { * @return 分配明细集合 */ List queryFirstInBox(String box_no); + + + /** + * 查询入库单 + */ + + List getIosInv(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml index 68aa42a..4298bc6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvMapper.xml @@ -118,6 +118,102 @@ + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java new file mode 100644 index 0000000..993aeb1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdMeMaterialBase.java @@ -0,0 +1,111 @@ +package org.nl.b_lms.storage_manage.md.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author zhouz + * @description / + * @date 2021-12-07 + **/ +@Data +@Builder +@EqualsAndHashCode(callSuper = false) +@TableName("md_me_materialbase") + +public class MdMeMaterialBase implements Serializable { + + /** + * 防止精度丢失 + */ + @TableId + private Long material_id; + + /** + * 物料编码 + */ + private String material_code; + + /** + * 物料名称 + */ + private String material_name; + + private String material_spec; + + private String material_model; + + private String english_name; + + private long base_unit_id; + + private long assist_unit_id; + private String base_unit_name; + + private String approve_fileno; + + private String print_no; + + /** + * 物料分类 + */ + private Long material_type_id; + + private Long len_unit_id; + + private BigDecimal length; + + private BigDecimal width; + + private BigDecimal height; + + /** + * 计量单位 + */ + private Long weight_unit_id; + + private BigDecimal gross_weight; + + private BigDecimal net_weight; + + private Long cubage_unit_id; + + private BigDecimal cubage; + + private String create_id; + + private String create_name; + + private String create_time; + + private String update_optid; + + private String update_optname; + + private String update_time; + + private String is_used_time; + + /** + * 是否启用 + */ + private String is_used; + + private String is_delete; + + private String ext_id; + + private String material_height_type; + + private Long ass_unit_id; + + private Long product_series; + + private Integer standing_time; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java new file mode 100644 index 0000000..990b536 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.java @@ -0,0 +1,21 @@ +package org.nl.b_lms.storage_manage.md.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.b_lms.storage_manage.md.dao.MdMeMaterialBase; + +/** + *

+ * 物料基本信息表表 Mapper 接口 + *

+ * + * @author generator + * @since 2023-11-16 + */ +public interface MdMeMaterialBaseMapper extends BaseMapper { + + + + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.xml new file mode 100644 index 0000000..82e022c --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdMeMaterialBaseMapper.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/rest/MaterialbaseController.java similarity index 96% rename from lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/rest/MaterialbaseController.java index 22763f4..1af9967 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/rest/MaterialbaseController.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/rest/MaterialbaseController.java @@ -1,12 +1,12 @@ -package org.nl.wms.basedata.master.rest; +package org.nl.b_lms.storage_manage.md.rest; import cn.hutool.core.map.MapUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.modules.logging.annotation.Log; import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; -import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java similarity index 97% rename from lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java index ed22cc1..6950d60 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/MaterialbaseService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/MaterialbaseService.java @@ -1,4 +1,4 @@ -package org.nl.wms.basedata.master.service; +package org.nl.b_lms.storage_manage.md.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java similarity index 98% rename from lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java rename to lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java index 75d5260..5d62a6b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/master/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MaterialbaseServiceImpl.java @@ -1,4 +1,4 @@ -package org.nl.wms.basedata.master.service.impl; +package org.nl.b_lms.storage_manage.md.service.impl; import cn.hutool.core.date.DateUtil; @@ -11,6 +11,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.WQL; @@ -18,7 +19,6 @@ import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.master.constant.MaterOptTypeEnum; import org.nl.wms.basedata.master.service.ClassstandardService; -import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.master.service.dto.MaterialbaseDto; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java new file mode 100644 index 0000000..55939ad --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java @@ -0,0 +1,73 @@ +package org.nl.wms.st.inbill.rest; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.inbill.service.RawAssistIStorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +@RestController +@RequiredArgsConstructor + +@RequestMapping("/api/in/rawAssist") +@Slf4j +public class RawAssistIStorController { + + @Autowired + private RawAssistIStorService rawAssistIStorService; + + @GetMapping + @Log("查询入库单据") + + //@PreAuthorize("@el.check('checkoutbill:list')") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(rawAssistIStorService.pageQuery(whereJson, page), HttpStatus.OK); + } + + @Log("删除出入库单") + + //@PreAuthorize("@el.check('sectattr:del')") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + rawAssistIStorService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getBillDtl") + @Log("查询入库单来源") + + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity getBillDtl(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(rawAssistIStorService.getBillDtl(whereJson, page), HttpStatus.OK); + } + + + + @PutMapping + @Log("修改入库单") + + //@PreAuthorize("@el.check('sectattr:edit')") + public ResponseEntity update(@RequestBody Map whereJson) { + rawAssistIStorService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + + @PostMapping("/divStruct") + @Log("分配货位") + + //@PreAuthorize("@el.check('materialtype:list')") + public ResponseEntity divStruct(@RequestBody Map whereJson) { + rawAssistIStorService.divStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java new file mode 100644 index 0000000..d60e7b6 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/RawAssistIStorService.java @@ -0,0 +1,29 @@ +package org.nl.wms.st.inbill.service; + +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +public interface RawAssistIStorService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + Map getBillDtl(Map whereJson, Pageable page); + + + void deleteAll(Long[] ids); + + void update(Map whereJson); + + void divStruct(Map whereJson); + + + JSONObject autoDis(JSONObject whereJson); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java new file mode 100644 index 0000000..4e5139f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/service/impl/RawAssistIStorServiceImpl.java @@ -0,0 +1,1109 @@ +package org.nl.wms.st.inbill.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; +import org.nl.b_lms.pdm.subpackagerelation.dao.mapper.PdmBiSubpackagerelationMapper; +import org.nl.b_lms.sch.tasks.TwoInTask; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdisMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdtlMapper; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.IostorInvQuery; +import org.nl.b_lms.storage_manage.md.dao.MdMeMaterialBase; +import org.nl.b_lms.storage_manage.md.dao.mapper.MdMeMaterialBaseMapper; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl; +import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; +import org.nl.wms.pda.mps.eum.RegionTypeEnum; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.st.inbill.service.RawAssistIStorService; +import org.nl.wms.st.inbill.service.StorPublicService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class RawAssistIStorServiceImpl implements RawAssistIStorService { + + + @Autowired + private PdmBiSubpackagerelationMapper pdmBiSubpackagerelationMapper; + + @Autowired + private StIvtIostorinvdisMapper stIvtIostorinvdisMapper; + + @Autowired + private StIvtIostorinvMapper stIvtIostorinvMapper; + + @Autowired + private StIvtIostorinvdtlMapper stIvtIostorinvdtlMapper; + + @Autowired + private MdMeMaterialBaseMapper mdMeMaterialBaseMapper; + + @Autowired + private PointService pointService; + + @Autowired + private InbillServiceImpl inbillService; + + @Autowired + private StorPublicService storPublicService; + + + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + JSONObject params = new JSONObject(); + + // 基础查询参数 + params.put("buss_type", whereJson.get("buss_type")); + params.put("stor_id", whereJson.get("stor_id")); + params.put("bill_type", whereJson.get("bill_type")); + params.put("create_mode", whereJson.get("create_mode")); + params.put("bill_status", whereJson.get("bill_status")); + + // 模糊/集合查询参数 + params.put("bill_code", whereJson.get("bill_code")); + params.put("sap_pcsn", whereJson.get("sap_pcsn")); + params.put("pcsn", whereJson.get("pcsn")); + params.put("box_no", whereJson.get("box_no")); + params.put("vbeln", whereJson.get("vbeln")); + + // 时间范围 + params.put("begin_time", whereJson.get("begin_time")); + params.put("end_time", whereJson.get("end_time")); + + // 用户权限仓库 + UserStorServiceImpl userStorService = new UserStorServiceImpl(); + String in_stor_id = userStorService.getInStor(); + + if (ObjectUtil.isNotEmpty(in_stor_id)) { + params.put("in_stor_id", in_stor_id); + } + + // 多值查询处理:空格转 IN 列表 + handleMultiValueParams(whereJson, params, "pcsn"); + handleMultiValueParams(whereJson, params, "sap_pcsn"); + handleMultiValueParams(whereJson, params, "box_no"); + handleMultiValueParams(whereJson, params, "vbeln"); + + // 分页参数 + int pageSize = page.getPageSize(); + int pageNumber = page.getPageNumber(); + int offset = (pageNumber) * pageSize; + params.put("offset", offset); + params.put("limit", pageSize); + + // 调用 MyBatis 查询 + List list = stIvtIostorinvMapper.getIosInv(params); + + + // 返回结果 + Map result = new HashMap<>(); + result.put("content", list); + result.put("totalElements", list.size()); + return result; + } + + /** + * 处理空格分隔的多值参数(转换为 SQL IN 条件) + */ + private void handleMultiValueParams(Map source, Map target, String key) { + String value = (String) source.get(key); + if (StrUtil.isNotEmpty(value)) { + if (value.contains(" ")) { + String[] values = value.split("\\s+"); + target.put(key + "_in", Arrays.asList(values)); + } else { + target.put(key, value); + } + } + } + + + @Override + public Map getBillDtl(Map whereJson, Pageable page) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + + String bill_code = (String) whereJson.get("bill_code"); + String material_search = (String) whereJson.get("material_search"); + String begin_time = (String) whereJson.get("begin_time"); + String end_time = (String) whereJson.get("end_time"); + String container_name = (String) whereJson.get("container_name"); + String package_box_sn = (String) whereJson.get("package_box_sn"); + String sap_pcsn = (String) whereJson.get("sap_pcsn"); + + // 固定参数 flag=2(如果数据库字段对应,否则可以忽略) + queryWrapper.eq("status", "0"); + + if (StrUtil.isNotEmpty(package_box_sn)) { + queryWrapper.eq("package_box_sn", package_box_sn); + } + if (StrUtil.isNotEmpty(container_name)) { + queryWrapper.eq("container_name", container_name); + } + if (StrUtil.isNotEmpty(bill_code)) { + queryWrapper.eq("bill_code", bill_code); + } + if (StrUtil.isNotEmpty(sap_pcsn)) { + queryWrapper.eq("sap_pcsn", sap_pcsn); + } + if (StrUtil.isNotEmpty(material_search)) { + queryWrapper.like("material_search", material_search); + } + if (StrUtil.isNotEmpty(begin_time)) { + String beginDate = begin_time.substring(0, 10); + String endDate = end_time.substring(0, 10); + queryWrapper.between("date_of_FG_inbound", beginDate, endDate); + } + + // 分页查询 + IPage iPage = new Page<>(page.getPageNumber(), page.getPageSize()); + iPage = pdmBiSubpackagerelationMapper.selectPage(iPage, queryWrapper); + + // 如果需要排序,可以使用如下方式 + queryWrapper.orderByDesc("date_of_FG_inbound").orderByDesc("package_box_sn"); + + // 返回结果 + JSONObject jo = new JSONObject(); + jo.put("content", iPage.getRecords()); + jo.put("totalElements", iPage.getTotal()); + return jo; + } + + + @Override + public void deleteAll(Long[] ids) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + WQLObject wo = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + for (Long id : ids) { + JSONObject param = new JSONObject(); + param.put("iostorinv_id", String.valueOf(id)); + param.put("is_delete", "1"); + param.put("update_optid", currentUserId); + param.put("update_optname", nickName); + param.put("update_time", now); + wo.update(param); + + JSONArray rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + String.valueOf(id) + "'").getResultJSONArray(0); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String box_no = row.getString("box_no"); + //将状态为包装的改为生成 + HashMap map = new HashMap<>(); + map.put("status", "0"); + WQLObject.getWQLObject("PDM_BI_SubPackageRelation").update(map, "package_box_SN = '" + box_no + "' AND status = '1'"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").delete(row); + } + } + } + + @Override + @Transactional + public void update(Map whereJson) { + String iostorinvId = (String) whereJson.get("iostorinv_id"); + + // 1. 查询主表记录 + StIvtIostorinv mainRecord = stIvtIostorinvMapper.selectById(iostorinvId); + if (mainRecord == null || !"10".equals(mainRecord.getBill_status())) { + throw new BadRequestException("主表状态必须为生成!"); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + // 2. 更新主表信息 + mainRecord.setUpdate_optid(Long.valueOf(currentUserId)); + mainRecord.setUpdate_optname(nickName); + mainRecord.setUpdate_time(now); + + stIvtIostorinvMapper.updateById(mainRecord); + + // 3. 删除原有关联的明细数据 + QueryWrapper dtlQueryWrapper = new QueryWrapper<>(); + dtlQueryWrapper.eq("iostorinv_id", iostorinvId); + stIvtIostorinvdtlMapper.delete(dtlQueryWrapper); + + QueryWrapper disQueryWrapper = new QueryWrapper<>(); + disQueryWrapper.eq("iostorinv_id", iostorinvId); + List disList = stIvtIostorinvdisMapper.selectList(disQueryWrapper); + + // 4. 修改包装关系的状态 + // 提前判断 bill_type + String billType = (String) whereJson.get("bill_type"); + String targetStatus = "0003".equals(billType) ? "3" : "0"; + + // 收集所有 boxNo + List boxNoList = disList.stream() + .map(StIvtIostorinvdis::getBox_no) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + + if (boxNoList.isEmpty()) { + return; + } + + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.in("package_box_sn", boxNoList) + .eq("status", "1"); + + // 准备更新内容 + Map updateMap = Collections.singletonMap("status", targetStatus); + + PdmBiSubpackagerelation pdmBiSubpackagerelation = new PdmBiSubpackagerelation(); + pdmBiSubpackagerelation.setStatus(targetStatus); + // 单次更新全部符合条件的数据 + pdmBiSubpackagerelationMapper.update(pdmBiSubpackagerelation, wrapper); + + // 5. 删除旧的 dis 记录 + stIvtIostorinvdisMapper.delete(disQueryWrapper); + + // 6. 插入新明细 + @SuppressWarnings("unchecked") + ArrayList> rows = (ArrayList>) whereJson.get("tableData"); + int index = 0; + + for (HashMap row : rows) { + + + // 获取物料信息 + String productName = row.get("product_name"); + QueryWrapper materialWrapper = new QueryWrapper<>(); + materialWrapper.eq("material_code", productName); + MdMeMaterialBase material = mdMeMaterialBaseMapper.selectOne(materialWrapper); + + if (material == null) { + throw new BadRequestException("LMS系统不存在物料:【" + productName + "】"); + } + + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getBase_unit_id() + "'").uniqueResult(0); + // 构建明细数据 + Long iostorinvdtlId = IdUtil.getLongId(); + StIvtIostorinvdtl dtl = StIvtIostorinvdtl.builder() + .iostorinvdtl_id(iostorinvdtlId) + .iostorinv_id(Long.valueOf(iostorinvId)) + .seq_no(BigDecimal.valueOf(++index)) + .material_id(material.getMaterial_id()) + .pcsn(row.get("container_name")) + .bill_status("10") + .quality_scode("01") + .qty_unit_id(material.getBase_unit_id()) + .assign_qty(new BigDecimal(row.get("net_weight"))) + .plan_qty(new BigDecimal(row.get("net_weight"))) + .box_no(row.get("package_box_sn")).build(); + + stIvtIostorinvdtlMapper.insert(dtl); + + // 构建 dis 数据 + StIvtIostorinvdis dis = StIvtIostorinvdis.builder() + .iostorinvdis_id(IdUtil.getLongId()) + .iostorinv_id(Long.valueOf(iostorinvId)) + .iostorinvdtl_id(iostorinvdtlId) + .seq_no(new BigDecimal(1)) + .material_id(material.getMaterial_id()) + .pcsn(row.get("container_name")) + .box_no(row.get("package_box_sn")) + .work_status("00") + .quality_scode(row.get("quality_scode")) + .qty_unit_id(material.getBase_unit_id()) + .qty_unit_name(unit.getString("unit_name")) + .plan_qty(new BigDecimal(row.get("plan_qty"))).build(); + + + stIvtIostorinvdisMapper.insert(dis); + + // 更新包装状态 + PdmBiSubpackagerelation pdmBiSubpackagerelation2 = new PdmBiSubpackagerelation(); + pdmBiSubpackagerelation2.setStatus("1"); + + QueryWrapper updateWrapper = new QueryWrapper<>(); + updateWrapper.eq("package_box_sn", dis.getBox_no()).eq("status", "0"); + + pdmBiSubpackagerelationMapper.update(pdmBiSubpackagerelation2, updateWrapper); + } + } + + + + @Transactional(rollbackFor = Exception.class) + @Override + public void divStruct(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String sect_id = ""; + String sect_code = ""; + String sect_name = ""; + String struct_id = ""; + String struct_code = ""; + String struct_name = ""; + ArrayList rows = (ArrayList) whereJson.get("tableMater"); + JSONObject whereJson2 = JSONObject.parseObject(JSON.toJSONString(whereJson)); + HashMap map = rows.get(0); + + Boolean auto_div = false; + if (whereJson2.containsKey("auto_div")) { + auto_div = whereJson2.getBoolean("auto_div"); + } + //判断该载具是否已经分配货位或者起点 + JSONArray now_dis_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "17").addParam("box_no", map.get("box_no")).process().getResultJSONArray(0); + if (now_dis_rows.size() > 0 && !auto_div) { + throw new BadRequestException("该木箱已经分配过货位,无法继续分配!"); + } + + String point_code = map.get("point_code"); + if (StrUtil.isNotEmpty(point_code)) { + HashMap point_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode(point_code); + point_map.put("point_code", pointDto.getPoint_code()); + point_map.put("point_id", pointDto.getPoint_id() + ""); + point_map.put("point_name", pointDto.getPoint_name()); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + } + + Boolean checked = whereJson2.getBoolean("checked"); + //是否分配货位 + if (ObjectUtil.isNotEmpty(checked) && checked) { + JSONObject jo_form = new JSONObject(); + jo_form.put("box_no", map.get("box_no")); + JSONObject struct_jo = new JSONObject(); + if (whereJson.containsKey("sect_id")) { + String need_sect = (String) whereJson.get("sect_id"); + JSONObject need_sect_jo = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_id = '" + need_sect + "'").uniqueResult(0); + //判断是否为主存区,主存区调用自动分配,虚拟区调用普通查询 + if (StrUtil.isNotEmpty(need_sect) && !"00".equals(need_sect_jo.getString("sect_type_attr"))) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0); + // 如果为空则扩容 + if (ObjectUtil.isEmpty(struct_jo)) { + JSONObject jsonParam = new JSONObject(); + jsonParam.put("sect_id", whereJson.get("sect_id")); + jsonParam.put("stor_id", whereJson.get("stor_id")); + jsonParam.put("num", 50); + + StructattrServiceImpl bean = SpringContextHolder.getBean(StructattrServiceImpl.class); + bean.oneCreate(jsonParam); + + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("sect_id = '" + need_sect + "' AND lock_type = '1' AND is_delete = '0' AND IFNULL( storagevehicle_code, '' ) = ''").uniqueResult(0); + } + } else { + jo_form.put("sect_id", whereJson.get("sect_id")); + struct_jo = this.autoDis(jo_form); + } + } else { + throw new BadRequestException("请选择需要分配的库区!"); + } + + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到适用仓位!"); + } + sect_id = struct_jo.getString("sect_id"); + sect_code = struct_jo.getString("sect_code"); + sect_name = struct_jo.getString("sect_name"); + struct_id = struct_jo.getString("struct_id"); + struct_code = struct_jo.getString("struct_code"); + struct_name = struct_jo.getString("struct_name"); + } else { + //更新入库分配表仓位相关字段 + + // 校验仓位是否满足此木箱高度 + JSONObject jsonSub = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + map.get("box_no") + "'").uniqueResult(0); + double box_high = jsonSub.getDoubleValue("box_high"); + + JSONObject jsonAttr = WQLObject.getWQLObject("st_ivt_structattr").query("struct_code = '" + map.get("struct_code") + "'").uniqueResult(0); + + // 入库木箱下限 + String in_download_box_high = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("in_download_box_high").getValue(); + // 入库木箱上线 + String in_up_box_high = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("in_up_box_high").getValue(); + + if (Double.parseDouble(in_download_box_high) < box_high && box_high <= Double.parseDouble(in_up_box_high)) { + if (StrUtil.equals(jsonAttr.getString("layer_num"), "3")) { + if (box_high > jsonAttr.getDoubleValue("height")) { + throw new BadRequestException("木箱高度不符,请检查!"); + } + } else if (StrUtil.equals(jsonAttr.getString("layer_num"), "1")) { + if (box_high > Double.parseDouble(in_download_box_high)) { + throw new BadRequestException("木箱高度不符,请检查!"); + } + } + } + + if (box_high > Double.parseDouble(in_up_box_high)) { + throw new BadRequestException("木箱高度不符,请检查!"); + } + + sect_id = map.get("sect_id"); + sect_code = map.get("sect_code"); + sect_name = map.get("sect_name"); + struct_id = map.get("struct_id"); + struct_code = map.get("struct_code"); + struct_name = map.get("struct_name"); + } + HashMap dis_map = new HashMap(); + dis_map.put("sect_id", sect_id); + dis_map.put("sect_code", sect_code); + dis_map.put("sect_name", sect_name); + dis_map.put("struct_id", struct_id); + dis_map.put("struct_code", struct_code); + dis_map.put("struct_name", struct_name); + + //锁定货位 + JSONObject lock_map = new JSONObject(); + lock_map.put("end_point", struct_code); + //查询主表信息 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + lock_map.put("inv_type", mst.get("bill_type")); + lock_map.put("inv_id", mst.get("iostorinv_id")); + lock_map.put("inv_code", mst.get("bill_code")); + inbillService.operatePoint("0", lock_map); + + //判断起点是否不为空 + JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").uniqueResult(0); + + JSONObject sect_jo = WQLObject.getWQLObject("st_ivt_sectattr").query("sect_id ='" + sect_id + "'").uniqueResult(0); + boolean is_virtual = false; + if ("09".equals(sect_jo.getString("sect_type_attr"))) { + is_virtual = true; + String task_id = cn.hutool.core.util.IdUtil.getSnowflake(1, 1).nextId() + ""; + dis_map.put("task_id", task_id); + dis_map.put("work_status", "01"); + } + if (StrUtil.isNotEmpty(ios_dis.getString("point_id")) && !is_virtual) { + //创建任务并下发 + TwoInTask task = new TwoInTask(); + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "010501"); + task_form.put("start_device_code", map.get("point_code")); + task_form.put("next_device_code", struct_code); + task_form.put("vehicle_code", map.get("box_no")); + task_form.put("storagevehicle_type", map.get("storagevehicle_type")); + String task_id = task.createTask(task_form); + // 下发 + task.immediateNotifyAcs(task_id); + /* if (whereJson.containsKey("auto_issue")) { + }*/ + dis_map.put("task_id", task_id); + dis_map.put("work_status", "01"); + } + + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(dis_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + + //修改库存 + //直接取出入库分配表的库存 + JSONArray dis_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").getResultJSONArray(0); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_jo = dis_rows.getJSONObject(i); + JSONObject i_form = new JSONObject(); + i_form.put("struct_id", dis_jo.getString("struct_id")); + i_form.put("material_id", dis_jo.getString("material_id")); + i_form.put("pcsn", dis_jo.getString("pcsn")); + i_form.put("change_qty", dis_jo.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("quality_scode", "01"); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_jo.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_jo.getString("qty_unit_name")); + storPublicService.IOStor(i_form, "31"); + + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "'").uniqueResult(0); + if (StrUtil.isNotEmpty(ios_dis.getString("point_id")) || is_virtual) { + if (dtl_jo.getDoubleValue("unassign_qty") == 0) { + //判断该明细下是否还存在未分配货位的分配明细 + JSONArray disdiv_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "' AND (struct_id = '' OR struct_id is null) AND (point_id = '' OR point_id is null)").getResultJSONArray(0); + if (disdiv_rows.size() == 0) { + dtl_jo.put("bill_status", "40"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + //判断主表下的明细是否都为40 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + dis_jo.getString("iostorinv_id") + "' AND bill_status < '40'").getResultJSONArray(0); + if (dtl_rows.size() == 0) { + mst_jo.put("bill_status", "40"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } else { + mst_jo.put("bill_status", "30"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + } + } + } else { + dtl_jo.put("bill_status", "30"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_jo); + mst_jo.put("bill_status", "30"); + mst_jo.put("dis_optid", currentUserId); + mst_jo.put("dis_optname", nickName); + mst_jo.put("dis_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + } + //如果是虚拟区,直接更新完成分配任务 + if (is_virtual) { + JSONObject dis_form = new JSONObject(); + dis_form.put("task_id", dis_map.get("task_id")); + inbillService.confirmDis(dis_form); + } + } + + @Override + public JSONObject autoDis(JSONObject whereJson) { + /* + * 分配逻辑: + * 1、先查找该木箱内属于什么物料、订单,定位到具体的块、排,查看是否存在空位 + * a、存在的话,优先放在这一块这一排中(遍历) + * b、不存在则根据该订单物料大概数量、选择数量相近的一个空巷道 + * 1)存在空巷道 + * 2)不存在,则找一个双通有空位置、数量相近的巷道 + * */ + + JSONObject struct_jo = new JSONObject(); + + String box_no = whereJson.getString("box_no"); + + String sect_id = whereJson.getString("sect_id"); + + JSONObject sub_jo = WQLObject.getWQLObject("pdm_bi_subpackagerelation").query("package_box_sn = '" + box_no + "' AND status < 3").uniqueResult(0); + + String material_code = sub_jo.getString("product_name"); + + String sale_order_name = sub_jo.getString("sale_order_name"); + + HashMap row_map = new HashMap<>(); + row_map.put("material_code", material_code); + row_map.put("sale_order_name", sale_order_name); + row_map.put("sect_id", sect_id); + row_map.put("flag", "111"); + + // 获取系统参数入库到第几层 0-3层都可 1-1层 2-2层 3-3层 + String in_layer_num; + + /* + * 判断木箱高度能入第几层: + * 1.低于650mm 优先入1层 没位置在入 2/3层 + * 2.650mm > 木箱 <= 800mm, 只能入二、三层 + * 3.第三层要根据实际高度分配货位 + */ + // 入库木箱下限 + String in_download_box_high = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("in_download_box_high").getValue(); + // 入库木箱上限 + String in_up_box_high = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("in_up_box_high").getValue(); + + double box_high = sub_jo.getDoubleValue("box_high"); + + if (Double.parseDouble(in_download_box_high) < box_high && box_high <= Double.parseDouble(in_up_box_high)) { + // 只能入到 2/3层 + in_layer_num = "('2','3')"; + } else { + in_layer_num = ""; + } + + // 木箱高度大于入库上限 报错 + if (box_high > Double.parseDouble(in_up_box_high)) { + throw new BadRequestException("木箱:" + sub_jo.getString("package_box_sn") + "高度不符合要求,请检查!"); + } + row_map.put("in_layer_num", in_layer_num); + + //查询到当前可用的巷道 + JSONArray rowArr2 = new JSONArray(); + + if (box_high <= Double.parseDouble(in_download_box_high)) { + // 优先入1层 + row_map.put("layer_num", "1"); + + rowArr2 = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + if (ObjectUtil.isEmpty(rowArr2)) { + // 如果1层没有相同物料订单号的则找有空位的一排 + row_map.put("flag", "1111"); + rowArr2 = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + // 如果为空则进行扩容 + if (ObjectUtil.isEmpty(rowArr2)) { + boolean is_expansion = updateStructSectOne(); + + if (is_expansion) { + // 如果为true则在进行查询一次 + rowArr2 = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + } + } + } + } + + if (ObjectUtil.isEmpty(rowArr2)) { + row_map.put("layer_num", ""); + row_map.put("flag", "111"); + rowArr2 = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + } + + JSONArray rowArr = new JSONArray(); + for (int i = 0; i < rowArr2.size(); i++) { + JSONObject jo = rowArr2.getJSONObject(i); + String block_num = jo.getString("block_num"); + String row_num = jo.getString("row_num"); + String placement_type = jo.getString("placement_type"); + row_map.put("block_num", block_num); + row_map.put("row_num", row_num); + row_map.put("placement_type", placement_type); + row_map.put("flag", "112"); + JSONObject row_jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().uniqueResult(0); + int num = row_jo.getIntValue("num"); + if (num > 0) { + rowArr.add(jo); + } + } + + for (int i = 0; i < rowArr.size(); i++) { + JSONObject row_jo = rowArr.getJSONObject(i); + + String block_num = row_jo.getString("block_num"); + String row_num = row_jo.getString("row_num"); + String placement_type = row_jo.getString("placement_type"); + + // 判断此排是否有除:入库锁、移入锁以外的锁 + JSONArray isLock = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(isLock)) { + if ("02".equals(placement_type)) { + // 左通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else if ("03".equals(placement_type)) { + // 右通 + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + // 双通 + // 判断这一排全部是否是空位 + List attrList = WQLObject.getWQLObject("st_ivt_structattr") + .query("block_num = '" + block_num + "' and placement_type = '" + placement_type + "' and row_num = '" + row_num + "' and is_used = '1' and is_delete = '0' order by out_order_seq DESC") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 如果这排全部是空位 并且没有被锁定则返回一个货位 + boolean is_all = attrList.stream() + .allMatch(row -> ObjectUtil.isEmpty(row.getString("storagevehicle_code")) + && row.getString("lock_type").equals("1") + ); + + if (is_all) { + struct_jo = attrList.get(0); + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } + + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox)) { + String out_order_seq = jsonDescBox.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct)) { + struct_jo = jsonDescStruct; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox)) { + String out_order_seq2 = jsonAscBox.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "'AND placement_type = '" + placement_type + "' AND row_num = '" + row_num + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct)) { + struct_jo = jsonAscStruct; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + // 说明这排有任务在执行,新开一排 + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "13").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num").process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num2 = empty_row.getString("block_num"); + String row_num2 = empty_row.getString("row_num"); + String placement_type2 = empty_row.getString("placement_type"); + + if ("02".equals(placement_type)) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num2 + "' AND row_num = '" + row_num2 + "' AND placement_type = '" + placement_type2 + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } + } else { + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } + } + } else { + continue; + } + } + } + } + } + } + } else { + continue; + } + } + + if (ObjectUtil.isEmpty(rowArr) || ObjectUtil.isEmpty(struct_jo)) { + //如果不存在相同订单物料的巷道 或者未找到相同物料订单号巷道中的货位 则 + + //根据分切计划查询该订单物料大概还有多少未入 + row_map.put("flag", "12"); + JSONArray plan_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(plan_rows)) { + plan_rows = new JSONArray(); + } + //查询该销售订单及行号有多少个生成状态的箱子 + row_map.put("flag", "27"); + JSONArray box_rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + if (ObjectUtil.isEmpty(box_rows)) { + box_rows = new JSONArray(); + } + int box_num = (int) Math.ceil(plan_rows.size() / 2) + box_rows.size(); + + //查询数量与订单物料箱子数量相近的一排 + JSONObject empty_row = WQL.getWO("QST_IVT_RAWASSISTISTOR") + .addParam("in_layer_num", in_layer_num) + .addParam("sect_id", sect_id) + .addParam("box_height", String.valueOf(box_high)) + .addParam("flag", "13") + .addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num),block_num,row_num") + .process().uniqueResult(0); + if (ObjectUtil.isNotEmpty(empty_row)) { + String block_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + if ("02".equals(placement_type)) { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "' AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq ASC").uniqueResult(0); + + } else { + struct_jo = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num + "' AND row_num = '" + row_num + "' AND placement_type = '" + placement_type + "'AND is_delete = '0' AND is_used = '1' AND lock_type = '1' order by out_order_seq DESC").uniqueResult(0); + } + } else { + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("in_layer_num", in_layer_num).addParam("sect_id", sect_id).addParam("flag", "14").addParam("sql_str", " ORDER BY abs(" + box_num + "-a.struct_num)").process().getResultJSONArray(0); + for (int j = 0; j < haveArr.size(); j++) { + JSONObject have_row = haveArr.getJSONObject(j); + + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + JSONArray isLock2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type not in ('1','2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1'").getResultJSONArray(0); + + if (ObjectUtil.isEmpty(isLock2)) { + // 先倒序找到第一个木箱、判断上一个是否有货位 + JSONObject jsonDescBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq DESC").uniqueResult(0); + + JSONObject jsonDescStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonDescBox2)) { + String out_order_seq = jsonDescBox2.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } else { + // 先倒序找到第一个入库锁或者移库锁、判断上一个是否有货位 + JSONObject jsonDescEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq DESC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonDescEmpStruct)) { + String out_order_seq = jsonDescEmpStruct.getString("out_order_seq"); + jsonDescStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq > '" + out_order_seq + "' order by out_order_seq ASC").uniqueResult(0); + } + } + + if (ObjectUtil.isNotEmpty(jsonDescStruct2)) { + struct_jo = jsonDescStruct2; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } else { + // 没有就正序找到第一个物料、判断上一个是否有货位 + JSONObject jsonAscBox2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') <> '' order by out_order_seq ASC").uniqueResult(0); + + JSONObject jsonAscStruct2 = new JSONObject(); + if (ObjectUtil.isNotEmpty(jsonAscBox2)) { + String out_order_seq2 = jsonAscBox2.getString("out_order_seq"); + // 上一个货位顺序号 + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } else { + JSONObject jsonAscEmpStruct = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type in ('2','7') AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' order by out_order_seq ASC").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonAscEmpStruct)) { + String out_order_seq2 = jsonAscEmpStruct.getString("out_order_seq"); + jsonAscStruct2 = WQLObject.getWQLObject("st_ivt_structattr").query("lock_type = '1' AND block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' AND IFNULL(storagevehicle_code,'') = '' and out_order_seq < '" + out_order_seq2 + "' order by out_order_seq DESC").uniqueResult(0); + } + + } + if (ObjectUtil.isNotEmpty(jsonAscStruct2)) { + struct_jo = jsonAscStruct2; + + // 判断是否是第三层 且高度是否超过仓位高度 + if (StrUtil.equals(struct_jo.getString("layer_num"), "3")) { + if (box_high > struct_jo.getDoubleValue("height")) { + struct_jo = null; + continue; + } + } + break; + } + } + } else { + continue; + } + } + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的仓位!"); + } + return struct_jo; + } + + /** + * 1层主存区扩容:空托盘区 ==> 主存区 + */ + public boolean updateStructSectOne() { + WQLObject attr = WQLObject.getWQLObject("st_ivt_structattr"); + WQLObject point = WQLObject.getWQLObject("sch_base_point"); + /* + * 1.找空托盘区空的一排进行扩容 + * + */ + // 找空托盘区空的一排 + List rowList = WQL.getWO("ST_UPDATESTRUCTSECTONE_01").addParam("flag", "1") + .process().getResultJSONArray(0).toJavaList(JSONObject.class); + + // 如果没有空排或者空排低于2排则不允许扩容 + if (ObjectUtil.isEmpty(rowList) || rowList.size() <= 2) { + log.info("空托盘区需预留2排空位,不容许扩容!"); + return false; + } + + try { + JSONObject json = rowList.get(0); + + // 更新仓位为主存区 + JSONObject jsonParam = new JSONObject(); + jsonParam.put("sect_id", RegionTypeEnum.ZC01.getId()); + jsonParam.put("sect_code", "ZC01"); + jsonParam.put("sect_name", RegionTypeEnum.ZC01.getName()); + attr.update(jsonParam,"sect_code = 'KTP01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '1'"); + + // 更新点位为主存区域 + jsonParam.put("region_id", RegionTypeEnum.ZC01.getId()); + jsonParam.put("region_code", "ZC01"); + jsonParam.put("region_name", RegionTypeEnum.ZC01.getName()); + point.update(jsonParam,"region_code = 'KTP01' AND block_num = '"+json.getString("block_num")+"' AND row_num = '"+json.getString("row_num")+"' AND layer_num = '1'"); + } catch (Exception e) { + System.out.println("1层主存区扩容失败:"+e.getMessage()); + return false; + } + return true; + } + +} + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/IostordailyServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/IostordailyServiceImpl.java index 15369b7..cea5ab1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/IostordailyServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/IostordailyServiceImpl.java @@ -8,10 +8,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.md.service.MaterialbaseService; import org.nl.modules.wql.WQL; import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.master.service.ClassstandardService; -import org.nl.wms.basedata.master.service.MaterialbaseService; import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service;