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 }