diff --git a/anomaly/src/main/resources/mapper/ReportMapper.xml b/anomaly/src/main/resources/mapper/ReportMapper.xml index a4436e9f..d3e4d73f 100644 --- a/anomaly/src/main/resources/mapper/ReportMapper.xml +++ b/anomaly/src/main/resources/mapper/ReportMapper.xml @@ -816,6 +816,10 @@ AND zsd.ACTUAL_COMPLETE_DATE <= TO_DATE(#{completeEndDateTime}|| '15:59:59','YYYY-MM-DD HH24:MI:SS') + + AND ZUR.TEMPORARY_USER= #{temporaryUser} + + diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/mapper/SfcDispatchMapper.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/mapper/SfcDispatchMapper.java index ea73dc73..42a34af1 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/mapper/SfcDispatchMapper.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/mapper/SfcDispatchMapper.java @@ -24,6 +24,8 @@ public interface SfcDispatchMapper extends BaseMapper { List findSfcDispatch(@Param("site") String site, @Param("sfc") String sfc, @Param("operation") String operation, @Param("stepId") String stepId); + SfcDispatch findsfcComplete(@Param("site") String site, @Param("stepId") String stepId, @Param("shopOrder") String shopOrder); + /** * 查询派工生产批次数据 * diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/SfcDispatchService.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/SfcDispatchService.java index ece9344b..db64b76e 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/SfcDispatchService.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/SfcDispatchService.java @@ -31,6 +31,17 @@ public interface SfcDispatchService extends IService { */ List findSfcDispatch(String site, String sfc, String operation, String stepId); + + /** + * 查询已完成的派工数据 + * @param site + * @param stepId + * @param shopOrder + * @return + */ + + SfcDispatch findsfcComplete(String site,String stepId, String shopOrder); + /** * 查询派工清单 * diff --git a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java index 2b38798f..d1c8c228 100644 --- a/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java +++ b/dispatch/src/main/java/com/foreverwin/mesnac/dispatch/service/impl/SfcDispatchServiceImpl.java @@ -28,7 +28,9 @@ import com.foreverwin.modular.core.exception.BaseException; import com.foreverwin.modular.core.exception.BusinessException; import com.foreverwin.modular.core.util.CommonMethods; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.net.ftp.FTPClient; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -86,11 +88,18 @@ public class SfcDispatchServiceImpl extends ServiceImpl findSfcDispatch(String site, String sfc, String operation, String stepId) { return sfcDispatchMapper.findSfcDispatch(site, sfc, operation, stepId); } + @Override + public SfcDispatch findsfcComplete(String site, String stepId, String shopOrder) { + return sfcDispatchMapper.findsfcComplete(site,stepId,shopOrder); + } + @Override public List findSfcDispatchList(Map paramMap) throws IOException { List list = sfcDispatchMapper.findSfcDispatchList(paramMap); @@ -153,6 +162,8 @@ public class SfcDispatchServiceImpl extends ServiceImpl sfcDispatchList) { + + Boolean flag = this.sfcDispatch(site, user, DispatchStatusEnum.RELEASE.getCode(), message, sfcDispatchList); if (flag) { @@ -591,6 +602,10 @@ public class SfcDispatchServiceImpl extends ServiceImpl addSfcDispatchList = new ArrayList<>(); List updateSfcDispatchList = new ArrayList<>(); - //先删除所有新建状态的派工单 +// //先删除所有新建状态的派工单 + /** + * 1.先保存所有新建状态的派工单到一个SfcDispatch list中 + * 2.然后删除所有新建状态的派工单 + */ + Map paramMap=new HashMap(); + paramMap.put("site", CommonMethods.getSite()); + paramMap.put("sfc",sfc); + paramMap.put("dispatchStatus",Constants.STATUS_NEW); + List sfcDispatchDtoList=new ArrayList<>(); + try { + sfcDispatchDtoList=sfcDispatchService.findSfcDispatchList(paramMap); + }catch (Exception e){ + throw BusinessException.build("查询新建派工单错误"); + } + + + QueryWrapper queryWrapper = new QueryWrapper<>(); SfcDispatch deleteSfcDispatch = new SfcDispatch(); deleteSfcDispatch.setSite(site); @@ -504,7 +524,9 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService { //SFC+Operation+stepID是否已经存在派工数据 + List list = sfcDispatchService.findSfcDispatch(site, sfc, operation, stepId); + List dispatchDtoList = sfcDispatchDtoList.stream().filter(s -> routerDTO.getStepId().equals(s.getStepId())&&routerDTO.getOperation().equals(s.getOperation())).collect(Collectors.toList()); if (list == null || list.size() <= 0) { //工艺路线新增的工序,直接增加派工数据 String dispatchNo = sfc + "-" + stepId; @@ -527,8 +549,13 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService { sfcDispatchModel.setDispatchQty(sfcModel.getQty()); sfcDispatchModel.setProdHours(prodHours); sfcDispatchModel.setTurnOperation("false"); - //sfcDispatchModel.setPlannedStartDate(plannedStartDate); - //sfcDispatchModel.setPlannedCompleteDate(plannedCompleteDate); + if (!dispatchDtoList.isEmpty()){ + sfcDispatchModel.setPlannedStartDate(dispatchDtoList.get(0).getPlannedStartDate()); + sfcDispatchModel.setPlannedCompDate(dispatchDtoList.get(0).getPlannedCompDate()); + sfcDispatchModel.setEmployee(dispatchDtoList.get(0).getEmployee()); + sfcDispatchModel.setEmployeeDescription(dispatchDtoList.get(0).getEmployeeDescription()); + sfcDispatchModel.setResrce(dispatchDtoList.get(0).getResrce()); + } sfcDispatchModel.setSoReleasedDate(nowDate); sfcDispatchModel.setIsDispatch(Constants.BOOL_FALSE); sfcDispatchModel.setIsImport(Constants.BOOL_FALSE); @@ -540,7 +567,9 @@ public class ShopOrderReleaseServiceImpl implements ShopOrderReleaseService { sfcDispatchModel.setOther1("false"); addSfcDispatchList.add(sfcDispatchModel); } else { - //已经存在的更新 + /** + * 已经存在的更新 + */ SfcDispatch sfcDispatchModel = list.get(0); sfcDispatchModel.setDispatchSeq((m + 1)+""); sfcDispatchModel.setModifyUser(user); diff --git a/dispatch/src/main/resources/mapper/SfcDispatchMapper.xml b/dispatch/src/main/resources/mapper/SfcDispatchMapper.xml index 93da5ea7..7e0789af 100644 --- a/dispatch/src/main/resources/mapper/SfcDispatchMapper.xml +++ b/dispatch/src/main/resources/mapper/SfcDispatchMapper.xml @@ -4,76 +4,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -88,50 +88,69 @@ - SELECT + SELECT WIP.* FROM ( - SELECT WIP.*, V1.STEP_ID PREPOSITION_STEP_ID, V1.OPERATION PREPOSITION_OPERATION, - CASE WHEN WIP.DISPATCH_SEQ = 1 OR V1.DISPATCH_STATUS = 'COMPLETE' THEN N'是' ELSE N'否' END IS_COMPLETED, - CASE WHEN WIP.DISPATCH_STATUS = 'NEW' THEN N'新建' WHEN WIP.DISPATCH_STATUS = 'CANCEL' THEN N'取消' - WHEN WIP.DISPATCH_STATUS = 'PAUSE' THEN N'暂停' WHEN WIP.DISPATCH_STATUS = 'RELEASE' THEN N'发布' - END AS STATUS_NAME, 'ADMINISTRATOR' AS ROLE - FROM ( - SELECT SD.HANDLE, SD.SITE, SD.SHOP_ORDER, SD.DISPATCH_NO, SD.ROUTER_BO, C2.VALUE ITEM_NUMBER, C1.VALUE WORK_ORDER, IM.HANDLE ITEM_BO, IM.ITEM, IT.DESCRIPTION ITEM_DESCRIPTION, SD.SFC, SD.DISPATCH_STATUS,SD.DRAWINGS_REVISION, - SD.STEP_ID, SD.OPERATION, OT.DESCRIPTION OPERATION_DESCRIPTION, SD.RESOURCE_TYPE, SD.RESRCE, SD.EMPLOYEE, SD.EMPLOYEE USER_NAME, SD.DISPATCH_QTY, SD.PROD_HOURS, RS.DESCRIPTION RESOURCE_DESCRIPTION, - CASE WHEN SD.DISPATCH_STATUS = 'COMPLETE' THEN SD.DISPATCH_QTY ELSE 0 END COMPLETED_QTY, SD.PLANNED_START_DATE, SD.PLANNED_COMP_DATE, SD.WORK_CENTER, SD.IS_DISPATCH, SD.EMPLOYEE_DESCRIPTION, - SD.ACTUAL_START_DATE, SD.ACTUAL_COMPLETE_DATE, SD.REMARK, SD.DISPATCH_SEQ, SD.DISPATCH_SEQ-1 BEFORE_SEQ, SD.DISPATCH_SEQ+1 AFTER_SEQ, SD.EARLIEST_START_DATE, SD.LATEST_END_DATE, - CASE WHEN CC.VALUE = '9' THEN N'是' ELSE N'否' END IS_MAJOR, CASE WHEN SD.TURN_OPERATION = 'true' THEN N'是' ELSE N'否' END TURN_OPERATION, SD.IS_UPDATE_ZJH_COMPLETE, SD.BLANKING_SIZE, MAX(BC.COMPONENT_GBO) COMPONENT_BO, - WR.WORK_CENTER RESOURCE_WORK_CENTER, MAX(CP.ITEM) COMPONENT, MAX(CT.DESCRIPTION) COMPONENT_DESCRIPTION, MAX(C3.VALUE) TEXTURE, MAX(C4.VALUE) MAT_SPEC ,SD.OTHER_2 - FROM Z_SFC_DISPATCH SD - INNER JOIN SFC SC ON SC.SITE = SD.SITE AND SC.SFC = SD.SFC - LEFT JOIN RESRCE RS ON SD.SITE = RS.SITE AND SD.RESRCE = RS.RESRCE - INNER JOIN SHOP_ORDER SO ON SO.SITE = SD.SITE AND SO.SHOP_ORDER = SD.SHOP_ORDER - LEFT JOIN CUSTOM_FIELDS C1 ON C1.HANDLE = SO.HANDLE AND C1."ATTRIBUTE" = 'WORK_ORDER' - LEFT JOIN CUSTOM_FIELDS C2 ON C2.HANDLE = SO.HANDLE AND C2."ATTRIBUTE" = 'ITEM_NUMBER' - INNER JOIN ITEM IM ON IM.HANDLE = SO.ITEM_BO - LEFT JOIN ITEM_T IT ON IT.ITEM_BO = IM.HANDLE AND IT.LOCALE = 'zh' - LEFT JOIN CUSTOM_FIELDS CC ON CC.HANDLE = IM.HANDLE AND CC.ATTRIBUTE = 'ACCESSORY_TYPE' - INNER JOIN OPERATION O ON O.SITE = SD.SITE AND O.OPERATION = SD.OPERATION AND O.CURRENT_REVISION = 'true' - LEFT JOIN OPERATION_T OT ON OT.OPERATION_BO = O.HANDLE AND OT.LOCALE = 'zh' - INNER JOIN SFC_BOM SB ON SB.SFC_BO = SC.HANDLE - INNER JOIN BOM_COMPONENT BC ON BC.BOM_BO = SB.BOM_BO - LEFT JOIN ITEM CP ON CP.HANDLE = BC.COMPONENT_GBO - LEFT JOIN ITEM_T CT ON CT.ITEM_BO = CP.HANDLE AND CT.LOCALE = 'zh' - LEFT JOIN CUSTOM_FIELDS C3 ON C3.HANDLE = CP.HANDLE AND C3.ATTRIBUTE = 'TEXTTURE' - LEFT JOIN CUSTOM_FIELDS C4 ON C4.HANDLE = CP.HANDLE AND C4.ATTRIBUTE = 'MAT_SPEC' - LEFT JOIN WORK_CENTER_MEMBER WCM ON WCM.WORK_CENTER_OR_RESOURCE_GBO = 'ResourceBO:' || SD.SITE || ',' || SD.RESRCE - LEFT JOIN WORK_CENTER WR ON WR.HANDLE = WCM.WORK_CENTER_BO - WHERE SD.SITE = #{site} - - AND SD.OPERATION LIKE #{workCenter}||'%' - - - AND SD.DISPATCH_STATUS = #{dispatchStatus} - - - AND SD.DISPATCH_STATUS IN ${status} - - - AND IM.ITEM = #{item} - - - AND IT.DESCRIPTION like '%' ||#{itemDescription}|| '%' - - - AND C1.VALUE LIKE '%' ||#{workOrder}|| '%' - - - AND C2.VALUE LIKE '%' ||#{itemNumber}|| '%' - - - AND SD.SHOP_ORDER = #{shopOrder} - - - AND SD.RESOURCE_TYPE = #{resourceType} - - - AND SD.RESRCE = #{resrce} - - - AND SD.OPERATION = #{operation} - - - AND OT.DESCRIPTION = #{operationDescription} - - - AND SD.SFC = #{sfc} - - - AND SD.TURN_OPERATION = #{turnOperation} - - - AND SD.IS_DISPATCH = #{isDispatch} - - - AND SD.BLANKING_SIZE LIKE '%'||#{blankingSize}||'%' - - - AND CP.ITEM = #{component} - - - AND CT.DESCRIPTION LIKE '%' || #{componentDescription} || '%' - - - AND C3.VALUE LIKE '%'|| #{texture} ||'%' - - - AND C4.VALUE = #{matSpec} - - - AND SD.PLANNED_START_DATE >= TO_DATE(#{startFromDate}, 'YYYY-MM-DD') - - - AND SD.PLANNED_START_DATE <= TO_DATE(#{startToDate}|| '23:59:59', 'YYYY-MM-DD HH24:MI:SS') - - - AND SD.PLANNED_COMP_DATE >= TO_DATE(#{completeFromDate}, 'YYYY-MM-DD') - - - AND SD.PLANNED_COMP_DATE <= TO_DATE(#{completeToDate}|| '23:59:59', 'YYYY-MM-DD HH24:MI:SS') - - GROUP BY SD.HANDLE, SD.SITE, SD.SHOP_ORDER, SD.DISPATCH_NO, SD.ROUTER_BO, C2.VALUE, C1.VALUE, IM.HANDLE, IM.ITEM, IT.DESCRIPTION, SD.SFC, SD.DISPATCH_STATUS,SD.DRAWINGS_REVISION, - SD.STEP_ID, SD.OPERATION, OT.DESCRIPTION, SD.RESOURCE_TYPE, SD.RESRCE, SD.EMPLOYEE, SD.EMPLOYEE, SD.DISPATCH_QTY, SD.PROD_HOURS, RS.DESCRIPTION, - SD.DISPATCH_STATUS, SD.DISPATCH_QTY, SD.PLANNED_START_DATE, SD.PLANNED_COMP_DATE, SD.WORK_CENTER, SD.IS_DISPATCH, SD.EMPLOYEE_DESCRIPTION, - SD.ACTUAL_START_DATE, SD.ACTUAL_COMPLETE_DATE, SD.REMARK, SD.DISPATCH_SEQ, SD.EARLIEST_START_DATE, SD.LATEST_END_DATE, - CC.VALUE, SD.TURN_OPERATION,SD.IS_UPDATE_ZJH_COMPLETE, SD.BLANKING_SIZE, WR.WORK_CENTER ,SD.OTHER_2 - ) WIP - LEFT JOIN Z_SFC_DISPATCH V1 ON V1.SITE = WIP.SITE AND V1.SFC = WIP.SFC AND V1.ROUTER_BO = WIP.ROUTER_BO AND V1.DISPATCH_SEQ = WIP.BEFORE_SEQ - LEFT JOIN Z_SFC_DISPATCH V2 ON V2.SITE = WIP.SITE AND V2.SFC = WIP.SFC AND V2.ROUTER_BO = WIP.ROUTER_BO AND V2.DISPATCH_SEQ = WIP.AFTER_SEQ + SELECT WIP.*, V1.STEP_ID PREPOSITION_STEP_ID, V1.OPERATION PREPOSITION_OPERATION, + CASE WHEN WIP.DISPATCH_SEQ = 1 OR V1.DISPATCH_STATUS = 'COMPLETE' THEN N'是' ELSE N'否' END IS_COMPLETED, + CASE WHEN WIP.DISPATCH_STATUS = 'NEW' THEN N'新建' WHEN WIP.DISPATCH_STATUS = 'CANCEL' THEN N'取消' + WHEN WIP.DISPATCH_STATUS = 'PAUSE' THEN N'暂停' WHEN WIP.DISPATCH_STATUS = 'RELEASE' THEN N'发布' + END AS STATUS_NAME, 'ADMINISTRATOR' AS ROLE + FROM ( + SELECT SD.HANDLE, SD.SITE, SD.SHOP_ORDER, SD.DISPATCH_NO, SD.ROUTER_BO, C2.VALUE ITEM_NUMBER, C1.VALUE + WORK_ORDER, IM.HANDLE ITEM_BO, IM.ITEM, IT.DESCRIPTION ITEM_DESCRIPTION, SD.SFC, + SD.DISPATCH_STATUS,SD.DRAWINGS_REVISION, + SD.STEP_ID, SD.OPERATION, OT.DESCRIPTION OPERATION_DESCRIPTION, SD.RESOURCE_TYPE, SD.RESRCE, SD.EMPLOYEE, + SD.EMPLOYEE USER_NAME, SD.DISPATCH_QTY, SD.PROD_HOURS, RS.DESCRIPTION RESOURCE_DESCRIPTION, + CASE WHEN SD.DISPATCH_STATUS = 'COMPLETE' THEN SD.DISPATCH_QTY ELSE 0 END COMPLETED_QTY, SD.PLANNED_START_DATE, + SD.PLANNED_COMP_DATE, SD.WORK_CENTER, SD.IS_DISPATCH, SD.EMPLOYEE_DESCRIPTION, + SD.ACTUAL_START_DATE, SD.ACTUAL_COMPLETE_DATE, SD.REMARK, SD.DISPATCH_SEQ, SD.DISPATCH_SEQ-1 BEFORE_SEQ, + SD.DISPATCH_SEQ+1 AFTER_SEQ, SD.EARLIEST_START_DATE, SD.LATEST_END_DATE, + CASE WHEN CC.VALUE = '9' THEN N'是' ELSE N'否' END IS_MAJOR, CASE WHEN SD.TURN_OPERATION = 'true' THEN N'是' ELSE + N'否' END TURN_OPERATION, SD.IS_UPDATE_ZJH_COMPLETE, SD.BLANKING_SIZE, MAX(BC.COMPONENT_GBO) COMPONENT_BO, + WR.WORK_CENTER RESOURCE_WORK_CENTER, MAX(CP.ITEM) COMPONENT, MAX(CT.DESCRIPTION) COMPONENT_DESCRIPTION, + MAX(C3.VALUE) TEXTURE, MAX(C4.VALUE) MAT_SPEC ,SD.OTHER_2 + FROM Z_SFC_DISPATCH SD + INNER JOIN SFC SC ON SC.SITE = SD.SITE AND SC.SFC = SD.SFC + LEFT JOIN RESRCE RS ON SD.SITE = RS.SITE AND SD.RESRCE = RS.RESRCE + INNER JOIN SHOP_ORDER SO ON SO.SITE = SD.SITE AND SO.SHOP_ORDER = SD.SHOP_ORDER + LEFT JOIN CUSTOM_FIELDS C1 ON C1.HANDLE = SO.HANDLE AND C1."ATTRIBUTE" = 'WORK_ORDER' + LEFT JOIN CUSTOM_FIELDS C2 ON C2.HANDLE = SO.HANDLE AND C2."ATTRIBUTE" = 'ITEM_NUMBER' + INNER JOIN ITEM IM ON IM.HANDLE = SO.ITEM_BO + LEFT JOIN ITEM_T IT ON IT.ITEM_BO = IM.HANDLE AND IT.LOCALE = 'zh' + LEFT JOIN CUSTOM_FIELDS CC ON CC.HANDLE = IM.HANDLE AND CC.ATTRIBUTE = 'ACCESSORY_TYPE' + INNER JOIN OPERATION O ON O.SITE = SD.SITE AND O.OPERATION = SD.OPERATION AND O.CURRENT_REVISION = 'true' + LEFT JOIN OPERATION_T OT ON OT.OPERATION_BO = O.HANDLE AND OT.LOCALE = 'zh' + INNER JOIN SFC_BOM SB ON SB.SFC_BO = SC.HANDLE + INNER JOIN BOM_COMPONENT BC ON BC.BOM_BO = SB.BOM_BO + LEFT JOIN ITEM CP ON CP.HANDLE = BC.COMPONENT_GBO + LEFT JOIN ITEM_T CT ON CT.ITEM_BO = CP.HANDLE AND CT.LOCALE = 'zh' + LEFT JOIN CUSTOM_FIELDS C3 ON C3.HANDLE = CP.HANDLE AND C3.ATTRIBUTE = 'TEXTTURE' + LEFT JOIN CUSTOM_FIELDS C4 ON C4.HANDLE = CP.HANDLE AND C4.ATTRIBUTE = 'MAT_SPEC' + LEFT JOIN WORK_CENTER_MEMBER WCM ON WCM.WORK_CENTER_OR_RESOURCE_GBO = 'ResourceBO:' || SD.SITE || ',' || + SD.RESRCE + LEFT JOIN WORK_CENTER WR ON WR.HANDLE = WCM.WORK_CENTER_BO + WHERE SD.SITE = #{site} + + AND SD.OPERATION LIKE #{workCenter}||'%' + + + AND SD.DISPATCH_STATUS = #{dispatchStatus} + + + AND SD.DISPATCH_STATUS IN ${status} + + + AND SD.EMPLOYEE_DESCRIPTION = #{userName} + + + AND IM.ITEM = #{item} + + + AND IT.DESCRIPTION like '%' ||#{itemDescription}|| '%' + + + AND C1.VALUE LIKE '%' ||#{workOrder}|| '%' + + + AND C2.VALUE LIKE '%' ||#{itemNumber}|| '%' + + + AND SD.SHOP_ORDER = #{shopOrder} + + + AND SD.RESOURCE_TYPE = #{resourceType} + + + AND SD.RESRCE = #{resrce} + + + AND SD.OPERATION = #{operation} + + + AND OT.DESCRIPTION = #{operationDescription} + + + AND SD.SFC = #{sfc} + + + AND SD.TURN_OPERATION = #{turnOperation} + + + AND SD.IS_DISPATCH = #{isDispatch} + + + AND SD.BLANKING_SIZE LIKE '%'||#{blankingSize}||'%' + + + AND SD.STEP_ID = #{step} + + + AND CP.ITEM = #{component} + + + AND CT.DESCRIPTION LIKE '%' || #{componentDescription} || '%' + + + AND C3.VALUE LIKE '%'|| #{texture} ||'%' + + + AND C4.VALUE = #{matSpec} + + + AND SD.PLANNED_START_DATE >= TO_DATE(#{startFromDate}, 'YYYY-MM-DD') + + + AND SD.PLANNED_START_DATE <= TO_DATE(#{startToDate}|| '23:59:59', 'YYYY-MM-DD HH24:MI:SS') + + + AND SD.PLANNED_COMP_DATE >= TO_DATE(#{completeFromDate}, 'YYYY-MM-DD') + + + AND SD.PLANNED_COMP_DATE <= TO_DATE(#{completeToDate}|| '23:59:59', 'YYYY-MM-DD HH24:MI:SS') + + GROUP BY SD.HANDLE, SD.SITE, SD.SHOP_ORDER, SD.DISPATCH_NO, SD.ROUTER_BO, C2.VALUE, C1.VALUE, IM.HANDLE, + IM.ITEM, IT.DESCRIPTION, SD.SFC, SD.DISPATCH_STATUS,SD.DRAWINGS_REVISION, + SD.STEP_ID, SD.OPERATION, OT.DESCRIPTION, SD.RESOURCE_TYPE, SD.RESRCE, SD.EMPLOYEE, SD.EMPLOYEE, + SD.DISPATCH_QTY, SD.PROD_HOURS, RS.DESCRIPTION, + SD.DISPATCH_STATUS, SD.DISPATCH_QTY, SD.PLANNED_START_DATE, SD.PLANNED_COMP_DATE, SD.WORK_CENTER, + SD.IS_DISPATCH, SD.EMPLOYEE_DESCRIPTION, + SD.ACTUAL_START_DATE, SD.ACTUAL_COMPLETE_DATE, SD.REMARK, SD.DISPATCH_SEQ, SD.EARLIEST_START_DATE, + SD.LATEST_END_DATE, + CC.VALUE, SD.TURN_OPERATION,SD.IS_UPDATE_ZJH_COMPLETE, SD.BLANKING_SIZE, WR.WORK_CENTER ,SD.OTHER_2 + ) WIP + LEFT JOIN Z_SFC_DISPATCH V1 ON V1.SITE = WIP.SITE AND V1.SFC = WIP.SFC AND V1.ROUTER_BO = WIP.ROUTER_BO AND + V1.DISPATCH_SEQ = WIP.BEFORE_SEQ + LEFT JOIN Z_SFC_DISPATCH V2 ON V2.SITE = WIP.SITE AND V2.SFC = WIP.SFC AND V2.ROUTER_BO = WIP.ROUTER_BO AND + V2.DISPATCH_SEQ = WIP.AFTER_SEQ ) WIP WHERE WIP.IS_COMPLETED = #{isCompleted} @@ -800,10 +909,11 @@ ORDER BY WIP.SHOP_ORDER,WIP.SFC,WIP.STEP_ID,TO_NUMBER(WIP.DISPATCH_SEQ) - - UPDATE Z_SFC_DISPATCH SET DISPATCH_STATUS = #{dispatchStatus}, MODIFY_USER = #{modifyUser}, MODIFIED_DATE_TIME = #{modifiedDateTime} + + UPDATE Z_SFC_DISPATCH SET DISPATCH_STATUS = #{dispatchStatus}, MODIFY_USER = #{modifyUser}, MODIFIED_DATE_TIME = + #{modifiedDateTime} - , ACTUAL_COMPLETE_DATE = #{modifiedDateTime} , ACTUAL_PROD_HOURS = #{workHour} + , ACTUAL_COMPLETE_DATE = #{modifiedDateTime} , ACTUAL_PROD_HOURS = #{workHour} , ACTUAL_START_DATE = #{modifiedDateTime} @@ -825,22 +935,37 @@ + - + UPDATE Z_SFC_DISPATCH SET DISPATCH_QTY = DISPATCH_QTY - #{splitQty} WHERE SITE = #{site} AND SFC = #{sfc} AND DISPATCH_SEQ >= #{currentSeq} diff --git a/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java b/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java index da81aa48..cf2ae21c 100644 --- a/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java +++ b/meapi/src/main/java/com/foreverwin/mesnac/meapi/dto/SfcDto.java @@ -4,6 +4,18 @@ import com.foreverwin.mesnac.meapi.model.Sfc; public class SfcDto extends Sfc { + private String handle; + + @Override + public String getHandle() { + return handle; + } + + @Override + public void setHandle(String handle) { + this.handle = handle; + } + private String shopOrder; private String status; private String item; diff --git a/pom.xml b/pom.xml index 379fabb1..ce93bda2 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ com.foreverwin.modular modular-core - 1.1.4-SNAPSHOT.standlone-hana + 1.0-SNAPSHOT.standlone-hana @@ -97,31 +97,31 @@ - - org.apache.logging.log4j - log4j-slf4j-impl - 2.17.0 - - - org.apache.logging.log4j - log4j-api - 2.17.0 - - - org.apache.logging.log4j - log4j-core - 2.17.0 - - - org.slf4j - jul-to-slf4j - 1.7.26 - - - org.slf4j - jcl-over-slf4j - 1.7.26 - + + + + + + + + + + + + + + + + + + + + + + + + + org.apache.activemq diff --git a/production/src/main/java/com/foreverwin/mesnac/production/controller/PodTemplateController.java b/production/src/main/java/com/foreverwin/mesnac/production/controller/PodTemplateController.java index ad6274f8..e1c0f299 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/controller/PodTemplateController.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/controller/PodTemplateController.java @@ -71,6 +71,7 @@ public class PodTemplateController { sfcDtoList = mapper.convertValue(sfcDtoList, new TypeReference>() { }); String resrce = (String) map.get("resrce"); + String shoporder = (String) map.get("shopOrder"); if (sfcDtoList == null || sfcDtoList.size() < 1) { throw new BaseException("作业列表不能为空"); } @@ -80,7 +81,7 @@ public class PodTemplateController { ArrayList sfcList = new ArrayList<>(); try { for (SfcDto sfcDto : sfcDtoList) { - String completeSfc = podTemplateService.sfcComplete(sfcDto, resrce); + String completeSfc = podTemplateService.sfcComplete(sfcDto, resrce,shoporder); sfcList.add(completeSfc); } }catch (Exception e){ diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/PodTemplateService.java b/production/src/main/java/com/foreverwin/mesnac/production/service/PodTemplateService.java index 23bb03bd..5f7974ea 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/PodTemplateService.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/PodTemplateService.java @@ -16,7 +16,7 @@ public interface PodTemplateService { void sfcStart(Map map); - String sfcComplete(SfcDto sfcDto, String resrce); + String sfcComplete(SfcDto sfcDto, String resrce,String shoporder); void sendErp(String sfc, String stepId, BigDecimal qty, BigDecimal scrapQty, BigDecimal workHour); diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java index aed53070..56b87ef6 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java @@ -2,6 +2,7 @@ package com.foreverwin.mesnac.production.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.foreverwin.mesnac.common.constant.Constants; @@ -23,7 +24,9 @@ import com.foreverwin.mesnac.common.util.ERPAPI; import com.foreverwin.mesnac.common.util.ExceptionUtil; import com.foreverwin.mesnac.common.util.StringUtil; import com.foreverwin.mesnac.dispatch.model.SfcDispatch; +import com.foreverwin.mesnac.dispatch.model.UserResource; import com.foreverwin.mesnac.dispatch.service.SfcDispatchService; +import com.foreverwin.mesnac.dispatch.service.UserResourceService; import com.foreverwin.mesnac.integration.model.IntegrationLog; import com.foreverwin.mesnac.integration.service.IntegrationLogService; import com.foreverwin.mesnac.meapi.dto.BomComponentDto; @@ -44,6 +47,7 @@ import com.foreverwin.modular.core.exception.BaseException; import com.foreverwin.modular.core.exception.BusinessException; import com.foreverwin.modular.core.meext.MEServices; import com.foreverwin.modular.core.util.CommonMethods; +import com.foreverwin.modular.core.util.R; import com.sap.me.production.AssembleComponentsRequest; import com.sap.me.production.AssemblyComponent; import com.sap.me.production.AssemblyDataField; @@ -57,9 +61,12 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.SimpleDateFormat; import java.time.Duration; import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; +import java.util.stream.Collectors; @Service @@ -107,6 +114,9 @@ public class PodTemplateServiceImpl implements PodTemplateService { private ResrceMapper resrceMapper; @Autowired private SfcDispatchService sfcDispatchService; + @Autowired + private UserResourceService userResourceService; + @Override @@ -165,9 +175,34 @@ public class PodTemplateServiceImpl implements PodTemplateService { if (resultMap == null) { throw new BaseException("根据当前资源未找到条码[" + sfc + "]的基本信息!"); } - if(resultMap.get("EMPLOYEE_DESCRIPTION")==null||resultMap.get("EMPLOYEE_DESCRIPTION").equals("")||resultMap.get("EMPLOYEE")==null||resultMap.get("EMPLOYEE").equals("")){ + if(resultMap.get("EMPLOYEE_DESCRIPTION")==null||resultMap.get("EMPLOYEE_DESCRIPTION").equals("")){ throw new BaseException("产品条码[" + sfc + "]的操作人员为空!请联系调度人员维护!"); } + /** + * 派工无操作者员工号补充代码 + */ + + if(resultMap.get("EMPLOYEE")==null||resultMap.get("EMPLOYEE").equals("")){ + //获取操作者 + String EMPLOYEE_DESCRIPTION = resultMap.get("EMPLOYEE_DESCRIPTION").toString(); + //员工资源对应关系 + List userResourceList = userResourceService.findEnableList(site, sfcDto.getResrce(), null); + + Map> usMap = userResourceList.stream().collect(Collectors.groupingBy(UserResource::getUserDescription)); + + List singleUserResourceList = usMap.get(EMPLOYEE_DESCRIPTION); + + if ( CollectionUtils.isNotEmpty(singleUserResourceList)){ + //更新派工单的操作员编号 + SfcDispatch sfcDispatch = new SfcDispatch(); + sfcDispatch.setHandle(resultMap.get("SFC_DISPATCH_DETAIL_BO").toString()); + sfcDispatch.setEmployee(singleUserResourceList.get(0).getUserId()); + sfcDispatchService.updateById(sfcDispatch); + } + + } + + //List> substepList = sfcCrossMapper.querySfcStep(site, sfc, operationBySfcBo.getOperation()); List> substepList = new ArrayList<>(); resultMap.put("SFC_STEP_LIST", substepList); @@ -270,7 +305,7 @@ public class PodTemplateServiceImpl implements PodTemplateService { } @Override - public String sfcComplete(SfcDto sfcDto, String resrce) { + public String sfcComplete(SfcDto sfcDto, String resrce,String shoporder) { String site = CommonMethods.getSite(); String operation = sfcDto.getOperation(); Operation currentRevisionRef = operationService.getCurrentRevisionRef(site, operation); @@ -309,6 +344,22 @@ public class PodTemplateServiceImpl implements PodTemplateService { } } } + //相同工序不同SFC相同工单号不能在一分钟之内点完成(拆单重复吸收原材料) + /** + * 1.查询 + * 2.比较拆单后相同工序的最后一个完成时间 + */ + + SfcDispatch sfcDispatchDto = sfcDispatchService.findsfcComplete(site,sfcDto.getStepId(),shoporder); + if (sfcDispatchDto!=null){ + LocalDateTime now = LocalDateTime.now(); + Duration duration = Duration.between(sfcDispatchDto.getActualCompleteDate(),now); + long minutes = duration.toMinutes();//相差的分钟数 + if (minutes<1){ + throw new BaseException("拆单后同一工序不能一分钟内点两次完成!"); + } + } + //物料消耗 materialConsumption(site, operation, HandleEnum.SFC.getHandle(site, sfc), stepId, resrce); //专检创建 @@ -498,10 +549,8 @@ public class PodTemplateServiceImpl implements PodTemplateService { struIn.setIsm06(workHour); ins[0] = struIn; TableOfZprodordconfStruInHolder inHolder = new TableOfZprodordconfStruInHolder(ins); - //返回对象 ZprodordconfStruOut[] outs = new ZprodordconfStruOut[1]; - ZprodordconfStruOut struOut = new ZprodordconfStruOut(); struOut.setAufnr(ins[0].getAufnr()); struOut.setVornr(ins[0].getVornr()); diff --git a/production/src/main/resources/mapper/SfcCrossMapper.xml b/production/src/main/resources/mapper/SfcCrossMapper.xml index 4e343d89..c9ab4461 100644 --- a/production/src/main/resources/mapper/SfcCrossMapper.xml +++ b/production/src/main/resources/mapper/SfcCrossMapper.xml @@ -94,7 +94,7 @@ 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,SOD.WORK_CENTER,SOD.PROD_HOURS, - S.SFC,S.QTY SFC_QTY,RS.STEP_ID, SOD.DISPATCH_NO,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE, + S.SFC,S.QTY SFC_QTY,RS.STEP_ID, SOD.DISPATCH_NO,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,SOD.BLANKING_SIZE, TO_CHAR( SOD.PLANNED_START_DATE + INTERVAL '8' HOUR,'yyyy-mm-dd hh24:mi:ss')START_DATE, TO_CHAR(SOD.PLANNED_COMP_DATE + INTERVAL '8' HOUR ,'yyyy-mm-dd hh24:mi:ss')COMP_DATE, TO_CHAR((SOD.PLANNED_COMP_DATE - SOD.PLANNED_START_DATE )*24,'fm9999999990.00')||'H' ADD_DATE, @@ -117,13 +117,13 @@ 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_COMP_DATE, SD.PLANNED_START_DATE,SD.DISPATCH_NO,SD.WORK_CENTER,SD.PROD_HOURS,SD.EMPLOYEE_DESCRIPTION,SD.EMPLOYEE + SELECT SD.HANDLE, SD.SFC,SD.RESRCE,SD.OPERATION,SD.STEP_ID,SD.PLANNED_COMP_DATE, SD.PLANNED_START_DATE,SD.DISPATCH_NO,SD.WORK_CENTER,SD.PROD_HOURS,SD.EMPLOYEE_DESCRIPTION,SD.EMPLOYEE,SD.BLANKING_SIZE 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 = 'FINISH' AND RB."RESULT"='OK' ) SOD ON SOD.RESRCE =#{dto.resrce} AND SOD.SFC= S.SFC AND SOD.OPERATION = OP.OPERATION and SS.STEP_ID=SOD.STEP_ID WHERE S.SITE = #{site} AND S.SFC = #{dto.sfc} AND ROWNUM=1 - GROUP BY SO.SHOP_ORDER, SO_CF.VALUE , I.ITEM, IT.DESCRIPTION ,SOD.WORK_CENTER,SO_CF2.VALUE,SOD.PROD_HOURS,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE, + GROUP BY SO.SHOP_ORDER, SO_CF.VALUE , I.ITEM, IT.DESCRIPTION ,SOD.WORK_CENTER,SO_CF2.VALUE,SOD.PROD_HOURS,SOD.EMPLOYEE_DESCRIPTION,SOD.EMPLOYEE,SOD.BLANKING_SIZE, 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 ,