diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java index 54edfa23..69e439a3 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/common/enums/StatusEnum.java @@ -65,7 +65,7 @@ public enum StatusEnum { POINT_STATUS_EMPTY_VEHICLE("3", "空载具", ""), // 出入库分配明细状态 - IOS_NOCREATE("00","为生成",""), + IOS_NOCREATE("00","未生成",""), IOS_CREATE("01","生成",""), IOS_RUNNING("02","执行中",""), IOS_FINISH("99","完成",""), 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 91766cba..0151bd4f 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 @@ -118,8 +118,8 @@ public class ProductInTask extends AbstractAcsTask { // 修改主表状态为分配中:30 JSONObject mstMap = new JSONObject(); mstMap.put("bill_status", "20"); - mstMap.put("update_optid", currentUserId); - mstMap.put("update_optname", nickName); + mstMap.put("update_id", currentUserId); + mstMap.put("update_name", nickName); mstMap.put("update_time", now); mstTab.update(mstMap,"iostorinv_id = '"+iostorinv_id+"'"); @@ -138,8 +138,8 @@ public class ProductInTask extends AbstractAcsTask { disMap.put("struct_name", ""); disTab.update(disMap,"task_id = '"+taskObj.getString("task_id")+"'"); } - map.put("update_optid", currentUserId); - map.put("update_optname", nickName); + map.put("update_id", currentUserId); + map.put("update_name", nickName); map.put("update_time", now); WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); } 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 index d1395a2b..c54534ad 100644 --- 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 @@ -79,8 +79,8 @@ public class ProductOutTask extends AbstractAcsTask { // 更改任务状态为完成 jsonTask.put("task_status", TaskStatusEnum.FINISHED.getCode()); - jsonTask.put("update_optid", currentUserId); - jsonTask.put("update_optname", currentUsername); + jsonTask.put("update_id", currentUserId); + jsonTask.put("update_name", currentUsername); jsonTask.put("update_time", DateUtil.now()); taskTab.update(jsonTask); } diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SemiProductInTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SemiProductInTask.java new file mode 100644 index 00000000..a1f63d8e --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SemiProductInTask.java @@ -0,0 +1,189 @@ +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.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.common.enums.StatusEnum; +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.core.bean.WQLObject; +import org.nl.modules.wql.util.SpringContextHolder; +import org.nl.system.service.param.impl.SysParamServiceImpl; +import org.nl.wms.sch.manage.AbstractAcsTask; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.st.in.service.impl.ProductInServiceImpl; +import org.nl.wms.st.in.service.impl.StorPublicServiceImpl; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; + +/** + * Created by Lxy on 2023/03/30. + */ +public class SemiProductInTask extends AbstractAcsTask{ + private final String THIS_CLASS = SemiProductInTask.class.getName(); + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateTaskStatus(JSONObject taskObj, String status) { + 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("st_ivt_structattr"); // 点位表 + 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:完成 ,3:acs取消 + if(StrUtil.equals(status, "1")) { + map.put("task_status", TaskStatusEnum.EXECUTING.getCode()); + //更新入库单分配任务状态 + HashMap dis_map = new HashMap<>(); + dis_map.put("work_status", StatusEnum.IOS_RUNNING.getCode()); + dis_map.put("is_issued", "1"); + WQLObject.getWQLObject("ST_IVT_IOStorInvDis").update(dis_map, "task_id = '" + taskObj.getString("task_id") + "'"); + } + if(StrUtil.equals(status, "2")) { + map.put("task_status", TaskStatusEnum.FINISHED.getCode()); + //调用入库分配确认方法 + ProductInServiceImpl productInService = SpringContextHolder.getBean(ProductInServiceImpl.class); + JSONObject dis_form = new JSONObject(); + dis_form.put("task_id", taskObj.getString("task_id")); + productInService.confirmDis(dis_form); + } + if(StrUtil.equals(status, "3")) { + if(taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { + throw new BadRequestException("任务已执行不能取消"); + } + // 更新任务表删除字段 + map.put("is_delete", "1"); + JSONObject jsonDis = disTab.query("task_id ='" + taskObj.getString("task_id") + "'").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonDis)) { + throw new BadRequestException("分配明细不存在"); + } + String iostorinv_id = jsonDis.getString("iostorinv_id"); + // 解锁货位 + JSONObject jsonPoint1 = pointTab.query("struct_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonPoint1.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + 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("struct_code = '" + jsonPoint1.getString("control_point") + "'").uniqueResult(0); + jsonPoint2.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + pointTab.update(jsonPoint2); + } + //减去原货位的待入数 + 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("数据参数有误!"); + } + 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", jsonPoint1.getString("point_id")); + i_form.put("material_id", dis_row.getString("material_id")); + i_form.put("quality_scode", "01"); + i_form.put("pcsn", dis_row.getString("pcsn")); + i_form.put("change_qty", dis_row.getString("plan_qty")); + i_form.put("bill_type_scode", mst_jo.getString("bill_type")); + i_form.put("inv_id", mst_jo.getString("iostorinv_id")); + i_form.put("bill_code", mst_jo.getString("bill_code")); + i_form.put("bill_table", "ST_IVT_IOStorInv"); + i_form.put("qty_unit_id", dis_row.getString("qty_unit_id")); + i_form.put("qty_unit_name", dis_row.getString("qty_unit_name")); + new StorPublicServiceImpl().IOStor(i_form, "32"); + } + // 修改主表状态为分配中:30 + JSONObject mstMap = new JSONObject(); + mstMap.put("bill_status", "20"); + mstMap.put("update_id", currentUserId); + mstMap.put("update_name", nickName); + mstMap.put("update_time", now); + mstTab.update(mstMap, "iostorinv_id = '" + iostorinv_id + "'"); + // 修改明细状态为生成:10 + JSONObject dtlMap = new JSONObject(); + dtlMap.put("bill_status", "10"); + dtlTab.update(dtlMap, "iostorinv_id = '" + iostorinv_id + "'"); + // 更新分配明细为:未生成:00,清空对应字段 + JSONObject disMap = new JSONObject(); + disMap.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); + disMap.put("point_id", ""); + disMap.put("task_id", ""); + disMap.put("struct_id", ""); + disMap.put("struct_code", ""); + disMap.put("struct_name", ""); + disTab.update(disMap, "task_id = '" + taskObj.getString("task_id") + "'"); + } + map.put("update_id", currentUserId); + map.put("update_name", nickName); + map.put("update_time", now); + WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String createTask(JSONObject form) { + String task_type = form.getString("task_type"); + if(StrUtil.isBlank(task_type)) { + throw new BadRequestException("业务类型不能为空"); + } + String start_device_code = form.getString("start_device_code"); + if(StrUtil.isBlank(start_device_code)) { + throw new BadRequestException("起点不能为空"); + } + String next_device_code = form.getString("next_device_code"); + if(StrUtil.isBlank(next_device_code)) { + throw new BadRequestException("终点不能为空"); + } + String vehicle_code = form.getString("vehicle_code"); + if(StrUtil.isBlank(vehicle_code)) { + throw new BadRequestException("载具号不能为空"); + } + 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", CodeUtil.getNewCode("TASK_CODE")); + json.put("product_area", form.getString("product_area")); + json.put("task_type", form.getString("task_type")); + json.put("task_name", form.getString("task_name")); + json.put("is_send", "1"); + json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); + json.put("material_id", form.getString("material_id")); + json.put("material_qty", form.getString("plan_qty")); + 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_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/sch/tasks/SemiProductOutTask.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SemiProductOutTask.java new file mode 100644 index 00000000..8a3184cf --- /dev/null +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/sch/tasks/SemiProductOutTask.java @@ -0,0 +1,117 @@ +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.enums.StatusEnum; +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.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 SemiProductOutTask extends AbstractAcsTask{ + private final String THIS_CLASS = SemiProductOutTask.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"); // 出入库分配表 + WQLObject pointTab = WQLObject.getWQLObject("st_ivt_structattr"); // 点位表 + 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.parseInt(TaskStatusEnum.START_AND_POINT.getCode())) { + throw new BadRequestException("任务:" + jsonTask.getString("task_code") + "已下发,不可取消"); + } + // 更新删除字段 + jsonTask.put("is_delete", StatusEnum.STATUS_TRUE.getCode()); + jsonTask.put("update_time", DateUtil.now()); + taskTab.update(jsonTask); + // 更新分配明细为:未生成 + JSONObject map = new JSONObject(); + map.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); + map.put("point_id", ""); + disTab.update(map, "task_id = '" + task_id + "'"); + // 解锁终点点位 + JSONObject jsonPoint = pointTab.query("struct_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0); + jsonPoint.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + pointTab.update(jsonPoint); + } + 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_id", currentUserId); + jsonTask.put("update_name", 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", CodeUtil.getNewCode("TASK_CODE")); + json.put("task_name", form.getString("task_name")); + json.put("product_area", form.getString("product_area")); + json.put("task_type", form.getString("task_type")); + json.put("is_send", "1"); + json.put("material_id", form.getString("material_id")); + json.put("material_qty", form.getString("plan_qty")); + 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/in/service/impl/SemiProductInServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java index 8f9f5959..d4f2124a 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/in/service/impl/SemiProductInServiceImpl.java @@ -27,7 +27,7 @@ import org.nl.wms.basedata.st.service.StructattrService; import org.nl.wms.basedata.st.service.dto.StructattrDto; import org.nl.wms.sch.service.PointService; import org.nl.wms.sch.service.dto.PointDto; -import org.nl.wms.sch.tasks.ProductInTask; +import org.nl.wms.sch.tasks.SemiProductInTask; import org.nl.wms.st.in.service.SemiProductInService; import org.nl.wms.st.in.service.StorPublicService; import org.springframework.data.domain.Pageable; @@ -132,7 +132,7 @@ public class SemiProductInServiceImpl implements SemiProductInService{ //4.设置起点 JSONObject mst = WQLObject.getWQLObject("st_ivt_iostorinv").query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0); //如果终点已确定,创建任务 - ProductInTask task = new ProductInTask(); + SemiProductInTask task = new SemiProductInTask(); JSONObject task_form = new JSONObject(); task_form.put("material_id", whereJson.get("material_id")); task_form.put("material_qty", whereJson.get("plan_qty")); @@ -763,7 +763,7 @@ public class SemiProductInServiceImpl implements SemiProductInService{ JSONObject ios_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis").query("iostorinvdtl_id = '" + map.getString("iostorinvdtl_id") + "'").uniqueResult(0); if(StrUtil.isNotEmpty(ios_dis.getString("struct_code"))) { //3.如果终点已确定,创建任务 - ProductInTask task = new ProductInTask(); + SemiProductInTask task = new SemiProductInTask(); JSONObject task_form = new JSONObject(); task_form.put("material_id", map.getString("material_id")); task_form.put("material_qty", map.getString("plan_qty")); 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 index 9482d704..f8552abd 100644 --- 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 @@ -52,7 +52,7 @@ public class ProductOutServiceImpl implements ProductOutService { JSONObject map = new JSONObject(); map.put("flag", "1"); - map.put("bill_type","1001"); + map.put("bill_type","0001"); map.put("product_code",MapUtil.getStr(whereJson,"product_code")); map.put("bill_status",MapUtil.getStr(whereJson,"bill_status")); map.put("begin_time",MapUtil.getStr(whereJson, "begin_time")); @@ -67,7 +67,7 @@ public class ProductOutServiceImpl implements ProductOutService { } @Override - public Map queryAddDtl(Map whereJson, Pageable page) { + 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")); diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java index 0a5f0578..5faa7770 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/out/service/impl/SemiProductOutServiceImpl.java @@ -14,6 +14,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.common.enums.AcsTaskEnum; import org.nl.common.enums.StatusEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; @@ -24,9 +25,8 @@ 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.sch.tasks.SemiProductOutTask; import org.nl.wms.st.in.service.StorPublicService; -import org.nl.wms.st.out.service.ProductOutService; import org.nl.wms.st.out.service.SemiProductOutService; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -44,1452 +44,1248 @@ import java.util.*; @RequiredArgsConstructor @Slf4j public class SemiProductOutServiceImpl implements SemiProductOutService{ - - 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("bill_type","1002"); - map.put("product_code",MapUtil.getStr(whereJson,"product_code")); - map.put("bill_status",MapUtil.getStr(whereJson,"bill_status")); - 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_id", currentUserId + ""); - map.put("update_name", 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("create_id", currentUserId + ""); - jsonMst.put("create_name", nickName); - jsonMst.put("create_time", now); - jsonMst.put("update_id", currentUserId + ""); - jsonMst.put("update_name", 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_id", currentUserId + ""); - jsonMst.put("update_name", 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", StatusEnum.IOS_NOCREATE.getCode()); - 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",StatusEnum.LOCK_ON.getCode()); - 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", StatusEnum.LOCK_ON.getCode()); - 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",StatusEnum.LOCK_OFF.getCode()); - 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", StatusEnum.STATUS_TRUE.getCode()); - 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", StatusEnum.LOCK_OFF.getCode()); - 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", StatusEnum.LOCK_OFF.getCode()); - storPublicService.updateStructAndPoint2(from_end); - } - } else {//仓位载具扔有冻结数,需改任务类型为拣选出库 - //任务号不为空 + 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("bill_type", "1002"); + map.put("product_code", MapUtil.getStr(whereJson, "product_code")); + map.put("bill_status", MapUtil.getStr(whereJson, "bill_status")); + 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", "5"); + 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_id", currentUserId + ""); + map.put("update_name", 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("create_id", currentUserId + ""); + jsonMst.put("create_name", nickName); + jsonMst.put("create_time", now); + jsonMst.put("update_id", currentUserId + ""); + jsonMst.put("update_name", 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_id", currentUserId + ""); + jsonMst.put("update_name", 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("st_ivt_structattr"); + 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", "8"); + 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", StatusEnum.IOS_NOCREATE.getCode()); + 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", StatusEnum.LOCK_ON.getCode()); + wo_point.update(jsonUpdataPoint, "storagevehicle_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("st_ivt_structattr"); + 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", StatusEnum.LOCK_ON.getCode()); + wo_point.update(jsonUpdataPoint, "storagevehicle_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("st_ivt_structattr"); + 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", StatusEnum.LOCK_OFF.getCode()); + wo_point.update(jsonUpdataPoint, "storagevehicle_code = '" + dis.getString("vehicle_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", StatusEnum.STATUS_TRUE.getCode()); + 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", StatusEnum.LOCK_OFF.getCode()); + 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", StatusEnum.LOCK_OFF.getCode()); + 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 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("未查到相关出库单"); - } - - - // 查询此明细的所有未生成的分配明细 - 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 jsonSendOut = this.findSendOut(); - - // 创建任务 - JSONObject jsonTask = new JSONObject(); - jsonTask.put("task_type", "010502"); - jsonTask.put("point_code1", jsonDis.getString("struct_code")); - jsonTask.put("point_code2", jsonSendOut.getString("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); - - // 锁定终点 - jsonSendOut.put("lock_type",StatusEnum.LOCK_ON.getCode()); - wo_Point.update(jsonSendOut); - - // 修改明细状态 - jsonDis.put("work_status", StatusEnum.IOS_CREATE.getCode()); - jsonDis.put("point_id", jsonSendOut.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", StatusEnum.IOS_CREATE.getCode()); - } else { - json.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); - } - 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", StatusEnum.LOCK_ON.getCode()); - 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_id", currentUserId + ""); - map_mst.put("confirm_name", 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", StatusEnum.LOCK_OFF.getCode()); - from_start.put("point_status", StatusEnum.POINT_STATUS_EMPTY.getCode()); - from_start.put("vehicle_code", ""); - pointTab.update(from_start,"vehicle_code = '"+dis.getString("storagevehicle_code")+"'"); - - // 解锁终点增加库存 - JSONObject jsonPoint = pointTab.query("point_id = '" + dis.getString("point_id") + "'").uniqueResult(0); - jsonPoint.put("lock_type", StatusEnum.LOCK_OFF.getCode()); - jsonPoint.put("point_status", StatusEnum.POINT_STATUS_FULL.getCode()); - jsonPoint.put("vehicle_code", dis.getString("storagevehicle_code")); - pointTab.update(jsonPoint); - - // 更新分配明细执行状态为 - 99 - JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0); - jsonDis.put("work_status", StatusEnum.IOS_FINISH.getCode()); - wo_dis.update(jsonDis); - - // 更新对应任务为完成 - JSONObject jsonTask = taskTab.query("task_id = '" + jsonDis.getString("task_id") + "' and task_status < '"+TaskStatusEnum.FINISHED.getCode()+"'").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_id", currentUserId + ""); - map.put("update_name", 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_id", currentUserId); - mst_row2.put("confirm_name", 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); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void allSetPoint(JSONObject whereJson) { + //出库分配表 + WQLObject wo_dis = WQLObject.getWQLObject("ST_IVT_IOStorInvDis"); + //点位表 + WQLObject wo_Point = WQLObject.getWQLObject("st_ivt_structattr"); + //出库主表 + WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_IOStorInv"); + 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("未查到相关出库单"); + } + // 查询此明细的所有未生成的分配明细 + 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 jsonSendOut = this.findSendOut(); + // 创建任务 + JSONObject jsonTask = new JSONObject(); + jsonTask.put("material_id", jsonDis.getString("material_id")); + jsonTask.put("material_qty", jsonDis.getString("plan_qty")); + jsonTask.put("task_type", AcsTaskEnum.TASK_STRUCT_OUT.getCode()); + jsonTask.put("task_name", AcsTaskEnum.TASK_STRUCT_OUT.getDesc()); + jsonTask.put("point_code1", jsonDis.getString("struct_code")); + jsonTask.put("point_code2", jsonSendOut.getString("struct_code")); + jsonTask.put("vehicle_code", jsonDis.getString("storagevehicle_code")); + jsonTask.put("product_area", jo_mst.getString("product_code")); + SemiProductOutTask task = new SemiProductOutTask(); + String task_id = task.createTask(jsonTask); + // 锁定终点 + jsonSendOut.put("lock_type", StatusEnum.LOCK_ON.getCode()); + wo_Point.update(jsonSendOut); + // 修改明细状态 + jsonDis.put("work_status", StatusEnum.IOS_CREATE.getCode()); + jsonDis.put("struct_code", jsonSendOut.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 + ""); } - } - } - 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"); + 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", StatusEnum.IOS_CREATE.getCode()); + } + else{ + json.put("work_status", StatusEnum.IOS_NOCREATE.getCode()); + } + 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", StatusEnum.LOCK_ON.getCode()); + 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("st_ivt_structattr"); + 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_id", currentUserId + ""); + map_mst.put("confirm_name", 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", StatusEnum.LOCK_OFF.getCode()); + from_start.put("is_emptyvehicle", StatusEnum.POINT_STATUS_EMPTY.getCode()); + from_start.put("storagevehicle_code", ""); + pointTab.update(from_start, "storagevehicle_code = '" + dis.getString("storagevehicle_code") + "'"); + // 解锁终点增加库存 + JSONObject jsonPoint = pointTab.query("struct_id = '" + dis.getString("struct_id") + "'").uniqueResult(0); + jsonPoint.put("lock_type", StatusEnum.LOCK_OFF.getCode()); + jsonPoint.put("is_emptyvehicle", StatusEnum.POINT_STATUS_FULL.getCode()); + jsonPoint.put("storagevehicle_code", dis.getString("storagevehicle_code")); + pointTab.update(jsonPoint); + // 更新分配明细执行状态为 - 99 + JSONObject jsonDis = wo_dis.query("iostorinvdis_id = '" + dis.getString("iostorinvdis_id") + "'").uniqueResult(0); + jsonDis.put("work_status", StatusEnum.IOS_FINISH.getCode()); + wo_dis.update(jsonDis); + // 更新对应任务为完成 + JSONObject jsonTask = taskTab.query("task_id = '" + jsonDis.getString("task_id") + "' and task_status < '" + TaskStatusEnum.FINISHED.getCode() + "'").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_id", currentUserId + ""); + map.put("update_name", 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_id", currentUserId); + mst_row2.put("confirm_name", 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; + 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("没有查询到子卷包装"); } - } - - 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(); - } - // 订单号 + 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; + 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(); + } + } - 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_id", currentUserId + ""); - jo_mst.put("update_name", nickName); - jo_mst.put("update_time", now); - jo_mst.put("dis_id", currentUserId + ""); - jo_mst.put("dis_name", 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) { + /** + * 更新主表状态 + * + * @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_id", currentUserId + ""); + jo_mst.put("update_name", nickName); + jo_mst.put("update_time", now); + jo_mst.put("dis_id", currentUserId + ""); + jo_mst.put("dis_name", 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 {//已分配完明细数等于总明细数 - jo_mst.put("bill_status", "30"); - } - wo_mst.update(jo_mst); - } - - @Transactional(rollbackFor = Exception.class) - public JSONObject findSendOut() { - - WQLObject pointTab = WQLObject.getWQLObject("sch_base_point"); - JSONObject jsonPoint = pointTab.query("point_status = '"+StatusEnum.POINT_STATUS_EMPTY.getCode() - +"' and lock_type = '"+StatusEnum.LOCK_OFF.getCode() - +"' and is_delete = '"+StatusEnum.STATUS_FLASE.getCode() - +"' and is_used = '"+StatusEnum.STATUS_TRUE.getCode() - +"' and region_code = 'FH01' and IFNULL(vehicle_code,'') = '' order by point_code").uniqueResult(0); - - - if (ObjectUtil.isEmpty(jsonPoint)) { - throw new BadRequestException("发货区无可用点位"); - } - - return jsonPoint; - } + } + 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); + } + @Transactional(rollbackFor = Exception.class) + public JSONObject findSendOut() { + WQLObject pointTab = WQLObject.getWQLObject("st_ivt_structattr"); + JSONObject jsonPoint = pointTab.query("is_emptyvehicle = '" + StatusEnum.POINT_STATUS_EMPTY.getCode() + "' and lock_type = '" + StatusEnum.LOCK_OFF.getCode() + "' and is_delete = '" + StatusEnum.STATUS_FLASE.getCode() + "' and is_used = '" + StatusEnum.STATUS_TRUE.getCode() + "' and sect_code = 'KQ004' and IFNULL(storagevehicle_code,'') = '' order by struct_code").uniqueResult(0); + if(ObjectUtil.isEmpty(jsonPoint)) { + throw new BadRequestException("发货区无可用点位"); + } + return jsonPoint; + } } 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 index b916cd9f..3e9b48d7 100644 --- 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 @@ -277,13 +277,13 @@ task.task_code, task.task_status, task.task_type, - point_code + point.struct_code 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 + LEFT JOIN st_ivt_structattr point ON point.struct_id = dis.point_id WHERE mst.is_delete = '0' @@ -294,3 +294,44 @@ ENDSELECT ENDQUERY ENDIF + + IF 输入.flag = "8" + QUERY + SELECT + ivt.*, + region.sect_code region_code, + region.sect_name region_name, + point.storagevehicle_code 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 st_ivt_structattr point ON point.struct_id = ivt.struct_id + LEFT JOIN st_ivt_sectattr region ON region.sect_code = point.sect_code + WHERE + 1=1 + + OPTION 输入.material_id <> "" + ivt.material_id = 输入.material_id + ENDOPTION + + OPTION 输入.pcsn <> "" + ivt.pcsn = 输入.pcsn + ENDOPTION + + OPTION 输入.region_code <> "" + point.sect_code = 输入.region_code + ENDOPTION + + OPTION 输入.product_area <> "" + region.product_area = 输入.product_area + ENDOPTION + + order by ivt.instorage_time DESC + + 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 index 4973d784..31fd48dc 100644 --- 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 @@ -17,6 +17,7 @@ 输入.product_area TYPEAS s_string 输入.pcsn TYPEAS s_string 输入.material_spec TYPEAS s_string + 输入.material_name TYPEAS s_string 输入.material_code TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string @@ -189,3 +190,52 @@ ENDSELECT ENDPAGEQUERY ENDIF + + IF 输入.flag = "5" + 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, + sec.product_area, + mater.material_code, + mater.material_name, + mater.material_spec, + unit.unit_name AS qty_unit_name + FROM + st_ivt_structivt ivt + LEFT JOIN st_ivt_structattr point ON point.struct_id = ivt.struct_id + LEFT JOIN st_ivt_sectattr sec ON sec.sect_id = point.sect_id + LEFT JOIN md_me_materialbase mater ON ivt.material_id = mater.material_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 = '0' + AND IFNULL( point.storagevehicle_code, '' ) <> '' + + OPTION 输入.product_area <> "" + sec.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/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_STORPUBLIC.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_STORPUBLIC.wql index 8d9636e0..36db8c12 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_STORPUBLIC.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/QST_IVT_STORPUBLIC.wql @@ -75,4 +75,38 @@ ENDSELECT ENDQUERY - ENDIF \ No newline at end of file + ENDIF + + IF 输入.flag = "2" + QUERY + SELECT + ivt.* + FROM + st_ivt_structivt ivt + LEFT JOIN st_ivt_structattr point ON point.struct_id = ivt.struct_id + WHERE + 1=1 + + OPTION 输入.struct_id <> "" + ivt.struct_id = 输入.struct_id + ENDOPTION + + OPTION 输入.material_id <> "" + ivt.material_id = 输入.material_id + ENDOPTION + + OPTION 输入.pcsn <> "" + ivt.pcsn = 输入.pcsn + ENDOPTION + + OPTION 输入.quality_scode <> "" + ivt.quality_scode = 输入.quality_scode + ENDOPTION + + OPTION 输入.storagevehicle_code <> "" + point.storagevehicle_code = 输入.storagevehicle_code + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF \ No newline at end of file diff --git a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql index 5c76e107..284e2f15 100644 --- a/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql +++ b/mes/hd/nladmin-system/src/main/java/org/nl/wms/st/wql/ST_PUB_QUERY_01.wql @@ -50,13 +50,13 @@ SELECT struct.* FROM - sch_base_point struct + st_ivt_structattr struct WHERE struct.is_delete = '0' AND struct.is_used = '1' OPTION 输入.id <> "" - struct.point_id = 输入.id + struct.struct_id = 输入.id ENDOPTION ENDSELECT @@ -84,18 +84,18 @@ SELECT struct.struct_id, struct.struct_code, - point.point_code, - point.point_id, + point.struct_code point_code, + point.struct_id point_id, struct.storagevehicle_code FROM - SCH_BASE_Point point + st_ivt_structattr point left join ST_IVT_StructAttr struct on point.source_id=struct.struct_id WHERE 1=1 OPTION 输入.id <> "" struct.struct_id = 输入.id ENDOPTION OPTION 输入.point_code <> "" - point.point_code = 输入.point_code + point.struct_code = 输入.point_code ENDOPTION ENDSELECT ENDQUERY