为工艺工序配置添加每道工序的BOM物料消耗配置功能。

This commit is contained in:
JinLu.Yin 2022-09-12 21:49:58 +08:00
parent 315be9a5b5
commit 1171380bfc
6 changed files with 718 additions and 0 deletions

View File

@ -0,0 +1,112 @@
package com.ktg.mes.pro.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ktg.common.constant.UserConstants;
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.ktg.common.annotation.Log;
import com.ktg.common.core.controller.BaseController;
import com.ktg.common.core.domain.AjaxResult;
import com.ktg.common.enums.BusinessType;
import com.ktg.mes.pro.domain.ProRouteProductBom;
import com.ktg.mes.pro.service.IProRouteProductBomService;
import com.ktg.common.utils.poi.ExcelUtil;
import com.ktg.common.core.page.TableDataInfo;
/**
* 产品制程物料BOMController
*
* @author yinjinlu
* @date 2022-09-12
*/
@RestController
@RequestMapping("/mes/pro/routeproductbom")
public class ProRouteProductBomController extends BaseController
{
@Autowired
private IProRouteProductBomService proRouteProductBomService;
/**
* 查询产品制程物料BOM列表
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:list')")
@GetMapping("/list")
public TableDataInfo list(ProRouteProductBom proRouteProductBom)
{
startPage();
List<ProRouteProductBom> list = proRouteProductBomService.selectProRouteProductBomList(proRouteProductBom);
return getDataTable(list);
}
/**
* 导出产品制程物料BOM列表
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:export')")
@Log(title = "产品制程物料BOM", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, ProRouteProductBom proRouteProductBom)
{
List<ProRouteProductBom> list = proRouteProductBomService.selectProRouteProductBomList(proRouteProductBom);
ExcelUtil<ProRouteProductBom> util = new ExcelUtil<ProRouteProductBom>(ProRouteProductBom.class);
util.exportExcel(response, list, "产品制程物料BOM数据");
}
/**
* 获取产品制程物料BOM详细信息
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:query')")
@GetMapping(value = "/{recordId}")
public AjaxResult getInfo(@PathVariable("recordId") Long recordId)
{
return AjaxResult.success(proRouteProductBomService.selectProRouteProductBomByRecordId(recordId));
}
/**
* 新增产品制程物料BOM
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:add')")
@Log(title = "产品制程物料BOM", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody ProRouteProductBom proRouteProductBom)
{
if(UserConstants.NOT_UNIQUE.equals(proRouteProductBomService.checkUnique(proRouteProductBom))){
return AjaxResult.error("当前BOM物料在此工序已经配置过");
}
return toAjax(proRouteProductBomService.insertProRouteProductBom(proRouteProductBom));
}
/**
* 修改产品制程物料BOM
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:edit')")
@Log(title = "产品制程物料BOM", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody ProRouteProductBom proRouteProductBom)
{
if(UserConstants.NOT_UNIQUE.equals(proRouteProductBomService.checkUnique(proRouteProductBom))){
return AjaxResult.error("当前BOM物料在此工序已经配置过");
}
return toAjax(proRouteProductBomService.updateProRouteProductBom(proRouteProductBom));
}
/**
* 删除产品制程物料BOM
*/
@PreAuthorize("@ss.hasPermi('mes:pro:routeproductbom:remove')")
@Log(title = "产品制程物料BOM", businessType = BusinessType.DELETE)
@DeleteMapping("/{recordIds}")
public AjaxResult remove(@PathVariable Long[] recordIds)
{
return toAjax(proRouteProductBomService.deleteProRouteProductBomByRecordIds(recordIds));
}
}

View File

@ -0,0 +1,220 @@
package com.ktg.mes.pro.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ktg.common.annotation.Excel;
import com.ktg.common.core.domain.BaseEntity;
/**
* 产品制程物料BOM对象 pro_route_product_bom
*
* @author yinjinlu
* @date 2022-09-12
*/
public class ProRouteProductBom extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 记录ID */
private Long recordId;
/** 工艺路线ID */
@Excel(name = "工艺路线ID")
private Long routeId;
/** 工序ID */
@Excel(name = "工序ID")
private Long processId;
/** 产品物料ID */
@Excel(name = "产品物料ID")
private Long productId;
/** 产品物料ID */
@Excel(name = "产品物料ID")
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 Long quantity;
/** 预留字段1 */
private String attr1;
/** 预留字段2 */
private String attr2;
/** 预留字段3 */
private Long attr3;
/** 预留字段4 */
private Long attr4;
public void setRecordId(Long recordId)
{
this.recordId = recordId;
}
public Long getRecordId()
{
return recordId;
}
public void setRouteId(Long routeId)
{
this.routeId = routeId;
}
public Long getRouteId()
{
return routeId;
}
public void setProcessId(Long processId)
{
this.processId = processId;
}
public Long getProcessId()
{
return processId;
}
public void setProductId(Long productId)
{
this.productId = productId;
}
public Long getProductId()
{
return productId;
}
public void setItemId(Long itemId)
{
this.itemId = itemId;
}
public Long getItemId()
{
return itemId;
}
public void setItemCode(String itemCode)
{
this.itemCode = itemCode;
}
public String getItemCode()
{
return itemCode;
}
public void setItemName(String itemName)
{
this.itemName = itemName;
}
public String getItemName()
{
return itemName;
}
public void setSpecification(String specification)
{
this.specification = specification;
}
public String getSpecification()
{
return specification;
}
public void setUnitOfMeasure(String unitOfMeasure)
{
this.unitOfMeasure = unitOfMeasure;
}
public String getUnitOfMeasure()
{
return unitOfMeasure;
}
public void setQuantity(Long quantity)
{
this.quantity = quantity;
}
public Long getQuantity()
{
return quantity;
}
public void setAttr1(String attr1)
{
this.attr1 = attr1;
}
public String getAttr1()
{
return attr1;
}
public void setAttr2(String attr2)
{
this.attr2 = attr2;
}
public String getAttr2()
{
return attr2;
}
public void setAttr3(Long attr3)
{
this.attr3 = attr3;
}
public Long getAttr3()
{
return attr3;
}
public void setAttr4(Long attr4)
{
this.attr4 = attr4;
}
public Long getAttr4()
{
return attr4;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("recordId", getRecordId())
.append("routeId", getRouteId())
.append("processId", getProcessId())
.append("productId", getProductId())
.append("itemId", getItemId())
.append("itemCode", getItemCode())
.append("itemName", getItemName())
.append("specification", getSpecification())
.append("unitOfMeasure", getUnitOfMeasure())
.append("quantity", getQuantity())
.append("remark", getRemark())
.append("attr1", getAttr1())
.append("attr2", getAttr2())
.append("attr3", getAttr3())
.append("attr4", getAttr4())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.toString();
}
}

View File

@ -0,0 +1,69 @@
package com.ktg.mes.pro.mapper;
import java.util.List;
import com.ktg.mes.pro.domain.ProRouteProductBom;
/**
* 产品制程物料BOMMapper接口
*
* @author yinjinlu
* @date 2022-09-12
*/
public interface ProRouteProductBomMapper
{
/**
* 查询产品制程物料BOM
*
* @param recordId 产品制程物料BOM主键
* @return 产品制程物料BOM
*/
public ProRouteProductBom selectProRouteProductBomByRecordId(Long recordId);
/**
* 查询产品制程物料BOM列表
*
* @param proRouteProductBom 产品制程物料BOM
* @return 产品制程物料BOM集合
*/
public List<ProRouteProductBom> selectProRouteProductBomList(ProRouteProductBom proRouteProductBom);
/**
* 检测是否重复配置
* @param proRouteProductBom
* @return
*/
public ProRouteProductBom checkUnique(ProRouteProductBom proRouteProductBom);
/**
* 新增产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
public int insertProRouteProductBom(ProRouteProductBom proRouteProductBom);
/**
* 修改产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
public int updateProRouteProductBom(ProRouteProductBom proRouteProductBom);
/**
* 删除产品制程物料BOM
*
* @param recordId 产品制程物料BOM主键
* @return 结果
*/
public int deleteProRouteProductBomByRecordId(Long recordId);
/**
* 批量删除产品制程物料BOM
*
* @param recordIds 需要删除的数据主键集合
* @return 结果
*/
public int deleteProRouteProductBomByRecordIds(Long[] recordIds);
}

View File

@ -0,0 +1,69 @@
package com.ktg.mes.pro.service;
import java.util.List;
import com.ktg.mes.pro.domain.ProRouteProductBom;
/**
* 产品制程物料BOMService接口
*
* @author yinjinlu
* @date 2022-09-12
*/
public interface IProRouteProductBomService
{
/**
* 查询产品制程物料BOM
*
* @param recordId 产品制程物料BOM主键
* @return 产品制程物料BOM
*/
public ProRouteProductBom selectProRouteProductBomByRecordId(Long recordId);
/**
* 查询产品制程物料BOM列表
*
* @param proRouteProductBom 产品制程物料BOM
* @return 产品制程物料BOM集合
*/
public List<ProRouteProductBom> selectProRouteProductBomList(ProRouteProductBom proRouteProductBom);
/**
* 检测是否重复配置
* @param proRouteProductBom
* @return
*/
public String checkUnique(ProRouteProductBom proRouteProductBom);
/**
* 新增产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
public int insertProRouteProductBom(ProRouteProductBom proRouteProductBom);
/**
* 修改产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
public int updateProRouteProductBom(ProRouteProductBom proRouteProductBom);
/**
* 批量删除产品制程物料BOM
*
* @param recordIds 需要删除的产品制程物料BOM主键集合
* @return 结果
*/
public int deleteProRouteProductBomByRecordIds(Long[] recordIds);
/**
* 删除产品制程物料BOM信息
*
* @param recordId 产品制程物料BOM主键
* @return 结果
*/
public int deleteProRouteProductBomByRecordId(Long recordId);
}

View File

@ -0,0 +1,109 @@
package com.ktg.mes.pro.service.impl;
import java.util.List;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.utils.DateUtils;
import com.ktg.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ktg.mes.pro.mapper.ProRouteProductBomMapper;
import com.ktg.mes.pro.domain.ProRouteProductBom;
import com.ktg.mes.pro.service.IProRouteProductBomService;
/**
* 产品制程物料BOMService业务层处理
*
* @author yinjinlu
* @date 2022-09-12
*/
@Service
public class ProRouteProductBomServiceImpl implements IProRouteProductBomService
{
@Autowired
private ProRouteProductBomMapper proRouteProductBomMapper;
/**
* 查询产品制程物料BOM
*
* @param recordId 产品制程物料BOM主键
* @return 产品制程物料BOM
*/
@Override
public ProRouteProductBom selectProRouteProductBomByRecordId(Long recordId)
{
return proRouteProductBomMapper.selectProRouteProductBomByRecordId(recordId);
}
/**
* 查询产品制程物料BOM列表
*
* @param proRouteProductBom 产品制程物料BOM
* @return 产品制程物料BOM
*/
@Override
public List<ProRouteProductBom> selectProRouteProductBomList(ProRouteProductBom proRouteProductBom)
{
return proRouteProductBomMapper.selectProRouteProductBomList(proRouteProductBom);
}
@Override
public String checkUnique(ProRouteProductBom proRouteProductBom) {
ProRouteProductBom bom = proRouteProductBomMapper.checkUnique(proRouteProductBom);
Long recordId = proRouteProductBom.getRecordId() == null? -1L: proRouteProductBom.getRecordId();
if(StringUtils.isNotNull(bom) && bom.getRecordId().longValue() != recordId.longValue()){
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
/**
* 新增产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
@Override
public int insertProRouteProductBom(ProRouteProductBom proRouteProductBom)
{
proRouteProductBom.setCreateTime(DateUtils.getNowDate());
return proRouteProductBomMapper.insertProRouteProductBom(proRouteProductBom);
}
/**
* 修改产品制程物料BOM
*
* @param proRouteProductBom 产品制程物料BOM
* @return 结果
*/
@Override
public int updateProRouteProductBom(ProRouteProductBom proRouteProductBom)
{
proRouteProductBom.setUpdateTime(DateUtils.getNowDate());
return proRouteProductBomMapper.updateProRouteProductBom(proRouteProductBom);
}
/**
* 批量删除产品制程物料BOM
*
* @param recordIds 需要删除的产品制程物料BOM主键
* @return 结果
*/
@Override
public int deleteProRouteProductBomByRecordIds(Long[] recordIds)
{
return proRouteProductBomMapper.deleteProRouteProductBomByRecordIds(recordIds);
}
/**
* 删除产品制程物料BOM信息
*
* @param recordId 产品制程物料BOM主键
* @return 结果
*/
@Override
public int deleteProRouteProductBomByRecordId(Long recordId)
{
return proRouteProductBomMapper.deleteProRouteProductBomByRecordId(recordId);
}
}

View File

@ -0,0 +1,139 @@
<?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.ktg.mes.pro.mapper.ProRouteProductBomMapper">
<resultMap type="ProRouteProductBom" id="ProRouteProductBomResult">
<result property="recordId" column="record_id" />
<result property="routeId" column="route_id" />
<result property="processId" column="process_id" />
<result property="productId" column="product_id" />
<result property="itemId" column="item_id" />
<result property="itemCode" column="item_code" />
<result property="itemName" column="item_name" />
<result property="specification" column="specification" />
<result property="unitOfMeasure" column="unit_of_measure" />
<result property="quantity" column="quantity" />
<result property="remark" column="remark" />
<result property="attr1" column="attr1" />
<result property="attr2" column="attr2" />
<result property="attr3" column="attr3" />
<result property="attr4" column="attr4" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectProRouteProductBomVo">
select record_id, route_id, process_id, product_id, item_id, item_code, item_name, specification, unit_of_measure, quantity, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from pro_route_product_bom
</sql>
<select id="selectProRouteProductBomList" parameterType="ProRouteProductBom" resultMap="ProRouteProductBomResult">
<include refid="selectProRouteProductBomVo"/>
<where>
<if test="routeId != null "> and route_id = #{routeId}</if>
<if test="processId != null "> and process_id = #{processId}</if>
<if test="productId != null "> and product_id = #{productId}</if>
<if test="itemId != null "> and item_id = #{itemId}</if>
<if test="itemCode != null and itemCode != ''"> and item_code = #{itemCode}</if>
<if test="itemName != null and itemName != ''"> and item_name like concat('%', #{itemName}, '%')</if>
<if test="specification != null and specification != ''"> and specification = #{specification}</if>
<if test="unitOfMeasure != null and unitOfMeasure != ''"> and unit_of_measure = #{unitOfMeasure}</if>
<if test="quantity != null "> and quantity = #{quantity}</if>
</where>
</select>
<select id="selectProRouteProductBomByRecordId" parameterType="Long" resultMap="ProRouteProductBomResult">
<include refid="selectProRouteProductBomVo"/>
where record_id = #{recordId}
</select>
<select id="checkUnique" parameterType="ProRouteProductBom" resultMap="ProRouteProductBomResult">
<include refid="selectProRouteProductBomVo"/>
where route_id = #{routeId}
and process_id = #{processId}
and product_id = #{productId}
</select>
<insert id="insertProRouteProductBom" parameterType="ProRouteProductBom" useGeneratedKeys="true" keyProperty="recordId">
insert into pro_route_product_bom
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="routeId != null">route_id,</if>
<if test="processId != null">process_id,</if>
<if test="productId != null">product_id,</if>
<if test="itemId != null">item_id,</if>
<if test="itemCode != null and itemCode != ''">item_code,</if>
<if test="itemName != null and itemName != ''">item_name,</if>
<if test="specification != null">specification,</if>
<if test="unitOfMeasure != null and unitOfMeasure != ''">unit_of_measure,</if>
<if test="quantity != null">quantity,</if>
<if test="remark != null">remark,</if>
<if test="attr1 != null">attr1,</if>
<if test="attr2 != null">attr2,</if>
<if test="attr3 != null">attr3,</if>
<if test="attr4 != null">attr4,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="routeId != null">#{routeId},</if>
<if test="processId != null">#{processId},</if>
<if test="productId != null">#{productId},</if>
<if test="itemId != null">#{itemId},</if>
<if test="itemCode != null and itemCode != ''">#{itemCode},</if>
<if test="itemName != null and itemName != ''">#{itemName},</if>
<if test="specification != null">#{specification},</if>
<if test="unitOfMeasure != null and unitOfMeasure != ''">#{unitOfMeasure},</if>
<if test="quantity != null">#{quantity},</if>
<if test="remark != null">#{remark},</if>
<if test="attr1 != null">#{attr1},</if>
<if test="attr2 != null">#{attr2},</if>
<if test="attr3 != null">#{attr3},</if>
<if test="attr4 != null">#{attr4},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
</trim>
</insert>
<update id="updateProRouteProductBom" parameterType="ProRouteProductBom">
update pro_route_product_bom
<trim prefix="SET" suffixOverrides=",">
<if test="routeId != null">route_id = #{routeId},</if>
<if test="processId != null">process_id = #{processId},</if>
<if test="productId != null">product_id = #{productId},</if>
<if test="itemId != null">item_id = #{itemId},</if>
<if test="itemCode != null and itemCode != ''">item_code = #{itemCode},</if>
<if test="itemName != null and itemName != ''">item_name = #{itemName},</if>
<if test="specification != null">specification = #{specification},</if>
<if test="unitOfMeasure != null and unitOfMeasure != ''">unit_of_measure = #{unitOfMeasure},</if>
<if test="quantity != null">quantity = #{quantity},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="attr1 != null">attr1 = #{attr1},</if>
<if test="attr2 != null">attr2 = #{attr2},</if>
<if test="attr3 != null">attr3 = #{attr3},</if>
<if test="attr4 != null">attr4 = #{attr4},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
</trim>
where record_id = #{recordId}
</update>
<delete id="deleteProRouteProductBomByRecordId" parameterType="Long">
delete from pro_route_product_bom where record_id = #{recordId}
</delete>
<delete id="deleteProRouteProductBomByRecordIds" parameterType="String">
delete from pro_route_product_bom where record_id in
<foreach item="recordId" collection="array" open="(" separator="," close=")">
#{recordId}
</foreach>
</delete>
</mapper>