通过生产报工更新生产任务和生产工单的进度;进行物料的消耗;进行产品的产出。

This commit is contained in:
DESKTOP-J7ED0MB\yinjinlu 2022-10-09 18:27:39 +08:00
parent 6559979ca8
commit 2d300808a7
19 changed files with 406 additions and 16 deletions

View File

@ -154,7 +154,7 @@ create table pro_route_process (
default_pre_time int(11) default 0 comment '准备时间',
default_suf_time int(11) default 0 comment '等待时间',
color_code char(7) default '#00AEF3' comment '甘特图显示颜色',
update_flag varchar(64) default 'N' comment '更新工单',
key_flag varchar(64) default 'N' comment '关键工序',
remark varchar(500) default '' comment '备注',
attr1 varchar(64) default null comment '预留字段1',
attr2 varchar(255) default null comment '预留字段2',

View File

@ -4,11 +4,19 @@ import java.math.BigDecimal;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.pro.domain.ProTask;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.utils.StringUtils;
import com.ktg.mes.pro.domain.*;
import com.ktg.mes.pro.service.IProRouteProcessService;
import com.ktg.mes.pro.service.IProTaskService;
import com.ktg.mes.pro.service.IProWorkorderService;
import com.ktg.mes.wm.domain.WmItemConsume;
import com.ktg.mes.wm.domain.WmProductProduce;
import com.ktg.mes.wm.domain.tx.ItemConsumeTxBean;
import com.ktg.mes.wm.domain.tx.ProductProductTxBean;
import com.ktg.mes.wm.service.IStorageCoreService;
import com.ktg.mes.wm.service.IWmItemConsumeService;
import com.ktg.mes.wm.service.IWmProductProduceService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
@ -44,9 +52,18 @@ public class ProFeedbackController extends BaseController
@Autowired
private IProTaskService proTaskService;
@Autowired
private IProRouteProcessService proRouteProcessService;
@Autowired
private IProWorkorderService proWorkorderService;
@Autowired
private IWmItemConsumeService wmItemConsumeService;
@Autowired
private IWmProductProduceService wmProductProduceService;
@Autowired
private IStorageCoreService storageCoreService;
@ -133,7 +150,7 @@ public class ProFeedbackController extends BaseController
public AjaxResult execute(@PathVariable("recordId") Long recordId){
ProFeedback feedback= proFeedbackService.selectProFeedbackByRecordId(recordId);
ProWorkorder workorder = proWorkorderService.selectProWorkorderByWorkorderId(feedback.getWorkorderId());
//更新生产任务的生产数量
ProTask task = proTaskService.selectProTaskByTaskId(feedback.getTaskId());
BigDecimal quantityProduced,quantityQuanlify,quantityUnquanlify;
@ -145,10 +162,49 @@ public class ProFeedbackController extends BaseController
task.setQuantityUnquanlify(quantityUnquanlify.add(feedback.getQuantityUnquanlified()));
proTaskService.updateProTask(task);
//如果是最后一道工序则更新当前工单的已生产数量
//如果是关键工序则更新当前工单的已生产数量进行产品产出动作
if(proRouteProcessService.checkKeyProcess(feedback)){
//更新生产工单的生产数量
workorder.setQuantityProduced(workorder.getQuantityProduced().add(feedback.getQuantityFeedback()));
proWorkorderService.updateProWorkorder(workorder);
//生成产品产出记录单
WmProductProduce productRecord = wmProductProduceService.generateProductProduce(feedback);
//执行产品产出入线边库
executeProductProduce(productRecord);
}
//根据当前工序的物料BOM配置进行物料消耗
//先生成消耗单
WmItemConsume itemConsume = wmItemConsumeService.generateItemConsume(feedback);
if(StringUtils.isNotNull(itemConsume)){
//再执行库存消耗动作
executeItemConsume(itemConsume);
}
return AjaxResult.success();
}
/**
* 执行产品产出入线边库动作
* @param record
*/
private void executeProductProduce(WmProductProduce record){
List<ProductProductTxBean> beans = wmProductProduceService.getTxBeans(record.getRecordId());
storageCoreService.processProductProduce(beans);
record.setStatus(UserConstants.ORDER_STATUS_FINISHED);
wmProductProduceService.updateWmProductProduce(record);
}
/**
* 执行物料消耗库存动作
* @param record
*/
private void executeItemConsume(WmItemConsume record){
List<ItemConsumeTxBean> beans = wmItemConsumeService.getTxBeans(record.getRecordId());
storageCoreService.processItemConsume(beans);
record.setStatus(UserConstants.ORDER_STATUS_FINISHED);
wmItemConsumeService.updateWmItemConsume(record);
}
}

View File

@ -27,6 +27,13 @@ public interface ProRouteMapper
*/
public List<ProRoute> selectProRouteList(ProRoute proRoute);
/**
* 根据物料查找生效的工艺路线
* @param itemId
* @return
*/
public ProRoute getRouteByProductId(Long itemId);
public ProRoute checkRouteCodeUnique(ProRoute proRoute);
/**

View File

@ -1,7 +1,10 @@
package com.ktg.mes.pro.service;
import java.util.List;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.pro.domain.ProRouteProductBom;
import com.ktg.mes.wm.domain.WmItemConsume;
/**
* 产品制程物料BOMService接口
@ -80,4 +83,6 @@ public interface IProRouteProductBomService
* @return
*/
public int deleteByRouteIdAndProductId(ProRouteProductBom proRouteProductBom);
}

View File

@ -27,6 +27,13 @@ public interface IProRouteService
*/
public List<ProRoute> selectProRouteList(ProRoute proRoute);
/**
* 根据物料查找生效的工艺路线
* @param itemId
* @return
*/
public ProRoute getRouteByProductId(Long itemId);
public String checkRouteCodeUnique(ProRoute proRoute);
/**

View File

@ -5,6 +5,8 @@ import java.util.List;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.utils.DateUtils;
import com.ktg.common.utils.StringUtils;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.wm.domain.WmItemConsume;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ktg.mes.pro.mapper.ProRouteProductBomMapper;

View File

@ -47,6 +47,12 @@ public class ProRouteServiceImpl implements IProRouteService
return proRouteMapper.selectProRouteList(proRoute);
}
@Override
public ProRoute getRouteByProductId(Long itemId) {
return proRouteMapper.getRouteByProductId(itemId);
}
@Override
public String checkRouteCodeUnique(ProRoute proRoute) {
ProRoute route = proRouteMapper.checkRouteCodeUnique(proRoute);

View File

@ -66,6 +66,18 @@ public class ItemConsumeTxBean extends BaseEntity {
/** 单据行ID */
private Long sourceDocLineId;
/** 事务数量 */
private BigDecimal transactionQuantity;
/** 生产工单ID **/
private Long workorderId;
/** 生产工单编号 **/
private String workorderCode;
public Long getMaterialStockId() {
return materialStockId;
}
@ -250,12 +262,6 @@ public class ItemConsumeTxBean extends BaseEntity {
this.workorderCode = workorderCode;
}
/** 事务数量 */
private BigDecimal transactionQuantity;
/** 生产工单ID **/
private Long workorderId;
@Override
public String toString() {
return "ItemConsumeTxBean{" +
@ -285,9 +291,6 @@ public class ItemConsumeTxBean extends BaseEntity {
'}';
}
/** 生产工单编号 **/
private String workorderCode;
}

View File

@ -2,6 +2,7 @@ package com.ktg.mes.wm.mapper;
import java.util.List;
import com.ktg.mes.wm.domain.WmItemConsume;
import com.ktg.mes.wm.domain.tx.ItemConsumeTxBean;
/**
* 物料消耗记录Mapper接口
@ -58,4 +59,6 @@ public interface WmItemConsumeMapper
* @return 结果
*/
public int deleteWmItemConsumeByRecordIds(Long[] recordIds);
public List<ItemConsumeTxBean> getTxBeans(Long recordId);
}

View File

@ -2,6 +2,7 @@ package com.ktg.mes.wm.mapper;
import java.util.List;
import com.ktg.mes.wm.domain.WmProductProduce;
import com.ktg.mes.wm.domain.tx.ProductProductTxBean;
/**
* 产品产出记录Mapper接口
@ -58,4 +59,6 @@ public interface WmProductProduceMapper
* @return 结果
*/
public int deleteWmProductProduceByRecordIds(Long[] recordIds);
public List<ProductProductTxBean> getTxBeans(Long recordId);
}

View File

@ -33,6 +33,18 @@ public interface IStorageCoreService {
*/
public void processRtIssue(List<RtIssueTxBean> lines);
/**
* 处理生产消耗
* @param lines
*/
public void processItemConsume(List<ItemConsumeTxBean> lines);
/**
* 处理产品产出
* @param lines
*/
public void processProductProduce(List<ProductProductTxBean> lines);
/**
* 处理产品入库
* @param lines

View File

@ -1,7 +1,10 @@
package com.ktg.mes.wm.service;
import java.util.List;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.wm.domain.WmItemConsume;
import com.ktg.mes.wm.domain.tx.ItemConsumeTxBean;
/**
* 物料消耗记录Service接口
@ -58,4 +61,13 @@ public interface IWmItemConsumeService
* @return 结果
*/
public int deleteWmItemConsumeByRecordId(Long recordId);
/**
* 根据生产报工单生成物料消耗记录
* @param feedback
* @return
*/
public WmItemConsume generateItemConsume(ProFeedback feedback);
public List<ItemConsumeTxBean> getTxBeans(Long recordId);
}

View File

@ -1,7 +1,10 @@
package com.ktg.mes.wm.service;
import java.util.List;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.wm.domain.WmProductProduce;
import com.ktg.mes.wm.domain.tx.ProductProductTxBean;
import com.ktg.mes.wm.domain.tx.ProductRecptTxBean;
/**
@ -60,6 +63,12 @@ public interface IWmProductProduceService
*/
public int deleteWmProductProduceByRecordId(Long recordId);
/**
* 根据报工记录生成对应的产品产出记录
* @param feedback
*/
public WmProductProduce generateProductProduce(ProFeedback feedback);
public List<ProductProductTxBean> getTxBeans(Long recordId);
}

View File

@ -1,7 +1,18 @@
package com.ktg.mes.wm.service.impl;
import java.util.Date;
import java.util.List;
import cn.hutool.core.collection.CollectionUtil;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.utils.DateUtils;
import com.ktg.mes.md.domain.MdWorkstation;
import com.ktg.mes.md.mapper.MdWorkstationMapper;
import com.ktg.mes.pro.domain.*;
import com.ktg.mes.pro.mapper.*;
import com.ktg.mes.wm.domain.WmItemConsumeLine;
import com.ktg.mes.wm.domain.tx.ItemConsumeTxBean;
import com.ktg.mes.wm.mapper.WmItemConsumeLineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ktg.mes.wm.mapper.WmItemConsumeMapper;
@ -20,6 +31,27 @@ public class WmItemConsumeServiceImpl implements IWmItemConsumeService
@Autowired
private WmItemConsumeMapper wmItemConsumeMapper;
@Autowired
private WmItemConsumeLineMapper wmItemConsumeLineMapper;
@Autowired
private ProWorkorderMapper proWorkorderMapper;
@Autowired
private ProTaskMapper proTaskMapper;
@Autowired
private MdWorkstationMapper mdWorkstationMapper;
@Autowired
private ProProcessMapper proProcessMapper;
@Autowired
private ProRouteMapper proRouteMapper;
@Autowired
private ProRouteProductBomMapper proRouteProductBomMapper;
/**
* 查询物料消耗记录
*
@ -93,4 +125,67 @@ public class WmItemConsumeServiceImpl implements IWmItemConsumeService
{
return wmItemConsumeMapper.deleteWmItemConsumeByRecordId(recordId);
}
@Override
public WmItemConsume generateItemConsume(ProFeedback feedback) {
ProWorkorder workorder = proWorkorderMapper.selectProWorkorderByWorkorderId(feedback.getWorkorderId());
MdWorkstation workstation = mdWorkstationMapper.selectMdWorkstationByWorkstationId(feedback.getWorkstationId());
ProProcess process = proProcessMapper.selectProProcessByProcessId(workstation.getProcessId());
ProTask task = proTaskMapper.selectProTaskByTaskId(feedback.getTaskId());
ProRoute route = proRouteMapper.getRouteByProductId(feedback.getItemId());
//生成消耗单头信息
WmItemConsume itemConsume = new WmItemConsume();
itemConsume.setWorkorderId(feedback.getWorkorderId());
itemConsume.setWorkorderCode(workorder.getWorkorderCode());
itemConsume.setWorkorderName(workorder.getWorkorderName());
itemConsume.setWorkstationId(feedback.getWorkstationId());
itemConsume.setWorkstationCode(workstation.getWorkstationCode());
itemConsume.setWorkstationName(workstation.getWorkstationName());
itemConsume.setTaskId(feedback.getTaskId());
itemConsume.setTaskCode(task.getTaskCode());
itemConsume.setTaskName(task.getTaskName());
itemConsume.setProcessId(process.getProcessId());
itemConsume.setProcessCode(process.getProcessCode());
itemConsume.setProcessName(process.getProcessName());
itemConsume.setConsumeDate(new Date());
itemConsume.setStatus(UserConstants.ORDER_STATUS_PREPARE);
wmItemConsumeMapper.insertWmItemConsume(itemConsume);
//生成行信息
//先获取当前生产的产品在此道工序中配置的物料BOM
ProRouteProductBom param = new ProRouteProductBom();
param.setProductId(feedback.getItemId());
param.setRouteId(route.getRouteId());
List<ProRouteProductBom> boms = proRouteProductBomMapper.selectProRouteProductBomList(param);
if(CollectionUtil.isNotEmpty(boms)){
for (ProRouteProductBom bom: boms
) {
WmItemConsumeLine line = new WmItemConsumeLine();
line.setRecordId(itemConsume.getRecordId());
line.setItemId(bom.getItemId());
line.setItemCode(bom.getItemCode());
line.setItemName(bom.getItemName());
line.setSpecification(bom.getSpecification());
line.setUnitOfMeasure(bom.getUnitOfMeasure());
line.setQuantityConsume(bom.getQuantity().multiply(feedback.getQuantity()));
line.setBatchCode(workorder.getBatchCode());
wmItemConsumeLineMapper.insertWmItemConsumeLine(line);
}
}else {
return null; //如果本道工序没有配置BOM物料则直接返回空
}
return itemConsume;
}
@Override
public List<ItemConsumeTxBean> getTxBeans(Long recordId) {
return wmItemConsumeMapper.getTxBeans(recordId);
}
}

View File

@ -1,7 +1,22 @@
package com.ktg.mes.wm.service.impl;
import java.util.Date;
import java.util.List;
import com.ktg.common.constant.UserConstants;
import com.ktg.common.utils.DateUtils;
import com.ktg.mes.md.domain.MdWorkstation;
import com.ktg.mes.md.mapper.MdWorkstationMapper;
import com.ktg.mes.pro.domain.ProFeedback;
import com.ktg.mes.pro.domain.ProProcess;
import com.ktg.mes.pro.domain.ProTask;
import com.ktg.mes.pro.domain.ProWorkorder;
import com.ktg.mes.pro.mapper.ProProcessMapper;
import com.ktg.mes.pro.mapper.ProTaskMapper;
import com.ktg.mes.pro.mapper.ProWorkorderMapper;
import com.ktg.mes.wm.domain.WmProductProduceLine;
import com.ktg.mes.wm.domain.tx.ProductProductTxBean;
import com.ktg.mes.wm.mapper.WmProductProduceLineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ktg.mes.wm.mapper.WmProductProduceMapper;
@ -20,6 +35,21 @@ public class WmProductProduceServiceImpl implements IWmProductProduceService
@Autowired
private WmProductProduceMapper wmProductProduceMapper;
@Autowired
private WmProductProduceLineMapper wmProductProduceLineMapper;
@Autowired
private ProWorkorderMapper proWorkorderMapper;
@Autowired
private ProTaskMapper proTaskMapper;
@Autowired
private MdWorkstationMapper mdWorkstationMapper;
@Autowired
private ProProcessMapper proProcessMapper;
/**
* 查询产品产出记录
*
@ -93,4 +123,53 @@ public class WmProductProduceServiceImpl implements IWmProductProduceService
{
return wmProductProduceMapper.deleteWmProductProduceByRecordId(recordId);
}
@Override
public WmProductProduce generateProductProduce(ProFeedback feedback) {
ProWorkorder workorder = proWorkorderMapper.selectProWorkorderByWorkorderId(feedback.getWorkorderId());
MdWorkstation workstation = mdWorkstationMapper.selectMdWorkstationByWorkstationId(feedback.getWorkstationId());
ProProcess process = proProcessMapper.selectProProcessByProcessId(workstation.getProcessId());
ProTask task = proTaskMapper.selectProTaskByTaskId(feedback.getTaskId());
//生成单据头信息
WmProductProduce productProduce = new WmProductProduce();
productProduce.setWorkorderId(feedback.getWorkorderId());
productProduce.setWorkorderCode(feedback.getWorkorderCode());
productProduce.setWorkorderName(feedback.getWorkorderName());
productProduce.setTaskId(feedback.getTaskId());
productProduce.setTaskCode(task.getTaskCode());
productProduce.setTaskName(task.getTaskName());
productProduce.setWorkstationId(feedback.getWorkstationId());
productProduce.setWorkstationCode(workstation.getWorkstationCode());
productProduce.setWorkstationName(workstation.getWorkstationName());
productProduce.setProcessId(process.getProcessId());
productProduce.setProcessCode(process.getProcessCode());
productProduce.setProcessName(process.getProcessName());
productProduce.setProduceDate(new Date());
productProduce.setStatus(UserConstants.ORDER_STATUS_PREPARE);
wmProductProduceMapper.insertWmProductProduce(productProduce);
//生成单据行信息; 以后如果是在生产过程中产生多种副产品可以在这里添加更多的行信息进行支持
WmProductProduceLine line = new WmProductProduceLine();
line.setRecordId(productProduce.getRecordId());
line.setItemId(feedback.getItemId());
line.setItemCode(feedback.getItemCode());
line.setItemName(feedback.getItemName());
line.setSpecification(feedback.getSpecification());
line.setUnitOfMeasure(feedback.getUnitOfMeasure());
line.setQuantityProduce(feedback.getQuantity());
line.setBatchCode(workorder.getBatchCode());
wmProductProduceLineMapper.insertWmProductProduceLine(line);
return productProduce;
}
@Override
public List<ProductProductTxBean> getTxBeans(Long recordId) {
return wmProductProduceMapper.getTxBeans(recordId);
}
}

View File

@ -40,6 +40,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where route_id = #{routeId}
</select>
<select id="getRouteByProductId" parameterType="Long" resultMap="ProRouteResult">
select r.*
from pro_route r
left join pro_route_product p
on p.route_id = r.route_id
where r.enable_flag = 'Y'
and p.item_id = #{itemId}
</select>
<select id="checkRouteCodeUnique" parameterType="ProRoute" resultMap="ProRouteResult">
<include refid="selectProRouteVo"/>
where route_code = #{routeCode} limit 1

View File

@ -31,6 +31,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap id="ItemConsumeTxBeanResult" type="ItemConsumeTxBean">
<result property="materialStockId" column="material_stock_id"></result>
<result property="itemId" column="item_id"></result>
<result property="itemCode" column="item_code"></result>
<result property="itemName" column="item_name"></result>
<result property="specification" column="specification"></result>
<result property="unitOfMeasure" column="unit_of_measure"></result>
<result property="batchCode" column="batch_code"></result>
<result property="warehouseId" column="warehouse_id"></result>
<result property="warehouseCode" column="warehouse_code"></result>
<result property="warehouseName" column="warehouse_name"></result>
<result property="locationId" column="location_id"></result>
<result property="locationCode" column="location_code"></result>
<result property="locationName" column="location_name"></result>
<result property="areaId" column="area_id"></result>
<result property="areaCode" column="area_code"></result>
<result property="areaName" column="area_name"></result>
<result property="sourceDocType" column="source_doc_type"></result>
<result property="sourceDocId" column="source_doc_id"></result>
<result property="sourceDocCode" column="source_doc_code"></result>
<result property="sourceDocLineId" column="source_doc_line_id"></result>
<result property="transactionQuantity" column="transaction_quantity"></result>
<result property="workorderId" column="workorder_id"></result>
<result property="workorderCode" column="workorder_code"></result>
<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="selectWmItemConsumeVo">
select record_id, workorder_id, workorder_code, workorder_name, task_id, task_code, task_name, workstation_id, workstation_code, workstation_name, process_id, process_code, process_name, consume_date, status, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_item_consume
</sql>
@ -59,7 +88,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWmItemConsumeVo"/>
where record_id = #{recordId}
</select>
<select id="getTxBeans" parameterType="Long" resultMap="ItemConsumeTxBeanResult">
SELECT irl.`item_id`,irl.`item_code`,irl.`item_name`,irl.`specification`,irl.`unit_of_measure`,irl.`batch_code`,
irl.`warehouse_id`,irl.`warehouse_code`,irl.`warehouse_name`,irl.`location_id`,irl.`location_code`,irl.`location_name`,irl.`area_id`,irl.`area_code`,irl.`area_name`,
'ITEM_CONSUME' AS source_doc_type,ir.`record_id` AS source_doc_id,"" AS source_doc_code,irl.`line_id` AS source_doc_line_id,
irl.`quantity_consume` AS transaction_quantity,ir.workorder_id,ir.workorder_code,
ir.`create_by`,ir.`create_time`,ir.`update_by`,ir.`update_time`
FROM wm_item_consume ir
LEFT JOIN wm_item_consume_line irl
ON ir.record_id = irl.`record_id`
WHERE ir.`record_id` = #{recordId}
</select>
<insert id="insertWmItemConsume" parameterType="WmItemConsume" useGeneratedKeys="true" keyProperty="recordId">
insert into wm_item_consume
<trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -31,6 +31,35 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateTime" column="update_time" />
</resultMap>
<resultMap id="ProductProductTxBeanResult" type="ProductProductTxBean">
<result property="itemId" column="item_id"></result>
<result property="itemCode" column="item_code"></result>
<result property="itemName" column="item_name"></result>
<result property="specification" column="specification"></result>
<result property="unitOfMeasure" column="unit_of_measure"></result>
<result property="batchCode" column="batch_code"></result>
<result property="warehouseId" column="warehouse_id"></result>
<result property="warehouseCode" column="warehouse_code"></result>
<result property="warehouseName" column="warehouse_name"></result>
<result property="locationId" column="location_id"></result>
<result property="locationCode" column="location_code"></result>
<result property="locationName" column="location_name"></result>
<result property="areaId" column="area_id"></result>
<result property="areaCode" column="area_code"></result>
<result property="areaName" column="area_name"></result>
<result property="sourceDocType" column="source_doc_type"></result>
<result property="sourceDocId" column="source_doc_id"></result>
<result property="sourceDocCode" column="source_doc_code"></result>
<result property="sourceDocLineId" column="source_doc_line_id"></result>
<result property="transactionQuantity" column="transaction_quantity"></result>
<result property="workorderId" column="workorder_id"></result>
<result property="workorderCode" column="workorder_code"></result>
<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="selectWmProductProduceVo">
select record_id, workorder_id, workorder_code, workorder_name, task_id, task_code, task_name, workstation_id, workstation_code, workstation_name, process_id, process_code, process_name, produce_date, status, remark, attr1, attr2, attr3, attr4, create_by, create_time, update_by, update_time from wm_product_produce
</sql>
@ -59,7 +88,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectWmProductProduceVo"/>
where record_id = #{recordId}
</select>
<select id="getTxBeans" parameterType="Long" resultMap="ProductProductTxBeanResult">
SELECT irl.`item_id`,irl.`item_code`,irl.`item_name`,irl.`specification`,irl.`unit_of_measure`,irl.`batch_code`,
irl.`warehouse_id`,irl.`warehouse_code`,irl.`warehouse_name`,irl.`location_id`,irl.`location_code`,irl.`location_name`,irl.`area_id`,irl.`area_code`,irl.`area_name`,
'PRODUCT_PRODUCT' AS source_doc_type,ir.`record_id` AS source_doc_id,"" AS source_doc_code,irl.`line_id` AS source_doc_line_id,
irl.`quantity_produce` AS transaction_quantity,ir.workorder_id,ir.workorder_code,
ir.`create_by`,ir.`create_time`,ir.`update_by`,ir.`update_time`
FROM wm_product_produce ir
LEFT JOIN wm_product_produce_line irl
ON ir.record_id = irl.`record_id`
WHERE ir.`record_id` = #{recordId}
</select>
<insert id="insertWmProductProduce" parameterType="WmProductProduce" useGeneratedKeys="true" keyProperty="recordId">
insert into wm_product_produce
<trim prefix="(" suffix=")" suffixOverrides=",">