diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm_manage/enums/SUBEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm_manage/enums/SUBEnum.java new file mode 100644 index 000000000..2b652e4b0 --- /dev/null +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/pdm_manage/enums/SUBEnum.java @@ -0,0 +1,42 @@ +package org.nl.b_lms.pdm_manage.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.lang3.StringUtils; +import org.nl.common.utils.MapOf; +import org.nl.modules.common.exception.BadRequestException; + +import java.util.Map; + +/** + * 子卷包装枚举 + * + * @author lxy + * @Date 2023/11/14 20:11 + */ +@AllArgsConstructor +@Getter +public enum SUBEnum { + // 子卷包装状态 + STATUS(MapOf.of("生成", "0", "包装", "1", "入库", "2", "出库", "3")), + ; + + private Map code; + + public String code(String desc) { + String code = this.getCode().get(desc); + if (StringUtils.isNotEmpty(code)) { + return code; + } + throw new BadRequestException(this.name() + "对应类型" + desc + "未定义"); + } + + public String check(String code) { + for (Map.Entry entry : this.getCode().entrySet()) { + if (entry.getValue().equals("code")) { + return entry.getValue(); + } + } + throw new BadRequestException(this.name() + "对应类型" + code + "未定义"); + } +} diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java index b9bd7e6a1..fa0399858 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/enums/IOSEnum.java @@ -47,6 +47,9 @@ public enum IOSEnum { LOCK_TYPE(MapOf.of("未锁定", "1", "入库锁", "2", "出库锁", "3", "空托盘出库锁", "4", "空托盘入库锁", "5", "移出锁", "6", "移入锁", "7", "其它", "99" )), + + //仓位锁定类型 + STOR_ID(MapOf.of("二期", "1582991156504039455")), ; private Map code; diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java index ad41d1f41..55c35a1e9 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/IStIvtIostorinvService.java @@ -24,4 +24,50 @@ public interface IStIvtIostorinvService extends IService { */ Object pageQuery(Map query, Pageable page); + /** + * PC新增入库单据 + * @param whereJson { + * stor_id: 仓库标识 + * bill_status:单据状态 + * total_qty:总数量 + * detail_count:明细数 + * bill_type:单据类型 + * remark:备注 + * biz_date:业务日期 + * create_mode:创建方式(空) + * tableData[ + * package_box_sn:木箱号 + * thickness:产品厚度 + * plan_qty:计划数量 + * customer_description:客户名称 + * quanlity_in_box:子卷数量 + * product_name:物料编码 + * net_weight:净重 + * container_name:子卷号 + * width:宽 + * sap_pcsn:sap批次 + * customer_name:客户编码 + * sale_order_name:订单号 + * product_description:物料名称 + * quality_scode:品质类型 + * ivt_level:库存等级 + * is_active:是否可用 + * ] + * } + * @return iostorinv_id:主表标识 + */ + String insertMst(Map whereJson); + + /** + * 修改单据 + * @param whereJson :同新增参数 + */ + void update(Map whereJson); + + /** + * 删除出库单 + * @param ids:[主表标识] + */ + void deleteAll(Long[] ids); + } 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 cb5dca594..1ee5003b9 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,8 +1,12 @@ 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.StIvtIostorinvdis; +import java.util.ArrayList; +import java.util.HashMap; + /** *

* 出入库单分配表 服务类 @@ -13,5 +17,14 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdis; */ public interface IStIvtIostorinvdisService extends IService { + /** + * 新增分配明细 + * @param iostorinv_id : 主表标识 + * @param disDaoMap: + * { + * "明细标识":[{分配明细字段...}] + * } + */ + void insertDis(Long iostorinv_id, HashMap> disDaoMap); } 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 8b212a4b5..36f97f1b2 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 @@ -1,8 +1,13 @@ 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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + /** *

* 出入库单明细表 服务类 @@ -13,4 +18,29 @@ import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; */ public interface IStIvtIostorinvdtlService extends IService { + /** + * 新增出入库明细 + * @param rows: { + * package_box_sn:木箱号 + * thickness:产品厚度 + * plan_qty:计划数量 + * customer_description:客户名称 + * quanlity_in_box:子卷数量 + * product_name:物料编码 + * net_weight:净重 + * container_name:子卷号 + * width:宽 + * sap_pcsn:sap批次 + * customer_name:客户编码 + * sale_order_name:订单号 + * product_description:物料名称 + * quality_scode:品质类型 + * ivt_level:库存等级 + * is_active:是否可用 + * } + * @param iostorinv_id: 主表标识 + * @return {"明细标识":分配明细:[]} + * + */ + HashMap> insertDtl(List rows, Long iostorinv_id); } diff --git a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java index 028ac56f7..234f4d03c 100644 --- a/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/b_lms/storage_manage/ios/service/iostorInv/impl/StIvtIostorinvServiceImpl.java @@ -1,20 +1,39 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.pdm_manage.enums.SUBEnum; +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.mapper.StIvtIostorinvMapper; import org.nl.common.TableDataInfo; +import org.nl.common.utils.IdUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.modules.system.util.CodeUtil; +import org.nl.modules.wql.core.bean.WQLObject; +import org.nl.wms.basedata.st.service.StorattrService; +import org.nl.wms.basedata.st.service.dto.StorattrDto; import org.nl.wms.basedata.st.service.impl.UserStorServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; /** *

@@ -28,6 +47,24 @@ import java.util.Map; @Slf4j public class StIvtIostorinvServiceImpl extends ServiceImpl implements IStIvtIostorinvService { + /** + * 仓库服务 + */ + @Autowired + private StorattrService storattrService; + + /** + * 出入库明细服务 + */ + @Autowired + private IStIvtIostorinvdtlService iStIvtIostorinvdtlService; + + /** + * 出入库分配明细服务 + */ + @Autowired + private IStIvtIostorinvdisService iStIvtIostorinvdisService; + @Override public Object pageQuery(Map query, Pageable pageQuery) { Page page = PageHelper.startPage(pageQuery.getPageNumber() + 1, pageQuery.getPageSize()); @@ -47,4 +84,172 @@ public class StIvtIostorinvServiceImpl extends ServiceImpl list = (ArrayList) whereJson.get("tableData"); + + List rows = list.stream() + .map(row -> JSONObject.parseObject(JSON.toJSONString(row))) + .collect(Collectors.toList()); + + HashMap> disDaoMap = iStIvtIostorinvdtlService.insertDtl(rows, mstDao.getIostorinv_id()); + + // 插入分配明细 + iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(),disDaoMap); + + // 更新子卷包装关系 + String packageIn = rows.stream() + .map(row -> row.getString("package_box_sn")) + .distinct() + .collect(Collectors.joining("','")); + + HashMap map = new HashMap<>(); + map.put("status", SUBEnum.STATUS.code("包装")); + + + if (IOSEnum.IN_TYPE.code("报废入库").equals(whereJson.get("bill_type"))) { + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("出库")+"'"); + } else { + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("生成")+"'"); + } + + return mstDao.getIostorinv_id().toString(); + } + + @Override + @Transactional + public void update(Map whereJson) { + StIvtIostorinv mstDao = this.getById(whereJson.get("iostorinv_id").toString()); + + // 更新主表 + this.updateById(updataMst(whereJson, mstDao)); + + // 更新明细 + ArrayList list = (ArrayList) whereJson.get("tableData"); + + List rows = list.stream() + .map(row -> JSONObject.parseObject(JSON.toJSONString(row))) + .collect(Collectors.toList()); + + HashMap> disDaoMap = iStIvtIostorinvdtlService.insertDtl(rows, mstDao.getIostorinv_id()); + + // 更新分配明细 + iStIvtIostorinvdisService.insertDis(mstDao.getIostorinv_id(),disDaoMap); + + // 更新子卷包装关系 + String packageIn = rows.stream() + .map(row -> row.getString("package_box_sn")) + .distinct() + .collect(Collectors.joining("','")); + + HashMap map = new HashMap<>(); + map.put("status", SUBEnum.STATUS.code("包装")); + + if (IOSEnum.IN_TYPE.code("报废入库").equals(whereJson.get("bill_type"))) { + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("出库")+"'"); + } else { + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("生成")+"'"); + } + + } + + @Override + @Transactional + public void deleteAll(Long[] ids) { + List listId = Arrays.asList(ids); + + // 查询所有分配明细 + List disDaoList = iStIvtIostorinvdisService.list( + new QueryWrapper().lambda() + .in(StIvtIostorinvdis::getIostorinv_id, listId) + ); + + // 查询所有子卷包装关系拼接sql + String packageIn = disDaoList.stream() + .map(StIvtIostorinvdis::getBox_no) + .distinct() + .collect(Collectors.joining("','")); + + // 更新子卷包装关系 + HashMap map = new HashMap<>(); + map.put("status", SUBEnum.STATUS.code("生成")); + + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("包装")+"'"); + + // 更新主表 + this.update( + new UpdateWrapper().lambda() + .set(StIvtIostorinv::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")) + .set(StIvtIostorinv::getUpdate_optid, Long.parseLong(SecurityUtils.getCurrentUserId())) + .set(StIvtIostorinv::getUpdate_optname, SecurityUtils.getCurrentNickName()) + .set(StIvtIostorinv::getUpdate_optname, DateUtil.now()) + .in(StIvtIostorinv::getIostorinv_id, listId) + ); + } + + /** + * 组织主表数据 + * @param whereJson {} + * @return StIvtIostorinv + */ + private StIvtIostorinv updataMst(Map whereJson,StIvtIostorinv mstDao) { + + // 仓库信息 + StorattrDto storattrDto = storattrService.findById(Long.parseLong((String) whereJson.get("stor_id"))); + + if (ObjectUtil.isEmpty(mstDao)) { + // 新增 + mstDao = StIvtIostorinv.builder() + .iostorinv_id(IdUtil.getLongId()) + .bill_code(CodeUtil.getNewCode("IO_CODE")) + .buss_type(whereJson.get("bill_type").toString().substring(0, 4)) + .io_type(IOSEnum.IO_TYPE.code("入库")) + .bill_type(whereJson.get("bill_type").toString()) + .biz_date(whereJson.get("biz_date").toString().substring(0, 10)) + .stor_id(storattrDto.getStor_id()) + .stor_code(storattrDto.getStor_code()) + .stor_name(storattrDto.getStor_name()) + .detail_count(BigDecimal.valueOf(((ArrayList) whereJson.get("tableData")).size())) + .remark(whereJson.get("remark").toString()) + .bill_status(whereJson.get("bill_status").toString()) + .total_qty(BigDecimal.valueOf(Double.parseDouble(whereJson.get("total_qty").toString()))) + .create_mode(IOSEnum.CREATE_MODE.code("PC产生")) + .input_optid(Long.parseLong(SecurityUtils.getCurrentUserId())) + .input_optname(SecurityUtils.getCurrentNickName()) + .input_time(DateUtil.now()) + .update_optid(Long.parseLong(SecurityUtils.getCurrentUserId())) + .update_optname(SecurityUtils.getCurrentNickName()) + .update_time(DateUtil.now()) + .is_delete(IOSEnum.IS_NOTANDYES.code("否")) + .is_upload(IOSEnum.IS_NOTANDYES.code("否")) + .syscompanyid(SecurityUtils.getDeptId()) + .sysdeptid(SecurityUtils.getDeptId()) + .build(); + } else { + // 修改 + mstDao.setBiz_date(whereJson.get("biz_date").toString().substring(0, 10)); + mstDao.setStor_id(storattrDto.getStor_id()); + mstDao.setStor_code(storattrDto.getStor_code()); + mstDao.setStor_name(storattrDto.getStor_name()); + mstDao.setDetail_count(BigDecimal.valueOf(((ArrayList) whereJson.get("tableData")).size())); + mstDao.setRemark(whereJson.get("remark").toString()); + mstDao.setTotal_qty(BigDecimal.valueOf(Double.parseDouble(whereJson.get("total_qty").toString()))); + mstDao.setUpdate_optid(Long.parseLong(SecurityUtils.getCurrentUserId())); + mstDao.setUpdate_optname(SecurityUtils.getCurrentNickName()); + mstDao.setUpdate_time(DateUtil.now()); + } + return mstDao; + } } 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 c8f8ebbd1..e65c1ee76 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 @@ -1,11 +1,20 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdisService; 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.StIvtIostorinvdisMapper; +import org.nl.common.utils.IdUtil; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; + /** *

* 出入库单分配表 服务实现类 @@ -17,4 +26,55 @@ import org.springframework.stereotype.Service; @Service public class StIvtIostorinvdisServiceImpl extends ServiceImpl implements IStIvtIostorinvdisService { + @Override + public void insertDis(Long iostorinv_id, HashMap> disDaoMap) { + + // 先删除所有分配明细 + this.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdis::getIostorinv_id, iostorinv_id) + ); + + // 批量插入分配明细集合 + ArrayList disDaoList = new ArrayList<>(); + + for(String iostorinvdtl_id : disDaoMap.keySet()) { + ArrayList disList = disDaoMap.get(iostorinvdtl_id); + + for (int i = 0; i < disList.size(); i++) { + JSONObject json = disList.get(i); + + StIvtIostorinvdis disDao = StIvtIostorinvdis.builder() + .iostorinvdis_id(IdUtil.getLongId()) + .iostorinv_id(iostorinv_id) + .iostorinvdtl_id(Long.parseLong(iostorinvdtl_id)) + .seq_no(BigDecimal.valueOf(i + 1)) + .sect_id(json.getLongValue("sect_id")) + .sect_code(json.getString("sect_code")) + .sect_name(json.getString("sect_name")) + .struct_id(json.getLongValue("struct_id")) + .struct_code(json.getString("struct_code")) + .struct_name(json.getString("struct_name")) + .material_id(json.getLongValue("material_id")) + .pcsn(json.getString("pcsn")) + .quality_scode(json.getString("quality_scode")) + .work_status(json.getString("work_status")) + .task_id(json.getLongValue("task_id")) + .storagevehicle_id(json.getLongValue("storagevehicle_id")) + .storagevehicle_code(json.getString("storagevehicle_code")) + .is_issued(IOSEnum.IS_NOTANDYES.code("否")) + .qty_unit_id(json.getLongValue("qty_unit_id")) + .qty_unit_name(json.getString("qty_unit_name")) + .plan_qty(json.getBigDecimal("plan_qty")) + .real_qty(json.getBigDecimal("real_qty")) + .point_id(json.getLongValue("point_id")) + .box_no(json.getString("box_no")) + .build(); + + disDaoList.add(disDao); + } + } + + this.saveBatch(disDaoList); + } } 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 10bd61a75..1ff6cf626 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 @@ -1,10 +1,25 @@ package org.nl.b_lms.storage_manage.ios.service.iostorInv.impl; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.nl.b_lms.pdm_manage.enums.SUBEnum; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvdtlService; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.StIvtIostorinvdtl; import org.nl.b_lms.storage_manage.ios.service.iostorInv.dao.mapper.StIvtIostorinvdtlMapper; +import org.nl.common.utils.IdUtil; +import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.wql.core.bean.WQLObject; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; + /** *

* 出入库单明细表 服务实现类 @@ -15,4 +30,153 @@ import org.springframework.stereotype.Service; */ @Service public class StIvtIostorinvdtlServiceImpl extends ServiceImpl implements IStIvtIostorinvdtlService { + + @Override + public HashMap>insertDtl(List rows, Long iostorinv_id) { + // 先删除所有明细并更新子卷包装关系 + updateSub(iostorinv_id); + + // 查询所有对应物料集合 + String materialCodeIn = rows.stream() + .map(row -> JSONObject.parseObject(JSON.toJSONString(row)).getString("product_name")) + .distinct() + .collect(Collectors.joining("','")); + + List materList = WQLObject.getWQLObject("md_me_materialbase") + .query("material_code in ('" + materialCodeIn + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 查询所有物料对应的计量单位 + String unitIdIn = materList.stream() + .map(row -> row.getString("base_unit_id")) + .distinct() + .collect(Collectors.joining("','")); + + List unitList = WQLObject.getWQLObject("md_pb_measureunit") + .query("measure_unit_id in ('" + unitIdIn + "')") + .getResultJSONArray(0).toJavaList(JSONObject.class); + + // 明细批量插入集合 + ArrayList dtlDaoList = new ArrayList<>(); + + // 组织要插入的分配明细 + HashMap> map = new HashMap<>(); + + for (int i = 0; i < rows.size(); i++) { + JSONObject row = rows.get(i); + + // 匹配对应物料 + List materDaoList = materList.stream() + .filter(item -> item.getString("material_code").equals(row.getString("product_name"))) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(materDaoList)) { + throw new BadRequestException("物料:"+row.getString("product_name")+"不存在,请检查数据!"); + } + + JSONObject materDao = materDaoList.get(0); + + // 匹配物料对应的计量单位 + List unitDaoList = unitList.stream() + .filter(item -> item.getString("measure_unit_id").equals(materDao.getString("base_unit_id"))) + .collect(Collectors.toList()); + + if (ObjectUtil.isEmpty(unitDaoList)) { + throw new BadRequestException("物料:"+row.getString("product_name")+"的计量单位不存在,请检查数据!"); + } + + JSONObject unitDao = unitDaoList.get(0); + + StIvtIostorinvdtl dtlDao = StIvtIostorinvdtl.builder() + .iostorinvdtl_id(IdUtil.getLongId()) + .iostorinv_id(iostorinv_id) + .seq_no(BigDecimal.valueOf(i+1)) + .material_id(materDao.getLongValue("material_id")) + .pcsn(row.getString("container_name")) + .quality_scode(row.getString("quality_scode")) + .bill_status(IOSEnum.BILL_STATUS.code("生成")) + .qty_unit_id(unitDao.getLongValue("measure_unit_id")) + .qty_unit_name(unitDao.getString("unit_name")) + .plan_qty(row.getBigDecimal("plan_qty")) + .source_billdtl_id(row.getLongValue("source_billdtl_id")) + .source_bill_type(row.getString("source_bill_type")) + .source_bill_code(row.getString("source_bill_code")) + .source_bill_table(row.getString("source_bill_table")) + .base_billdtl_id(row.getLongValue("base_billdtl_id")) + .base_bill_type(row.getString("base_bill_type")) + .base_bill_code(row.getString("base_bill_code")) + .base_bill_table(row.getString("base_bill_table")) + .remark(row.getString("remark")) + .assign_qty(BigDecimal.valueOf(0)) + .unassign_qty(row.getBigDecimal("plan_qty")) + .box_no(row.getString("package_box_sn")) + .vbeln(row.getString("vbeln")) + .posnr(row.getString("posnr")) + .width(row.getString("width")).build(); + + dtlDaoList.add(dtlDao); + + // 1明细对应多条分配明细:此处为1对1 + ArrayList disDaoList = new ArrayList<>(); + + // 组织分配明细所需数据 + disDaoList.add(disUpdate(dtlDao)); + + map.put(dtlDao.getIostorinvdtl_id().toString(),disDaoList); + + } + + this.saveBatch(dtlDaoList); + + return map; + } + + /** + * 组织分配明细所需数据 + * @param dtlDao: 明细实体类 + * @return JSONObject:分配明细字段 + */ + private JSONObject disUpdate(StIvtIostorinvdtl dtlDao) { + JSONObject json = new JSONObject(); + json.put("material_id", dtlDao.getMaterial_id()); + json.put("pcsn", dtlDao.getPcsn()); + json.put("box_no", dtlDao.getBox_no()); + json.put("quality_scode", dtlDao.getQuality_scode()); + json.put("work_status", IOSEnum.WORK_STATUS.code("未生成")); + json.put("qty_unit_id", dtlDao.getQty_unit_id()); + json.put("qty_unit_name", dtlDao.getQty_unit_name()); + json.put("plan_qty", dtlDao.getPlan_qty()); + return json; + } + + /** + * 删除明细并更新子卷包装关系为生成 + * @param iostorinv_id: 主表标识 + */ + private void updateSub(Long iostorinv_id) { + + // 所有明细集合 + List dtlDaoList = this.list( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id) + ); + + // 木箱sql拼接 + String packageIn = dtlDaoList.stream() + .map(StIvtIostorinvdtl::getBox_no) + .distinct() + .collect(Collectors.joining("','")); + + // 更新子卷包装关系 + HashMap map = new HashMap<>(); + map.put("status", SUBEnum.STATUS.code("生成")); + WQLObject.getWQLObject("PDM_BI_SubPackageRelation") + .update(map, "package_box_SN IN ('"+packageIn+"') AND status = '"+ SUBEnum.STATUS.code("包装")+"'"); + + // 删除明细 + this.remove( + new QueryWrapper().lambda() + .eq(StIvtIostorinvdtl::getIostorinv_id, iostorinv_id) + ); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java index b097b2008..eeeb90c68 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/st/inbill/rest/RawAssistIStorController.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.service.iostorInv.IStIvtIostorinvService; import org.nl.modules.logging.annotation.Log; import org.nl.wms.st.inbill.service.RawAssistIStorService; @@ -47,7 +48,8 @@ public class RawAssistIStorController { //@PreAuthorize("@el.check('sectattr:del')") @DeleteMapping public ResponseEntity delete(@RequestBody Long[] ids) { - rawAssistIStorService.deleteAll(ids); +// rawAssistIStorService.deleteAll(ids); + iStIvtIostorinvService.deleteAll(ids); return new ResponseEntity<>(HttpStatus.OK); } @@ -64,7 +66,12 @@ public class RawAssistIStorController { //@PreAuthorize("@el.check('structrelamaterial:edit')") public ResponseEntity insertDtl(@RequestBody Map whereJson) { - rawAssistIStorService.insertDtl(whereJson); + // 校验仓库 + if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) { + iStIvtIostorinvService.insertMst(whereJson); + } else { + rawAssistIStorService.insertDtl(whereJson); + } return new ResponseEntity<>(HttpStatus.CREATED); } @@ -73,7 +80,11 @@ public class RawAssistIStorController { //@PreAuthorize("@el.check('sectattr:edit')") public ResponseEntity update(@RequestBody Map whereJson) { - rawAssistIStorService.update(whereJson); + if (whereJson.get("stor_id").toString().equals(IOSEnum.STOR_ID.code("二期"))) { + iStIvtIostorinvService.update(whereJson); + }else { + rawAssistIStorService.update(whereJson); + } return new ResponseEntity<>(HttpStatus.NO_CONTENT); }