feat(mill): 完成工艺管理与生产计划全栈业务模块

- 新增三张业务表 SQL:mill_process_recipe / mill_process_pass / mill_production_plan
- 后端:Domain + Mapper + MyBatis XML + Service + Controller(工艺方案 & 生产计划)
- 生产计划支持队列排序(sortNo)、上移/下移、软删除
- 工艺方案支持道次批量保存、事务管理
- 前端:工艺管理页(左侧方案列表 + 右侧表单 + 道次内联表格)
- 前端:生产计划页(轧制队列 + 轧制工艺展示 + 操作面板 + 底部带卷状态栏)
- 注册 /mill/process 与 /mill/plan 前端路由

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-28 14:10:10 +08:00
parent ffe3a0e612
commit 3e0484b55c
21 changed files with 1930 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
package com.ruoyi.mill.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.mill.domain.MillProcessRecipe;
import com.ruoyi.mill.service.IMillProcessRecipeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/mill/recipe")
public class MillProcessRecipeController extends BaseController {
@Autowired
private IMillProcessRecipeService recipeService;
@GetMapping("/list")
public TableDataInfo list(MillProcessRecipe query) {
startPage();
List<MillProcessRecipe> list = recipeService.selectList(query);
return getDataTable(list);
}
/** 不分页的全量列表(下拉选择用) */
@GetMapping("/listAll")
public AjaxResult listAll(MillProcessRecipe query) {
return AjaxResult.success(recipeService.selectList(query));
}
@GetMapping("/{id}")
public AjaxResult detail(@PathVariable Long id) {
return AjaxResult.success(recipeService.selectDetailById(id));
}
@PostMapping
public AjaxResult add(@RequestBody MillProcessRecipe recipe) {
return toAjax(recipeService.save(recipe));
}
@PutMapping
public AjaxResult edit(@RequestBody MillProcessRecipe recipe) {
return toAjax(recipeService.update(recipe));
}
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(recipeService.deleteByIds(ids));
}
}

View File

@@ -0,0 +1,55 @@
package com.ruoyi.mill.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.mill.domain.MillProductionPlan;
import com.ruoyi.mill.service.IMillProductionPlanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/mill/plan")
public class MillProductionPlanController extends BaseController {
@Autowired
private IMillProductionPlanService planService;
@GetMapping("/list")
public AjaxResult list(MillProductionPlan query) {
// 轧制队列不分页,按 sort_no 顺序全量返回
List<MillProductionPlan> list = planService.selectList(query);
return AjaxResult.success(list);
}
@GetMapping("/{id}")
public AjaxResult getInfo(@PathVariable Long id) {
return AjaxResult.success(planService.selectById(id));
}
@PostMapping
public AjaxResult add(@RequestBody MillProductionPlan plan) {
return toAjax(planService.insert(plan));
}
@PutMapping
public AjaxResult edit(@RequestBody MillProductionPlan plan) {
return toAjax(planService.update(plan));
}
@DeleteMapping("/{id}")
public AjaxResult remove(@PathVariable Long id) {
return toAjax(planService.deleteById(id));
}
@PutMapping("/moveUp/{id}")
public AjaxResult moveUp(@PathVariable Long id) {
return toAjax(planService.moveUp(id));
}
@PutMapping("/moveDown/{id}")
public AjaxResult moveDown(@PathVariable Long id) {
return toAjax(planService.moveDown(id));
}
}

View File

@@ -0,0 +1,78 @@
package com.ruoyi.mill.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/** 工艺方案道次详情 */
public class MillProcessPass extends BaseEntity {
private Long recipeId;
@Excel(name = "道次")
private Integer passNo;
@Excel(name = "入口厚度(mm)")
private BigDecimal inThick;
@Excel(name = "出口厚度(mm)")
private BigDecimal outThick;
@Excel(name = "宽度(mm)")
private BigDecimal width;
@Excel(name = "轧制力(kN)")
private BigDecimal rollForce;
@Excel(name = "入口张力(kN)")
private BigDecimal inTension;
@Excel(name = "出口张力(kN)")
private BigDecimal outTension;
@Excel(name = "最高速度(m/min)")
private BigDecimal maxSpeed;
@Excel(name = "入口单位张力(N/mm²)")
private BigDecimal inUnitTension;
@Excel(name = "出口单位张力(N/mm²)")
private BigDecimal outUnitTension;
@Excel(name = "压下量(mm)")
private BigDecimal reduction;
@Excel(name = "总压下量(mm)")
private BigDecimal totalReduction;
private String delFlag;
public Long getRecipeId() { return recipeId; }
public void setRecipeId(Long v) { this.recipeId = v; }
public Integer getPassNo() { return passNo; }
public void setPassNo(Integer v) { this.passNo = v; }
public BigDecimal getInThick() { return inThick; }
public void setInThick(BigDecimal v) { this.inThick = v; }
public BigDecimal getOutThick() { return outThick; }
public void setOutThick(BigDecimal v) { this.outThick = v; }
public BigDecimal getWidth() { return width; }
public void setWidth(BigDecimal v) { this.width = v; }
public BigDecimal getRollForce() { return rollForce; }
public void setRollForce(BigDecimal v) { this.rollForce = v; }
public BigDecimal getInTension() { return inTension; }
public void setInTension(BigDecimal v) { this.inTension = v; }
public BigDecimal getOutTension() { return outTension; }
public void setOutTension(BigDecimal v) { this.outTension = v; }
public BigDecimal getMaxSpeed() { return maxSpeed; }
public void setMaxSpeed(BigDecimal v) { this.maxSpeed = v; }
public BigDecimal getInUnitTension() { return inUnitTension; }
public void setInUnitTension(BigDecimal v) { this.inUnitTension = v; }
public BigDecimal getOutUnitTension() { return outUnitTension; }
public void setOutUnitTension(BigDecimal v){ this.outUnitTension = v; }
public BigDecimal getReduction() { return reduction; }
public void setReduction(BigDecimal v) { this.reduction = v; }
public BigDecimal getTotalReduction() { return totalReduction; }
public void setTotalReduction(BigDecimal v){ this.totalReduction = v; }
public String getDelFlag() { return delFlag; }
public void setDelFlag(String v) { this.delFlag = v; }
}

View File

@@ -0,0 +1,56 @@
package com.ruoyi.mill.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.List;
/** 工艺方案主表 */
public class MillProcessRecipe extends BaseEntity {
@Excel(name = "方案记录号")
private String recipeNo;
@Excel(name = "合金号")
private String alloyNo;
@Excel(name = "道次数量")
private Integer passCount;
@Excel(name = "原料厚度(mm)")
private BigDecimal inThick;
@Excel(name = "成品厚度(mm)")
private BigDecimal outThick;
@Excel(name = "成品宽度(mm)")
private BigDecimal outWidth;
/** 0-正常 1-停用 */
private String status;
/** 删除标志 0-存在 2-删除 */
private String delFlag;
/** 关联道次列表(非数据库字段) */
private List<MillProcessPass> passList;
public String getRecipeNo() { return recipeNo; }
public void setRecipeNo(String v) { this.recipeNo = v; }
public String getAlloyNo() { return alloyNo; }
public void setAlloyNo(String v) { this.alloyNo = v; }
public Integer getPassCount() { return passCount; }
public void setPassCount(Integer v) { this.passCount = v; }
public BigDecimal getInThick() { return inThick; }
public void setInThick(BigDecimal v) { this.inThick = v; }
public BigDecimal getOutThick() { return outThick; }
public void setOutThick(BigDecimal v) { this.outThick = v; }
public BigDecimal getOutWidth() { return outWidth; }
public void setOutWidth(BigDecimal v) { this.outWidth = v; }
public String getStatus() { return status; }
public void setStatus(String v) { this.status = v; }
public String getDelFlag() { return delFlag; }
public void setDelFlag(String v) { this.delFlag = v; }
public List<MillProcessPass> getPassList() { return passList; }
public void setPassList(List<MillProcessPass> v) { this.passList = v; }
}

View File

@@ -0,0 +1,111 @@
package com.ruoyi.mill.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.math.BigDecimal;
/** 生产计划(轧制队列) */
public class MillProductionPlan extends BaseEntity {
@Excel(name = "计划号")
private String planNo;
private String matSeqNo;
private String unitCode;
private String planType;
/** 0-待生产 1-生产中 2-完成 3-撤销 */
@Excel(name = "计划状态")
private String planStatus;
/** Rolling / NextCoil / Idle */
@Excel(name = "生产状态")
private String prodStatus;
@Excel(name = "队列序号")
private Integer sortNo;
@Excel(name = "钢卷编号")
private String inMatNo;
@Excel(name = "采料厚度(mm)")
private BigDecimal inMatThick;
@Excel(name = "采料宽度(mm)")
private BigDecimal inMatWidth;
@Excel(name = "采料重量(kg)")
private BigDecimal inMatWt;
@Excel(name = "采料长度(m)")
private BigDecimal inMatLen;
@Excel(name = "采料内径(mm)")
private BigDecimal inMatInDia;
@Excel(name = "采料外径(mm)")
private BigDecimal inMatDia;
@Excel(name = "炉号")
private String pono;
@Excel(name = "合金牌号")
private String sgSign;
@Excel(name = "出口材料号")
private String outMatNo;
@Excel(name = "成品厚度(mm)")
private BigDecimal outThick;
@Excel(name = "工艺方案ID")
private Long recipeId;
@Excel(name = "工艺方案号")
private String recipeNo;
private String delFlag;
public String getPlanNo() { return planNo; }
public void setPlanNo(String v) { this.planNo = v; }
public String getMatSeqNo() { return matSeqNo; }
public void setMatSeqNo(String v) { this.matSeqNo = v; }
public String getUnitCode() { return unitCode; }
public void setUnitCode(String v) { this.unitCode = v; }
public String getPlanType() { return planType; }
public void setPlanType(String v) { this.planType = v; }
public String getPlanStatus() { return planStatus; }
public void setPlanStatus(String v) { this.planStatus = v; }
public String getProdStatus() { return prodStatus; }
public void setProdStatus(String v) { this.prodStatus = v; }
public Integer getSortNo() { return sortNo; }
public void setSortNo(Integer v) { this.sortNo = v; }
public String getInMatNo() { return inMatNo; }
public void setInMatNo(String v) { this.inMatNo = v; }
public BigDecimal getInMatThick() { return inMatThick; }
public void setInMatThick(BigDecimal v) { this.inMatThick = v; }
public BigDecimal getInMatWidth() { return inMatWidth; }
public void setInMatWidth(BigDecimal v) { this.inMatWidth = v; }
public BigDecimal getInMatWt() { return inMatWt; }
public void setInMatWt(BigDecimal v) { this.inMatWt = v; }
public BigDecimal getInMatLen() { return inMatLen; }
public void setInMatLen(BigDecimal v) { this.inMatLen = v; }
public BigDecimal getInMatInDia() { return inMatInDia; }
public void setInMatInDia(BigDecimal v) { this.inMatInDia = v; }
public BigDecimal getInMatDia() { return inMatDia; }
public void setInMatDia(BigDecimal v) { this.inMatDia = v; }
public String getPono() { return pono; }
public void setPono(String v) { this.pono = v; }
public String getSgSign() { return sgSign; }
public void setSgSign(String v) { this.sgSign = v; }
public String getOutMatNo() { return outMatNo; }
public void setOutMatNo(String v) { this.outMatNo = v; }
public BigDecimal getOutThick() { return outThick; }
public void setOutThick(BigDecimal v) { this.outThick = v; }
public Long getRecipeId() { return recipeId; }
public void setRecipeId(Long v) { this.recipeId = v; }
public String getRecipeNo() { return recipeNo; }
public void setRecipeNo(String v) { this.recipeNo = v; }
public String getDelFlag() { return delFlag; }
public void setDelFlag(String v) { this.delFlag = v; }
}

View File

@@ -0,0 +1,10 @@
package com.ruoyi.mill.mapper;
import com.ruoyi.mill.domain.MillProcessPass;
import java.util.List;
public interface MillProcessPassMapper {
List<MillProcessPass> selectByRecipeId(Long recipeId);
int insertBatch(List<MillProcessPass> list);
int deleteByRecipeId(Long recipeId);
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.mill.mapper;
import com.ruoyi.mill.domain.MillProcessRecipe;
import java.util.List;
public interface MillProcessRecipeMapper {
List<MillProcessRecipe> selectList(MillProcessRecipe query);
MillProcessRecipe selectById(Long id);
MillProcessRecipe selectByRecipeNo(String recipeNo);
int insert(MillProcessRecipe recipe);
int update(MillProcessRecipe recipe);
int deleteById(Long id);
int deleteBatchByIds(Long[] ids);
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.mill.mapper;
import com.ruoyi.mill.domain.MillProductionPlan;
import java.util.List;
public interface MillProductionPlanMapper {
List<MillProductionPlan> selectList(MillProductionPlan query);
MillProductionPlan selectById(Long id);
MillProductionPlan selectByPlanNo(String planNo);
int insert(MillProductionPlan plan);
int update(MillProductionPlan plan);
int deleteById(Long id);
/** 将 sortNo >= targetSort 的记录全部 +1上移腾位 */
int incrementSortFrom(int targetSort);
/** 交换两条记录的 sortNo */
int updateSortNo(Long id, int sortNo);
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.mill.service;
import com.ruoyi.mill.domain.MillProcessRecipe;
import java.util.List;
public interface IMillProcessRecipeService {
List<MillProcessRecipe> selectList(MillProcessRecipe query);
/** 查询方案详情(含道次列表) */
MillProcessRecipe selectDetailById(Long id);
int save(MillProcessRecipe recipe);
int update(MillProcessRecipe recipe);
int deleteByIds(Long[] ids);
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.mill.service;
import com.ruoyi.mill.domain.MillProductionPlan;
import java.util.List;
public interface IMillProductionPlanService {
List<MillProductionPlan> selectList(MillProductionPlan query);
MillProductionPlan selectById(Long id);
int insert(MillProductionPlan plan);
int update(MillProductionPlan plan);
int deleteById(Long id);
int moveUp(Long id);
int moveDown(Long id);
}

View File

@@ -0,0 +1,76 @@
package com.ruoyi.mill.service.impl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.mill.domain.MillProcessPass;
import com.ruoyi.mill.domain.MillProcessRecipe;
import com.ruoyi.mill.mapper.MillProcessPassMapper;
import com.ruoyi.mill.mapper.MillProcessRecipeMapper;
import com.ruoyi.mill.service.IMillProcessRecipeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class MillProcessRecipeServiceImpl implements IMillProcessRecipeService {
@Autowired private MillProcessRecipeMapper recipeMapper;
@Autowired private MillProcessPassMapper passMapper;
@Override
public List<MillProcessRecipe> selectList(MillProcessRecipe query) {
return recipeMapper.selectList(query);
}
@Override
public MillProcessRecipe selectDetailById(Long id) {
MillProcessRecipe recipe = recipeMapper.selectById(id);
if (recipe != null) {
recipe.setPassList(passMapper.selectByRecipeId(id));
}
return recipe;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int save(MillProcessRecipe recipe) {
String user = SecurityUtils.getUsername();
recipe.setCreateBy(user);
recipe.setUpdateBy(user);
recipeMapper.insert(recipe);
savePassList(recipe);
return 1;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int update(MillProcessRecipe recipe) {
recipe.setUpdateBy(SecurityUtils.getUsername());
recipeMapper.update(recipe);
// 先删除旧道次,再重新插入
passMapper.deleteByRecipeId(recipe.getId());
savePassList(recipe);
return 1;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int deleteByIds(Long[] ids) {
for (Long id : ids) {
passMapper.deleteByRecipeId(id);
}
return recipeMapper.deleteBatchByIds(ids);
}
private void savePassList(MillProcessRecipe recipe) {
List<MillProcessPass> list = recipe.getPassList();
if (list == null || list.isEmpty()) return;
String user = SecurityUtils.getUsername();
for (MillProcessPass p : list) {
p.setRecipeId(recipe.getId());
p.setCreateBy(user);
p.setUpdateBy(user);
}
passMapper.insertBatch(list);
}
}

View File

@@ -0,0 +1,80 @@
package com.ruoyi.mill.service.impl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.mill.domain.MillProductionPlan;
import com.ruoyi.mill.mapper.MillProductionPlanMapper;
import com.ruoyi.mill.service.IMillProductionPlanService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class MillProductionPlanServiceImpl implements IMillProductionPlanService {
@Autowired private MillProductionPlanMapper planMapper;
@Override
public List<MillProductionPlan> selectList(MillProductionPlan query) {
return planMapper.selectList(query);
}
@Override
public MillProductionPlan selectById(Long id) {
return planMapper.selectById(id);
}
@Override
public int insert(MillProductionPlan plan) {
String user = SecurityUtils.getUsername();
plan.setCreateBy(user);
plan.setUpdateBy(user);
// 新计划追加到队列末尾
List<MillProductionPlan> all = planMapper.selectList(new MillProductionPlan());
plan.setSortNo(all.size() + 1);
return planMapper.insert(plan);
}
@Override
public int update(MillProductionPlan plan) {
plan.setUpdateBy(SecurityUtils.getUsername());
return planMapper.update(plan);
}
@Override
public int deleteById(Long id) {
return planMapper.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int moveUp(Long id) {
MillProductionPlan cur = planMapper.selectById(id);
if (cur == null || cur.getSortNo() <= 1) return 0;
// 找上一条
MillProductionPlan query = new MillProductionPlan();
List<MillProductionPlan> all = planMapper.selectList(query);
MillProductionPlan prev = all.stream()
.filter(p -> p.getSortNo() == cur.getSortNo() - 1)
.findFirst().orElse(null);
if (prev == null) return 0;
planMapper.updateSortNo(cur.getId(), prev.getSortNo());
planMapper.updateSortNo(prev.getId(), cur.getSortNo());
return 1;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int moveDown(Long id) {
MillProductionPlan cur = planMapper.selectById(id);
if (cur == null) return 0;
List<MillProductionPlan> all = planMapper.selectList(new MillProductionPlan());
MillProductionPlan next = all.stream()
.filter(p -> p.getSortNo() == cur.getSortNo() + 1)
.findFirst().orElse(null);
if (next == null) return 0;
planMapper.updateSortNo(cur.getId(), next.getSortNo());
planMapper.updateSortNo(next.getId(), cur.getSortNo());
return 1;
}
}

View File

@@ -0,0 +1,59 @@
<?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.ruoyi.mill.mapper.MillProcessPassMapper">
<resultMap id="BaseRM" type="com.ruoyi.mill.domain.MillProcessPass">
<id property="id" column="id"/>
<result property="recipeId" column="recipe_id"/>
<result property="passNo" column="pass_no"/>
<result property="inThick" column="in_thick"/>
<result property="outThick" column="out_thick"/>
<result property="width" column="width"/>
<result property="rollForce" column="roll_force"/>
<result property="inTension" column="in_tension"/>
<result property="outTension" column="out_tension"/>
<result property="maxSpeed" column="max_speed"/>
<result property="inUnitTension" column="in_unit_tension"/>
<result property="outUnitTension" column="out_unit_tension"/>
<result property="reduction" column="reduction"/>
<result property="totalReduction" column="total_reduction"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<select id="selectByRecipeId" resultMap="BaseRM">
SELECT id, recipe_id, pass_no, in_thick, out_thick, width,
roll_force, in_tension, out_tension, max_speed,
in_unit_tension, out_unit_tension, reduction, total_reduction,
del_flag, create_by, create_time, update_by, update_time, remark
FROM mill_process_pass
WHERE recipe_id = #{recipeId} AND del_flag = '0'
ORDER BY pass_no ASC
</select>
<insert id="insertBatch">
INSERT INTO mill_process_pass (
recipe_id, pass_no, in_thick, out_thick, width,
roll_force, in_tension, out_tension, max_speed,
in_unit_tension, out_unit_tension, reduction, total_reduction,
create_by, create_time, update_by, update_time, remark, del_flag
) VALUES
<foreach collection="list" item="p" separator=",">
(#{p.recipeId}, #{p.passNo}, #{p.inThick}, #{p.outThick}, #{p.width},
#{p.rollForce}, #{p.inTension}, #{p.outTension}, #{p.maxSpeed},
#{p.inUnitTension}, #{p.outUnitTension}, #{p.reduction}, #{p.totalReduction},
#{p.createBy}, NOW(), #{p.updateBy}, NOW(), #{p.remark}, '0')
</foreach>
</insert>
<update id="deleteByRecipeId">
UPDATE mill_process_pass SET del_flag = '2', update_time = NOW()
WHERE recipe_id = #{recipeId}
</update>
</mapper>

View File

@@ -0,0 +1,89 @@
<?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.ruoyi.mill.mapper.MillProcessRecipeMapper">
<resultMap id="BaseRM" type="com.ruoyi.mill.domain.MillProcessRecipe">
<id property="id" column="id"/>
<result property="recipeNo" column="recipe_no"/>
<result property="alloyNo" column="alloy_no"/>
<result property="passCount" column="pass_count"/>
<result property="inThick" column="in_thick"/>
<result property="outThick" column="out_thick"/>
<result property="outWidth" column="out_width"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<sql id="cols">
id, recipe_no, alloy_no, pass_count, in_thick, out_thick, out_width,
status, del_flag, create_by, create_time, update_by, update_time, remark
</sql>
<select id="selectList" resultMap="BaseRM">
SELECT <include refid="cols"/>
FROM mill_process_recipe
WHERE del_flag = '0'
<if test="recipeNo != null and recipeNo != ''">
AND recipe_no LIKE CONCAT('%', #{recipeNo}, '%')
</if>
<if test="alloyNo != null and alloyNo != ''">
AND alloy_no LIKE CONCAT('%', #{alloyNo}, '%')
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
ORDER BY id ASC
</select>
<select id="selectById" resultMap="BaseRM">
SELECT <include refid="cols"/> FROM mill_process_recipe
WHERE id = #{id} AND del_flag = '0'
</select>
<select id="selectByRecipeNo" resultMap="BaseRM">
SELECT <include refid="cols"/> FROM mill_process_recipe
WHERE recipe_no = #{recipeNo} AND del_flag = '0' LIMIT 1
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO mill_process_recipe (
recipe_no, alloy_no, pass_count, in_thick, out_thick, out_width,
status, create_by, create_time, update_by, update_time, remark, del_flag
) VALUES (
#{recipeNo}, #{alloyNo}, #{passCount}, #{inThick}, #{outThick}, #{outWidth},
#{status}, #{createBy}, NOW(), #{updateBy}, NOW(), #{remark}, '0'
)
</insert>
<update id="update">
UPDATE mill_process_recipe
SET recipe_no = #{recipeNo},
alloy_no = #{alloyNo},
pass_count = #{passCount},
in_thick = #{inThick},
out_thick = #{outThick},
out_width = #{outWidth},
status = #{status},
update_by = #{updateBy},
update_time = NOW(),
remark = #{remark}
WHERE id = #{id}
</update>
<update id="deleteById">
UPDATE mill_process_recipe SET del_flag = '2', update_time = NOW() WHERE id = #{id}
</update>
<update id="deleteBatchByIds">
UPDATE mill_process_recipe SET del_flag = '2', update_time = NOW()
WHERE id IN
<foreach collection="array" item="id" open="(" separator="," close=")">#{id}</foreach>
</update>
</mapper>

View File

@@ -0,0 +1,125 @@
<?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.ruoyi.mill.mapper.MillProductionPlanMapper">
<resultMap id="BaseRM" type="com.ruoyi.mill.domain.MillProductionPlan">
<id property="id" column="id"/>
<result property="planNo" column="plan_no"/>
<result property="matSeqNo" column="mat_seq_no"/>
<result property="unitCode" column="unit_code"/>
<result property="planType" column="plan_type"/>
<result property="planStatus" column="plan_status"/>
<result property="prodStatus" column="prod_status"/>
<result property="sortNo" column="sort_no"/>
<result property="inMatNo" column="in_mat_no"/>
<result property="inMatThick" column="in_mat_thick"/>
<result property="inMatWidth" column="in_mat_width"/>
<result property="inMatWt" column="in_mat_wt"/>
<result property="inMatLen" column="in_mat_len"/>
<result property="inMatInDia" column="in_mat_in_dia"/>
<result property="inMatDia" column="in_mat_dia"/>
<result property="pono" column="pono"/>
<result property="sgSign" column="sg_sign"/>
<result property="outMatNo" column="out_mat_no"/>
<result property="outThick" column="out_thick"/>
<result property="recipeId" column="recipe_id"/>
<result property="recipeNo" column="recipe_no"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<sql id="cols">
id, plan_no, mat_seq_no, unit_code, plan_type, plan_status, prod_status, sort_no,
in_mat_no, in_mat_thick, in_mat_width, in_mat_wt, in_mat_len, in_mat_in_dia, in_mat_dia,
pono, sg_sign, out_mat_no, out_thick, recipe_id, recipe_no,
del_flag, create_by, create_time, update_by, update_time, remark
</sql>
<select id="selectList" resultMap="BaseRM">
SELECT <include refid="cols"/> FROM mill_production_plan
WHERE del_flag = '0'
<if test="inMatNo != null and inMatNo != ''">
AND in_mat_no LIKE CONCAT('%', #{inMatNo}, '%')
</if>
<if test="sgSign != null and sgSign != ''">
AND sg_sign LIKE CONCAT('%', #{sgSign}, '%')
</if>
<if test="planStatus != null and planStatus != ''">
AND plan_status = #{planStatus}
</if>
<if test="params != null and params.beginTime != null and params.beginTime != ''">
AND DATE(create_time) >= #{params.beginTime}
</if>
<if test="params != null and params.endTime != null and params.endTime != ''">
AND DATE(create_time) &lt;= #{params.endTime}
</if>
ORDER BY sort_no ASC, id ASC
</select>
<select id="selectById" resultMap="BaseRM">
SELECT <include refid="cols"/> FROM mill_production_plan
WHERE id = #{id} AND del_flag = '0'
</select>
<select id="selectByPlanNo" resultMap="BaseRM">
SELECT <include refid="cols"/> FROM mill_production_plan
WHERE plan_no = #{planNo} AND del_flag = '0' LIMIT 1
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
INSERT INTO mill_production_plan (
plan_no, mat_seq_no, unit_code, plan_type, plan_status, prod_status, sort_no,
in_mat_no, in_mat_thick, in_mat_width, in_mat_wt, in_mat_len, in_mat_in_dia, in_mat_dia,
pono, sg_sign, out_mat_no, out_thick, recipe_id, recipe_no,
create_by, create_time, update_by, update_time, remark, del_flag
) VALUES (
#{planNo}, #{matSeqNo}, #{unitCode}, #{planType},
IFNULL(#{planStatus},'0'), IFNULL(#{prodStatus},'Idle'), IFNULL(#{sortNo},0),
#{inMatNo}, #{inMatThick}, #{inMatWidth}, #{inMatWt}, #{inMatLen}, #{inMatInDia}, #{inMatDia},
#{pono}, #{sgSign}, #{outMatNo}, #{outThick}, #{recipeId}, #{recipeNo},
#{createBy}, NOW(), #{updateBy}, NOW(), #{remark}, '0'
)
</insert>
<update id="update">
UPDATE mill_production_plan
SET plan_status = #{planStatus},
prod_status = #{prodStatus},
in_mat_no = #{inMatNo},
in_mat_thick = #{inMatThick},
in_mat_width = #{inMatWidth},
in_mat_wt = #{inMatWt},
in_mat_len = #{inMatLen},
in_mat_in_dia= #{inMatInDia},
in_mat_dia = #{inMatDia},
pono = #{pono},
sg_sign = #{sgSign},
out_mat_no = #{outMatNo},
out_thick = #{outThick},
recipe_id = #{recipeId},
recipe_no = #{recipeNo},
update_by = #{updateBy},
update_time = NOW(),
remark = #{remark}
WHERE id = #{id}
</update>
<update id="deleteById">
UPDATE mill_production_plan SET del_flag = '2', update_time = NOW() WHERE id = #{id}
</update>
<update id="incrementSortFrom">
UPDATE mill_production_plan SET sort_no = sort_no + 1
WHERE sort_no >= #{targetSort} AND del_flag = '0'
</update>
<update id="updateSortNo">
UPDATE mill_production_plan SET sort_no = #{sortNo} WHERE id = #{id}
</update>
</mapper>