From db5e20f5f6b26a9108e417a9cf6e6d45808e4cff Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Fri, 4 Jul 2025 17:59:28 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=8F=91=E8=B4=A7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BF=9D=E5=AD=98=E3=80=81=E8=8E=B7=E5=8F=96=E5=88=86?= =?UTF-8?q?=E9=85=8D=E6=98=8E=E7=BB=86=E6=9D=A1=E6=95=B0=E3=80=81=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E5=8F=91=E8=B4=A7=E5=8D=95Excel=E3=80=81=E5=87=BA?= =?UTF-8?q?=E5=BA=93=E4=BB=BB=E5=8A=A1=E6=89=8B=E5=8A=A8=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E3=80=81=E5=87=BA=E5=BA=93=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iostorInv/IStIvtIostorinvdisService.java | 10 + .../iostorInv/IStIvtIostorinvdtlService.java | 3 + .../dao/mapper/StIvtIostorinvdisMapper.java | 9 + .../dao/mapper/StIvtIostorinvdisMapper.xml | 83 ++ .../dao/mapper/StIvtIostorinvdtlMapper.java | 4 + .../dao/mapper/StIvtIostorinvdtlMapper.xml | 47 + .../impl/StIvtIostorinvdisServiceImpl.java | 22 + .../impl/StIvtIostorinvdtlServiceImpl.java | 6 + .../md/dao/MdCsCustomerBase.java | 215 +++++ .../md/dao/mapper/MdCsCustomerBaseMapper.java | 11 + .../md/dao/mapper/MdCsCustomerBaseMapper.xml | 4 + .../md/service/IMdCsCustomerBaseService.java | 17 + .../IMdCsTransportationBaseService.java | 6 + .../impl/MdCsCustomerBaseServiceImpl.java | 25 + .../MdCsTransportationBaseServiceImpl.java | 7 + .../st/dao/mapper/StIvtStructivtMapper.java | 3 +- .../st/dao/mapper/StIvtStructivtMapper.xml | 2 +- .../st/service/StIvtSectattrService.java | 2 + .../impl/StIvtSectattrServiceImpl.java | 5 + .../outbill/rest/CheckOutBillController.java | 33 + .../outbill/service/CheckOutBillService.java | 41 +- .../st/outbill/service/dto/AllBoxInfoDto.java | 5 + .../st/outbill/service/dto/GenOrUnDtlDto.java | 26 + .../st/outbill/service/dto/OutTaskDisDto.java | 155 +++ .../service/dto/OutTaskQueryDisDto.java | 29 + .../service/impl/CheckOutBillServiceImpl.java | 898 +++++++++++++++++- 26 files changed, 1658 insertions(+), 10 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdCsCustomerBase.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.xml create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsCustomerBaseService.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsCustomerBaseServiceImpl.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/GenOrUnDtlDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskDisDto.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskQueryDisDto.java diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java index 065d7d5..37f27d6 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdisService.java @@ -1,5 +1,6 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -8,6 +9,7 @@ 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.dto.OutTaskQueryDisDto; 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; @@ -115,5 +117,13 @@ public interface IStIvtIostorinvdisService extends IService { List getOutManageExportData(OutManageParam paramMap); List getAllBoxWeightAndDtlId(); + + List getBoxInfoByInvId(String iostorinvId); + + List getAllBoxInfoByInvId(String iostorinvId); + + JSONArray getBillInfosByConditions(OutTaskQueryDisDto disDto); + + List getTasking(String iostorinvId); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java index d25e18d..b605881 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvdtlService.java @@ -3,6 +3,7 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; +import org.nl.wms.st.outbill.service.dto.GenOrUnDtlDto; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; @@ -91,4 +92,6 @@ public interface IStIvtIostorinvdtlService extends IService { * @return */ List getBillDtlByInvId(String id); + + List getGeneratedAndUnallocatedDtls(GenOrUnDtlDto dto); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java index 17f03e4..246a859 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.java @@ -11,6 +11,7 @@ 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.dto.OutTaskQueryDisDto; 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; @@ -100,4 +101,12 @@ public interface StIvtIostorinvdisMapper extends BaseMapper { List getOutManageExportData(@Param("paramMap") OutManageParam paramMap); List getAllBoxWeightAndDtlId(); + + List getBoxInfoByInvId(String iostorinvId); + + List getAllBoxInfoByInvId(String iostorinvId); + + JSONArray getBillInfosByConditions(@Param("paramMap") OutTaskQueryDisDto disDto); + + List getTasking(String iostorinvId); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml index df4f933..e492096 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdisMapper.xml @@ -1252,6 +1252,89 @@ and ios.is_delete = '0' GROUP BY dtl.iostorinvdtl_id + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java index 87964e6..6c139e1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.java @@ -1,9 +1,11 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import com.alibaba.fastjson.JSONArray; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; +import org.nl.wms.st.outbill.service.dto.GenOrUnDtlDto; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; @@ -22,4 +24,6 @@ public interface StIvtIostorinvdtlMapper extends BaseMapper { JSONArray selectIoDtl(@Param("billCode") String id, @Param("openFlag") String openFlag); List getOutBillDtl(@Param("param") OutBillDtlQueryParam param); + + List getGeneratedAndUnallocatedDtls(@Param("param") GenOrUnDtlDto dto); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.xml index d6dbb4a..73d8cb7 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/dao/mapper/StIvtIostorinvdtlMapper.xml @@ -101,4 +101,51 @@ order by iosdtl.box_no,iosdtl.pcsn + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java index f636176..6031093 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdisServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -26,6 +27,7 @@ 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.dto.OutTaskQueryDisDto; 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; @@ -346,4 +348,24 @@ public class StIvtIostorinvdisServiceImpl extends ServiceImpl getAllBoxWeightAndDtlId() { return stIvtIostorinvdisMapper.getAllBoxWeightAndDtlId(); } + + @Override + public List getBoxInfoByInvId(String iostorinvId) { + return stIvtIostorinvdisMapper.getBoxInfoByInvId(iostorinvId); + } + + @Override + public List getAllBoxInfoByInvId(String iostorinvId) { + return stIvtIostorinvdisMapper.getAllBoxInfoByInvId(iostorinvId); + } + + @Override + public JSONArray getBillInfosByConditions(OutTaskQueryDisDto disDto) { + return stIvtIostorinvdisMapper.getBillInfosByConditions(disDto); + } + + @Override + public List getTasking(String iostorinvId) { + return stIvtIostorinvdisMapper.getTasking(iostorinvId); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java index a08d884..370d2dd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvdtlServiceImpl.java @@ -20,6 +20,7 @@ import org.nl.b_lms.storage_manage.md.service.MdPbMeasureunitService; import org.nl.common.utils.IdUtil; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.st.outbill.service.dto.GenOrUnDtlDto; import org.nl.wms.st.outbill.service.dto.OutBillDtlQueryParam; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; import org.springframework.beans.factory.annotation.Autowired; @@ -330,6 +331,11 @@ public class StIvtIostorinvdtlServiceImpl extends ServiceImpl getGeneratedAndUnallocatedDtls(GenOrUnDtlDto dto) { + return stIvtIostorinvdtlMapper.getGeneratedAndUnallocatedDtls(dto); + } + /** * 组织分配明细所需数据 * @param dtlDao: 明细实体类 diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdCsCustomerBase.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdCsCustomerBase.java new file mode 100644 index 0000000..6ece4af --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/MdCsCustomerBase.java @@ -0,0 +1,215 @@ +package org.nl.b_lms.storage_manage.md.dao; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serializable; + +/** + * 运输公司基本信息表 + * @Author: lyd + * @Date: 2025/7/3 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("MD_CS_CustomerBase") +public class MdCsCustomerBase implements Serializable { + /** 客户标识 */ + /** + * 防止精度丢失 + */ + @TableId + private String cust_id; + + /** + * 客户编码 + */ + private String cust_code; + + /** + * 客户名称 + */ + private String cust_name; + + /** + * 业务员 + */ + private String sales_owner; + + /** + * 客户简称 + */ + private String cust_simple_name; + + /** + * 国家 + */ + private String country; + + /** + * 省份 + */ + private String state; + + /** + * 城市 + */ + private String city; + + /** + * 传真 + */ + private String faxnumber; + + /** + * 邮箱 + */ + private String webSite; + + /** + * 法人代表 + */ + private String jurid_name; + + /** + * 税务登记号 + */ + private String tax_no; + + /** + * 工商注册号 + */ + private String register_no; + + /** + * 经营许可证号 + */ + private String manage_lice_no; + + /** + * 营业执照 + */ + private String busi_char_name; + + /** + * 行政区划 + */ + private String area_id; + + /** + * 邮政编码 + */ + private String zip_code; + + /** + * 公司电话 + */ + private String corp_tele_no; + + /** + * 公司地址 + */ + private String corp_address; + + /** + * 创建人 + */ + private String create_id; + + /** + * 创建人姓名 + */ + private String create_name; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 修改人 + */ + private String update_optid; + + /** + * 修改人姓名 + */ + private String update_optname; + + /** + * 修改时间 + */ + private String update_time; + + /** + * 启用时间 + */ + private String is_used_time; + + /** + * 是否启用 + */ + private String is_used; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 外部标识 + */ + private String ext_id; + + /** + * 备注 + */ + private String remark; + + /** + * 分类标识 + */ + private String class_id; + + /** + * 分类编码 + */ + private String class_code; + + /** + * 分类名称 + */ + private String class_name; + + /** + * 子卷打印模板号 + */ + private String zj_print_no; + + /** + * 包装打印模板号 + */ + private String bz_print_no; + + /** + * 送货单打印模板号 + */ + private String shd_print_no; + + /** + * 送货单明细数 + */ + private Integer shd_dtl_num; + + /** + * 是否自动贴标 + */ + private String is_auto_table; + + /** + * 内标打印模版 + */ + private String bz_print_within; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.java new file mode 100644 index 0000000..a9d1d73 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.java @@ -0,0 +1,11 @@ +package org.nl.b_lms.storage_manage.md.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.nl.b_lms.storage_manage.md.dao.MdCsCustomerBase; + +/** + * @Author: lyd + * @Date: 2025/7/3 + */ +public interface MdCsCustomerBaseMapper extends BaseMapper { +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.xml new file mode 100644 index 0000000..5cc1f71 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/dao/mapper/MdCsCustomerBaseMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsCustomerBaseService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsCustomerBaseService.java new file mode 100644 index 0000000..88085a1 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsCustomerBaseService.java @@ -0,0 +1,17 @@ +package org.nl.b_lms.storage_manage.md.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.storage_manage.md.dao.MdCsCustomerBase; + +/** + * @Author: lyd + * @Date: 2025/7/3 + */ +public interface IMdCsCustomerBaseService extends IService { + /** + * 通过客户编码获取客户信息 + * @param custCode + * @return + */ + MdCsCustomerBase getByCode(String custCode); +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsTransportationBaseService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsTransportationBaseService.java index 6a8e19f..1fb2dfc 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsTransportationBaseService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/IMdCsTransportationBaseService.java @@ -8,4 +8,10 @@ import org.nl.b_lms.storage_manage.md.dao.MdCsTransportationBase; * @Date: 2025/7/3 */ public interface IMdCsTransportationBaseService extends IService { + /** + * 根据code获取物流公司 + * @param transCode + * @return + */ + MdCsTransportationBase getByCode(String transCode); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsCustomerBaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsCustomerBaseServiceImpl.java new file mode 100644 index 0000000..db59cfe --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsCustomerBaseServiceImpl.java @@ -0,0 +1,25 @@ +package org.nl.b_lms.storage_manage.md.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.md.dao.MdCsCustomerBase; +import org.nl.b_lms.storage_manage.md.dao.mapper.MdCsCustomerBaseMapper; +import org.nl.b_lms.storage_manage.md.service.IMdCsCustomerBaseService; +import org.springframework.stereotype.Service; + +/** + * @Author: lyd + * @Date: 2025/7/3 + */ +@Slf4j +@Service +public class MdCsCustomerBaseServiceImpl extends ServiceImpl implements IMdCsCustomerBaseService { + @Override + public MdCsCustomerBase getByCode(String custCode) { + LambdaQueryWrapper lam = new QueryWrapper().lambda(); + lam.eq(MdCsCustomerBase::getCust_code, custCode); + return getOne(lam); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsTransportationBaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsTransportationBaseServiceImpl.java index c21bcb3..892f8a1 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsTransportationBaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/md/service/impl/MdCsTransportationBaseServiceImpl.java @@ -1,5 +1,6 @@ package org.nl.b_lms.storage_manage.md.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.storage_manage.md.dao.MdCsTransportationBase; @@ -14,4 +15,10 @@ import org.springframework.stereotype.Service; @Slf4j @Service public class MdCsTransportationBaseServiceImpl extends ServiceImpl implements IMdCsTransportationBaseService { + @Override + public MdCsTransportationBase getByCode(String transCode) { + LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); + lam.eq(MdCsTransportationBase::getCust_code, transCode); + return getOne(lam); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java index f5aacec..ae2aa70 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.java @@ -12,6 +12,7 @@ import org.nl.wms.basedata.st.service.dto.ProductStoreDownDto; import org.nl.wms.basedata.st.service.dto.ProductStoreParam; import org.nl.wms.basedata.st.service.vo.ProductStoreVo; import org.nl.wms.st.outbill.service.dto.StockMaterialQueryParam; +import org.nl.wms.st.outbill.service.vo.OutBillTaskVo; import org.nl.wms.st.outbill.service.vo.StockMaterialVo; import org.nl.wms.stat.service.dto.PastStructPageParam; import org.nl.wms.stat.service.vo.PastStructPageVo; @@ -46,5 +47,5 @@ public interface StIvtStructivtMapper extends BaseMapper { JSONArray getOutBillDis2(Map param); - JSONArray getOutBillTask(Map param); + List getOutBillTask(Map param); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml index fbfdc91..2be2907 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/dao/mapper/StIvtStructivtMapper.xml @@ -880,7 +880,7 @@ order by dis.box_no,dis.pcsn - SELECT dis.*, mater.material_code, diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtSectattrService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtSectattrService.java index 20bbf02..1cfd996 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtSectattrService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/StIvtSectattrService.java @@ -23,4 +23,6 @@ public interface StIvtSectattrService extends IService { * @return */ List getByIdsObject(List ids); + + StIvtSectattr getByCode(String sectCode); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtSectattrServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtSectattrServiceImpl.java index 98df889..bd30e49 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtSectattrServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/st/service/impl/StIvtSectattrServiceImpl.java @@ -34,4 +34,9 @@ public class StIvtSectattrServiceImpl extends ServiceImpl (JSONObject) JSON.toJSON(sect)); } + + @Override + public StIvtSectattr getByCode(String sectCode) { + return getOne(new LambdaQueryWrapper().eq(StIvtSectattr::getSect_code, sectCode)); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java index fae75fe..d801952 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/rest/CheckOutBillController.java @@ -11,6 +11,8 @@ 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.*; +import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; +import org.nl.wms.st.outbill.service.vo.OutBillTaskVo; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -139,4 +141,35 @@ public class CheckOutBillController { checkOutBillService.importExcel(file, request); return new ResponseEntity<>(HttpStatus.OK); } + + @PostMapping("/moneySubmit") + @Log("发货信息保存") + public ResponseEntity moneySubmit(@RequestBody JSONObject whereJson) { + checkOutBillService.moneySubmit(whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/getDisNum") + @Log("获取分配明细条数") + public ResponseEntity getDisNum(@RequestBody Map whereJson) { + return new ResponseEntity<>(checkOutBillService.getDisNum(whereJson), HttpStatus.OK); + } + @Log("下载发货单Excel") + @GetMapping(value = "/downloadExcel") + public ResponseEntity downloadExcel(HttpServletResponse response, @RequestParam Map whereJson) throws IOException { + checkOutBillService.downloadExcel(response, whereJson); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/finishTask") + @Log("出库任务手动完成") + public ResponseEntity finishTask(@RequestBody OutBillTaskVo whereJson) { + checkOutBillService.finishTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + @PostMapping("/issueTask") + @Log("出库任务下发") + public ResponseEntity issueTask(@RequestBody JSONObject whereJson) { + checkOutBillService.issueTask(whereJson); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java index 1d53bff..3c85b7b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/CheckOutBillService.java @@ -61,7 +61,7 @@ public interface CheckOutBillService { * @param whereJson / * @return */ - JSONArray getOutBillTask(Map whereJson); + List getOutBillTask(Map whereJson); /** * 更新是否超期 @@ -89,4 +89,43 @@ public interface CheckOutBillService { * @param request 请求头 */ void importExcel(MultipartFile file, HttpServletRequest request); + + /** + * 保存发货信息 + * @param whereJson + */ + void moneySubmit(JSONObject whereJson); + + /** + * 获取分配明细条数 + * @param whereJson + * @return + */ + JSONObject getDisNum(Map whereJson); + + /** + * 打印 -> 下载发货单excel + * @param response + * @param whereJson + */ + void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException; + + /** + * 出库任务手动完成 + * @param whereJson + */ + void finishTask(OutBillTaskVo whereJson); + /** + * 出库单强制确认(只确认单据用-虚拟区的更新库存) + * + * @param whereJson / + */ + void confirmOrder(JSONObject whereJson); + + /** + * 出库任务下发 + * + * @param whereJson / + */ + void issueTask(JSONObject whereJson); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java index cdb1caa..fbaf0ad 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/AllBoxInfoDto.java @@ -6,6 +6,7 @@ import java.io.Serializable; /** * 木箱信息VO + * @see org.nl.wms.st.outbill.service.impl.CheckOutBillServiceImpl#exportExcel(org.nl.wms.st.outbill.service.dto.OutManageParam, javax.servlet.http.HttpServletResponse) * @Author: lyd * @Date: 2025/7/3 */ @@ -13,4 +14,8 @@ import java.io.Serializable; public class AllBoxInfoDto implements Serializable { private Double box_weight; private String iostorinvdtl_id; + private String qty; + private String box_no; + private String num; + private String material_name; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/GenOrUnDtlDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/GenOrUnDtlDto.java new file mode 100644 index 0000000..69abd4f --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/GenOrUnDtlDto.java @@ -0,0 +1,26 @@ +package org.nl.wms.st.outbill.service.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 获取生成和未分配的明细的请求参数 + * QST_IVT_CHECKOUTBILL -> flag:2 + * + * @Author: lyd + * @Date: 2025/7/4 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class GenOrUnDtlDto implements Serializable { + private String iostorinv_id; + private String iostorinvdtl_id; + private String bill_status; + private String unassign_flag; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskDisDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskDisDto.java new file mode 100644 index 0000000..3094d8b --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskDisDto.java @@ -0,0 +1,155 @@ +package org.nl.wms.st.outbill.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 出库任务分配明细 + * + * @Author: lyd + * @Date: 2025/7/4 + */ +@Data +public class OutTaskDisDto implements Serializable { + private String iostorinvdis_id; + + /** + * 出入单标识 + */ + private String iostorinv_id; + + /** + * 出入单明细标识 + */ + private String iostorinvdtl_id; + + /** + * 明细序号 + */ + private BigDecimal seq_no; + + /** + * 库区标识 + */ + private String sect_id; + + /** + * 库区编码 + */ + private String sect_code; + + /** + * 库区名称 + */ + private String sect_name; + + /** + * 仓位标识 + */ + private String struct_id; + + /** + * 仓位编码 + */ + private String struct_code; + + /** + * 仓位名称 + */ + private String struct_name; + + /** + * 物料标识 + */ + private String material_id; + + /** + * 批次 + */ + private String pcsn; + + /** + * 品质类型 + */ + private String quality_scode; + + /** + * 执行状态 + */ + private String work_status; + + /** + * 任务标识 + */ + private String task_id; + + /** + * 存储载具标识 + */ + private String storagevehicle_id; + + /** + * 存储载具编码 + */ + private String storagevehicle_code; + + /** + * 是否已下发 + */ + private String is_issued; + + /** + * 数量计量单位标识 + */ + private String qty_unit_id; + + /** + * 数量计量单位名称 + */ + private String qty_unit_name; + + /** + * 计划数量 + */ + private BigDecimal plan_qty; + + /** + * 实际数量 + */ + private BigDecimal real_qty; + + /** + * 出入点位标识 + */ + private String point_id; + + /** + * 箱号 + */ + private String box_no; + + /** + * 是否超期 + */ + private String is_overdue; + + /** + * 入库时间 + */ + private String instorage_time; + + /** + * 是否回传 + */ + private String is_upload; + private String material_code; + private String material_name; + private String task_code; + private String task_status; + private String task_type; + private String start_point_code; + private String source_id; + private String point_code; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskQueryDisDto.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskQueryDisDto.java new file mode 100644 index 0000000..63f9a4d --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/dto/OutTaskQueryDisDto.java @@ -0,0 +1,29 @@ +package org.nl.wms.st.outbill.service.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 查询出库任务的dto(参数) + *

QST_IVT_CHECKOUTBILL 》》 flag:55

+ * + * @Author: lyd + * @Date: 2025/7/4 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class OutTaskQueryDisDto implements Serializable { + private String iostorinvdtl_id; + private String task_id; + private String iostorinv_id; + private String iostorinvdis_id; + private String is_issued; + private String struct_id; + private String bill_status; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java index 32753f7..c6e6eac 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/outbill/service/impl/CheckOutBillServiceImpl.java @@ -1,32 +1,59 @@ package org.nl.wms.st.outbill.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelationrecord; +import org.nl.b_lms.pdm.subpackagerelation.service.IPdmBiSubpackagerelationrecordService; +import org.nl.b_lms.pdm.subpackagerelation.service.IpdmBiSubpackagerelationService; +import org.nl.b_lms.sch.task.dao.SchBaseTask; +import org.nl.b_lms.sch.task.service.IschBaseTaskService; +import org.nl.b_lms.sch.tasks.TwoOutTask; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; +import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvMapper; +import org.nl.b_lms.storage_manage.md.dao.MdCsCustomerBase; import org.nl.b_lms.storage_manage.md.dao.MdCsTransportationBase; +import org.nl.b_lms.storage_manage.md.service.IMdCsCustomerBaseService; import org.nl.b_lms.storage_manage.md.service.IMdCsTransportationBaseService; +import org.nl.b_lms.storage_manage.st.dao.StIvtBsrealstorattr; +import org.nl.b_lms.storage_manage.st.dao.StIvtSectattr; import org.nl.b_lms.storage_manage.st.dao.mapper.StIvtStructivtMapper; import org.nl.b_lms.storage_manage.st.service.StIvtBsrealstorattrService; +import org.nl.b_lms.storage_manage.st.service.StIvtSectattrService; import org.nl.common.domain.query.PageQuery; +import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.StringDealUtils; import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.utils.FileUtil; +import org.nl.system.service.param.ISysParamService; +import org.nl.wms.sch.manage.TaskStatusEnum; +import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.outbill.service.CheckOutBillService; import org.nl.wms.st.outbill.service.dto.*; import org.nl.wms.st.outbill.service.vo.OutBillDtlVo; @@ -39,12 +66,15 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Author: lyd @@ -67,6 +97,20 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { private StIvtStructivtMapper stIvtStructivtMapper; @Autowired private IMdCsTransportationBaseService mdCsTransportationBaseService; + @Autowired + private IMdCsCustomerBaseService csCustomerBaseService; + @Autowired + private ISysParamService sysParamService; + @Autowired + private IpdmBiSubpackagerelationService subpackagerelationService; + @Autowired + private IPdmBiSubpackagerelationrecordService subpackagerelationrecordService; + @Autowired + private StorPublicService storPublicService; + @Autowired + private StIvtSectattrService stIvtSectattrService; + @Autowired + private IschBaseTaskService ischBaseTaskService; @Override public List getOutBillDtl(OutBillDtlQueryParam param) { @@ -151,12 +195,12 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } @Override - public JSONArray getOutBillTask(Map whereJson) { + public List getOutBillTask(Map whereJson) { HashMap map = new HashMap<>(whereJson); if ("true".equals(map.get("checked"))) { map.put("task_status", "99"); } - JSONArray jo = new JSONArray(); + List jo = new ArrayList<>(); if (map.containsKey("iostorinvdtl_id")) { jo = stIvtStructivtMapper.getOutBillTask(map); } @@ -302,7 +346,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { String estimated_freight = list.get(5).toString(); // 更新主表 - jsonMst.setTrans_code( ObjectUtil.isNotEmpty(trans) ? trans.getCust_code() : "" ); + jsonMst.setTrans_code(ObjectUtil.isNotEmpty(trans) ? trans.getCust_code() : ""); jsonMst.setOrder_number(order_number); jsonMst.setCar_type(car_type); jsonMst.setOther_freight(new BigDecimal(other_freight)); @@ -311,8 +355,848 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { } } + @Override + public void moneySubmit(JSONObject whereJson) { + stIvtIostorinvService.updateById(whereJson.toJavaObject(StIvtIostorinv.class)); + // todo: 回传SAP + } + + @Override + public JSONObject getDisNum(Map whereJson) { + List dtlArr = iostorinvdisService.getBoxInfoByInvId(MapUtil.getStr(whereJson, "iostorinv_id")); + JSONObject json = new JSONObject(); + json.put("num", dtlArr.size()); + return json; + } + + @Override + public void downloadExcel(HttpServletResponse response, Map whereJson) throws IOException { + StIvtIostorinv jsonMst = stIvtIostorinvService.getById(MapUtil.getStr(whereJson, "iostorinv_id")); + String cust_code = jsonMst.getCust_code(); + MdCsCustomerBase jsonCust = csCustomerBaseService.getByCode(cust_code); + String bill_type = jsonMst.getBill_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, OutBillTypeEnum.TRANSFER_OUT.getCode()) || StrUtil.equals(bill_type, OutBillTypeEnum.MANUAL_OUT.getCode())) { + shd_dtl_num = 44; + //1.获取系统参数模板地址 + code_template = sysParamService.findByCode("allot_order").getValue(); + + // 5.单组填充 + StIvtIostorinvdtl jsonDtl = iostorinvdtlService.getOne(new LambdaQueryWrapper() + .eq(StIvtIostorinvdtl::getIostorinv_id, jsonMst.getIostorinv_id()), false); + if (ObjectUtil.isNotEmpty(jsonDtl) && StrUtil.equals(bill_type, OutBillTypeEnum.TRANSFER_OUT.getCode())) { + // 调拨单号 + oneMap.put("vbeln", jsonMst.getBill_code()); + // 调出仓库 + oneMap.put("out_stor", jsonMst.getStor_code()); + // 调入仓库 + StIvtBsrealstorattr jsonStor = bsrealstorattrService.getById(jsonMst.getOut_stor_id()); + oneMap.put("in_stor", jsonStor.getStor_code()); + + } + String pageNow = String.valueOf(j + 1); // 页码 + oneMap.put("page", pageNow + "/" + MapUtil.getStr(whereJson, "pageNum")); + oneMap.put("consignee", jsonMst.getConsignee()); // 收货单位 + oneMap.put("receiver", jsonMst.getReceiver()); // 收货人 + String receiptaddress = jsonMst.getReceiptaddress(); + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getReceiptphone()); // 收货人联系电话 + // 物流公司 + MdCsTransportationBase jsonTran = mdCsTransportationBaseService.getByCode(jsonMst.getTrans_code()); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getCust_name()); + } + oneMap.put("drivername", jsonMst.getDrivername()); // 司机 + oneMap.put("carno", jsonMst.getCarno()); // 车牌号 + oneMap.put("driverphone", jsonMst.getDriverphone()); // 司机联系电话 + // 总箱数 + List jsonAllBox = iostorinvdisService.getAllBoxInfoByInvId(MapUtil.getStr(whereJson, "iostorinv_id")); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (AllBoxInfoDto allBox : jsonAllBox) { + all_box_qty = NumberUtil.add(all_box_qty, Double.parseDouble(allBox.getQty())); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getDeliveryaddress()); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getDeliveryname()); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getDeliveryphone()); // 送货方联系电话 + oneMap.put("contractno", jsonMst.getContractno()); // 合同号 + } else { + + if (ObjectUtil.isEmpty(jsonCust)) { + shd_dtl_num = 44; + //1.根据出入库主表中 收货单位 查询客户表中的模板路径 + code_template = sysParamService.findByCode("PRINT_TEMPLE").getValue(); + } else { + shd_dtl_num = jsonCust.getShd_dtl_num(); + + if (ObjectUtil.isEmpty(shd_dtl_num)) { + throw new BadRequestException("客户编码:" + cust_code + ",送货单明细数未配置,请先去配置!"); + } + //1.根据出入库主表中 收货单位 查询客户表中的模板路径 + code_template = jsonCust.getShd_print_no(); + + if (StrUtil.isEmpty(code_template)) { + throw new BadRequestException("客户编码:" + cust_code + ",送货单打印模板号未配置,请先去配置!"); + } + } + StIvtIostorinvdtl jsonDtl = iostorinvdtlService.getOne(new LambdaQueryWrapper() + .eq(StIvtIostorinvdtl::getIostorinv_id, jsonMst.getIostorinv_id()), false); + if (ObjectUtil.isNotEmpty(jsonDtl)) { + // 送货单号 + oneMap.put("vbeln", jsonDtl.getVbeln()); + // 订单号 + String source_bill_code = jsonDtl.getSource_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.getConsignee()); // 收货单位 + oneMap.put("receiver", jsonMst.getReceiver()); // 收货人 + String receiptaddress = jsonMst.getReceiptaddress(); + /* StrBuilder strBuilder = new StrBuilder(receiptaddress); + + if (receiptaddress.length() > 10) { + strBuilder.insert(11,"\n"); + }*/ + oneMap.put("receiptaddress", receiptaddress); // 收货地址 + oneMap.put("receiptphone", jsonMst.getReceiptphone()); // 收货人联系电话 + // 物流公司 + MdCsTransportationBase jsonTran = mdCsTransportationBaseService.getByCode(jsonMst.getTrans_code()); + if (ObjectUtil.isNotEmpty(jsonTran)) { + oneMap.put("logisticscompany", jsonTran.getCust_name()); + } + oneMap.put("drivername", jsonMst.getDrivername()); // 司机 + oneMap.put("carno", jsonMst.getCarno()); // 车牌号 + oneMap.put("driverphone", jsonMst.getDriverphone()); // 司机联系电话 + // 总箱数 + List jsonAllBox = iostorinvdisService.getAllBoxInfoByInvId(MapUtil.getStr(whereJson, "iostorinv_id")); + oneMap.put("all_box", jsonAllBox.size()); + // 总毛重 + double all_box_qty = 0; + for (AllBoxInfoDto allBox : jsonAllBox) { + all_box_qty = NumberUtil.add(all_box_qty, Double.parseDouble(allBox.getQty())); + } + oneMap.put("all_box_qty", NumberUtil.round(all_box_qty, 2).toString()); + oneMap.put("deliveryaddress", jsonMst.getDeliveryaddress()); // 送货方地址 + oneMap.put("deliveryname", jsonMst.getDeliveryname()); // 送货方联系人 + oneMap.put("deliveryphone", jsonMst.getDeliveryphone()); // 送货方联系电话 + oneMap.put("contractno", jsonMst.getContractno()); // 合同号 + } + + // 6.多组填充 + List dtlArr = iostorinvdisService.getBoxInfoByInvId(MapUtil.getStr(whereJson, "iostorinv_id")); + + if (shd_dtl_num > dtlArr.size()) { + double all_qty = 0; + String order_no = ""; + ArrayList> flData = new ArrayList<>(); + WriteSheet sheet = EasyExcel.writerSheet().build(); + double all_real = 0; // 总毛总 + for (int i = 0; i < dtlArr.size(); i++) { + AllBoxInfoDto json = dtlArr.get(i); + PdmBiSubpackagerelation jsonSub = subpackagerelationService.getOne(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getPackage_box_sn, json.getBox_no()), false); + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("没有查询到子卷包装"); + } + order_no = jsonSub.getSale_order_name(); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getThickness_request() + "*" + jsonSub.getWidth_standard(); + // 箱号 + String box_no = json.getBox_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.getMaterial_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.getQty(), 1).doubleValue()); // 净重 + if (ObjectUtil.isNotEmpty(jsonSub.getReal_weight())) { + mapFL.put("real_weight", NumberUtil.round(jsonSub.getBox_weight(), 1).doubleValue()); // 毛重 + all_real = NumberUtil.add(String.valueOf(all_real), jsonSub.getBox_weight().toString()).doubleValue(); + } else { + mapFL.put("real_weight", NumberUtil.round(jsonSub.getBox_weight(), 1).doubleValue()); // 毛重 + all_real = NumberUtil.add(String.valueOf(all_real), jsonSub.getBox_weight().toString()).doubleValue(); + } + + flData.add(mapFL); + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getQty()).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", NumberUtil.round(all_qty, 1)); // 合计 + oneMap.put("all_real", NumberUtil.round(all_real, 1)); // 总毛重 + 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; + double all_real = 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; + } + + AllBoxInfoDto json = dtlArr.get(i); + PdmBiSubpackagerelation jsonSub = subpackagerelationService.getOne(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getPackage_box_sn, json.getBox_no()), false); + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("没有查询到子卷包装"); + } + order_no = jsonSub.getSale_order_name(); + + // 规格: 厚度*幅宽 + String material_spec = jsonSub.getThickness_request() + "*" + jsonSub.getWidth_standard(); + // 箱号 + String box_no = json.getBox_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.getMaterial_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.getQty(), 1).doubleValue()); + if (ObjectUtil.isNotEmpty(jsonSub.getReal_weight())) { + mapFL.put("real_weight", NumberUtil.round(jsonSub.getBox_weight(), 1).doubleValue()); // 毛重 + all_real = NumberUtil.add(String.valueOf(all_real), jsonSub.getBox_weight().toString()).doubleValue(); + } else { + mapFL.put("real_weight", NumberUtil.round(jsonSub.getBox_weight(), 1).doubleValue()); // 毛重 + all_real = NumberUtil.add(String.valueOf(all_real), jsonSub.getBox_weight().toString()).doubleValue(); + } + flData.add(mapFL); + + // 计算合计重量 + all_qty = NumberUtil.add(String.valueOf(all_qty), json.getQty()).doubleValue(); + + } + // 订单号 + ExcelWriter workBook = EasyExcel.write(outputStream, null).withTemplate(code_template).build(); + oneMap.put("all_qty", NumberUtil.round(all_qty, 1)); // 合计 + oneMap.put("all_real", NumberUtil.round(all_real, 1)); // 总毛重 + WriteSheet sheet = EasyExcel.writerSheet(0).build(); + workBook.fill(oneMap, sheet); + workBook.fill(new FillWrapper("data", flData), sheet); + workBook.finish(); + } + } + + @Override + public void finishTask(OutBillTaskVo whereJson) { + // hint: 根据明细去完成 + // 查询任务对应的分配明细 (任务可能为空) + JSONArray disJsonArr = iostorinvdisService.getBillInfosByConditions(OutTaskQueryDisDto.builder() + .task_id(whereJson.getTask_id()) + .build()); + // 获取一个数据 + JSONObject demoDis = disJsonArr.getJSONObject(0); + // 获取出库单据 + StIvtIostorinv jo_mst = stIvtIostorinvService.getById(demoDis.getString("iostorinv_id")); + String iostorinv_id = jo_mst.getIostorinv_id(); + for (int i = 0; i < disJsonArr.size(); i++) { + JSONObject dis = disJsonArr.getJSONObject(i); + + double plan_qty = dis.getDoubleValue("plan_qty"); + double real_qty = dis.getDoubleValue("real_qty"); + //未出部分,按取消分配处理 + if (Double.compare(real_qty, plan_qty) != 0) { + dis.put("change_qty", plan_qty - real_qty); + dis.put("bill_type_scode", jo_mst.getBill_type()); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getBill_code()); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + } + //更新已出库重量 + if (real_qty != 0) { + dis.put("change_qty", real_qty); + dis.put("bill_type_scode", jo_mst.getBill_type()); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getBill_code()); + dis.put("bill_table", "ST_IVT_IOStorInv"); + + if (jo_mst.getIs_overdue().equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + storPublicService.IOStor(dis, "12"); + } else { + storPublicService.IOStor(dis, "21"); + } + } else { + storPublicService.IOStor(dis, "21"); + } + } + // 更新分配明细执行状态为 - 99 + iostorinvdisService.update(new LambdaUpdateWrapper() + .set(StIvtIostorinvdis::getWork_status, "99") + .eq(StIvtIostorinvdis::getIostorinvdis_id, dis.getString("iostorinvdis_id"))); + if (jo_mst.getIs_overdue().equals("1") && dis.getString("is_overdue").equals("1")) { + continue; + } + // 更新子卷包装关系表 状态 - 3 + JSONObject jsonSub = subpackagerelationService.getObj(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getContainer_name, dis.getString("pcsn")) + .eq(PdmBiSubpackagerelation::getPackage_box_sn, dis.getString("box_no")) + .eq(PdmBiSubpackagerelation::getStatus, "2"), p -> (JSONObject) JSON.toJSON(p)); + //查询对应的包装关系出入库记录表 + if (ObjectUtil.isEmpty(jsonSub)) { + jsonSub = subpackagerelationrecordService.getObj(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelationrecord::getContainer_name, dis.getString("pcsn")) + .eq(PdmBiSubpackagerelationrecord::getPackage_box_sn, dis.getString("box_no")) + .eq(PdmBiSubpackagerelationrecord::getStatus, "2") + .eq(PdmBiSubpackagerelationrecord::getBill_code, jo_mst.getBill_code()), p -> (JSONObject) JSON.toJSON(p)); + } + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("此子卷不存在或不为入库状态:" + dis.getString("pcsn")); + + } + // 如果是拆分入库则将包装关系改为生成状态 + if (IOSEnum.OUT_TYPE.code("拆箱出库").equals(jo_mst.getBill_type()) || (IOSEnum.OUT_TYPE.code("手工出库").equals(jo_mst.getBill_type()))) { + jsonSub.put("status", "0"); + } else { + jsonSub.put("status", "3"); + } + // 分拣出库 + if (jo_mst.getBill_type().equals("1011")) { + // 更新子卷包装净重 + double net_weight = NumberUtil.sub(jsonSub.getDoubleValue("net_weight"), plan_qty); + jsonSub.put("net_weight", net_weight); + + if (net_weight <= 0) { + jsonSub.put("status", "3"); + } else { + jsonSub.put("status", "2"); + } + } + subpackagerelationService.updateById(jsonSub.toJavaObject(PdmBiSubpackagerelation.class)); + + // 改切出库、返检出库 + // 如果为返检出库或者改切出库删除对应的包装关系 + if ("1003".equals(jo_mst.getBill_type()) || "1006".equals(jo_mst.getBill_type())) { + List disRows = iostorinvdisService.list(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + .eq(StIvtIostorinvdis::getBox_no, jsonSub.getString("package_box_sn")) + .eq(jo_mst.getIs_overdue().equals("1"), StIvtIostorinvdis::getIs_overdue, "0")); + + for (StIvtIostorinvdis disRow : disRows) { + StIvtSectattr sect_jo = stIvtSectattrService.getByCode(disRow.getSect_code()); + if (ObjectUtil.isEmpty(sect_jo)) { + throw new BadRequestException("未查询到对应的库区!"); + } + //如果是虚拟区的出库,直接把包装关系删除;如果为立库的包装关系,将解绑删除标识置为1。当发货区解绑时,删除包装关系 + String pcsn = disRow.getPcsn(); + if ("09".equals(sect_jo.getSect_type_attr())) { + subpackagerelationService.remove(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getContainer_name, pcsn)); + } else { + LambdaUpdateWrapper subUpLam = new LambdaUpdateWrapper<>(); + subUpLam.set(PdmBiSubpackagerelation::getNeed_delete, "1") + .eq(PdmBiSubpackagerelation::getContainer_name, pcsn); + subpackagerelationService.update(subUpLam); + } + } + + } + + // 解锁起点 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", dis.getString("struct_id")); + from_start.put("lock_type", "1"); + from_start.put("is_overdue", dis.getString("is_overdue")); + + if (jo_mst.getIs_overdue().equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + from_start.put("storagevehicle_code", dis.getString("box_no")); + } else { + from_start.put("storagevehicle_code", ""); + } + } else { + from_start.put("storagevehicle_code", ""); + } + if (jo_mst.getBill_type().equals("1011")) { + // 判断此木箱下的所有子卷净重是否为0,如果为0则清空载具 + List packageList = subpackagerelationService.getSubInfoByBoxNosToObject( + Stream.of(jsonSub.getString("package_box_sn")).collect(Collectors.toList()) + ); + + boolean is_zero = packageList.stream() + .allMatch(row -> row.getDoubleValue("net_weight") <= 0); + + if (is_zero) { + from_start.put("storagevehicle_code", ""); + } else { + from_start.put("bill_type", "1011"); + from_start.put("storagevehicle_code", jsonSub.getString("package_box_sn")); + } + } + + storPublicService.updateStructAndPoint(from_start); + //插入包装关系出入库记录表 + jsonSub.put("bill_code", jo_mst.getBill_code()); + jsonSub.put("bill_id", jo_mst.getIostorinv_id()); + jsonSub.put("bill_type", jo_mst.getBill_type()); + jsonSub.put("io_type", "1"); + jsonSub.put("insert_time", DateUtil.now()); + jsonSub.put("record_id", IdUtil.getSnowflake(1, 1).nextId()); + subpackagerelationrecordService.save(jsonSub.toJavaObject(PdmBiSubpackagerelationrecord.class)); + } + + LambdaUpdateWrapper taskLam = new LambdaUpdateWrapper<>(); + taskLam.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()) + .set(SchBaseTask::getFinished_type, "01") + .set(SchBaseTask::getUpdate_optid, SecurityUtils.getCurrentUserId() + "") + .set(SchBaseTask::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .set(SchBaseTask::getUpdate_time, DateUtil.now()) + .eq(SchBaseTask::getTask_id, whereJson.getTask_id()); + //更新任务为完成 + ischBaseTaskService.update(taskLam); + + // 查询此任务下所有的分配明细 + List disArr = iostorinvdisService.list(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getTask_id, whereJson.getTask_id())); + for (int i = 0; i < disArr.size(); i++) { + StIvtIostorinvdis json = disArr.get(i); + // 更新分配明细为完成 + json.setWork_status("99"); + iostorinvdisService.updateById(json); + + // 判断此明细下是否还有未完成的分配明细 + StIvtIostorinvdtl jsonDtl = iostorinvdtlService.getById(json.getIostorinvdtl_id()); + List disArr2 = iostorinvdisService.list(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinvdtl_id, jsonDtl.getIostorinvdtl_id()) + .ne(StIvtIostorinvdis::getWork_status, "99")); + if (ObjectUtil.isEmpty(disArr2)) { + // 更新明细为完成 + jsonDtl.setBill_status("99"); + iostorinvdtlService.updateById(jsonDtl); + } + } + + //判断是否还有未完成的明细 + List ja = iostorinvdtlService.list(new LambdaQueryWrapper() + .ne(StIvtIostorinvdtl::getBill_status, "99") + .eq(StIvtIostorinvdtl::getIostorinv_id, disArr.get(0).getIostorinv_id())); + if (ja.size() == 0) { + this.confirmOrder((JSONObject) JSONObject.toJSON(jo_mst)); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void confirmOrder(JSONObject form) { + String iostorinv_id = form.getString("iostorinv_id"); + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + //查询主表信息 + StIvtIostorinv jo_mst = stIvtIostorinvService.getById(iostorinv_id); + if (ObjectUtil.isEmpty(jo_mst)) { + throw new BadRequestException("未查到相关出库单"); + } + + //判断分配明细中是否有未生成状态的分配明细 + List disArr = iostorinvdisService.list(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + .eq(StIvtIostorinvdis::getWork_status, "00")); + if (ObjectUtil.isNotEmpty(disArr)) { + throw new BadRequestException("有未生成状态的分配明细,不允许强制确认"); + } + + // 查询是否有未完成的任务 + List isTaskEmp = iostorinvdisService.getTasking(iostorinv_id); + + if (ObjectUtil.isNotEmpty(isTaskEmp)) { + // 拼接字符串 + String box_no = isTaskEmp.stream() + .map(row -> row.getString("box_no")) + .distinct() + .collect(Collectors.joining(",")); + + throw new BadRequestException("请先完成载具对应的出库任务:" + box_no); + } + + //查询生成和未分配完的明细 + List dtls = iostorinvdtlService.getGeneratedAndUnallocatedDtls(GenOrUnDtlDto.builder() + .bill_status("50") + .iostorinv_id(iostorinv_id) + .build()); + + if (dtls.size() != 0) { + for (int i = 0; i < dtls.size(); i++) { + JSONObject dtl = dtls.get(i); + //更新明细状态 + LambdaUpdateWrapper dtlUpLam = new LambdaUpdateWrapper<>(); + dtlUpLam.set(StIvtIostorinvdtl::getBill_status, "99") + .eq(StIvtIostorinvdtl::getIostorinvdtl_id, dtl.getString("iostorinvdtl_id")); + iostorinvdtlService.update(dtlUpLam); + } + } + + LambdaUpdateWrapper invUpLam = new LambdaUpdateWrapper<>(); + invUpLam.set(StIvtIostorinv::getBill_code, "99") + .set(StIvtIostorinv::getConfirm_optid, currentUserId) + .set(StIvtIostorinv::getConfirm_optname, nickName) + .set(StIvtIostorinv::getConfirm_time, now) + .eq(StIvtIostorinv::getIostorinv_id, iostorinv_id); + stIvtIostorinvService.update(invUpLam); + + + //查询需要更新库存的分配记录 + JSONArray diss = iostorinvdisService.getBillInfosByConditions(OutTaskQueryDisDto.builder() + .iostorinv_id(iostorinv_id) + .build()); + for (int i = 0; i < diss.size(); i++) { + JSONObject dis = diss.getJSONObject(i); + // 判断是否是主存区的仓位, 是否发超期 todo: 编码固定 + if ("ZC01,ZZ01".contains(dis.getString("sect_code"))) { + + if (jo_mst.getIs_overdue().equals("1")) { + // 不发超期 + if (!dis.getString("is_overdue").equals("1")) { + continue; + } + } else { + continue; + } + } + + double plan_qty = dis.getDoubleValue("plan_qty"); + double real_qty = dis.getDoubleValue("real_qty"); + //未出部分,按取消分配处理 + if (Double.compare(real_qty, plan_qty) != 0) { + dis.put("change_qty", plan_qty - real_qty); + dis.put("bill_type_scode", jo_mst.getBill_type()); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getBill_code()); + dis.put("bill_table", "ST_IVT_IOStorInv"); + storPublicService.IOStor(dis, "12"); + } + //更新已出库重量 + if (real_qty != 0) { + dis.put("change_qty", real_qty); + dis.put("bill_type_scode", jo_mst.getBill_type()); + dis.put("inv_id", iostorinv_id); + dis.put("bill_code", jo_mst.getBill_code()); + dis.put("bill_table", "ST_IVT_IOStorInv"); + + if (jo_mst.getIs_overdue().equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + storPublicService.IOStor(dis, "12"); + } else { + storPublicService.IOStor(dis, "21"); + } + } else { + storPublicService.IOStor(dis, "21"); + } + } + + // 更新分配明细执行状态为 - 99 + StIvtIostorinvdis jsonDis = iostorinvdisService.getOne(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinvdis_id, dis.getString("iostorinvdis_id"))); + jsonDis.setWork_status("99"); + iostorinvdisService.updateById(jsonDis); + + if (jo_mst.getIs_overdue().equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + // 解锁起点 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", dis.getString("struct_id")); + from_start.put("lock_type", "1"); + from_start.put("is_overdue", dis.getString("is_overdue")); + from_start.put("storagevehicle_code", dis.getString("box_no")); + storPublicService.updateStructAndPoint(from_start); + + continue; + } + } + // 更新子卷包装关系表 状态 - 3 + JSONObject jsonSub = subpackagerelationService.getObj(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getContainer_name, dis.getString("pcsn")) + .eq(PdmBiSubpackagerelation::getPackage_box_sn, dis.getString("box_no")) + .eq(PdmBiSubpackagerelation::getStatus, "2"), p -> (JSONObject) JSON.toJSON(p)); + //查询对应的包装关系出入库记录表 + if (ObjectUtil.isEmpty(jsonSub)) { + jsonSub = subpackagerelationrecordService.getObj(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelationrecord::getContainer_name, dis.getString("pcsn")) + .eq(PdmBiSubpackagerelationrecord::getPackage_box_sn, dis.getString("box_no")) + .eq(PdmBiSubpackagerelationrecord::getStatus, "2") + .eq(PdmBiSubpackagerelationrecord::getBill_code, jo_mst.getBill_code()), p -> (JSONObject) JSON.toJSON(p)); + } + + if (ObjectUtil.isEmpty(jsonSub)) { + throw new BadRequestException("此子卷不存在或不为入库状态:" + dis.getString("pcsn")); + + } + // 如果是拆分入库则将包装关系改为生成状态 + if ("1005".equals(jo_mst.getBill_type()) || ("1009".equals(jo_mst.getBill_type()))) { + jsonSub.put("status", "0"); + } else { + jsonSub.put("status", "3"); + } + + if (jo_mst.getBill_type().equals("1011")) { + // 更新子卷包装净重 + double net_weight = NumberUtil.sub(jsonSub.getDoubleValue("net_weight"), plan_qty); + jsonSub.put("net_weight",net_weight); + + if (net_weight <= 0) { + jsonSub.put("status","3"); + } else { + jsonSub.put("status","2"); + } + } + subpackagerelationService.updateById(jsonSub.toJavaObject(PdmBiSubpackagerelation.class)); + + // 解锁起点 + JSONObject from_start = new JSONObject(); + from_start.put("struct_id", dis.getString("struct_id")); + from_start.put("lock_type", "1"); + from_start.put("is_overdue", dis.getString("is_overdue")); + + if (jo_mst.getIs_overdue().equals("1")) { + if (dis.getString("is_overdue").equals("1")) { + from_start.put("storagevehicle_code", dis.getString("box_no")); + } else { + from_start.put("storagevehicle_code", ""); + } + } else { + from_start.put("storagevehicle_code", ""); + } + + if (jo_mst.getBill_type().equals("1011")) { + // 判断此木箱下的所有子卷净重是否为0,如果为0则清空载具 + List packageList = subpackagerelationService.getSubInfoByBoxNosToObject( + Stream.of(jsonSub.getString("package_box_sn")).collect(Collectors.toList()) + ); + boolean is_zero = packageList.stream() + .allMatch(row -> row.getDoubleValue("net_weight") <= 0); + + if (is_zero) { + from_start.put("storagevehicle_code", ""); + } else { + from_start.put("bill_type","1011"); + from_start.put("storagevehicle_code", jsonSub.getString("package_box_sn")); + } + } + + storPublicService.updateStructAndPoint(from_start); + + //插入包装关系出入库记录表 + jsonSub.put("bill_code", jo_mst.getBill_code()); + jsonSub.put("bill_id", jo_mst.getIostorinv_id()); + jsonSub.put("bill_type", jo_mst.getBill_type()); + jsonSub.put("io_type", "1"); + jsonSub.put("insert_time", DateUtil.now()); + jsonSub.put("record_id", IdUtil.getSnowflake(1, 1).nextId()); + subpackagerelationrecordService.save(jsonSub.toJavaObject(PdmBiSubpackagerelationrecord.class)); + + // 更新对应任务为完成 + SchBaseTask jsonTask = ischBaseTaskService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTask::getTask_id, jsonDis.getTask_id()) + .lt(SchBaseTask::getTask_status, "07"), false); + if (ObjectUtil.isNotEmpty(jsonTask)) { + jsonTask.setTask_status(TaskStatusEnum.FINISHED.getCode()); + ischBaseTaskService.updateById(jsonTask); + } + + } + StIvtIostorinv out_jo = stIvtIostorinvService.getById(iostorinv_id); + if ("1004".equals(out_jo.getBill_type())) { + //调拨出库自动生成调拨入库单 + + //校验主表状态为生成 + if (!"99".equals(out_jo.getBill_status())) { + throw new BadRequestException("主表状态必须为完成!"); + } + + List dis_rows = iostorinvdisService.listObjs(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + .eq(jo_mst.getIs_overdue().equals("1"), StIvtIostorinvdis::getIs_overdue, "0"), p -> (JSONObject) JSON.toJSON(p)); + + //生成手工入库单 + String new_iostorinv_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + String bill_code = CodeUtil.getNewCode("IO_CODE"); + jo_mst.setIostorinv_id(new_iostorinv_id); + jo_mst.setBill_code(bill_code); + jo_mst.setIo_type("0"); + jo_mst.setBill_type("0004"); + jo_mst.setBuss_type(jo_mst.getBill_type().substring(0, 4)); + //查询移入仓库的信息 + StIvtBsrealstorattr in_stor = bsrealstorattrService.getById(out_jo.getOut_stor_id()); + if (ObjectUtil.isEmpty(in_stor)) { + throw new BadRequestException("未查询到对应的移入仓库信息!"); + } + jo_mst.setStor_id(in_stor.getStor_id()); + jo_mst.setStor_code(in_stor.getStor_code()); + jo_mst.setStor_name(in_stor.getStor_name()); + jo_mst.setBill_status("30"); + jo_mst.setInput_optid(currentUserId); + jo_mst.setInput_optname(nickName); + jo_mst.setInput_time(now); + jo_mst.setUpdate_optid(currentUserId); + jo_mst.setUpdate_optname(nickName); + jo_mst.setUpdate_time(now); + jo_mst.setOut_stor_id(in_stor.getStor_id()); + + double total_qty = 0.00; + for (int i = 0; i < dis_rows.size(); i++) { + //插入明细表 + String iostorinvdtl_id = IdUtil.getSnowflake(1, 1).nextId() + ""; + JSONObject dis_row = dis_rows.get(i); + //查询对应的出库单明细 + StIvtIostorinvdtl dtl_row = iostorinvdtlService.getById(dis_row.getString("iostorinvdtl_id")); + dis_row.put("iostorinvdtl_id", iostorinvdtl_id); + dis_row.put("iostorinv_id", new_iostorinv_id); + dis_row.put("seq_no", i + 1); + dis_row.put("bill_status", "30"); + dis_row.put("real_qty", "0"); + dis_row.put("vbeln", dtl_row.getVbeln()); + dis_row.put("source_billdtl_id", dtl_row.getIostorinvdtl_id()); +// dis_row.put("source_bill_type", mst_row.getString("bill_type")); + dis_row.put("source_bill_type", out_jo.getBill_type()); + dis_row.put("source_bill_code", dtl_row.getSource_bill_code()); + dis_row.put("source_bill_table", "ST_IVT_IOStorInvDtl"); + dis_row.put("assign_qty", dis_row.getString("plan_qty")); + dis_row.put("unassign_qty", "0"); + //插入调拨明细表 + iostorinvdisService.save(dis_row.toJavaObject(StIvtIostorinvdis.class)); + dis_row.put("iostorinvdis_id", IdUtil.getSnowflake(1, 1).nextId()); + dis_row.put("seq_no", 1); + dis_row.put("sect_id", ""); + dis_row.put("sect_code", ""); + dis_row.put("sect_name", ""); + dis_row.put("struct_id", ""); + dis_row.put("struct_code", ""); + dis_row.put("struct_name", ""); + dis_row.put("work_status", "00"); + dis_row.put("real_qty", "0"); + dis_row.put("point_id", ""); + dis_row.put("task_id", ""); + //插入分配表 + iostorinvdtlService.save(dis_row.toJavaObject(StIvtIostorinvdtl.class)); + total_qty = NumberUtil.add(total_qty,dis_row.getDoubleValue("plan_qty")); + + //将包装关系中对应的记录状态改为包装 + LambdaUpdateWrapper subUpLam = new LambdaUpdateWrapper<>(); + subUpLam.set(PdmBiSubpackagerelation::getStatus, "1") + .eq(PdmBiSubpackagerelation::getPackage_box_sn, dis_row.getString("box_no")) + .eq(PdmBiSubpackagerelation::getStatus, "3"); + subpackagerelationService.update(subUpLam); + } + + // 查询所有明细并计算实际重量 + List dtlList = iostorinvdtlService.getBillDtlByInvId(iostorinv_id); + + double assign_qty = dtlList.stream() + .map(row -> row.getAssign_qty().doubleValue()) + .reduce(Double::sum).orElse(0.00); + + jo_mst.setDetail_count(BigDecimal.valueOf(dis_rows.size())); + // jo_mst.put("total_qty", total_qty); + jo_mst.setTotal_qty(BigDecimal.valueOf(assign_qty)); + stIvtIostorinvService.save(jo_mst); + } + + if ("1003".equals(out_jo.getBill_type()) || "1006".equals(out_jo.getBill_type())) { + //如果为返检出库或者改切出库删除对应的包装关系 + List dis_rows = iostorinvdisService.listObjs(new LambdaQueryWrapper() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + .eq(jo_mst.getIs_overdue().equals("1"), StIvtIostorinvdis::getIs_overdue, "0"), p -> (JSONObject) JSON.toJSON(p)); + + for (int i = 0; i < dis_rows.size(); i++) { + JSONObject dis_row = dis_rows.get(i); + String sect_code = dis_row.getString("sect_code"); + StIvtSectattr sect_jo = stIvtSectattrService.getByCode(sect_code); + if (ObjectUtil.isEmpty(sect_jo)) { + throw new BadRequestException("未查询到对应的库区!"); + } + //如果是虚拟区的出库,直接把包装关系删除;如果为立库的包装关系,将解绑删除标识置为1。当发货区解绑时,删除包装关系 + String pcsn = dis_row.getString("pcsn"); + if ("09".equals(sect_jo.getSect_type_attr())) { + subpackagerelationService.remove(new LambdaQueryWrapper() + .eq(PdmBiSubpackagerelation::getContainer_name, pcsn)); + } else { + LambdaUpdateWrapper subUpLam = new LambdaUpdateWrapper<>(); + subUpLam.set(PdmBiSubpackagerelation::getNeed_delete, "1") + .eq(PdmBiSubpackagerelation::getContainer_name, pcsn); + subpackagerelationService.update(subUpLam); + } + + } + } + } + + @Override + public void issueTask(JSONObject whereJson) { + + String currentUserId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + SchBaseTask jsonTask = ischBaseTaskService.getById(whereJson.getString("task_id")); + + // 调用出库任务类下发任务 + new TwoOutTask().immediateNotifyAcs(jsonTask.getTask_id()); + + // 更新任务状态为下发 + jsonTask.setTask_status(TaskStatusEnum.ISSUE.getCode()); + jsonTask.setUpdate_optid(currentUserId); + jsonTask.setUpdate_optname(nickName); + jsonTask.setUpdate_time(now); + ischBaseTaskService.updateById(jsonTask); + } + private void doLikeOrInParam(OutManageParam paramMap) { - if (StrUtil.isNotEmpty(paramMap.getVbeln())){ + if (StrUtil.isNotEmpty(paramMap.getVbeln())) { // 判断是否有空格 boolean matches = paramMap.getVbeln().matches(".*\\s.*"); List vbelnList = new ArrayList<>(); @@ -323,7 +1207,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { paramMap.setVbeln(""); } } - if (StrUtil.isNotEmpty(paramMap.getBox_no())){ + if (StrUtil.isNotEmpty(paramMap.getBox_no())) { // 判断是否有空格 boolean matches = paramMap.getBox_no().matches(".*\\s.*"); List boxList = new ArrayList<>(); @@ -334,7 +1218,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { paramMap.setBox_no(""); } } - if (StrUtil.isNotEmpty(paramMap.getPcsn())){ + if (StrUtil.isNotEmpty(paramMap.getPcsn())) { // 判断是否有空格 boolean matches = paramMap.getPcsn().matches(".*\\s.*"); List pcsnList = new ArrayList<>(); @@ -345,7 +1229,7 @@ public class CheckOutBillServiceImpl implements CheckOutBillService { paramMap.setPcsn(""); } } - if (StrUtil.isNotEmpty(paramMap.getSap_pcsn())){ + if (StrUtil.isNotEmpty(paramMap.getSap_pcsn())) { // 判断是否有空格 boolean matches = paramMap.getSap_pcsn().matches(".*\\s.*"); List pcsnList = new ArrayList<>(); From 43c9feba34b73978e9f473d0db83b6a023e6b417 Mon Sep 17 00:00:00 2001 From: zds <2388969634@qq.com> Date: Tue, 8 Jul 2025 15:24:14 +0800 Subject: [PATCH 2/2] =?UTF-8?q?opt:=E6=8F=90=E4=BA=A4=E7=9B=98=E7=82=B9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../check/contronller/CheckController.java | 9 +- .../check/service/dao/StIvtCheckdtl.java | 10 + .../dao/mapper/StIvtCheckMstMapper.java | 16 + .../dao/mapper/StIvtCheckMstMapper.xml | 297 +++++++++++++++ .../check/service/dto/CheckStructIvt.java | 83 +++++ .../check/service/dto/QueryPageParam.java | 30 ++ .../wms/st/instor/service/CheckService.java | 15 +- .../instor/service/impl/CheckServiceImpl.java | 103 +++--- .../nl/wms/st/instor/wql/QST_IVT_CHECK.wql | 338 ------------------ 9 files changed, 500 insertions(+), 401 deletions(-) create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/CheckStructIvt.java create mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/QueryPageParam.java delete mode 100644 lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/contronller/CheckController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/contronller/CheckController.java index b004003..8b1b796 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/contronller/CheckController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/contronller/CheckController.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.nl.common.TableDataInfo; import org.nl.common.domain.query.PageQuery; import org.nl.modules.logging.annotation.Log; +import org.nl.wms.st.instor.check.service.dto.QueryPageParam; import org.nl.wms.st.instor.service.CheckService; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; @@ -33,8 +34,8 @@ public class CheckController { @GetMapping("/getDtlView") @Log("查询盘点单明细详情") - public ResponseEntity getDtlView(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(checkService.getDtlView(whereJson, page), HttpStatus.OK); + public ResponseEntity getDtlView(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(checkService.getDtlView(whereJson, page)), HttpStatus.OK); } @GetMapping("/getExceptionDispose") @@ -78,8 +79,8 @@ public class CheckController { @GetMapping("/getStructIvt") @Log("查询可盘点库存") - public ResponseEntity getStructIvt(@RequestParam Map whereJson, Pageable page) { - return new ResponseEntity<>(checkService.getStructIvt(whereJson, page), HttpStatus.OK); + public ResponseEntity getStructIvt(@RequestParam Map whereJson, PageQuery page) { + return new ResponseEntity<>(TableDataInfo.build(checkService.getStructIvt(whereJson, page)), HttpStatus.OK); } @PostMapping("/confirm") diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/StIvtCheckdtl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/StIvtCheckdtl.java index 267eb7f..8c96af9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/StIvtCheckdtl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/StIvtCheckdtl.java @@ -167,6 +167,16 @@ public class StIvtCheckdtl implements Serializable { @TableField(exist = false) private String material_name; + @TableField(exist = false) + private String struct_code; + + @TableField(exist = false) + private String sect_code; + @TableField(exist = false) + private String process_optname; + + @TableField(exist = false) + private String date_of_production; } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.java index 4f63519..fe964c5 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.java @@ -3,9 +3,13 @@ package org.nl.wms.st.instor.check.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.ibatis.annotations.Param; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; import org.nl.wms.st.instor.check.service.dao.StIvtCheckMst; import org.nl.wms.st.instor.check.service.dao.StIvtCheckdtl; +import org.nl.wms.st.instor.check.service.dto.CheckStructIvt; +import org.nl.wms.st.instor.check.service.dto.QueryPageParam; import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; import java.util.List; @@ -23,4 +27,16 @@ public interface StIvtCheckMstMapper extends BaseMapper { List recordQuery(List ids); IPage getExceptionDispose(IPage pages, OutBillQueryPageParam paramMap); + + List getOutBillDtl2(@Param("paramMap") QueryPageParam paramMap); + + IPage getDtlView(IPage pages, @Param("paramMap") QueryPageParam paramMap); + + IPage getStructIvt(IPage pages, @Param("paramMap") QueryPageParam paramMap); + + List getOutBillDtl22(@Param("paramMap") QueryPageParam paramMap); + + List getOutBillDtl222(@Param("paramMap") QueryPageParam paramMap); + + List getOutBillDtl(@Param("paramMap") QueryPageParam paramMap); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.xml b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.xml index f5c2ca7..a771d8b 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.xml +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dao/mapper/StIvtCheckMstMapper.xml @@ -36,4 +36,301 @@ + + + + + + + + + + + + + diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/CheckStructIvt.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/CheckStructIvt.java new file mode 100644 index 0000000..ddad3e3 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/CheckStructIvt.java @@ -0,0 +1,83 @@ +package org.nl.wms.st.instor.check.service.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 出库任务分配明细 + * + * @Author: lyd + * @Date: 2025/7/4 + */ +@Data +public class CheckStructIvt implements Serializable { + private String sect_id; + + /** + * 出入单标识 + */ + private String sect_code; + + /** + * 出入单明细标识 + */ + private String sect_name; + + /** + * 库区标识 + */ + private String struct_id; + + /** + * 库区编码 + */ + private String struct_code; + + /** + * 库区名称 + */ + private String struct_name; + + /** + * 仓位标识 + */ + private String storagevehicle_code; + + /** + * 仓位编码 + */ + private String material_id; + + /** + * 仓位名称 + */ + private String material_name; + + /** + * 物料标识 + */ + private String material_code; + + /** + * 批次 + */ + private String measure_unit_id; + + /** + * 品质类型 + */ + private String qty_unit_name; + + /** + * 计划数量 + */ + private BigDecimal base_qty; + + /** + * 实际数量 + */ + private BigDecimal fac_qty; + +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/QueryPageParam.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/QueryPageParam.java new file mode 100644 index 0000000..15baaaf --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/check/service/dto/QueryPageParam.java @@ -0,0 +1,30 @@ +package org.nl.wms.st.instor.check.service.dto; + +import lombok.Data; +import java.io.Serializable; + +/** + * @Author: lyd + * @Date: 2025/6/18 + */ +@Data +public class QueryPageParam implements Serializable { + private String check_id; + private String checkdtl_id; + private String status; + + private String box_no; + + + private String pcsn; + + private String sap_pcsn; + + private String struct_code; + + private String remark; + + private String stor_id; + + private String sect_id; +} diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/CheckService.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/CheckService.java index 123754e..59f40cd 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/CheckService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/CheckService.java @@ -4,13 +4,16 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; import org.nl.common.domain.query.PageQuery; import org.nl.wms.st.instor.check.service.dao.StIvtCheckMst; import org.nl.wms.st.instor.check.service.dao.StIvtCheckdtl; -import org.springframework.data.domain.Pageable; +import org.nl.wms.st.instor.check.service.dto.CheckStructIvt; +import org.nl.wms.st.instor.check.service.dto.QueryPageParam; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; import java.util.Map; public interface CheckService extends IService { @@ -30,7 +33,7 @@ public interface CheckService extends IService { * @param page 分页参数 * @return Map */ - Map getDtlView(Map whereJson, Pageable page); + IPage getDtlView(Map whereJson, PageQuery page); /** * 查询数据分页 @@ -61,9 +64,9 @@ public interface CheckService extends IService { * @param whereJson / * @return */ - JSONArray getOutBillDtl(Map whereJson); + List getOutBillDtl(Map whereJson); - JSONArray getOutBillDtl2(Map whereJson); + List getOutBillDtl2(Map whereJson); /** * 修改出库单 @@ -78,7 +81,7 @@ public interface CheckService extends IService { * @param whereJson / * @return */ - Map getStructIvt(Map whereJson, Pageable page); + IPage getStructIvt(Map whereJson, PageQuery page); /** * 出库单强制确认 @@ -102,7 +105,7 @@ public interface CheckService extends IService { * @param response * @throws IOException */ - void download(JSONArray rows, HttpServletResponse response) throws IOException; + void download( List rows, HttpServletResponse response) throws IOException; /** * 处理确认 diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java index d1c0303..653e4b4 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/service/impl/CheckServiceImpl.java @@ -3,6 +3,7 @@ package org.nl.wms.st.instor.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; + import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; @@ -12,10 +13,10 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.fasterxml.jackson.databind.ObjectMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.b_lms.pdm.subpackagerelation.dao.PdmBiSubpackagerelation; -import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinv; import org.nl.common.domain.query.PageQuery; import org.nl.common.utils.SecurityUtils; @@ -24,15 +25,15 @@ import org.nl.modules.common.utils.FileUtil; import org.nl.common.utils.CodeUtil; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; -import org.nl.modules.wql.util.WqlUtil; import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; import org.nl.wms.st.instor.check.service.dao.StIvtCheckMst; import org.nl.wms.st.instor.check.service.dao.StIvtCheckdtl; import org.nl.wms.st.instor.check.service.dao.mapper.StIvtCheckMstMapper; import org.nl.wms.st.instor.check.service.dao.mapper.StIvtCheckdtlMapper; +import org.nl.wms.st.instor.check.service.dto.CheckStructIvt; +import org.nl.wms.st.instor.check.service.dto.QueryPageParam; import org.nl.wms.st.instor.service.CheckService; import org.nl.wms.st.outbill.service.dto.OutBillQueryPageParam; -import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -95,25 +96,18 @@ public class CheckServiceImpl extends ServiceImpl getDtlView(Map whereJson, Pageable page) { + public IPage getDtlView(Map whereJson, PageQuery page) { String box_no = MapUtil.getStr(whereJson, "box_no"); String pcsn = MapUtil.getStr(whereJson, "pcsn"); String sap_pcsn = MapUtil.getStr(whereJson, "sap_pcsn"); - JSONObject map = new JSONObject(); - map.put("box_no", box_no); - map.put("flag", "9"); - - if (ObjectUtil.isNotEmpty(pcsn)) { - map.put("pcsn", "%" + pcsn + "%"); - } - if (ObjectUtil.isNotEmpty(sap_pcsn)) { - map.put("sap_pcsn", "%" + sap_pcsn + "%"); - } - - JSONObject json = WQL.getWO("QST_IVT_CHECK").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "sub.container_name ASC"); + QueryPageParam param = new QueryPageParam(); + param.setBox_no(box_no); + param.setPcsn(pcsn); + param.setSap_pcsn(sap_pcsn); + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + return stIvtCheckMstMapper.getDtlView(pages, param); - return json; } @Override @@ -204,38 +198,38 @@ public class CheckServiceImpl extends ServiceImpl getOutBillDtl(Map whereJson) { String type = MapUtil.getStr(whereJson, "type"); - JSONArray jo = new JSONArray(); + QueryPageParam param = new QueryPageParam(); if (ObjectUtil.isNotEmpty(type)) { if (StrUtil.equals(type, "1")) { // 1-已盘点 - whereJson.put("flag", "22"); - jo = WQL.getWO("QST_IVT_CHECK").addParamMap((HashMap) whereJson).process().getResultJSONArray(0); + String check_id = MapUtil.getStr(whereJson, "check_id"); + param.setCheck_id(check_id); + return stIvtCheckMstMapper.getOutBillDtl22(param); } else { // 1-未盘点 - whereJson.put("flag", "222"); - jo = WQL.getWO("QST_IVT_CHECK").addParamMap((HashMap) whereJson).process().getResultJSONArray(0); + String check_id = MapUtil.getStr(whereJson, "check_id"); + param.setCheck_id(check_id); + return stIvtCheckMstMapper.getOutBillDtl222(param); } } else { - whereJson.put("flag", "2"); - jo = WQL.getWO("QST_IVT_CHECK") - .addParamMap((HashMap) whereJson) - .process() - .getResultJSONArray(0); + String check_id = MapUtil.getStr(whereJson, "check_id"); + String checkdtl_id = MapUtil.getStr(whereJson, "checkdtl_id"); + String status = MapUtil.getStr(whereJson, "status"); + param.setCheck_id(check_id); + param.setStatus(status); + param.setCheckdtl_id(checkdtl_id); + return stIvtCheckMstMapper.getOutBillDtl(param); } - return jo; } @Override - public JSONArray getOutBillDtl2(Map whereJson) { - whereJson.put("flag", "8"); - JSONArray jo = WQL.getWO("QST_IVT_CHECK") - .addParamMap((HashMap) whereJson) - .process() - .getResultJSONArray(0); - return jo; + public List getOutBillDtl2(Map whereJson) { + ObjectMapper Om = new ObjectMapper(); + QueryPageParam param = Om.convertValue(whereJson,QueryPageParam.class); + return stIvtCheckMstMapper.getOutBillDtl2(param); } @Override @@ -286,21 +280,23 @@ public class CheckServiceImpl extends ServiceImpl getStructIvt(Map whereJson, Pageable page) { - HashMap map = new HashMap(whereJson); - if (StrUtil.isNotEmpty(map.get("remark"))) { - map.put("remark", "%" + map.get("remark") + "%"); - } - if (StrUtil.isNotEmpty(map.get("struct_code"))) { - map.put("struct_code", "%" + map.get("struct_code") + "%"); - } - if (StrUtil.isNotEmpty(map.get("box_no"))) { - map.put("box_no", "%" + map.get("box_no") + "%"); - } - JSONObject jo = WQL.getWO("QST_IVT_CHECK") - .addParam("flag", "3") - .addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "struct.struct_code"); - return jo; + public IPage getStructIvt(Map whereJson, PageQuery page) { + String box_no = MapUtil.getStr(whereJson, "box_no"); + String struct_code = MapUtil.getStr(whereJson, "struct_code"); + String remark = MapUtil.getStr(whereJson, "remark"); + String stor_id = MapUtil.getStr(whereJson, "stor_id"); + String sect_id = MapUtil.getStr(whereJson, "sect_id"); + + QueryPageParam param = new QueryPageParam(); + param.setBox_no(box_no); + param.setStruct_code(struct_code); + param.setRemark(remark); + param.setSect_id(sect_id); + param.setStor_id(stor_id); + + + IPage pages = new Page<>(page.getPage() + 1, page.getSize()); + return stIvtCheckMstMapper.getStructIvt(pages, param); } @Override @@ -430,12 +426,13 @@ public class CheckServiceImpl extends ServiceImpl rows, HttpServletResponse response) throws IOException { WQLObject subTab = WQLObject.getWQLObject("pdm_bi_subpackagerelation"); List> list = new ArrayList<>(); for (int i = 0; i < rows.size(); i++) { - JSONObject jo = rows.getJSONObject(i); + StIvtCheckdtl row = rows.get(i); + JSONObject jo = (JSONObject) JSONObject.toJSON(row); String storagevehicle_code = jo.getString("storagevehicle_code"); JSONObject jsonSub = subTab.query("package_box_sn = '" + storagevehicle_code + "'").uniqueResult(0); diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql b/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql deleted file mode 100644 index f653bff..0000000 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/instor/wql/QST_IVT_CHECK.wql +++ /dev/null @@ -1,338 +0,0 @@ -[交易说明] - 交易名: 基础点位分页查询 - 所属模块: - 功能简述: - 版权所有: - 表引用: - 版本经历: - -[数据库] - --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 - -[IO定义] - ################################################# - ## 表字段对应输入参数 - ################################################# - 输入.flag TYPEAS s_string - 输入.status TYPEAS s_string - 输入.check_code TYPEAS s_string - 输入.create_mode TYPEAS s_string - 输入.check_type TYPEAS s_string - 输入.stor_id TYPEAS s_string - 输入.check_id TYPEAS s_string - 输入.work_status TYPEAS s_string - 输入.end_time TYPEAS s_string - 输入.begin_time TYPEAS s_string - 输入.material_id TYPEAS s_string - 输入.quality_scode TYPEAS s_string - 输入.pcsn TYPEAS s_string - 输入.sap_pcsn TYPEAS s_string - 输入.ivt_level TYPEAS s_string - 输入.is_active TYPEAS s_string - 输入.sect_id TYPEAS s_string - 输入.moveinvdtl_id TYPEAS s_string - 输入.struct_id TYPEAS s_string - 输入.is_issued TYPEAS s_string - 输入.remark TYPEAS s_string - 输入.task_id TYPEAS s_string - 输入.struct_code TYPEAS s_string - 输入.ids TYPEAS f_string - 输入.storagevehicle_code TYPEAS s_string - 输入.box_no TYPEAS s_string - 输入.deptIds TYPEAS f_string - 输入.in_stor_id TYPEAS f_string - 输入.check_id_in TYPEAS f_string -[临时表] - --这边列出来的临时表就会在运行期动态创建 - -[临时变量] - --所有中间过程变量均可在此处定义 - -[业务过程] - - ########################################## - # 1、输入输出检查 # - ########################################## - - - ########################################## - # 2、主过程前处理 # - ########################################## - - - ########################################## - # 3、业务主过程 # - ########################################## - - IF 输入.flag = "2" - QUERY - SELECT - CheckDtl.*, - struct.struct_code, - struct.sect_code, - mb.material_code, - mb.material_name, - user1.person_name AS process_optname, - sub.date_of_production - FROM - ST_IVT_CheckDtl CheckDtl - LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id - LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id - LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid - LEFT JOIN ( - SELECT - MIN(date_of_production) AS date_of_production, - package_box_sn - FROM - pdm_bi_subpackagerelation - WHERE - 1=1 - group by package_box_sn - ) sub ON sub.package_box_sn = CheckDtl.storagevehicle_code - WHERE - 1 = 1 - OPTION 输入.check_id <> "" - CheckDtl.check_id = 输入.check_id - ENDOPTION - OPTION 输入.checkdtl_id <> "" - CheckDtl.checkdtl_id = 输入.checkdtl_id - ENDOPTION - OPTION 输入.status <> "" - CheckDtl.status <= 输入.status - ENDOPTION - order by CheckDtl.seq_no - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "22" - QUERY - SELECT - CheckDtl.*, - struct.struct_code, - struct.sect_code, - mb.material_code, - mb.material_name, - user1.person_name AS process_optname, - sub.date_of_production - FROM - ST_IVT_CheckDtl CheckDtl - LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id - LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id - LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid - LEFT JOIN ( - SELECT - MIN(date_of_production) AS date_of_production, - package_box_sn - FROM - pdm_bi_subpackagerelation - WHERE - 1=1 - group by package_box_sn - ) sub ON sub.package_box_sn = CheckDtl.storagevehicle_code - WHERE - CheckDtl.status <> '1' - OPTION 输入.check_id <> "" - CheckDtl.check_id = 输入.check_id - ENDOPTION - - order by CheckDtl.seq_no - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "222" - QUERY - SELECT - CheckDtl.*, - struct.struct_code, - struct.sect_code, - mb.material_code, - mb.material_name, - user1.person_name AS process_optname, - sub.date_of_production - FROM - ST_IVT_CheckDtl CheckDtl - LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id - LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id - LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid - LEFT JOIN ( - SELECT - MIN(date_of_production) AS date_of_production, - package_box_sn - FROM - pdm_bi_subpackagerelation - WHERE - 1=1 - group by package_box_sn - ) sub ON sub.package_box_sn = CheckDtl.storagevehicle_code - WHERE - CheckDtl.status = '1' - OPTION 输入.check_id <> "" - CheckDtl.check_id = 输入.check_id - ENDOPTION - - order by CheckDtl.seq_no - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "3" - PAGEQUERY - SELECT - struct.sect_id, - MAX(struct.sect_code) AS sect_code, - MAX(struct.sect_name) AS sect_name, - MAX(struct.struct_id) AS struct_id, - MAX(struct.struct_code) AS struct_code, - MAX(struct.struct_name) AS struct_name, - MAX(struct.storagevehicle_code) AS storagevehicle_code, - MAX(mb.material_id) AS material_id, - MAX(mb.material_name) AS material_name, - MAX(mb.material_code) AS material_code, - '1' AS base_qty, - '0' AS fac_qty, - '箱' AS qty_unit_name, - '1585604690706567168' AS measure_unit_id - FROM - st_ivt_structivt ivt - LEFT JOIN st_ivt_structattr struct ON ivt.struct_id = struct.struct_id - LEFT JOIN md_me_materialbase mb ON mb.material_id = ivt.material_id - WHERE - 1 = 1 - AND struct.lock_type = '1' - AND IFNULL(struct.storagevehicle_code,'') <> '' - - OPTION 输入.remark <> "" - (mb.material_code like 输入.remark or mb.material_name like 输入.remark) - ENDOPTION - - OPTION 输入.struct_code <> "" - struct.struct_code like 输入.struct_code - ENDOPTION - - OPTION 输入.box_no <> "" - struct.storagevehicle_code like 输入.box_no - ENDOPTION - - OPTION 输入.stor_id <> "" - struct.stor_id = 输入.stor_id - ENDOPTION - - OPTION 输入.sect_id <> "" - struct.sect_id = 输入.sect_id - ENDOPTION - - group by ivt.struct_id - - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "8" - QUERY - SELECT - CheckDtl.checkdtl_id, - CheckDtl.check_id, - CheckDtl.check_code, - CheckDtl.seq_no, - CheckDtl.sect_id, - CheckDtl.sect_name, - CheckDtl.struct_id, - CheckDtl.struct_name, - CheckDtl.checkpoint_id, - CheckDtl.storagevehicle_id, - CheckDtl.storagevehicle_code, - CheckDtl.material_id, - ROUND(CheckDtl.base_qty,3) AS base_qty, - CheckDtl.qty_unit_id, - CheckDtl.qty_unit_name, - CheckDtl.STATUS, - CheckDtl.is_down, - CheckDtl.fac_qty, - CheckDtl.check_result, - CheckDtl.check_optid, - CheckDtl.check_optname, - CheckDtl.check_time, - CheckDtl.is_process, - CheckDtl.process_type, - CheckDtl.process_optid, - CheckDtl.process_time, - CheckDtl.remark, - struct.struct_code, - struct.sect_code, - mb.material_code, - mb.material_name, - user1.person_name AS process_optname - FROM - ST_IVT_CheckDtl CheckDtl - LEFT JOIN md_me_materialbase mb ON mb.material_id = CheckDtl.material_id - LEFT JOIN st_ivt_structattr struct ON struct.struct_id = CheckDtl.struct_id - LEFT JOIN sys_user user1 ON user1.user_id = CheckDtl.process_optid - WHERE - 1 = 1 - OPTION 输入.check_id <> "" - CheckDtl.check_id = 输入.check_id - ENDOPTION - OPTION 输入.checkdtl_id <> "" - CheckDtl.checkdtl_id = 输入.checkdtl_id - ENDOPTION - OPTION 输入.status <> "" - CheckDtl.status <= 输入.status - ENDOPTION - order by CheckDtl.seq_no - ENDSELECT - ENDQUERY - ENDIF - - IF 输入.flag = "9" - PAGEQUERY - SELECT - sub.* - FROM - st_ivt_structivt ivt - LEFT JOIN st_ivt_structattr attr ON ivt.struct_id = attr.struct_id - LEFT JOIN pdm_bi_subpackagerelation sub ON ivt.pcsn = sub.container_name AND sub.package_box_sn = attr.storagevehicle_code - WHERE - 1=1 - - OPTION 输入.box_no <> "" - sub.package_box_sn = 输入.box_no - ENDOPTION - - OPTION 输入.pcsn <> "" - ivt.pcsn like 输入.pcsn - ENDOPTION - - OPTION 输入.sap_pcsn <> "" - sub.sap_pcsn like 输入.sap_pcsn - ENDOPTION - - ENDSELECT - ENDPAGEQUERY - ENDIF - - IF 输入.flag = "10" - PAGEQUERY - SELECT - dtl.*, - mater.material_code, - mater.material_name - FROM - ST_IVT_CheckDtl dtl - LEFT JOIN md_me_materialbase mater ON dtl.material_id = mater.material_id - WHERE - dtl.check_result = '2' - and dtl.status in ('4','5') - - OPTION 输入.box_no <> "" - dtl.storagevehicle_code like 输入.box_no - ENDOPTION - - OPTION 输入.check_code <> "" - dtl.check_code = 输入.check_code - ENDOPTION - - ENDSELECT - ENDPAGEQUERY - ENDIF