admin
2 天以前 8b389601ea23deddb3318a8a70d0c80e7b6b994c
-工单物料配置表
已添加8个文件
已修改1个文件
1018 ■■■■■ 文件已修改
jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/controller/ScMaterialConfController.java 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/domain/ScMaterialConf.java 151 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/mapper/ScMaterialConfMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/service/IScMaterialConfService.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/service/impl/ScMaterialConfServiceImpl.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/resources/mapper/sc/materialConf/ScMaterialConfMapper.xml 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/api/main/sc/materialConf/materialConf.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-ui/src/views/main/sc/materialConf/index.vue 342 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
jcdm-main/src/main/java/com/jcdm/main/plcserver/CustomRunner.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jcdm.main.constant.Constants;
import com.jcdm.main.da.cellData.service.IDaCellDataService;
import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService;
@@ -13,6 +14,8 @@
import com.jcdm.main.da.testDeviceInterfaceTemp.service.IDaTestDeviceInterfaceTempService;
import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService;
import com.jcdm.main.plcserver.sub.OPCUaSubscription;
import com.jcdm.main.sc.materialConf.domain.ScMaterialConf;
import com.jcdm.main.sc.materialConf.service.IScMaterialConfService;
import com.kangaroohy.milo.service.MiloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
@@ -52,12 +55,16 @@
    private IDaCellDataService daCellDataService;
    @Autowired
    private IDaPsConfService daPsConfService;
    @Autowired
    private IScMaterialConfService materialConfService;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        //PLC到MES物料转换
        Constants.materialMap.put("1","9900199052A");
        Constants.materialMap.put("2","9900199053B");
        initMaterialConf();
//        Constants.materialMap.put("1","9900199052A");
//        Constants.materialMap.put("2","9900199053B");
//        Constants.materialMap.put("3","9900236569");
//        Constants.materialMap.put("4","9900236570");
//        Constants.materialMap.put("1","9900236569");
@@ -106,6 +113,14 @@
    }
    public void initMaterialConf(){
        List<ScMaterialConf> materialConfList = materialConfService.list(new LambdaQueryWrapper<ScMaterialConf>().eq(ScMaterialConf::getStatus, Constants.USE_ING));
        for (ScMaterialConf materialConf : materialConfList) {
            Constants.materialMap.put(materialConf.getModelCode(),materialConf.getMaterialCode());
        }
        System.out.println("初始化物料转换:"+Constants.materialMap);
    }
    /**
     * è®¢é˜…内容
     */
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/controller/ScMaterialConfController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
package com.jcdm.main.sc.materialConf.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.jcdm.common.core.domain.entity.SysRole;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.jcdm.common.annotation.Log;
import com.jcdm.common.core.controller.BaseController;
import com.jcdm.common.core.domain.AjaxResult;
import com.jcdm.common.enums.BusinessType;
import com.jcdm.main.sc.materialConf.domain.ScMaterialConf;
import com.jcdm.main.sc.materialConf.service.IScMaterialConfService;
import com.jcdm.common.utils.poi.ExcelUtil;
import com.jcdm.common.core.page.TableDataInfo;
/**
 * å·¥å•ç‰©æ–™é…ç½®Controller
 *
 * @author ruoyi
 * @date 2025-02-19
 */
@RestController
@RequestMapping("/sc/materialConf")
public class ScMaterialConfController extends BaseController
{
    @Autowired
    private IScMaterialConfService scMaterialConfService;
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:list')")
    @GetMapping("/list")
    public TableDataInfo list(ScMaterialConf scMaterialConf)
    {
        startPage();
        List<ScMaterialConf> list = scMaterialConfService.selectScMaterialConfList(scMaterialConf);
        return getDataTable(list);
    }
    /**
     * å¯¼å‡ºå·¥å•ç‰©æ–™é…ç½®åˆ—表
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:export')")
    @Log(title = "工单物料配置", businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response, ScMaterialConf scMaterialConf)
    {
        List<ScMaterialConf> list = scMaterialConfService.selectScMaterialConfList(scMaterialConf);
        ExcelUtil<ScMaterialConf> util = new ExcelUtil<ScMaterialConf>(ScMaterialConf.class);
        util.exportExcel(response, list, "工单物料配置数据");
    }
    /**
     * èŽ·å–工单物料配置详细信息
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:query')")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") Long id)
    {
        return success(scMaterialConfService.selectScMaterialConfById(id));
    }
    /**
     * æ–°å¢žå·¥å•ç‰©æ–™é…ç½®
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:add')")
    @Log(title = "工单物料配置", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody ScMaterialConf scMaterialConf)
    {
        return toAjax(scMaterialConfService.insertScMaterialConf(scMaterialConf));
    }
    /**
     * ä¿®æ”¹å·¥å•ç‰©æ–™é…ç½®
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:edit')")
    @Log(title = "工单物料配置", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody ScMaterialConf scMaterialConf)
    {
        return toAjax(scMaterialConfService.updateScMaterialConf(scMaterialConf));
    }
    /**
     * åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
     */
    @PreAuthorize("@ss.hasPermi('sc:materialConf:remove')")
    @Log(title = "工单物料配置", businessType = BusinessType.DELETE)
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable Long[] ids)
    {
        return toAjax(scMaterialConfService.deleteScMaterialConfByIds(ids));
    }
    /**
     * çŠ¶æ€ä¿®æ”¹
     */
    @PutMapping("/changeMaterialStatus")
    public AjaxResult changeMaterialStatus(@RequestBody ScMaterialConf scMaterialConf)
    {
        UpdateWrapper<ScMaterialConf> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("id",scMaterialConf.getId());
        updateWrapper.set("status",scMaterialConf.getStatus());
        return toAjax(scMaterialConfService.update(updateWrapper));
    }
}
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/domain/ScMaterialConf.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,151 @@
package com.jcdm.main.sc.materialConf.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.jcdm.common.annotation.Excel;
import com.jcdm.common.core.domain.BaseEntity;
/**
 * å·¥å•ç‰©æ–™é…ç½®å¯¹è±¡ sc_material_conf
 *
 * @author ruoyi
 * @date 2025-02-19
 */
public class ScMaterialConf extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”®id */
    private Long id;
    /** ç‰©æ–™ç¼–码 */
    @Excel(name = "物料编码")
    private String materialCode;
    /** ç‰©æ–™åç§° */
    @Excel(name = "物料名称")
    private String materialName;
    /** é¢„留字段1 */
    @Excel(name = "预留字段1")
    private String sparefield1;
    /** é¢„留字段2 */
    @Excel(name = "预留字段2")
    private String sparefield2;
    /** åˆ›å»ºç”¨æˆ· */
    @Excel(name = "创建用户")
    private String createUser;
    /** æ›´æ”¹ç”¨æˆ· */
    @Excel(name = "更改用户")
    private String updateUser;
    /** çŠ¶æ€ */
    @Excel(name = "状态")
    private String status;
    /** æ¨¡ç»„类型 */
    @Excel(name = "模组类型")
    private String modelCode;
    public void setModelCode(String modelCode)
    {
        this.modelCode = modelCode;
    }
    public String getModelCode()
    {
        return modelCode;
    }
    public void setId(Long id)
    {
        this.id = id;
    }
    public Long getId()
    {
        return id;
    }
    public void setMaterialCode(String materialCode)
    {
        this.materialCode = materialCode;
    }
    public String getMaterialCode()
    {
        return materialCode;
    }
    public void setMaterialName(String materialName)
    {
        this.materialName = materialName;
    }
    public String getMaterialName()
    {
        return materialName;
    }
    public void setSparefield1(String sparefield1)
    {
        this.sparefield1 = sparefield1;
    }
    public String getSparefield1()
    {
        return sparefield1;
    }
    public void setSparefield2(String sparefield2)
    {
        this.sparefield2 = sparefield2;
    }
    public String getSparefield2()
    {
        return sparefield2;
    }
    public void setCreateUser(String createUser)
    {
        this.createUser = createUser;
    }
    public String getCreateUser()
    {
        return createUser;
    }
    public void setUpdateUser(String updateUser)
    {
        this.updateUser = updateUser;
    }
    public String getUpdateUser()
    {
        return updateUser;
    }
    public void setStatus(String status)
    {
        this.status = status;
    }
    public String getStatus()
    {
        return status;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("materialCode", getMaterialCode())
            .append("materialName", getMaterialName())
            .append("remark", getRemark())
            .append("sparefield1", getSparefield1())
            .append("sparefield2", getSparefield2())
            .append("createUser", getCreateUser())
            .append("createTime", getCreateTime())
            .append("updateUser", getUpdateUser())
            .append("updateTime", getUpdateTime())
            .append("status", getStatus())
            .toString();
    }
}
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/mapper/ScMaterialConfMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.jcdm.main.sc.materialConf.mapper;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jcdm.main.sc.materialConf.domain.ScMaterialConf;
/**
 * å·¥å•ç‰©æ–™é…ç½®Mapper接口
 *
 * @author ruoyi
 * @date 2025-02-19
 */
public interface ScMaterialConfMapper extends BaseMapper<ScMaterialConf>
{
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return å·¥å•ç‰©æ–™é…ç½®
     */
    public ScMaterialConf selectScMaterialConfById(Long id);
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return å·¥å•ç‰©æ–™é…ç½®é›†åˆ
     */
    public List<ScMaterialConf> selectScMaterialConfList(ScMaterialConf scMaterialConf);
    /**
     * æ–°å¢žå·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    public int insertScMaterialConf(ScMaterialConf scMaterialConf);
    /**
     * ä¿®æ”¹å·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    public int updateScMaterialConf(ScMaterialConf scMaterialConf);
    /**
     * åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteScMaterialConfById(Long id);
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
     *
     * @param ids éœ€è¦åˆ é™¤çš„数据主键集合
     * @return ç»“æžœ
     */
    public int deleteScMaterialConfByIds(Long[] ids);
}
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/service/IScMaterialConfService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.jcdm.main.sc.materialConf.service;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jcdm.main.sc.materialConf.domain.ScMaterialConf;
/**
 * å·¥å•ç‰©æ–™é…ç½®Service接口
 *
 * @author ruoyi
 * @date 2025-02-19
 */
public interface IScMaterialConfService extends IService<ScMaterialConf>
{
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return å·¥å•ç‰©æ–™é…ç½®
     */
    public ScMaterialConf selectScMaterialConfById(Long id);
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return å·¥å•ç‰©æ–™é…ç½®é›†åˆ
     */
    public List<ScMaterialConf> selectScMaterialConfList(ScMaterialConf scMaterialConf);
    /**
     * æ–°å¢žå·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    public int insertScMaterialConf(ScMaterialConf scMaterialConf);
    /**
     * ä¿®æ”¹å·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    public int updateScMaterialConf(ScMaterialConf scMaterialConf);
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
     *
     * @param ids éœ€è¦åˆ é™¤çš„工单物料配置主键集合
     * @return ç»“æžœ
     */
    public int deleteScMaterialConfByIds(Long[] ids);
    /**
     * åˆ é™¤å·¥å•ç‰©æ–™é…ç½®ä¿¡æ¯
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteScMaterialConfById(Long id);
}
jcdm-main/src/main/java/com/jcdm/main/sc/materialConf/service/impl/ScMaterialConfServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.jcdm.main.sc.materialConf.service.impl;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jcdm.common.utils.DateUtils;
import com.jcdm.main.sc.stationConf.domain.ScStationConf;
import com.jcdm.main.sc.stationConf.mapper.ScStationConfMapper;
import com.jcdm.main.sc.stationConf.service.IScStationConfService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jcdm.main.sc.materialConf.mapper.ScMaterialConfMapper;
import com.jcdm.main.sc.materialConf.domain.ScMaterialConf;
import com.jcdm.main.sc.materialConf.service.IScMaterialConfService;
/**
 * å·¥å•ç‰©æ–™é…ç½®Service业务层处理
 *
 * @author ruoyi
 * @date 2025-02-19
 */
@Service
public class ScMaterialConfServiceImpl extends ServiceImpl<ScMaterialConfMapper, ScMaterialConf> implements IScMaterialConfService
{
    @Autowired
    private ScMaterialConfMapper scMaterialConfMapper;
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return å·¥å•ç‰©æ–™é…ç½®
     */
    @Override
    public ScMaterialConf selectScMaterialConfById(Long id)
    {
        return scMaterialConfMapper.selectScMaterialConfById(id);
    }
    /**
     * æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return å·¥å•ç‰©æ–™é…ç½®
     */
    @Override
    public List<ScMaterialConf> selectScMaterialConfList(ScMaterialConf scMaterialConf)
    {
        return scMaterialConfMapper.selectScMaterialConfList(scMaterialConf);
    }
    /**
     * æ–°å¢žå·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    @Override
    public int insertScMaterialConf(ScMaterialConf scMaterialConf)
    {
        scMaterialConf.setCreateTime(DateUtils.getNowDate());
        return scMaterialConfMapper.insertScMaterialConf(scMaterialConf);
    }
    /**
     * ä¿®æ”¹å·¥å•ç‰©æ–™é…ç½®
     *
     * @param scMaterialConf å·¥å•ç‰©æ–™é…ç½®
     * @return ç»“æžœ
     */
    @Override
    public int updateScMaterialConf(ScMaterialConf scMaterialConf)
    {
        scMaterialConf.setUpdateTime(DateUtils.getNowDate());
        return scMaterialConfMapper.updateScMaterialConf(scMaterialConf);
    }
    /**
     * æ‰¹é‡åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
     *
     * @param ids éœ€è¦åˆ é™¤çš„工单物料配置主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteScMaterialConfByIds(Long[] ids)
    {
        return scMaterialConfMapper.deleteScMaterialConfByIds(ids);
    }
    /**
     * åˆ é™¤å·¥å•ç‰©æ–™é…ç½®ä¿¡æ¯
     *
     * @param id å·¥å•ç‰©æ–™é…ç½®ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteScMaterialConfById(Long id)
    {
        return scMaterialConfMapper.deleteScMaterialConfById(id);
    }
}
jcdm-main/src/main/resources/mapper/sc/materialConf/ScMaterialConfMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jcdm.main.sc.materialConf.mapper.ScMaterialConfMapper">
    <resultMap type="ScMaterialConf" id="ScMaterialConfResult">
        <result property="id"    column="id"    />
        <result property="materialCode"    column="material_code"    />
        <result property="materialName"    column="material_name"    />
        <result property="remark"    column="remark"    />
        <result property="sparefield1"    column="sparefield1"    />
        <result property="sparefield2"    column="sparefield2"    />
        <result property="createUser"    column="create_user"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateUser"    column="update_user"    />
        <result property="updateTime"    column="update_time"    />
        <result property="status"    column="status"    />
        <result property="modelCode"    column="model_code"    />
    </resultMap>
    <sql id="selectScMaterialConfVo">
        select id, material_code, material_name, remark, sparefield1, sparefield2, create_user, create_time, update_user, update_time, status, model_code from sc_material_conf
    </sql>
    <select id="selectScMaterialConfList" parameterType="ScMaterialConf" resultMap="ScMaterialConfResult">
        <include refid="selectScMaterialConfVo"/>
        <where>
            <if test="materialCode != null  and materialCode != ''"> and material_code like concat('%', #{materialCode}, '%')</if>
            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
            <if test="sparefield1 != null  and sparefield1 != ''"> and sparefield1 = #{sparefield1}</if>
            <if test="sparefield2 != null  and sparefield2 != ''"> and sparefield2 = #{sparefield2}</if>
            <if test="createUser != null  and createUser != ''"> and create_user = #{createUser}</if>
            <if test="updateUser != null  and updateUser != ''"> and update_user = #{updateUser}</if>
            <if test="status != null  and status != ''"> and status = #{status}</if>
            <if test="modelCode != null  and modelCode != ''"> and model_code = #{modelCode}</if>
        </where>
    </select>
    <select id="selectScMaterialConfById" parameterType="Long" resultMap="ScMaterialConfResult">
        <include refid="selectScMaterialConfVo"/>
        where id = #{id}
    </select>
    <insert id="insertScMaterialConf" parameterType="ScMaterialConf" useGeneratedKeys="true" keyProperty="id">
        insert into sc_material_conf
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="materialCode != null">material_code,</if>
            <if test="materialName != null">material_name,</if>
            <if test="remark != null">remark,</if>
            <if test="sparefield1 != null">sparefield1,</if>
            <if test="sparefield2 != null">sparefield2,</if>
            <if test="createUser != null">create_user,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateUser != null">update_user,</if>
            <if test="updateTime != null">update_time,</if>
            <if test="status != null">status,</if>
            <if test="modelCode != null">model_code,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="materialCode != null">#{materialCode},</if>
            <if test="materialName != null">#{materialName},</if>
            <if test="remark != null">#{remark},</if>
            <if test="sparefield1 != null">#{sparefield1},</if>
            <if test="sparefield2 != null">#{sparefield2},</if>
            <if test="createUser != null">#{createUser},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateUser != null">#{updateUser},</if>
            <if test="updateTime != null">#{updateTime},</if>
            <if test="status != null">#{status},</if>
            <if test="modelCode != null">#{modelCode},</if>
        </trim>
    </insert>
    <update id="updateScMaterialConf" parameterType="ScMaterialConf">
        update sc_material_conf
        <trim prefix="SET" suffixOverrides=",">
            <if test="materialCode != null">material_code = #{materialCode},</if>
            <if test="materialName != null">material_name = #{materialName},</if>
            <if test="remark != null">remark = #{remark},</if>
            <if test="sparefield1 != null">sparefield1 = #{sparefield1},</if>
            <if test="sparefield2 != null">sparefield2 = #{sparefield2},</if>
            <if test="createUser != null">create_user = #{createUser},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateUser != null">update_user = #{updateUser},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="status != null">status = #{status},</if>
            <if test="modelCode != null">model_code = #{modelCode},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteScMaterialConfById" parameterType="Long">
        delete from sc_material_conf where id = #{id}
    </delete>
    <delete id="deleteScMaterialConfByIds" parameterType="String">
        delete from sc_material_conf where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
jcdm-ui/src/api/main/sc/materialConf/materialConf.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
import request from '@/utils/request'
// æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表
export function listMaterialConf(query) {
  return request({
    url: '/sc/materialConf/list',
    method: 'get',
    params: query
  })
}
export function changeMaterialStatus(id, status) {
  const data = {
    id,
    status
  }
  return request({
    url: '/sc/materialConf/changeMaterialStatus',
    method: 'put',
    data: data
  })
}
// æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®è¯¦ç»†
export function getMaterialConf(id) {
  return request({
    url: '/sc/materialConf/' + id,
    method: 'get'
  })
}
// æ–°å¢žå·¥å•ç‰©æ–™é…ç½®
export function addMaterialConf(data) {
  return request({
    url: '/sc/materialConf',
    method: 'post',
    data: data
  })
}
// ä¿®æ”¹å·¥å•ç‰©æ–™é…ç½®
export function updateMaterialConf(data) {
  return request({
    url: '/sc/materialConf',
    method: 'put',
    data: data
  })
}
// åˆ é™¤å·¥å•ç‰©æ–™é…ç½®
export function delMaterialConf(id) {
  return request({
    url: '/sc/materialConf/' + id,
    method: 'delete'
  })
}
jcdm-ui/src/views/main/sc/materialConf/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,342 @@
<template>
  <div class="app-container">
    <el-card class="box-card">
        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
          <el-form-item label="物料编码" prop="materialCode">
            <el-input
              v-model="queryParams.materialCode"
              placeholder="请输入物料编码"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item label="物料名称" prop="materialName">
            <el-input
              v-model="queryParams.materialName"
              placeholder="请输入物料名称"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-form-item>
          <el-form-item style="float: right">
            <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
          </el-form-item>
        </el-form>
    </el-card>
    <el-card style="margin-top: 10px" class="box-card">
        <el-row :gutter="10" class="mb8">
          <el-col :span="1.5">
            <el-button
              type="primary"
              plain
              icon="el-icon-plus"
              size="mini"
              @click="handleAdd"
              v-hasPermi="['sc:materialConf:add']"
            >新增</el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button
              type="success"
              plain
              icon="el-icon-edit"
              size="mini"
              :disabled="single"
              @click="handleUpdate"
              v-hasPermi="['sc:materialConf:edit']"
            >修改</el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button
              type="danger"
              plain
              icon="el-icon-delete"
              size="mini"
              :disabled="multiple"
              @click="handleDelete"
              v-hasPermi="['sc:materialConf:remove']"
            >删除</el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button
              type="warning"
              plain
              icon="el-icon-download"
              size="mini"
              @click="handleExport"
              v-hasPermi="['sc:materialConf:export']"
            >导出</el-button>
          </el-col>
          <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
        </el-row>
        <el-table border v-loading="loading" :data="materialConfList" @selection-change="handleSelectionChange">
          <el-table-column type="selection" width="55" align="center" />
          <el-table-column label="物料编码" align="center" prop="materialCode">
          </el-table-column>
          <el-table-column label="物料名称" align="center" prop="materialName">
          </el-table-column>
          <el-table-column label="模组类型" align="center" prop="modelCode">
          </el-table-column>
          <el-table-column label="状态" align="center" width="100">
            <template slot-scope="scope">
              <el-switch
                v-model="scope.row.status"
                active-value="0"
                inactive-value="1"
                @change="handleStatusChange(scope.row)"
              ></el-switch>
            </template>
          </el-table-column>
          <el-table-column label="备注" align="center" prop="remark">
          </el-table-column>
          <el-table-column label="创建用户" align="center" prop="createUser">
          </el-table-column>
          <el-table-column label="创建时间" align="center" prop="createTime">
          </el-table-column>
          <el-table-column label="更改用户" align="center" prop="updateUser">
          </el-table-column>
          <el-table-column label="更改时间" align="center" prop="updateTime">
          </el-table-column>
          <el-table-column width="200" label="操作" align="center" class-name="small-padding fixed-width">
            <template slot-scope="scope">
              <el-button
                size="mini"
                type="success"
                plain
                style="width: 72px"
                icon="el-icon-edit"
                @click="handleUpdate(scope.row)"
                v-hasPermi="['sc:materialConf:edit']"
              >修改</el-button>
              <el-button
                size="mini"
                type="danger"
                plain
                style="width: 72px"
                icon="el-icon-delete"
                @click="handleDelete(scope.row)"
                v-hasPermi="['sc:materialConf:remove']"
              >删除</el-button>
            </template>
          </el-table-column>
        </el-table>
    </el-card>
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <!-- æ·»åŠ æˆ–修改工单物料配置对话框 -->
    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
      <span slot="title">
        <i class="el-icon-s-order"></i>
        {{titleName}}
      </span>
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="物料编码" prop="materialCode">
          <el-input v-model="form.materialCode" placeholder="请输入物料编码" />
        </el-form-item>
        <el-form-item label="物料名称" prop="materialName">
          <el-input v-model="form.materialName" placeholder="请输入物料名称" />
        </el-form-item>
        <el-form-item label="模组类型" prop="modelCode">
          <el-input v-model="form.modelCode" placeholder="请输入模组类型" />
        </el-form-item>
        <el-form-item label="备注" prop="remark">
          <el-input v-model="form.remark" placeholder="请输入备注" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
        <el-button @click="cancel">取 æ¶ˆ</el-button>
      </div>
    </el-dialog>
  </div>
</template>
<script>
import {
  listMaterialConf,
  getMaterialConf,
  delMaterialConf,
  addMaterialConf,
  updateMaterialConf,
  changeMaterialStatus
} from "@/api/main/sc/materialConf/materialConf";
import {changeRoleStatus} from "@/api/system/role";
export default {
  name: "MaterialConf",
  data() {
    return {
      // é®ç½©å±‚
      loading: true,
      titleName: "",
      // é€‰ä¸­æ•°ç»„
      ids: [],
      // éžå•ä¸ªç¦ç”¨
      single: true,
      // éžå¤šä¸ªç¦ç”¨
      multiple: true,
      // æ˜¾ç¤ºæœç´¢æ¡ä»¶
      showSearch: true,
      // æ€»æ¡æ•°
      total: 0,
      // å·¥å•ç‰©æ–™é…ç½®è¡¨æ ¼æ•°æ®
      materialConfList: [],
      // å¼¹å‡ºå±‚标题
      title: "",
      // æ˜¯å¦æ˜¾ç¤ºå¼¹å‡ºå±‚
      open: false,
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        materialCode: null,
        materialName: null,
      },
      // è¡¨å•å‚æ•°
      form: {},
      // è¡¨å•æ ¡éªŒ
      rules: {
        id: [
          { required: true, message: "主键id不能为空", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
  },
  methods: {
    handleStatusChange(row) {
      let text = row.status === "0" ? "启用" : "停用";
      // è®¡ç®—状态为1的物料数量
      const activeMaterialCount = this.materialConfList.filter(material => material.status === "0").length;
      // å¦‚果要启用物料,检查状态为1的物料数量是否大于2
      if (activeMaterialCount > 2) {
        // æ¢å¤çŠ¶æ€
        row.status = "1"; // å‡è®¾åŽŸå§‹çŠ¶æ€æ˜¯1
        this.$modal.msgWarning("已经有两个物料处于启用状态,不能启用更多物料。");
        return;
      }
      this.$modal.confirm('确认要"' + text + '""' + row.materialCode + '"物料吗?').then(function() {
        return changeMaterialStatus(row.id, row.status);
      }).then(() => {
        this.$modal.msgSuccess(text + "成功");
      }).catch(function() {
        row.status = row.status === "0" ? "1" : "0";
      });
    },
    /** æŸ¥è¯¢å·¥å•ç‰©æ–™é…ç½®åˆ—表 */
    getList() {
      this.loading = true;
      listMaterialConf(this.queryParams).then(response => {
        this.materialConfList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    // å–消按钮
    cancel() {
      this.open = false;
      this.reset();
    },
    // è¡¨å•é‡ç½®
    reset() {
      this.form = {
        id: null,
        materialCode: null,
        materialName: null,
        remark: null,
        sparefield1: null,
        sparefield2: null,
        createUser: null,
        createTime: null,
        updateUser: null,
        updateTime: null,
        status: null,
        modelCode: null
      };
      this.resetForm("form");
    },
    /** æœç´¢æŒ‰é’®æ“ä½œ */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** é‡ç½®æŒ‰é’®æ“ä½œ */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // å¤šé€‰æ¡†é€‰ä¸­æ•°æ®
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.id)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    /** æ–°å¢žæŒ‰é’®æ“ä½œ */
    handleAdd() {
      this.reset();
      this.open = true;
      this.titleName = "添加工单物料配置";
    },
    /** ä¿®æ”¹æŒ‰é’®æ“ä½œ */
    handleUpdate(row) {
      this.reset();
      const id = row.id || this.ids
      getMaterialConf(id).then(response => {
        this.form = response.data;
        this.open = true;
        this.titleName = "修改工单物料配置";
      });
    },
    /** æäº¤æŒ‰é’® */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
            updateMaterialConf(this.form).then(response => {
              this.$modal.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
            addMaterialConf(this.form).then(response => {
              this.$modal.msgSuccess("新增成功");
              this.open = false;
              this.getList();
            });
          }
        }
      });
    },
    /** åˆ é™¤æŒ‰é’®æ“ä½œ */
    handleDelete(row) {
      const ids = row.id || this.ids;
      this.$modal.confirm('是否确认删除工单物料配置编号为"' + ids + '"的数据项?').then(function() {
        return delMaterialConf(ids);
      }).then(() => {
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    /** å¯¼å‡ºæŒ‰é’®æ“ä½œ */
    handleExport() {
      this.download('sc/materialConf/export', {
        ...this.queryParams
      }, `materialConf_${new Date().getTime()}.xlsx`)
    }
  }
};
</script>