From 1b1215080eba41816a4b91bca18356752c17b389 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?yinjinlu-pc=5C=E5=B0=B9=E9=87=91=E8=B7=AF?= <411641505@qq.com> Date: Fri, 6 Sep 2024 11:18:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=A9=E6=96=99=E5=8D=95=E4=BD=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/设计文档/数据库设计/mes-md.sql | 3 +- .../mes/md/controller/MdItemController.java | 67 +++++++++++++- .../java/com/ktg/mes/md/domain/MdItem.java | 26 ++++-- .../mes/md/mapper/MdUnitMeasureMapper.java | 2 + .../ktg/mes/md/service/IMdItemService.java | 10 +++ .../mes/md/service/IMdUnitMeasureService.java | 7 ++ .../md/service/impl/MdItemServiceImpl.java | 88 +++++++++++++++++++ .../impl/MdUnitMeasureServiceImpl.java | 5 ++ .../main/resources/mapper/md/MdItemMapper.xml | 6 +- .../mapper/md/MdUnitMeasureMapper.xml | 7 +- 10 files changed, 211 insertions(+), 10 deletions(-) diff --git a/doc/设计文档/数据库设计/mes-md.sql b/doc/设计文档/数据库设计/mes-md.sql index 957f421..579fcfd 100644 --- a/doc/设计文档/数据库设计/mes-md.sql +++ b/doc/设计文档/数据库设计/mes-md.sql @@ -7,7 +7,8 @@ create table md_item ( item_code varchar(64) not null comment '产品物料编码', item_name varchar(255) not null comment '产品物料名称', specification varchar(500) default null comment '规格型号', - unit_of_measure varchar(64) not null comment '单位', + unit_of_measure varchar(64) not null comment '单位编码', + unit_name varchar(64) comment '单位名称' item_or_product varchar(20) not null comment '产品物料标识', item_type_id bigint(20) default 0 comment '物料类型ID', item_type_code varchar(64) default '' comment '物料类型编码', diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdItemController.java b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdItemController.java index 3eae94f..9c6cd76 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdItemController.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/controller/MdItemController.java @@ -1,6 +1,9 @@ package com.ktg.mes.md.controller; +import com.ktg.common.utils.poi.ExcelUtil; import com.ktg.mes.aspect.BarcodeGen; +import com.ktg.mes.md.domain.MdUnitMeasure; +import com.ktg.mes.md.domain.MdVendor; import com.ktg.mes.md.service.IMdItemService; import com.ktg.common.annotation.Log; import com.ktg.common.constant.UserConstants; @@ -12,12 +15,15 @@ import com.ktg.common.enums.BusinessType; import com.ktg.common.utils.StringUtils; import com.ktg.mes.md.domain.MdItem; import com.ktg.mes.md.service.IItemTypeService; +import com.ktg.mes.md.service.IMdUnitMeasureService; import com.ktg.mes.wm.utils.WmBarCodeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.util.List; @RestController @@ -30,6 +36,9 @@ public class MdItemController extends BaseController { @Autowired private IItemTypeService iItemTypeService; + @Autowired + private IMdUnitMeasureService mdUnitMeasureService; + @Autowired private WmBarCodeUtil barcodeUtil; @@ -45,6 +54,53 @@ public class MdItemController extends BaseController { return getDataTable(list); } + /** + * 导出物料列表 + */ + @PreAuthorize("@ss.hasPermi('mes:md:mditem:export')") + @Log(title = "物料管理", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, MdItem mdItem) + { + List list = mdItemService.selectMdItemList(mdItem); + ExcelUtil util = new ExcelUtil(MdItem.class); + util.exportExcel(response, list, "物料产品数据"); + } + + /** + * 下载导入模板 + * @param response + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(MdItem.class); + util.importTemplateExcel(response, "物料产品数据"); + } + + + /** + * 从模板导入供应商数据 + * @param file + * @param updateSupport + * @return + * @throws Exception + */ + @Log(title = "物料管理", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('mes:md:mditem:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(MdItem.class); + List mdItemList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = mdItemService.importItem(mdItemList, updateSupport, operName); + return AjaxResult.success(message); + } + + + + /** * 主键查询 * @param itemId @@ -79,6 +135,11 @@ public class MdItemController extends BaseController { mdItem.setItemTypeName(type.getItemTypeName()); mdItem.setItemOrProduct(type.getItemOrProduct()); } + + MdUnitMeasure measure = mdUnitMeasureService.selectMdUnitByCode(mdItem.getUnitOfMeasure()); + if(StringUtils.isNotNull(measure)){ + mdItem.setUnitName(measure.getMeasureName()); + } mdItem.setCreateBy(getUsername()); mdItemService.insertMdItem(mdItem); barcodeUtil.generateBarCode(UserConstants.BARCODE_TYPE_ITEM,mdItem.getItemId(),mdItem.getItemCode(), mdItem.getItemName()); @@ -110,6 +171,10 @@ public class MdItemController extends BaseController { mdItem.setMinStock(0D); mdItem.setMaxStock(0D); } + MdUnitMeasure measure = mdUnitMeasureService.selectMdUnitByCode(mdItem.getUnitOfMeasure()); + if(StringUtils.isNotNull(measure)){ + mdItem.setUnitName(measure.getMeasureName()); + } mdItem.setUpdateBy(getUsername()); return toAjax(mdItemService.updateMdItem(mdItem)); @@ -121,6 +186,4 @@ public class MdItemController extends BaseController { public AjaxResult remove(@PathVariable Long[] itemIds){ return toAjax(mdItemService.deleteByItemIds(itemIds)); } - - } diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdItem.java b/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdItem.java index e4c52a2..2c9372f 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdItem.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/domain/MdItem.java @@ -1,5 +1,6 @@ package com.ktg.mes.md.domain; +import com.ktg.common.annotation.Excel; import com.ktg.common.core.domain.BaseEntity; import javax.validation.constraints.NotBlank; @@ -12,19 +13,27 @@ public class MdItem extends BaseEntity { private Long itemId; + @Excel(name = "物料/产品编码") private String itemCode; + @Excel(name = "物料/产品名称") private String itemName; + @Excel(name = "规格型号") private String specification; + @Excel(name = "单位编码") private String unitOfMeasure; + @Excel(name = "单位名称") + private String unitName; private String itemOrProduct; private Long itemTypeId; + @Excel(name = "分类编码") private String itemTypeCode; + @Excel(name = "分类名称") private String itemTypeName; private String enableFlag; private String safeStockFlag; private Double minStock; private Double maxStock; - private String hightValue; + private String highValue; private String attr1; private String attr2; private String attr3; @@ -76,6 +85,13 @@ public class MdItem extends BaseEntity { this.unitOfMeasure = unitOfMeasure; } + public String getUnitName() { + return unitName; + } + + public void setUnitName(String unitName) { + this.unitName = unitName; + } public String getItemOrProduct() { return itemOrProduct; @@ -142,12 +158,12 @@ public class MdItem extends BaseEntity { this.maxStock = maxStock; } - public String getHightValue() { - return hightValue; + public String getHighValue() { + return highValue; } - public void setHightValue(String hightValue) { - this.hightValue = hightValue; + public void setHighValue(String highValue) { + this.highValue = highValue; } public String getAttr1() { diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdUnitMeasureMapper.java b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdUnitMeasureMapper.java index 33fc7a7..1952d4e 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdUnitMeasureMapper.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/mapper/MdUnitMeasureMapper.java @@ -28,6 +28,8 @@ public interface MdUnitMeasureMapper */ public List selectMdUnitMeasureList(MdUnitMeasure mdUnitMeasure); + public MdUnitMeasure selectMdUnitByCode(String unitCode); + /** * 新增单位 * diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdItemService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdItemService.java index 4170436..c15d53d 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdItemService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdItemService.java @@ -1,6 +1,7 @@ package com.ktg.mes.md.service; import com.ktg.mes.md.domain.MdItem; +import com.ktg.mes.md.domain.MdVendor; import java.util.List; @@ -20,6 +21,15 @@ public interface IMdItemService { public List selectMdItemAll(); + /** + * 导入物料信息 + * @param vendorList + * @param isUpdateSupport + * @param operName + * @return + */ + public String importItem(List itemList, Boolean isUpdateSupport, String operName); + /** * 根据主键查询物料编码 * @param itemId diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdUnitMeasureService.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdUnitMeasureService.java index 8552fa5..2747cd5 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdUnitMeasureService.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/IMdUnitMeasureService.java @@ -28,6 +28,13 @@ public interface IMdUnitMeasureService */ public List selectMdUnitMeasureList(MdUnitMeasure mdUnitMeasure); + /** + * 根据单位编码查询单位名称 + * @param unitCode + * @return + */ + public MdUnitMeasure selectMdUnitByCode(String unitCode); + /** * 新增单位 * diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdItemServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdItemServiceImpl.java index 13f6922..6188bb3 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdItemServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdItemServiceImpl.java @@ -1,13 +1,22 @@ package com.ktg.mes.md.service.impl; +import com.ktg.common.core.domain.entity.ItemType; +import com.ktg.common.exception.ServiceException; +import com.ktg.common.utils.bean.BeanValidators; +import com.ktg.mes.md.domain.MdVendor; +import com.ktg.mes.md.mapper.ItemTypeMapper; import com.ktg.mes.md.service.IMdItemService; import com.ktg.common.constant.UserConstants; import com.ktg.common.utils.StringUtils; import com.ktg.mes.md.domain.MdItem; import com.ktg.mes.md.mapper.MdItemMapper; +import com.ktg.mes.wm.utils.WmBarCodeUtil; +import com.ktg.system.strategy.AutoCodeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import javax.validation.Validator; import java.util.List; @Service @@ -16,6 +25,18 @@ public class MdItemServiceImpl implements IMdItemService { @Autowired private MdItemMapper mdItemMapper; + @Autowired + private ItemTypeMapper itemTypeMapper; + + @Autowired + protected Validator validator; + + @Autowired + private WmBarCodeUtil barCodeUtil; + + @Autowired + private AutoCodeUtil autoCodeUtil; + @Override public List selectMdItemList(MdItem mdItem) { return mdItemMapper.selectMdItemList(mdItem); @@ -26,6 +47,73 @@ public class MdItemServiceImpl implements IMdItemService { return mdItemMapper.selectMdItemAll(); } + @Override + public String importItem(List itemList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(itemList) || itemList.size() == 0) + { + throw new ServiceException("导入供应商数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (MdItem item : itemList) + { + try{ + //物料分类是否正确 + if(StringUtils.isNotNull(item.getItemTypeCode())){ + ItemType q = new ItemType(); + q.setItemTypeCode(item.getItemTypeCode()); + List types = itemTypeMapper.selectItemTypeList(q); + if(CollectionUtils.isEmpty(types)){ + item.setItemTypeId(types.get(0).getItemTypeId()); + item.setItemTypeName(types.get(0).getItemTypeName()); + + //是否存在 + MdItem v = mdItemMapper.checkItemCodeUnique(item); + if(StringUtils.isNull(v)){ + BeanValidators.validateWithException(validator, item); + String itemCode = autoCodeUtil.genSerialCode(UserConstants.ITEM_CODE,""); + item.setItemCode(itemCode); + this.insertMdItem(item); + barCodeUtil.generateBarCode(UserConstants.BARCODE_TYPE_ITEM,item.getItemId(),item.getItemCode(),item.getItemName()); + successNum++; + }else if (isUpdateSupport){ + BeanValidators.validateWithException(validator, item); + item.setUpdateBy(operName); + item.setItemId(v.getItemId()); + this.updateMdItem(item); + successNum++; + }else { + failureNum++; + failureMsg.append("
" + failureNum + "、物料/产品 " + item.getItemName() + " 已存在"); + } + }else{ + failureNum++; + failureMsg.append("
" + failureNum + "、物料/产品 " + item.getItemName() + " 请填写正确的分类编码"); + } + }else { + failureNum++; + failureMsg.append("
" + failureNum + "、物料/产品 " + item.getItemName() + " 请填写分类编码"); + } + }catch (Exception e){ + failureNum++; + String msg = "
" + failureNum + "、物料/产品 " + item.getItemName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + } + if (failureNum > 0) + { + failureMsg.insert(0, "导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条"); + } + } + return successMsg.toString(); + } + @Override public MdItem selectMdItemById(Long itemId) { diff --git a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdUnitMeasureServiceImpl.java b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdUnitMeasureServiceImpl.java index 7c6af39..85e307d 100644 --- a/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdUnitMeasureServiceImpl.java +++ b/ktg-mes/src/main/java/com/ktg/mes/md/service/impl/MdUnitMeasureServiceImpl.java @@ -45,6 +45,11 @@ public class MdUnitMeasureServiceImpl implements IMdUnitMeasureService return mdUnitMeasureMapper.selectMdUnitMeasureList(mdUnitMeasure); } + @Override + public MdUnitMeasure selectMdUnitByCode(String unitCode) { + return mdUnitMeasureMapper.selectMdUnitByCode(unitCode); + } + /** * 新增单位 * diff --git a/ktg-mes/src/main/resources/mapper/md/MdItemMapper.xml b/ktg-mes/src/main/resources/mapper/md/MdItemMapper.xml index 6abd6d8..c95a174 100644 --- a/ktg-mes/src/main/resources/mapper/md/MdItemMapper.xml +++ b/ktg-mes/src/main/resources/mapper/md/MdItemMapper.xml @@ -10,6 +10,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -31,7 +32,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select item_id, item_code, item_name, specification, unit_of_measure, item_or_product, + select item_id, item_code, item_name, specification, unit_of_measure,unit_name, item_or_product, item_type_id,item_type_code,item_type_name,enable_flag,safe_stock_flag,min_stock,max_stock,high_value, create_by, create_time, remark from md_item @@ -79,6 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" item_name, specification, unit_of_measure, + unitName, item_or_product, item_type_id, item_type_code, @@ -101,6 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{itemName}, #{specification}, #{unitOfMeasure}, + #{unitName}, #{itemOrProduct}, #{itemTypeId}, #{itemTypeCode}, @@ -129,6 +132,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" item_type_name = #{itemTypeName}, specification = #{specification}, unit_of_measure = #{unitOfMeasure}, + unit_name = #{unitName}, item_or_product = #{itemOrProduct}, enable_flag = #{enableFlag}, safe_stock_flag = #{safeStockFlag}, diff --git a/ktg-mes/src/main/resources/mapper/md/MdUnitMeasureMapper.xml b/ktg-mes/src/main/resources/mapper/md/MdUnitMeasureMapper.xml index 8687c70..eace785 100644 --- a/ktg-mes/src/main/resources/mapper/md/MdUnitMeasureMapper.xml +++ b/ktg-mes/src/main/resources/mapper/md/MdUnitMeasureMapper.xml @@ -47,7 +47,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where measure_id = #{measureId} - + + + insert into md_unit_measure