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 6f8611ea..ad3460c6 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 @@ -5,11 +5,7 @@ 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.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.erp.domain.ErpBom; @@ -23,7 +19,7 @@ import com.ruoyi.common.core.page.TableDataInfo; * bomController * * @author ruoyi - * @date 2023-11-19 + * @date 2023-11-21 */ @Controller @RequestMapping("/erp/bom") @@ -54,6 +50,19 @@ public class ErpBomController extends BaseController return getDataTable(list); } + /** + * 查询bom子列表 + */ + @RequiresPermissions("erp:bom:list") + @PostMapping("/subList") + @ResponseBody + public TableDataInfo subList(ErpBom erpBom) + { + startPage(); + List list = erpBomService.selectErpBomSubList(erpBom); + return getDataTable(list); + } + /** * 导出bom列表 */ @@ -84,7 +93,7 @@ public class ErpBomController extends BaseController @Log(title = "bom", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody - public AjaxResult addSave(ErpBom erpBom) + public AjaxResult addSave(@RequestBody ErpBom erpBom) { return toAjax(erpBomService.insertErpBom(erpBom)); } @@ -107,7 +116,7 @@ public class ErpBomController extends BaseController @Log(title = "bom", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody - public AjaxResult editSave(ErpBom erpBom) + public AjaxResult editSave(@RequestBody ErpBom erpBom) { return toAjax(erpBomService.updateErpBom(erpBom)); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java index b9eedc92..9413df25 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/controller/ErpMaterialController.java @@ -158,4 +158,13 @@ public class ErpMaterialController extends BaseController { return erpMaterialService.checkMaterialNoUnique(material.getMaterialNo()); } + + /** + * 选择料号 + */ + @GetMapping("/select") + public String select() + { + return prefix + "/select"; + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBom.java b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBom.java index 67210d4f..619b8dc9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBom.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/erp/domain/ErpBom.java @@ -1,5 +1,7 @@ package com.ruoyi.erp.domain; +import java.math.BigDecimal; +import java.util.List; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.annotation.Excel; @@ -9,7 +11,7 @@ import com.ruoyi.common.core.domain.BaseEntity; * bom对象 erp_bom * * @author ruoyi - * @date 2023-11-19 + * @date 2023-11-21 */ public class ErpBom extends BaseEntity { @@ -29,6 +31,50 @@ public class ErpBom extends BaseEntity @Excel(name = "料号") private String materialNo; + /** 物料名称 */ + @Excel(name = "物料名称") + private String materialName; + + /** 物料类型 */ + @Excel(name = "物料类型") + private String materialType; + + /** 加工方式 */ + @Excel(name = "加工方式") + private String processMethod; + + /** 单位 */ + @Excel(name = "单位") + private String unit; + + /** 品牌 */ + @Excel(name = "品牌") + private String brand; + + /** 描述 */ + @Excel(name = "描述") + private String describe; + + /** 用量 */ + @Excel(name = "用量") + private Long useNum; + + /** 损耗率 */ + @Excel(name = "损耗率") + private BigDecimal lossRate; + + /** 父级id */ + @Excel(name = "父级id") + private Long parentId; + + /** 层级 */ + @Excel(name = "层级") + private Long level; + + /** 排序 */ + @Excel(name = "排序") + private Long sortNo; + /** 审核状态 */ @Excel(name = "审核状态") private String auditStatus; @@ -37,6 +83,9 @@ public class ErpBom extends BaseEntity @Excel(name = "使用状态") private String useStatus; + /** bom信息 */ + private List erpBomList; + public void setId(Long id) { this.id = id; @@ -73,6 +122,105 @@ public class ErpBom extends BaseEntity { return materialNo; } + public void setMaterialName(String materialName) + { + this.materialName = materialName; + } + + public String getMaterialName() + { + return materialName; + } + public void setMaterialType(String materialType) + { + this.materialType = materialType; + } + + public String getMaterialType() + { + return materialType; + } + public void setProcessMethod(String processMethod) + { + this.processMethod = processMethod; + } + + public String getProcessMethod() + { + return processMethod; + } + public void setUnit(String unit) + { + this.unit = unit; + } + + public String getUnit() + { + return unit; + } + public void setBrand(String brand) + { + this.brand = brand; + } + + public String getBrand() + { + return brand; + } + public void setDescribe(String describe) + { + this.describe = describe; + } + + public String getDescribe() + { + return describe; + } + public void setUseNum(Long useNum) + { + this.useNum = useNum; + } + + public Long getUseNum() + { + return useNum; + } + public void setLossRate(BigDecimal lossRate) + { + this.lossRate = lossRate; + } + + public BigDecimal getLossRate() + { + return lossRate; + } + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Long getParentId() + { + return parentId; + } + public void setLevel(Long level) + { + this.level = level; + } + + public Long getLevel() + { + return level; + } + public void setSortNo(Long sortNo) + { + this.sortNo = sortNo; + } + + public Long getSortNo() + { + return sortNo; + } public void setAuditStatus(String auditStatus) { this.auditStatus = auditStatus; @@ -92,6 +240,16 @@ public class ErpBom extends BaseEntity return useStatus; } + public List getErpBomList() + { + return erpBomList; + } + + public void setErpBomList(List erpBomList) + { + this.erpBomList = erpBomList; + } + @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -104,8 +262,20 @@ public class ErpBom extends BaseEntity .append("remark", getRemark()) .append("bomNo", getBomNo()) .append("materialNo", getMaterialNo()) + .append("materialName", getMaterialName()) + .append("materialType", getMaterialType()) + .append("processMethod", getProcessMethod()) + .append("unit", getUnit()) + .append("brand", getBrand()) + .append("describe", getDescribe()) + .append("useNum", getUseNum()) + .append("lossRate", getLossRate()) + .append("parentId", getParentId()) + .append("level", getLevel()) + .append("sortNo", getSortNo()) .append("auditStatus", getAuditStatus()) .append("useStatus", getUseStatus()) + .append("erpBomList", getErpBomList()) .toString(); } } 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 0e148901..29c28df2 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 @@ -2,12 +2,13 @@ package com.ruoyi.erp.mapper; import java.util.List; import com.ruoyi.erp.domain.ErpBom; +import com.ruoyi.erp.domain.ErpBom; /** * bomMapper接口 * * @author ruoyi - * @date 2023-11-19 + * @date 2023-11-21 */ public interface ErpBomMapper { @@ -27,6 +28,8 @@ public interface ErpBomMapper */ public List selectErpBomList(ErpBom erpBom); + List selectErpBomSubList(ErpBom erpBom); + /** * 新增bom * @@ -74,4 +77,28 @@ public interface ErpBomMapper * @return 结果 */ public int restoreErpBomById(Long id); + + /** + * 批量删除bom + * + * @param customerIds 需要删除的数据ID + * @return 结果 + */ + public int deleteErpBomByParentIds(String[] ids); + + /** + * 批量新增bom + * + * @param erpBomList bom列表 + * @return 结果 + */ + public int batchErpBom(List erpBomList); + + /** + * 通过bomID删除bom信息 + * + * @param roleId 角色ID + * @return 结果 + */ + public int deleteErpBomByParentId(Long id); } 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 f2a48553..0557f75b 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 @@ -7,7 +7,7 @@ import com.ruoyi.erp.domain.ErpBom; * bomService接口 * * @author ruoyi - * @date 2023-11-19 + * @date 2023-11-21 */ public interface IErpBomService { @@ -27,6 +27,8 @@ public interface IErpBomService */ public List selectErpBomList(ErpBom erpBom); + List selectErpBomSubList(ErpBom erpBom); + /** * 新增bom * 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 fc6c058c..7236f6a2 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 @@ -1,12 +1,18 @@ package com.ruoyi.erp.service.impl; +import java.util.Date; import java.util.List; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ShiroUtils; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.erp.domain.ErpBom; import com.ruoyi.erp.mapper.ErpBomMapper; import com.ruoyi.erp.domain.ErpBom; import com.ruoyi.erp.service.IErpBomService; @@ -16,7 +22,7 @@ import com.ruoyi.common.core.text.Convert; * bomService业务层处理 * * @author ruoyi - * @date 2023-11-19 + * @date 2023-11-21 */ @Service public class ErpBomServiceImpl implements IErpBomService @@ -51,21 +57,30 @@ public class ErpBomServiceImpl implements IErpBomService return erpBomMapper.selectErpBomList(erpBom); } + @Override + public List selectErpBomSubList(ErpBom erpBom) { + return erpBomMapper.selectErpBomSubList(erpBom); + } + /** * 新增bom * * @param erpBom bom * @return 结果 */ + @Transactional @Override public int insertErpBom(ErpBom erpBom) { - String billNo = redisCache.generateBillNo("BOM"); - erpBom.setBomNo(billNo); String loginName = ShiroUtils.getLoginName(); erpBom.setCreateBy(loginName); erpBom.setCreateTime(DateUtils.getNowDate()); - return erpBomMapper.insertErpBom(erpBom); + erpBom.setParentId(0L); + String billNo = redisCache.generateBillNo("BOM"); + erpBom.setBomNo(billNo); + int rows = erpBomMapper.insertErpBom(erpBom); + insertErpBomSub(erpBom); + return rows; } /** @@ -74,13 +89,30 @@ public class ErpBomServiceImpl implements IErpBomService * @param erpBom bom * @return 结果 */ + @Transactional @Override public int updateErpBom(ErpBom erpBom) { String loginName = ShiroUtils.getLoginName(); erpBom.setUpdateBy(loginName); erpBom.setUpdateTime(DateUtils.getNowDate()); - return erpBomMapper.updateErpBom(erpBom); + int editFlag = erpBomMapper.updateErpBom(erpBom); + Long id = erpBom.getId(); + erpBomMapper.deleteErpBomByParentId(id); + List erpBomSubList = erpBom.getErpBomList(); + if(CollectionUtils.isNotEmpty(erpBomSubList)){ + for (int i=0;i erpBomList = erpBom.getErpBomList(); + Long id = erpBom.getId(); + if (StringUtils.isNotNull(erpBomList)) + { +// List list = new ArrayList(); + for (int i=0;i 0) +// { +// erpBomMapper.batchErpBom(list); +// } + } + } } diff --git a/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml b/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml index afa91de4..9803cc2c 100644 --- a/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/erp/ErpBomMapper.xml @@ -14,19 +14,77 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - select id, del_flag, create_by, create_time, update_by, update_time, remark, bom_no, material_no, audit_status, use_status from erp_bom + select id, del_flag, create_by, create_time, update_by, update_time, remark, bom_no, material_no, material_name, material_type, process_method, unit, brand, `describe`, use_num, loss_rate, parent_id, level, sort_no, audit_status, use_status from erp_bom - + + + insert into erp_bom @@ -48,6 +135,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" remark, bom_no, material_no, + material_name, + material_type, + process_method, + unit, + brand, + `describe`, + use_num, + loss_rate, + parent_id, + level, + sort_no, audit_status, use_status, @@ -60,6 +158,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{remark}, #{bomNo}, #{materialNo}, + #{materialName}, + #{materialType}, + #{processMethod}, + #{unit}, + #{brand}, + #{describe}, + #{useNum}, + #{lossRate}, + #{parentId}, + #{level}, + #{sortNo}, #{auditStatus}, #{useStatus}, @@ -76,6 +185,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" remark = #{remark}, bom_no = #{bomNo}, material_no = #{materialNo}, + material_name = #{materialName}, + material_type = #{materialType}, + process_method = #{processMethod}, + unit = #{unit}, + brand = #{brand}, + `describe` = #{describe}, + use_num = #{useNum}, + loss_rate = #{lossRate}, + parent_id = #{parentId}, + level = #{level}, + sort_no = #{sortNo}, audit_status = #{auditStatus}, use_status = #{useStatus}, @@ -100,5 +220,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update erp_bom set del_flag = '0' where id = #{id} + + + delete from erp_bom where parent_id in + + #{parentId} + + + + + delete from erp_bom where parent_id = #{parentId} + + + + insert into erp_bom( id, del_flag, create_by, create_time, update_by, update_time, remark, bom_no, material_no, material_name, material_type, process_method, unit, brand, describe, use_num, loss_rate, parent_id, level, sort_no, audit_status, use_status) values + + ( #{item.id}, #{item.delFlag}, #{item.createBy}, #{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark}, #{item.bomNo}, #{item.materialNo}, #{item.materialName}, #{item.materialType}, #{item.processMethod}, #{item.unit}, #{item.brand}, #{item.describe}, #{item.useNum}, #{item.lossRate}, #{item.parentId}, #{item.level}, #{item.sortNo}, #{item.auditStatus}, #{item.useStatus}) + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js index 30205814..961c69af 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -297,6 +297,10 @@ var table = { var tableParams = $("#" + currentId).bootstrapTable('getOptions'); var pageSize = $.common.isNotEmpty(tableParams.pageSize) ? tableParams.pageSize: table.options.pageSize; var pageNumber = $.common.isNotEmpty(tableParams.pageNumber) ? tableParams.pageNumber: table.options.pageNumber; + var sidePagination = $.common.isNotEmpty(tableParams.sidePagination) ? tableParams.sidePagination: table.options.sidePagination; + if (sidePagination == 'client') { + return index + 1; + } return pageSize * (pageNumber - 1) + index + 1; }, // 列超出指定长度浮动提示 target(copy单击复制文本 open弹窗打开文本) @@ -847,7 +851,12 @@ var table = { } if ($.common.isEmpty(options.yes)) { options.yes = function(index, layero) { - options.callBack(index, layero); + // 传递唯一键 + if(options.uniqueId){ + options.callBack(index, layero,options.uniqueId); + }else{ + options.callBack(index, layero); + } } } var btnCallback = {}; @@ -1173,6 +1182,27 @@ var table = { }; $.ajax(config) }, + // 保存信息 刷新表格 + saveJson: function(url, data, callback) { + var config = { + url: url, + type: "post", + dataType: "json", + contentType: "application/json;charset=utf-8", + data: data, + beforeSend: function () { + $.modal.loading("正在处理中,请稍后..."); + $.modal.disable(); + }, + success: function(result) { + if (typeof callback == "function") { + callback(result); + } + $.operate.successCallback(result); + } + }; + $.ajax(config) + }, // 保存信息 弹出提示框 saveModal: function(url, data, callback) { var config = { @@ -1651,6 +1681,14 @@ var table = { }); return json; }, + // formData数据转json字符串 + formDataToJson: function(formData) { + let obj = {}; + formData.forEach((element) =>{ + obj[element.name] = element.value; + }); + return JSON.stringify(obj); + }, // 数据字典转下拉框 dictToSelect: function(datas, value, name) { var actions = []; diff --git a/ruoyi-admin/src/main/resources/templates/erp/bom/add.html b/ruoyi-admin/src/main/resources/templates/erp/bom/add.html index 73060b42..ca36e97b 100644 --- a/ruoyi-admin/src/main/resources/templates/erp/bom/add.html +++ b/ruoyi-admin/src/main/resources/templates/erp/bom/add.html @@ -3,35 +3,29 @@ +
-
-
- -
+
- +
- -
+
- @@ -42,44 +36,105 @@
-
+
-
-
+
-
-
+
- +
- +
+ +
+
+
+
+
+ \ No newline at end of file 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 5efd95f1..8439590d 100644 --- a/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html +++ b/ruoyi-admin/src/main/resources/templates/erp/bom/bom.html @@ -2,6 +2,7 @@ +
@@ -18,6 +19,22 @@ +
  • + + +
  • +
  • + + + +
  • + +
  •  搜索  重置 @@ -61,16 +80,26 @@
  • + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/erp/bom/edit.html b/ruoyi-admin/src/main/resources/templates/erp/bom/edit.html index 76bb6d69..0c0b9d2d 100644 --- a/ruoyi-admin/src/main/resources/templates/erp/bom/edit.html +++ b/ruoyi-admin/src/main/resources/templates/erp/bom/edit.html @@ -2,61 +2,446 @@ + + +
    - + + + +
    - + +
    - + + + +
    - +
    - +
    - + +
    + + +
    + +
    +
    +
    - +
    - +
    -
    - - -
    +
    - +
    -
    - - -
    + +
    +
    +
    + +
    + +
    +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/erp/material/select.html b/ruoyi-admin/src/main/resources/templates/erp/material/select.html new file mode 100644 index 00000000..e1bf6db5 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/erp/material/select.html @@ -0,0 +1,115 @@ + + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java index f4858114..bfcfa66c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/DictService.java @@ -1,6 +1,11 @@ package com.ruoyi.framework.web.service; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.common.core.domain.entity.SysDictData; @@ -43,4 +48,26 @@ public class DictService { return dictDataService.selectDictLabel(dictType, dictValue); } + + /** + * 根据字典类型转换成select值 + * @param dictType + * @return + */ + public List> getTypeSelect(String dictType) + { + List> result = new ArrayList<>(); + List sysDictDataList = dictTypeService.selectDictDataByType(dictType); + if(CollectionUtils.isNotEmpty(sysDictDataList)){ + for(SysDictData sysDictData:sysDictDataList){ + Map dictOne = new HashMap<>(); + String value = sysDictData.getDictValue(); + String text = sysDictData.getDictLabel(); + dictOne.put("value",value); + dictOne.put("text",text); + result.add(dictOne); + } + } + return result; + } } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java index e60c27a1..15b7618d 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -134,8 +134,8 @@ public class GenController extends BaseController List cxSelect = new ArrayList(); for (GenTable genTable : genTables) { - if (!StringUtils.equals(table.getTableName(), genTable.getTableName())) - { +// if (!StringUtils.equals(table.getTableName(), genTable.getTableName())) +// { CxSelect cxTable = new CxSelect(genTable.getTableName(), genTable.getTableName() + ':' + genTable.getTableComment()); List cxColumns = new ArrayList(); for (GenTableColumn tableColumn : genTable.getColumns()) @@ -144,7 +144,7 @@ public class GenController extends BaseController } cxTable.setS(cxColumns); cxSelect.add(cxTable); - } +// } } mmap.put("table", table); mmap.put("data", JSON.toJSON(cxSelect));