From 77a4ea737a634a003a68fdefd8232cab86909259 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 3 Apr 2023 17:15:51 +0800 Subject: [PATCH 1/3] =?UTF-8?q?rev:=20=E4=BF=AE=E6=94=B9=E7=82=B9=E4=BD=8D?= =?UTF-8?q?=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=AD=97=E6=AE=B5control=5Fpoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/wms/sch/wql/sch.xls | Bin 185856 -> 186368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/wql/sch.xls index 294739bbfcec2611f6ab0fc48d7ef606c51c4319..9994d0b52d14773991faf7a2344f6afece96445c 100644 GIT binary patch delta 19815 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 delta 19281 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 From 8eb790a3de44849b97c521d27a261a85eae5cc4e Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 3 Apr 2023 17:16:36 +0800 Subject: [PATCH 2/3] =?UTF-8?q?rev:=20=E4=BF=AE=E6=94=B9=E6=88=90=E5=93=81?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/nl/wms/sch/tasks/ProductInTask.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java index bb485ea2..db4f1b00 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductInTask.java @@ -10,6 +10,7 @@ import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; import org.nl.wms.basedata.st.service.dto.StructattrDto; import org.nl.wms.basedata.st.service.impl.StructattrServiceImpl; import org.nl.wms.sch.manage.AbstractAcsTask; @@ -33,14 +34,18 @@ public class ProductInTask extends AbstractAcsTask { WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表 WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); // 出入库主表 WQLObject dtlTab = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); // 出入库明细表 + WQLObject materTab = WQLObject.getWQLObject("md_me_materialbase"); // 物料表 + WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); // 点位表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); // 任务表表 String currentUserId = SecurityUtils.getCurrentUserId(); String nickName = SecurityUtils.getCurrentNickName(); String now = DateUtil.now(); HashMap map = new HashMap<>(); + JSONObject jsonTask = taskTab.query("task_id = '" + taskObj.getString("task_id") + "'").uniqueResult(0); - //1:执行中,2:完成 ,0:acs取消 + //1:执行中,2:完成 ,3:acs取消 if (StrUtil.equals(status, "1")) { map.put("task_status", TaskStatusEnum.EXECUTING.getCode()); //更新入库单分配任务状态 @@ -57,10 +62,7 @@ public class ProductInTask extends AbstractAcsTask { dis_form.put("task_id", taskObj.getString("task_id")); productInService.confirmDis(dis_form); } - if (StrUtil.equals(status, "0")) { - WQLObject point_table = WQLObject.getWQLObject("SCH_BASE_Point"); - WQLObject struct_table = WQLObject.getWQLObject("ST_IVT_StructAttr"); - + if (StrUtil.equals(status, "3")) { if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { throw new BadRequestException("任务已执行不能取消"); } @@ -73,33 +75,37 @@ public class ProductInTask extends AbstractAcsTask { String iostorinv_id = jsonDis.getString("iostorinv_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 = '" + taskObj.get("point_code2") + "'"); - struct_table.update(unlock_map, "struct_code = '" + taskObj.get("point_code2") + "'"); + JSONObject jsonPoint1 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonPoint1.put("lock_type", "1"); + pointTab.update(jsonPoint1); + + // 判断物料是否超长: 超长解锁对应点位 + JSONObject jsonMater = materTab.query("material_id = '" + jsonDis.getString("material_id") + "'").uniqueResult(0); + + String length_up = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("MATERIAL_LENGTH_UP").getValue(); + double material_length = jsonMater.getDoubleValue("length"); + double material_length_up = Double.valueOf(length_up); + + if (material_length > material_length_up) { + JSONObject jsonPoint2 = pointTab.query("point_id = '" + jsonPoint1.getString("control_point") + "'").uniqueResult(0); + jsonPoint2.put("lock_type","1"); + pointTab.update(jsonPoint2); + } //减去原货位的待入数 - JSONArray dis_rows = disTab.query("struct_code = '" + taskObj.get("point_code2") + "' AND work_status < '99'").getResultJSONArray(0); + JSONArray dis_rows = disTab.query("struct_code = '" + jsonTask.get("point_code2") + "' AND work_status < '99'").getResultJSONArray(0); if (dis_rows.size() <= 0) { throw new BadRequestException("数据参数有误!"); } - StructattrDto old_struct = new StructattrServiceImpl().findByCode(taskObj.getString("point_code2")); 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("struct_id", jsonPoint1.getString("point_id")); i_form.put("material_id", dis_row.getString("material_id")); - i_form.put("quality_scode", dis_row.getString("quality_scode")); + i_form.put("quality_scode", "01"); 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")); @@ -112,7 +118,7 @@ public class ProductInTask extends AbstractAcsTask { // 修改主表状态为分配中:30 JSONObject mstMap = new JSONObject(); - mstMap.put("bill_status", "30"); + mstMap.put("bill_status", "20"); mstMap.put("update_optid", currentUserId); mstMap.put("update_optname", nickName); mstMap.put("update_time", now); @@ -128,9 +134,6 @@ public class ProductInTask extends AbstractAcsTask { disMap.put("work_status", "00"); disMap.put("point_id", ""); disMap.put("task_id", ""); - disMap.put("sect_id", ""); - disMap.put("sect_code", ""); - disMap.put("sect_name", ""); disMap.put("struct_id", ""); disMap.put("struct_code", ""); disMap.put("struct_name", ""); @@ -176,7 +179,7 @@ public class ProductInTask extends AbstractAcsTask { json.put("point_code1", start_device_code); json.put("point_code2", next_device_code); json.put("vehicle_code", form.getString("vehicle_code")); - json.put("handle_class", this.getClass().getName()); + json.put("handle_class", THIS_CLASS); json.put("create_id", currentUserId); json.put("create_name", currentUsername); json.put("create_time", DateUtil.now()); @@ -194,7 +197,6 @@ public class ProductInTask extends AbstractAcsTask { this.updateTaskStatus(taskObj, "0"); } - @Override public void pointConfirm(JSONObject param) { From 8a7730e59f65d58fa5508cbd927867e654474e43 Mon Sep 17 00:00:00 2001 From: liuxy Date: Mon, 3 Apr 2023 17:17:36 +0800 Subject: [PATCH 3/3] =?UTF-8?q?add=EF=BC=9A=E5=A2=9E=E5=8A=A0=E6=88=90?= =?UTF-8?q?=E5=93=81=E5=87=BA=E5=BA=93=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../acs/service/impl/AcsToWmsServiceImpl.java | 2 +- .../org/nl/wms/sch/tasks/ProductOutTask.java | 121 ++ .../wms/st/out/rest/ProductOutController.java | 164 ++ .../wms/st/out/service/ProductOutService.java | 121 ++ .../service/impl/ProductOutServiceImpl.java | 1467 +++++++++++++++++ .../wms/st/wql/QST_IVT_PRODUCTOUTDIV_01.wql | 296 ++++ .../nl/wms/st/wql/QST_IVT_PRODUCTOUT_01.wql | 191 +++ .../src/views/wms/st/productOut/AddDialog.vue | 387 +++++ mes/qd/src/views/wms/st/productOut/AddDtl.vue | 163 ++ .../src/views/wms/st/productOut/DivDialog.vue | 580 +++++++ .../src/views/wms/st/productOut/StructIvt.vue | 278 ++++ .../views/wms/st/productOut/ViewDialog.vue | 283 ++++ mes/qd/src/views/wms/st/productOut/index.vue | 325 ++++ .../src/views/wms/st/productOut/productout.js | 228 +++ 14 files changed, 4605 insertions(+), 1 deletion(-) create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductOutTask.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/ProductOutController.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/ProductOutService.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUTDIV_01.wql create mode 100644 mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUT_01.wql create mode 100644 mes/qd/src/views/wms/st/productOut/AddDialog.vue create mode 100644 mes/qd/src/views/wms/st/productOut/AddDtl.vue create mode 100644 mes/qd/src/views/wms/st/productOut/DivDialog.vue create mode 100644 mes/qd/src/views/wms/st/productOut/StructIvt.vue create mode 100644 mes/qd/src/views/wms/st/productOut/ViewDialog.vue create mode 100644 mes/qd/src/views/wms/st/productOut/index.vue create mode 100644 mes/qd/src/views/wms/st/productOut/productout.js diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java index b063e269..a1fd2e86 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/ext/acs/service/impl/AcsToWmsServiceImpl.java @@ -112,7 +112,7 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{ TaskDto taskDto = taskService.findById(task_id); String processing_class = taskDto.getHandle_class(); //1:执行中,2:完成 ,3:acs取消 - String acs_task_status = row.getString("status"); + String acs_task_status = row.getString("task_status"); String message = ""; String status = ""; if ("1".equals(acs_task_status)) { diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductOutTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductOutTask.java new file mode 100644 index 00000000..39be14a8 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/ProductOutTask.java @@ -0,0 +1,121 @@ +package org.nl.wms.sch.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.st.out.service.impl.ProductOutServiceImpl; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +/** + * Created by Lxy on 2021/12/22. + */ +@Component +@RequiredArgsConstructor +public class ProductOutTask extends AbstractAcsTask { + private final String THIS_CLASS = ProductOutTask.class.getName(); + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + WQLObject taskTab = WQLObject.getWQLObject("SCH_BASE_Task"); // 任务表 + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配表 + + String task_id = taskObj.getString("task_id"); + JSONObject jsonTask = taskTab.query("task_id = '" + task_id + "' and task_status < '7'").uniqueResult(0); + + if (ObjectUtil.isNotEmpty(jsonTask)) { + if (StrUtil.equals(status, "3")) { + // 任务为下发之后就不允许取消 + if (jsonTask.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.START_AND_POINT.getCode())) { + throw new BadRequestException("任务:"+jsonTask.getString("task_code")+"已下发,不可取消"); + } + + // 更新删除字段 + jsonTask.put("is_delete","1"); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + // 更新分配明细为:未生成 + JSONObject map = new JSONObject(); + map.put("work_status", "00"); + map.put("point_id", ""); + + disTab.update(map,"task_id = '"+task_id+"'"); + + } + + if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { + // 更新任务状态为执行中 + jsonTask.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + + } + + if (StrUtil.equals(status, "2")) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + // 调用标识完成 + ProductOutServiceImpl productOutService = SpringContextHolder.getBean(ProductOutServiceImpl.class); + productOutService.finishTask(jsonTask); + + // 更改任务状态为完成 + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + jsonTask.put("update_optid", currentUserId); + jsonTask.put("update_optname", currentUsername); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + } + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + String currentUserId = SecurityUtils.getCurrentUserId(); + String currentUsername = SecurityUtils.getCurrentUsername(); + + JSONObject json = new JSONObject(); + json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("task_code", IdUtil.getSnowflake(1,1).nextId()); + json.put("product_area", form.getString("product_area")); + json.put("task_type", form.getString("task_type")); + json.put("is_send", "1"); + json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("point_code1", form.getString("point_code1")); + json.put("point_code2", form.getString("point_code2")); + json.put("vehicle_code", form.getString("vehicle_code")); + json.put("handle_class", THIS_CLASS); + json.put("create_id", currentUserId); + json.put("create_name", currentUsername); + json.put("create_time", DateUtil.now()); + json.put("update_id", currentUserId); + json.put("update_name", currentUsername); + json.put("update_time", DateUtil.now()); + WQLObject.getWQLObject("SCH_BASE_Task").insert(json); + return json.getString("task_id"); + } + + @Override + public void cancel(String task_id) { + JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); + this.updateTaskStatus(taskObj, "0"); + } + + @Override + public void pointConfirm(JSONObject param) { + + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/ProductOutController.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/ProductOutController.java new file mode 100644 index 00000000..40d40e58 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/rest/ProductOutController.java @@ -0,0 +1,164 @@ +package org.nl.wms.st.out.rest; + +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.out.service.ProductOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +@RestController +@RequiredArgsConstructor +@Api(tags = "成品出库") +@RequestMapping("/api/productOut") +@Slf4j +public class ProductOutController { + private final ProductOutService productOutService; + + @GetMapping + @Log("查询出库单") + @ApiOperation("查询出库单") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(productOutService.pageQuery(whereJson,page), HttpStatus.OK); + } + + @GetMapping("/addDtl") + @Log("查询库存") + @ApiOperation("查询库存") + public ResponseEntity queryAddDtl(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(productOutService.queryAddDtl(whereJson,page), HttpStatus.OK); + } + + @GetMapping("/queryDtl") + @Log("查询明细") + @ApiOperation("查询明细") + public ResponseEntity queryDtl(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(productOutService.queryDtl(whereJson,page), HttpStatus.OK); + } + + @PostMapping("/getOutBillDtl") + @Log("查询分配明细") + @ApiOperation("查询分配明细") + public ResponseEntity getOutBillDtl(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(productOutService.getOutBillDtl(whereJson), HttpStatus.OK); + } + + @Log("删除出库单") + @ApiOperation("删除出库单") + @DeleteMapping + public ResponseEntity delete(@RequestBody Long[] ids) { + productOutService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping + @Log("修改出库单") + @ApiOperation("修改出库单") + public ResponseEntity update(@RequestBody JSONObject whereJson){ + productOutService.update(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping() + @Log("新增出库单") + @ApiOperation("新增出库单") + public ResponseEntity insertDtl(@RequestBody JSONObject whereJson){ + productOutService.insertDtl(whereJson); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/allDiv") + @Log("出库单全部分配") + @ApiOperation("出库单全部分配") + public ResponseEntity allDiv(@RequestBody JSONObject whereJson) { + productOutService.allDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/allDivOne") + @Log("分配一条出库明细") + @ApiOperation("分配一条出库明细") + public ResponseEntity allDivOne(@RequestBody JSONObject whereJson) { + productOutService.allDivOne(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/allCancel") + @Log("出库单全部取消") + @ApiOperation("出库单全部取消") + public ResponseEntity allCancel(@RequestBody JSONObject whereJson) { + productOutService.allCancel(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/oneCancel") + @Log("出库单全部取消") + @ApiOperation("出库单全部取消") + public ResponseEntity oneCancel(@RequestBody JSONObject whereJson) { + productOutService.oneCancel(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/getOutBillDis") + @Log("查询出库单分配明细") + @ApiOperation("查询出库单分配明细") + public ResponseEntity getOutBillDis(@RequestBody JSONObject whereJson){ + return new ResponseEntity<>(productOutService.getOutBillDis(whereJson), HttpStatus.OK); + } + + @PostMapping("/allSetPoint") + @Log("设置全部站点") + @ApiOperation("设置全部站点") + public ResponseEntity allSetPoint(@RequestBody JSONObject whereJson) { + productOutService.allSetPoint(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/manualDiv") + @Log("出库单手动分配") + @ApiOperation("出库单手动分配") + public ResponseEntity manualDiv(@RequestBody JSONObject whereJson) { + productOutService.manualDiv(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/confirm") + @Log("出库单强制确认") + @ApiOperation("出库单强制确认") + public ResponseEntity confirm(@RequestBody JSONObject whereJson) { + productOutService.confirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/finishTask") + @Log("出库任务手动完成") + @ApiOperation("出库任务手动完成") + public ResponseEntity finishTask(@RequestBody JSONObject whereJson) { + productOutService.finishTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @PostMapping("/backConfirm") + @Log("出库单强制确认") + @ApiOperation("出库单强制确认") + public ResponseEntity backConfirm(@RequestBody JSONObject whereJson) { + productOutService.backConfirm(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("下载发货单Excel") + @ApiOperation("下载发货单Excel") + @GetMapping(value = "/downloadExcel") + public ResponseEntity downloadExcel(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { + productOutService.downloadExcel(response,whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/ProductOutService.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/ProductOutService.java new file mode 100644 index 00000000..1c3ed6e0 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/ProductOutService.java @@ -0,0 +1,121 @@ +package org.nl.wms.st.out.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.springframework.data.domain.Pageable; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Map; + +public interface ProductOutService { + /** + * 查询数据分页 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map pageQuery(Map whereJson, Pageable page); + + /** + * 查询库存数据 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAddDtl(Map whereJson, Pageable page); + /** + * 查询明细 + * + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryDtl(Map whereJson, Pageable page); + + /** + * 多选删除 + * @param ids / + */ + void deleteAll(Long[] ids); + /** + * 新增出库单 + * @param whereJson + * 参数举例: + * {bill_code=, stor_id=1473161852946092032, stor_code=01, stor_name=原材料库, bill_status=10, total_qty=2, detail_count=1, bill_type=010201, remark=, biz_date=2022-01-08, create_mode=, tableData=[{material_id=1309, material_code=090301010001, bill_status=10, material_name=碳化钨粉 02, pcsn=, quality_scode=02, ivt_level=01, is_active=1, plan_qty=2, qty_unit_name=千克\公斤, qty_unit_id=1, remark=, edit=true}]} + * / + */ + String insertDtl (JSONObject whereJson); + /** + * 查询出库单明细 + * @param whereJson / + * @return JSONArray + */ + JSONArray getOutBillDtl(JSONObject whereJson); + /** + * 查询出库单分配明细 + * @param whereJson / + * @return + */ + JSONArray getOutBillDis(JSONObject whereJson); + /** + * 修改出库单 + * @param whereJson / + */ + void update(JSONObject whereJson); + /** + * 全部分配,对同一出库单明细进行分配 + * @param whereJson / + */ + void allDiv(JSONObject whereJson); + /** + * 分配一条出库明细 + * @param whereJson / + */ + void allDivOne(JSONObject whereJson); + /** + * 全部取消 + * @param whereJson / + */ + void allCancel(JSONObject whereJson); + /** + * 取消一个 + * @param whereJson / + */ + void oneCancel(JSONObject whereJson); + /** + * 设置全部站点 + * @param whereJson / + */ + void allSetPoint(JSONObject whereJson); + /** + * 出库单手动分配 + * @param whereJson / + */ + void manualDiv(JSONObject whereJson); + /** + * 出库单强制确认 + * @param whereJson / + */ + void confirm(JSONObject whereJson); + /** + * 出库任务手动完成 + * @param whereJson / + */ + void finishTask(JSONObject whereJson); + + /** + * 出库单强制确认 + * @param whereJson / + */ + void backConfirm(JSONObject whereJson); + + /** + * 下载发货单Excel + * @param whereJson / + */ + void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException; + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java new file mode 100644 index 00000000..4f8f95eb --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/ProductOutServiceImpl.java @@ -0,0 +1,1467 @@ +package org.nl.wms.st.out.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.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillWrapper; +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.SpringContextHolder; +import org.nl.modules.wql.util.WqlUtil; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.tasks.ProductOutTask; +import org.nl.wms.st.in.service.StorPublicService; +import org.nl.wms.st.out.service.ProductOutService; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; + +/** + * PC端出入库新增 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class ProductOutServiceImpl implements ProductOutService { + + private final StorPublicService storPublicService; + + @Override + public Map pageQuery(Map whereJson, Pageable page) { + String bill_code = MapUtil.getStr(whereJson, "bill_code"); + + JSONObject map = new JSONObject(); + map.put("flag", "1"); + map.put("product_code",MapUtil.getStr(whereJson,"product_code")); + map.put("bill_status",MapUtil.getStr(whereJson,"bill_status")); + map.put("bill_type",MapUtil.getStr(whereJson,"bill_type")); + map.put("begin_time",MapUtil.getStr(whereJson, "begin_time")); + map.put("end_time",MapUtil.getStr(whereJson, "end_time")); + + if (StrUtil.isNotEmpty(bill_code)) { + map.put("bill_code", "%" + bill_code + "%"); + } + + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTOUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "bill_code desc"); + return jo; + } + + @Override + public Map queryAddDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "4"); + map.put("product_area", MapUtil.getStr(whereJson, "stor_id")); + + if (StrUtil.isNotEmpty(map.get("material_code"))) { + map.put("material_code", "%" + map.get("material_code") + "%"); + } + if (StrUtil.isNotEmpty(map.get("pcsn"))) { + map.put("pcsn", "%" + map.get("pcsn") + "%"); + } + if (StrUtil.isNotEmpty(map.get("material_spec"))) { + map.put("material_spec", "%" + map.get("material_spec") + "%"); + } + JSONObject jo = WQL.getWO("QST_IVT_PRODUCTOUT_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "ivt.struct_code ASC"); + return jo; + } + + @Override + public Map queryDtl(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(whereJson); + map.put("flag", "12"); + + if (StrUtil.isNotEmpty(map.get("material_code"))) { + map.put("material_code", "%" + map.get("material_code") + "%"); + } + if (StrUtil.isNotEmpty(map.get("username"))) { + map.put("username", "%" + map.get("username") + "%"); + } + if (StrUtil.isNotEmpty(map.get("pcsn"))) { + map.put("pcsn", "%" + map.get("pcsn") + "%"); + } + String begin_time = map.get("begin_time"); + if (StrUtil.isNotEmpty(begin_time)) { + map.put("begin_time", begin_time.substring(0, 10)); + } + String end_time = map.get("end_time"); + if (StrUtil.isNotEmpty(end_time)) { + map.put("end_time", end_time.substring(0, 10)); + } + String source_bill_code = map.get("source_bill_code"); + if (StrUtil.isNotEmpty(source_bill_code)) { + StringBuilder sb = new StringBuilder(); + String[] strs = source_bill_code.split(","); + for (int i = 0; i < strs.length; i++) { + sb.append(",'" + strs[i] + "'"); + } + String str = sb.toString(); + str = "(" + str.substring(1) + ")"; + map.put("source_bill_code", str); + } + JSONObject jo = WQL.getWO("QST_IVT_CHECKOUTBILL").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "iosdtl2.material_id"); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + 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 iostorinv_id : ids) { + HashMap map = new HashMap<>(); + map.put("is_delete", "1"); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", nickName); + map.put("update_time", now); + wo.update(map, "iostorinv_id='" + iostorinv_id + "'"); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String insertDtl(JSONObject map) { + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + String iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + + JSONArray array = map.getJSONArray("tableData"); + JSONObject jsonMst = new JSONObject(); + + JSONObject jsonArea = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", map.getString("product_code")).process().uniqueResult(0); + jsonMst.put("iostorinv_id", iostorinv_id); + jsonMst.put("bill_code", bill_code); + jsonMst.put("io_type", "1"); + jsonMst.put("biz_date", map.getString("biz_date").substring(0, 10)); + jsonMst.put("bill_type", map.getString("bill_type")); + jsonMst.put("product_id", jsonArea.getString("dict_id")); + jsonMst.put("product_code", jsonArea.getString("value")); + jsonMst.put("product_name", jsonArea.getString("label")); + jsonMst.put("detail_count", array.size() + ""); + jsonMst.put("bill_status", "10"); + jsonMst.put("remark", map.getString("remark")); + jsonMst.put("input_optid", currentUserId + ""); + jsonMst.put("input_optname", nickName); + jsonMst.put("input_time", now); + jsonMst.put("update_optid", currentUserId + ""); + jsonMst.put("update_optname", nickName); + jsonMst.put("update_time", now); + jsonMst.put("is_delete", "0"); + + double qty = 0.0; // 主表重量 + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + // 校验计划数量不能为零 + double plan_qty = row.getDoubleValue("plan_qty"); + if (plan_qty == 0.0) { + throw new BadRequestException("数量不能为0"); + } + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + jsonDtl.put("iostorinv_id", iostorinv_id); + jsonDtl.put("seq_no", (i + 1) + ""); + jsonDtl.put("material_id", row.getString("material_id")); + jsonDtl.put("pcsn", row.getString("pcsn")); + jsonDtl.put("quality_scode", "01"); + jsonDtl.put("bill_status", "10"); + jsonDtl.put("qty_unit_id", row.get("qty_unit_id")); + jsonDtl.put("qty_unit_name", row.getString("qty_unit_name")); + jsonDtl.put("plan_qty", row.get("plan_qty")); + jsonDtl.put("remark", row.getString("remark")); + jsonDtl.put("assign_qty", "0"); + jsonDtl.put("unassign_qty", row.get("plan_qty")); + WQLObject.getWQLObject("ST_IVT_IOStorInvDtl").insert(jsonDtl); + qty += jsonDtl.getDoubleValue("plan_qty"); + + } + jsonMst.put("total_qty", qty); + WQLObject.getWQLObject("ST_IVT_IOStorInv").insert(jsonMst); + + return iostorinv_id; + } + + @Override + public JSONArray getOutBillDtl(JSONObject whereJson) { + whereJson.put("flag", "2"); + JSONArray jo = WQL.getWO("QST_IVT_PRODUCTOUT_01") + .addParamMap(whereJson) + .process() + .getResultJSONArray(0); + return jo; + } + + @Override + public JSONArray getOutBillDis(JSONObject whereJson) { + whereJson.put("flag", "3"); + JSONArray jo = WQL.getWO("QST_IVT_PRODUCTOUT_01") + .addParamMap(whereJson) + .process() + .getResultJSONArray(0); + return jo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(JSONObject whereJson) { + WQLObject dtlTab = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONArray array = whereJson.getJSONArray("tableData"); + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); + + JSONObject jsonArea = WQL.getWO("QSCH_REGION_01").addParam("flag", "2").addParam("value", whereJson.getString("product_code")).process().uniqueResult(0); + jsonMst.put("biz_date", whereJson.getString("biz_date").substring(0, 10)); + jsonMst.put("bill_type", whereJson.getString("bill_type")); + jsonMst.put("product_id", jsonArea.getString("dict_id")); + jsonMst.put("product_code", jsonArea.getString("value")); + jsonMst.put("product_name", jsonArea.getString("label")); + jsonMst.put("detail_count", array.size() + ""); + jsonMst.put("remark", whereJson.getString("remark")); + jsonMst.put("update_optid", currentUserId + ""); + jsonMst.put("update_optname", nickName); + jsonMst.put("update_time", now); + + // 删除明细 + dtlTab.delete("iostorinv_id = '"+jsonMst.getString("iostorinv_id")+"'"); + double qty = 0.0; // 主表重量 + for (int i = 0; i < array.size(); i++) { + JSONObject row = array.getJSONObject(i); + // 校验计划数量不能为零 + double plan_qty = row.getDoubleValue("plan_qty"); + if (plan_qty == 0.0) { + throw new BadRequestException("数量不能为0"); + } + JSONObject jsonDtl = new JSONObject(); + jsonDtl.put("iostorinvdtl_id", IdUtil.getSnowflake(1, 1).nextId() + ""); + jsonDtl.put("iostorinv_id", jsonMst.getLongValue("iostorinv_id")); + jsonDtl.put("seq_no", (i + 1) + ""); + jsonDtl.put("material_id", row.getString("material_id")); + jsonDtl.put("pcsn", row.getString("pcsn")); + jsonDtl.put("quality_scode", "01"); + jsonDtl.put("bill_status", "10"); + jsonDtl.put("qty_unit_id", row.get("qty_unit_id")); + jsonDtl.put("qty_unit_name", row.getString("qty_unit_name")); + jsonDtl.put("plan_qty", row.get("plan_qty")); + jsonDtl.put("remark", row.getString("remark")); + jsonDtl.put("assign_qty", "0"); + jsonDtl.put("unassign_qty", row.get("plan_qty")); + dtlTab.insert(jsonDtl); + + qty += jsonDtl.getDoubleValue("plan_qty"); + + } + jsonMst.put("total_qty", qty); + mstTab.update(jsonMst); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allDiv(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("查不到出库单信息"); + } + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "1") + .addParam("bill_status", "20") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(dtls)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + JSONObject jsonMap = new JSONObject(); + double assign_qty = dtl.getDoubleValue("assign_qty"); // 已分配重量 + + // 根据批次物料找到库存出掉 + jsonMap.put("flag", "2"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("pcsn", dtl.getString("pcsn")); + jsonMap.put("region_code", whereJson.getString("sect_id")); + jsonMap.put("product_area", whereJson.getString("product_code")); + + JSONObject jsonIvt = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01").addParamMap(jsonMap).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonIvt)) throw new BadRequestException("库存不足"); + + double canuse_qty = jsonIvt.getDoubleValue("canuse_qty"); + jsonIvt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + //更新库存 + jsonIvt.put("bill_type_scode", jo_mst.getString("bill_type")); + jsonIvt.put("inv_id", dtl.getString("iostorinv_id")); + jsonIvt.put("bill_code", jo_mst.getString("bill_code")); + jsonIvt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(jsonIvt, "11"); + + //生成分配明细 + JSONObject jsonDis = new JSONObject(); + jsonDis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDis.put("iostorinv_id", dtl.getLongValue("iostorinv_id")); + jsonDis.put("iostorinvdtl_id", dtl.getLongValue("iostorinvdtl_id")); + jsonDis.put("seq_no", "1"); + jsonDis.put("region_code", jsonIvt.getString("region_code")); + jsonDis.put("region_name", jsonIvt.getString("region_name")); + jsonDis.put("struct_id", jsonIvt.getString("struct_id")); + jsonDis.put("struct_code", jsonIvt.getString("struct_code")); + jsonDis.put("struct_name", jsonIvt.getString("struct_name")); + jsonDis.put("material_id", jsonIvt.getString("material_id")); + jsonDis.put("pcsn", jsonIvt.getString("pcsn")); + jsonDis.put("work_status", "00"); + jsonDis.put("storagevehicle_code", jsonIvt.getString("vehicle_code")); + jsonDis.put("qty_unit_id", dtl.getLongValue("qty_unit_id")); + jsonDis.put("qty_unit_name", dtl.getString("qty_unit_name")); + jsonDis.put("plan_qty", jsonIvt.getDoubleValue("change_qty")); + wo_dis.insert(jsonDis); + + // 锁定点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type","3"); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+jsonIvt.getString("vehicle_code")+"'"); + + + HashMap map_dtl = new HashMap(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (unassign_qty == 0) { + map_dtl.put("bill_status", "30"); + } else { + map_dtl.put("bill_status", "20"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allDivOne(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("查不到出库单信息"); + } + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "1") + .addParam("bill_status", "20") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(dtls)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + JSONObject jsonMap = new JSONObject(); + double assign_qty = dtl.getDoubleValue("assign_qty"); // 已分配重量 + + // 根据批次物料找到库存出掉 + jsonMap.put("flag", "2"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("pcsn", dtl.getString("pcsn")); + jsonMap.put("region_code", whereJson.getString("sect_id")); + jsonMap.put("product_area", whereJson.getString("product_code")); + + JSONObject jsonIvt = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01").addParamMap(jsonMap).process().uniqueResult(0); + if (ObjectUtil.isEmpty(jsonIvt)) throw new BadRequestException("库存不足"); + + double canuse_qty = jsonIvt.getDoubleValue("canuse_qty"); + jsonIvt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + //更新库存 + jsonIvt.put("bill_type_scode", jo_mst.getString("bill_type")); + jsonIvt.put("inv_id", dtl.getString("iostorinv_id")); + jsonIvt.put("bill_code", jo_mst.getString("bill_code")); + jsonIvt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(jsonIvt, "11"); + + //生成分配明细 + JSONObject jsonDis = new JSONObject(); + jsonDis.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + jsonDis.put("iostorinv_id", dtl.getLongValue("iostorinv_id")); + jsonDis.put("iostorinvdtl_id", dtl.getLongValue("iostorinvdtl_id")); + jsonDis.put("seq_no", "1"); + jsonDis.put("region_code", jsonIvt.getString("region_code")); + jsonDis.put("region_name", jsonIvt.getString("region_name")); + jsonDis.put("struct_id", jsonIvt.getString("struct_id")); + jsonDis.put("struct_code", jsonIvt.getString("struct_code")); + jsonDis.put("struct_name", jsonIvt.getString("struct_name")); + jsonDis.put("material_id", jsonIvt.getString("material_id")); + jsonDis.put("pcsn", jsonIvt.getString("pcsn")); + jsonDis.put("work_status", "00"); + jsonDis.put("storagevehicle_code", jsonIvt.getString("vehicle_code")); + jsonDis.put("qty_unit_id", dtl.getLongValue("qty_unit_id")); + jsonDis.put("qty_unit_name", dtl.getString("qty_unit_name")); + jsonDis.put("plan_qty", jsonIvt.getDoubleValue("change_qty")); + wo_dis.insert(jsonDis); + + // 锁定点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type","3"); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+jsonIvt.getString("vehicle_code")+"'"); + + + HashMap map_dtl = new HashMap(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (unassign_qty == 0) { + map_dtl.put("bill_status", "30"); + } else { + map_dtl.put("bill_status", "20"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allCancel(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + //点位表 + WQLObject wo_point = WQLObject.getWQLObject("sch_base_point"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + //查询未生成和生成未下发的分配记录 + JSONArray disArr = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "3") + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .addParam("iostorinvdis_id", whereJson.getString("iostorinvdis_id")) + .addParam("task_id", whereJson.getString("task_id")) + .addParam("iostorinv_id", iostorinv_id) + .addParam("bill_status", "01") + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(disArr)) { + throw new BadRequestException("不存在可以取消的出库分配明细"); + } + + for (int i = 0; i < disArr.size(); i++) { + JSONObject dis = disArr.getJSONObject(i); + HashMap map = new HashMap<>(); + String iostorinvdtl_id = dis.getString("iostorinvdtl_id"); + + // 判断此分配明细下是否有正在执行中的任务 + JSONArray dtl = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "4") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .process() + .getResultJSONArray(0); + + //若存在记录,则不可取消该出库明细对应的任何分配记录 + if (dtl.size() != 0) { + throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + } + + double plan_qty = dis.getDoubleValue("plan_qty"); + //更新库存 + dis.put("change_qty", plan_qty + ""); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("quality_scode", "01"); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + + //删除【出入库单分配表】中分配记录 + wo_dis.delete("iostorinvdis_id='" + dis.getString("iostorinvdis_id") + "'"); + + //更新【出入库单明细表】中分配记录 + JSONObject jo_dtl = wo_dtl.query("iostorinvdtl_id = '" + iostorinvdtl_id + "'").uniqueResult(0); + jo_dtl.put("assign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("assign_qty"), plan_qty)); + jo_dtl.put("unassign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("plan_qty"), jo_dtl.getDoubleValue("assign_qty"))); + + if (jo_dtl.getDoubleValue("assign_qty") < 0) { + jo_dtl.put("assign_qty", 0); + } + + if (jo_dtl.getDoubleValue("unassign_qty") > jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("unassign_qty", jo_dtl.getDoubleValue("plan_qty")); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("bill_status", "10"); + } else { + jo_dtl.put("bill_status", "20"); + } + wo_dtl.update(jo_dtl); + + // 如果对应明细生成了任务 则删除任务 + JSONObject jsonTaskDel = new JSONObject(); + jsonTaskDel.put("is_delete","1"); + wo_Task.update(jsonTaskDel,"task_id = '"+dis.getString("task_id")+"'"); + + // 解锁点位 + JSONObject jsonUpdataPoint = new JSONObject(); + jsonUpdataPoint.put("lock_type","1"); + wo_point.update(jsonUpdataPoint,"vehicle_code = '"+dis.getString("storagevehicle_code")+"'"); + + //更新主表状态 + this.updateMststatus(iostorinv_id); + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void oneCancel(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + // 查询此分配明细下的所有相同箱号的分配明细 + JSONArray diss = wo_dis.query("box_no = '" + whereJson.getString("storagevehicle_code") + "' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + + for (int i = 0; i < diss.size(); i++) { + JSONObject dis = diss.getJSONObject(i); + HashMap map = new HashMap<>(); + + String iostorinvdtl_id = dis.getString("iostorinvdtl_id"); + //统计【出入库单分配表】执行状态大于等于执行中,或【任务指令表】任务状态大于等于下发时的记录和 + JSONArray dtl = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "4") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .process() + .getResultJSONArray(0); + //若存在记录,则不可取消该出库明细对应的任何分配记录 + if (dtl.size() != 0) { + throw new BadRequestException("存在出库明细对应任务执行中或完成!"); + } + double plan_qty = dis.getDoubleValue("plan_qty"); + //更新库存 + dis.put("change_qty", plan_qty + ""); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + //删除【出入库单分配表】中分配记录 + wo_dis.delete("iostorinvdis_id='" + dis.getString("iostorinvdis_id") + "'"); + //更新【出入库单明细表】中分配记录 + JSONObject jo_dtl = wo_dtl.query("iostorinvdtl_id = '" + iostorinvdtl_id + "'").uniqueResult(0); + + + jo_dtl.put("assign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("assign_qty"), plan_qty)); + jo_dtl.put("unassign_qty", NumberUtil.sub(jo_dtl.getDoubleValue("plan_qty"), jo_dtl.getDoubleValue("assign_qty"))); + + if (jo_dtl.getDoubleValue("assign_qty") < 0) { + jo_dtl.put("assign_qty", 0); + } + + if (jo_dtl.getDoubleValue("unassign_qty") > jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("unassign_qty", jo_dtl.getDoubleValue("plan_qty")); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == jo_dtl.getDoubleValue("plan_qty")) { + jo_dtl.put("bill_status", "10"); + } else { + jo_dtl.put("bill_status", "30"); + } + + if (jo_dtl.getDoubleValue("unassign_qty") == 0) { + jo_dtl.put("bill_status", "40"); + } + + wo_dtl.update(jo_dtl); + //更新主表状态 + this.updateMststatus(iostorinv_id); + //判断是否存在同单据的同起点仓位的分配 + JSONArray flag = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "5") + .addParam("is_issued", "0") + .addParam("struct_id", dis.getString("struct_id")) + .addParam("iostorinv_id", iostorinv_id) + .addParam("bill_status", "01") + .process() + .getResultJSONArray(0); + if (flag.size() == 0) {//仓位载具冻结数为0 + //任务号不为空 + if (ObjectUtil.isNotEmpty(dis.getString("task_id"))) { + //更新对应任务为删除 + map.put("is_delete", "1"); + wo_Task.update(map, "task_id='" + dis.getString("task_id") + "'"); + } + //解锁起点仓位点位 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", dis.getString("struct_id")); + from_start.put("lock_type", "1"); + storPublicService.updateStructAndPoint2(from_start); + //解锁终点仓位点位 + if (StrUtil.isNotEmpty(dis.getString("point_code"))) { + JSONObject from_end = new JSONObject(); + from_end.put("point_code", dis.getString("point_code")); + from_end.put("lock_type", "1"); + storPublicService.updateStructAndPoint2(from_end); + } + } else {//仓位载具扔有冻结数,需改任务类型为拣选出库 + //任务号不为空 + /* if (ObjectUtil.isNotEmpty(dis.getString("task_id"))) { + //更新对应任务为拣选出库 + map.put("taskdtl_type", "05"); + wo_Task.update(map, "task_id='" + dis.getString("task_id") + "'"); + }*/ + } + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allSetPoint(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //点位表 + WQLObject wo_Point = WQLObject.getWQLObject("SCH_BASE_Point"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + String point_code = whereJson.getString("point_code"); // 终点 + String iostorinv_id = whereJson.getString("iostorinv_id"); + String iostorinvdtl_id = whereJson.getString("iostorinvdtl_id"); + + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("未查到相关出库单"); + } + + JSONObject jsonPoint2 = wo_Point.query("lock_type='1' and (vehicle_code='' or vehicle_code IS NULL) and point_code='" + point_code + "'").uniqueResult(0); + //如果终点站点被锁定或者有载具号,则不允许设置点位 + if (ObjectUtil.isEmpty(jsonPoint2)) { + throw new BadRequestException("该站点被锁定或者有载具号,不允许设置!"); + } + + // 查询此明细的所有未生成的分配明细(根据片区、排 分组) + JSONArray allArr = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "5") + .addParam("iostorinvdtl_id", iostorinvdtl_id) + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + if (ObjectUtil.isEmpty(allArr)) throw new BadRequestException("当前没有可设置的分配明细"); + + for (int i = 0; i < allArr.size(); i++) { + JSONObject jsonDis = allArr.getJSONObject(i); + + // 创建任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("task_type", "010502"); + jsonTask.put("point_code1", jsonDis.getString("struct_code")); + jsonTask.put("point_code2", point_code); + jsonTask.put("vehicle_code", jsonDis.getString("storagevehicle_code")); + jsonTask.put("product_area", jo_mst.getString("product_code")); + + ProductOutTask task = new ProductOutTask(); + String task_id = task.createTask(jsonTask); + + // 修改明细状态 + jsonDis.put("work_status", "01"); + jsonDis.put("point_id", jsonPoint2.getString("point_id")); + jsonDis.put("task_id", task_id); + wo_dis.update(jsonDis); + } + + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void manualDiv(JSONObject form) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //库区表 + WQLObject wo_sect = WQLObject.getWQLObject("st_ivt_sectattr"); + + //定义需要更新的仓位集合 + HashMap Struct_map = new HashMap<>(); + JSONObject whereJson = form.getJSONObject("row"); + JSONArray rows = form.getJSONArray("rows"); + String iostorinv_id = whereJson.getString("iostorinv_id"); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + // 如果是发货出库则判断运费和物流公司不能为空 + String bill_type = jo_mst.getString("bill_type"); + if (StrUtil.equals(bill_type, "1001")) { + String trans_code = jo_mst.getString("trans_code"); + String estimated_freight = jo_mst.getString("estimated_freight"); + + if (ObjectUtil.isEmpty(trans_code)) throw new BadRequestException("物流公司不能为空"); + if (ObjectUtil.isEmpty(estimated_freight)) throw new BadRequestException("预估运费不能为空"); + + } + + //查询生成和未分配完的明细 + JSONObject dtl = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "2") + .addParam("bill_status", "30") + .addParam("unassign_flag", "1") + .addParam("iostorinv_id", iostorinv_id) + .addParam("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")) + .process() + .uniqueResult(0); + if (ObjectUtil.isEmpty(dtl)) { + throw new BadRequestException("当前订单无可分配出库明细"); + } + + // 判断此明细是否有子卷号:没有则过滤箱号、将此箱子里的所有子卷带出来 + if (ObjectUtil.isEmpty(dtl.getString("pcsn"))) { + HashSet boxSet = new HashSet<>(); + JSONArray boxArr = new JSONArray(); + + for (int i = 0; i < rows.size(); i++) { + JSONObject json = rows.getJSONObject(i); + boxSet.add(json.getString("storagevehicle_code")); + } + + for (String box_no : boxSet) { + JSONArray boxIvtArr = WQL.getWO("QST_IVT_CHECKOUTBILL") + .addParam("flag", "3") + .addParam("box_no", box_no) + .process() + .getResultJSONArray(0); + + boxArr.addAll(boxIvtArr); + } + rows.clear(); + rows.addAll(boxArr); + } + + double assign_qty = dtl.getDoubleValue("assign_qty"); + double unassign_qty = dtl.getDoubleValue("unassign_qty"); + double plan_qty = dtl.getDoubleValue("plan_qty"); + + if (rows.size() != 0) { + for (int j = 0; j < rows.size(); j++) { + JSONObject ivt = rows.getJSONObject(j); + + double canuse_qty = ivt.getDoubleValue("ivt_qty"); + assign_qty = NumberUtil.add(assign_qty, canuse_qty); + + if (unassign_qty >= canuse_qty) { +// unassign_qty = unassign_qty - canuse_qty; + unassign_qty = NumberUtil.sub(unassign_qty, canuse_qty); + ivt.put("change_qty", canuse_qty + ""); + } else { + ivt.put("change_qty", canuse_qty + ""); + unassign_qty = 0; + } + //更新库存 + ivt.put("bill_type_scode", jo_mst.getString("bill_type")); + ivt.put("inv_id", dtl.getString("iostorinv_id")); + ivt.put("bill_code", jo_mst.getString("bill_code")); + ivt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(ivt, "11"); + //生成分配明细 + dtl.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + dtl.put("sect_id", ivt.getString("sect_id")); + dtl.put("sect_code", ivt.getString("sect_code")); + dtl.put("sect_name", ivt.getString("sect_name")); + dtl.put("struct_id", ivt.getString("struct_id")); + dtl.put("struct_code", ivt.getString("struct_code")); + dtl.put("struct_name", ivt.getString("struct_name")); + dtl.put("pcsn", ivt.getString("pcsn")); + dtl.put("box_no", ivt.getString("storagevehicle_code")); + dtl.put("storagevehicle_id", ivt.getString("storagevehicle_id")); + dtl.put("storagevehicle_code", ivt.getString("storagevehicle_code")); + dtl.put("storagevehicle_type", ivt.getString("storagevehicle_type")); + dtl.put("is_issued", "0"); + dtl.put("plan_qty", ivt.getDoubleValue("change_qty")); + dtl.put("real_qty", ivt.getDoubleValue("change_qty")); + // 如果所属仓位是虚拟区 则将分配明细状态变为生成 + JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); + if (StrUtil.equals(jsonSect.getString("sect_type_attr"), "09")) { + dtl.put("work_status", "01"); + } else { + dtl.put("work_status", "00"); + } + wo_dis.insert(dtl); + //记录需锁定的仓位 + Struct_map.put(ivt.getString("struct_id"), ivt); + if (unassign_qty == 0) { + break; + } + } +// HashMap map_dtl = new HashMap(); + JSONObject map_dtl = new JSONObject(); + //更新明细 + map_dtl.put("unassign_qty", unassign_qty + ""); + map_dtl.put("assign_qty", assign_qty + ""); + if (map_dtl.getDoubleValue("unassign_qty") <= 0) { + map_dtl.put("bill_status", "40"); + } else { + map_dtl.put("bill_status", "30"); + } + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + } + + // 判断是否还有相同物料相同仓位的明细 + if (ObjectUtil.isNotEmpty(dtl.getString("pcsn"))) { + JSONObject jsonMap = new JSONObject(); + jsonMap.put("flag", "4"); + jsonMap.put("material_id", dtl.getString("material_id")); + jsonMap.put("iostorinv_id", iostorinv_id); + jsonMap.put("iostorinvdtl_id", whereJson.getString("iostorinvdtl_id")); + + JSONArray dtlArr = WQL.getWO("ST_OUTIVT01").addParamMap(jsonMap).process().getResultJSONArray(0); + for (int i = 0; i < dtlArr.size(); i++) { + JSONObject json = dtlArr.getJSONObject(i); + + JSONObject ivt = WQL.getWO("ST_OUTIVT01") + .addParam("flag", "1") + .addParam("material_id", json.getString("material_id")) + .addParam("pcsn", json.getString("pcsn")) + .process().uniqueResult(0); + + //更新库存 + ivt.put("change_qty", ivt.getDoubleValue("canuse_qty")); + ivt.put("bill_type_scode", jo_mst.getString("bill_type")); + ivt.put("inv_id", json.getString("iostorinv_id")); + ivt.put("bill_code", jo_mst.getString("bill_code")); + ivt.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(ivt, "11"); + //生成分配明细 + json.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + json.put("sect_id", ivt.getString("sect_id")); + json.put("sect_code", ivt.getString("sect_code")); + json.put("sect_name", ivt.getString("sect_name")); + json.put("struct_id", ivt.getString("struct_id")); + json.put("struct_code", ivt.getString("struct_code")); + json.put("struct_name", ivt.getString("struct_name")); + json.put("pcsn", ivt.getString("pcsn")); + json.put("box_no", ivt.getString("storagevehicle_code")); + json.put("storagevehicle_id", ivt.getString("storagevehicle_id")); + json.put("storagevehicle_code", ivt.getString("storagevehicle_code")); + json.put("storagevehicle_type", ivt.getString("storagevehicle_type")); + json.put("is_issued", "0"); + json.put("plan_qty", ivt.getDoubleValue("change_qty")); + json.put("real_qty", ivt.getDoubleValue("change_qty")); + // 如果所属仓位是虚拟区 则将分配明细状态变为生成 + JSONObject jsonSect = wo_sect.query("sect_id = '" + ivt.getString("sect_id") + "'").uniqueResult(0); + if (StrUtil.equals(jsonSect.getString("sect_type_attr"), "09")) { + json.put("work_status", "01"); + } else { + json.put("work_status", "00"); + } + wo_dis.insert(json); + + // 更新明细 + HashMap map_dtl = new HashMap(); + map_dtl.put("unassign_qty", "0"); + map_dtl.put("assign_qty", ivt.getString("change_qty")); + map_dtl.put("bill_status", "40"); + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + json.getString("iostorinvdtl_id") + "'"); + } + } + + //更新主表状态 + this.updateMststatus(iostorinv_id); + //锁定点位、仓位 + Collection c = Struct_map.values(); + Iterator it = c.iterator(); + for (; it.hasNext(); ) { + JSONObject Struct = it.next(); + //锁定起点仓位点位 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", Struct.getString("struct_id")); + from_start.put("lock_type", "3"); + from_start.put("inv_type", jo_mst.getString("bill_type")); + from_start.put("inv_id", jo_mst.getString("iostorinv_id")); + from_start.put("inv_code", jo_mst.getString("bill_code")); + storPublicService.updateStructAndPoint(from_start); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirm(JSONObject form) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + // 任务表 + WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); + // 点位表 + WQLObject pointTab = WQLObject.getWQLObject("SCH_BASE_Point"); + + String iostorinv_id = form.getString("iostorinv_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("未查到相关出库单"); + } + + //判断分配明细中是否有未生成状态的分配明细 + JSONArray disArr = wo_dis.query("iostorinv_id = '" + iostorinv_id + "' and work_status = '00'").getResultJSONArray(0); + if (ObjectUtil.isNotEmpty(disArr)) throw new BadRequestException("有未生成状态的分配明细,不允许强制确认"); + + //查询生成和未分配完的明细 + JSONArray dtls = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "6") + .addParam("bill_status", "40") + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + if (dtls.size() != 0) { + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.getJSONObject(i); + HashMap map_dtl = new HashMap<>(); + //更新明细状态 + map_dtl.put("bill_status", "99"); + wo_dtl.update(map_dtl, "iostorinvdtl_id='" + dtl.getString("iostorinvdtl_id") + "'"); + } + } + + HashMap map_mst = new HashMap<>(); + map_mst.put("bill_status", "99"); + map_mst.put("confirm_optid", currentUserId + ""); + map_mst.put("confirm_optname", nickName); + map_mst.put("confirm_time", now); + //更新主表状态 + wo_mst.update(map_mst, "iostorinv_id = '" + iostorinv_id + "'"); + + //查询需要更新库存的分配记录 + JSONArray diss = WQL.getWO("QST_IVT_PRODUCTOUTDIV_01") + .addParam("flag", "7") + .addParam("iostorinv_id", iostorinv_id) + .process() + .getResultJSONArray(0); + + for (int i = 0; i < diss.size(); i++) { + JSONObject dis = diss.getJSONObject(i); + double plan_qty = dis.getDoubleValue("plan_qty"); + + //更新已出库重量 + dis.put("change_qty", plan_qty); + dis.put("bill_type_scode", jo_mst.getString("bill_type")); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getString("bill_code")); + dis.put("bill_table", "ST_IVT_IOStorInv"); + dis.put("quality_scode", "01"); + storPublicService.IOStor(dis, "21"); + + //解锁起点 + JSONObject from_start = new JSONObject(); + from_start.put("lock_type", "1"); + from_start.put("point_status", "1"); + from_start.put("vehicle_code", ""); + pointTab.update(from_start,"vehicle_code = '"+dis.getString("storagevehicle_code")+"'"); + + // 更新分配明细执行状态为 - 99 + JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0); + jsonDis.put("work_status", "99"); + wo_dis.update(jsonDis); + + // 更新对应任务为完成 + JSONObject jsonTask = taskTab.query("task_id = '" + jsonDis.getString("task_id") + "' and task_status < '7'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTask)) { + jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); + taskTab.update(jsonTask); + } + + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void finishTask(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + //任务表 + WQLObject wo_Task = WQLObject.getWQLObject("SCH_BASE_Task"); + String task_id = whereJson.getString("task_id"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + JSONObject task = wo_Task.query("task_status<>'7' and task_id='" + task_id + "'").uniqueResult(0); + + if (task == null) { + throw new BadRequestException("查询不到操作的任务记录!"); + } + + JSONObject dtljo = wo_dis.query("task_id='" + task_id + "'").uniqueResult(0); + whereJson.put("iostorinv_id", dtljo.getString("iostorinv_id")); + + HashMap map = new HashMap<>(); + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); + map.put("update_optid", currentUserId + ""); + map.put("update_optname", nickName); + map.put("update_time", now); + + //更新任务为完成 + wo_Task.update(map, "task_id='" + task_id + "'"); + + // 查询此任务下所有的分配明细 + JSONArray disArr = wo_dis.query("task_id='" + task_id + "'").getResultJSONArray(0); + for (int i = 0; i < disArr.size(); i++) { + JSONObject jsonDis = disArr.getJSONObject(i); + // 更新分配明细为完成 + jsonDis.put("work_status", "99"); + wo_dis.update(jsonDis); + + // 判断此明细下是否还有未完成的分配明细 + JSONObject jsonDtl = wo_dtl.query("iostorinvdtl_id = '" + jsonDis.getString("iostorinvdtl_id") + "'").uniqueResult(0); + JSONArray disArr2 = wo_dis.query("iostorinvdtl_id = '" + jsonDtl.getString("iostorinvdtl_id") + "' and work_status <> '99'").getResultJSONArray(0); + if (ObjectUtil.isEmpty(disArr2)) { + // 更新明细为完成 + jsonDtl.put("bill_status", "99"); + wo_dtl.update(jsonDtl); + } + } + + //判断是否还有未完成的明细 + JSONArray ja = wo_dtl.query("bill_status<>'99' and iostorinv_id='" + whereJson.getString("iostorinv_id") + "'").getResultJSONArray(0); + if (ja.size() == 0) { + this.confirm(whereJson); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void backConfirm(JSONObject whereJson) { + WQLObject dtl_wql = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); + WQLObject mst_wql = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + + JSONObject mst_row = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + //校验主表状态为生成 + String bill_status = mst_row.getString("bill_status"); + if (!bill_status.equals("10")) { + throw new BadRequestException("主表状态必须为生成状态!"); + } + 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"); + + 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_wql.insert(dtl_row); + } + + mst_row.put("iostorinv_id", iostorinv_id); + mst_row.put("bill_code", bill_code); + mst_row.put("io_type", "0"); + mst_row.put("bill_type", "000401"); + mst_row.put("buss_type", ((String) mst_row.get("bill_type")).substring(0, 4)); + mst_wql.insert(mst_row); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + JSONObject mst_row2 = mst_wql.query("iostorinv_id = '" + whereJson.get("iostorinv_id") + "'").uniqueResult(0); + + mst_row2.put("bill_status", "99"); + mst_row2.put("confirm_optid", currentUserId); + mst_row2.put("confirm_optname", nickName); + mst_row2.put("confirm_time", now); + //更新主表状态为99 + mst_wql.update(mst_row2); + + HashMap map = new HashMap<>(); + map.put("bill_status", "99"); + dtl_wql.update(map, "iostorinv_id = '" + whereJson.get("iostorinv_id") + "'"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException { + + WQLObject custTab = WQLObject.getWQLObject("MD_CS_CustomerBase"); // 客户基本信息表 + WQLObject mstTab = WQLObject.getWQLObject("ST_IVT_IOStorInv"); // 出入库主表 + WQLObject dtlTab = WQLObject.getWQLObject("st_ivt_iostorinvdtl"); // 出入库明细表 + WQLObject disTab = WQLObject.getWQLObject("st_ivt_iostorinvdis"); // 出入库分配明细 + WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); // 子卷包装关系表 + WQLObject tranTab = WQLObject.getWQLObject("MD_CS_TransportationBase"); // 物流公司表 + WQLObject storTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr"); // 实物仓库表 + + + JSONObject jsonMst = mstTab.query("iostorinv_id = '" + MapUtil.getStr(whereJson, "iostorinv_id") + "'").uniqueResult(0); + String cust_code = jsonMst.getString("cust_code"); + + JSONObject jsonCust = custTab.query("cust_code = '" + cust_code + "'").uniqueResult(0); + String bill_type = jsonMst.getString("bill_type"); + + int j = Integer.parseInt((String) whereJson.get("j")); + + HashMap oneMap = new HashMap<>(); + // 2.获取输出流 + ServletOutputStream outputStream = response.getOutputStream(); + String code_template = ""; + int shd_dtl_num = 0; // 送货单明细数 + + // 调拨发货单 + if (StrUtil.equals(bill_type, "1004")) { + shd_dtl_num = 44; + //1.获取系统参数模板地址 + code_template = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("allot_order").getValue(); + + // 5.单组填充 + JSONObject jsonDtl = dtlTab.query("iostorinv_id = '" + jsonMst.getString("iostorinv_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDtl)) { + // 调拨单号 + oneMap.put("vbeln", jsonMst.getString("bill_code")); + // 调出仓库 + oneMap.put("out_stor", jsonMst.getString("stor_code")); + // 调入仓库 + JSONObject jsonStor = storTab.query("stor_id = '" + jsonMst.getString("out_stor_id") + "'").uniqueResult(0); + oneMap.put("in_stor", jsonStor.getString("stor_code")); + + } + String pageNow = String.valueOf(j + 1); // 页码 + oneMap.put("page", pageNow + "/" + MapUtil.getStr(whereJson, "pageNum")); + oneMap.put("consignee", jsonMst.getString("consignee")); // 收货单位 + oneMap.put("receiver", jsonMst.getString("receiver")); // 收货人 + String receiptaddress = jsonMst.getString("receiptaddress"); + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getString("receiptphone")); // 收货人联系电话 + // 物流公司 + JSONObject jsonTran = tranTab.query("cust_code = '" + jsonMst.getString("trans_code") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getString("cust_name")); + } + oneMap.put("drivername", jsonMst.getString("drivername")); // 司机 + oneMap.put("carno", jsonMst.getString("carno")); // 车牌号 + oneMap.put("driverphone", jsonMst.getString("driverphone")); // 司机联系电话 + // 总箱数 + JSONArray jsonAllBox = WQL.getWO("ST_OUTIVT02").addParam("flag", "4").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (int t = 0; t < jsonAllBox.size(); t++) { + JSONObject json = jsonAllBox.getJSONObject(t); + all_box_qty = NumberUtil.add(all_box_qty, json.getDoubleValue("box_qty")); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getString("deliveryaddress")); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getString("deliveryname")); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getString("deliveryphone")); // 送货方联系电话 + } else { + + if (ObjectUtil.isEmpty(jsonCust)) throw new BadRequestException("客户不存在"); + shd_dtl_num = jsonCust.getIntValue("shd_dtl_num"); + //1.根据出入库主表中 收货单位 查询客户表中的模板路径 + code_template = jsonCust.getString("shd_print_no"); + + JSONObject jsonDtl = dtlTab.query("iostorinv_id = '" + jsonMst.getString("iostorinv_id") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonDtl)) { + // 送货单号 + oneMap.put("vbeln", jsonDtl.getString("vbeln")); + // 订单号 + String source_bill_code = jsonDtl.getString("source_bill_code"); + if (ObjectUtil.isNotEmpty(source_bill_code)) { + try { + oneMap.put("order_no", source_bill_code.substring(0, source_bill_code.indexOf("-"))); + } catch (Exception e) { + oneMap.put("order_no", source_bill_code); + } + } + } + String pageNow = String.valueOf(j + 1); // 页码 + oneMap.put("page", pageNow + "/" + MapUtil.getStr(whereJson, "pageNum")); + oneMap.put("consignee", jsonMst.getString("consignee")); // 收货单位 + oneMap.put("receiver", jsonMst.getString("receiver")); // 收货人 + String receiptaddress = jsonMst.getString("receiptaddress"); + /* StrBuilder strBuilder = new StrBuilder(receiptaddress); + + if (receiptaddress.length() > 10) { + strBuilder.insert(11,"\n"); + }*/ + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getString("receiptphone")); // 收货人联系电话 + // 物流公司 + JSONObject jsonTran = tranTab.query("cust_code = '" + jsonMst.getString("trans_code") + "'").uniqueResult(0); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getString("cust_name")); + } + oneMap.put("drivername", jsonMst.getString("drivername")); // 司机 + oneMap.put("carno", jsonMst.getString("carno")); // 车牌号 + oneMap.put("driverphone", jsonMst.getString("driverphone")); // 司机联系电话 + // 总箱数 + JSONArray jsonAllBox = WQL.getWO("ST_OUTIVT02").addParam("flag", "4").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (int t = 0; t < jsonAllBox.size(); t++) { + JSONObject json = jsonAllBox.getJSONObject(t); + all_box_qty = NumberUtil.add(all_box_qty, json.getDoubleValue("box_qty")); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getString("deliveryaddress")); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getString("deliveryname")); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getString("deliveryphone")); // 送货方联系电话 + } + + // 6.多组填充 + JSONArray dtlArr = WQL.getWO("ST_OUTIVT02").addParam("flag", "3").addParam("iostorinv_id", MapUtil.getStr(whereJson, "iostorinv_id")).process().getResultJSONArray(0); + + + if (shd_dtl_num > dtlArr.size()) { + double all_qty = 0; + String order_no = ""; + ArrayList> flData = new ArrayList<>(); + WriteSheet sheet = EasyExcel.writerSheet().build(); + for (int i = 0; i < dtlArr.size(); i++) { + JSONObject json = dtlArr.getJSONObject(i); + + JSONObject jsonSub = subTab.query("package_box_sn = '" + json.getString("box_no") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) throw new BadRequestException("没有查询到子卷包装"); + order_no = jsonSub.getString("sale_order_name"); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getString("thickness_request") + "*" + jsonSub.getString("width"); + // 箱号 + String box_no = json.getString("box_no"); + String sub_box_no = ""; + if (ObjectUtil.isNotEmpty(box_no)) { + try { + sub_box_no = box_no.substring(box_no.lastIndexOf("@") + 1, box_no.length()); + } catch (Exception e) { + sub_box_no = box_no; + } + } + + HashMap mapFL = new HashMap<>(); + // 明细 +// String date_of_production = jsonSub.getString("date_of_production").replaceAll("[[\\s-:punct:]]", ""); +// mapFL.put("date_of_production", date_of_production); // 批号 : 子卷包装生产日期 + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", material_spec); +// mapFL.put("qty_unit_name", "KG"); + mapFL.put("box_no", sub_box_no); + mapFL.put("qty", NumberUtil.round(json.getString("qty"), 2).doubleValue()); + flData.add(mapFL); + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getString("qty")).doubleValue(); + } + // 订单号 + /* if (ObjectUtil.isNotEmpty(order_no)) { + oneMap.put("order_no",order_no.substring(0,order_no.indexOf("-"))); + }*/ + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + + oneMap.put("all_qty", all_qty); // 合计 + workBook.fill(oneMap, sheet); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } else { + double div = NumberUtil.div(dtlArr.size(), shd_dtl_num); + double ceil = Math.ceil(div); + Integer integer = Integer.valueOf(String.valueOf(NumberUtil.round(ceil, 0))); + + double all_qty = 0; + String order_no = ""; + ArrayList> flData = new ArrayList<>(); + for (int i = j * shd_dtl_num; i < (j + 1) * shd_dtl_num; i++) { + if (i == dtlArr.size()) { + break; + } + + JSONObject json = dtlArr.getJSONObject(i); + JSONObject jsonSub = subTab.query("package_box_sn = '" + json.getString("box_no") + "'").uniqueResult(0); + if (ObjectUtil.isEmpty(jsonSub)) throw new BadRequestException("没有查询到子卷包装"); + order_no = jsonSub.getString("sale_order_name"); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getString("thickness_request") + "*" + jsonSub.getString("width"); + // 箱号 + String box_no = json.getString("box_no"); + String sub_box_no = ""; + if (ObjectUtil.isNotEmpty(box_no)) { + try { + sub_box_no = box_no.substring(box_no.lastIndexOf("@") + 1, box_no.length()); + } catch (Exception e) { + sub_box_no = box_no; + } + } + + HashMap mapFL = new HashMap<>(); + // 明细 +// String date_of_production = jsonSub.getString("date_of_production").replaceAll("[[\\s-:punct:]]", ""); +// mapFL.put("date_of_production", date_of_production); // 批号 : 子卷包装生产日期 + mapFL.put("material_name", json.getString("material_name")); + mapFL.put("material_spec", material_spec); +// mapFL.put("qty_unit_name", "KG"); + mapFL.put("box_no", sub_box_no); + mapFL.put("qty", NumberUtil.round(json.getString("qty"), 2).doubleValue()); + flData.add(mapFL); + + // 计算合计重量 + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getString("qty")).doubleValue(); + + } + // 订单号 + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + oneMap.put("all_qty", all_qty); // 合计 + WriteSheet sheet = EasyExcel.writerSheet(0).build(); + workBook.fill(oneMap, sheet); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } + } + + /** + * 更新主表状态 + * + * @param iostorinv_id + */ + void updateMststatus(String iostorinv_id) { + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + //出库明细表 + WQLObject wo_dtl = WQLObject.getWQLObject("ST_IVT_IOStorInvDtl"); + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + //查询主表信息 + JSONObject jo_mst = wo_mst.query("iostorinv_id = '" + iostorinv_id + "'").uniqueResult(0); + jo_mst.put("update_optid", currentUserId + ""); + jo_mst.put("update_optname", nickName); + jo_mst.put("update_time", now); + jo_mst.put("dis_optid", currentUserId + ""); + jo_mst.put("dis_optname", nickName); + jo_mst.put("dis_time", now); + //更新主表状态 + JSONArray dtls_40 = wo_dtl.query("bill_status='30' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + //已分配完明细数小于总明细数 + if (dtls_40.size() < jo_mst.getInteger("detail_count")) { + JSONArray dtls_30 = wo_dtl.query("bill_status='20' and iostorinv_id = '" + iostorinv_id + "'").getResultJSONArray(0); + //存在分配完的明细 + if (dtls_40.size() != 0) {//分配中明细数不为0 + jo_mst.put("bill_status", "20"); + } else if (dtls_40.size() == 0) { + //不存在分配中和分配完的明细 + if (dtls_30.size() == 0) { + jo_mst.put("bill_status", "10"); + }//存在分配中的明细 + else if (dtls_30.size() != 0) { + jo_mst.put("bill_status", "20"); + } + } + } else {//已分配完明细数等于总明细数 + jo_mst.put("bill_status", "30"); + } + wo_mst.update(jo_mst); + } + +} diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUTDIV_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUTDIV_01.wql new file mode 100644 index 00000000..b916cd9f --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUTDIV_01.wql @@ -0,0 +1,296 @@ +[交易说明] + 交易名: 成品出库分配逻辑 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.iostorinv_id TYPEAS s_string + 输入.iostorinvdtl_id TYPEAS s_string + 输入.iostorinvdis_id TYPEAS s_string + 输入.task_id TYPEAS s_string + 输入.bill_status TYPEAS s_string + 输入.unassign_flag TYPEAS s_string + 输入.material_id TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.region_code TYPEAS s_string + 输入.product_area TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + QUERY + SELECT + iosdtl.*, + ios.bill_code, + mb.material_code, + mb.material_name, + mb.material_spec, + mb.material_model + FROM + ST_IVT_IOStorInvDtl iosdtl + LEFT JOIN md_me_materialbase mb ON mb.material_id = iosdtl.material_id + LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = iosdtl.iostorinv_id + WHERE + 1=1 + OPTION 输入.iostorinv_id <> "" + iosdtl.iostorinv_id = 输入.iostorinv_id + ENDOPTION + + OPTION 输入.iostorinvdtl_id <> "" + iosdtl.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + OPTION 输入.bill_status <> "" + iosdtl.bill_status <= 输入.bill_status + ENDOPTION + + OPTION 输入.unassign_flag <> "" + iosdtl.unassign_qty >0 + ENDOPTION + + order by iosdtl.pcsn + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + ivt.*, + region.region_code, + region.region_name, + point.vehicle_code, + mater.material_code, + mater.material_name, + mater.material_spec, + mater.material_model + FROM + st_ivt_structivt ivt + LEFT JOIN md_me_materialbase mater ON mater.material_id = ivt.material_id + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + LEFT JOIN sch_base_region region ON region.region_code = point.region_code + WHERE + 1=1 + + OPTION 输入.material_id <> "" + ivt.material_id = 输入.material_id + ENDOPTION + + OPTION 输入.pcsn <> "" + ivt.pcsn = 输入.pcsn + ENDOPTION + + OPTION 输入.region_code <> "" + point.region_code = 输入.region_code + ENDOPTION + + OPTION 输入.product_area <> "" + point.product_area = 输入.product_area + ENDOPTION + + order by ivt.instorage_time DESC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "3" + QUERY + SELECT + dis.*, + ios.io_type, + ios.bill_code, + mb.material_code, + mb.material_name, + task.task_code, + task.task_status, + task.task_type, + point2.point_code + FROM + ST_IVT_IOStorInvDis dis + LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = dis.iostorinv_id + LEFT JOIN md_me_materialbase mb ON mb.material_id = dis.material_id + LEFT JOIN SCH_BASE_Task task ON task.task_id = dis.task_id AND task.is_delete = '0' + LEFT JOIN SCH_BASE_Point point2 ON point2.point_id = dis.point_id + WHERE + 1=1 + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + OPTION 输入.task_id <> "" + dis.task_id = 输入.task_id + ENDOPTION + + OPTION 输入.iostorinv_id <> "" + dis.iostorinv_id = 输入.iostorinv_id + ENDOPTION + + OPTION 输入.iostorinvdis_id <> "" + dis.iostorinvdis_id = 输入.iostorinvdis_id + ENDOPTION + + OPTION 输入.bill_status <> "" + dis.work_status <= 输入.bill_status + ENDOPTION + + order by dis.pcsn + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + QUERY + SELECT + dis.iostorinvdis_id + FROM + ST_IVT_IOStorInvDis dis + WHERE + 1 = 1 + + AND dis.work_status IN ('02', '99') + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + UNION + + SELECT + dis.iostorinvdis_id + FROM + ST_IVT_IOStorInvDis dis + LEFT JOIN SCH_BASE_Task task ON dis.task_id = task.task_id AND task.is_delete = '0' + WHERE + 1 = 1 + AND dis.work_status = '01' + AND task.task_status IN ('5', '6', '7') + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "5" + QUERY + SELECT + dis.* + FROM + ST_IVT_IOStorInvDis dis + WHERE + + dis.work_status = '00' + + OPTION 输入.iostorinv_id <> "" + dis.iostorinv_id = 输入.iostorinv_id + ENDOPTION + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "6" + QUERY + SELECT + iosdtl.*, + ios.bill_code, + mb.material_code, + mb.material_name, + mb.material_spec, + mb.material_model + FROM + ST_IVT_IOStorInvDtl iosdtl + LEFT JOIN md_me_materialbase mb ON mb.material_id = iosdtl.material_id + LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = iosdtl.iostorinv_id + WHERE + 1=1 + + OPTION 输入.iostorinv_id <> "" + iosdtl.iostorinv_id = 输入.iostorinv_id + ENDOPTION + + OPTION 输入.iostorinvdtl_id <> "" + iosdtl.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + OPTION 输入.bill_status <> "" + iosdtl.bill_status <= 输入.bill_status + ENDOPTION + + OPTION 输入.unassign_flag <> "" + iosdtl.unassign_qty >0 + ENDOPTION + + order by iosdtl.pcsn + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "7" + QUERY + SELECT + dis.*, + mb.material_code, + mb.material_name, + mb.material_spec, + task.task_code, + task.task_status, + task.task_type, + point_code + FROM + st_ivt_iostorinvdis dis + LEFT JOIN md_me_materialbase mb ON mb.material_id = dis.material_id + LEFT JOIN ST_IVT_IOStorInv mst ON mst.iostorinv_id = dis.iostorinv_id + LEFT JOIN sch_base_task task ON task.task_id = dis.task_id AND task.is_delete = '0' + LEFT JOIN sch_base_point point ON point.point_id = dis.point_id + WHERE + mst.is_delete = '0' + + OPTION 输入.iostorinv_id <> "" + dis.iostorinv_id = 输入.iostorinv_id + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUT_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUT_01.wql new file mode 100644 index 00000000..425e4734 --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_PRODUCTOUT_01.wql @@ -0,0 +1,191 @@ +[交易说明] + 交易名: 成品出库分页查询 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.product_area TYPEAS s_string + 输入.pcsn TYPEAS s_string + 输入.material_spec TYPEAS s_string + 输入.material_code 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 + 输入.iostorinv_id TYPEAS s_string + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + + IF 输入.flag = "1" + PAGEQUERY + SELECT + * + FROM + ST_IVT_IOStorInv + WHERE + io_type = '1' + AND is_delete = '0' + + OPTION 输入.product_area <> "" + product_code = 输入.product_area + 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 = '1' + AND mst.is_delete = '0' + + OPTION 输入.bill_code <> "" + mst.bill_code = 输入.bill_code + ENDOPTION + + OPTION 输入.iostorinv_id <> "" + mst.iostorinv_id = 输入.iostorinv_id + 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, + LEFT(task.task_code,6) AS task_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 + LEFT JOIN sch_base_task task ON task.task_id = dis.task_id AND task.is_delete = '0' + WHERE + 1 = 1 + + OPTION 输入.iostorinvdtl_id <> "" + dis.iostorinvdtl_id = 输入.iostorinvdtl_id + ENDOPTION + + order by dis.seq_no ASC + + ENDSELECT + ENDQUERY + ENDIF + + IF 输入.flag = "4" + PAGEQUERY + SELECT + ivt.struct_id, + ivt.struct_code, + ivt.struct_name, + ivt.material_id, + ivt.quality_scode, + ivt.pcsn, + ivt.canuse_qty AS plan_qty, + ivt.qty_unit_id, + ivt.instorage_time, + mater.material_code, + mater.material_name, + mater.material_spec, + unit.unit_name AS qty_unit_name + FROM + st_ivt_structivt ivt + LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_id + LEFT JOIN sch_base_point point ON point.point_id = ivt.struct_id + LEFT JOIN md_pb_measureunit unit ON unit.measure_unit_id = ivt.qty_unit_id + WHERE + ivt.canuse_qty > 0 + AND point.lock_type = '1' + AND IFNULL(point.vehicle_code,'') <> '' + + OPTION 输入.product_area <> "" + point.product_area = 输入.product_area + ENDOPTION + + OPTION 输入.material_spec <> "" + mater.material_spec LIKE 输入.material_spec + ENDOPTION + + OPTION 输入.material_code <> "" + (mater.material_code LIKE 输入.material_code or + mater.material_code LIKE 输入.material_name) + ENDOPTION + + OPTION 输入.pcsn <> "" + ivt.pcsn = 输入.pcsn + ENDOPTION + + ENDSELECT + ENDPAGEQUERY + ENDIF diff --git a/mes/qd/src/views/wms/st/productOut/AddDialog.vue b/mes/qd/src/views/wms/st/productOut/AddDialog.vue new file mode 100644 index 00000000..30ef3168 --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/AddDialog.vue @@ -0,0 +1,387 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productOut/AddDtl.vue b/mes/qd/src/views/wms/st/productOut/AddDtl.vue new file mode 100644 index 00000000..2c67efa6 --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/AddDtl.vue @@ -0,0 +1,163 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productOut/DivDialog.vue b/mes/qd/src/views/wms/st/productOut/DivDialog.vue new file mode 100644 index 00000000..08122075 --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/DivDialog.vue @@ -0,0 +1,580 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productOut/StructIvt.vue b/mes/qd/src/views/wms/st/productOut/StructIvt.vue new file mode 100644 index 00000000..53b4000a --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/StructIvt.vue @@ -0,0 +1,278 @@ + + + diff --git a/mes/qd/src/views/wms/st/productOut/ViewDialog.vue b/mes/qd/src/views/wms/st/productOut/ViewDialog.vue new file mode 100644 index 00000000..08c42314 --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/ViewDialog.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/mes/qd/src/views/wms/st/productOut/index.vue b/mes/qd/src/views/wms/st/productOut/index.vue new file mode 100644 index 00000000..2d9a5196 --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/index.vue @@ -0,0 +1,325 @@ + + + + diff --git a/mes/qd/src/views/wms/st/productOut/productout.js b/mes/qd/src/views/wms/st/productOut/productout.js new file mode 100644 index 00000000..8d4c1e1c --- /dev/null +++ b/mes/qd/src/views/wms/st/productOut/productout.js @@ -0,0 +1,228 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/productOut', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/productOut/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/productOut', + method: 'put', + data + }) +} + +export function getOutBillDtl(data) { + return request({ + url: '/api/productOut/getOutBillDtl', + method: 'post', + data + }) +} +export function getOutBillDis(data) { + return request({ + url: '/api/productOut/getOutBillDis', + method: 'post', + data + }) +} +export function getOutBillDisDtl(params) { + return request({ + url: '/api/productOut/getOutBillDisDtl', + method: 'get', + params + }) +} +export function getOutBillTask(params) { + return request({ + url: '/api/productOut/getOutBillTask', + method: 'get', + params + }) +} +export function getInvTypes() { + return request({ + url: '/api/productOut/getInvTypes', + method: 'get' + }) +} +export function insertDtl(data) { + return request({ + url: '/api/productOut/insertDtl', + method: 'post', + data + }) +} +export function allDiv(data) { + return request({ + url: '/api/productOut/allDiv', + method: 'post', + data + }) +} +export function allDivOne(data) { + return request({ + url: '/api/productOut/allDivOne', + method: 'post', + data + }) +} +export function allCancel(data) { + return request({ + url: '/api/productOut/allCancel', + method: 'post', + data + }) +} +export function oneCancel(data) { + return request({ + url: '/api/productOut/oneCancel', + method: 'post', + data + }) +} +export function setPoint(data) { + return request({ + url: '/api/productOut/setPoint', + method: 'post', + data + }) +} +export function oneSetPoint(data) { + return request({ + url: '/api/productOut/oneSetPoint', + method: 'post', + data + }) +} +export function getStructIvt(params) { + return request({ + url: '/api/productOut/getStructIvt', + method: 'get', + params + }) +} +export function manualDiv(data) { + return request({ + url: '/api/productOut/manualDiv', + method: 'post', + data + }) +} +export function confirm(data) { + return request({ + url: '/api/productOut/confirm', + method: 'post', + data + }) +} +export function issueTask(data) { + return request({ + url: '/api/productOut/issueTask', + method: 'post', + data + }) +} +export function finishTask(data) { + return request({ + url: '/api/productOut/finishTask', + method: 'post', + data + }) +} +export function cancleTaskfinish(data) { + return request({ + url: '/api/productOut/cancleTaskfinish', + method: 'post', + data + }) +} +export function paramByCodeType(data) { + return request({ + url: '/api/productOut/paramByCodeType', + method: 'post', + data + }) +} +export function schAreaType(data) { + return request({ + url: '/api/productOut/schAreaType', + method: 'post', + data + }) +} +export function backConfirm(data) { + return request({ + url: '/api/productOut/backConfirm', + method: 'post', + data + }) +} +export function getType() { + return request({ + url: '/api/productOut/getType', + method: 'get' + }) +} +export function moneySubmit(data) { + return request({ + url: '/api/productOut/moneySubmit', + method: 'post', + data + }) +} +export function getDisNum(data) { + return request({ + url: '/api/productOut/getDisNum', + method: 'post', + data + }) +} +export function queryBox(data) { + return request({ + url: '/api/productOut/queryBox', + method: 'post', + data + }) +} +export function getOutBillTask2(data) { + return request({ + url: '/api/productOut/getOutBillTask2', + method: 'post', + data + }) +} +export function cancelTask(data) { + return request({ + url: '/api/productOut/cancelTask', + method: 'post', + data + }) +} +export function allSetPoint(data) { + return request({ + url: '/api/productOut/allSetPoint', + method: 'post', + data + }) +} +export function oneSetPoint2(data) { + return request({ + url: '/api/productOut/oneSetPoint2', + method: 'post', + data + }) +} +export default { add, edit, del, allDiv, allCancel, getOutBillDtl, getOutBillDis, setPoint, oneSetPoint, getOutBillTask, getStructIvt, manualDiv, confirm, issueTask, finishTask, cancleTaskfinish, getInvTypes, paramByCodeType, schAreaType, backConfirm, getOutBillDisDtl, getType, allDivOne, moneySubmit, getDisNum, queryBox, getOutBillTask2, oneCancel, cancelTask, allSetPoint, oneSetPoint2 }