diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/MaterialbaseController.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/MaterialbaseController.java index 3305599..83f90c0 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/MaterialbaseController.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/controller/MaterialbaseController.java @@ -60,6 +60,14 @@ public class MaterialbaseController { return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); } + @PostMapping("/excelImport1") + public ResponseEntity excelImport1(@RequestParam("file") MultipartFile file, HttpServletRequest request, HttpServletResponse response) { + RedissonUtils.lock(() -> { + iMdMeMaterialbaseService.excelImport1(file, request, response); + }, "分区信息导入", null); + return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK); + } + @PutMapping @Log("修改物料") public ResponseEntity update(@Validated @RequestBody MdMeMaterialbase dto) { diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java index 32d2658..ee6894f 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdMeMaterialbaseService.java @@ -42,6 +42,15 @@ public interface IMdMeMaterialbaseService extends IService { */ void excelImport(MultipartFile file, HttpServletRequest request, HttpServletResponse response); + /** + * 导入分区信息 + * @param file + * @param request + * @param response + */ + void excelImport1(MultipartFile file, HttpServletRequest request, HttpServletResponse response); + + /** * 修改物料 * @param dto 物料实体类 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdMeMaterialbase.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdMeMaterialbase.java index bd7f78d..59a59a5 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdMeMaterialbase.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/MdMeMaterialbase.java @@ -179,6 +179,10 @@ public class MdMeMaterialbase implements Serializable { */ private String ext_id; + /** + * 用户id + */ + private String user_id; /** * 外部标识 diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java index fab074c..6ccea73 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/Structattr.java @@ -300,6 +300,11 @@ public class Structattr implements Serializable { */ private String ext_id; + /** + * 用户id + */ + private String user_id; + /** * 备注 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java index 6dfe8cf..ee84cb4 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dto/StrategyStructParam.java @@ -53,6 +53,19 @@ public class StrategyStructParam { */ private String ext_type; + + + /** + * 特殊物料标识 + */ + private String ext_id; + + + /** + * 用户ID + */ + private String user_id; + /** * 出入库类型 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java index fc8c27c..e28d64c 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdMeMaterialbaseServiceImpl.java @@ -18,6 +18,8 @@ import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.user.ISysUserService; +import org.nl.system.service.user.dao.SysUser; import org.nl.wms.basedata_manage.service.IMdMeMaterialbaseService; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; import org.nl.wms.basedata_manage.service.IStructattrService; @@ -69,6 +71,13 @@ public class MdMeMaterialbaseServiceImpl extends ServiceImpl> read = excelReader.read(); + if (read.size() > 1) { + for (int i = 1; i < read.size(); i++) { + in = i; + if (i == 12) { + int a = 0; + } + List list = read.get(i); + if (list.size() < 2) { + continue; + } + if (ObjectUtil.isEmpty(list.get(1))) { + throw new BadRequestException("第" + i + "行,库位号不能为空,请检查。"); + } + //库位编码 + String m1 = String.valueOf(list.get(0)).trim(); + if (ObjectUtil.isNotEmpty(m1)) { + if (m1.contains("L")) { + Structattr structattr = iStructattrService.getOne( + new QueryWrapper().lambda() + .eq(Structattr::getStruct_code, m1) + ); + if (ObjectUtil.isEmpty(structattr)) { + throw new BadRequestException("第" + i + "行,库位编号不存在【" + m1 + "】,请检查。"); + } + //用户账号 + String m2 = String.valueOf(list.get(1)).trim(); + if (ObjectUtil.isNotEmpty(m2)) { + List sysUserList = iSysUserService.list( + new QueryWrapper().lambda() + .eq(SysUser::getUsername, m2) + ); + if (ObjectUtil.isNotEmpty(sysUserList)) { + iStructattrService.update(new LambdaUpdateWrapper<>(Structattr.class) + .set(Structattr::getUser_id, sysUserList.get(0).getUser_id()) + .set(Structattr::getUpdate_optid, currentUserId) + .set(Structattr::getUpdate_optname, nickName) + .set(Structattr::getUpdate_time, now) + .set(Structattr::getIs_used, 1) + .eq(Structattr::getStruct_code, m1)); + } + } + } + } else { + //物料编码 + String m3 = String.valueOf(list.get(2)).trim(); + if (ObjectUtil.isNotEmpty(m3)) { + MdMeMaterialbase mdMeMaterialbase = this.baseMapper.selectOne( + new QueryWrapper().lambda() + .eq(MdMeMaterialbase::getMaterial_code, m3) + ); + if (ObjectUtil.isEmpty(mdMeMaterialbase)) { + throw new BadRequestException("第" + i + "行,物料编码不存在【" + m3 + "】,请检查。"); + } + //用户账号 + String m4 = String.valueOf(list.get(3)).trim(); + //用户账号 + if (ObjectUtil.isNotEmpty(m4)) { + List sysUserList = iSysUserService.list( + new QueryWrapper().lambda() + .eq(SysUser::getUsername, m4) + ); + if (ObjectUtil.isNotEmpty(sysUserList)) { + // 直接使用 update 方法,传入包装器 + this.baseMapper.update( + null, + new LambdaUpdateWrapper() + .set(MdMeMaterialbase::getUser_id, sysUserList.get(0).getUser_id()) + .set(MdMeMaterialbase::getUpdate_optid, currentUserId) + .set(MdMeMaterialbase::getUpdate_optname, nickName) + .set(MdMeMaterialbase::getUpdate_time, now) + .set(MdMeMaterialbase::getIs_used, 1) + .eq(MdMeMaterialbase::getMaterial_id, mdMeMaterialbase.getMaterial_id()) + ); + } + } + } + } + } + } + } catch (Exception ex) { + throw new BadRequestException("导入失败" + ex.getMessage() + ":" + in); + } + } + + /** * 仓库导入 */ diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java index c789e2a..40ad7fd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java @@ -2,22 +2,20 @@ package org.nl.wms.basedata_manage.service.impl; 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; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.nl.common.domain.query.PageQuery; import org.nl.common.exception.BadRequestException; import org.nl.common.utils.IdUtil; -import org.nl.common.utils.MapOf; import org.nl.common.utils.SecurityUtils; import org.nl.config.SpringContextHolder; import org.nl.wms.basedata_manage.enums.BaseDataEnum; @@ -42,7 +40,6 @@ import org.nl.wms.warehouse_management.record.service.IStIvtStructivtflowService import org.nl.wms.warehouse_management.record.service.dao.StIvtStructivtflow; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; import org.nl.wms.warehouse_management.service.dao.GroupPlate; -import org.nl.wms.warehouse_management.service.dao.IOStorInv; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -52,10 +49,8 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -374,24 +369,34 @@ public class StructattrServiceImpl extends ServiceImpl strategy = one.getStrategy(); Map decisionerMap = SpringContextHolder.getBeansOfType(Decisioner.class); QueryWrapper query = new QueryWrapper() .eq("is_used", true) - .eq("lock_type",IOSEnum.LOCK_TYPE.code("未锁定")) + .eq("lock_type", IOSEnum.LOCK_TYPE.code("未锁定")) .eq("stor_code", param.getStor_code()) .eq("sect_code", param.getSect_code()) .isNull("storagevehicle_code"); + if (StringUtils.isNotBlank(param.getExt_id())) { + query.eq("ext_id", param.getExt_id()); + } else { + query.eq("ext_id", 0); + } + if (StringUtils.isNotBlank(param.getUser_id())) { + query.eq("user_id", param.getUser_id()); + } else { + query.eq("user_id", 0); + } List list = this.list(query); for (String decisionerType : strategy) { Decisioner decisioner = decisionerMap.get(decisionerType); - log.info("执行入库规格:"+decisioner.strategyConfig.getStrategy_name()); + log.info("执行入库规格:" + decisioner.strategyConfig.getStrategy_name()); JSONObject params = (JSONObject) JSON.toJSON(param); list = decisioner.handler(list, params); - if (CollectionUtils.isEmpty(list)){ - throw new BadRequestException("当前策略"+decisioner.strategyConfig.getStrategy_name()+"无可用货位,分配前数量:"+list.size()); + if (CollectionUtils.isEmpty(list)) { + throw new BadRequestException("当前策略" + decisioner.strategyConfig.getStrategy_name() + "无可用货位,分配前数量:" + list.size()); } } return list; diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java index 4fcb060..0e647dd 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/ios_manage/service/impl/PdaIosInServiceImpl.java @@ -261,6 +261,16 @@ public class PdaIosInServiceImpl implements PdaIosInService { if (qtyIsEmpty) { throw new BadRequestException("物料数量不能为空"); } + if (vehicleCode.contains("LX")) { + // 校验物料归属 + MdMeMaterialbase materInfo = iMdMeMaterialbaseService.getByCode(dataArray.getJSONObject(0).getString("material_id")); + if (ObjectUtil.isEmpty(materInfo)) { + throw new BadRequestException("物料信息错误:" + dataArray.getJSONObject(0).getString("material_id")); + } + if (!materInfo.getUser_id().equals(SecurityUtils.getCurrentUserId())) { + throw new BadRequestException("该物料:" + materInfo.getMaterial_name() + "不属于管理员:" + SecurityUtils.getCurrentNickName() + "管理范畴,请勿组盘!"); + } + } if (StringUtils.isBlank(whereJson.getString("nonClear"))) { // 判断该载具是否存在组盘信息(出库前清理) List groupPlateList = iMdPbGroupplateService.list( @@ -531,6 +541,8 @@ public class PdaIosInServiceImpl implements PdaIosInService { params.put("material_code", whereJson.getString("material_code")); params.put("qty", whereJson.getString("qty")); params.put("pcsn", whereJson.getString("pcsn")); + params.put("ext_id", whereJson.getString("ext_id")); + params.put("user_id", whereJson.getString("ext_id")); Structattr attrDao = iRawAssistIStorService.getStructattr(params); //确定起点 SchBasePoint schBasePoint = iSchBasePointService.getOne(new LambdaQueryWrapper().eq(SchBasePoint::getPoint_code, whereJson.getString("site_code"))); @@ -590,7 +602,28 @@ public class PdaIosInServiceImpl implements PdaIosInService { String iostorinvId = iRawAssistIStorService.insertDtl(jsonMst); // 预组织出入库单据明细的分配数据 whereJson.put("iostorinv_id", iostorinvId); - JSONObject jsonDtl = organizeDivData(whereJson); + JSONObject jsonDtl = organizeDivData(whereJson); + if (!"CTU".equals(whereJson.getString("stor_code"))) { + //更新组盘表状态 + mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper() + .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) + .eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code")) + .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); + } else { + //判断是否特殊物料 + List groupPlateList = iMdPbGroupplateService.list( + new LambdaQueryWrapper() + .eq(GroupPlate::getStoragevehicle_code, whereJson.getString("vehicle_code")) + .gt(GroupPlate::getQty, 0).eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) + ); + if (CollectionUtils.isEmpty(groupPlateList)) { + throw new BadRequestException("此载具:" + whereJson.getString("vehicle_code") + "组盘信息不存在,请检查!"); + } + // 校验物料信息 + MdMeMaterialbase materDao = iMdMeMaterialbaseService.getById(groupPlateList.get(0).getMaterial_id()); + jsonDtl.put("ext_id", materDao.getExt_id()); + jsonDtl.put("user_id",SecurityUtils.getCurrentUserId()); + } // 调用分配,默认自动分配库位 iRawAssistIStorService.divStruct(jsonDtl); // 下发任务 @@ -612,13 +645,7 @@ public class PdaIosInServiceImpl implements PdaIosInService { }); taskJson.put("tableMater", tableMater); iRawAssistIStorService.divPoint(taskJson); - if (!"CTU".equals(whereJson.getString("stor_code"))) { - //更新组盘表状态 - mdPbGroupplateMapper.update(new GroupPlate(), new LambdaUpdateWrapper() - .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘")) - .eq(GroupPlate::getStoragevehicle_code, whereJson.getString("storagevehicle_code")) - .eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))); - } + } else { //空载具入库 whereJson.put("qty", 1); diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java index 6862f83..b4e4c83 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/service/impl/RawAssistIStorServiceImpl.java @@ -454,6 +454,8 @@ public class RawAssistIStorServiceImpl extends ServiceImpl + @@ -195,7 +196,6 @@ const defaultForm = { is_used_time: null, is_used: null, is_delete: null, - ext_id: 'YZHJ', material_height_type: null, product_series: null } diff --git a/nladmin-ui/src/views/wms/basedata/material/material.js b/nladmin-ui/src/views/wms/basedata/material/material.js index 90aa3eb..965fe8e 100644 --- a/nladmin-ui/src/views/wms/basedata/material/material.js +++ b/nladmin-ui/src/views/wms/basedata/material/material.js @@ -62,5 +62,12 @@ export function excelImport(data) { data }) } +export function excelImport1(data) { + return request({ + url: '/api/Materia/excelImport1', + method: 'post', + data + }) +} -export default { add, edit, del, getMaterOptType, isAlongMaterType, getProductSeries, materialSync, excelImport } +export default { add, edit, del, getMaterOptType, isAlongMaterType, getProductSeries, materialSync, excelImport, excelImport1 } diff --git a/nladmin-ui/src/views/wms/sch/point/index.vue b/nladmin-ui/src/views/wms/sch/point/index.vue index 5f97c1c..1d7d4ed 100644 --- a/nladmin-ui/src/views/wms/sch/point/index.vue +++ b/nladmin-ui/src/views/wms/sch/point/index.vue @@ -363,13 +363,15 @@ :min-width="flexWidth('ing_task_code',crud.data,'在执行的任务标识')" /> + 2 + + .. diff --git a/nladmin-ui/src/views/wms/statement/structivt/index.vue b/nladmin-ui/src/views/wms/statement/structivt/index.vue index 4630169..c88358f 100644 --- a/nladmin-ui/src/views/wms/statement/structivt/index.vue +++ b/nladmin-ui/src/views/wms/statement/structivt/index.vue @@ -77,9 +77,20 @@ > 库存导入 + + 分区信息导入 + +