diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpBomController.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpBomController.java index 070c4b65..caa02244 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpBomController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpBomController.java @@ -1,5 +1,6 @@ package com.ruoyi.erp.controller; +import com.ruoyi.ck.domain.ItemInfo; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -8,12 +9,15 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.erp.domain.ErpBom; +import com.ruoyi.erp.domain.ErpBomImportVo; import com.ruoyi.erp.service.IErpBomService; +import com.ruoyi.web.controller.demo.domain.UserOperateModel; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; @@ -260,4 +264,28 @@ public class ErpBomController extends BaseController return erpBomService.checkMaterialNoUnique(materialNo); } + /**、 + * 导出模板 + */ + @GetMapping("/importTemplate") + @ResponseBody + public AjaxResult importTemplate() + { + ExcelUtil util = new ExcelUtil(ErpBomImportVo.class); + return util.importTemplateExcel("物料模板"); + } + + /** + * 导入数据 + */ + @PostMapping("/importData") + @ResponseBody + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(ErpBomImportVo.class); + List bomImportVos = util.importExcel(file.getInputStream()); + String message = erpBomService.importData(bomImportVos, updateSupport); + return AjaxResult.success(message); + } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBomImportVo.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBomImportVo.java new file mode 100644 index 00000000..4480040b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBomImportVo.java @@ -0,0 +1,72 @@ +package com.ruoyi.erp.domain; + +import com.ruoyi.common.annotation.Excel; + +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @Description bom导入vo + * @Author youjianchi + * @Date 2024/02/15 16:52 + */ +public class ErpBomImportVo implements Serializable { + private static final long serialVersionUID = 1L; + /** 料号 */ + @Excel(name = "料号",sort = 1) + private String materialNo; + + /** 用量 */ + @Excel(name = "用量",sort = 2) + private Long useNum; + + /** 损耗率 */ + @Excel(name = "损耗率",sort = 3) + private BigDecimal lossRate; + + /** 备注 */ + @Excel(name = "备注",sort = 4) + private String remark; + + public String getMaterialNo() { + return materialNo; + } + + public void setMaterialNo(String materialNo) { + this.materialNo = materialNo; + } + + public Long getUseNum() { + return useNum; + } + + public void setUseNum(Long useNum) { + this.useNum = useNum; + } + + public BigDecimal getLossRate() { + return lossRate; + } + + public void setLossRate(BigDecimal lossRate) { + this.lossRate = lossRate; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + @Override + public String toString() { + return "ErpBomImportVo{" + + "materialNo='" + materialNo + '\'' + + ", useNum=" + useNum + + ", lossRate=" + lossRate + + ", remark='" + remark + '\'' + + '}'; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpBomMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpBomMapper.java index 861f7282..d6c146ee 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpBomMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpBomMapper.java @@ -127,4 +127,5 @@ public interface ErpBomMapper public List selectErpBomList1(); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpMaterialMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpMaterialMapper.java index e295bbaa..4a01844b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpMaterialMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/mapper/ErpMaterialMapper.java @@ -91,4 +91,6 @@ public interface ErpMaterialMapper * 修改物料的关联bom */ public int updateMaterialBomNo(ErpMaterial erpMaterial); + + ErpMaterialVo selectErpMaterialByMaterialNo(String materialNo); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpBomService.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpBomService.java index 4ddc3739..e0625845 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpBomService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/IErpBomService.java @@ -1,6 +1,7 @@ package com.ruoyi.erp.service; import com.ruoyi.erp.domain.ErpBom; +import com.ruoyi.erp.domain.ErpBomImportVo; import java.util.List; @@ -103,4 +104,6 @@ public interface IErpBomService List getExportList(ErpBom erpBom); + String importData(List bomImportVos,boolean updateSupport); + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpBomServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpBomServiceImpl.java index 007287af..a7713102 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpBomServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/service/impl/ErpBomServiceImpl.java @@ -6,20 +6,29 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.erp.domain.ErpBom; +import com.ruoyi.erp.domain.ErpBomImportVo; import com.ruoyi.erp.domain.ErpMaterial; +import com.ruoyi.erp.domain.ErpMaterialVo; import com.ruoyi.erp.mapper.ErpBomMapper; +import com.ruoyi.erp.mapper.ErpMaterialMapper; import com.ruoyi.erp.service.IErpBomService; import com.ruoyi.erp.service.IErpMaterialService; +import com.ruoyi.web.controller.demo.domain.UserOperateModel; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; +import java.util.Date; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.stream.Collectors; +import static org.apache.shiro.web.filter.mgt.DefaultFilter.user; + /** * bomService业务层处理 * @@ -38,6 +47,9 @@ public class ErpBomServiceImpl implements IErpBomService @Autowired private IErpMaterialService iErpMaterialService; + @Autowired + private ErpMaterialMapper materialMapper; + /** * 查询bom * @@ -275,6 +287,141 @@ public class ErpBomServiceImpl implements IErpBomService return resultList; } + /** + * 导入数据 + * + * @param bomImportVos 数据列表 + * @param updateSupport 是否更新支持,如果已存在,则进行更新数据 + * @return 结果 + */ + @Override + public String importData(List bomImportVos, boolean updateSupport) { + + if (StringUtils.isNull(bomImportVos) || bomImportVos.size() == 0) + { + throw new RuntimeException("导入数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (int i=0;i" + failureNum + "、料号 " + materialNo + " 不能为空"); + }else{ + ErpMaterialVo erpMaterialVo = materialMapper.selectErpMaterialByMaterialNo(materialNo); + if(erpMaterialVo==null){ + failureNum++; + failureMsg.append("
" + failureNum + "、料号 " + materialNo + " 不存在"); + } + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new RuntimeException(failureMsg.toString()); + } + failureNum = 0; + Long parentId = null; + String loginName = ShiroUtils.getLoginName(); + Date now = DateUtils.getNowDate(); + for (int i=0;i" + successNum + "、料号 " + materialNo + " 更新成功"); + } + // 新增父级 + else{ + ErpBom fatherBom = new ErpBom(); + fatherBom.setDelFlag("0"); + fatherBom.setRemark(remark); + fatherBom.setCreateBy(loginName); + fatherBom.setCreateTime(now); + fatherBom.setUpdateBy(loginName); + fatherBom.setUpdateTime(now); + String billNo = redisCache.generateBillNo("BOM"); + fatherBom.setBomNo(billNo); + fatherBom.setMaterialNo(materialNo); + fatherBom.setMaterialName(erpMaterialVo.getMaterialName()); + fatherBom.setMaterialType(erpMaterialVo.getMaterialType()); + fatherBom.setProcessMethod(erpMaterialVo.getProcessMethod()); + fatherBom.setUnit(erpMaterialVo.getUnit()); + fatherBom.setBrand(erpMaterialVo.getBrand()); + fatherBom.setDescribe(erpMaterialVo.getDescribe()); + fatherBom.setParentId(0L); + fatherBom.setLevel(0L); + erpBomMapper.insertErpBom(fatherBom); + parentId = fatherBom.getId(); + successNum++; + successMsg.append("
" + successNum + "、料号 " + materialNo + " 新增成功"); + } + }else{ + ErpBom subBom = new ErpBom(); + subBom.setDelFlag("0"); + subBom.setRemark(remark); + subBom.setCreateBy(loginName); + subBom.setCreateTime(now); + subBom.setUpdateBy(loginName); + subBom.setUpdateTime(now); + subBom.setMaterialNo(materialNo); + subBom.setMaterialName(erpMaterialVo.getMaterialName()); + subBom.setMaterialType(erpMaterialVo.getMaterialType()); + subBom.setProcessMethod(erpMaterialVo.getProcessMethod()); + subBom.setUnit(erpMaterialVo.getUnit()); + subBom.setBrand(erpMaterialVo.getBrand()); + subBom.setDescribe(erpMaterialVo.getDescribe()); + subBom.setUseNum(useNum); + subBom.setLossRate(lossRate); + subBom.setParentId(parentId); + subBom.setLevel(1L); + subBom.setSortNo(i+0L); + erpBomMapper.insertErpBom(subBom); + successNum++; + successMsg.append("
" + successNum + "、料号 " + materialNo + " 新增成功"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "、料号 " + materialNo + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new RuntimeException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + /** * 新增bom信息 * diff --git a/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml b/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml index 561542f6..fe9ae754 100644 --- a/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml @@ -134,20 +134,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" insert into erp_bom - del_flag, - create_by, + del_flag, + create_by, create_time, - update_by, + update_by, update_time, - remark, - bom_no, - material_no, - material_name, - material_type, - process_method, - unit, - brand, - `describe`, + remark, + bom_no, + material_no, + material_name, + material_type, + process_method, + unit, + brand, + `describe`, use_num, loss_rate, parent_id, @@ -157,10 +157,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" use_status - #{delFlag}, - #{createBy}, + #{delFlag}, + #{createBy}, #{createTime}, - #{updateBy}, + #{updateBy}, #{updateTime}, #{remark}, #{bomNo}, diff --git a/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml b/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml index 3a3aeb2b..3c635521 100644 --- a/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/erp/ErpMaterialMapper.xml @@ -112,6 +112,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + insert into erp_material diff --git a/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html b/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html index 093058f0..d51b3faf 100644 --- a/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html +++ b/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html @@ -84,6 +84,9 @@ 导出 + + 导入 + bom对比 @@ -120,6 +123,8 @@ cancelUrl: prefix + "/cancel/{id}", restoreUrl: prefix + "/restore/{id}", exportUrl: prefix + "/export", + importUrl: prefix + "/importData", + importTemplateUrl: prefix + "/importTemplate", fixedColumns:true, fixedRightNumber:1, fixedNumber:1, @@ -754,4 +759,19 @@ } + + \ No newline at end of file