diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialbaseController.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialbaseController.java index 742a3a9..66d6d5e 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialbaseController.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/rest/MaterialbaseController.java @@ -16,6 +16,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.Map; @@ -101,4 +102,12 @@ public class MaterialbaseController { public ResponseEntity getProductSeries() { return new ResponseEntity<>(materialBaseService.getProductSeries("1527572574832300032"), HttpStatus.OK); } + + @Log("导入物料信息") + @ApiOperation("导入物料信息") + @PostMapping("/excelImport") + public ResponseEntity excelImport(@RequestBody MultipartFile file) { + materialBaseService.excelImport(file); + return new ResponseEntity<>(HttpStatus.OK); + } } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialbaseService.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialbaseService.java index e3dd259..8646ece 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialbaseService.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/MaterialbaseService.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.nl.wms.basedata.service.dto.MaterialbaseDto; import org.springframework.data.domain.Pageable; +import org.springframework.web.multipart.MultipartFile; import java.util.List; import java.util.Map; @@ -94,4 +95,5 @@ public interface MaterialbaseService { JSONArray getProductSeries(String parent_class_id); + void excelImport(MultipartFile file); } diff --git a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java index d3ef598..296dcaa 100644 --- a/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java +++ b/lms/nladmin-system/src/main/java/org/nl/wms/basedata/service/impl/MaterialbaseServiceImpl.java @@ -7,12 +7,17 @@ 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.excel.EasyExcel; +import com.alibaba.excel.ExcelReader; +import com.alibaba.excel.read.metadata.ReadSheet; +import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.nl.modules.common.exception.BadRequestException; +import org.nl.modules.common.utils.FileUtil; import org.nl.modules.common.utils.SecurityUtils; import org.nl.modules.wql.WQL; import org.nl.modules.wql.core.bean.WQLObject; @@ -21,10 +26,15 @@ import org.nl.wms.basedata.eum.MaterOptTypeEnum; import org.nl.wms.basedata.service.ClassstandardService; import org.nl.wms.basedata.service.MaterialbaseService; import org.nl.wms.basedata.service.dto.MaterialbaseDto; +import org.nl.wms.util.CommonUtils; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -240,4 +250,49 @@ public class MaterialbaseServiceImpl implements MaterialbaseService { return newParentArray; } + @Override + public void excelImport(MultipartFile multipartFile) { + File file = FileUtil.toFile(multipartFile); + String type = FileUtil.getType(file); + if (!"xlsx".equals(type) && !"xls".equals(type)) { + throw new BadRequestException("只能上传 xls 或 xlsx 文件"); + } + ExcelReader excelReader = EasyExcel.read(file).build(); + List sheets = excelReader.excelExecutor().sheetList(); + + WQLObject materialTable = WQLObject.getWQLObject("md_me_materialbase"); + JSONObject material = new JSONObject(); + Long userId = SecurityUtils.getCurrentUserId(); + String nickName = SecurityUtils.getCurrentNickName(); + String now = DateUtil.now(); + + for (ReadSheet sheet : sheets) { + List> materials = EasyExcel.read(file).sheet(sheet.getSheetNo()).doReadSync(); + for (Map materialMap : materials) { + material.put("material_id", IdUtil.getSnowflake(1L, 1L).nextId()); + String material_code = materialMap.get(1); + material.put("material_code", material_code); + material.put("material_name", materialMap.get(2)); + material.put("base_unit", materialMap.get(3)); + material.put("pack_qty", materialMap.get(4) == null ? 0 : Double.parseDouble(materialMap.get(4))); + + material.put("is_used", '1'); + material.put("is_delete", '0'); + if (ObjectUtil.isNotEmpty(materialTable.query("material_code = '" + material_code + "'").uniqueResult(0))) { + material.put("update_optid", userId); + material.put("update_optname", nickName); + material.put("update_time", now); + materialTable.update(material); + } else { + material.put("create_id", userId); + material.put("create_name", nickName); + material.put("create_time", now); + material.put("update_optid", userId); + material.put("update_optname", nickName); + material.put("update_time", now); + materialTable.insert(material); + } + } + } + } } diff --git a/lms/nladmin-ui/src/api/wms/basedata/materialbase.js b/lms/nladmin-ui/src/api/wms/basedata/materialbase.js index 719b2a1..cfaca60 100644 --- a/lms/nladmin-ui/src/api/wms/basedata/materialbase.js +++ b/lms/nladmin-ui/src/api/wms/basedata/materialbase.js @@ -55,4 +55,12 @@ export function getProductSeries() { }) } -export default { add, edit, del, getMaterOptType, isAlongMaterType, synchronize, getProductSeries } +export function excelImport(data) { + return request({ + url: 'api/Materialbase/excelImport', + method: 'post', + data + }) +} + +export default { add, edit, del, getMaterOptType, isAlongMaterType, synchronize, getProductSeries, excelImport } diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/UploadDialog.vue b/lms/nladmin-ui/src/views/wms/basedata/material/UploadDialog.vue new file mode 100644 index 0000000..fbc9ebc --- /dev/null +++ b/lms/nladmin-ui/src/views/wms/basedata/material/UploadDialog.vue @@ -0,0 +1,116 @@ + + + + diff --git a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue index 02d4887..a12a64d 100644 --- a/lms/nladmin-ui/src/views/wms/basedata/material/index.vue +++ b/lms/nladmin-ui/src/views/wms/basedata/material/index.vue @@ -58,16 +58,26 @@ + + + + + + + + + + + - 同步 + 导入 @@ -227,6 +237,7 @@ + @@ -242,6 +253,7 @@ import Treeselect, { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' import crudClassstandard from '@/api/wms/basedata/classstandard' import crudMdPbMeasureunit from '@/api/wms/basedata/mdPbMeasureunit' +import UploadDialog from '@/views/wms/basedata/material/UploadDialog.vue' const defaultForm = { material_id: null, @@ -284,7 +296,7 @@ export default { name: 'Materialbase', // 数据字典 dicts: ['is_used'], - components: { pagination, crudOperation, rrOperation, udOperation, Treeselect }, + components: { UploadDialog, pagination, crudOperation, rrOperation, udOperation, Treeselect }, mixins: [presenter(), header(), form(defaultForm), crud()], cruds() { return CRUD({ @@ -305,6 +317,7 @@ export default { measure_unit: [], productSeries: [], permission: {}, + uploadShow: false, rules: { material_id: [ { required: true, message: '物料号不能为空', trigger: 'blur' } @@ -346,6 +359,9 @@ export default { [CRUD.HOOK.beforeRefresh]() { return true }, + tableChanged3() { + this.crud.toQuery() + }, initClass1() { const param = { parent_class_code: '09'