Browse Source

feat: 出库导出、确认

master
李永德 5 days ago
parent
commit
c739e8b5e4
  1. 9
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/IschBaseTaskService.java
  2. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java
  3. 12
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java
  4. 12
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtMoveinvService.java
  5. 68
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtMoveinv.java
  6. 7
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java
  7. 144
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml
  8. 11
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtMoveinvMapper.java
  9. 4
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtMoveinvMapper.xml
  10. 318
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java
  11. 11
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java
  12. 13
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java
  13. 17
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtMoveinvImpl.java
  14. 3
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java
  15. 8
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/TwoInBussManageServiceImpl.java
  16. 12
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/StIvtBsrealstorattr.java
  17. 28
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructattrService.java
  18. 24
      lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructattrServiceImpl.java
  19. 8
      lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java
  20. 18
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java
  21. 20
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java
  22. 16
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java
  23. 34
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutManageParam.java
  24. 128
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java
  25. 35
      lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutManageExportVo.java

9
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/IschBaseTaskService.java

@ -119,7 +119,13 @@ public interface IschBaseTaskService extends IService<SchBaseTask> {
*/
List<JSONObject> getTaskingByFk(String iostorinvId);
JSONObject getTaskObject(LambdaQueryWrapper<SchBaseTask> taskLam);
/**
* 根据条件获取任务数据
* @param taskLam 条件
* @param flag 是否抛出异常 {@code true} 查询到多条会抛出异常{@code false} 查询多条获取第一条
* @return 一条数据SchBaseTask {@code null}
*/
JSONObject getTaskObject(LambdaQueryWrapper<SchBaseTask> taskLam, boolean flag);
/**
* 根据ids获取任务
@ -136,6 +142,7 @@ public interface IschBaseTaskService extends IService<SchBaseTask> {
* @return
*/
List<JSONObject> getTaskByIdsToObject(List<String> taskIds, boolean flag);
}

4
lms/nladmin-system/src/main/java/org/nl/b_lms/sch/task/service/impl/SchBaseTaskServiceImpl.java

@ -218,8 +218,8 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
}
@Override
public JSONObject getTaskObject(LambdaQueryWrapper<SchBaseTask> taskLam) {
SchBaseTask one = getOne(taskLam);
public JSONObject getTaskObject(LambdaQueryWrapper<SchBaseTask> taskLam, boolean flag) {
SchBaseTask one = getOne(taskLam, flag);
if (ObjectUtil.isEmpty(one)){
return null;
}

12
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java

@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.st.outbill.service.dto.AllBoxInfoDto;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.OutManageParam;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.OutManageExportVo;
import org.nl.wms.stat.service.dto.InBillPageParam;
import org.nl.wms.stat.service.dto.OutBillPageParam;
import org.nl.wms.stat.service.vo.InBillPageVo;
@ -103,5 +106,14 @@ public interface IStIvtIostorinvdisService extends IService<StIvtIostorinvdis> {
List<StIvtIostorinvdis> getBillDisByDtlId(String iostorinvdtlId);
List<JSONObject> getAllOverdueByDtlId(String iostorinvdtlId);
/**
* 出库管理导出的数据
* @param paramMap
* @return
*/
List<OutManageExportVo> getOutManageExportData(OutManageParam paramMap);
List<AllBoxInfoDto> getAllBoxWeightAndDtlId();
}

12
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtMoveinvService.java

@ -0,0 +1,12 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinv;
/**
* 移库单据
* @Author: lyd
* @Date: 2025/7/2
*/
public interface IStIvtMoveinvService extends IService<StIvtMoveinv> {
}

68
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/StIvtMoveinv.java

@ -0,0 +1,68 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 衣裤单据
*
* @Author: lyd
* @Date: 2025/7/2
*/
@Data
@TableName("st_ivt_moveinv")
public class StIvtMoveinv {
/** 移库单标识 */
private String moveinv_id;
/** 单据编号 */
private String bill_code;
/** 业务类型 */
private String buss_type;
/** 单据类型 */
private String bill_type;
/** 业务日期 */
private String biz_date;
/** 仓库标识 */
private String stor_id;
/** 仓库编码 */
private String stor_code;
/** 仓库名称 */
private String stor_name;
/** 总数量 */
private String total_qty;
/** 明细数 */
private String detail_count;
/** 单据状态 */
private String bill_status;
/** 备注 */
private String remark;
/***/
private String create_mode;
/***/
private String input_optid;
/***/
private String input_optname;
/***/
private String input_time;
/***/
private String update_optid;
/***/
private String update_optname;
/***/
private String update_time;
/***/
private String confirm_optid;
/***/
private String confirm_optname;
/***/
private String confirm_time;
/***/
private String confirm_info;
/***/
private String sysdeptid;
/***/
private String syscompanyid;
/***/
private String is_delete;
}

7
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java

@ -8,8 +8,11 @@ import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis;
import org.nl.wms.st.outbill.service.dto.AllBoxInfoDto;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.OutManageParam;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.OutManageExportVo;
import org.nl.wms.stat.service.dto.InBillPageParam;
import org.nl.wms.stat.service.dto.OutBillPageParam;
import org.nl.wms.stat.service.vo.InBillPageVo;
@ -93,4 +96,8 @@ public interface StIvtIostorinvdisMapper extends BaseMapper<StIvtIostorinvdis> {
List<OutBillPageVo> getOutBillData(@Param("paramMap") OutBillPageParam paramMap);
List<OutBillTaskVo> getOutBillTask2(@Param("param") OutBillTaskParam param);
List<OutManageExportVo> getOutManageExportData(@Param("paramMap") OutManageParam paramMap);
List<AllBoxInfoDto> getAllBoxWeightAndDtlId();
}

144
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml

@ -912,8 +912,8 @@
AND CONCAT(record.width,'*',record.thickness) = #{paramMap.with}
</if>
<if test="paramMap.customer_name != null and paramMap.customer_name != ''">
AND (record.customer_name LIKE #{paramMap.customer_name} OR record.customer_description LIKE
#{paramMap.customer_name})
AND (record.customer_name LIKE '%${paramMap.customer_name}%' OR record.customer_description LIKE
'%${paramMap.customer_name}%')
</if>
GROUP BY
record.bill_code,
@ -1036,8 +1036,8 @@
AND CONCAT(record.width,'*',record.thickness) = #{paramMap.with}
</if>
<if test="paramMap.customer_name != null and paramMap.customer_name != ''">
AND (record.customer_name LIKE #{paramMap.customer_name} OR record.customer_description LIKE
#{paramMap.customer_name})
AND (record.customer_name LIKE '%${paramMap.customer_name}%' OR record.customer_description LIKE
'%${paramMap.customer_name}%')
</if>
GROUP BY
record.bill_code,
@ -1116,6 +1116,142 @@
AND mst.is_delete = '0'
AND mst.bill_status <![CDATA[ <= ]]> '99'
</select>
<select id="getOutManageExportData" resultType="org.nl.wms.st.outbill.service.vo.OutManageExportVo">
SELECT
MAX(ios.bill_code) AS bill_code,
MAX(ios.stor_name) AS stor_name,
MAX(attr.stor_name) AS out_stor_name,
MAX(ios.bill_type) AS bill_type,
MAX(ios.biz_date) AS biz_date,
MAX(dtl.plan_qty) AS qty,
MAX(cu.cust_code) AS cust_code,
MAX(cu.cust_name) AS cust_name,
MAX(dtl.vbeln) AS vbeln,
sub.sale_order_name,
CONCAT( sub.thickness_request, '*', sub.width_standard ) AS spec,
MAX(tr.cust_name) AS wl_cust_name,
MAX(ios.estimated_freight) AS estimated_freight,
MAX(dtl.assign_qty) AS plan_qty,
MAX(sub.box_weight) AS box_weight,
MAX(ios.order_number) AS order_number,
MAX(ios.receiptaddress) AS receiptaddress,
MAX( sd.label ) AS bill_status,
count(DISTINCT(dis.box_no)) as box_count,
dtl.iostorinvdtl_id
FROM
st_ivt_iostorinvdis dis
LEFT JOIN st_ivt_iostorinvdtl dtl ON dis.iostorinvdtl_id = dtl.iostorinvdtl_id
LEFT JOIN ST_IVT_IOStorInv ios ON ios.iostorinv_id = dtl.iostorinv_id
LEFT JOIN md_cs_customerbase cu ON ios.cust_code = cu.cust_code
LEFT JOIN md_cs_transportationbase tr ON ios.trans_code = tr.cust_code
LEFT JOIN st_ivt_bsrealstorattr attr ON attr.stor_id = ios.out_stor_id
LEFT JOIN pdm_bi_subpackagerelationrecord sub ON sub.package_box_sn = dis.box_no AND dis.pcsn = sub.container_name AND dis.iostorinv_id = sub.bill_id
LEFT JOIN sys_dict sd on ios.bill_status = sd.`value` and sd.`code` = 'io_bill_status'
WHERE
ios.io_type = '1'
AND ios.is_delete = '0'
<if test="paramMap.bill_code != null and paramMap.bill_code != ''">
AND ios.bill_code LIKE '%${paramMap.bill_code}%'
</if>
<if test="paramMap.sap_pcsn != null and paramMap.sap_pcsn != ''">
AND sub.sap_pcsn LIKE '%${paramMap.sap_pcsn}%'
</if>
<if test="paramMap.sap_pcsns != null and !paramMap.sap_pcsns.isEmpty()">
AND sub.sap_pcsn IN
<foreach collection="paramMap.sap_pcsns" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.pcsns != null and !paramMap.pcsns.isEmpty()">
AND dis.pcsn IN
<foreach collection="paramMap.pcsns" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.vbelns != null and !paramMap.vbelns.isEmpty()">
AND dtl.vbeln IN
<foreach collection="paramMap.vbelns" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.box_nos != null and !paramMap.box_nos.isEmpty()">
AND dis.box_no IN
<foreach collection="paramMap.box_nos" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.cust_code != null and paramMap.cust_code != ''">
AND (cu.cust_code LIKE '%${paramMap.cust_code}%' OR
cu.cust_simple_name LIKE '%${paramMap.cust_code}%')
</if>
<if test="paramMap.pcsn != null and paramMap.pcsn != ''">
AND dis.pcsn LIKE '%${paramMap.pcsn}%'
</if>
<if test="paramMap.is_upload != null and paramMap.is_upload != ''">
AND ios.is_upload = #{paramMap.is_upload}
</if>
<if test="paramMap.io_type != null and paramMap.io_type != ''">
AND ios.io_type = #{paramMap.io_type}
</if>
<if test="paramMap.vbeln != null and paramMap.vbeln != ''">
AND dtl.vbeln LIKE '%${paramMap.vbeln}%'
</if>
<if test="paramMap.width != null and paramMap.width != ''">
AND dtl.width LIKE '%${paramMap.width}%'
</if>
<if test="paramMap.bill_type != null and !paramMap.bill_type.isEmpty()">
AND ios.bill_type IN
<foreach collection="paramMap.bill_type" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.stor_id != null and !paramMap.stor_id.isEmpty()">
AND ios.stor_id IN
<foreach collection="paramMap.stor_id" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.create_mode != null and paramMap.create_mode != ''">
AND ios.create_mode = #{paramMap.create_mode}
</if>
<if test="paramMap.bill_status != null and !paramMap.bill_status.isEmpty()">
AND ios.bill_status IN
<foreach collection="paramMap.bill_status" item="code" separator="," open="(" close=")">
#{code}
</foreach>
</if>
<if test="paramMap.begin_time != null and paramMap.begin_time != ''">
AND ios.input_time <![CDATA[ >= ]]> #{paramMap.begin_time}
</if>
<if test="paramMap.end_time != null and paramMap.end_time != ''">
AND ios.input_time <![CDATA[ <= ]]> #{paramMap.end_time}
</if>
GROUP BY sub.sale_order_name,spec,ios.iostorinv_id,dtl.iostorinvdtl_id
limit 0,100000
</select>
<select id="getAllBoxWeightAndDtlId" resultType="org.nl.wms.st.outbill.service.dto.AllBoxInfoDto">
SELECT SUM(sub.box_weight) AS box_weight,
MAX(dtl.iostorinvdtl_id) AS iostorinvdtl_id
FROM st_ivt_iostorinvdis dis
LEFT JOIN st_ivt_iostorinvdtl dtl ON dis.iostorinvdtl_id = dtl.iostorinvdtl_id
LEFT JOIN st_ivt_iostorinv ios ON ios.iostorinv_id = dtl.iostorinv_id
LEFT JOIN pdm_bi_subpackagerelation sub
ON sub.package_box_sn = dis.box_no AND dis.pcsn = sub.container_name
WHERE ios.io_type = '1'
and ios.is_delete = '0'
GROUP BY dtl.iostorinvdtl_id
</select>
</mapper>

11
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtMoveinvMapper.java

@ -0,0 +1,11 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinv;
/**
* @Author: lyd
* @Date: 2025/7/2
*/
public interface StIvtMoveinvMapper extends BaseMapper<StIvtMoveinv> {
}

4
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtMoveinvMapper.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtMoveinvMapper">
</mapper>

318
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvOutServiceImpl.java

@ -44,14 +44,16 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dto.InventoryQueryParam
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.InBussManageService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.OutBussManageService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.TwoInBussManageService;
import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService;
import org.nl.b_lms.storage_manage.st.dao.StIvtBsrealstorattr;
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService;
import org.nl.b_lms.storage_manage.st.service.StIvtSectattrService;
import org.nl.b_lms.storage_manage.st.service.StIvtStructattrService;
import org.nl.b_lms.storage_manage.st.service.StIvtStructivtService;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.system.service.param.ISysParamService;
@ -72,7 +74,6 @@ import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collector;
import java.util.stream.Collectors;
/**
@ -156,6 +157,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
private RedissonClient redissonClient;
@Autowired
private StIvtStructivtService structivtService;
/** 仓位 */
@Autowired
private StIvtStructattrService structattrService;
@Autowired
@ -168,10 +170,17 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
private StIvtSectattrService sectattrService;
@Autowired
private ISysParamService paramService;
/** 载具扩展属性表 */
@Autowired
private IMdPbStoragevehicleextService mdPbStoragevehicleextService;
@Autowired
private IschBasePointService ischBasePointService;
@Autowired
private TwoOutExceptionalTask twoOutExceptionalTask;
/** 事物库区 */
@Autowired
private StIvtBsrealstorattrService bsrealstorattrService;
@Override
@Transactional
public String insertMst(JSONObject whereJson) {
@ -206,7 +215,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.map(row -> row.getBigDecimal("plan_qty"))
.reduce(BigDecimal.ZERO, BigDecimal::add)
.doubleValue();
whereJson.put("total_qty",total_qty);
whereJson.put("total_qty", total_qty);
StIvtIostorinv mstDao = updataMst(whereJson, null);
this.save(mstDao);
@ -277,6 +286,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/*
* 查询生成和未分配完的明细, 条件明细状态小于等于分配中未分配数大于0
* 全部分配根据单据号去查否者通过明细id或者木箱号获取
*/
// 查询条件
LambdaQueryWrapper<StIvtIostorinvdtl> dtlQuery = new QueryWrapper<StIvtIostorinvdtl>().lambda();
@ -321,7 +331,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
StIvtIostorinvdtl dtlDao = dtlDaoList.get(i);
// 调用分配库存公共方法
List<StIvtIostorinvdis> disArr = outBussManageService.divIvt(dtlDao,ivtList);
List<StIvtIostorinvdis> disArr = outBussManageService.divIvt(dtlDao, ivtList);
disDaoList.addAll(disArr);
}
@ -339,7 +349,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
outBussManageService.lockStruct(paramLockList,jsonLockParam);
outBussManageService.lockStruct(paramLockList, jsonLockParam);
// 插入分配明细
iStIvtIostorinvdisService.saveBatch(disDaoList);
@ -349,7 +359,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
} else {
throw new BadRequestException("其他出库单当前正在分配货位,请等待几秒再进行操作!");
}
} finally {
} finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
lock.unlock();
}
@ -381,7 +391,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
List<StIvtIostorinvdtl> dtlDaoList = iStIvtIostorinvdtlService.list(
new QueryWrapper<StIvtIostorinvdtl>().lambda()
.eq(StIvtIostorinvdtl::getIostorinv_id, mstDao.getIostorinv_id())
.eq(StIvtIostorinvdtl::getIostorinvdtl_id,jsonDtl.getString("iostorinvdtl_id"))
.eq(StIvtIostorinvdtl::getIostorinvdtl_id, jsonDtl.getString("iostorinvdtl_id"))
.le(StIvtIostorinvdtl::getBill_status, IOSEnum.BILL_STATUS.code("分配中"))
.gt(StIvtIostorinvdtl::getUnassign_qty, 0)
.orderByAsc(StIvtIostorinvdtl::getSeq_no)
@ -397,7 +407,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.collect(Collectors.joining("','"));
List<JSONObject> ivtList = WQL.getWO("BST_OUTDIV").addParam("flag", "1").addParam("stor_id", mstDao.getStor_id().toString())
.addParam("box_in", "('"+box_in+"')")
.addParam("box_in", "('" + box_in + "')")
.process().getResultJSONArray(0).toJavaList(JSONObject.class);
if (ObjectUtil.isEmpty(ivtList)) {
@ -429,7 +439,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
} else {
// 调用分配库存公共方法
disDaoList = outBussManageService.manualDivIvt(dtlDaoList.get(0),ivtList);
disDaoList = outBussManageService.manualDivIvt(dtlDaoList.get(0), ivtList);
}
// 更新仓位
@ -445,7 +455,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("lock_type", IOSEnum.LOCK_TYPE.code("出库锁"));
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
outBussManageService.lockStruct(lockList,jsonLockParam);
outBussManageService.lockStruct(lockList, jsonLockParam);
// 插入分配明细
iStIvtIostorinvdisService.saveBatch(disDaoList);
@ -523,7 +533,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
);
/*更新库存*/
outBussManageService.upateIvt(disList,mstDao,IOSEnum.IVT_CHANGE.code("减冻结"));
outBussManageService.upateIvt(disList, mstDao, IOSEnum.IVT_CHANGE.code("减冻结"));
/*
* 更新明细主单据
@ -569,7 +579,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
// 未分配重量 = 计划重量 则 明细状态为生成 否则 为分配中
if (dtlDao.getUnassign_qty().doubleValue() == dtlDao.getPlan_qty().doubleValue()){
if (dtlDao.getUnassign_qty().doubleValue() == dtlDao.getPlan_qty().doubleValue()) {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("生成"));
} else {
dtlDao.setBill_status(IOSEnum.BILL_STATUS.code("分配中"));
@ -585,7 +595,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
this.updateMstStatus(mstDao.getIostorinv_id());
/*删除出库任务*/
List<String> taskIds = disList.stream()
List<String> taskIds = disList.stream()
.map(row -> row.getString("task_id"))
.distinct()
.collect(Collectors.toList());
@ -617,7 +627,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
outBussManageService.lockStruct(paramLockList,jsonLockParam);
outBussManageService.lockStruct(paramLockList, jsonLockParam);
} else {
throw new BadRequestException("其他出库单当前正在取消分配,请等待几秒再进行操作!");
}
@ -660,8 +670,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 定义一个函数,将需要分组的元素映射到一个建的集合里
Function<JSONObject, List<String>> compositeKey = row ->
Arrays.asList(row.getString("box_length"), row.getString("box_width"),
row.getString("box_high"),row.getString("sale_order_name"),
row.getString("material_id")
row.getString("box_high"), row.getString("sale_order_name"),
row.getString("material_id")
);
Map<List<String>, List<JSONObject>> groupingDisMap =
@ -669,10 +679,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
// 调用任务生成处理
List<JSONObject> taskMangeList = createTaskMange(disLikeList,mstDao.getIostorinv_id().toString());
List<JSONObject> taskMangeList = createTaskMange(disLikeList, mstDao.getIostorinv_id().toString());
// 创建任务并下发一组任务
createTask(taskMangeList,disLikeList,whereJson.getString("point_code"));
createTask(taskMangeList, disLikeList, whereJson.getString("point_code"));
}
// 下发任务:判断当前单据是否有正在执行的的任务
@ -722,7 +732,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 定义一个函数,将需要分组的元素映射到一个建的集合里
Function<JSONObject, List<String>> compositeKey = row ->
Arrays.asList(row.getString("box_length"), row.getString("box_width"),
row.getString("box_high"),row.getString("sale_order_name"),
row.getString("box_high"), row.getString("sale_order_name"),
row.getString("material_id")
);
@ -737,10 +747,10 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
for (List<JSONObject> disLikeList : groupingDisMap.values()) {
// 调用任务生成处理 (有移库直接下发去做,最后返回出库仓位数组)
List<JSONObject> taskMangeList = createTaskMange2(disLikeList,mstDao.getIostorinv_id().toString(),allTransactionConsumer);
List<JSONObject> taskMangeList = createTaskMange2(disLikeList, mstDao.getIostorinv_id().toString(), allTransactionConsumer);
// 创建任务并下发一组任务
createTask2(taskMangeList,disLikeList,whereJson.getString("point_code"),allTransactionConsumer);
createTask2(taskMangeList, disLikeList, whereJson.getString("point_code"), allTransactionConsumer);
allTransactionConsumer.accept("finish");
}
@ -846,7 +856,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 更新库存
if (ObjectUtil.isNotEmpty(needUpdateIvtList)) {
outBussManageService.upateIvt(needUpdateIvtList,mstDao,IOSEnum.IVT_CHANGE.code("减库存"));
outBussManageService.upateIvt(needUpdateIvtList, mstDao, IOSEnum.IVT_CHANGE.code("减库存"));
}
// 更新仓位: 主存区仓位不更新
@ -865,7 +875,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
if (ObjectUtil.isNotEmpty(paramLockList)) {
outBussManageService.lockStruct(paramLockList,jsonLockParam);
outBussManageService.lockStruct(paramLockList, jsonLockParam);
}
// 更新单据
@ -951,7 +961,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* 如果是调拨出库则生成调拨入库单
*/
if (mstDao.getBill_type().equals(IOSEnum.OUT_TYPE.code("调拨出库"))) {
createOutIos(disDaoList,mstDao);
createOutIos(disDaoList, mstDao);
}
/*
@ -998,7 +1008,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.uniqueResult(0);
if (jsonTask == null) {
throw new BadRequestException("查询不到操作的任务记录!"+whereJson.getString("task_id"));
throw new BadRequestException("查询不到操作的任务记录!" + whereJson.getString("task_id"));
}
// 查询分配明细
@ -1030,7 +1040,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
needUpdateIvtList.add(jsonIvt);
}
outBussManageService.upateIvt(needUpdateIvtList,mstDao,IOSEnum.IVT_CHANGE.code("减库存"));
outBussManageService.upateIvt(needUpdateIvtList, mstDao, IOSEnum.IVT_CHANGE.code("减库存"));
// 更新仓位
List<String> paramLockList = new ArrayList<>();
@ -1044,7 +1054,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonLockParam.put("operate", IOSEnum.IO_TYPE.code("出库"));
paramLockList.add(disDao.getStruct_code());
outBussManageService.lockStruct(paramLockList,jsonLockParam);
outBussManageService.lockStruct(paramLockList, jsonLockParam);
if (IOSEnum.OUT_TYPE.code("改切出库").equals(mstDao.getBill_type()) || IOSEnum.OUT_TYPE.code("返检出库").equals(mstDao.getBill_type())) {
HashMap<String, String> map = new HashMap<>();
@ -1127,7 +1137,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
taskParam.put("next_device_code", IOSEnum.OUT_POINT.code(jsonAttrNow.getString("row_num")));
taskParam.put("task_type", "010712");
taskParam.put("car_no", "此货位LMS系统未有库存,请待出至【CK2001】点位后确认实物并重新手工入回库!");
taskParam.put("vehicle_code",IOSEnum.IS_NOTANDYES.code("否"));
taskParam.put("vehicle_code", IOSEnum.IS_NOTANDYES.code("否"));
TwoExcepionalMoveTask taskBean = new TwoExcepionalMoveTask();
String task_id = taskBean.createTask(taskParam);
@ -1138,16 +1148,11 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 创建调拨入库单
*
* @param disDaoList出库分配明细集合
* @param mstDao 出库单据对象
* @param mstDao 出库单据对象
*/
private void createOutIos(List<StIvtIostorinvdis> disDaoList, StIvtIostorinv mstDao) {
// 仓库表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_bsrealstorattr");
// 子卷包装表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
// 插入调拨入库单参数
Map<String, Object> paramMap = new HashMap<>();
@ -1155,9 +1160,8 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
* 准备数据
*/
// 查询移入仓库
JSONObject jsonAttr = attrTab.query("stor_id = '" + mstDao.getOut_stor_id().toString() + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonAttr)) {
StIvtBsrealstorattr ivtBsrealstorattr = bsrealstorattrService.getById(mstDao.getOut_stor_id());
if (ObjectUtil.isEmpty(ivtBsrealstorattr)) {
throw new BadRequestException("未查询到对应的移入仓库信息!");
}
@ -1169,26 +1173,25 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 计算总数量
BigDecimal total_qty = disDaoList.stream()
.map(row -> BigDecimal.valueOf(row.getPlan_qty().doubleValue()))
.map(StIvtIostorinvdis::getPlan_qty)
.reduce(BigDecimal.ZERO, BigDecimal::add);
paramMap.put("stor_id",jsonAttr.getString("stor_id"));
paramMap.put("bill_status",IOSEnum.BILL_STATUS.code("分配中"));
paramMap.put("total_qty",total_qty);
paramMap.put("detail_count",disDaoList.size());
paramMap.put("bill_type",IOSEnum.IN_TYPE.code("调拨入库"));
paramMap.put("biz_date",DateUtil.today());
paramMap.put("out_stor_id",mstDao.getStor_id());
paramMap.put("source_id",dtlDao.getVbeln());
paramMap.put("stor_id", ivtBsrealstorattr.getStor_id());
paramMap.put("bill_status", IOSEnum.BILL_STATUS.code("分配中"));
paramMap.put("total_qty", total_qty);
paramMap.put("detail_count", disDaoList.size());
paramMap.put("bill_type", IOSEnum.IN_TYPE.code("调拨入库"));
paramMap.put("biz_date", DateUtil.today());
paramMap.put("out_stor_id", mstDao.getStor_id());
paramMap.put("source_id", dtlDao.getVbeln());
paramMap.put("remark", "");
// 明细数据
String pcsn_in = disDaoList.stream()
List<String> pcsns = disDaoList.stream()
.map(StIvtIostorinvdis::getPcsn)
.collect(Collectors.joining("','"));
.collect(Collectors.toList());
List<JSONObject> subList = subTab.query("container_name IN ('" + pcsn_in + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
List<JSONObject> subList = subpackagerelationService.getSubPackageInfoBySubRolls(pcsns);
// 明细集合
ArrayList<LinkedHashMap> tableData = new ArrayList<>();
@ -1222,24 +1225,26 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
tableData.add(jsonDtl);
}
paramMap.put("tableData",tableData);
paramMap.put("tableData", tableData);
// 调用入库服务插入入库
iStIvtIostorinvService.insertMst(paramMap);
// 更新子卷包装关系为包装
JSONObject jsonSub = new JSONObject();
jsonSub.put("status", SUBEnum.STATUS.code("包装"));
subTab.update(jsonSub,"container_name IN ('" + pcsn_in + "')");
LambdaUpdateWrapper<PdmBiSubpackagerelation> subLam = new LambdaUpdateWrapper<>();
subLam.set(PdmBiSubpackagerelation::getStatus, SUBEnum.STATUS.code("包装"))
.in(PdmBiSubpackagerelation::getContainer_name, pcsns);
subpackagerelationService.update(subLam);
}
/**
* 生成任务前处理
* @param disLikeList 相同规格木箱订单物料的分配明细集合
*
* @param disLikeList 相同规格木箱订单物料的分配明细集合
* @param iostorinv_id 单据标识
* @return List<JSONObject> 生成任务的集合
*/
private List<JSONObject> createTaskMange(List<JSONObject> disLikeList, String iostorinv_id) {
private List<JSONObject> createTaskMange(List<JSONObject> disLikeList, String iostorinv_id) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
@ -1275,7 +1280,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 判断是深位还是浅位
if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
// 深位:判断对应浅位是否阻挡
JSONObject jsonBoxStop = ifBoxStop(jsonAttr,attrRowList,iostorinv_id);
JSONObject jsonBoxStop = ifBoxStop(jsonAttr, attrRowList, iostorinv_id);
if (ObjectUtil.isNotEmpty(jsonBoxStop)) {
// 加入需要移库的集合
@ -1294,11 +1299,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 生成任务前处理
* @param disLikeList 相同规格木箱订单物料的分配明细集合
*
* @param disLikeList 相同规格木箱订单物料的分配明细集合
* @param iostorinv_id 单据标识
* @return List<JSONObject> 生成任务的集合
*/
private List<JSONObject> createTaskMange2(List<JSONObject> disLikeList, String iostorinv_id, Consumer<String> allTransactionConsumer) {
private List<JSONObject> createTaskMange2(List<JSONObject> disLikeList, String iostorinv_id, Consumer<String> allTransactionConsumer) {
// 获取仓位集合
List<String> structCodes = disLikeList.stream()
@ -1329,7 +1335,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 判断是深位还是浅位
if (jsonAttr.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("深"))) {
// 深位:判断对应浅位是否阻挡
JSONObject jsonBoxStop = ifBoxStop2(jsonAttr,attrRowList,iostorinv_id,allTransactionConsumer);
JSONObject jsonBoxStop = ifBoxStop2(jsonAttr, attrRowList, iostorinv_id, allTransactionConsumer);
if (ObjectUtil.isNotEmpty(jsonBoxStop)) {
// 加入需要移库的集合
@ -1341,15 +1347,16 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
}
// 创建移库单下发移库任务
outBussManageService.createMove2(needMoveAttrList,allTransactionConsumer);
outBussManageService.createMove2(needMoveAttrList, allTransactionConsumer);
return needCreateAttrList;
}
/**
* 判断是否阻挡
* @param jsonAttr 要出库的仓位
* @param attrRowList 相同规格所在排所有仓位
*
* @param jsonAttr 要出库的仓位
* @param attrRowList 相同规格所在排所有仓位
* @param iostorinv_id 单据标识
* @return JSONObject 需要移库的仓位
*/
@ -1440,7 +1447,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 查询物料id
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list(
new QueryWrapper<StIvtIostorinvdis>().lambda()
.ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成"))
.ne(StIvtIostorinvdis::getWork_status, IOSEnum.BILL_STATUS.code("完成"))
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
).get(0);
@ -1452,7 +1459,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
JSONObject jsonVeExt = extTab.query("pcsn = '" + jsonLow.getString("storagevehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+jsonLow.getString("storagevehicle_code"));
throw new BadRequestException("此木箱没有绑定托盘号!" + jsonLow.getString("storagevehicle_code"));
}
// 生成任务
@ -1474,7 +1481,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
attrTab.update(jsonLow);
// 更新移入货位为出库异常货位
jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonMove.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonLow.put("task_code", task_id);
attrTab.update(jsonMove);
}
@ -1487,21 +1494,13 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 判断是否阻挡
* @param jsonAttr 要出库的仓位
* @param attrRowList 相同规格所在排所有仓位
*
* @param jsonAttr 要出库的仓位
* @param attrRowList 相同规格所在排所有仓位
* @param iostorinv_id 单据标识
* @return JSONObject 需要移库的仓位
*/
private JSONObject ifBoxStop2(JSONObject jsonAttr, List<JSONObject> attrRowList, String iostorinv_id, Consumer<String> allTransactionConsumer) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// 子卷包装关系表
WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation");
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
// 载具扩展属性表
WQLObject extTab = WQLObject.getWQLObject("md_pb_storagevehicleext");
JSONObject result = new JSONObject();
// 获取要出库仓位所对应的浅货位
@ -1546,7 +1545,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
taskLam.eq(SchBaseTask::getVehicle_code, jsonLow.getString("storagevehicle_code"))
.ne(SchBaseTask::getTask_status, "07")
.eq(SchBaseTask::getIs_delete, "0");
JSONObject jsonTask = ischBaseTaskService.getTaskObject(taskLam);
JSONObject jsonTask = ischBaseTaskService.getTaskObject(taskLam, false);
if (ObjectUtil.isNotEmpty(jsonTask)) {
flag = false;
}
@ -1584,7 +1583,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 查询物料id
StIvtIostorinvdis disDao = iStIvtIostorinvdisService.list(
new QueryWrapper<StIvtIostorinvdis>().lambda()
.ne(StIvtIostorinvdis::getWork_status,IOSEnum.BILL_STATUS.code("完成"))
.ne(StIvtIostorinvdis::getWork_status, IOSEnum.BILL_STATUS.code("完成"))
.eq(StIvtIostorinvdis::getBox_no, jsonLow.getString("storagevehicle_code"))
).get(0);
@ -1593,10 +1592,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
JSONObject jsonMove = twoInBussManageService.getOneStruct(moveParam);
// 查询木箱对应的载具
JSONObject jsonVeExt = extTab.query("pcsn = '" + jsonLow.getString("storagevehicle_code") + "'")
.uniqueResult(0);
JSONObject jsonVeExt = mdPbStoragevehicleextService.getOneByPcsnToObject(jsonLow.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+jsonLow.getString("storagevehicle_code"));
throw new BadRequestException("此木箱没有绑定托盘号!" + jsonLow.getString("storagevehicle_code"));
}
// 生成任务
@ -1608,20 +1606,19 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonTaskParam.put("vehicle_code2", jsonVeExt.getString("storagevehicle_code"));
jsonTaskParam.put("table_fk", iostorinv_id);
TwoOutExceptionalTask taskBean = new TwoOutExceptionalTask();
String task_id = taskBean.createTask(jsonTaskParam);
taskBean.immediateNotifyAcs(task_id);
String task_id = twoOutExceptionalTask.createTask(jsonTaskParam);
twoOutExceptionalTask.immediateNotifyAcs(task_id);
// 锁定:标记货位为异常并生成异常移库任务
jsonLow.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonLow.put("task_code", task_id);
attrTab.update(jsonLow);
structattrService.updateById(jsonLow.toJavaObject(StIvtStructattr.class));
// 更新移入货位为出库异常货位
jsonMove.put("lock_type",IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonMove.put("lock_type", IOSEnum.LOCK_TYPE.code("出库异常锁"));
jsonMove.put("inv_code", jsonLow.getString("storagevehicle_code"));
jsonLow.put("task_code", task_id);
attrTab.update(jsonMove);
jsonMove.put("task_code", task_id);
structattrService.updateById(jsonMove.toJavaObject(StIvtStructattr.class));
}
}
@ -1631,11 +1628,12 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 创建任务
*
* @param taskMangeList仓位集合
* @param disLikeList分配明细集合
* @param point_code 终点
* @param point_code 终点
*/
private void createTask(List<JSONObject> taskMangeList,List<JSONObject> disLikeList, String point_code) {
private void createTask(List<JSONObject> taskMangeList, List<JSONObject> disLikeList, String point_code) {
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
// 点位表
@ -1675,9 +1673,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 确定终点: 根据仓位所在排确定终点
String end_device_code = "";
if("1".equals(flag)){
if ("1".equals(flag)) {
end_device_code = IsEndCode2(json);
}else{
} else {
end_device_code = IsEndCode(json);
}
@ -1712,7 +1710,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
iStIvtIostorinvdisService.updateBatchById(disDaoList);
// 标记任务
jsonTask.put("is_auto_issue",IOSEnum.IS_SEND.code("否"));
jsonTask.put("is_auto_issue", IOSEnum.IS_SEND.code("否"));
taskService.update(jsonTask);
continue;
}
@ -1722,7 +1720,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
JSONObject jsonVeExt = extTab.query("pcsn = '" + json.getString("storagevehicle_code") + "'")
.uniqueResult(0);
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code"));
throw new BadRequestException("此木箱没有绑定托盘号!" + json.getString("storagevehicle_code"));
}
// 生成任务
@ -1745,8 +1743,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
jsonTaskParam.put("table_fk", disDaoList.get(0).getIostorinv_id().toString());
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) ||
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无")))
{
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) {
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("浅")));
} else {
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("深")));
@ -1759,7 +1756,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 更新分配明细
JSONObject jsonPoint = schBasePointService.query("point_code = '" + end_device_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(jsonPoint)) {
throw new BadRequestException("出库点位不存在:"+end_device_code);
throw new BadRequestException("出库点位不存在:" + end_device_code);
}
disDaoList.forEach(row -> {
@ -1773,11 +1770,14 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 创建任务通过仓位集合创建
* <p>出库口IOSEnum#OUT_POINT/2</p>
* @see IOSEnum#OUT_POINT2
* @see IOSEnum#OUT_POINT
* @param taskMangeList仓位集合
* @param disLikeList分配明细集合
* @param point_code 终点
* @param point_code 终点
*/
private void createTask2(List<JSONObject> taskMangeList,List<JSONObject> disLikeList, String point_code, Consumer<String> allTransactionConsumer) {
private void createTask2(List<JSONObject> taskMangeList, List<JSONObject> disLikeList, String point_code, Consumer<String> allTransactionConsumer) {
// 查询异常货位任务集合
List<String> taskIds = taskMangeList.stream()
.filter(row -> row.getString("lock_type").equals(IOSEnum.LOCK_TYPE.code("出库异常锁")))
@ -1793,7 +1793,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
String start_device_code = "";
// 是否自动下发
String is_auto_issue = IOSEnum.IS_SEND.code("是");
// 堆垛机出库口是否缓存货位(1个或者两个)
Param oneOrTwoStruct = paramService.findByCode("one_or_two_struct");
String flag = "0";
if (ObjectUtil.isNotEmpty(oneOrTwoStruct)) {
@ -1810,9 +1810,9 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 确定终点: 根据仓位所在排确定终点
String end_device_code = "";
if("1".equals(flag)){
if ("1".equals(flag)) {
end_device_code = IsEndCode2(json);
}else{
} else {
end_device_code = IsEndCode(json);
}
@ -1856,7 +1856,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 查询木箱对应的载具
JSONObject jsonVeExt = mdPbStoragevehicleextService.getOneByPcsnToObject(json.getString("storagevehicle_code"));
if (ObjectUtil.isEmpty(jsonVeExt)) {
throw new BadRequestException("此木箱没有绑定托盘号!"+json.getString("storagevehicle_code"));
throw new BadRequestException("此木箱没有绑定托盘号!" + json.getString("storagevehicle_code"));
}
// 生成任务
@ -1881,8 +1881,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
//设置单据类型,下发rgv任务时,终点不同
jsonTaskParam.put("bill_type", mst.getBill_type());
if (json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("浅")) ||
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无")))
{
json.getString("zdepth").equals(IOSEnum.ZDEPTH_STRUCT.code("无"))) {
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("浅")));
} else {
jsonTaskParam.put("sort_seq", Integer.parseInt(IOSEnum.ZDEPTH_STRUCT.code("深")));
@ -1895,7 +1894,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
// 更新分配明细
SchBasePoint point = ischBasePointService.findByCode(end_device_code);
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("出库点位不存在:"+end_device_code);
throw new BadRequestException("出库点位不存在:" + end_device_code);
}
disDaoList.forEach(row -> {
@ -1909,6 +1908,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 确定终点根据仓位所在排确定终点
*
* @param structDao仓位对象
* @return 终点
*/
@ -1922,21 +1922,15 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 更新异常货位
*
* @param disDaoList所有分配明细集合
*/
private void UpdateExceptional(List<StIvtIostorinvdis> disDaoList) {
// 仓位表
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
// 任务表
WQLObject taskService = WQLObject.getWQLObject("sch_base_task");
// 获取仓位集合
String structCodeIn = disDaoList.stream()
List<String> structCodes = disDaoList.stream()
.map(StIvtIostorinvdis::getStruct_code)
.distinct().collect(Collectors.joining("','"));
List<JSONObject> attrList = attrTab.query("struct_code IN ('" + structCodeIn + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
.distinct().collect(Collectors.toList());
List<JSONObject> attrList = structattrService.getAttributeByCodesToObject(structCodes);
// 过滤异常货位
List<JSONObject> attrExcepList = attrList.stream()
@ -1944,32 +1938,31 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.collect(Collectors.toList());
// 找所有异常任务
String taskCodeIn = attrExcepList.stream()
List<String> taskIds = attrExcepList.stream()
.map(row -> row.getString("task_code"))
.distinct().collect(Collectors.joining("','"));
.distinct().collect(Collectors.toList());
List<JSONObject> taskList = taskService.query("task_id IN ('" + taskCodeIn + "')")
.getResultJSONArray(0).toJavaList(JSONObject.class);
List<SchBaseTask> taskList = ischBaseTaskService.getTaskByIds(taskIds, false);
// 更新异常货位
List<String> structCodeInList = new ArrayList<>();
for (int i = 0; i < taskList.size(); i++) {
JSONObject json = taskList.get(0);
structCodeInList.add(json.getString("point_code1"));
structCodeInList.add(json.getString("point_code2"));
SchBaseTask task = taskList.get(i);
structCodeInList.add(task.getPoint_code1());
structCodeInList.add(task.getPoint_code2());
}
JSONObject jsonUpdate = new JSONObject();
jsonUpdate.put("lock_type", IOSEnum.LOCK_TYPE.code("未锁定"));
jsonUpdate.put("task_code", "");
attrTab.update(jsonUpdate,"struct_code IN ('"+String.join("','",structCodeInList)+"')");
LambdaUpdateWrapper<StIvtStructattr> strattLam = new LambdaUpdateWrapper<>();
strattLam.set(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定"))
.set(StIvtStructattr::getTask_code, "")
.in(StIvtStructattr::getStruct_code, structCodeInList);
structattrService.update(strattLam);
}
/**
* 更新主表状态
*
* @param iostorinv_id 主表标识
*/
public void updateMstStatus(String iostorinv_id) {
@ -2101,19 +2094,25 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 判断是否有异常货位 - 10
*
* @param disDaoList - 分配明细集合
* @return 仓位
*/
private String exceptionPointCode(List<JSONObject> disDaoList) {
WQLObject attrTab = WQLObject.getWQLObject("st_ivt_structattr");
WQLObject TaskTab = WQLObject.getWQLObject("sch_base_task");
String result = "";
// 查找库内是否有异常货位(主存区)
List<JSONObject> attrExceptionList = attrTab
.query("sect_code = 'BZC01' AND is_delete = '0' AND is_used = '1' and lock_type = '" + IOSEnum.LOCK_TYPE.code("出库异常锁") + "' and zdepth = '"+IOSEnum.ZDEPTH_STRUCT.code("浅")+"'")
.getResultJSONArray(0).toJavaList(JSONObject.class);
// List<JSONObject> attrExceptionList = attrTab
// .query("sect_code = 'BZC01' AND is_delete = '0' AND is_used = '1' and lock_type = '"
// + IOSEnum.LOCK_TYPE.code("出库异常锁") + "' and zdepth = '"
// +IOSEnum.ZDEPTH_STRUCT.code("浅")+"'")
// .getResultJSONArray(0).toJavaList(JSONObject.class);
LambdaQueryWrapper<StIvtStructattr> structAttyLam = new LambdaQueryWrapper<>();
structAttyLam.eq(StIvtStructattr::getSect_code, "BZC01")
.eq(StIvtStructattr::getIs_delete, "0")
.eq(StIvtStructattr::getIs_used, "1")
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("出库异常锁"))
.eq(StIvtStructattr::getZdepth, IOSEnum.ZDEPTH_STRUCT.code("浅"));
List<JSONObject> attrExceptionList = structattrService.getAttributesByConditionsToObject(structAttyLam);
if (ObjectUtil.isEmpty(attrExceptionList)) {
return null;
}
@ -2121,12 +2120,19 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
List<JSONObject> exceptionList = new ArrayList<>();
// 查询异常货位对应的深货位
attrExceptionList.forEach(row -> {
JSONObject json = attrTab.query("row_num = '" + row.getString("row_num") + "' AND col_num = '" + row.getString("col_num") + "' AND " +
"layer_num = '" + row.getString("layer_num") + "' AND zdepth = '" + IOSEnum.ZDEPTH_STRUCT.code("深") + "'"
).uniqueResult(0);
if (ObjectUtil.isNotEmpty(json)) {
exceptionList.add(json);
LambdaQueryWrapper<StIvtStructattr> lam = new LambdaQueryWrapper<>();
lam.eq(StIvtStructattr::getRow_num, row.getString("row_num"))
.eq(StIvtStructattr::getCol_num, row.getString("col_num"))
.eq(StIvtStructattr::getLayer_num, row.getString("layer_num"))
.eq(StIvtStructattr::getZdepth, IOSEnum.ZDEPTH_STRUCT.code("深"));
JSONObject attribute = structattrService.getAttributeByConditionsToObject(lam, true);
// JSONObject json = attrTab.query("row_num = '" + row.getString("row_num")
// + "' AND col_num = '" + row.getString("col_num") + "' AND " +
// "layer_num = '" + row.getString("layer_num") + "' AND zdepth = '" + IOSEnum.ZDEPTH_STRUCT.code("深") + "'"
// ).uniqueResult(0);
if (ObjectUtil.isNotEmpty(attribute)) {
exceptionList.add(attribute);
}
});
@ -2152,15 +2158,22 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.findFirst().orElse(null);
if (ObjectUtil.isEmpty(expJson)) {
return "货位【"+jsonObject.getString("struct_code")+"'】 对应的浅货位有出库异常任务,请检查!";
return "货位【" + jsonObject.getString("struct_code") + "'】 对应的浅货位有出库异常任务,请检查!";
}
// 查询对应的异常任务
JSONObject jsonTask = TaskTab
.query("handle_class = '" + TwoOutExceptionalTask.class.getName() + "' AND is_delete = '0' and point_code2 = '" + expJson.getString("struct_code") + "' ORDER BY create_time DESC")
.uniqueResult(0);
result = "请先下发木箱号为【"+jsonTask.getString("vehicle_code")+"】的出库任务!";
// JSONObject jsonTask = TaskTab
// .query("handle_class = '" + TwoOutExceptionalTask.class.getName()
// + "' AND is_delete = '0' and point_code2 = '" + expJson.getString("struct_code")
// + "' ORDER BY create_time DESC")
// .uniqueResult(0);
LambdaQueryWrapper<SchBaseTask> taskLam = new QueryWrapper<SchBaseTask>().lambda();
taskLam.eq(SchBaseTask::getHandle_class, TwoOutExceptionalTask.class.getName())
.eq(SchBaseTask::getIs_delete, "0")
.eq(SchBaseTask::getPoint_code2, expJson.getString("struct_code"))
.orderByDesc(SchBaseTask::getCreate_time);
SchBaseTask task = ischBaseTaskService.getOne(taskLam, false);
result = "请先下发木箱号为【" + task.getVehicle_code() + "】的出库任务!";
}
return result;
@ -2168,6 +2181,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
/**
* 出库下发任务前校验校验木箱类型数据是否都已经维护
*
* @param iostorinv_id 主表id
*/
private void boxCheck(String iostorinv_id) {
@ -2215,7 +2229,7 @@ public class StIvtIostorinvOutServiceImpl extends ServiceImpl<StIvtIostorinvOutM
.map(MdpbBoxtype::getBox_type)
.collect(Collectors.joining("','"));
throw new BadRequestException("请先维护规格类型为【"+message+"】的木箱规格类型信息!");
throw new BadRequestException("请先维护规格类型为【" + message + "】的木箱规格类型信息!");
}
}
}

11
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java

@ -213,7 +213,7 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
pdmBiSubpackagerelationMapper.update(pdmBiSubpackagerelation, new UpdateWrapper<PdmBiSubpackagerelation>().eq("package_box_sn", packageIn).eq("status", SUBEnum.STATUS.code("生成")));
}
return mstDao.getIostorinv_id().toString();
return mstDao.getIostorinv_id();
}
@Override
@ -362,7 +362,8 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
if (ObjectUtil.isNotEmpty(whereJson.get("in_buss"))) {
attrParam.put("move_block_num", MapUtil.getStr(whereJson, "move_block_num"));
}
stIvtStructattr = twoInBussManageService.getOneStruct(attrParam);
stIvtStructattr = null;
// stIvtStructattr = twoInBussManageService.getOneStruct(attrParam);
}
} else {
// 指定分配
@ -384,8 +385,10 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl<StIvtIostorinvMapper,
// 判断是否虚拟区
String work_status;
Long task_id = null;
JSONObject jsonSect = sectTab.query("sect_id = '" + jsonAttr.getString("sect_id") + "'").uniqueResult(0);
StIvtSectattr stIvtSectattr = stIvtSectattrMapper.selectOne(new QueryWrapper<StIvtSectattr>().eq("sect_id", jsonAttr.getString("sect_id")));
// JSONObject jsonSect = sectTab.query("sect_id = '" + jsonAttr.getString("sect_id") + "'").uniqueResult(0);
JSONObject jsonSect = sectTab.query("sect_id = '" + 1 + "'").uniqueResult(0);
// StIvtSectattr stIvtSectattr = stIvtSectattrMapper.selectOne(new QueryWrapper<StIvtSectattr>().eq("sect_id", jsonAttr.getString("sect_id")));
StIvtSectattr stIvtSectattr = stIvtSectattrMapper.selectOne(new QueryWrapper<StIvtSectattr>().eq("sect_id", 1));
if (jsonSect.getString("sect_type_attr").equals(IOSEnum.SECT_TYPE.code("虚拟区"))) {
// 虚拟区:执行状态为完成
work_status = IOSEnum.WORK_STATUS.code("完成");

13
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java

@ -23,8 +23,11 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.CollectionUtils;
import org.nl.common.utils.IdUtil;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.st.outbill.service.dto.AllBoxInfoDto;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.OutManageParam;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.OutManageExportVo;
import org.nl.wms.stat.service.dto.InBillPageParam;
import org.nl.wms.stat.service.dto.OutBillPageParam;
import org.nl.wms.stat.service.vo.InBillPageVo;
@ -333,4 +336,14 @@ public class StIvtIostorinvdisServiceImpl extends ServiceImpl<StIvtIostorinvdisM
List<StIvtIostorinvdis> list = list(lam);
return CollectionUtils.mapList(list, dis -> (JSONObject) JSON.toJSON(dis));
}
@Override
public List<OutManageExportVo> getOutManageExportData(OutManageParam paramMap) {
return stIvtIostorinvdisMapper.getOutManageExportData(paramMap);
}
@Override
public List<AllBoxInfoDto> getAllBoxWeightAndDtlId() {
return stIvtIostorinvdisMapper.getAllBoxWeightAndDtlId();
}
}

17
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtMoveinvImpl.java

@ -0,0 +1,17 @@
package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtMoveinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinv;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtMoveinvMapper;
import org.springframework.stereotype.Service;
/**
* @Author: lyd
* @Date: 2025/7/2
*/
@Slf4j
@Service
public class StIvtMoveinvImpl extends ServiceImpl<StIvtMoveinvMapper, StIvtMoveinv> implements IStIvtMoveinvService {
}

3
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/OutBussManageServiceImpl.java

@ -147,6 +147,7 @@ public class OutBussManageServiceImpl implements OutBussManageService {
@Override
public List<StIvtIostorinvdis> divIvt(StIvtIostorinvdtl dtlDao, List<JSONObject> ivtList) {
// dtl -> dis
StIvtIostorinv mstDao = stIvtIostorinvOutService.getById(dtlDao.getIostorinv_id());
@ -162,8 +163,10 @@ public class OutBussManageServiceImpl implements OutBussManageService {
// 未分配重量
double unassign_qty = dtlDao.getUnassign_qty().doubleValue();
// hint: 区分有无订单号
if (ObjectUtil.isNotEmpty(dtlDao.getSource_bill_code())) {
// 有订单号: 找相同物料、订单号的库存,并根据仓位分组、即木箱分组
// mark: likeMaterOrderMap -> 同物料、同订单号的库存信息(key(仓位编码) : value(库存实体)),也就是一个仓位对应所有的子卷
Map<String, List<JSONObject>> likeMaterOrderMap = ivtList.stream()
.filter(row -> row.getString("material_id").equals(dtlDao.getMaterial_id().toString()) &&
row.getString("sale_order_name").equals(dtlDao.getSource_bill_code()))

8
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/util/impl/TwoInBussManageServiceImpl.java

@ -85,10 +85,10 @@ public class TwoInBussManageServiceImpl implements TwoInBussManageService {
.eq(StIvtStructattr::getIs_used, IOSEnum.IS_NOTANDYES.code("是")).eq(StIvtStructattr::getSect_id, jsonObject.getString("sect_id"))
.eq(StIvtStructattr::getLock_type, IOSEnum.LOCK_TYPE.code("未锁定")).eq(StIvtStructattr::getStor_id, jsonObject.getString("stor_id"))
.in(StIvtStructattr::getHeight, result);
if (){
}
stIvtStructattrMapper.selectList()
// if (){
//
// }
// stIvtStructattrMapper.selectList()

12
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/StIvtBsrealstorattr.java

@ -16,7 +16,7 @@ public class StIvtBsrealstorattr {
* 仓库标识
*/
@TableId(value = "stor_id", type = IdType.NONE)
private Long stor_id;
private String stor_id;
/**
* 仓库编码
@ -166,7 +166,7 @@ public class StIvtBsrealstorattr {
* 创建人
*/
@TableField("create_id")
private Long create_id;
private String create_id;
/**
* 创建人姓名
@ -184,7 +184,7 @@ public class StIvtBsrealstorattr {
* 修改人
*/
@TableField("update_optid")
private Long update_optid;
private String update_optid;
/**
* 修改人姓名
@ -202,19 +202,19 @@ public class StIvtBsrealstorattr {
* 拥有者ID
*/
@TableField("sysownerid")
private Long sysownerid;
private String sysownerid;
/**
* 部门ID
*/
@TableField("sysdeptid")
private Long sysdeptid;
private String sysdeptid;
/**
* 公司ID
*/
@TableField("syscompanyid")
private Long syscompanyid;
private String syscompanyid;
/**
* 是否删除

28
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtStructattrService.java

@ -1,6 +1,7 @@
package org.nl.b_lms.storage_manage.st.service;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.b_lms.storage_manage.st.dao.StIvtStructattr;
@ -45,4 +46,31 @@ public interface StIvtStructattrService extends IService<StIvtStructattr> {
* @return
*/
List<JSONObject> getRowsAttributeToObject(String stor, List<String> rows);
/**
* 根据条件获取数据
* @param structAttyLam
* @return List<StIvtStructattr>
*/
List<StIvtStructattr> getAttributesByConditions(LambdaQueryWrapper<StIvtStructattr> structAttyLam);
/**
* 根据条件获取数据 -> List<JSONObject>
* @param structAttyLam
* @return List<JSONObject>
*/
List<JSONObject> getAttributesByConditionsToObject(LambdaQueryWrapper<StIvtStructattr> structAttyLam);
/**
* 根据条件获取数据
* @param structAttyLam 条件
* @param flag 是否抛出异常
* @return StIvtStructattr
*/
StIvtStructattr getAttributeByConditions(LambdaQueryWrapper<StIvtStructattr> structAttyLam, boolean flag);
/**
* 根据条件获取数据 -> JSONObject
* @param structAttyLam 条件
* @param flag 是否抛出异常
* @return JSONObject
*/
JSONObject getAttributeByConditionsToObject(LambdaQueryWrapper<StIvtStructattr> structAttyLam, boolean flag);
}

24
lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtStructattrServiceImpl.java

@ -76,4 +76,28 @@ public class StIvtStructattrServiceImpl extends ServiceImpl<StIvtStructattrMappe
lam.in(StIvtStructattr::getRow_num, rows).eq(StIvtStructattr::getStor_id, stor);
return CollectionUtils.mapList(list(lam), attr -> (JSONObject) JSON.toJSON(attr));
}
@Override
public List<StIvtStructattr> getAttributesByConditions(LambdaQueryWrapper<StIvtStructattr> structAttyLam) {
return list(structAttyLam);
}
@Override
public List<JSONObject> getAttributesByConditionsToObject(LambdaQueryWrapper<StIvtStructattr> structAttyLam) {
return CollectionUtils.mapList(getAttributesByConditions(structAttyLam), sta -> (JSONObject) JSON.toJSON(sta));
}
@Override
public StIvtStructattr getAttributeByConditions(LambdaQueryWrapper<StIvtStructattr> structAttyLam, boolean flag) {
return getOne(structAttyLam, flag);
}
@Override
public JSONObject getAttributeByConditionsToObject(LambdaQueryWrapper<StIvtStructattr> structAttyLam, boolean flag) {
StIvtStructattr attributeByConditions = getAttributeByConditions(structAttyLam, flag);
if (ObjectUtil.isEmpty(attributeByConditions)) {
return null;
}
return (JSONObject) JSON.toJSON(attributeByConditions);
}
}

8
lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/HandMoveStorServiceImpl.java

@ -11,6 +11,8 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtMoveinvService;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtMoveinv;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
@ -37,6 +39,8 @@ import java.util.*;
@Slf4j
public class HandMoveStorServiceImpl implements HandMoveStorService {
private final StorPublicService storPublicService;
/** 移库主表 */
private final IStIvtMoveinvService moveinvService;
@Override
public Map<String, Object> pageQuery(Map whereJson, Pageable page) {
@ -277,8 +281,6 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
@Override
@Transactional(rollbackFor = Exception.class)
public String insertDtl2(JSONObject json) {
//主表
WQLObject wo_mst = WQLObject.getWQLObject("ST_IVT_MoveInv");
JSONArray rows = json.getJSONArray("tableData");
json.remove("tableData");
String currentUserId = SecurityUtils.getCurrentUserId();
@ -305,7 +307,7 @@ public class HandMoveStorServiceImpl implements HandMoveStorService {
JSONObject ret = this.insertDtlByRows2(json, rows);
json.put("detail_count", ret.getString("detail_count"));
json.put("total_qty", ret.getString("total_qty"));
wo_mst.insert(json);
moveinvService.save(json.toJavaObject(StIvtMoveinv.class));
return moveinv_id;
}

18
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java

@ -9,15 +9,14 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.modules.logging.annotation.Log;
import org.nl.system.service.dict.ISysDictService;
import org.nl.wms.st.outbill.service.CheckOutBillService;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.dto.*;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
/**
@ -120,4 +119,15 @@ public class CheckOutBillController {
iStIvtIostorinvOutService.confirm(whereJson);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@Log("导出数据")
@GetMapping(value = "/download")
public void exportExcel(OutManageParam param, HttpServletResponse response) throws IOException {
checkOutBillService.exportExcel(param, response);
}
@PostMapping("/outReturn")
@Log("销售出库回传mes-sap")
public ResponseEntity<Object> outReturn(@RequestBody JSONObject whereJson) {
checkOutBillService.outReturn(whereJson);
return new ResponseEntity<>(HttpStatus.OK);
}
}

20
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java

@ -5,14 +5,13 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv;
import org.nl.common.domain.query.PageQuery;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.dto.*;
import org.nl.wms.st.outbill.service.vo.OutBillDtlVo;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.StockMaterialVo;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@ -69,4 +68,17 @@ public interface CheckOutBillService {
* }
*/
JSONObject updataIsOverdue(JSONObject whereJson);
/**
* 导出数据
* @param param
* @param response
*/
void exportExcel(OutManageParam param, HttpServletResponse response) throws IOException;
/**
* 回传mes-sap
* @param whereJson
*/
void outReturn(JSONObject whereJson);
}

16
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java

@ -0,0 +1,16 @@
package org.nl.wms.st.outbill.service.dto;
import lombok.Data;
import java.io.Serializable;
/**
* 木箱信息VO
* @Author: lyd
* @Date: 2025/7/3
*/
@Data
public class AllBoxInfoDto implements Serializable {
private Double box_weight;
private String iostorinvdtl_id;
}

34
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutManageParam.java

@ -0,0 +1,34 @@
package org.nl.wms.st.outbill.service.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 出库管理请求参数
* @Author: lyd
* @Date: 2025/7/2
*/
@Data
public class OutManageParam implements Serializable {
private List<String> stor_id;
private List<String> bill_status;
private List<String> bill_type;
private List<String> vbelns;
private List<String> pcsns;
private List<String> sap_pcsns;
private List<String> box_nos;
private String begin_time;
private String end_time;
private String bill_code;
private String vbeln;
private String box_no;
private String pcsn;
private String sap_pcsn;
private String cust_code;
private String width;
private String is_upload;
private String io_type;
private String create_mode;
}

128
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java

@ -1,9 +1,9 @@
package org.nl.wms.st.outbill.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
@ -17,22 +17,21 @@ import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.StringDealUtils;
import org.nl.modules.wql.WQL;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.common.utils.FileUtil;
import org.nl.wms.st.outbill.service.CheckOutBillService;
import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam;
import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam;
import org.nl.wms.st.outbill.service.dto.OutBillTaskParam;
import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam;
import org.nl.wms.st.outbill.service.dto.*;
import org.nl.wms.st.outbill.service.vo.OutBillDtlVo;
import org.nl.wms.st.outbill.service.vo.OutBillTaskVo;
import org.nl.wms.st.outbill.service.vo.OutManageExportVo;
import org.nl.wms.st.outbill.service.vo.StockMaterialVo;
import org.nl.wms.stat.service.enums.OutBillTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/**
* @Author: lyd
@ -167,4 +166,113 @@ public class CheckOutBillServiceImpl implements CheckOutBillService {
result.put("mst", jsonMst);
return result;
}
@Override
public void exportExcel(OutManageParam paramMap, HttpServletResponse response) throws IOException {
// 空格查询
doLikeOrInParam(paramMap);
List<OutManageExportVo> billList = iostorinvdisService.getOutManageExportData(paramMap);
List<AllBoxInfoDto> boxInfoDtoList = iostorinvdisService.getAllBoxWeightAndDtlId();
List<Map<String, Object>> list = new ArrayList<>();
for (OutManageExportVo exportVo : billList) {
Map<String, Object> mp = new LinkedHashMap<>();
mp.put("单据号", exportVo.getBill_code());
mp.put("仓库", exportVo.getStor_name());
mp.put("业务类型", OutBillTypeEnum.getNameByCode(exportVo.getBill_type()));
String boxWeight = boxInfoDtoList.stream()
.filter(row -> row.getIostorinvdtl_id().equals(exportVo.getIostorinvdtl_id()))
.map(AllBoxInfoDto::getBox_weight)
.reduce(Double::sum).orElse(0.00).toString();
//计划重量、实际重量、实际毛重、车号、箱数、收货地址(调拨显示到货仓库)、单据状态
mp.put("业务日期", exportVo.getBiz_date());
mp.put("计划重量", exportVo.getQty());
mp.put("实际重量", exportVo.getPlan_qty());
mp.put("实际毛重", boxWeight);
mp.put("车号", exportVo.getOrder_number());
mp.put("箱数", exportVo.getBox_count());
if (StrUtil.equals(exportVo.getBill_type(), "1004")) {
mp.put("收货地址", exportVo.getOut_stor_name());
} else {
mp.put("收货地址", exportVo.getReceiptaddress());
}
mp.put("单据状态", exportVo.getBill_status());
mp.put("客户编码", exportVo.getCust_code());
mp.put("客户名称", exportVo.getCust_name());
mp.put("交货单号", exportVo.getVbeln());
mp.put("订单及行号", exportVo.getSale_order_name());
mp.put("规格", exportVo.getSpec());
mp.put("物流公司", exportVo.getWl_cust_name());
mp.put("运费", exportVo.getEstimated_freight());
list.add(mp);
}
FileUtil.downloadExcel(list, response);
}
@Override
public void outReturn(JSONObject whereJson) {
throw new BadRequestException("功能待开发!");
// WQLObject mstTab = WQLObject.getWQLObject("st_ivt_iostorinv");
//
// JSONObject jsonMst = mstTab.query("iostorinv_id = '" + whereJson.getString("iostorinv_id") + "'").uniqueResult(0);
//
// if (!StrUtil.equals(jsonMst.getString("bill_type"), "1001")) {
// throw new BadRequestException("请选择发货出库单据!");
// }
//
// // 调用mes接口回传
// JSONObject param = new JSONObject();
// JSONArray array = new JSONArray();
// array.add(jsonMst);
// param.put("rows", array);
//
// InAndOutRetrunServiceImpl bean = SpringContextHolder.getBean(InAndOutRetrunServiceImpl.class);
// bean.uploadMES(param);
}
private void doLikeOrInParam(OutManageParam paramMap) {
if (StrUtil.isNotEmpty(paramMap.getVbeln())){
// 判断是否有空格
boolean matches = paramMap.getVbeln().matches(".*\\s.*");
List<String> vbelnList = new ArrayList<>();
if (matches) {
String[] vbeln = paramMap.getVbeln().split(" ");
vbelnList.addAll(Arrays.asList(vbeln));
paramMap.setVbelns(vbelnList);
paramMap.setVbeln("");
}
}
if (StrUtil.isNotEmpty(paramMap.getBox_no())){
// 判断是否有空格
boolean matches = paramMap.getBox_no().matches(".*\\s.*");
List<String> boxList = new ArrayList<>();
if (matches) {
String[] boxs = paramMap.getBox_no().split(" ");
boxList.addAll(Arrays.asList(boxs));
paramMap.setBox_nos(boxList);
paramMap.setBox_no("");
}
}
if (StrUtil.isNotEmpty(paramMap.getPcsn())){
// 判断是否有空格
boolean matches = paramMap.getPcsn().matches(".*\\s.*");
List<String> pcsnList = new ArrayList<>();
if (matches) {
String[] pcsns = paramMap.getPcsn().split(" ");
pcsnList.addAll(Arrays.asList(pcsns));
paramMap.setPcsns(pcsnList);
paramMap.setPcsn("");
}
}
if (StrUtil.isNotEmpty(paramMap.getSap_pcsn())){
// 判断是否有空格
boolean matches = paramMap.getSap_pcsn().matches(".*\\s.*");
List<String> pcsnList = new ArrayList<>();
if (matches) {
String[] pcsns = paramMap.getSap_pcsn().split(" ");
pcsnList.addAll(Arrays.asList(pcsns));
paramMap.setSap_pcsns(pcsnList);
paramMap.setSap_pcsn("");
}
}
}
}

35
lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/vo/OutManageExportVo.java

@ -0,0 +1,35 @@
package org.nl.wms.st.outbill.service.vo;
import lombok.Data;
import java.io.Serializable;
/**
* 出库管理导出数据
*
* @Author: lyd
* @Date: 2025/7/3
*/
@Data
public class OutManageExportVo implements Serializable {
private String bill_code;
private String stor_name;
private String out_stor_name;
private String bill_type;
private String biz_date;
private String qty;
private String cust_code;
private String cust_name;
private String vbeln;
private String sale_order_name;
private String spec;
private String wl_cust_name;
private String estimated_freight;
private String plan_qty;
private String box_weight;
private String order_number;
private String receiptaddress;
private String bill_status;
private String box_count;
private String iostorinvdtl_id;
}
Loading…
Cancel
Save