From b83498741d60d4b670db5834fb69c61f610cf2b5 Mon Sep 17 00:00:00 2001 From: liuxy Date: Sat, 25 Mar 2023 17:14:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../st/service/impl/SectattrServiceImpl.java | 3 + .../nl/wms/basedata/st/wql/QST_STOR_ATTR.wql | 4 + .../org/nl/wms/sch/rest/RegionController.java | 8 + .../org/nl/wms/sch/service/RegionService.java | 8 + .../sch/service/impl/PointServiceImpl.java | 2 +- .../sch/service/impl/RegionServiceImpl.java | 34 + .../org/nl/wms/sch/wql/QSCH_REGION_01.wql | 33 + .../wms/st/in/rest/ProductInController.java | 204 ++ .../wms/st/in/service/ProductInService.java | 91 + .../in/service/impl/ProductInServiceImpl.java | 1701 +++++++++++++++++ .../nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql | 134 ++ mes/qd/src/api/wms/sch/region.js | 10 +- mes/qd/src/views/wms/pub/PointDialog.vue | 202 ++ .../src/views/wms/st/productIn/AddDialog.vue | 348 ++++ mes/qd/src/views/wms/st/productIn/AddDtl.vue | 182 ++ .../src/views/wms/st/productIn/DivDialog.vue | 573 ++++++ .../wms/st/productIn/StructUpdateDialog.vue | 268 +++ .../src/views/wms/st/productIn/ViewDialog.vue | 287 +++ mes/qd/src/views/wms/st/productIn/index.vue | 321 ++++ .../src/views/wms/st/productIn/productin.js | 220 +++ 20 files changed, 4631 insertions(+), 2 deletions(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql create mode 100644 mes/qd/src/views/wms/pub/PointDialog.vue create mode 100644 mes/qd/src/views/wms/st/productIn/AddDialog.vue create mode 100644 mes/qd/src/views/wms/st/productIn/AddDtl.vue create mode 100644 mes/qd/src/views/wms/st/productIn/DivDialog.vue create mode 100644 mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue create mode 100644 mes/qd/src/views/wms/st/productIn/ViewDialog.vue create mode 100644 mes/qd/src/views/wms/st/productIn/index.vue create mode 100644 mes/qd/src/views/wms/st/productIn/productin.js diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java index 1ce8cb61..ab7b155e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/service/impl/SectattrServiceImpl.java @@ -169,6 +169,9 @@ public class SectattrServiceImpl implements SectattrService { String is_productstore = (String) whereJson.get("is_productstore"); String is_attachment = (String) whereJson.get("is_attachment"); String is_reversed = (String) whereJson.get("is_reversed"); + String stor_id = (String) whereJson.get("stor_id"); + stor_map.put("stor_id", stor_id); + if (!StrUtil.isEmpty(is_materialstore)) { stor_map.put("is_materialstore", is_materialstore); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql index 088b2ef5..ee205356 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/basedata/st/wql/QST_STOR_ATTR.wql @@ -21,6 +21,7 @@ 输入.is_productstore TYPEAS s_string 输入.is_attachment TYPEAS s_string 输入.is_reversed TYPEAS s_string + 输入.stor_id TYPEAS s_string [临时表] @@ -95,6 +96,9 @@ ENDOPTION OPTION 输入.is_reversed <> "" stor.is_reversed = 输入.is_reversed + ENDOPTION + OPTION 输入.stor_id <> "" + stor.stor_id = 输入.stor_id ENDOPTION ENDSELECT ENDQUERY diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java index 8727d465..c470ad07 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/rest/RegionController.java @@ -1,5 +1,6 @@ package org.nl.wms.sch.rest; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -79,5 +80,12 @@ public class RegionController { return new ResponseEntity<>(regionService.getPointTypeSelectByCode(region_code), HttpStatus.CREATED); } + @PostMapping("/getRegionSelect") + @Log("获取区域下拉框") + @ApiOperation("获取区域下拉框") + public ResponseEntity getRegionSelect(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(regionService.getRegionSelect(whereJson), HttpStatus.CREATED); + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java index 628b71a4..32bce07e 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/RegionService.java @@ -1,6 +1,7 @@ package org.nl.wms.sch.service; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import org.nl.wms.sch.service.dto.RegionDto; import org.springframework.data.domain.Pageable; @@ -74,4 +75,11 @@ public interface RegionService { * @return */ JSONArray getPointTypeSelectByCode(String region_code); + + /** + * 获取区域类型下拉框 + * @param + * @return JSONObject + */ + JSONObject getRegionSelect(JSONObject whereJson); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java index c47de2c5..ad54e35b 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/PointServiceImpl.java @@ -245,7 +245,7 @@ public class PointServiceImpl implements PointService { @Override public JSONArray getPoint(Map wherJson) { String area_type = (String) wherJson.get("area_type"); - JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("area_type IN (" + area_type + ") AND is_used = '1' AND is_delete = '0' order by point_code").getResultJSONArray(0); + JSONArray point_rows = WQLObject.getWQLObject("sch_base_point").query("region_code = '"+area_type+"' and is_used = '1' and is_delete = '0'").getResultJSONArray(0); return point_rows; } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java index 895f894c..384cdbf3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/service/impl/RegionServiceImpl.java @@ -166,4 +166,38 @@ public class RegionServiceImpl implements RegionService { return res; } + @Override + public JSONObject getRegionSelect(JSONObject whereJson) { + String stor_id = whereJson.getString("stor_id"); + JSONArray prodArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value",stor_id).process().getResultJSONArray(0); + + JSONArray new_ja = new JSONArray(); + for (int i = 0; i < prodArr.size(); i++) { + JSONObject json = prodArr.getJSONObject(i); + + JSONObject jsonMst = new JSONObject(); + jsonMst.put("value",json.getString("value")); + jsonMst.put("label",json.getString("label")); + + // 查询子类 + JSONArray DtlArr = WQL.getWO("QSCH_REGION_01").addParam("flag", "3").addParam("product_area", json.getString("value")).process().getResultJSONArray(0); + if (DtlArr.size() > 0) { + JSONArray sect_ja = new JSONArray(); + + for (int j = 0; j < DtlArr.size(); j++) { + JSONObject json2 = DtlArr.getJSONObject(j); + JSONObject sect_cas = new JSONObject(); + sect_cas.put("value", json2.getString("region_code")); + sect_cas.put("label", json2.getString("region_name")); + sect_ja.add(sect_cas); + } + jsonMst.put("children", sect_ja); + } + new_ja.add(jsonMst); + } + JSONObject jo = new JSONObject(); + jo.put("content", new_ja); + return jo; + } + } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql index 523cf075..a5232908 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/QSCH_REGION_01.wql @@ -16,6 +16,7 @@ 输入.flag TYPEAS s_string 输入.region_code TYPEAS s_string 输入.product_area TYPEAS s_string + 输入.value TYPEAS s_string [临时表] --这边列出来的临时表就会在运行期动态创建 @@ -57,3 +58,35 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + * + FROM + sys_dict + WHERE + code = 'product_area' + + OPTION 输入.value <> "" + value = 输入.value + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + * + FROM + sch_base_region + WHERE + 1=1 + + OPTION 输入.product_area <> "" + product_area = 输入.product_area + ENDOPTION + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java new file mode 100644 index 00000000..f6d3d05e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/rest/ProductInController.java @@ -0,0 +1,204 @@ +package org.nl.wms.st.in.rest; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.anno.Log; +import org.nl.wms.st.in.service.ProductInService; +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 +@Api(tags = "成品入库") +@RequestMapping("/api/in/productIn") +@Slf4j +public class ProductInController { + + private final ProductInService productInService; + + @GetMapping + @Log("查询入库单据") + @ApiOperation("查询入库单据") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(productInService.pageQuery(whereJson, page), HttpStatus.OK); + } + + @Log("删除出入库单") + @ApiOperation("删除出入库单") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + productInService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/getBillDtl") + @Log("查询入库单来源") + @ApiOperation("查询入库单来源") + public ResponseEntity getBillDtl(@RequestParam Map whereJson, Pageable page) { + return new ResponseEntity<>(productInService.getBillDtl(whereJson, page), HttpStatus.OK); + } + + @PostMapping() + @Log("新增入库单") + @ApiOperation("新增入库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson) { + productInService.insertDtl(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改入库单") + @ApiOperation("修改入库单") + public ResponseEntity update(@RequestBody JSONObject whereJson) { + productInService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/queryStor") + @Log("查询仓库") + @ApiOperation("查询仓库") + public ResponseEntity queryStor() { + return new ResponseEntity<>(productInService.queryStor(), HttpStatus.OK); + } + + @PostMapping("/getIODtl") + @Log("查询出入库单明细") + @ApiOperation("查询出入库单明细") + public ResponseEntity getIODtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productInService.getIODtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/commit") + @Log("出入单提交") + @ApiOperation("出入单提交") + public ResponseEntity commit(@RequestBody Map whereJson) { + productInService.commit(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getDisDtl") + @Log("查询入库分配明细") + @ApiOperation("查询入库分配明细") + public ResponseEntity getDisDtl(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(productInService.getDisDtl(whereJson), HttpStatus.OK); + } + + @PostMapping("/divStruct") + @Log("分配货位") + @ApiOperation("分配货位") + public ResponseEntity divStruct(@RequestBody Map whereJson) { + productInService.divStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/unDivStruct") + @Log("取消分配货位") + @ApiOperation("取消分配货位") + public ResponseEntity unDivStruct(@RequestBody Map whereJson) { + productInService.unDivStruct(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/divPoint") + @Log("设置起点") + @ApiOperation("设置起点") + public ResponseEntity divPoint(@RequestBody Map whereJson) { + productInService.divPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/queryTask") + @Log("查询任务") + @ApiOperation("查询任务") + public ResponseEntity queryTask(@RequestBody Map whereJson) { + return new ResponseEntity<>(productInService.queryTask(whereJson), HttpStatus.OK); + } + + @PostMapping("/delDis") + @Log("删除分配") + @ApiOperation("删除分配") + public ResponseEntity delDis(@RequestBody JSONObject whereJson) { + productInService.delDis(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/queryBoxMater") + @Log("查询箱内子卷") + @ApiOperation("查询箱内子卷") + public ResponseEntity queryBoxMater(@RequestBody JSONArray whereJson) { + + return new ResponseEntity<>(productInService.queryBoxMater(whereJson), HttpStatus.OK); + } + + @PostMapping("/updateTask") + @Log("变更任务") + @ApiOperation("变更任务") + public ResponseEntity updateTask(@RequestBody Map whereJson) { + productInService.updateTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/delTask") + @Log("删除任务") + @ApiOperation("删除任务") + public ResponseEntity delTask(@RequestBody Map whereJson) { + productInService.delTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/reIssueTask") + @Log("下发") + @ApiOperation("下发") + public ResponseEntity reIssueTask(@RequestBody Map whereJson) { + productInService.reIssueTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirmTask") + @Log("完成任务") + @ApiOperation("完成任务") + public ResponseEntity confirmTask(@RequestBody Map whereJson) { + productInService.confirmTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/cancelTask") + @Log("取消完成任务") + @ApiOperation("取消完成任务") + public ResponseEntity cancelTask(@RequestBody Map whereJson) { + productInService.cancelTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("完成单据") + @ApiOperation("完成单据") + public ResponseEntity confirm(@RequestBody Map whereJson) { + productInService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/backConfirm") + @Log("完成入库负单") + @ApiOperation("完成入库负单") + public ResponseEntity backConfirm(@RequestBody Map whereJson) { + productInService.backConfirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/autoDis") + @Log("自动分配") + @ApiOperation("自动分配") + public ResponseEntity autoDis(@RequestBody JSONObject whereJson) { + productInService.autoDis(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java new file mode 100644 index 00000000..13f89688 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/ProductInService.java @@ -0,0 +1,91 @@ +package org.nl.wms.st.in.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +public interface ProductInService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + Map getBillDtl(Map whereJson,Pageable page); + + /** + * 新增单据 + * @param whereJson / + * @return iostorinv_id + */ + String insertDtl (JSONObject whereJson); + + /** + * 删除单据 + * @param ids / + */ + void deleteAll(Long[] ids); + + void delDis(JSONObject whereJson); + + JSONArray queryBoxMater(JSONArray rows); + + /** + * 修改单据 + * @param whereJson / + */ + void update(JSONObject whereJson); + + void commit(Map whereJson); + + /** + * 查询出入库单明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getIODtl(JSONObject whereJson); + + void divStruct(Map whereJson); + + void unDivStruct(Map whereJson); + + void divPoint(Map whereJson); + + void updateTask(Map whereJson); + + void delTask(Map whereJson); + + void reIssueTask(Map whereJson); + + void confirmTask(Map whereJson); + + void cancelTask(Map whereJson); + + void confirm(Map whereJson); + + void backConfirm(Map whereJson); + + /** + * 查询入库分配明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getDisDtl(JSONObject whereJson); + + JSONArray queryTask(Map whereJson); + + JSONObject autoDis(JSONObject whereJson); + + JSONObject autoDisMove(JSONObject whereJson); + + /** + * 查询仓库 + * @return JSONArray + */ + JSONArray queryStor(); +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java new file mode 100644 index 00000000..e26979fd --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/ProductInServiceImpl.java @@ -0,0 +1,1701 @@ +package org.nl.wms.st.in.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; +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 lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.WQL; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.StructattrService; +import org.nl.wms.basedata.st.service.dto.StorattrDto; +import org.nl.wms.basedata.st.service.dto.StructattrDto; +import org.nl.wms.sch.service.PointService; +import org.nl.wms.sch.service.dto.PointDto; +import org.nl.wms.st.in.service.ProductInService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class ProductInServiceImpl implements ProductInService { + + private final StorattrService storattrService; + + private final StructattrService structattrService; + + private final PointService pointService; + + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String begin_time = MapUtil.getStr(whereJson, "begin_time"); + String end_time = MapUtil.getStr(whereJson, "end_time"); + String bill_status = MapUtil.getStr(whereJson, "bill_status"); + String bill_type = MapUtil.getStr(whereJson, "bill_type"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("stor_id",stor_id); + map.put("begin_time",begin_time); + map.put("end_time",end_time); + map.put("bill_status",bill_status); + map.put("bill_type",bill_type); + if (ObjectUtil.isNotEmpty(bill_code)) map.put("bill_code","%"+bill_code+"%"); + + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTIN_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "input_time desc"); + return jo; + } + + @Override + public Map getBillDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + 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"); + map.put("flag", "2"); + if (StrUtil.isNotEmpty(package_box_sn)) { + map.put("package_box_sn", package_box_sn); + } + if (StrUtil.isNotEmpty(container_name)) { + map.put("container_name", container_name); + } + if (StrUtil.isNotEmpty(bill_code)) { + map.put("bill_code", bill_code); + } + if (StrUtil.isNotEmpty(sap_pcsn)) { + map.put("sap_pcsn", sap_pcsn); + } + if (StrUtil.isNotEmpty(material_search)) { + map.put("material_search", "%" + material_search + "%"); + } + if (StrUtil.isNotEmpty(begin_time)) { + map.put("begin_time", begin_time.substring(0, 10)); + map.put("end_time", end_time.substring(0, 10)); + } + JSONObject jo = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "date_of_FG_inbound,package_box_sn desc"); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String insertDtl(JSONObject whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONArray rows = whereJson.getJSONArray("tableData"); + + // 插入主表 + JSONObject io_mst = new JSONObject(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + double total_qty = 0; + + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("bill_code", bill_code); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("bill_status", whereJson.getString("bill_status")); + io_mst.put("input_optid", currentUserId + ""); + io_mst.put("input_optname", nickName); + io_mst.put("input_time", now); + io_mst.put("update_optid", currentUserId + ""); + io_mst.put("update_optname", nickName); + io_mst.put("update_time", now); + io_mst.put("is_delete", "0"); + + for (int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(row); + + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").insert(dis); + } + io_mst.put("total_qty", total_qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(io_mst); + + return iostorinv_id; + } + + @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); + } + } + + @Override + public void delDis(JSONObject whereJson) { + String box_no = whereJson.getString("package_box_sn"); + //将状态为包装的改为生成 + HashMap map = new HashMap<>(); + map.put("status", "0"); + WQLObject.getWQLObject("PDM_BI_SubPackageRelation").update(map, "package_box_SN = '" + box_no + "' AND status = '1'"); + } + + @Override + public JSONArray queryBoxMater(JSONArray rows) { + JSONArray total_rows = new JSONArray(); + HashSet set = new HashSet<>(); + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.getJSONObject(i); + String package_box_sn = row.getString("package_box_sn"); + set.add(package_box_sn); + } + for (String s : set) { + JSONArray maters = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("flag", "16").addParam("package_box_sn", s).process().getResultJSONArray(0); + for (int i = 0; i < maters.size(); i++) { + JSONObject mater = maters.getJSONObject(i); + total_rows.add(mater); + } + } + return total_rows; + } + + @Override + public void update(JSONObject whereJson) { + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject wo_dis = WQLObject.getWQLObject("st_ivt_iostorinvdis"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + + //先删除该单据下的所有明细 + String iostorinv_id = whereJson.getString("iostorinv_id"); + wo_dtl.delete("iostorinv_id = '" + iostorinv_id + "'"); + wo_dis.delete("iostorinv_id = '" + iostorinv_id + "'"); + + JSONArray rows = whereJson.getJSONArray("tableData"); + + // 更新主表 + JSONObject io_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + double total_qty = 0; + io_mst.put("iostorinv_id", iostorinv_id); + io_mst.put("io_type", "0"); + io_mst.put("bill_type", whereJson.getString("bill_type")); + io_mst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + + JSONObject json = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + io_mst.put("product_id", json.getString("dict_id")); + io_mst.put("product_code", json.getString("value")); + io_mst.put("product_name", json.getString("label")); + io_mst.put("detail_count", rows.size()); + io_mst.put("remark", whereJson.get("remark")); + io_mst.put("update_optid", currentUserId + ""); + io_mst.put("update_optname", nickName); + io_mst.put("update_time", now); + + for (int i = 0; i < rows.size(); i++) { + // 插入明细表 + JSONObject row = rows.getJSONObject(i); + row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + row.put("iostorinv_id", iostorinv_id); + row.put("seq_no", (i + 1)); + JSONObject material = WQLObject.getWQLObject("md_me_materialbase").query("material_code = '" + row.get("material_code") + "'").uniqueResult(0); + row.put("material_id", material.getString("material_id")); + row.put("pcsn", row.getString("pcsn")); + row.put("bill_status", "10"); + row.put("quality_scode", "01"); + row.put("qty_unit_id", material.getString("base_unit_id")); + JSONObject unit = WQLObject.getWQLObject("md_pb_measureunit").query("measure_unit_id = '" + material.getString("base_unit_id") + "'").uniqueResult(0); + row.put("qty_unit_name", unit.getString("unit_name")); + row.put("assign_qty", row.getDoubleValue("plan_qty")); + row.put("plan_qty", row.getDoubleValue("plan_qty")); + String plan_qty = row.getString("plan_qty"); + total_qty += Double.parseDouble(plan_qty); + + wo_dtl.insert(row); + + // 插入分配表 + JSONObject dis = new JSONObject(); + dis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + dis.put("iostorinv_id", iostorinv_id); + dis.put("iostorinvdtl_id", row.get("iostorinvdtl_id")); + dis.put("seq_no", 1); + dis.put("material_id", row.getString("material_id")); + dis.put("pcsn", row.getString("pcsn")); + dis.put("quality_scode", row.getString("quality_scode")); + dis.put("work_status", "00"); + dis.put("qty_unit_id", material.getString("base_unit_id")); + dis.put("qty_unit_name", unit.getString("unit_name")); + dis.put("plan_qty", row.getString("plan_qty")); + wo_dis.insert(dis); + } + io_mst.put("total_qty", total_qty); + wo_mst.update(io_mst); + } + + @Override + public void commit(Map whereJson) { + String iostorinv_id = (String) whereJson.get("iostorinv_id"); + JSONObject mst = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (!mst.getString("bill_status").equals("10")) { + throw new BadRequestException("请选择单据状态为生成的进行提交!"); + } + HashMap map = new HashMap<>(); + map.put("bill_status", "20"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + + String now = DateUtil.now(); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", nickName); + map.put("update_time", now); + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + iostorinv_id + "'"); + } + + @Override + public JSONArray getIODtl(JSONObject whereJson) { + String bill_code = whereJson.getString("bill_code"); + JSONArray ja = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "2").addParam("bill_code", bill_code) + .process().getResultJSONArray(0); + return ja; + } + + @Override + public JSONArray getDisDtl(JSONObject whereJson) { + //查询该明细下的所有入库分配明细 + JSONArray resultJSONArray = WQL.getWO("QST_IVT_PRODUCTIN_01").addParam("flag", "3").addParam("iostorinvdtl_id", whereJson.get("iostorinvdtl_id")).process().getResultJSONArray(0); + return resultJSONArray; + } + + @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) && !need_sect_jo.getString("sect_type_attr").equals("00")) { + 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 { + //更新入库分配表仓位相关字段 + 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 (sect_jo.getString("sect_type_attr").equals("09")) { + is_virtual = true; + String task_id = 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) { +// Boolean transfer = whereJson2.getBoolean("transfer",false); + Boolean transfer = whereJson2.getBoolean("transfer"); + if (ObjectUtil.isEmpty(transfer)) { + transfer = false; + } + + //创建任务并下发 +// InTask task = new InTask(); + 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); + } + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void unDivStruct(Map jo) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + ArrayList rows = (ArrayList) jo.get("tableMater"); + HashMap whereJson = rows.get(0); + + //解锁原货位点位 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + unlock_map.put("taskdtl_type", ""); + unlock_map.put("taskdtl_id", ""); + unlock_map.put("task_code", ""); + unlock_map.put("inv_type", ""); + unlock_map.put("inv_id", ""); + unlock_map.put("inv_code", ""); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + //减去原货位的待入数 + JSONArray dis_rows = dis_wql.query("struct_code = '" + whereJson.get("struct_code") + "' AND work_status < '99'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("ivt_level", dis_row.getString("ivt_level")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + 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_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + } + + //更新分配状态 + HashMap map = new HashMap<>(); + map.put("point_id", ""); + map.put("sect_id", ""); + map.put("sect_code", ""); + map.put("sect_name", ""); + map.put("struct_id", ""); + map.put("struct_code", ""); + map.put("struct_name", ""); + map.put("work_status", "00"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //修改明细状态 + JSONObject dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_rows.getJSONObject(0).getString("iostorinvdtl_id") + "'").uniqueResult(0); + + HashMap dtl_map = new HashMap<>(); + dtl_map.put("bill_status", "10"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(dtl_map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //更新主表状态 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND bill_status IN ('20','30')").getResultJSONArray(0); + if (dtl_rows.size() > 0) { + mst_jo.put("bill_status", "30"); + } else { + mst_jo.put("bill_status", "10"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void divPoint(Map whereJson) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + ArrayList rows = (ArrayList) whereJson.get("tableMater"); + String point_code = (String) whereJson.get("point_code"); + HashMap map = rows.get(0); + + 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()); + + //判断起点终点是否不为空 + JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'").uniqueResult(0); + if (StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { + //创建任务 +// AbstractAcsTask task = new InTask(); + JSONObject task_form = new JSONObject(); + task_form.put("task_type", "010501"); + task_form.put("start_device_code", point_code); + task_form.put("next_device_code", ios_dis.getString("struct_code")); + task_form.put("vehicle_code", map.get("box_no")); + //查询主表信息 + JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + map.get("iostorinv_id") + "'").uniqueResult(0); + task_form.put("inv_type", mst.get("bill_type")); + task_form.put("inv_id", mst.get("iostorinv_id")); + task_form.put("inv_code", mst.get("bill_code")); + /* String task_id = task.createTask(task_form); + point_map.put("task_id", task_id); + point_map.put("work_status", "01");*/ + } + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(point_map, "iostorinv_id = '" + map.get("iostorinv_id") + "' AND box_no = '" + map.get("box_no") + "'"); + + if (StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { + //修改库存 + //直接取出入库分配表的库存 + 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 dtl_jo = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinvdtl_id = '" + dis_jo.getString("iostorinvdtl_id") + "'").uniqueResult(0); + 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); + } + } + } + } + } + } + + @Override + public JSONArray queryTask(Map whereJson) { + HashMap map = new HashMap<>(); + map.put("flag", "5"); + map.put("iostorinvdtl_id", (String) whereJson.get("iostorinvdtl_id")); + map.put("is_finish", (String) whereJson.get("checked")); + JSONArray rows = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(map).process().getResultJSONArray(0); + return rows; + } + + @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", "11"); + //查询到当前可用的巷道 + JSONArray rowArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + 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 (placement_type.equals("02")) { + // 左通 + 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); + break; + } else if (placement_type.equals("03")) { + // 右通 + 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); + break; + } else { + // 双通 + + // 先倒序找到第一个木箱、判断上一个是否有货位 + 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; + 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; + 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 (placement_type.equals("02")) { + 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); + 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); + 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; + 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; + 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("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_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + 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("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; + 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; + break; + } + } + } else { + continue; + } + } + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的仓位!"); + } + return struct_jo; + } + + @Override + public JSONObject autoDisMove(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"); + + String col_num = whereJson.getString("layer_num"); // 转库时用 + + 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("col_num", col_num); + row_map.put("sect_id", sect_id); + row_map.put("flag", "11"); + //查询到当前可用的巷道 + JSONArray rowArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParamMap(row_map).process().getResultJSONArray(0); + + 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 (placement_type.equals("02")) { + // 左通 + 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); + break; + } else if (placement_type.equals("03")) { + // 右通 + 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); + break; + } else { + // 双通 + + // 先倒序找到第一个木箱、判断上一个是否有货位 + 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; + 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; + 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("col_num", col_num).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 (placement_type.equals("02")) { + 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); + 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); + break; + } + } else { + //如果查询不到空的一排,则查询有空位双通的一排 + JSONArray haveArr = WQL.getWO("QST_IVT_RAWASSISTISTOR").addParam("col_num", col_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; + 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; + 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("col_num", col_num).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_num = empty_row.getString("block_num"); + String row_num = empty_row.getString("row_num"); + String placement_type = empty_row.getString("placement_type"); + + if (placement_type.equals("02")) { + 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("col_num", col_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; + 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; + break; + } + } + } else { + continue; + } + } + } + } + + if (ObjectUtil.isEmpty(struct_jo)) { + throw new BadRequestException("未查询到可用的仓位!"); + } + return struct_jo; + } + + @Override + public JSONArray queryStor() { + WQLObject storTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); + JSONArray resultJSONArray = storTab.query("is_delete = '0' and is_used = '1'").getResultJSONArray(0); + return resultJSONArray; + } + + public JSONObject queryEmpStruct(JSONObject whereJson) { + JSONObject struct_jo = new JSONObject(); + String sect_id = whereJson.getString("sect_id"); + String placement_type = whereJson.getString("placement_type"); + String material_code = whereJson.getString("material_code"); + String sale_order_name = whereJson.getString("sale_order_name"); + + //根据分切计划查询该订单物料大概还有多少未入 + JSONObject row_map = new JSONObject(); + 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", "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 (placement_type.equals("02")) { + 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); + } 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); + } + } else { + + //如果查询不到空的一排,则查询有空位双通的一排 + JSONObject have_row = 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().uniqueResult(0); + + if (ObjectUtil.isNotEmpty(have_row)) { + String block_num3 = have_row.getString("block_num"); + String row_num3 = have_row.getString("row_num"); + + //判断该排是左边为空,还是右边为空 + JSONObject right_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq").uniqueResult(0); + JSONObject left_str = WQLObject.getWQLObject("st_ivt_structattr").query("block_num = '" + block_num3 + "' AND row_num = '" + row_num3 + "' AND is_delete = '0' AND is_used = '1' order by out_order_seq desc").uniqueResult(0); + if (StrUtil.isNotEmpty(right_str.getString("storagevehicle_code")) || !right_str.getString("lock_type").equals("1")) { + struct_jo = 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").uniqueResult(0); + } + if (StrUtil.isNotEmpty(left_str.getString("storagevehicle_code")) || !left_str.getString("lock_type").equals("1")) { + struct_jo = 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); + } + } + + } + return struct_jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + + //判断指令状态,只能修改生成状态的任务 + String task_code = (String) whereJson.get("task_code");/* + TaskDto taskDto = taskService.findByCode(task_code); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("01")) { + throw new BadRequestException("只能修改任务状态为生成的任务!"); + }*/ + + //判断入库点是否修改 + if (!whereJson.get("point_code").equals(whereJson.get("new_point_code"))) { + HashMap dis_map = new HashMap<>(); + HashMap task_map = new HashMap<>(); + PointDto pointDto = pointService.findByCode((String) whereJson.get("new_point_code")); + dis_map.put("point_code", pointDto.getPoint_code()); + dis_map.put("point_id", pointDto.getPoint_id() + ""); + dis_map.put("point_name", pointDto.getPoint_name()); + task_map.put("start_point_code", (String) whereJson.get("new_point_code")); + //修改分配表起点,任务表起点 + dis_wql.update(dis_map, "task_id = '" + whereJson.get("task_id") + "'"); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + } + + + //判断目标货位是否修改 + if (!whereJson.get("struct_code").equals(whereJson.get("new_struct_code"))) { + //修改任务表终点 + HashMap task_map = new HashMap<>(); + task_map.put("next_point_code", (String) whereJson.get("new_struct_code")); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + + //更新分配表的目的仓位 + StructattrDto structattrDto = structattrService.findByCode((String) whereJson.get("new_struct_code")); + HashMap str_map = new HashMap<>(); + str_map.put("sect_id", structattrDto.getSect_id()); + str_map.put("sect_code", structattrDto.getSect_code()); + str_map.put("sect_name", structattrDto.getSect_name()); + str_map.put("struct_id", structattrDto.getStruct_id()); + str_map.put("struct_code", structattrDto.getStruct_code()); + str_map.put("struct_name", structattrDto.getStruct_name()); + dis_wql.update(str_map, "task_id = '" + whereJson.get("task_id") + "'"); + + //原货位解锁,新货位加锁 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + HashMap lock_map = new HashMap(); + lock_map.put("lock_type", "2"); + point_table.update(lock_map, "point_code = '" + whereJson.get("new_struct_code") + "'"); + struct_table.update(lock_map, "struct_code = '" + whereJson.get("new_struct_code") + "'"); + + //减去原库位待入数,加上新货位待入数 + //查询为该任务id的入库分配表,进行循环物料修改库存 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("ivt_level", dis_row.getString("ivt_level")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + 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_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + i_form.put("struct_id", structattrDto.getStruct_id()); +// storPublicService.IOStor(i_form, "31"); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); + WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); + + + //判断指令状态,只能修改生成状态的任务 + /* String task_id = (String) whereJson.get("task_id"); + TaskDto taskDto = taskService.findByDtlId(task_id); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("01")) { + throw new BadRequestException("只能修改任务状态为生成的任务!"); + }*/ + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + //更新任务表状态为删除 + HashMap task_map = new HashMap<>(); + task_map.put("is_delete", "1"); + task_map.put("update_optid", currentUserId); + task_map.put("update_optname", nickName); + task_map.put("update_time", now); + //修改分配表起点,任务表起点 + task_wql.update(task_map, "task_id = '" + whereJson.get("task_id") + "'"); + + //解锁原货位点位 + HashMap unlock_map = new HashMap(); + unlock_map.put("lock_type", "1"); + unlock_map.put("taskdtl_type", ""); + unlock_map.put("taskdtl_id", ""); + unlock_map.put("task_code", ""); + unlock_map.put("inv_type", ""); + unlock_map.put("inv_id", ""); + unlock_map.put("inv_code", ""); + point_table.update(unlock_map, "point_code = '" + whereJson.get("struct_code") + "'"); + struct_table.update(unlock_map, "struct_code = '" + whereJson.get("struct_code") + "'"); + + //减去原货位的待入数 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + if (dis_rows.size() <= 0) { + throw new BadRequestException("数据参数有误!"); + } + StructattrDto old_struct = structattrService.findByCode((String) whereJson.get("struct_code")); + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + dis_rows.getJSONObject(0).getString("iostorinv_id") + "'").uniqueResult(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject i_form = new JSONObject(); + JSONObject dis_row = dis_rows.getJSONObject(i); + i_form.put("struct_id", old_struct.getStruct_id()); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + 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_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); +// storPublicService.IOStor(i_form, "32"); + + } + //更新分配状态 + HashMap map = new HashMap<>(); + map.put("point_id", ""); + map.put("sect_id", ""); + map.put("sect_code", ""); + map.put("sect_name", ""); + map.put("struct_id", ""); + map.put("struct_code", ""); + map.put("struct_name", ""); + map.put("task_id", ""); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //修改明细状态 + HashMap dtl_map = new HashMap<>(); + map.put("bill_status", "10"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").update(map, "iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND box_no = '" + whereJson.get("box_no") + "'"); + + //更新主表状态 + JSONArray dtl_rows = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").query("iostorinv_id = '" + mst_jo.get("iostorinv_id") + "' AND bill_status IN ('20','30')").getResultJSONArray(0); + if (dtl_rows.size() > 0) { + mst_jo.put("bill_status", "30"); + } else { + mst_jo.put("bill_status", "10"); + } + WQLObject.getWQLObject("ST_IVT_IOStorInv").update(mst_jo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void reIssueTask(Map whereJson) { + String task_id = (String) whereJson.get("task_id"); + //判断指令状态,只能下发生成、执行中状态的任务 + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_id = '" + task_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!task_jo.getString("task_status").equals("04")) { + throw new BadRequestException("只能修改任务状态为未下发的任务!"); + } +// AbstractAcsTask task = new InTask(); + //调用ACS接受任务接口 + /* JSONObject result = task.immediateNotifyAcs(task_id); + if (ObjectUtil.isNotEmpty(result)) { + String status = result.getString("status"); + if ("200".equals(status)) { + HashMap map = new HashMap<>(); + //更新任务指令为下发 + JSONObject task_map = new JSONObject(); + task_map.put("task_id", task_id); + task.updateTaskStatus(task_map, "1"); + } else { + throw new BadRequestException("任务下发失败:" + result.getString("message")); + } + }*/ + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirmTask(Map whereJson) { + //判断指令状态,只能下发生成、执行中状态的任务 + String task_code = (String) whereJson.get("task_code"); + JSONObject task_jo = WQLObject.getWQLObject("sch_base_task").query("task_code = '" + task_code + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(task_jo)) { + throw new BadRequestException("请输入正确的任务号!"); + } + /*if (!task_jo.getString("task_status").equals("03")) { + throw new BadRequestException("只能修改任务状态为执行中的任务!"); + }*/ + +/* AbstractAcsTask task = new InTask(); + task.updateTaskStatus(task_jo, TaskStatusEnum.FINISHED.getCode());*/ + } + + @Override + public void cancelTask(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject task_wql = WQLObject.getWQLObject("SCH_BASE_Task"); + WQLObject dtl_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + + + //判断指令状态,只能取消完成状态的任务 + String task_code = (String) whereJson.get("task_code"); + /* TaskDto taskDto = taskService.findByCode(task_code); + if (ObjectUtil.isEmpty(taskDto)) { + throw new BadRequestException("请输入正确的任务号!"); + } + if (!taskDto.getTask_status().equals("99")) { + throw new BadRequestException("只能取消任务状态为完成中的任务!"); + }*/ + + //判断主表是否为99,如果为99不允许取消 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (mst_jo.getString("bill_status").equals("99")) { + throw new BadRequestException("单据已完成,无法进行取消任务操作!"); + } + + //变更任务状态 + HashMap task_map = new HashMap(); + task_map.put("task_status", "01"); + task_wql.update(task_map, "taskdtl_id = '" + whereJson.get("task_id") + "'"); + + //更新实际数量 + JSONArray dis_rows = dis_wql.query("task_id = '" + whereJson.get("task_id") + "'").getResultJSONArray(0); + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_row = dis_rows.getJSONObject(i); + double real_qty = dis_row.getDoubleValue("real_qty"); + dis_row.put("real_qty", "0"); + dis_row.put("work_status", "01"); + dis_wql.update(dis_row); + + //更新明细实际数量 + JSONObject dtl_jo = dtl_wql.query("iostorinvdtl_id = '" + dis_row.getString("iostorinvdtl_id") + "'").uniqueResult(0); + double old_real_qty = dtl_jo.getDoubleValue("real_qty"); + dtl_jo.put("real_qty", NumberUtil.sub(old_real_qty, real_qty)); + dtl_wql.update(dtl_jo); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(Map whereJson) { + WQLObject dis_wql = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + + //校验主表状态为分配中、分配完 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (!mst_jo.getString("bill_status").equals("30") && !mst_jo.getString("bill_status").equals("40")) { + throw new BadRequestException("主表状态必须为分配中、分配完!"); + } + + //分配中任务状态必须全部为完成 + JSONArray dis_rows = dis_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND work_status < '99'").getResultJSONArray(0); + if (dis_rows.size() > 0) { + throw new BadRequestException("存在未完成的作业,或存在组盘记录!"); + } + + //将明细全部变为99 + HashMap map = new HashMap(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + whereJson.get("iostorinv_id") + "' AND bill_status < '99'").getResultJSONArray(0); + + //完成单据 +// inbillService.confirmMst(JSONObject.parseObject(JSON.toJSONString(whereJson))); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void backConfirm(Map whereJson) { + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + WQLObject mst_wql = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + //校验主表状态为生成 + JSONObject mst_jo = WQLObject.getWQLObject("ST_IVT_IOStorInv").query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + if (!mst_jo.getString("bill_status").equals("10")) { + throw new BadRequestException("主表状态必须为生成!"); + } + + JSONObject mst_row = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + JSONArray dtl_rows = dtl_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").getResultJSONArray(0); + + //生成手工出库单 + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + whereJson.put("iostorinv_id", iostorinv_id); + whereJson.put("bill_code", bill_code); + whereJson.put("io_type", "1"); + whereJson.put("bill_type", "010601"); + whereJson.put("buss_type", ((String) whereJson.get("bill_type")).substring(0, 4)); + mst_wql.insert(whereJson); + for (int i = 0; i < dtl_rows.size(); i++) { + JSONObject dtl_row = dtl_rows.getJSONObject(i); + dtl_row.put("source_billdtl_id", dtl_row.getString("iostorinvdtl_id")); + dtl_row.put("source_bill_type", mst_row.getString("bill_type")); + dtl_row.put("source_bill_code", mst_row.getString("bill_code")); + dtl_row.put("source_bill_table", "ST_IVT_IOStorInvDtl"); + dtl_row.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId()); + dtl_row.put("iostorinv_id", iostorinv_id); + dtl_row.put("bill_status", "10"); + dtl_wql.insert(dtl_row); + } + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + mst_row.put("bill_status", "99"); + mst_row.put("confirm_optid", currentUserId); + mst_row.put("confirm_optname", nickName); + mst_row.put("confirm_time", now); + //更新主表状态为99 + mst_wql.update(mst_row); + + HashMap map = new HashMap<>(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + mst_row.get("iostorinv_id") + "'"); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql new file mode 100644 index 00000000..1dcef70c --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTIN_01.wql @@ -0,0 +1,134 @@ +[交易说明] + 交易名: 成品入库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.stor_id TYPEAS s_string + 输入.begin_time TYPEAS s_string + 输入.end_time TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.bill_type TYPEAS s_string + 输入.bill_code TYPEAS s_string + 输入.iostorinvdtl_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + ST_IVT_IOStorInv + WHERE + io_type = '0' + AND is_delete = '0' + + OPTION 输入.stor_id <> "" + stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.begin_time <> "" + input_time <= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + input_time >= 输入.end_time + ENDOPTION + + OPTION 输入.bill_status <> "" + bill_status = 输入.bill_status + ENDOPTION + + OPTION 输入.bill_type <> "" + bill_type = 输入.bill_type + ENDOPTION + + OPTION 输入.bill_code <> "" + bill_code LIKE 输入.bill_code + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + dtl.*, + mater.material_code, + mater.material_name, + mater.material_spec + FROM + ST_IVT_IOStorInvDtl dtl + LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dtl.iostorinv_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dtl.material_id + WHERE + mst.io_type = '0' + AND mst.is_delete = '0' + + OPTION 输入.bill_code <> "" + mst.bill_code = 输入.bill_code + ENDOPTION + + order by dtl.seq_no ASC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + dis.*, + mater.material_code, + mater.material_name, + mater.material_spec, + point.point_code + FROM + ST_IVT_IOStorInvDis dis + LEFT JOIN sch_base_point point ON point.point_id = dis.point_id + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + WHERE + IFNULL(dis.task_id,'') = '' + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + order by dis.seq_no ASC + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/qd/src/api/wms/sch/region.js b/mes/qd/src/api/wms/sch/region.js index cfaf0da6..fa7605e5 100644 --- a/mes/qd/src/api/wms/sch/region.js +++ b/mes/qd/src/api/wms/sch/region.js @@ -48,4 +48,12 @@ export function getPointTypeSelectByCode(code) { }) } -export default { add, edit, del, changeActive, getPointStatusSelectByCode, getPointTypeSelectByCode } +export function getRegionSelect(data) { + return request({ + url: 'api/region/getRegionSelect', + method: 'post', + data + }) +} + +export default { add, edit, del, changeActive, getPointStatusSelectByCode, getPointTypeSelectByCode, getRegionSelect } diff --git a/mes/qd/src/views/wms/pub/PointDialog.vue b/mes/qd/src/views/wms/pub/PointDialog.vue new file mode 100644 index 00000000..83ddd448 --- /dev/null +++ b/mes/qd/src/views/wms/pub/PointDialog.vue @@ -0,0 +1,202 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/AddDialog.vue b/mes/qd/src/views/wms/st/productIn/AddDialog.vue new file mode 100644 index 00000000..49f5a9ab --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/AddDialog.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/AddDtl.vue b/mes/qd/src/views/wms/st/productIn/AddDtl.vue new file mode 100644 index 00000000..d09dd0f7 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/AddDtl.vue @@ -0,0 +1,182 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/DivDialog.vue b/mes/qd/src/views/wms/st/productIn/DivDialog.vue new file mode 100644 index 00000000..89dec7ea --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/DivDialog.vue @@ -0,0 +1,573 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue b/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue new file mode 100644 index 00000000..a8f2c51d --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/StructUpdateDialog.vue @@ -0,0 +1,268 @@ + + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/ViewDialog.vue b/mes/qd/src/views/wms/st/productIn/ViewDialog.vue new file mode 100644 index 00000000..3a9cf8ff --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/ViewDialog.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productIn/index.vue b/mes/qd/src/views/wms/st/productIn/index.vue new file mode 100644 index 00000000..7fd266c8 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/index.vue @@ -0,0 +1,321 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productIn/productin.js b/mes/qd/src/views/wms/st/productIn/productin.js new file mode 100644 index 00000000..acc83091 --- /dev/null +++ b/mes/qd/src/views/wms/st/productIn/productin.js @@ -0,0 +1,220 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: '/api/in/productIn', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: '/api/in/productIn', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: '/api/in/productIn', + method: 'put', + data + }) +} + +export function getType(params) { + return request({ + url: '/api/in/productIn/getType', + method: 'get', + params + }) +} + +export function getBillDtl(params) { + return request({ + url: '/api/in/productIn/getBillDtl', + method: 'get', + params + }) +} + +export function getIODtl(data) { + return request({ + url: '/api/in/productIn/getIODtl', + method: 'post', + data + }) +} + +export function insertDtl(data) { + return request({ + url: '/api/in/productIn/insertDtl', + method: 'post', + data + }) +} + +export function commit(data) { + return request({ + url: '/api/in/productIn/commit', + method: 'post', + data + }) +} + +export function checkVehicle(data) { + return request({ + url: '/api/in/productIn/checkVehicle', + method: 'post', + data + }) +} + +export function confirmvehicle(data) { + return request({ + url: '/api/in/productIn/confirmvehicle', + method: 'post', + data + }) +} + +export function deleteDisDtl(data) { + return request({ + url: '/api/in/productIn/deleteDisDtl', + method: 'post', + data + }) +} + +export function getDisDtl(data) { + return request({ + url: '/api/in/productIn/getDisDtl', + method: 'post', + data + }) +} + +export function divStruct(data) { + return request({ + url: '/api/in/productIn/divStruct', + method: 'post', + data + }) +} + +export function unDivStruct(data) { + return request({ + url: '/api/in/productIn/unDivStruct', + method: 'post', + data + }) +} + +export function divPoint(data) { + return request({ + url: '/api/in/productIn/divPoint', + method: 'post', + data + }) +} + +export function queryTask(data) { + return request({ + url: '/api/in/productIn/queryTask', + method: 'post', + data + }) +} + +export function bucketDtl(data) { + return request({ + url: '/api/in/productIn/bucketDtl', + method: 'post', + data + }) +} + +export function updateTask(data) { + return request({ + url: '/api/in/productIn/updateTask', + method: 'post', + data + }) +} + +export function delTask(data) { + return request({ + url: '/api/in/productIn/delTask', + method: 'post', + data + }) +} + +export function reIssueTask(data) { + return request({ + url: '/api/in/productIn/reIssueTask', + method: 'post', + data + }) +} + +export function confirmTask(data) { + return request({ + url: '/api/in/productIn/confirmTask', + method: 'post', + data + }) +} + +export function cancelTask(data) { + return request({ + url: '/api/in/productIn/cancelTask', + method: 'post', + data + }) +} + +export function confirm(data) { + return request({ + url: '/api/in/productIn/confirm', + method: 'post', + data + }) +} + +export function backConfirm(data) { + return request({ + url: '/api/in/productIn/backConfirm', + method: 'post', + data + }) +} + +export function delDis(data) { + return request({ + url: '/api/in/productIn/delDis', + method: 'post', + data + }) +} + +export function queryBoxMater(data) { + return request({ + url: '/api/in/productIn/queryBoxMater', + method: 'post', + data + }) +} + +export function queryStor() { + return request({ + url: '/api/in/productIn/queryStor', + method: 'post' + }) +} + +export default { add, edit, del, getType, getBillDtl, insertDtl, getIODtl, commit, checkVehicle, + confirmvehicle, deleteDisDtl, getDisDtl, divStruct, unDivStruct, divPoint, delDis, queryBoxMater, + queryTask, bucketDtl, updateTask, delTask, reIssueTask, confirmTask, cancelTask, confirm, backConfirm, queryStor }