philip 4 years ago
parent 817f186c59
commit 9798e037ac

@ -3,9 +3,19 @@ package com.foreverwin.mesnac.meapi.dto;
import com.foreverwin.mesnac.meapi.model.Sfc;
public class SfcDto extends Sfc {
String resrce;
private String resrce;
String operation;
private String operation;
private String workCenter;
public String getWorkCenter() {
return workCenter;
}
public void setWorkCenter(String workCenter) {
this.workCenter = workCenter;
}
public String getOperation() {
return operation;

@ -599,7 +599,7 @@
<!-- BaseMapper标准查询/修改/删除 -->
<select id="selectOperationBySfcBo" resultMap="BaseResultMap">
SELECT OP.HANDLE, OP.OPERATION,OT.DESCRIPTION FROM SFC_ROUTING SR
JOIN SFC_ROUTER SR2 ON SR.HANDLE =SR2.SFC_ROUTING_BO
JOIN SFC_ROUTER SR2 ON SR.HANDLE =SR2.SFC_ROUTING_BO AND SR2.IN_USE = 'true'
JOIN SFC_STEP SS ON SR2.HANDLE =SS.SFC_ROUTER_BO
JOIN OPERATION OP ON 'OperationBO:'|| OP.SITE ||','|| OP.OPERATION||',#'=SS.OPERATION_BO
LEFT JOIN OPERATION_T OT ON OP.HANDLE = OT.OPERATION_BO AND OT.LOCALE = #{locale}

@ -1,13 +1,12 @@
package com.foreverwin.mesnac.production.controller;
import com.foreverwin.mesnac.meapi.dto.WorkCenterDto;
import com.foreverwin.mesnac.meapi.dto.SfcDto;
import com.foreverwin.mesnac.meapi.dto.WorkCenterDto;
import com.foreverwin.mesnac.production.service.PodTemplateService;
import com.foreverwin.modular.core.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@ -24,7 +23,7 @@ public class PodTemplateController {
*/
@ResponseBody
@GetMapping("/resrceEnter")
public R resrceEnter(@RequestBody WorkCenterDto workCenterDto) {
public R resrceEnter(WorkCenterDto workCenterDto) {
return R.ok(podTemplateService.resrceEnter(workCenterDto));
}
@ -35,7 +34,7 @@ public class PodTemplateController {
*/
@ResponseBody
@GetMapping("/sfcEnter")
public R sfcEnter(@RequestBody SfcDto sfcDto) {
public R sfcEnter(SfcDto sfcDto) {
return R.ok(podTemplateService.sfcEnter(sfcDto));
}
}

@ -0,0 +1,97 @@
package com.foreverwin.mesnac.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.foreverwin.mesnac.meapi.dto.SfcDto;
import com.foreverwin.mesnac.meapi.model.Sfc;
import com.foreverwin.mesnac.meapi.model.ShopOrder;
import com.foreverwin.mesnac.production.model.StepOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* : sfc
* : philip
* : 2021-6-29 15:56
*/
@Repository
public interface SfcCrossMapper extends BaseMapper {
/**
* SFC
* @param dataField
* @param dataAttr
* @return
*/
List<Sfc> findBindingBarcode(@Param("dataField") String dataField,
@Param("dataAttr") String dataAttr,
@Param("site") String site,
@Param("statusBoList") List<String> statusBoList);
/**
* 线, Sequence
* @param routerBo
* @return
*/
List<StepOperation> findRouterOperationByRouterBo(@Param("site") String site, @Param("routerBo") String routerBo, @Param("locale") String locale);
// String getDoneSfcItemBo(IPage page, @Param("dataAttr") String dataAttr,
// @Param("site") String site, @Param("statusBo") String statusBo);
/**
* SFCSN
* @param site
* @param shopOrderRef
* @return
*/
List<Sfc> findOpenStatusSnByShopOrder(@Param("site") String site, @Param("shopOrderRef") String shopOrderRef);
/**
* 线
* @param plannedWorkCenterBo
* @param customStatus
* @return
*/
List<ShopOrder> findShopOrderListByStatus(@Param("plannedWorkCenterBo") String plannedWorkCenterBo,
@Param("status") String customStatus);
//List<Map<String, Object>> findSfcListBySnList(@Param("site") String site, @Param("snList") List<String> snList);
/**
* 线
* @param page
* @param routerBo
* @return
*/
StepOperation findRouterLastOperationByRouterBo(IPage page, @Param("routerBo") String routerBo);
/**
* SNSFC
* @param page
* @param site
* @param sn
* @return
*/
Sfc findSfcBySn(IPage page, @Param("site") String site, @Param("sn") String sn);
/**
* SNSFC
* @param page
* @param site
* @param sn
* @return
*/
Sfc findSfcBySnContainComplete(IPage page, @Param("site") String site, @Param("sn") String sn);
List<StepOperation> getResourceBySfc(@Param("site") String site, @Param("sfc") String sfc);
Map<String, Object> querySfcData(@Param("site")String site, @Param("locale")String locale, @Param("dto")SfcDto sfcDto);
List<Map<String, Object>> querySfcStep(@Param("site")String site, @Param("sfc")String sfc, @Param("operation")String operation);
}

@ -0,0 +1,113 @@
package com.foreverwin.mesnac.production.model;
import java.math.BigDecimal;
/**
* :
* : philip
* : 2021-6-29 08:48
*/
public class StepOperation {
private String operationBo;
private String operation;
private String description;
private String stepId;
private String erpOperation;
private BigDecimal sequence;
/** 步骤排队数量 **/
private BigDecimal qtyInQueue;
/** 步骤在制数量 **/
private BigDecimal qtyInWork;
private String reportingCenterBo;
private String resourceBo;
public String getResourceBo() {
return resourceBo;
}
public void setResourceBo(String resourceBo) {
this.resourceBo = resourceBo;
}
public String getOperationBo() {
return operationBo;
}
public void setOperationBo(String operationBo) {
this.operationBo = operationBo;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getStepId() {
return stepId;
}
public void setStepId(String stepId) {
this.stepId = stepId;
}
public BigDecimal getSequence() {
return sequence;
}
public void setSequence(BigDecimal sequence) {
this.sequence = sequence;
}
public String getReportingCenterBo() {
return reportingCenterBo;
}
public void setReportingCenterBo(String reportingCenterBo) {
this.reportingCenterBo = reportingCenterBo;
}
public BigDecimal getQtyInQueue() {
return qtyInQueue;
}
public void setQtyInQueue(BigDecimal qtyInQueue) {
this.qtyInQueue = qtyInQueue;
}
public BigDecimal getQtyInWork() {
return qtyInWork;
}
public void setQtyInWork(BigDecimal qtyInWork) {
this.qtyInWork = qtyInWork;
}
public String getErpOperation() {
return erpOperation;
}
public void setErpOperation(String erpOperation) {
this.erpOperation = erpOperation;
}
}

@ -8,5 +8,5 @@ import java.util.Map;
public interface PodTemplateService {
Map<String, Object> resrceEnter(WorkCenterDto workCenterDto);
Object sfcEnter(SfcDto workCenterDto);
Map<String, Object> sfcEnter(SfcDto workCenterDto);
}

@ -5,14 +5,17 @@ import com.foreverwin.mesnac.common.service.CommonService;
import com.foreverwin.mesnac.common.util.StringUtil;
import com.foreverwin.mesnac.meapi.dto.SfcDto;
import com.foreverwin.mesnac.meapi.dto.WorkCenterDto;
import com.foreverwin.mesnac.meapi.model.Operation;
import com.foreverwin.mesnac.meapi.model.Resrce;
import com.foreverwin.mesnac.meapi.model.Sfc;
import com.foreverwin.mesnac.meapi.service.ResrceService;
import com.foreverwin.mesnac.meapi.service.SfcService;
import com.foreverwin.mesnac.production.mapper.SfcCrossMapper;
import com.foreverwin.mesnac.production.service.PodTemplateService;
import com.foreverwin.modular.core.exception.BaseException;
import com.foreverwin.modular.core.util.CommonMethods;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -30,6 +33,8 @@ public class PodTemplateServiceImpl implements PodTemplateService {
private SfcService sfcService;
@Autowired
private CommonService commonService;
@Autowired
private SfcCrossMapper sfcCrossMapper;
@Override
public Map<String, Object> resrceEnter(WorkCenterDto workCenterDto) {
@ -60,135 +65,135 @@ public class PodTemplateServiceImpl implements PodTemplateService {
}
@Override
public Object sfcEnter(SfcDto sfcDto) {
// String site = CommonMethods.getSite();
// String sfc = sfcDto.getSfc();
// String operation = sfcDto.getOperation();
// //校验产品条码是否存在
// Sfc sfcById = sfcService.getById(HandleEnum.SFC.getHandle(site, sfc));
// if (sfcById==null){
// throw new BaseException("产品条码"+sfc+"不存在");
// }
// //校验产品条码是否在当前工序排队
// Operation operationBySfcBo = commonService.getOperationBySfcBo(sfcById.getHandle());
// if (!operationBySfcBo.getOperation().equals(operation)){
// throw new BaseException("产品条码"+sfc+"在"+operationBySfcBo.getDescription()+"工序");
// }
// //校验SFC+工序+设备+STEP_ID是否与当前设备确认的派工单匹配
//
// String substep = "";
// String substepHandle = "";
// //构造前台所需要的数据
// Map<String, Object> resultMap = sfcDataMainMapper.querySfcData(paramMap);
// if(resultMap == null){
// throw new BaseException("根据当前资源未找到条码[" + sfc + "]的基本信息!");
// }
// List<Map<String, Object>> substepList = sfcDataMainMapper.querySfcStep(site, sfc, operation);
// resultMap.put("SFC_STEP_LIST", substepList);
//
// String stepId = (String) resultMap.get("STEP_ID");
// //2021/1/20 roc 根据SFC和步骤标识查找是否维护了尾检项
// List<Map<String, Object>> checkOperationCheckW = sfcDataMainMapper.checkOperationCheckW(site, sfc, stepId);
// if(null != checkOperationCheckW && checkOperationCheckW.size() >0){
// resultMap.put("IS_CREATE_W", "Y");
// }else{
// resultMap.put("IS_CREATE_W", "N");
// }
//
// String isCreateH = "Y";
// String isCreateZ = "Y";
// if(!"403".equals(resultMap.get("STATUS"))) {
// //SFC未开始
// //判断对否需要进行互检
// List<Map<String, Object>> checkOperationCheckH = sfcDataMainMapper.checkOperationCheckH(site, sfc, stepId);
// if(checkOperationCheckH.size() > 0 ){
// resultMap.put("IS_CHECK_H", "Y");
// //自检/互检 校验是否在当前工序+工序标识 做过检验任务
// List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId);
// if (checkList.size() > 0) {
// for (int i = 0; i < checkList.size(); i++) {
// if (checkList.get(i).get("STATUS").equals("COMPLETE") && checkList.get(i).get("RESULT").equals("OK")) {
// isCreateH = "N";
// }
// }
// }
//
// }
// }else{
// //sfc已开始
// for (int i = 0; i < substepList.size(); i++) {
// if ("READY".equals(substepList.get(i).get("STATE")) && "true".equals(substepList.get(i).get("IS_SEQTRUE"))) {
// substep = (String) substepList.get(i).get("STEP_ID");
// substepHandle = (String) substepList.get(i).get("HANDLE");
// }
// }
// //判断是否存在工步
// if(StringUtils.isEmpty(substep)){
// //判断对否需要进行自检(无工步)
// List<Map<String, Object>> checkOperationCheckZ = sfcDataMainMapper.checkOperationCheckZ(site, sfc, stepId);
// if(checkOperationCheckZ.size() > 0 ){
// resultMap.put("IS_CHECK_Z", "Y");
// //自检/互检 校验是否在当前工序+工序标识 做过检验任务
// List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "Z", (String) resultMap.get("OPERATION"), stepId);
// if (checkList.size() > 0) {
// for (int i = 0; i < checkList.size(); i++) {
// if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
// isCreateZ = "N";
// }
// }
// }
//
// }
//
// //判断对否需要进行互检(无工步)
// List<Map<String, Object>> checkOperationCheckH = sfcDataMainMapper.checkOperationCheckH(site, sfc, stepId);
// if(checkOperationCheckH.size() > 0 ){
// resultMap.put("IS_CHECK_H", "Y");
// //自检/互检 校验是否在当前工序+工序标识 做过检验任务
// List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId);
// if (checkList.size() > 0) {
// for (int i = 0; i < checkList.size(); i++) {
// if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
// isCreateH = "N";
// }
// }
// }
// }
// }else{
// //判断对否需要进行自检(有工步)
// List<Map<String, Object>> checkSubstepCheckZ = sfcDataMainMapper.checkSubstepCheckZ(substepHandle);
// if(checkSubstepCheckZ.size() > 0 ){
// resultMap.put("IS_CHECK_Z", "Y");
// //自检/互检 校验是否在当前工序+工序+工步标识 做过检验任务
// List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfcDetail(sfc, site, "Z", (String) resultMap.get("OPERATION"), stepId, substep);
// if (checkList.size() > 0) {
// for (int i = 0; i < checkList.size(); i++) {
// if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
// isCreateZ = "N";
// }
// }
// }
//
// }
//
// //判断对否需要进行互检(有工步)
// List<Map<String, Object>> checkSubstepCheckH = sfcDataMainMapper.checkSubstepCheckH(substepHandle);
// if(checkSubstepCheckH.size() > 0 ){
// resultMap.put("IS_CHECK_H", "Y");
// //自检/互检 校验是否在当前工序+工序标识 做过检验任务
// List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfcDetail(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId, substep);
// if (checkList.size() > 0) {
// for (int i = 0; i < checkList.size(); i++) {
// if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
// isCreateH = "N";
// }
// }
// }
// }
// }
// }
// resultMap.put("IS_CREATE_H", isCreateH);
// resultMap.put("IS_CREATE_Z", isCreateZ);
public Map<String, Object> sfcEnter(SfcDto sfcDto) {
String site = CommonMethods.getSite();
String sfc = sfcDto.getSfc();
String operation = sfcDto.getOperation();
String locale = LocaleContextHolder.getLocale().getLanguage();
//校验产品条码是否存在
Sfc sfcById = sfcService.getById(HandleEnum.SFC.getHandle(site, sfc));
if (sfcById==null){
throw new BaseException("产品条码"+sfc+"不存在");
}
//校验产品条码是否在当前工序排队
Operation operationBySfcBo = commonService.getOperationBySfcBo(sfcById.getHandle());
if (StringUtil.notBlank(operation)&&!operationBySfcBo.getOperation().equals(operation)){
throw new BaseException("产品条码"+sfc+"在"+operationBySfcBo.getOperation()+"/"+operationBySfcBo.getDescription()+"工序");
}
//校验SFC+工序+设备+STEP_ID是否与当前设备确认的派工单匹配
String substep = "";
String substepHandle = "";
//构造前台所需要的数据
Map<String, Object> resultMap = sfcCrossMapper.querySfcData(site,locale,sfcDto);
if(resultMap == null){
throw new BaseException("根据当前资源未找到条码[" + sfc + "]的基本信息!");
}
List<Map<String, Object>> substepList = sfcCrossMapper.querySfcStep(site, sfc, operation);
resultMap.put("SFC_STEP_LIST", substepList);
String stepId = (String) resultMap.get("STEP_ID");
//2021/1/20 roc 根据SFC和步骤标识查找是否维护了尾检项
/*List<Map<String, Object>> checkOperationCheckW = sfcDataMainMapper.checkOperationCheckW(site, sfc, stepId);
if(null != checkOperationCheckW && checkOperationCheckW.size() >0){
resultMap.put("IS_CREATE_W", "Y");
}else{
resultMap.put("IS_CREATE_W", "N");
}*/
resultMap.put("IS_CREATE_W", "N");
String isCreateH = "N";
String isCreateZ = "N";
/*if(!"403".equals(resultMap.get("STATUS"))) {
//SFC未开始
//判断对否需要进行互检
*//* List<Map<String, Object>> checkOperationCheckH = sfcDataMainMapper.checkOperationCheckH(site, sfc, stepId);
if(checkOperationCheckH.size() > 0 ){
resultMap.put("IS_CHECK_H", "Y");
//自检/互检 校验是否在当前工序+工序标识 做过检验任务
List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId);
if (checkList.size() > 0) {
for (int i = 0; i < checkList.size(); i++) {
if (checkList.get(i).get("STATUS").equals("COMPLETE") && checkList.get(i).get("RESULT").equals("OK")) {
isCreateH = "N";
}
}
}
}*//*
}else{
//sfc已开始
for (int i = 0; i < substepList.size(); i++) {
if ("READY".equals(substepList.get(i).get("STATE")) && "true".equals(substepList.get(i).get("IS_SEQTRUE"))) {
substep = (String) substepList.get(i).get("STEP_ID");
substepHandle = (String) substepList.get(i).get("HANDLE");
}
}
//判断是否存在工步
if(StringUtil.isEmpty(substep)){
//判断对否需要进行自检(无工步)
List<Map<String, Object>> checkOperationCheckZ = sfcDataMainMapper.checkOperationCheckZ(site, sfc, stepId);
if(checkOperationCheckZ.size() > 0 ){
resultMap.put("IS_CHECK_Z", "Y");
//自检/互检 校验是否在当前工序+工序标识 做过检验任务
List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "Z", (String) resultMap.get("OPERATION"), stepId);
if (checkList.size() > 0) {
for (int i = 0; i < checkList.size(); i++) {
if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
isCreateZ = "N";
}
}
}
}
//判断对否需要进行互检(无工步)
List<Map<String, Object>> checkOperationCheckH = sfcDataMainMapper.checkOperationCheckH(site, sfc, stepId);
if(checkOperationCheckH.size() > 0 ){
resultMap.put("IS_CHECK_H", "Y");
//自检/互检 校验是否在当前工序+工序标识 做过检验任务
List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfc(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId);
if (checkList.size() > 0) {
for (int i = 0; i < checkList.size(); i++) {
if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
isCreateH = "N";
}
}
}
}
}else{
//判断对否需要进行自检(有工步)
List<Map<String, Object>> checkSubstepCheckZ = sfcDataMainMapper.checkSubstepCheckZ(substepHandle);
if(checkSubstepCheckZ.size() > 0 ){
resultMap.put("IS_CHECK_Z", "Y");
//自检/互检 校验是否在当前工序+工序+工步标识 做过检验任务
List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfcDetail(sfc, site, "Z", (String) resultMap.get("OPERATION"), stepId, substep);
if (checkList.size() > 0) {
for (int i = 0; i < checkList.size(); i++) {
if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
isCreateZ = "N";
}
}
}
}
//判断对否需要进行互检(有工步)
List<Map<String, Object>> checkSubstepCheckH = sfcDataMainMapper.checkSubstepCheckH(substepHandle);
if(checkSubstepCheckH.size() > 0 ){
resultMap.put("IS_CHECK_H", "Y");
//自检/互检 校验是否在当前工序+工序标识 做过检验任务
List<Map<String, Object>> checkList = taskMapper.checkCreateTaskSfcDetail(sfc, site, "H", (String) resultMap.get("OPERATION"), stepId, substep);
if (checkList.size() > 0) {
for (int i = 0; i < checkList.size(); i++) {
if (checkList.get(i).get("STATUS").equals("COMPLETE") && "OK".equals(checkList.get(i).get("RESULT"))) {
isCreateH = "N";
}
}
}
}
}
}*/
resultMap.put("IS_CREATE_H", isCreateH);
resultMap.put("IS_CREATE_Z", isCreateZ);
return null;
}
}

@ -0,0 +1,211 @@
<?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.foreverwin.mesnac.production.mapper.SfcCrossMapper">
<resultMap id="StepOperationMap" type="com.foreverwin.mesnac.production.model.StepOperation">
<result property="operationBo" column="OPERATION_BO" />
<result property="stepId" column="STEP_ID" />
<result property="sequence" column="SEQUENCE" javaType="java.math.BigDecimal" />
<result property="reportingCenterBo" column="REPORTING_CENTER_BO" />
<result property="operation" column="OPERATION" />
<result property="description" column="DESCRIPTION" />
<result property="resourceBo" column="RESOURCE_BO" />
</resultMap>
<select id="findBindingBarcode" resultMap="com.foreverwin.mesnac.meapi.mapper.SfcMapper.BaseResultMap">
SELECT
SFC.HANDLE,
SFC.SFC,
SFC.SHOP_ORDER_BO,
SFC.STATUS_BO
FROM SFC SFC
JOIN SFC_DATA DT ON DT.SFC_BO = SFC.HANDLE AND DT.DATA_FIELD = #{dataField}
WHERE DT.DATA_ATTR = #{dataAttr}
AND SFC.SITE = #{site}
<if test="statusBoList != null and statusBoList.size() > 0">
AND SFC.STATUS_BO IN
<foreach collection="statusBoList" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
ORDER BY DT.DATE_TIME DESC
</select>
<select id="findRouterOperationByRouterBo" resultMap="StepOperationMap">
SELECT
STEP.STEP_ID ,
STEP."SEQUENCE",
STEP.REPORTING_CENTER_BO,
STEP.ERP_OPERATION ,
OP.HANDLE AS OPERATION_BO,
OP.OPERATION ,
OPT.DESCRIPTION
FROM ROUTER R
JOIN ROUTER_STEP STEP ON R.HANDLE = STEP.ROUTER_BO
JOIN ROUTER_OPERATION RO ON STEP.HANDLE = RO.ROUTER_STEP_BO
JOIN OPERATION OP ON 'OperationBO:' || #{site} || ',' || OP.OPERATION || ',#' = RO.OPERATION_BO AND OP.CURRENT_REVISION = 'true'
JOIN OPERATION_T OPT ON OP.HANDLE = OPT.OPERATION_BO AND OPT.LOCALE='zh'
WHERE R.HANDLE = #{routerBo}
AND OP.SITE = #{site}
AND OPT.LOCALE = #{locale}
ORDER BY STEP."SEQUENCE"
</select>
<select id="findRouterLastOperationByRouterBo" resultMap="StepOperationMap">
SELECT
STEP.STEP_ID ,
STEP."SEQUENCE",
RO.OPERATION_BO
FROM ROUTER R
JOIN ROUTER_STEP STEP ON R.HANDLE = STEP.ROUTER_BO
JOIN ROUTER_OPERATION RO ON STEP.HANDLE = RO.ROUTER_STEP_BO
WHERE R.HANDLE = #{routerBo}
ORDER BY STEP."SEQUENCE" DESC
</select>
<select id="findShopOrderListByStatus" resultMap="com.foreverwin.mesnac.meapi.mapper.ShopOrderMapper.BaseResultMap">
SELECT
ORD.HANDLE,
ORD.SHOP_ORDER,
ORD.PLANNED_ITEM_BO,
ORD.ITEM_BO
FROM SHOP_ORDER ORD
JOIN CUSTOM_FIELDS CF ON ORD.HANDLE = CF.HANDLE AND CF.ATTRIBUTE = 'WORK_ORDER_STATUS'
WHERE ORD.PLANNED_WORK_CENTER_BO = #{plannedWorkCenterBo}
AND CF.VALUE = #{status}
</select>
<select id="findOpenStatusSnByShopOrder" resultMap="com.foreverwin.mesnac.meapi.mapper.SfcMapper.BaseResultMap">
SELECT
SFC.SFC,
SFC.QTY ,
SFC.CREATED_DATE_TIME
FROM SFC SFC
WHERE SFC.SHOP_ORDER_BO = #{shopOrderRef}
AND SFC.SITE = #{site}
AND SFC.STATUS_BO IN ('StatusBO:' || #{site} || ',403', 'StatusBO:' || #{site} || ',402')
ORDER BY SFC.CREATED_DATE_TIME DESC
</select>
<select id="findSfcBySn" resultMap="com.foreverwin.mesnac.meapi.mapper.SfcMapper.BaseResultMap">
SELECT
SFC.HANDLE,
SFC.SFC,
SFC.STATUS_BO,
SFC.SHOP_ORDER_BO,
SFC.QTY,
SFC.ITEM_BO
FROM SFC SFC
JOIN SFC_DATA SD ON SFC.HANDLE = SD.SFC_BO AND SD.DATA_FIELD = 'SN'
WHERE SFC.SITE = #{site}
AND SD.DATA_ATTR = #{sn}
AND SFC.STATUS_BO IN ('StatusBO:' || #{site} || ',403', 'StatusBO:' || #{site} || ',402' , 'StatusBO:'|| #{site} || ',401')
ORDER BY SFC.CREATED_DATE_TIME DESC
</select>
<select id="findSfcBySnContainComplete" resultMap="com.foreverwin.mesnac.meapi.mapper.SfcMapper.BaseResultMap">
SELECT
SFC.HANDLE,
SFC.SFC,
SFC.STATUS_BO,
SFC.SHOP_ORDER_BO,
SFC.QTY,
SFC.ITEM_BO
FROM SFC SFC
JOIN SFC_DATA SD ON SFC.HANDLE = SD.SFC_BO AND SD.DATA_FIELD = 'SN'
WHERE SFC.SITE = #{site}
AND SD.DATA_ATTR = #{sn}
AND SFC.STATUS_BO IN ('StatusBO:' || #{site} || ',403', 'StatusBO:' || #{site} || ',402','StatusBO:' || #{site} || ',405')
ORDER BY SFC.CREATED_DATE_TIME DESC
</select>
<select id="getResourceBySfc" resultMap="StepOperationMap">
select siw.RESOURCE_BO
from sfc as sfc
inner join sfc_routing as sri on sfc.handle = sri.sfc_bo
inner join sfc_router as srt on sri.handle = srt.sfc_routing_bo
inner join sfc_step as sep on srt.handle = sep.sfc_router_bo
INNER JOIN SFC_IN_WORK siw ON sep.HANDLE = siw.SFC_STEP_BO
WHERE sfc.site = #{site} and
sfc.SFC = #{sfc}
</select>
<select id="querySfcData" resultType="map">
SELECT SO.SHOP_ORDER, SO_CF.VALUE ITEM_NUMBER, I.ITEM, IT.DESCRIPTION ITEM_DESC,
CASE WHEN ST.STATUS='403' AND SS.QTY_IN_QUEUE > 0 THEN N'402' ELSE ST.STATUS END STATUS,
OP.OPERATION, OT.DESCRIPTION OPERATION_DESC,OP.OPERATION||'/'||RS.STEP_ID OPERATION_STEP,
RO_CF2.VALUE TOOL ,SOD.HANDLE SFC_DISPATCH_DETAIL_BO,
S.SFC,S.QTY SFC_QTY,RS.STEP_ID, SOD.DISPATCH_NO ,
TO_CHAR( SOD.PLANNED_START_DATE + INTERVAL '8' HOUR,'yyyy-mm-dd hh24:mi:ss')START_DATE,
TO_CHAR(SOD.PLANNED_COMPLETE_DATE + INTERVAL '8' HOUR ,'yyyy-mm-dd hh24:mi:ss')COMP_DATE,
TO_CHAR((SOD.PLANNED_COMPLETE_DATE - SOD.PLANNED_START_DATE )*24,'fm9999999990.00')||'H' ADD_DATE,
CASE WHEN OT.DESCRIPTION LIKE 'CH%' THEN SUBSTR(OT.DESCRIPTION, 0, 3) ELSE N'' END SLOT
FROM SFC S
INNER JOIN STATUS ST ON ST.HANDLE = S.STATUS_BO
INNER JOIN SFC_ROUTING SR ON SR.SFC_BO = S.HANDLE
INNER JOIN SFC_ROUTER SRO ON SRO.SFC_ROUTING_BO = SR.HANDLE AND SRO.IN_USE = 'true'
INNER JOIN SFC_STEP SS ON SS.SFC_ROUTER_BO = SRO.HANDLE AND (SS.QTY_IN_QUEUE > 0 OR SS.QTY_IN_WORK > 0)
INNER JOIN ROUTER RO ON SRO.ROUTER_BO = RO.HANDLE
INNER JOIN ROUTER_STEP RS ON RS.ROUTER_BO = RO.HANDLE AND RS.STEP_ID = SS.STEP_ID
INNER JOIN ROUTER_OPERATION ROP ON ROP.HANDLE = RS.ROUTER_COMP_GBO AND SS.OPERATION_BO = ROP.OPERATION_BO
LEFT JOIN CUSTOM_FIELDS RO_CF2 ON RO_CF2.HANDLE = ROP.HANDLE AND RO_CF2."ATTRIBUTE" = 'TOOL_NUMBER'
INNER JOIN OPERATION OP ON 'OperationBO:'||OP.SITE||','||OP.OPERATION||',#' = SS.OPERATION_BO AND OP.CURRENT_REVISION='true'
AND (#{dto.operation} IS NULL OR OP.OPERATION = #{dto.operation})
LEFT JOIN OPERATION_T OT ON OT.OPERATION_BO = OP.HANDLE AND OT.LOCALE =#{locale}
INNER JOIN SHOP_ORDER SO ON SO.HANDLE = S.SHOP_ORDER_BO
LEFT JOIN CUSTOM_FIELDS SO_CF ON SO_CF.HANDLE = SO.HANDLE AND SO_CF."ATTRIBUTE" = 'ITEM_NUMBER'
INNER JOIN ITEM I ON I.HANDLE = S.ITEM_BO
LEFT JOIN ITEM_T IT ON IT.ITEM_BO = I.HANDLE AND IT.LOCALE =#{locale}
INNER JOIN (
SELECT SD.HANDLE, SD.SFC,SD.RESRCE,SD.OPERATION,SD.STEP_ID,SD.PLANNED_COMPLETE_DATE, SD.PLANNED_START_DATE,SD.DISPATCH_NO
FROM Z_PROD_READY_TASK RB
INNER JOIN Z_SFC_DISPATCH SD ON SD.HANDLE = RB.SFC_DISPATCH_BO
WHERE RB.SITE =#{site} AND RB.STATUS = 'F'
) SOD ON SOD.RESRCE =#{dto.resrce} AND SOD.SFC= S.SFC AND SOD.OPERATION = OP.OPERATION
WHERE S.SITE = #{site} AND S.SFC = #{dto.sfc} AND ROWNUM=1
GROUP BY SO.SHOP_ORDER, SO_CF.VALUE , I.ITEM, IT.DESCRIPTION ,
CASE WHEN ST.STATUS='403' AND SS.QTY_IN_QUEUE > 0 THEN N'402' ELSE ST.STATUS END,
OP.OPERATION, OT.DESCRIPTION ,OP.OPERATION||'/'||RS.STEP_ID ,RO_CF2.VALUE,
S.SFC,S.QTY ,RS.STEP_ID,SOD.DISPATCH_NO , SOD.HANDLE ,
TO_CHAR( SOD.PLANNED_START_DATE + INTERVAL '8' HOUR,'yyyy-mm-dd hh24:mi:ss'),
TO_CHAR(SOD.PLANNED_COMPLETE_DATE + INTERVAL '8' HOUR,'yyyy-mm-dd hh24:mi:ss'),
TO_CHAR((SOD.PLANNED_COMPLETE_DATE - SOD.PLANNED_START_DATE )*24,'fm9999999990.00')||'H',
CASE WHEN OT.DESCRIPTION LIKE 'CH%' THEN SUBSTR(OT.DESCRIPTION, 0, 3) ELSE N'' END
</select>
<select id="querySfcStep" resultType="map">
SELECT B1.OPERATION,B1.STEP_ID,B1.DESCRIPTION STEP_DESC,B1.STATE,
B1.HANDLE,B1."SEQUENCE",
CASE WHEN B1."SEQUENCE"=B1.MAXSEQ THEN 'true'
ELSE 'false' END IS_SEQTRUE,B1.LONG_DESCRIPTION,
CASE WHEN B1.STATE ='FINISHED' THEN N'已完工'
WHEN B1."SEQUENCE"=B1.MAXSEQ AND B1.STATE ='READY' AND B1.STATUS ='403' THEN N'加工中'
ELSE N'未加工'
END STEP_STATUS
FROM (
SELECT A1.*,MAX(A1.SELECTSEQ) OVER(PARTITION BY OPERATION) MAXSEQ
FROM (
SELECT O.OPERATION,SST.SUBSTEP STEP_ID,SS.STATE,
NVL(SST.DESCRIPTION,SU.DESCRIPTION) DESCRIPTION,
CASE WHEN SS.STATE ='FINISHED' THEN N'已完工' ELSE N'加工中' END STEP_STATUS,
SS.HANDLE,SS."SEQUENCE",
CASE WHEN SS.STATE='FINISHED' THEN SST."SEQUENCE"+1 ELSE 0 END SELECTSEQ,ST.STATUS,
NVL(SST.LONG_DESCRIPTION,SU.LONG_DESCRIPTION) LONG_DESCRIPTION
FROM SFC_SUBSTEP SS
INNER JOIN SFC_STEP SSTEP ON SS.SFC_STEP_BO=SSTEP.HANDLE AND SSTEP.DONE='false'
AND (SSTEP.QTY_IN_QUEUE > 0 OR SSTEP.QTY_IN_WORK > 0)
INNER JOIN SFC_ROUTER SR ON SR.HANDLE=SSTEP.SFC_ROUTER_BO
INNER JOIN SFC_ROUTING SRI ON SRI.HANDLE=SR.SFC_ROUTING_BO
INNER JOIN ROUTER_SUBSTEP SST ON SS.ROUTER_SUBSTEP_BO = SST.HANDLE
LEFT JOIN SUBSTEP SU ON SU.SUBSTEP = SST.SUBSTEP AND SU.CURRENT_REVISION = 'true' AND SU.SITE = #{site}
INNER JOIN SFC S ON S.HANDLE=SRI.SFC_BO
INNER JOIN STATUS ST ON ST.HANDLE = S.STATUS_BO
INNER JOIN OPERATION O ON O.OPERATION=SPLIT(SSTEP.OPERATION_BO,2) AND O.SITE=S.SITE AND O.CURRENT_REVISION = 'true'
AND #{operation} IS NULL OR #{operation} = O.OPERATION)
WHERE S.SFC=#{sfc} AND S.SITE= #{site} ORDER BY SST."SEQUENCE"
) A1
) B1 ORDER BY B1."SEQUENCE" ASC
</select>
</mapper>
Loading…
Cancel
Save