diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java index a95435e32..e0ddf7aad 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/service/impl/InAndOutRetrunServiceImpl.java @@ -7,8 +7,12 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.common.utils.SecurityUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.FileUtil; @@ -23,10 +27,13 @@ import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; import org.nl.wms.ext.mes.service.LmsToMesService; import org.nl.wms.ext.mes.service.impl.LmsToMesServiceImpl; import org.nl.wms.ext.sap.service.impl.LmsToSapServiceImpl; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.sch.service.TaskService; import org.nl.wms.st.returns.service.InAndOutReturnService; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; @@ -41,6 +48,8 @@ import java.util.stream.Collectors; public class InAndOutRetrunServiceImpl implements InAndOutReturnService { private final ISysUserService iSysUserService; + @Resource + private IschBaseTaskService schBaseTaskService; @Override public Map pageQuery(Map whereJson, Pageable page) { @@ -53,6 +62,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { map.put("bill_status", MapUtil.getStr(whereJson, "bill_status")); map.put("bill_type", MapUtil.getStr(whereJson, "bill_type")); map.put("is_upload", MapUtil.getStr(whereJson, "is_upload")); + map.put("upload_mes", MapUtil.getStr(whereJson, "upload_mes")); + map.put("upload_sap", MapUtil.getStr(whereJson, "upload_sap")); String begin_time = MapUtil.getStr(whereJson, "begin_time"); if (StrUtil.isNotEmpty(begin_time)) { map.put("begin_time", begin_time.substring(0,10)+" 00:00:00"); @@ -260,6 +271,9 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { // 返检出库:回传mes if (StrUtil.equals(bill_type, "1006")) { JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "2").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); + // 判断是否有未完成的任务 + ifUnTask(disArr.toJavaList(JSONObject.class)); + for (int j = 0; j < disArr.size(); j++) { JSONObject json = disArr.getJSONObject(j); // 删除对应的包装关系 @@ -368,6 +382,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { // 改切出库:回传mes if (StrUtil.equals(bill_type, "1003")) { JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "2").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); + // 判断是否有未完成的任务 + ifUnTask(disArr.toJavaList(JSONObject.class)); for (int j = 0; j < disArr.size(); j++) { JSONObject json = disArr.getJSONObject(j); @@ -1492,6 +1508,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { // 改切出库:回传mes if (StrUtil.equals(bill_type, "1003")) { JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "2").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); + // 判断是否有未完成的任务 + ifUnTask(disArr.toJavaList(JSONObject.class)); for (int j = 0; j < disArr.size(); j++) { JSONObject json = disArr.getJSONObject(j); // 删除对应的包装关系 @@ -1530,6 +1548,8 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { // 返检出库:回传mes if (StrUtil.equals(bill_type, "1006")) { JSONArray disArr = WQL.getWO("QST_IVT_INANDOUTRETRUN").addParam("flag", "2").addParam("iostorinv_id", jo_mst.getString("iostorinv_id")).process().getResultJSONArray(0); + // 判断是否有未完成的任务 + ifUnTask(disArr.toJavaList(JSONObject.class)); for (int j = 0; j < disArr.size(); j++) { JSONObject json = disArr.getJSONObject(j); // 删除对应的包装关系 @@ -1699,5 +1719,28 @@ public class InAndOutRetrunServiceImpl implements InAndOutReturnService { } } + /** + * 判断返检/改切出库是否有未完成的任务 + * @param disList:出库单明细(木箱号) + */ + private void ifUnTask(List disList) { + // 查询有没有未完成的任务 + List box_no = disList.stream() + .map(row -> row.getString("box_no")) + .collect(Collectors.toList()); + + List taskList = schBaseTaskService.list( + new QueryWrapper().lambda() + .in(SchBaseTask::getVehicle_code, box_no) + .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("否")) + .ne(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + ); + + if (ObjectUtil.isNotEmpty(taskList)) { + throw new BadRequestException("请等待木箱【"+taskList.stream().map(SchBaseTask::getVehicle_code).collect(Collectors.joining(","))+"】的所有任务完成之后再回传!"); + } + + } + } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql index 503c8882e..e16262171 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/returns/wql/QST_IVT_INANDOUTRETRUN.wql @@ -21,6 +21,8 @@ 输入.stor_id TYPEAS s_string 输入.bill_status TYPEAS s_string 输入.is_upload TYPEAS s_string + 输入.upload_mes TYPEAS s_string + 输入.upload_sap TYPEAS s_string 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.vbeln TYPEAS s_string @@ -96,6 +98,12 @@ OPTION 输入.is_upload <> "" mst.is_upload = 输入.is_upload ENDOPTION + OPTION 输入.upload_mes <> "" + mst.upload_mes = 输入.upload_mes + ENDOPTION + OPTION 输入.upload_sap <> "" + mst.upload_sap = 输入.upload_sap + ENDOPTION OPTION 输入.begin_time <> "" mst.input_time >= 输入.begin_time ENDOPTION diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java index 3dfcca964..58a9d7f54 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/service/impl/OutBillQueryServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; @@ -59,6 +60,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { } map.put("with", with); map.put("begin_time", begin_time); + map.put("pcsn", pcsn); map.put("end_time", end_time); if (ObjectUtil.isNotEmpty(customer_name)) { @@ -90,7 +92,21 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { map.put("bill_type", joiner.toString()); } map.put("with", with); - map.put("pcsn", pcsn); + // 空格查询 + if (StrUtil.isNotEmpty(pcsn)){ + // 判断是否有空格 + boolean matches = pcsn.matches(".*\\s.*"); + + if (matches) { + String[] s = pcsn.split(" "); + String pcsn_in = String.join("','", Arrays.asList(s)); + + map.put("pcsn_in", "('"+pcsn_in+"')"); + map.put("pcsn", ""); + } else { + map.put("pcsn", pcsn); + } + } if (ObjectUtil.isNotEmpty(customer_name)) { map.put("customer_name", "%" + customer_name + "%"); } @@ -189,7 +205,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { String customer_name = MapUtil.getStr(map, "customer_name"); JSONObject mapParam = new JSONObject(); - mapParam.put("flag", "1"); + mapParam.put("flag", "11"); mapParam.put("stor_id", stor_id); if (ObjectUtil.isNotEmpty(bill_types)) { StringJoiner joiner = new StringJoiner(",", "(", ")"); @@ -263,7 +279,7 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { String pcsn = MapUtil.getStr(map, "pcsn"); String customer_name = MapUtil.getStr(map, "customer_name"); - map.put("flag", "2"); + map.put("flag", "22"); map.put("stor_id", stor_id); if (ObjectUtil.isNotEmpty(bill_types)) { StringJoiner joiner = new StringJoiner(",", "(", ")"); @@ -273,7 +289,21 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { map.put("bill_type", joiner.toString()); } map.put("with", with); - map.put("pcsn", pcsn); + // 空格查询 + if (StrUtil.isNotEmpty(pcsn)){ + // 判断是否有空格 + boolean matches = pcsn.matches(".*\\s.*"); + + if (matches) { + String[] s = pcsn.split(" "); + String pcsn_in = String.join("','", Arrays.asList(s)); + + map.put("pcsn_in", "('"+pcsn_in+"')"); + map.put("pcsn", ""); + } else { + map.put("pcsn", pcsn); + } + } if (ObjectUtil.isNotEmpty(customer_name)) { map.put("customer_name", "%" + customer_name + "%"); } @@ -379,33 +409,40 @@ public class OutBillQueryServiceImpl implements OutBillQueryService { mp.put("管件描述", json.getString("paper_name")); mp.put("客户编码", json.getString("customer_name")); mp.put("发货客户名称", json.getString("customer_description")); - if (ObjectUtil.isEmpty(json.getString("sale_order_name"))) { - throw new BadRequestException("子卷" + json.getString("pcsn") + "销售订单为空!"); - } - try { - mp.put("销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); - mp.put("行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); - } catch (Exception e) { - mp.put("销售订单", json.getString("sale_order_name")); - mp.put("行号", ""); - } + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("行号", ""); + mp.put("原销售订单", json.getString("sale_order_name")); + mp.put("原行号", ""); + if (ObjectUtil.isNotEmpty(json.getString("sale_order_name"))) { + try { + mp.put("销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); + mp.put("行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); + } catch (Exception e) { + mp.put("销售订单", json.getString("sale_order_name")); + mp.put("行号", ""); + } + } // 原销售订单 if (ObjectUtil.isEmpty(jsonSub)) { - try { - mp.put("原销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); - mp.put("原行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); - } catch (Exception e) { - mp.put("原销售订单", json.getString("sale_order_name")); - mp.put("原行号", ""); + if (ObjectUtil.isNotEmpty(json.getString("sale_order_name"))) { + try { + mp.put("原销售订单", json.getString("sale_order_name").substring(0, json.getString("sale_order_name").indexOf("-"))); + mp.put("原行号", json.getString("sale_order_name").substring(json.getString("sale_order_name").indexOf("-") + 1, json.getString("sale_order_name").length())); + } catch (Exception e) { + mp.put("原销售订单", json.getString("sale_order_name")); + mp.put("原行号", ""); + } } } else { - try { - mp.put("原销售订单", jsonSub.getString("sale_order_name").substring(0, jsonSub.getString("sale_order_name").indexOf("-"))); - mp.put("原行号", jsonSub.getString("sale_order_name").substring(jsonSub.getString("sale_order_name").indexOf("-") + 1, jsonSub.getString("sale_order_name").length())); - } catch (Exception e) { - mp.put("原销售订单", jsonSub.getString("sale_order_name")); - mp.put("原行号", ""); + if (ObjectUtil.isNotEmpty(jsonSub.getString("sale_order_name"))) { + try { + mp.put("原销售订单", jsonSub.getString("sale_order_name").substring(0, jsonSub.getString("sale_order_name").indexOf("-"))); + mp.put("原行号", jsonSub.getString("sale_order_name").substring(jsonSub.getString("sale_order_name").indexOf("-") + 1, jsonSub.getString("sale_order_name").length())); + } catch (Exception e) { + mp.put("原销售订单", jsonSub.getString("sale_order_name")); + mp.put("原行号", ""); + } } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql index cfe934ba7..4c0bacbcd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql +++ b/lms/nladmin-system/src/main/java/org/nl/wms/stat/wql/ST_IVT_OUTBILLQUERY.wql @@ -21,6 +21,7 @@ 输入.begin_time TYPEAS s_string 输入.end_time TYPEAS s_string 输入.customer_name TYPEAS s_string + 输入.pcsn_in TYPEAS f_string [临时表] @@ -148,6 +149,109 @@ ENDPAGEQUERY ENDIF + IF 输入.flag = "11" + QUERY + SELECT + mst.stor_name, + dis.sect_name, + mst.bill_type, + dtl.vbeln, + base.cust_name, + mst.estimated_freight, + dis.box_no, + mater.material_code, + mater.material_name, + dis.pcsn, + sub.sap_pcsn, + sub.net_weight, + dis.qty_unit_name, + sub.customer_name, + sub.customer_description, + sub.sale_order_name, + mst.input_time, + sub.width, + sub.thickness, + sub.mass_per_unit_area, + mst.input_optname, + case when plan.paper_tube_or_FRP = '1' then '纸管' when plan.paper_tube_or_FRP = '2' then 'FRP管' end AS paper_type, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_material when plan.paper_tube_or_FRP = '2' then plan.FRP_material end AS paper_code, + case when plan.paper_tube_or_FRP = '1' then plan.paper_tube_description when plan.paper_tube_or_FRP = '2' then plan.FRP_description end AS paper_name, + mst.remark, + stor.stor_name AS in_stor_name + FROM + ( + SELECT + MAX( a.iostorinvdis_id ) AS iostorinvdis_id + FROM + st_ivt_iostorinvdis a + LEFT JOIN st_ivt_iostorinv b ON a.iostorinv_id = b.iostorinv_id + WHERE + b.io_type = '1' + OPTION 输入.bill_type <> "" + b.bill_type IN 输入.bill_type + ENDOPTION + OPTION 输入.pcsn <> "" + a.pcsn = 输入.pcsn + ENDOPTION + AND b.bill_status = '99' + GROUP BY + pcsn + ) AS c + LEFT JOIN st_ivt_iostorinvdis dis ON dis.iostorinvdis_id = c.iostorinvdis_id + LEFT JOIN st_ivt_iostorinv mst ON mst.iostorinv_id = dis.iostorinv_id + LEFT JOIN st_ivt_iostorinvdtl dtl ON dtl.iostorinvdtl_id = dis.iostorinvdtl_id + LEFT JOIN md_cs_transportationbase base ON base.cust_code = mst.trans_code + LEFT JOIN md_me_materialbase mater ON mater.material_id = dis.material_id + LEFT JOIN st_ivt_bsrealstorattr stor ON stor.stor_id = mst.out_stor_id + LEFT JOIN pdm_bi_subpackagerelation sub ON sub.container_name = dis.pcsn AND sub.package_box_sn = dis.box_no + LEFT JOIN (SELECT + container_name, + MAX(paper_tube_or_FRP) AS paper_tube_or_FRP, + MAX(paper_tube_material) AS paper_tube_material, + MAX(paper_tube_description) AS paper_tube_description, + MAX(paper_tube_model) AS paper_tube_model, + MAX(FRP_material) AS FRP_material, + MAX(FRP_description) AS FRP_description, + MAX(FRP_model) AS FRP_model + FROM + pdm_bi_slittingproductionplan plan1 + WHERE + plan1.is_delete = '0' + GROUP BY container_name) plan ON plan.container_name = sub.container_name + WHERE + mst.io_type = '1' + AND mst.is_delete = '0' + AND mst.bill_status = '99' + + OPTION 输入.stor_id <> "" + mst.stor_id = 输入.stor_id + ENDOPTION + + OPTION 输入.bill_type <> "" + mst.bill_type IN 输入.bill_type + ENDOPTION + + OPTION 输入.begin_time <> "" + mst.input_time >= 输入.begin_time + ENDOPTION + + OPTION 输入.end_time <> "" + mst.input_time <= 输入.end_time + ENDOPTION + + OPTION 输入.with <> "" + CONCAT(sub.width,'*',sub.thickness) = 输入.with + ENDOPTION + + OPTION 输入.customer_name <> "" + (sub.customer_name LIKE 输入.customer_name OR + sub.customer_description LIKE 输入.customer_name) + ENDOPTION + + ENDSELECT + ENDQUERY + ENDIF + IF 输入.flag = "2" PAGEQUERY SELECT @@ -200,6 +304,9 @@ OPTION 输入.pcsn <> "" a.pcsn = 输入.pcsn ENDOPTION + OPTION 输入.pcsn_in <> "" + a.pcsn IN 输入.pcsn_in + ENDOPTION OPTION 输入.begin_time <> "" b.confirm_time >= 输入.begin_time ENDOPTION @@ -316,6 +423,9 @@ OPTION 输入.pcsn <> "" a.pcsn = 输入.pcsn ENDOPTION + OPTION 输入.pcsn_in <> "" + a.pcsn IN 输入.pcsn_in + ENDOPTION OPTION 输入.begin_time <> "" b.confirm_time >= 输入.begin_time ENDOPTION @@ -376,7 +486,7 @@ plan1.is_delete = '0' GROUP BY container_name) plan ON plan.container_name = sub.container_name WHERE 1=1 - limit 0,10000 + limit 0,50000 ENDSELECT ENDQUERY ENDIF \ No newline at end of file diff --git a/lms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue b/lms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue index 3dde7c437..076973ecb 100644 --- a/lms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue +++ b/lms/nladmin-ui/src/views/wms/st/inAndOutReturn/index.vue @@ -139,6 +139,40 @@ /> + + + + + + + + + +