diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java index 2c821c4..99f8fd1 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesConfigService.java @@ -3,17 +3,40 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import io.swagger.annotations.ApiOperation; +import java.util.List; + /** * @Description: * @CreateDate: 2021/9/9 下午3:24 * @Author: simon.song */ public interface IMesConfigService { + @ApiOperation(value = "获取配置表模板代码") String getCfgValue(String org, String key); @ApiOperation(value = "获取配置表模板代码") MesConfig getCfgValueByCode(String key); + @ApiOperation(value = "获取配置表模板代码") + MesConfig getCfgValueByCode(String organizeCode,String key); + + @ApiOperation(value = "获取系统配置集合") + List getConfigList(String organizeCode, String cfgCode, String cfgKey, String cfgType); + + @ApiOperation(value = "根据分隔符验证是否存在元素的配置") + Boolean checkCfgValueIsContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, String item); + + @ApiOperation(value = "验证分表配置") + Boolean checkShardingTablesObjectCfg(String organizeCode, String cfgKey, String item); + + @ApiOperation(value = "根据分隔符查询存在元素的配置") + List findCfgValueContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, List itemList); + + @ApiOperation(value = "查询分表配置") + List findShardingTablesObjectCfg(String organizeCode, String cfgKey, List itemList); + + @ApiOperation(value = "更新配置") + void update(MesConfig mesConfig,String userName); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java new file mode 100644 index 0000000..63af50d --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesInterfaceDataMapperService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper; + +/** + * @Description : 接口数据映射 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/22 9:59 + * @Modify: + **/ +public interface IMesInterfaceDataMapperService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java index a935f7b..9aa6a4e 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProduceSnService.java @@ -16,4 +16,7 @@ public interface IMesProduceSnService extends IBaseMesService { @ApiOperation(value = "根据条码查询产品条码表") List findMesProduceSn(String organizeCode, String sn); + + @ApiOperation(value = "查询条码信息") + List findMesProduceSnList(String organizeCode, List snList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java index b74f17a..992ea9c 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesProductionRecordService.java @@ -1,6 +1,9 @@ package cn.estsh.i3plus.ext.mes.api.base; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -16,4 +19,9 @@ public interface IMesProductionRecordService extends IBaseMesService findMesProductionRecord(String organizeCode, String sn); + + ListPager queryRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager); + + @ApiOperation(value = "线边库存报表") + ListPager queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel,Pager pager); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java new file mode 100644 index 0000000..850a6fc --- /dev/null +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesScriptPersistenceService.java @@ -0,0 +1,13 @@ +package cn.estsh.i3plus.ext.mes.api.base; + +import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence; + +/** + * @Description : 动态脚本 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/22 11:03 + * @Modify: + **/ +public interface IMesScriptPersistenceService extends IBaseMesService { +} diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java index c86090e..3c77082 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesShippingOrderManagementDetailService.java @@ -4,6 +4,9 @@ import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import io.swagger.annotations.ApiOperation; + +import java.util.List; /** * @Description: @@ -15,4 +18,9 @@ public interface IMesShippingOrderManagementDetailService extends IBaseMesServic public ListPager queryDetailGroupByPartNo(MesShippingOrderManagementDetail bean, Pager pager); + @ApiOperation("查询发运单明细") + ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + + @ApiOperation("发运退回") + void doShippingBack(Long[] idList,String organizeCode,String userName); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java index 5d6ae89..6da2132 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderService.java @@ -31,7 +31,7 @@ public interface IMesWorkOrderService extends IBaseMesService { void deleteUnSortOrder(String organizeCode, List partNoList); @ApiOperation("汇总工单给SAP") - List sumMesWorkOrderQtyToSap(String organizeCode); + List sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime); @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java index fcf463e..a0a49be 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderToSapService.java @@ -15,5 +15,5 @@ import java.util.List; public interface IMesWorkOrderToSapService extends IBaseMesService { MesWorkOrderToSap insert(MesWorkOrderModel mesWorkOrder); - void doMesWorkOrder(String organizeCode,List mesWorkOrderList); + void doMesWorkOrder(String organizeCode,String userName,List mesWorkOrderList); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java index 4228cc6..a0f8417 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/IMesSpotCheckOrderService.java @@ -18,5 +18,6 @@ public interface IMesSpotCheckOrderService extends IBaseMesService mesEquipmentSpotCheckList, String userName); - + @ApiOperation("点检单结果打印") + MesSpotCheckOrder queryMesSpotCheckOrderResultPrint(MesSpotCheckOrder mesSpotCheckOrder); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java index 322602f..ae548a6 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/busi/report/IMesYfReportService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.report.MesProdRuleReportConditionModel import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.model.report.MesTraceabilityReportModel; import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.ApiOperation; @@ -41,4 +42,10 @@ public interface IMesYfReportService { @ApiOperation("查询追溯报表") List findTraceabilityReport(MesProduceSn mesProduceSn); + + @ApiOperation("零件条码状态查询") + ListPager queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager); + + @ApiOperation("产品加工记录") + ListPager queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager); } diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy index 4f359d3..d6f1ef4 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesJisShipping.groovy @@ -1,8 +1,11 @@ +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant +import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService import cn.estsh.i3plus.platform.common.tool.MathOperation import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel import cn.estsh.i3plus.pojo.mes.repository.MesShippingOrderManagementRepository import org.slf4j.Logger import org.slf4j.LoggerFactory @@ -23,6 +26,9 @@ class MesToPiscesMesJisShipping { @Autowired private MesShippingOrderManagementRepository mesShippingOrderManagementRepository; + @Autowired + private ISyncFuncService syncFuncService; + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { return srcData @@ -47,6 +53,16 @@ class MesToPiscesMesJisShipping { destData.put(key, rowMap) } } + //TRANS_ID赋值 + if(mapper.getDestColumnMapping().contains("TRANS_ID")){ + GenSerialNoModel orderSeqSerialNoModel = new GenSerialNoModel("JIS_SHIPPING_TRANS_ID"); + List resultList = syncFuncService.syncSerialNo(orderSeqSerialNoModel.organizeCode(organizeCode), "MES2PISCES发运单", organizeCode, destData.size()).getResultList(); + int index = 0; + for (Map rowMap : destData.values()) { + rowMap.put("TRANS_ID",resultList.get(index)); + index++; + } + } return new ArrayList<>(destData.values()); } diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy index eb0c734..6b0c7b7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesLoadingListDetail.groovy @@ -1,4 +1,6 @@ - +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack +import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper @@ -29,23 +31,20 @@ class MesToPiscesMesLoadingListDetail { if (srcData == null || srcData.size() == 0) { return srcData } - Map mesProductionRecordMap = new HashMap<>(); + String organizeCode = mapper.getOrganizeCode(); + Map mesProductionRecordMap = new HashMap<>(); Map mesLoadingListMap = new HashMap<>(); for (Map rowMap : srcData) { //发运单 - if (!StringUtils.isEmpty(rowMap.get("shipping_id"))) { - long shippingId = Long.parseLong(String.valueOf(rowMap.get("shipping_id"))); - if (Objects.isNull(mesProductionRecordMap) || !mesProductionRecordMap.containsKey(shippingId)) { - mesProductionRecordMap.put(shippingId, mesShippingRepository.getById(shippingId)) - } - MesShippingOrderManagement mesProductionRecord = mesProductionRecordMap.get(shippingId) - if (!Objects.isNull(mesProductionRecord)) { - rowMap.put("SHIPPING_FID", mesProductionRecord.getFid()) + if (!StringUtils.isEmpty(rowMap.get("shipping_code"))) { + MesShippingOrderManagement mesShippingOrderManagement = getShippingCode(organizeCode,String.valueOf(rowMap.get("shipping_code")),mesProductionRecordMap) + if (!Objects.isNull(mesShippingOrderManagement)) { + rowMap.put("SHIPPING_FID", mesShippingOrderManagement.getFid()) } else { rowMap.put("SHIPPING_FID", null) - LOGGER.info("发运单id:{},信息不存在", String.valueOf(rowMap.get(rowMap.get("shipping_id")))) + LOGGER.info("发运单shipping_code:{},信息不存在", String.valueOf(rowMap.get("shipping_code"))) } }else{ rowMap.put("SHIPPING_FID", null) @@ -61,7 +60,7 @@ class MesToPiscesMesLoadingListDetail { rowMap.put("LOADING_LIST_FID", mesLoadingList.getFid()) } else { rowMap.put("LOADING_LIST_FID", null) - LOGGER.info("装车id:{},信息不存在", String.valueOf(rowMap.get(rowMap.get("pid")))) + LOGGER.info("装车id:{},信息不存在", String.valueOf(rowMap.get("pid"))) } }else{ rowMap.put("LOADING_LIST_FID", null) @@ -70,4 +69,14 @@ class MesToPiscesMesLoadingListDetail { return srcData; } + + private MesShippingOrderManagement getShippingCode(String organizeCode, String shippingCode, Map mesShippingOrderManagementMap) { + if (Objects.isNull(mesShippingOrderManagementMap) || !mesShippingOrderManagementMap.containsKey(shippingCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(shippingCode, "shippingCode", ddlPackBean); + mesShippingOrderManagementMap.put(shippingCode, mesShippingRepository.getByProperty(ddlPackBean)) + } + return mesShippingOrderManagementMap.get(shippingCode); + } + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy index f8b4953..7c6a304 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesMesShippingDetail.groovy @@ -58,7 +58,7 @@ class MesToPiscesMesShippingDetail { rowMap.put("SHIPPING_FID", mesProductionRecord.getFid()) } else { rowMap.put("SHIPPING_FID", null) - LOGGER.info("发运单id:{},信息不存在", String.valueOf(rowMap.get(rowMap.get("pid")))) + LOGGER.info("发运单id:{},信息不存在", String.valueOf(rowMap.get("pid"))) } }else{ rowMap.put("SHIPPING_FID", null) diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy index f152686..01efd03 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductSn.groovy @@ -1,3 +1,4 @@ +import cn.estsh.i3plus.platform.common.tool.TimeTool import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack @@ -5,13 +6,17 @@ import cn.estsh.i3plus.pojo.mes.bean.MesCrossOrganizeCfg import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper import cn.estsh.i3plus.pojo.mes.repository.IMesCrossOrganizeCfgRepository import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil +import lombok.Getter +import lombok.Setter import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate import org.springframework.util.CollectionUtils +import org.springframework.util.StringUtils import javax.annotation.Resource +import java.sql.Connection /** * @Description : 跨工厂防错 @@ -30,6 +35,10 @@ class MesToPiscesProductSn { @Resource(name = "mesDataSource") private DynamicDataSourceProxy mesDataSource; + @Getter + @Setter + private Connection mesConn; + def readData(MesInterfaceDataMapper mapper) throws Exception { String organizeCode = mapper.getOrganizeCode(); DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -40,12 +49,19 @@ class MesToPiscesProductSn { return new ArrayList<>(); } List> srcData = new ArrayList<>(); + List updateList = new ArrayList<>(); //循环处理数据 for (MesCrossOrganizeCfg crossOrganizeCfg : crossOrganizeCfgList) { Map params = new HashMap<>(); params.put("srcOrganizeCode", crossOrganizeCfg.getOrganizeCode()) params.put("partNo", crossOrganizeCfg.getPartNo()) - String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit() + if (StringUtils.isEmpty(crossOrganizeCfg.getLastCreateDatetime())) { + params.put("createDateTime", TimeTool.pareDateToString(new Date(0))); + } else { + params.put("createDateTime", crossOrganizeCfg.getLastCreateDatetime()) + } + + String sql = "select * from " + mapper.getSrcTableName() + " where organize_code = :srcOrganizeCode and part_no = :partNo and create_date_time >= :createDateTime and " + mapper.getSrcWhere() + " order by " + mapper.getSrcOrderBy() + " limit " + mapper.getSrcGetLimit() //查询待同步的数据 List> dataList = queryDataTable(sql, params); if (!CollectionUtils.isEmpty(dataList)) { @@ -54,8 +70,17 @@ class MesToPiscesProductSn { rowMap.put("DEST_ORGANIZE_CODE", crossOrganizeCfg.getSrcOrganizeCode()) } srcData.addAll(dataList); + String createDateTime = dataList.iterator().next().get("create_date_time") + //更新配置 + updateList.add("update mes_cross_organize_cfg set last_create_date_time = '"+createDateTime+"',last_exe_time = '"+ TimeTool.getNowTime(true)+"' where id= " + crossOrganizeCfg.getId() + " ;") } } + //更新同步标识 + if (!CollectionUtils.isEmpty(updateList) && updateList.size() > 0) { + this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); + mesDataSource.executeAsBatch(updateList, mesConn) + mesDataSource.closeConnectionWithoutPoll(this.mesConn) + } return srcData; } diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy index deb8a58..f5c2f33 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/Mes2Pisces/MesToPiscesProductionAssembly.groovy @@ -73,7 +73,7 @@ class MesToPiscesProductionAssembly { if (!Objects.isNull(mesProductionRecord)) { rowMap.put("PRODUCTION_LOG_FID", mesProductionRecord.getFid()) } else { - LOGGER.info("原材料容器id:{},信息不存在", String.valueOf(rowMap.get(rowMap.get("production_record_id")))) + LOGGER.info("原材料容器id:{},信息不存在", String.valueOf(rowMap.get("production_record_id"))) } }else{ rowMap.put("PRODUCTION_LOG_FID", null) diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy index 1a2bb5f..f116c5c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/MesProductionRecordToPisces.groovy @@ -1,13 +1,11 @@ +import cn.estsh.i3plus.platform.common.tool.TimeTool import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy import cn.estsh.i3plus.pojo.base.bean.DdlPackBean import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack -import cn.estsh.i3plus.pojo.mes.bean.MesEquipment -import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn -import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder +import cn.estsh.i3plus.pojo.base.util.StringUtil +import cn.estsh.i3plus.pojo.mes.bean.* import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper -import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository -import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository -import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository +import cn.estsh.i3plus.pojo.mes.repository.* import lombok.Getter import lombok.Setter import org.slf4j.Logger @@ -15,6 +13,7 @@ import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate import org.springframework.util.CollectionUtils +import org.springframework.util.StringUtils import javax.annotation.Resource import java.sql.Connection @@ -30,6 +29,8 @@ class MesProductionRecordToPisces { public static final Logger LOGGER = LoggerFactory.getLogger(MesProductionRecordToPisces.class) + private static final String[] workCenterCodeList = ["B19CK01A", "B15CK01A", "C06CK01A", "C06CK01B", "C09CK01A", "C12CK01A"] as String[]; + @Autowired private MesEquipmentRepository equipmentRepository; @@ -49,31 +50,93 @@ class MesProductionRecordToPisces { @Setter private Connection mesConn; + @Autowired + private MesWorkCenterRepository mesWorkCenterRepository; + + @Autowired + private MesWorkCellRepository mesWorkCellRepository; + + @Autowired + private MesProcessRepository mesProcessRepository; + def filterData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { if (srcData == null || srcData.size() == 0) { return srcData } - List updateList = new ArrayList<>(); + String organizeCode = mapper.getOrganizeCode(); + Map mesWorkCenterMap = new HashMap<>(); + Map mesWorkCellMap = new HashMap<>(); + Map mesProcessMap = new HashMap<>(); + List idList = new ArrayList<>(); List> destData = new ArrayList<>(); for (Map rowMap : srcData) { Map params = new HashMap<>(); - params.put("partNo",rowMap.get("part_no")) - params.put("productSn",rowMap.get("product_sn")) - String sql = "select ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc"; - List> dataMap = queryDataTable(sql,params); + params.put("partNo", rowMap.get("part_no")) + params.put("productSn", rowMap.get("product_sn")) + String sql = "select top 1 ID from MES.TT_PC_PART_BARCODE where PART_NO = :partNo and BARCODE = :productSn order by GENERATION_TIME desc"; + List> dataMap = queryDataTable(sql, params); - if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() >0) { + if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) { rowMap.put("BARCODE_ID", dataMap.iterator().next().get("ID")) - updateList.add("update mes_production_record set system_sync_status = 1 where id= "+rowMap.get("id")+" ;") - }else{ + idList.add(rowMap.get("id").toString()); + } else { + LOGGER.info("条码{}物料{}条码信息未同步,信息不存在", rowMap.get("product_sn"),rowMap.get("part_no")) continue } - - String workOrderNo = String.valueOf(rowMap.get("work_order_no")); - MesWorkOrder workOrderDb = getWorkOrderDb(mapper.getOrganizeCode(), workOrderNo); - if (!Objects.isNull(workOrderDb)) { - rowMap.put("WORK_ORDER_FID", workOrderDb.getFid()) + String workCenterCode = String.valueOf(rowMap.get("work_center_code")); + if (!workCenterCodeList.contains(workCenterCode)) { + String workOrderNo = String.valueOf(rowMap.get("work_order_no")); + MesWorkOrder workOrderDb = getWorkOrderDb(mapper.getOrganizeCode(), workOrderNo); + if (!Objects.isNull(workOrderDb)) { + rowMap.put("WORK_ORDER_FID", workOrderDb.getFid()) + } else { + rowMap.put("WORK_ORDER_FID", null) + } + } else { + rowMap.put("WORK_ORDER_FID", null) + } + //工作中心 + MesWorkCenter mesWorkCenter = getMesWorkCenter(organizeCode, workCenterCode, mesWorkCenterMap) + if (!Objects.isNull(mesWorkCenter)) { + rowMap.put("work_center_code", mesWorkCenter.getDescription()) + } else { + LOGGER.info("工作中心{},信息不存在", workCenterCode) + } + //工位 + if (!StringUtil.isEmpty(rowMap.get("work_cell_code"))) { + String workCellCode = String.valueOf(rowMap.get("work_cell_code")); + MesWorkCell mesWorkCell = getMesWorkCell(organizeCode, workCellCode, mesWorkCellMap) + if (!Objects.isNull(mesWorkCell)) { + rowMap.put("work_cell_code", mesWorkCell.getDescription()) + } else { + LOGGER.info("工位{},信息不存在", workCellCode) + } + } + //工序信息 + if (!StringUtil.isEmpty(rowMap.get("process_code"))) { + String processCode = String.valueOf(rowMap.get("process_code")); + MesProcess mesProcess = getMesProcess(organizeCode, processCode, mesProcessMap) + if (!Objects.isNull(mesProcess)) { + rowMap.put("process_code", mesProcess.getDescription()) + } else { + LOGGER.info("工序{},信息不存在", processCode) + } + } + //开班记录 + if (!StringUtil.isEmpty(rowMap.get("work_center_code")) && !StringUtil.isEmpty(rowMap.get("process_code")) && !StringUtil.isEmpty(rowMap.get("shift_code"))) { + params = new HashMap<>(); + params.put("workCenterCode", rowMap.get("work_center_code")) + params.put("processCode", rowMap.get("process_code")) + params.put("shiftCode", 1 == Integer.parseInt(rowMap.get("shift_code").toString()).intValue() ? "早班" : "晚班") + sql = "select top 1 ID from MES.TL_PS_SHIFT_START where ASSEMBLY_LINE = :workCenterCode and SHIFT_NAME = :shiftCode and SHIFT_GROUP_CODE = :processCode order by ID desc"; + dataMap = queryDataTable(sql, params); + if (!CollectionUtils.isEmpty(dataMap) && dataMap.size() > 0) { + rowMap.put("SHIFT_START_ID", dataMap.iterator().next().get("ID")) + } + } + if (StringUtil.isEmpty(rowMap.get("SHIFT_START_ID"))) { + rowMap.put("SHIFT_START_ID", null) } String equipmentCode = String.valueOf(rowMap.get("equipment_code")); @@ -85,23 +148,17 @@ class MesProductionRecordToPisces { } //更新同步标识 - if(!CollectionUtils.isEmpty(updateList) && updateList.size() > 0){ + if (!CollectionUtils.isEmpty(idList) && idList.size() > 0) { + List updateList = new ArrayList<>(); + updateList.add("update mes_production_record set system_sync_date_time='"+ TimeTool.getNowTime(true)+"',system_sync_status = 1 where id in (" + String.join(",",idList) + ") ;") this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); - mesDataSource.executeAsBatch(updateList,mesConn) + mesDataSource.executeAsBatch(updateList, mesConn) mesDataSource.closeConnectionWithoutPoll(this.mesConn) } return destData; } - def getProduceSnDb(String organizeCode, String productSn, String partNo) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(productSn, "productSn", ddlPackBean); - DdlPreparedPack.getStringEqualPack(partNo, "partNo", ddlPackBean); - MesProduceSn produceSnDb = produceSnRepository.getByProperty(ddlPackBean); - return produceSnDb; - } - MesWorkOrder getWorkOrderDb(String organizeCode, String workOrderNo) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); @@ -122,4 +179,38 @@ class MesProductionRecordToPisces { return dataMap; } + private MesWorkCenter getMesWorkCenter(String organizeCode, String workCenterCode, Map mesWorkCenterMap) { + if (Objects.isNull(mesWorkCenterMap) || !mesWorkCenterMap.containsKey(workCenterCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", ddlPackBean); + mesWorkCenterMap.put(workCenterCode, mesWorkCenterRepository.getByProperty(ddlPackBean)) + } + return mesWorkCenterMap.get(workCenterCode); + } + + private MesWorkCell getMesWorkCell(String organizeCode, String workCenterCell, Map mesWorkCellMap) { + if (Objects.isNull(mesWorkCellMap) || !mesWorkCellMap.containsKey(workCenterCell)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCell, "workCellCode", ddlPackBean); + mesWorkCellMap.put(workCenterCell, mesWorkCellRepository.getByProperty(ddlPackBean)) + } + return mesWorkCellMap.get(workCenterCell); + } + + + private MesProcess getMesProcess(String organizeCode, String processCode, Map mesProcessMap) { + if (Objects.isNull(mesProcessMap) || !mesProcessMap.containsKey(processCode)) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(processCode, "processCode", ddlPackBean); + mesProcessMap.put(processCode, mesProcessRepository.getByProperty(ddlPackBean)) + } + return mesProcessMap.get(processCode); + } + + def saveSrcData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { + if (srcData == null || srcData.size() == 0 || StringUtils.isEmpty(mapper.getSrcTableName())) { + return srcData + } + } + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/groovy/MesUpdateSrcData.groovy b/modules/i3plus-ext-mes-apiservice/src/groovy/MesUpdateSrcData.groovy new file mode 100644 index 0000000..71237ea --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/groovy/MesUpdateSrcData.groovy @@ -0,0 +1,44 @@ +import cn.estsh.i3plus.platform.common.tool.TimeTool +import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper +import lombok.Getter +import lombok.Setter +import org.springframework.util.StringUtils + +import javax.annotation.Resource +import java.sql.Connection + +/** + * @Description :MES2PISCES-更新同步标识 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/5 20:19 + * @Modify: + * */ +class MesUpdateSrcData { + + @Resource(name = "mesDataSource") + private DynamicDataSourceProxy mesDataSource; + + @Getter + @Setter + private Connection mesConn; + + def saveSrcData(MesInterfaceDataMapper mapper, List> srcData) throws Exception { + if (srcData == null || srcData.size() == 0 || StringUtils.isEmpty(mapper.getSrcTableName())) { + return srcData + } + List idList = new ArrayList<>(); + for (Map data : srcData) { + idList.add(data.get("id").toString()); + } + + //更新同步标识 + List updateList = new ArrayList<>(); + updateList.add("update " + mapper.getSrcTableName() + " set system_sync_date_time='" + TimeTool.getNowTime(true) + "',system_sync_status='1' where id in (" + String.join(",", idList) + ") ;"); + this.mesConn = mesDataSource.getWriteConnectionWithoutPool(); + mesDataSource.executeAsBatch(updateList, mesConn) + mesDataSource.closeConnectionWithoutPoll(this.mesConn) + + } +} \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseExtDataController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseExtDataController.java index ac45590..440c4d6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseExtDataController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/BaseExtDataController.java @@ -1,23 +1,39 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesEnumExtService; +import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService; +import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.platform.common.tool.ExcelTool; +import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.i3plus.pojo.model.common.ExportDataModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.persistence.EntityManager; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.util.LinkedHashMap; import java.util.Map; +import java.util.Objects; /** * @Description: @@ -35,6 +51,15 @@ public class BaseExtDataController extends MesBaseController { @Autowired private IMesEnumExtService enumService; + @Autowired + private IMesYfReportService mesYfReportService; + + @Autowired + private IMesShippingOrderManagementDetailService mesShippingOrderManagementDetailService; + + @Autowired + private EntityManager entityManager; + @GetMapping(value = "/enumlist") @ApiOperation(value = "获取MES系统所有枚举") public ResultBean enumlist(@RequestParam(name = "enumName") String enumName) { @@ -81,5 +106,82 @@ public class BaseExtDataController extends MesBaseController { } } + @ApiOperation(value = "导出", notes = "导出") + @PostMapping("/data-export") + public ResultBean doDataExport(@RequestBody ExportDataModel exportDataModel, HttpServletResponse response) { + try { + ValidatorBean.beginValid(exportDataModel) + .notNull("exportCol", exportDataModel.getExportCol()) + .notNull("selectWhere", exportDataModel.getSelectWhere()) + .notNull("module", exportDataModel.getModule()); + File excelFile = null; + + ExcelTool excelTool = new ExcelTool(this.entityManager, RedisCacheTool.getImppRedis()); + Class mesClass = null; + ListPager listPager = null; + + switch (MesExtEnumUtil.DATA_EXPORT.valueOfCode(exportDataModel.getModule())){ + case MES_PRODUCE_SN_DATA_EXPORT: + mesClass = MesProduceSn.class; + //查询数据 + listPager = mesYfReportService.queryMesProduceSn(JSON.parseObject(exportDataModel.getSelectWhere(), MesProduceSn.class),null);break; + case MES_PRODUCTION_RECORD_DATA_EXPORT: + mesClass = MesProductionRecord.class; + //查询数据 + listPager = mesYfReportService.queryMesProductionRecord(JSON.parseObject(exportDataModel.getSelectWhere(), MesProductionRecord.class),null);break; + case MES_SHIPPING_DETAIL_DATA_EXPORT: + mesClass = MesShippingOrderManagementDetailModel.class; + //查询数据 + listPager = mesShippingOrderManagementDetailService.queryMesShippingDetailsByPager(JSON.parseObject(exportDataModel.getSelectWhere(), MesShippingOrderManagementDetailModel.class),null);break; + default: + break; + } + + if(Objects.isNull(listPager) || CollectionUtils.isEmpty(listPager.getObjectList())){ + MesException.throwMesBusiException("未查询到有效数据"); + } + + LinkedHashMap exportCol = (LinkedHashMap) JSON.parseObject(exportDataModel.getExportCol(), LinkedHashMap.class); + excelFile = new File(System.getProperty("java.io.tmpdir") + File.separator + mesClass.getSimpleName() + ".xls"); + excelFile.createNewFile(); + excelTool.exportData(excelFile, listPager.getObjectList(), mesClass, exportCol); + + + response.setContentType("application/vnd.ms-excel;charset=UTF-8"); + response.setCharacterEncoding("UTF-8"); + response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(excelFile.getName(), "UTF-8")); + response.flushBuffer(); + BufferedInputStream bis = null; + + try { + bis = new BufferedInputStream(new FileInputStream(excelFile)); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + + for(int i = bis.read(buffer); i != -1; i = bis.read(buffer)) { + os.write(buffer, 0, i); + } + } catch (Exception var28) { + var28.printStackTrace(); + } finally { + if (bis != null) { + try { + bis.close(); + excelFile.delete(); + } catch (IOException var27) { + var27.printStackTrace(); + } + } + + } + + return ResultBean.success("导出成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException var30) { + return ResultBean.fail(var30); + } catch (Exception var31) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(var31); + } + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java new file mode 100644 index 0000000..984fdfc --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesInterfaceDataMapperController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 接口数据映射 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/22 9:57 + * @Modify: + **/ +@Api(description = "接口数据映射") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesInterfaceDataMapper") +public class MesInterfaceDataMapperController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesProductionRecordController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesProductionRecordController.java new file mode 100644 index 0000000..a61d402 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesProductionRecordController.java @@ -0,0 +1,49 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 设备加工记录表 + * @Reference : + * @Author : gsz + * @CreateDate 2024/8/10 10:50 + * @Modify: + **/ +@Api("设备加工记录") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesProductionRecord") +public class MesProductionRecordController extends BaseMesController{ + @Autowired + private IMesProductionRecordService mesProductionRecordService; + + @GetMapping(value = "/group-by-part-cell/query") + @ApiOperation(value = "设备加工记录", notes = "设备加工记录") + public ResultBean queryProductionRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager) { + try { + ValidatorBean.beginValid(mesProductionRecord) + .notNull("organizeCode", mesProductionRecord.getOrganizeCode()); + + return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryRecordGroupByPartNoWorkCellCode(mesProductionRecord, pager)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java new file mode 100644 index 0000000..b84ed67 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesScriptPersistenceController.java @@ -0,0 +1,20 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.base; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @Description : 动态脚本 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/22 9:57 + * @Modify: + **/ +@Api(description = "动态脚本") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesScriptPersistence") +public class MesScriptPersistenceController extends BaseMesController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java index 93a7e90..f04f835 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementDetailController.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; @@ -12,9 +14,9 @@ import cn.estsh.impp.framework.boot.util.ResultBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Objects; @Api("发运单管理明细") @RestController @@ -40,4 +42,31 @@ public class MesShippingOrderManagementDetailController extends BaseMesControlle } } + @ApiOperation(value = "发运单明细", notes = "发运单明细") + @GetMapping("/master/query") + public ResultBean queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) { + try { + return ResultBean.success("查询成功").setListPager(shippingOrderManagementDetailService.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "发运退回", notes = "发运退回") + @PutMapping("/doShippingBack") + public ResultBean doShippingBack(@RequestBody Long[] idList) { + try { + if(Objects.isNull(idList) || idList.length <= 0) MesException.throwMesBusiException("选择数据无效,请检查"); + shippingOrderManagementDetailService.doShippingBack(idList,AuthUtil.getOrganizeCode(),AuthUtil.getSessionUser().getUserName()); + return ResultBean.success("退回成功"); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java index be8bf01..807572f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderController.java @@ -1,15 +1,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.excel.MesExcelTool; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.apiservice.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.bean.MesProductVersion; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; @@ -31,6 +35,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -46,6 +51,9 @@ public class MesWorkOrderController extends BaseMesController { @Autowired private IMesWorkOrderToSapService mesWorkOrderToSapService; + @Autowired + private IMesConfigService mesConfigService; + @ApiOperation(value = "查询生产版本", notes = "查询生产版本") @GetMapping("/mesProductVersion/query") public ResultBean queryMesProdRuleByPager(MesProductVersion mesProductVersion, Pager pager){ @@ -151,10 +159,19 @@ public class MesWorkOrderController extends BaseMesController { @ApiOperation(value = "发送给sap") public ResultBean sendToSap(String organizeCode) { try { + MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode, "LAST_SEND_TO_SAP_TIME"); + String lastSendToSapTime = null; + if (Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())) { + lastSendToSapTime = TimeTool.pareDateToString(new Date(0)); + } else { + lastSendToSapTime = sendToSap.getCfgValue(); + sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10))); + mesConfigService.update(sendToSap, ""); + } //查询汇总工单数量 - List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime); if (!CollectionUtils.isEmpty(mesWorkOrderList)){ - mesWorkOrderToSapService.doMesWorkOrder(organizeCode,mesWorkOrderList); + mesWorkOrderToSapService.doMesWorkOrder(organizeCode,"",mesWorkOrderList); } return ResultBean.success("操作成功") .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesSpotCheckOrderController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesSpotCheckOrderController.java index 33c2f2d..ad3770f 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesSpotCheckOrderController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesSpotCheckOrderController.java @@ -1,9 +1,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; +import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService; import cn.estsh.i3plus.ext.mes.apiservice.controller.base.BaseMesController; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesSpotCheckOrder; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -13,4 +23,29 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesSpotCheckOrder") public class MesSpotCheckOrderController extends BaseMesController { + @Autowired + private IMesSpotCheckOrderService mesSpotCheckOrderService; + + @PostMapping(value = "/qc-print") + @ApiOperation(value = "点检单结果打印") + public ResultBean queryMesSpotCheckOrderResultPrint(@RequestBody MesSpotCheckOrder mesSpotCheckOrder) { + try { + if (mesSpotCheckOrder == null) { + return ResultBean.success(); + } + //条件验证 + ValidatorBean.beginValid(mesSpotCheckOrder) + .notNull("spotCheckId", mesSpotCheckOrder.getSpotCheckId()) + .notNull("spotCheckOrderNo", mesSpotCheckOrder.getSpotCheckOrderNo()) + .notNull("organizeCode", mesSpotCheckOrder.getOrganizeCode()); + + return ResultBean.success("点检单结果打印成功") + .setResultObject(mesSpotCheckOrderService.queryMesSpotCheckOrderResultPrint(mesSpotCheckOrder)) + .setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java index 6e672f4..da6ffbd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/busi/MesWhiteListController.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.api.base.*; import cn.estsh.i3plus.ext.mes.api.busi.IMaximoService; import cn.estsh.i3plus.ext.mes.pojo.model.MaximoParamModel; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -191,8 +192,8 @@ public class MesWhiteListController extends MesBaseController { qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList,organizeCode); for (MesPartInspection mesPartInspection : mesPartInspectionList) { - mesPartInspection.setSystemSyncStatus(1); - mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true)); + mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB); } partInspectionRepository.saveAll(mesPartInspectionList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java index 025f2d9..19796db 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesBusiReportController.java @@ -1,9 +1,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.report; +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.api.busi.report.IMesYfReportService; import cn.estsh.i3plus.ext.mes.apiservice.config.AuthUtilExt; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; import cn.estsh.impp.framework.base.controller.MesBaseController; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; @@ -31,6 +35,9 @@ public class MesBusiReportController extends MesBaseController { @Autowired private IMesYfReportService mesYfReportService; + @Autowired + private IMesProductionRecordService mesProductionRecordService; + @ApiOperation(value = "查询追溯报表", notes = "查询追溯报表") @GetMapping("/traceability/find") public ResultBean findTraceabilityReport(MesProduceSn mesProduceSn) { @@ -45,4 +52,47 @@ public class MesBusiReportController extends MesBaseController { } } + @ApiOperation(value = "零件条码状态查询", notes = "零件条码状态查询") + @GetMapping("/mesProduceSn/query") + public ResultBean queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) { + try { + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesProduceSn(mesProduceSn,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + @ApiOperation(value = "产品加工记录", notes = "产品加工记录") + @GetMapping("/mesProductionRecord/query") + public ResultBean queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager) { + try { + return ResultBean.success("查询成功").setListPager(mesYfReportService.queryMesProductionRecord(mesProductionRecord,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @ApiOperation(value = "线边库存报表", notes = "线边库存报表") + @GetMapping("/mesProductionOffLine/query") + public ResultBean queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel, Pager pager) { + try { + ValidatorBean.beginValid(mesProductionRecordModel) + .notNull("partNo", mesProductionRecordModel.getPartNo()) + .notNull("organizeCode", mesProductionRecordModel.getOrganizeCode()) + .notNull("onLineWorkCellCode",mesProductionRecordModel.getOnLineWorkCellCode()) + .notNull("offLineWorkCellCode",mesProductionRecordModel.getOffLineWorkCellCode()) + .notNull("createDateTimeStart",mesProductionRecordModel.getCreateDateTimeStart()) + .notNull("createDateTimeEnd",mesProductionRecordModel.getCreateDateTimeEnd()); + return ResultBean.success("查询成功").setListPager(mesProductionRecordService.queryMesProductionOffLine(mesProductionRecordModel,pager)); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java index 86a4a98..c1c5142 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesProdRuleNosortCfgDao.java @@ -9,4 +9,6 @@ public interface IMesProdRuleNosortCfgDao { List findMesProdRuleNosortCfgByWorkCenterCode(String workCenterCode, String partNo, String organizeCode); + List findMesProdRuleNosortCfgByWorkCellCode(String workCellCode, String partNo, String organizeCode); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java index 9cb4ae2..7053b64 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesShippingOrderManagementDetailDao.java @@ -1,8 +1,10 @@ package cn.estsh.i3plus.ext.mes.apiservice.dao; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import io.swagger.annotations.ApiOperation; import java.util.List; @@ -18,4 +20,8 @@ public interface IMesShippingOrderManagementDetailDao { int queryOrderDetailGroupByPartCount(MesShippingOrderManagementDetail detail); List queryOrderDetailGroupByPartInfo(MesShippingOrderManagementDetail detail, Pager pager); + + @ApiOperation("查询发运单明细") + ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager); + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java index d80ef90..eafd358 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/IMesWorkOrderDao.java @@ -13,5 +13,5 @@ import java.util.List; **/ public interface IMesWorkOrderDao { - List sumMesWorkOrderQtyToSap(String organizeCode, List statusList); + List sumMesWorkOrderQtyToSap(String organizeCode, List statusList,List partNoList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java index bb00b21..74623b2 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dao/board/IMesYfBoardDao.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.board.MesWorkCenterBoardResultModel; import cn.estsh.i3plus.pojo.mes.bean.MesShift; import java.util.List; +import java.util.Set; /** * @Description : 看板-数据方法实现 @@ -39,8 +40,9 @@ public interface IMesYfBoardDao { * @param organizeCode 组织代码 * @param startTime 查询起始时间 * @param endTime 查询结束时间 + * @param workOrderNoSet 工单号集合 * @return 加工完成条码及其质量状态 */ - List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime); + List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set workOrderNoSet); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesBomDaoImpl.java similarity index 97% rename from modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesDaoImpl.java rename to modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesBomDaoImpl.java index ac974cb..3adc1fe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesBomDaoImpl.java @@ -20,7 +20,7 @@ import java.util.List; @Service @Slf4j -public class MesDaoImpl implements IMesBomDao { +public class MesBomDaoImpl implements IMesBomDao { @Autowired private EntityManager entityManager; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesLoadingListDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesLoadingListDetailDaoImpl.java index 67f0682..5b2a1c8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesLoadingListDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesLoadingListDetailDaoImpl.java @@ -37,12 +37,12 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao { StringBuffer hql = new StringBuffer("select mll.order_code ,mll.cust_name ,mll.cust_organize_name ,mll.shipping_group_name , "); hql.append(" mll.status , mll.truck_no ,mll.weather , ms.shipping_code ,ms.start_scan_time ,ms.end_scan_time ,mlld.status as shipStatus , "); hql.append(" mlld.create_date_time , mll.create_user ,mll.modify_date_time , ms.modify_user , "); - hql.append(" mll.cust_code , mll.cust_organize_code ,mll.shipping_group_code "); + hql.append(" mll.cust_code , mll.cust_organize_code ,mll.shipping_group_code,mlld.remark "); hql.append(" from mes_loading_list as mll"); hql.append(" inner join mes_loading_list_detail as mlld on mll.id = mlld.pid"); hql.append(" and mll.organize_code = mlld.organize_code and mll.is_deleted = mlld.is_deleted and mll.is_valid = mlld.is_valid "); - hql.append(" inner join mes_shipping as ms on mlld.shipping_id = ms.id "); - hql.append(" and mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid "); + hql.append(" left join mes_shipping as ms on mlld.shipping_code = ms.shipping_code "); + hql.append(" and ((mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid) or (ms.id is null)) "); hql.append(" where mll.organize_code = :organizeCode "); hql.append(" and mll.is_deleted = :isDeleted "); hql.append(" and mll.is_valid = :isValid "); @@ -94,6 +94,7 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao { model.setCustCode(StringUtils.isEmpty(cells[15]) ? "" : String.valueOf(cells[15])); model.setCustOrganizeCode(StringUtils.isEmpty(cells[16]) ? "" : String.valueOf(cells[16])); model.setShippingGroupCode(StringUtils.isEmpty(cells[17]) ? "" : String.valueOf(cells[17])); + model.setRemark(StringUtils.isEmpty(cells[18]) ? "" : String.valueOf(cells[18])); modelList.add(model); } @@ -108,8 +109,8 @@ public class MesLoadingListDetailDaoImpl implements IMesLoadingListDetailDao { hql.append(" from mes_loading_list as mll"); hql.append(" inner join mes_loading_list_detail as mlld on mll.id = mlld.pid"); hql.append(" and mll.organize_code = mlld.organize_code and mll.is_deleted = mlld.is_deleted and mll.is_valid = mlld.is_valid "); - hql.append(" inner join mes_shipping as ms on mlld.shipping_id = ms.id "); - hql.append(" and mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid "); + hql.append(" left join mes_shipping as ms on mlld.shipping_code = ms.shipping_code "); + hql.append(" and ((mlld.organize_code = ms.organize_code and mlld.is_deleted = ms.is_deleted and mlld.is_valid = ms.is_valid) or (ms.id is null)) "); hql.append(" where mll.organize_code = :organizeCode "); hql.append(" and mll.is_deleted = :isDeleted "); hql.append(" and mll.is_valid = :isValid "); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java index e7db34c..7441f61 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesProdRuleNosortCfgDaoImpl.java @@ -35,4 +35,22 @@ public class MesProdRuleNosortCfgDaoImpl implements IMesProdRuleNosortCfgDao { return query.getResultList(); } + + @Override + public List findMesProdRuleNosortCfgByWorkCellCode(String workCellCode, String partNo, String organizeCode) { + StringBuffer hql = new StringBuffer("select ns from MesProdRuleNosortCfg ns" + + " left join MesWcEquipment we on ns.equipmentCode = we.equipmentCode " + + " where ns.isDeleted=:isDeleted and ns.isValid = :isValid and ns.organizeCode = :organizeCode " + + " and we.isDeleted=:isDeleted and we.isValid = :isValid and we.organizeCode = :organizeCode " + + " and we.workCellCode = :workCellCode and ns.inPartNo = :inPartNo order by ns.createDatetime desc"); + + Query query = entityManager.createQuery(hql.toString(), MesProdRuleNosortCfg.class); + query.setParameter("organizeCode", organizeCode); + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("workCellCode", workCellCode); + query.setParameter("inPartNo", partNo); + + return query.getResultList(); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java index 32532d4..3cbd941 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesShippingOrderManagementDetailDaoImpl.java @@ -2,9 +2,13 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -15,6 +19,7 @@ import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @Description :SAP生产计划 @@ -98,4 +103,88 @@ public class MesShippingOrderManagementDetailDaoImpl implements IMesShippingOrde return modelList; } + + @Override + public ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) { + StringBuilder dataHql = new StringBuilder(); + dataHql.append(" select new ").append(MesShippingOrderManagementDetailModel.class.getName()).append("(m,d)"); + //共用HQL + String commonHql = getCommonHql(mesShippingOrderManagementDetailModel); + //行数 + Query countQuery = entityManager.createQuery("select count(1) " + commonHql); + setParameter(mesShippingOrderManagementDetailModel, countQuery); + //数据 + Query dataQuery = entityManager.createQuery(dataHql.append(commonHql).append(getOrderBy(mesShippingOrderManagementDetailModel)).toString(), MesShippingOrderManagementDetailModel.class); + setParameter(mesShippingOrderManagementDetailModel, dataQuery); + if (Objects.isNull(pager)) return new ListPager<>(dataQuery.getResultList(), pager); + + int count = Integer.parseInt(String.valueOf(countQuery.getSingleResult())); + if (count <= 0) return new ListPager<>(new ArrayList<>(), pager); + pager = PagerHelper.getPager(pager, count); + dataQuery.setFirstResult(pager.getStartRow()).setMaxResults(pager.getPageSize()); + return new ListPager<>(dataQuery.getResultList(), pager); + } + + private void setParameter(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Query query) { + query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + query.setParameter("organizeCode", mesShippingOrderManagementDetailModel.getOrganizeCode()); + query.setParameter("status", MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.SHIPPINGED.getValue()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType())) + query.setParameter("shippingType", mesShippingOrderManagementDetailModel.getShippingType()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart())) + query.setParameter("startScanTimeStart", mesShippingOrderManagementDetailModel.getStartScanTimeStart()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeEnd())) + query.setParameter("startScanTimeEnd", mesShippingOrderManagementDetailModel.getStartScanTimeEnd()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeStart())) + query.setParameter("endScanTimeStart", mesShippingOrderManagementDetailModel.getEndScanTimeStart()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeEnd())) + query.setParameter("endScanTimeEnd", mesShippingOrderManagementDetailModel.getEndScanTimeEnd()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeStart())) + query.setParameter("publishTimeStart", mesShippingOrderManagementDetailModel.getPublishTimeStart()); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd())) + query.setParameter("publishTimeEnd", mesShippingOrderManagementDetailModel.getPublishTimeEnd()); + } + + private String getOrderBy(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) { + StringBuilder orderBy = new StringBuilder(); + if (StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getOrderByParam()) || StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getAscOrDesc())) { + mesShippingOrderManagementDetailModel.setOrderByParam("createDatetime"); + mesShippingOrderManagementDetailModel.setAscOrDesc(CommonEnumUtil.ASC_OR_DESC.DESC.getValue()); + } + return orderBy.append(" order by d.").append(mesShippingOrderManagementDetailModel.getOrderByParam()).append(" ").append(CommonEnumUtil.ASC_OR_DESC.DESC.getValue() == mesShippingOrderManagementDetailModel.getAscOrDesc() ? "desc" : "asc").toString(); + } + + private String getCommonHql(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel) { + StringBuilder commonHql = new StringBuilder(); + commonHql.append(" from MesShippingOrderManagement m left join MesShippingOrderManagementDetail d on m.id = d.pid"); + commonHql.append(" where m.isDeleted=:isDeleted and m.isValid = :isValid and m.organizeCode = :organizeCode "); + commonHql.append(" and d.isDeleted=:isDeleted and d.isValid = :isValid and d.organizeCode = :organizeCode "); + commonHql.append(" and d.status = :status "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingCode())) + commonHql.append(" and m.shippingCode like '%").append(mesShippingOrderManagementDetailModel.getShippingCode()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getBarcode())) + commonHql.append(" and d.barcode like '%").append(mesShippingOrderManagementDetailModel.getBarcode()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPartNo())) + commonHql.append(" and d.partNo like '%").append(mesShippingOrderManagementDetailModel.getPartNo()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getCustPartNo())) + commonHql.append(" and d.custPartNo like '%").append(mesShippingOrderManagementDetailModel.getCustPartNo()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getShippingType())) + commonHql.append(" and m.shippingType = :shippingType "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getCustCode())) + commonHql.append(" and m.custCode like '%").append(mesShippingOrderManagementDetailModel.getCustCode()).append("%' "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeStart())) + commonHql.append(" and m.startScanTime >= :startScanTimeStart "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getStartScanTimeEnd())) + commonHql.append(" and m.startScanTime <= :startScanTimeEnd "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeStart())) + commonHql.append(" and m.endScanTime >= :endScanTimeStart "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getEndScanTimeEnd())) + commonHql.append(" and m.endScanTime <= :endScanTimeEnd "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeStart())) + commonHql.append(" and m.publishTime >= :publishTimeStart "); + if (!StringUtils.isEmpty(mesShippingOrderManagementDetailModel.getPublishTimeEnd())) + commonHql.append(" and m.publishTime <= :publishTimeEnd "); + return commonHql.toString(); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java index 2db115a..5845d92 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/MesWorkOrderDaoImpl.java @@ -1,14 +1,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.daoimpl; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesWorkOrderDao; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; import lombok.extern.slf4j.Slf4j; +import org.hibernate.SQLQuery; +import org.hibernate.transform.Transformers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.persistence.EntityManager; import javax.persistence.Query; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; /** @@ -26,15 +31,30 @@ public class MesWorkOrderDaoImpl implements IMesWorkOrderDao { private EntityManager entityManager; @Override - public List sumMesWorkOrderQtyToSap(String organizeCode, List statusList) { - StringBuffer hql = new StringBuffer("select new " + MesWorkOrderModel.class.getName() + "(partNo,planStartTime,productVersion,sum(case when workOrderStatus = 40 then 0 else qty end) as sumQty) " + - " from MesWorkOrder where isDeleted=:isDeleted and isValid = :isValid and organizeCode = :organizeCode " + - "and workOrderStatus not in(:statusList) group by partNo,planStartTime,productVersion"); - Query query = entityManager.createQuery(hql.toString(), MesWorkOrderModel.class); + public List sumMesWorkOrderQtyToSap(String organizeCode, List statusList,List partNoList) { + StringBuffer hql = new StringBuffer("select organize_Code as organizeCode,part_No as partNo, date_format(plan_start_time, '%Y-%m-%d' ) as planStartTime, product_Version as productVersion, " + + " sum( CASE WHEN work_Order_Status = 40 THEN complete_Qty ELSE qty END ) AS qty " + + " from Mes_Work_Order where is_Deleted=:isDeleted and is_Valid = :isValid and organize_Code = :organizeCode " + + " and work_order_type = 20 and order_flag !='P' and part_no in (:partNoList) "+ + " and work_Order_Status not in(:statusList) group by organize_code,part_No, date_format(plan_start_time, '%Y-%m-%d' ), product_Version "); + Query query = entityManager.createNativeQuery(hql.toString()); query.setParameter("organizeCode", organizeCode); query.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); query.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); query.setParameter("statusList", statusList); - return query.getResultList(); + query.setParameter("partNoList", partNoList); + query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); + + List> hashMaps = query.getResultList(); + List mesWorkOrderList =new ArrayList<>(); + for (HashMap hashMap : hashMaps) { + try { + mesWorkOrderList.add((MesWorkOrderModel) BeanUtil.populateBean(hashMap, MesWorkOrderModel.class)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + return mesWorkOrderList; } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java index 492ce05..c6dffdc 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/daoimpl/board/MesYfBoardDaoImpl.java @@ -12,6 +12,7 @@ import org.springframework.util.CollectionUtils; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; /** @@ -71,12 +72,14 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { } @Override - public List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime) { - //先查询生产加工表中指定时间区间、指定产线已加工完成的数据 + public List queryCompletedSnInfo(String workCenterCode, String organizeCode, String startTime, String endTime, Set workOrderNoSet) { + //先查询生产加工表中指定时间区间、指定产线(指定工单)已加工完成的数据(过程条码,创建时间、工单号,物料号) StringBuffer queryMesProductionRecordSql = new StringBuffer(); - queryMesProductionRecordSql.append("select distinct new " + MesWorkCenterBoardResultModel.class.getName() + + queryMesProductionRecordSql.append("select new " + MesWorkCenterBoardResultModel.class.getName() + "(serialNumber, " + - "createDatetime) " + + "createDatetime, " + + "workOrderNo, " + + "partNo) " + "from MesProductionRecord " + "where isValid = :isValid " + "and isDeleted = :isDeleted " + @@ -85,6 +88,9 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { "and isComplete = :isComplete " + "and createDatetime >= :startTime " + "and createDatetime <= :endTime "); + if (!CollectionUtils.isEmpty(workOrderNoSet)) { + queryMesProductionRecordSql.append("and workOrderNo in (:workOrderNoSet) "); + } Query mesProductionRecordQuery = entityManager.createQuery(queryMesProductionRecordSql.toString(), MesWorkCenterBoardResultModel.class); mesProductionRecordQuery.setParameter("isValid", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecordQuery.setParameter("isDeleted", CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); @@ -93,13 +99,17 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { mesProductionRecordQuery.setParameter("isComplete", CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); mesProductionRecordQuery.setParameter("startTime", startTime); mesProductionRecordQuery.setParameter("endTime", endTime); + if (!CollectionUtils.isEmpty(workOrderNoSet)) { + mesProductionRecordQuery.setParameter("workOrderNoSet", workOrderNoSet); + } List productionRecordQueryResultList = mesProductionRecordQuery.getResultList(); if (!CollectionUtils.isEmpty(productionRecordQueryResultList)) { //取出所有过程条码 List serialNumberList = productionRecordQueryResultList. stream().map(MesWorkCenterBoardResultModel::getSerialNumber).collect(Collectors.toList()); + //查询合格的过程条码与对应的物料号 拼接后的结果 StringBuffer queryMesProduceSnSql = new StringBuffer(); - queryMesProduceSnSql.append("select distinct serialNumber " + + queryMesProduceSnSql.append("select CONCAT(serial_number,part_no) " + "from MesProduceSn " + "where isValid = :isValid " + "and isDeleted = :isDeleted " + @@ -114,7 +124,7 @@ public class MesYfBoardDaoImpl implements IMesYfBoardDao { mesProduceSnQuery.setParameter("serialNumberList", serialNumberList); List resultList = mesProduceSnQuery.getResultList(); for (MesWorkCenterBoardResultModel resultModel : productionRecordQueryResultList) { - if (resultList.contains(resultModel.getSerialNumber())) { + if (!CollectionUtils.isEmpty(resultList) && resultList.contains(resultModel.getSerialNumber() + resultModel.getPartNo())) { resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); }else { resultModel.setQcStatus(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS.getValue()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java index 854c57d..b6a01a8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbQuery.java @@ -119,6 +119,7 @@ public class WmsSAPDbQuery { * @throws Exception */ public String partName(String organizeCode, String partNo) throws Exception { + if(StringUtil.isEmpty(partNo) || StringUtil.isEmpty(organizeCode)) return ""; String sqlString = "select part_name from mes_part where organize_code='" + organizeCode + "' and part_no='" + partNo + "'"; @@ -138,9 +139,12 @@ public class WmsSAPDbQuery { * @throws Exception */ public String getColumnDateBySql(String sql, String params, String column) throws Exception { + if(StringUtil.isEmpty(sql)) return ""; String[] split = null; if (!StringUtil.isEmpty(params)) { split = params.split(","); + }else{ + if(sql.contains("?")) return ""; } List> result = mesDataSourceProxy.queryMapList(srcConn, sql, split); if (CollectionUtils.isNotEmpty(result)) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java index 137a467..d6a482d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/dbinterface/WmsSAPDbWriter.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.dbinterface; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.serviceimpl.engine.script.EngineScriptManager; import cn.estsh.i3plus.mes.apiservice.util.datatable.DataRow; import cn.estsh.i3plus.mes.apiservice.util.datatable.DataSet; @@ -8,17 +9,16 @@ import cn.estsh.i3plus.platform.plugin.datasource.DynamicDataSourceProxy; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.i3plus.pojo.wms.dbinterface.UpdateSyncItem; -import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceEnumUtil; import cn.estsh.impp.framework.boot.util.ImppRedis; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.sql.Connection; @@ -85,29 +85,15 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { saveDestData(destDataSet); } } catch (Exception e) { - //记录sap过来的数据 超过一定的请求次数放弃数据 - if (WmsInterfaceEnumUtil.DIRECTION_TYPE.SAP2WMS.getName().equals(this.dataMapper.getGroupName())) { - if (!CollectionUtils.isEmpty(srcDataList)) { - String key = this.dataMapper.getSoftAdaptorCode() + ":" + srcDataList.get(0).get("SID"); - if (redisMes.hasKey(key)) { - int reqCount = Integer.parseInt(String.valueOf(redisMes.getObject(key))); - if (reqCount + 1 > REQ_COUNT) { - if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { - callScriptMark(srcDataList, originDataList); - } else { - callSqlMark(srcDataList, originDataList); - } - LOGGER.error("超过请求次数放弃数据 WmsSAPDbWriter.saveData SoftAdaptorCode:{}, SID:{}", this.dataMapper.getSoftAdaptorCode(), srcDataList.get(0).get("SID")); - return; - } else { - redisMes.incr(key, 1); - } - } else { - redisMes.incr(key, 1); - } - } + LOGGER.info(ExceptionUtils.getStackTrace(e)); + return; + } finally { + //同步失败,更新同步状态为同步失败 + if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { + callScriptMark(srcDataList, originDataList); + } else { + callSqlMark(srcDataList, originDataList, false); } - throw e; } // 再更新来源数据的同步标志 @@ -115,7 +101,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { if (this.dataMapper.getUseScriptMark() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) { callScriptMark(srcDataList, originDataList); } else { - callSqlMark(srcDataList, originDataList); + callSqlMark(srcDataList, originDataList,true); } } @@ -125,12 +111,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { * @param originDataList 原始查询到的数据集 * @throws Exception */ - private void callSqlMark(List> srcDataList, List> originDataList) + private void callSqlMark(List> srcDataList, List> originDataList,boolean isSuccess) throws Exception { if (originDataList != null) { - saveSrcData(originDataList); + saveSrcData(originDataList,isSuccess); } else { - saveSrcData(srcDataList); + saveSrcData(srcDataList,isSuccess); } } @@ -243,7 +229,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { * @param srcDataList * @throws Exception */ - private void saveSrcData(List> srcDataList) throws Exception { + private void saveSrcData(List> srcDataList,boolean isSuccess) throws Exception { if (srcDataList == null || srcDataList.size() == 0) { LOGGER.error("no data in src datalist!"); throw new IllegalArgumentException("no data in src datalist!"); @@ -275,7 +261,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { } // 把来源表的数据行放到表达式中,确保表达式可以引用 - HashMap updateValueMap = getUpdateSyncMap(srcRow); + HashMap updateValueMap = getUpdateSyncMap(srcRow,isSuccess); // 存在来源表不需要更新同步标志的情况 if (updateValueMap.size() > 0) { // 拼接更新来源表同步标志的 SQL LIST @@ -345,7 +331,7 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { * * @return */ - private HashMap getUpdateSyncMap(Map srcRow) throws Exception { + private HashMap getUpdateSyncMap(Map srcRow,boolean isSuccess) throws Exception { HashMap updateSyncMap = new HashMap<>(); if (this.getSrcUpdateSync() == null) { @@ -354,9 +340,12 @@ public class WmsSAPDbWriter extends WmsSAPDbSyncBase { for (UpdateSyncItem item : this.getSrcUpdateSync()) { Object updateValue = item.getUpdateValue(); + if(!StringUtils.isEmpty(item.getUpdateValue()) && item.getUpdateValue().contains(MesExtConstWords.COLON)){ + updateValue = isSuccess ? item.getUpdateValue().split(MesExtConstWords.COLON)[0]:item.getUpdateValue().split(MesExtConstWords.COLON)[1]; + } // 如果包含表达式,则计算后赋值 - if (item.getUpdateValue().indexOf("#") != -1) { + if (item.getUpdateValue().contains("#")) { updateValue = wmsSAPDbExpression.parse(item.getUpdateValue(), srcRow); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java index 6905562..e48673c 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsScrapJob.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; import cn.estsh.i3plus.ext.mes.api.base.IMesQmsScrapService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -79,11 +81,11 @@ public class MesQmsScrapJob extends BaseMesScheduleJob { List mesPartInspectionList = partInspectionRepository.findByHqlWhere(packBean); if (!CollectionUtils.isEmpty(mesPartInspectionList)) { - qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList,organizeCode); + qmsScrapService.doQmsScrapByPartInspection(mesPartInspectionList, organizeCode); for (MesPartInspection mesPartInspection : mesPartInspectionList) { - mesPartInspection.setSystemSyncStatus(1); - mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true)); + mesPartInspection.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB); } partInspectionRepository.saveAll(mesPartInspectionList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java index 1482100..9774280 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesQmsSuspiciousJob.java @@ -1,7 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; import cn.estsh.i3plus.ext.mes.api.base.IMesQmsSuspiciousService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; @@ -89,20 +91,29 @@ public class MesQmsSuspiciousJob extends BaseMesScheduleJob { if (!CollectionUtils.isEmpty(mesPartInspectionList)) { //过滤掉已经汇总的 List partInspectionList = new ArrayList<>(); - //排序取未同步的一条最早的 - Map> partMap = mesPartInspectionList.stream().collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo())); - for (Map.Entry> stringListEntry : partMap.entrySet()) { + //排序取单件逻辑未同步的一条最新的 + Map> partSnMap = mesPartInspectionList.stream() + .filter(p -> p.getSourceType() == 10) + .collect(Collectors.groupingBy(p -> p.getSn() + "-" + p.getPartNo())); + for (Map.Entry> stringListEntry : partSnMap.entrySet()) { List value = stringListEntry.getValue(); MesPartInspection next = value.stream().sorted(Comparator.comparing(MesPartInspection::getCreateDatetime).reversed()).iterator().next(); partInspectionList.add(next); } - LOGGER.info("MES可疑品汇总 ----- partInspectionList{}",partInspectionList.size()); + //批次逻辑的全部汇总数量 42692 MES:可疑品汇总逻辑更新 + Map> partMap = mesPartInspectionList.stream() + .filter(p -> p.getSourceType() == 20) + .collect(Collectors.groupingBy(MesPartInspection::getPartNo)); + for (Map.Entry> stringListEntry : partMap.entrySet()) { + partInspectionList.addAll(stringListEntry.getValue()); + } + LOGGER.info("MES可疑品汇总 ----- partInspectionList{}", partInspectionList.size()); qmsSuspiciousService.doQmsSuspiciousByPartInspection(partInspectionList, organizeCode); for (MesPartInspection mesPartInspection : mesPartInspectionList) { mesPartInspection.setQmsSync(1); - mesPartInspection.setSystemSyncDatetime(TimeTool.getNowTime(true)); + ConvertBean.serviceModelUpdate(mesPartInspection, MesExtConstWords.JOB); } partInspectionRepository.saveAll(mesPartInspectionList); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java index 3386444..ada84ee 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderToSapJob.java @@ -1,8 +1,12 @@ package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +import cn.estsh.i3plus.mes.apiservice.util.DateUtil; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; import cn.estsh.impp.framework.boot.init.ApplicationProperties; import io.swagger.annotations.ApiOperation; @@ -15,7 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.CollectionUtils; +import java.util.Date; import java.util.List; +import java.util.Objects; /** * @Description : 汇总工单给SAP @@ -39,6 +45,9 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob { @Autowired private IMesWorkOrderToSapService mesWorkOrderToSapService; + @Autowired + private IMesConfigService mesConfigService; + @Value("${server.port}") private String serverPort; @Value("${impp.server.ip}") @@ -59,11 +68,21 @@ public class MesWorkOrderToSapJob extends BaseMesScheduleJob { } String[] organizeCodeList = jobParam.split(","); LOGGER.info("汇总工单给SAP开始 -----start"); + String userName = "job"; for (String organizeCode : organizeCodeList) { - List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode); + MesConfig sendToSap = mesConfigService.getCfgValueByCode(organizeCode,"LAST_SEND_TO_SAP_TIME"); + String lastSendToSapTime = null; + if(Objects.isNull(sendToSap) || StringUtils.isEmpty(sendToSap.getCfgValue())){ + lastSendToSapTime = TimeTool.pareDateToString(new Date(0)); + }else{ + lastSendToSapTime = sendToSap.getCfgValue(); + sendToSap.setCfgValue(TimeTool.pareDateToString(DateUtil.addMinutes(new Date(), -10))); + mesConfigService.update(sendToSap,userName); + } + List mesWorkOrderList = mesWorkOrderService.sumMesWorkOrderQtyToSap(organizeCode,lastSendToSapTime); if (!CollectionUtils.isEmpty(mesWorkOrderList)) { - mesWorkOrderToSapService.doMesWorkOrder(organizeCode, mesWorkOrderList); + mesWorkOrderToSapService.doMesWorkOrder(organizeCode,userName, mesWorkOrderList); } } LOGGER.info("汇总工单给SAP开始结束 ----- end"); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java index e0ef486..34b01de 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBtoJobServiceImpl.java @@ -2,17 +2,25 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesBtoJobService; import cn.estsh.i3plus.ext.mes.api.base.strategy.IRoundnessStrategy; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesCustomerMessagePoint; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroup; import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupDetail; +import cn.estsh.i3plus.pojo.mes.bean.MesPartProdGroupWindowTime; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; +import cn.estsh.i3plus.pojo.mes.repository.MesPartProdGroupWindowTimeRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.stream.Collectors; /** @@ -33,6 +41,10 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { @Autowired private MesCustSoftInfoServiceImpl mesCustSoftInfoService; + + @Autowired + private MesPartProdGroupWindowTimeRepository windowTimeRao; + @Override public void doCreateBto(String organizeCode, List groupCodeList) { //1. 根据 organizeCode 和 groupCodeList 查询零件生产组 @@ -49,12 +61,25 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { List custPartNoList = details.stream().map(MesPartProdGroupDetail::getCustPartNo).collect(Collectors.toList()); List sortInfoList = mesCustSoftInfoService.queryCustSortInfoList(prodGroup.getCustCode(), prodGroup.getCustOrganizeCode(), prodGroup.getCustInfoPoint(), organizeCode, custPartNoList); + //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 + String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundMethod()); if (sortInfoList.isEmpty()){ log.info("当前零件生产组:{}没有排序信息",prodGroup.getPartProdGroupName()); + //如果圆整方式是按时圆整,且没有排序信息,更新窗口时间 + try { + MesPartProdGroupWindowTime time = getWindowTimeByProductGroup(prodGroup.getId(), organizeCode); + if (time != null){ + String lastRunTime = TimeTool.getNowTime(true); + log.info("当前零件生产组:{},更新本次执行时间:{},窗口时间为:{}",prodGroup.getPartProdGroupCode(),lastRunTime,time.getWindowTime()); + ConvertBean.saveOrUpdate(time, "JOB"); + time.setLastRunTime(lastRunTime); + windowTimeRao.update(time); + } + } catch (ParseException e) { + log.info("解析失败:{}",e.getMessage()); + } continue; } - //6. 根据零件生产组的RoundnessType 去做策略,现在只做 窗口时间 策略; 入参 - String roundnessService = MesExtEnumUtil.SHIPPING_GROUP_ROUND_METHOD.valueOfService(prodGroup.getRoundType()); IRoundnessStrategy roundnessStrategy = (IRoundnessStrategy)SpringContextsUtil.getBean(roundnessService); roundnessStrategy.execute(prodGroup,sortInfoList, details); } @@ -72,4 +97,50 @@ public class MesBtoJobServiceImpl implements IMesBtoJobService { return null; } + + private MesPartProdGroupWindowTime getWindowTimeByProductGroup(Long partProdGroupId, String organizeCode) throws ParseException { + DdlPackBean windowTimPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(partProdGroupId, "pid", windowTimPackBean); + List windowTimeList = windowTimeRao.findByHqlWhere(windowTimPackBean); + if (windowTimeList.isEmpty()) { + return null; + } + //获取当前时间的HH mm + Date now = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(now); + int hour = calendar.get(Calendar.HOUR_OF_DAY); // 获取小时(24小时制) + int minute = calendar.get(Calendar.MINUTE); + String nowTime = String.format("%02d:%02d", hour, minute); + //遍历窗口时间获取最新的窗口时间 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + //使用降序 + List sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime,Comparator.reverseOrder())).collect(Collectors.toList()); + for (MesPartProdGroupWindowTime time : sortedTime) { + if (Integer.parseInt(time.getWindowTime().replace(":", "")) > Integer.parseInt(nowTime.replace(":", ""))) { + continue; + } + calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2))); + calendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4))); + calendar.set(Calendar.SECOND, 0); + Date dateCreateOrder = calendar.getTime(); + if (Objects.isNull(time.getLastRunTime())) { + return time; + } + //校验lastRuntime 是否已经在当前圆整时区已经生成完了工单 + Date lastRunTime = sdf.parse(time.getLastRunTime()); + Calendar lastRunTimeCalendar = Calendar.getInstance(); + lastRunTimeCalendar.setTime(lastRunTime); + lastRunTimeCalendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2))); + lastRunTimeCalendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4))); + lastRunTimeCalendar.set(Calendar.SECOND, 1); + //两个相同的时间比较before,返回值为false,把上次运行的时间格式化为窗口时间,加1秒是过滤掉相等的情况 + if (dateCreateOrder.before(lastRunTimeCalendar.getTime())) { + continue; + } + log.info("零件生产组详情id:{},本次运行时间:{},格式化后的上次运行时间:{},上次运行时间为:{}",partProdGroupId,sdf.format(dateCreateOrder),sdf.format(lastRunTimeCalendar.getTime()),time.getLastRunTime()); + return time; + } + return null; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java index d8f381b..2e9a4f7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesConfigService.java @@ -1,13 +1,23 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesConfig; import cn.estsh.i3plus.pojo.mes.repository.MesConfigRepository; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; /** * @Description: @@ -40,4 +50,60 @@ public class MesConfigService implements IMesConfigService { return this.configRepository.getByProperty(new String[]{"isDeleted", "isValid", "cfgCode"}, new Object[]{CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode}); } + + @Override + public MesConfig getCfgValueByCode(String organizeCode,String cfgCode) { + return this.configRepository.getByProperty(new String[]{"organizeCode","isDeleted", "isValid", "cfgCode"}, + new Object[]{organizeCode,CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), cfgCode}); + } + + @Override + public List getConfigList(String organizeCode, String cfgCode, String cfgKey, String cfgType) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(cfgCode, MesExtConstWords.CFG_CODE, packBean); + DdlPreparedPack.getStringEqualPack(cfgKey, MesExtConstWords.CFG_KEY, packBean); + DdlPreparedPack.getStringEqualPack(cfgType, MesExtConstWords.CFG_TYPE, packBean); + return configRepository.findByHqlWhere(packBean); + } + + @Override + public Boolean checkCfgValueIsContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, String item) { + String cfgValue = getAndMergeCfgValue(organizeCode, cfgCode, cfgKey, cfgType, splitStr); + if (StringUtils.isEmpty(cfgValue)) return false; + List cfgValueList = Arrays.asList(cfgValue.split(splitStr)); + return (!CollectionUtils.isEmpty(cfgValueList) && cfgValueList.contains(item)) ? true : false; + } + + private String getAndMergeCfgValue(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr) { + List configList = getConfigList(organizeCode, cfgCode, cfgKey, cfgType); + if (CollectionUtils.isEmpty(configList)) return null; + return configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(splitStr)); + } + + @Override + public Boolean checkShardingTablesObjectCfg(String organizeCode, String cfgKey, String item) { + return checkCfgValueIsContainItem(organizeCode, MesExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES.name(), MesExtConstWords.COMMA, item); + } + + @Override + public List findCfgValueContainItem(String organizeCode, String cfgCode, String cfgKey, String cfgType, String splitStr, List itemList) { + String cfgValue = getAndMergeCfgValue(organizeCode, cfgCode, cfgKey, cfgType, splitStr); + if (StringUtils.isEmpty(cfgValue)) return null; + List cfgValueList = Arrays.asList(cfgValue.split(splitStr)); + if (CollectionUtils.isEmpty(cfgValueList)) return null; + return itemList.stream().filter(cfgValueList::contains).collect(Collectors.toList()); + } + + @Override + public List findShardingTablesObjectCfg(String organizeCode, String cfgKey, List itemList) { + if(CollectionUtils.isEmpty(itemList)) return null; + return findCfgValueContainItem(organizeCode, MesExtConstWords.MES_SHARDING_TABLES_OBJECT_CFG, cfgKey, CommonEnumUtil.SOFT_TYPE.MES.name(), MesExtConstWords.COMMA, itemList); + } + + @Override + public void update(MesConfig mesConfig,String userName) { + ConvertBean.serviceModelUpdate(mesConfig,userName); + configRepository.update(mesConfig); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java index eea273c..710c9ce 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesCustSoftInfoServiceImpl.java @@ -2,7 +2,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesCustSoftInfoService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo; import org.springframework.stereotype.Service; @@ -23,6 +25,7 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService public List queryCustSortInfoList(String custCode, String custOrganizeCode, String infoPointCode, String organizeCode, List custPartNoList) { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(custCode,"custCode", ddlPackBean); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"serviceFlag", ddlPackBean); DdlPreparedPack.getStringEqualPack(custOrganizeCode, "custOrganizeCode", ddlPackBean); DdlPreparedPack.getStringEqualPack(infoPointCode, "infoPointCode", ddlPackBean); DdlPreparedPack.getInPackList(custPartNoList,"custPartNo", ddlPackBean); @@ -31,8 +34,9 @@ public class MesCustSoftInfoServiceImpl extends BaseMesService @Override public void updateCustSortInfo(MesCustSortInfo custSortInfo) { - ConvertBean.saveOrUpdate(custSortInfo,"edi"); - baseRDao.update(custSortInfo); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(custSortInfo.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(custSortInfo.getId(),"id",ddlPackBean); + baseRDao.updateByProperties(new String[]{"serviceFlag","modifyUser","modifyDatetime"},new Object[]{CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"edi", TimeTool.getNowTime(true)},ddlPackBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java index 4b40bc3..80e69e9 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEnumExtService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEnum; import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail; +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceEnumUtil; import cn.estsh.i3plus.pojo.mes.repository.MesEnumDetailRepository; import cn.estsh.i3plus.pojo.mes.repository.MesEnumRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -75,6 +76,7 @@ public class MesEnumExtService extends BaseMesService implements IMesEn Map enumMap = getEnumMap(organizeCode, enumName); if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesExtEnumUtil.class); if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesEnumUtil.class); + if (CollectionUtils.isEmpty(enumMap)) enumMap = getEnumByClazzEnum(enumName, MesInterfaceEnumUtil.class); return enumMap; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java index 08e8a23..06a5039 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentVariableService.java @@ -45,7 +45,7 @@ public class MesEquipmentVariableService extends BaseMesService implements IMesInterfaceDataMapperService { + + @Override + protected void onInsertBean(MesInterfaceDataMapper item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空"); + ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空"); + ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在", + item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName()); + } + + } + + @Override + protected void onUpdateBean(MesInterfaceDataMapper item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getSrcTableName(), "来源表名不能为空"); + ValidatorBean.checkNotNull(item.getSrcWhere(), "来源表的查询条件不能为空"); + ValidatorBean.checkNotNull(item.getDestBeanName(), "目标实体对象的名字不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getSrcTableName(), "srcTableName", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getSrcWhere(), "srcWhere", seriesPackBean); + DdlPreparedPack.getStringEqualPack(item.getDestBeanName(), "destBeanName", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("来源表名为【%s】、查询条件为【%s】、目标实体对象为【%s】接口映射信息已存在", + item.getSrcTableName(), item.getSrcWhere(), item.getDestBeanName()); + } + } + + @Override + protected void setPackQueryBean(MesInterfaceDataMapper bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getSrcTableName(), "srcTableName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getDestBeanName(), "destBeanName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getBusiRoute(), "busiRoute", packBean); + DdlPreparedPack.getStringLikerPack(bean.getGroupName(), "groupName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getInterfaceName(), "interfaceName", packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java index 5d09ee9..d474b1a 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProduceSnServiceImpl.java @@ -2,6 +2,8 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; +import cn.estsh.i3plus.ext.mes.pojo.util.OverwriteStringJoin; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; @@ -11,6 +13,7 @@ import org.springframework.util.CollectionUtils; import java.util.Comparator; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -34,4 +37,15 @@ public class MesProduceSnServiceImpl extends BaseMesService implem } return produceSnList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); } + + @Override + public List findMesProduceSnList(String organizeCode, List snList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(snList, "productSn", packBean); + List produceSnList = baseRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(produceSnList)) { + MesException.throwMesBusiException("条码【%s】信息不存在", OverwriteStringJoin.join(MesExtConstWords.COMMA, snList)); + } + return produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java index 2067bf6..f21ff96 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesProductionRecordServiceImpl.java @@ -1,16 +1,37 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; +import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesProdRuleNosortCfgDao; +import cn.estsh.i3plus.ext.mes.apiservice.utils.BeanUtil; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; +import org.hibernate.SQLQuery; +import org.hibernate.transform.Transformers; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 设备加工记录表 @@ -22,16 +43,176 @@ import java.util.List; @Service @Slf4j public class MesProductionRecordServiceImpl extends BaseMesService implements IMesProductionRecordService { + @Autowired + private EntityManager entityManager; + + @Autowired + private IMesProdRuleNosortCfgDao mesProdRuleNosortCfgDao; + + @Autowired + private MesProduceSnRepository mesProduceSnRepository; @Override public List findMesProductionRecord(String organizeCode, String sn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); DdlPreparedPack.getStringEqualPack(sn, "productSn", packBean); - DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(),packBean); + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); List produceSnList = baseRDao.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(produceSnList)) { MesException.throwMesBusiException("条码【%s】加工记录信息不存在", sn); } return produceSnList; } + + @Override + public ListPager queryRecordGroupByPartNoWorkCellCode(MesProductionRecord mesProductionRecord, Pager pager) { + + return queryERPMaterialStockHqlPager(mesProductionRecord, pager); + } + + @Override + public ListPager queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel, Pager pager) { + List mesProdRuleNosortCfgs = mesProdRuleNosortCfgDao.findMesProdRuleNosortCfgByWorkCellCode(mesProductionRecordModel.getOnLineWorkCellCode(), mesProductionRecordModel.getPartNo(), mesProductionRecordModel.getOrganizeCode()); + if(CollectionUtils.isEmpty(mesProdRuleNosortCfgs) || StringUtil.isEmpty(mesProdRuleNosortCfgs.iterator().next().getOutPartNo())) return new ListPager<>(new ArrayList<>(),pager); + //筛选下线工位的当前零件的产成条码 + List mesProduceSnList = getMesProduceSnList(mesProductionRecordModel); + if(CollectionUtils.isEmpty(mesProduceSnList)) return new ListPager<>(new ArrayList<>(),pager); + //在上线工位消耗进料条码且没有报工 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProdRuleNosortCfgs.iterator().next().getOutPartNo(),"partNo",packBean); + DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getOnLineWorkCellCode(),"workCellCode",packBean); + DdlPreparedPack.getInPackList(mesProduceSnList.stream().map(MesProduceSn::getProductSn).distinct().collect(Collectors.toList()),"productSn",packBean); + List productionRecordList = baseRDao.findByHqlWhere(packBean); + Map productionRecordMap = new HashMap<>(); + if(!CollectionUtils.isEmpty(productionRecordList)){ + for (MesProductionRecord productionRecord : productionRecordList) { + productionRecordMap.put(productionRecord.getProductSn(),productionRecord); + } + } + //数据组装 + List mesProductionRecordModelList = new ArrayList<>(); + MesProductionRecordModel model; + for (MesProduceSn mesProduceSn : mesProduceSnList) { + model = new MesProductionRecordModel(); + BeanUtils.copyProperties(mesProduceSn,model); + if(!productionRecordMap.containsKey(mesProduceSn.getProductSn()) || (productionRecordMap.containsKey(mesProduceSn.getProductSn()) && MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue() == productionRecordMap.get(mesProduceSn.getProductSn()).getReportStatus())){ + model.setOffLineWorkCellCode(mesProduceSn.getWorkCellCode()); + mesProductionRecordModelList.add(model); + } + } + pager = PagerHelper.getPager(pager, mesProductionRecordModelList.size()); + return new ListPager<>(mesProductionRecordModelList.subList(pager.getStartRow(), + Math.min(pager.getPageSize() * pager.getCurrentPage(), mesProductionRecordModelList.size())), pager); + } + + private List getMesProduceSnList(MesProductionRecordModel mesProductionRecordModel) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getPartNo(),"partNo",packBean); + DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getOffLineWorkCellCode(),"workCellCode",packBean); + DdlPreparedPack.getStringBiggerPack(mesProductionRecordModel.getCreateDateTimeStart(),"createDatetime",packBean); + DdlPreparedPack.getStringSmallerPack(mesProductionRecordModel.getCreateDateTimeEnd(),"createDatetime",packBean); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue(),"snStatus",packBean); + return mesProduceSnRepository.findByHqlWhere(packBean); + } + + private ListPager queryERPMaterialStockHqlPager(MesProductionRecord mesProductionRecord, Pager pager) { + String org = mesProductionRecord.getOrganizeCode(); + String startTime = mesProductionRecord.getCompleteDateTimeStart(); + String endTime = mesProductionRecord.getCompleteDateTimeEnd(); + List mesProductionRecordList = new ArrayList<>(); + String countSql = "select count(1) "; + String commHql = " SELECT " + + " DISTINCT mpr.id as id," + + " mpr.organize_code as organizeCode," + + " mpr.create_date_time AS createDatetime, " + + " mpr.create_user AS createUser, " + + " mpr.modify_date_time AS modifyDatetime, " + + " mpr.modify_user AS modifyUser, " + + " mpr.part_no as partNo," + + " mpr.part_name as partName," + + " mpr.work_center_code as workCenterCode," + + " mpr.shift_code as shiftCode," + + " mpr.work_cell_code as workCellCode," + + " mpr.equipment_name as equipmentName," + + " mpr.complete_date_time as completeDateTime," + + " count( mpr.qty) as qty "; + + String sql = " from mes_production_record mpr" + + " where 1=1 " + + " and mpr.organize_code =:organizeCode " + + " and mpr.report_type !='10' " + + " and mpr.is_deleted ='2' " + + " and mpr.is_valid ='1' "; + if (!StringUtil.isEmpty(startTime)) { + sql += " and mpr.complete_date_time >=:startTime "; + } + if (!StringUtil.isEmpty(endTime)) { + sql += " and mpr.complete_date_time <:endTime "; + } + + if (!StringUtil.isEmpty(mesProductionRecord.getPartNo())) { + sql += " and mpr.part_no ='" + mesProductionRecord.getPartNo() + "' "; + } + + if (!StringUtil.isEmpty(mesProductionRecord.getWorkCenterCode())) { + sql += " and mpr.work_center_code ='" + mesProductionRecord.getWorkCenterCode() + "' "; + } + + if (!StringUtil.isEmpty(mesProductionRecord.getShiftCode())) { + sql += " and mpr.shift_code ='" + mesProductionRecord.getShiftCode() + "' "; + } + + if (!StringUtil.isEmpty(mesProductionRecord.getWorkCellCode())) { + sql += " and mpr.work_cell_code ='" + mesProductionRecord.getWorkCellCode() + "' "; + } + + if (!StringUtil.isEmpty(mesProductionRecord.getEquipmentName())) { + sql += " and mpr.equipment_name like '%" + mesProductionRecord.getEquipmentName() + "%' "; + } + + sql += " GROUP BY mpr.part_no,mpr.work_cell_code ORDER BY mpr.complete_date_time desc "; + + Query queryObject = entityManager.createNativeQuery(commHql + sql); + queryObject.setParameter("organizeCode", org); + if (!StringUtil.isEmpty(startTime)) { + queryObject.setParameter("startTime", startTime); + } + if (!StringUtil.isEmpty(endTime)) { + queryObject.setParameter("endTime", endTime); + } + + Query queryCountObject = entityManager.createNativeQuery(countSql + sql); + queryCountObject.setParameter("organizeCode", org); + if (!StringUtil.isEmpty(startTime)) { + queryCountObject.setParameter("startTime", startTime); + } + if (!StringUtil.isEmpty(endTime)) { + queryCountObject.setParameter("endTime", endTime); + } + + queryObject.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP) + .setMaxResults(pager.getPageSize()).setFirstResult(pager.getStartRow()).getResultList(); + queryCountObject.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); + + List resultList = queryCountObject.getResultList(); + int countSize = resultList.size(); + if (countSize <= 0) { + return new ListPager(mesProductionRecordList,pager); + } + + pager = PagerHelper.getPager(pager, countSize); + + List> hashMaps = queryObject.getResultList(); + + for (HashMap hashMap : hashMaps) { + try { + mesProductionRecordList.add((MesProductionRecord) BeanUtil.populateBean(hashMap, MesProductionRecord.class)); + } catch (Exception e) { + e.printStackTrace(); + } + } + return new ListPager(mesProductionRecordList, pager); + + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java index 96b7a1c..d39b185 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsScrapService.java @@ -29,6 +29,7 @@ import java.util.stream.Collectors; public class MesQmsScrapService extends BaseMesService implements IMesQmsScrapService { @Autowired private MesPartInspectionDetailRepository partInspectionDetailRDao; + @Override protected void setPackQueryBean(MesQmsScrap bean, DdlPackBean packBean) { DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); @@ -49,7 +50,7 @@ public class MesQmsScrapService extends BaseMesService implements I String key = stringListEntry.getKey(); List mesPartInspections = stringListEntry.getValue(); MesPartInspection next = mesPartInspections.iterator().next(); - List mesPartInspectionDetails=new ArrayList<>(); + List mesPartInspectionDetails = new ArrayList<>(); for (MesPartInspection mesPartInspection : mesPartInspections) { mesPartInspectionDetails.addAll(idDetailListMap.get(mesPartInspection.getId())); } @@ -67,7 +68,7 @@ public class MesQmsScrapService extends BaseMesService implements I mesQmsScrap.setDefectTypeName(defectTypeName); mesQmsScrap.setReponsibilityId(next.getResponsibleParty()); mesQmsScrap.setNcJudger(next.getModifyUser()); - ConvertBean.serviceModelInitialize(mesQmsScrap,"MesScrapJob"); + ConvertBean.serviceModelInitialize(mesQmsScrap, "MesScrapJob"); baseRDao.insert(mesQmsScrap); } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java index 40f8c98..86aca2b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesQmsSuspiciousService.java @@ -75,14 +75,26 @@ public class MesQmsSuspiciousService extends BaseMesService im DdlPreparedPack.getStringEqualPack(partInspection.getSn(), "sn", packBeanNew); packBeanNew.setOrderByStr(" order by createDatetime "); MesPartInspection partInspectionDao = partInspectionRepository.getByProperty(packBeanNew); + //检验日期年月日可以根据创建日期截取,批次的不用取最早出现的 String qmsTime = partInspection.getCreateDatetime().substring(0, 13) + ":00:00"; - if (!StringUtil.isEmpty(partInspectionDao)) { + if (!StringUtil.isEmpty(partInspectionDao) && partInspection.getSourceType() == MesExtEnumUtil.PART_INSPECTION_SOURCE_TYPE.SINGLE.getValue()) { qmsTime = partInspectionDao.getCreateDatetime().substring(0, 13) + ":00:00"; } partInspectionNew.setInspectionDate(qmsTime); mesPartInspectionsListTime.add(partInspectionNew); } //根据时间分组发送 + // 批次的: + //A 2024-08-21 08:00 10 + //A 2024-08-21 08:00 10 + //B 2024-08-20 08:00 10 检验日期 2024-08-21 08:00 + //B 2024-08-21 08:00 10 检验日期 2024-08-21 08:00 + //单件的: + //A 2024-08-21 08:00 1 0 0 1 + // + //qms汇总表===== + //A 2024-08-21 08:00 21 0 0 1 + //B 2024-08-21 08:00 20 Map> mesPartInspectionsMap = mesPartInspectionsListTime.stream().collect(Collectors.groupingBy(MesPartInspection::getInspectionDate)); for (Map.Entry> partInspection : mesPartInspectionsMap.entrySet()) { List mesPartInspections = partInspection.getValue(); @@ -143,7 +155,7 @@ public class MesQmsSuspiciousService extends BaseMesService im mesQmsSuspicious.setReworkScrapped(0); mesQmsSuspicious.setPartNo(key); mesQmsSuspicious.setPartName(next.getPartName()); - //缺陷分类,缺陷数量JOSN格式: + //缺陷分类,缺陷数量JOSN格式:【批次&单件数量汇总时需要根据检验时间段合并】 //[{"Defect_Name":"缺陷01","Defect_Qty":1},{"Defect_Name":"缺陷02","Defect_Qty":2}] Map> listDefectMap = mesPartInspectionDetails.stream().collect(Collectors.groupingBy(MesPartInspectionDetail::getDefectTypeName)); List> defectsList = new ArrayList<>(); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRawPackageDetailServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRawPackageDetailServiceImpl.java index c9312be..716a344 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRawPackageDetailServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesRawPackageDetailServiceImpl.java @@ -23,7 +23,7 @@ public class MesRawPackageDetailServiceImpl extends BaseMesService implements IMesRawPackageService { protected void setPackQueryBean(MesRawPackage bean, DdlPackBean packBean) { - DdlPreparedPack.getStringLikerPack(bean.getPackageType(), "packageType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getPackageType(), "packageType", packBean); DdlPreparedPack.getStringLikerPack(bean.getName(), "name", packBean); } @@ -45,7 +45,7 @@ public class MesRawPackageServiceImpl extends BaseMesService impl ValidatorBean.checkNotNull(item.getPackageType(), "容器类型"); ValidatorBean.checkNotNull(item.getName(), "容器名称"); DdlPackBean packBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(item.getPackageType(), "packageType", packBean); + DdlPreparedPack.getNumEqualPack(item.getPackageType(), "packageType", packBean); DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", packBean); if (baseRDao.isExitByHql(packBean)) { MesException.throwMesBusiException("容器类型【%s】已存在", item.getPackageType()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java new file mode 100644 index 0000000..b747af8 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesScriptPersistenceServiceImpl.java @@ -0,0 +1,58 @@ +package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; + +import cn.estsh.i3plus.ext.mes.api.base.IMesScriptPersistenceService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesScriptPersistence; +import cn.estsh.i3plus.pojo.mes.dbinterface.MesInterfaceDataMapper; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @Description : 动态脚本 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/8/22 10:04 + * @Modify: + **/ +@Service +@Slf4j +public class MesScriptPersistenceServiceImpl extends BaseMesService implements IMesScriptPersistenceService { + + @Override + protected void onInsertBean(MesScriptPersistence item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo()); + } + + } + + @Override + protected void onUpdateBean(MesScriptPersistence item) { + // 数据校验 + ValidatorBean.checkNotNull(item.getScriptNo(), "脚本编号不能为空"); + + DdlPackBean seriesPackBean = DdlPackBean.getDdlPackBean(item.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(item.getScriptNo(), "scriptNo", seriesPackBean); + DdlPreparedPack.getNumNOEqualPack(item.getId(), "id", seriesPackBean); + if (baseRDao.isExitByHql(seriesPackBean)) { + MesException.throwMesBusiException("脚本编号【%s】已存在", item.getScriptNo()); + } + } + + @Override + protected void setPackQueryBean(MesScriptPersistence bean, DdlPackBean packBean) { + DdlPreparedPack.getStringLikerPack(bean.getScriptNo(), "scriptNo", packBean); + DdlPreparedPack.getStringRightLikerPack(bean.getScriptName(), "scriptName", packBean); + DdlPreparedPack.getNumEqualPack(bean.getScriptType(), "scriptType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getLanguageType(), "languageType", packBean); + } + +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java index b0f5bd9..3919fe0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementDetailService.java @@ -1,20 +1,32 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementDetailService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesShippingOrderManagementDetailDao; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; @Service @Slf4j @@ -23,6 +35,12 @@ public class MesShippingOrderManagementDetailService extends BaseMesService(modelList, pager); } + @Override + public ListPager queryMesShippingDetailsByPager(MesShippingOrderManagementDetailModel mesShippingOrderManagementDetailModel, Pager pager) { + return shippingOrderManagementDetailDao.queryMesShippingDetailsByPager(mesShippingOrderManagementDetailModel, pager); + } + + @Override + public void doShippingBack(Long[] idList, String organizeCode, String userName) { + List detailList = getManagementDetails(idList, organizeCode, userName); + if (CollectionUtils.isEmpty(detailList)) MesException.throwMesBusiException("选择数据无效,请检查"); + Map> mesProduceSnMap = getMesProduceSnMap(organizeCode, detailList); + List updateMesProduceSn = new ArrayList<>(); + for (MesShippingOrderManagementDetail detail : detailList) { + if (!mesProduceSnMap.containsKey(detail.getBarcode())) + MesException.throwMesBusiException("发运单条码[%s]信息不存在", detail.getBarcode()); + //更新条码状态为完成 + MesProduceSn mesProduceSn = mesProduceSnMap.get(detail.getBarcode()).iterator().next(); + mesProduceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); + mesProduceSn.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(mesProduceSn, userName); + updateMesProduceSn.add(mesProduceSn); + //软删明细 + detail.setIsDeleted(CommonEnumUtil.VALID); + detail.setSystemSyncStatus(CommonEnumUtil.FALSE); + ConvertBean.serviceModelUpdate(detail, userName); + } + baseRDao.saveAll(detailList); + if (!updateMesProduceSn.isEmpty()) { + mesProduceSnRepository.saveAll(updateMesProduceSn); + } + } + + private Map> getMesProduceSnMap(String organizeCode, List detailList) { + List snList = detailList.stream().map(MesShippingOrderManagementDetail::getBarcode).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(snList)) MesException.throwMesBusiException("发运单条码信息不存在"); + List mesProduceSnList = mesProduceSnService.findMesProduceSnList(organizeCode, snList); + return mesProduceSnList.stream().collect(Collectors.groupingBy(MesProduceSn::getProductSn)); + } + + private List getManagementDetails(Long[] idList, String organizeCode, String userName) { + if (Objects.isNull(idList) || StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(userName)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackArray(idList, "id", packBean); + List detailList = baseRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(detailList) || detailList.size() <= 0) + MesException.throwMesBusiException("选择数据不存在,请检查数据"); + return detailList; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterPartRelationService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterPartRelationService.java index 5046f7c..c029de6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterPartRelationService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkCenterPartRelationService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkCenterPartRelationService; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; @@ -50,7 +51,7 @@ public class MesWorkCenterPartRelationService extends BaseMesService relationList = beanList.stream().collect(Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>( - Comparator.comparing(p -> p.getPartNo() + ";" + p.getWorkCenterName()))), ArrayList::new)); + Comparator.comparing(p -> p.getPartNo() + ";" + p.getWorkCenterCode()))), ArrayList::new)); for (MesWorkCenterPartRelation item : relationList) { //根据零件号查询数据 @@ -68,17 +69,17 @@ public class MesWorkCenterPartRelationService extends BaseMesService centerList = mesWorkCenterRao.findByHqlWhere(workCenterPackBean); if (centerList.isEmpty()) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("产线【%s】不存在!",item.getWorkCenterName()) + .setErrorDetail("产线【%s】不存在!",item.getWorkCenterCode()) .build(); } MesWorkCenter mesWorkCenter = centerList.get(0); - item.setWorkCenterCode(mesWorkCenter.getWorkCenterCode()); + item.setWorkCenterName(mesWorkCenter.getWorkCenterName()); } return relationList; @@ -90,15 +91,13 @@ public class MesWorkCenterPartRelationService extends BaseMesService implements mesWorkOrderDb.getAdjustQty(), mesWorkOrderDb.getReportedQty()); } } + mesWorkOrderDb.setRemark(mesWorkOrder.getRemark()); //更新工单 updateMesWorkOrder(mesWorkOrderDb,(MesExtEnumUtil.REPORT_TYPE.REPORT.getValue() == mesWorkOrder.getReportType()) ? MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT : MesExtEnumUtil.WORK_ORDER_LOG_TYPE.REPORT_ADJUST,mesWorkOrder.getNum()); //试制单不报工 @@ -897,8 +900,9 @@ public class MesWorkOrderService extends BaseMesService implements String sn = getStringList(mesWorkOrder); //保存数据 List mesProductOffLineList = new ArrayList<>(); + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false)); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, false,nowTime)); } mesProductOffLineService.insertBatch(mesProductOffLineList); } @@ -991,8 +995,9 @@ public class MesWorkOrderService extends BaseMesService implements MesPartSap mesPartSap = mesPartSapService.getMesPartSapByPartNo(mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); //成品汇报 if (isReport) { + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false)); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime)); } } //成品移库 @@ -1005,8 +1010,9 @@ public class MesWorkOrderService extends BaseMesService implements } else if (MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue() == mesWorkOrder.getWorkOrderType()) { MesProdRuleNosortCfg mesProdRuleNoSortCfg = mesProdRuleNosortCfgService.findMesProdRuleNosortCfgByWorkCenterCode(mesWorkOrder.getWorkCenterCode(), mesWorkOrder.getPartNo(), mesWorkOrder.getOrganizeCode()); if (MesExtEnumUtil.NOSORT_REPORT_TYPE.REPORT.getValue() == mesProdRuleNoSortCfg.getReportType()) { + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false)); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrderNew, mesProductVersion, sn, mesBom, false,nowTime)); } } @@ -1050,8 +1056,9 @@ public class MesWorkOrderService extends BaseMesService implements List mesBoms = mesBomService.findBomList(mesPart.getOrganizeCode(), mesPart, mesProductVersion.getAlternativePartList()); //保存数据 List mesProductOffLineList = new ArrayList<>(); + String nowTime = TimeTool.getNowTime(true); for (MesBom mesBom : mesBoms) { - mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom)); + mesProductOffLineList.add(getMesProductOffLine(model, mesPart, mesProductVersion, mesBom,nowTime)); } mesProductOffLineService.insertBatch(mesProductOffLineList); } @@ -1099,7 +1106,7 @@ public class MesWorkOrderService extends BaseMesService implements workOrderLogService.saveMesWorkOrderLog(mesWorkOrder,type,qty); } - private MesProductOffLine getMesProductOffLine(WmsProductModel model, MesPart mesPart, MesProductVersion mesProductVersion, MesBom mesBom) { + private MesProductOffLine getMesProductOffLine(WmsProductModel model, MesPart mesPart, MesProductVersion mesProductVersion, MesBom mesBom,String nowTime) { MesProductOffLine newMesProductOffLine = new MesProductOffLine(); newMesProductOffLine.setReportPartNo(mesPart.getPartNo()); newMesProductOffLine.setReportPartNameRdd(mesPart.getPartName()); @@ -1121,6 +1128,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setOrderNo(model.getShipOrderNo()); newMesProductOffLine.setCustNo(model.getCustNo()); newMesProductOffLine.setCustOrder(model.getCustOrderNo()); + newMesProductOffLine.setDescription(nowTime); ConvertBean.serviceModelInitialize(newMesProductOffLine, model.getUserName()); return newMesProductOffLine; @@ -1169,7 +1177,8 @@ public class MesWorkOrderService extends BaseMesService implements } //汇报 if (isItemReport) { - mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true)); + String nowTime = TimeTool.getNowTime(true); + mesProductOffLineList.add(creatMesProductOffLine(mesWorkOrder, mesProductVersion, sn, mesBom, true,nowTime)); } //移库 if (isItemMove) { @@ -1228,7 +1237,7 @@ public class MesWorkOrderService extends BaseMesService implements private MesProductOffLine creatMesProductOffLine(MesWorkOrder mesWorkOrder, MesProductVersion mesProductVersion, - String sn, MesBom mesBom, boolean isItemReport) { + String sn, MesBom mesBom, boolean isItemReport,String nowTime) { MesProductOffLine newMesProductOffLine; newMesProductOffLine = new MesProductOffLine(); if (!isItemReport) { @@ -1248,23 +1257,34 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setUnit(mesBom.getUnit()); newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); newMesProductOffLine.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + newMesProductOffLine.setWorkOrderType(mesWorkOrder.getWorkOrderType()); newMesProductOffLine.setWorkCenterCode(mesWorkOrder.getWorkCenterCode()); newMesProductOffLine.setWorkCellCode(mesWorkOrder.getWorkCellCode()); newMesProductOffLine.setReportType(mesWorkOrder.getReportType()); newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); + newMesProductOffLine.setDescription(nowTime); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); return newMesProductOffLine; } @Override - public List sumMesWorkOrderQtyToSap(String organizeCode) { + public List sumMesWorkOrderQtyToSap(String organizeCode,String lastSendToSapTime) { List statusList = new ArrayList<>(); statusList.add(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); // statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ORDER_TYPE.UN_SORT.getValue(),MesExtConstWords.WORK_ORDER_TYPE,packBean); + DdlPreparedPack.getStringNoEqualPack(MesExtEnumUtil.ORDER_TYPE_IDENTIFICATION.P.getValue(),"orderFlag",packBean); + DdlPreparedPack.getNotInPack(statusList, MesExtConstWords.WORK_ORDER_STATUS, packBean); + DdlPreparedPack.getStringBiggerPack(lastSendToSapTime,"modifyDatetime",packBean); + List mesWorkOrderList = mesWorkOrderRDao.findByHqlWhere(packBean); + if(CollectionUtils.isEmpty(mesWorkOrderList)) return null; + List partNoList = mesWorkOrderList.stream().map(MesWorkOrder::getPartNo).filter(partNo -> !StringUtil.isEmptyAndNull(partNo)).distinct().collect(Collectors.toList()); + if(CollectionUtils.isEmpty(partNoList)) return null; //查询汇总工单数量 - return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList); + return mesWorkOrderDao.sumMesWorkOrderQtyToSap(organizeCode, statusList,partNoList); } @Override @@ -1407,7 +1427,7 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderList; } - + public List saveMesWorkOrderToWms(MesWorkOrder mesWorkOrder, List mesBomList) { List mesWorkOrderToWmsList = new ArrayList<>(); MesWorkOrderToWms mesWorkOrderToWms = null; @@ -1454,7 +1474,7 @@ public class MesWorkOrderService extends BaseMesService implements // } // mesProductOffLineService.insertBatch(mesProductOffLineList); - //保存数据 + //保存数据 List mesProductOffLineList = new ArrayList<>(); MesProductOffLine newMesProductOffLine; for (MesProductionRecord produceSn : mesProductionRecordList) { @@ -1470,10 +1490,11 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setQty(1d); newMesProductOffLine.setReportSn(produceSn.getProductSn()); newMesProductOffLine.setBomVersion(mesWorkOrderDb.getProductVersion()); - newMesProductOffLine.setSerialNumber(produceSn.getProductSn()); + newMesProductOffLine.setSerialNumber(produceSn.getSerialNumber()); newMesProductOffLine.setUnit(mesBom.getUnit()); newMesProductOffLine.setItemUnit(mesBom.getItemUnit()); newMesProductOffLine.setWorkOrderNo(mesWorkOrderDb.getWorkOrderNo()); + newMesProductOffLine.setWorkOrderType(mesWorkOrderDb.getWorkOrderType()); newMesProductOffLine.setWorkCenterCode(mesWorkOrderDb.getWorkCenterCode()); newMesProductOffLine.setWorkCellCode(mesWorkOrderDb.getWorkCellCode()); newMesProductOffLine.setReportType(mesWorkOrderDb.getReportType()); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java index d71be93..cfc38b1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderToSapServiceImpl.java @@ -1,9 +1,9 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderToSapService; +import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; -import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderToSap; import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; @@ -11,8 +11,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j @@ -28,25 +28,41 @@ public class MesWorkOrderToSapServiceImpl extends BaseMesService mesWorkOrderList) { - Pager pager = new Pager(1,1); - DdlPackBean ddlPackBean = null; + public void doMesWorkOrder(String organizeCode,String userName,List mesWorkOrderList) { + //查询表里原有数据 + Map workOrderToSapMap = getStringMesWorkOrderToSapMap(organizeCode, mesWorkOrderList); + //数据处理 for (MesWorkOrderModel mesWorkOrder : mesWorkOrderList) { - mesWorkOrder.setOrganizeCode(organizeCode); - mesWorkOrder.setModifyUser("job"); + String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrder.getPartNo()).add(mesWorkOrder.getPlanStartTime()).toString(); + mesWorkOrder.setModifyUser(userName); //计划开始时间+物料查询发送Sap的数据 - ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPlanStartTime(),"pedtr",ddlPackBean); - DdlPreparedPack.getStringEqualPack(mesWorkOrder.getPartNo(),"plmat",ddlPackBean); - ddlPackBean.setOrderByStr(" order by createDatetime desc "); - List workOrderToSapList = baseRDao.findByHqlPage(ddlPackBean,pager); - if(CollectionUtils.isEmpty(workOrderToSapList)){ + if(!workOrderToSapMap.containsKey(key)){ insert(mesWorkOrder); }else{ - if(!Objects.equals(workOrderToSapList.iterator().next().getGsmng(),mesWorkOrder.getQty())){ + if(!Objects.equals(workOrderToSapMap.get(key).getGsmng(),mesWorkOrder.getQty())){ insert(mesWorkOrder); } } } } + + private Map getStringMesWorkOrderToSapMap(String organizeCode, List mesWorkOrderList) { + List partNoList = mesWorkOrderList.stream().map(MesWorkOrderModel::getPartNo).distinct().collect(Collectors.toList()); + List planStartTime = mesWorkOrderList.stream().map(MesWorkOrderModel::getPlanStartTime).distinct().collect(Collectors.toList()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(planStartTime,"pedtr",ddlPackBean); + DdlPreparedPack.getInPackList(partNoList,"plmat",ddlPackBean); + ddlPackBean.setOrderByStr(" order by createDatetime desc "); + List workOrderToSapList = baseRDao.findByHqlWhere(ddlPackBean); + Map workOrderToSapMap = new HashMap<>(); + if(!CollectionUtils.isEmpty(workOrderToSapList)){ + for (MesWorkOrderToSap mesWorkOrderToSap : workOrderToSapList) { + String key = new StringJoiner(MesExtConstWords.COMMA).add(mesWorkOrderToSap.getPlmat()).add(mesWorkOrderToSap.getPedtr()).toString(); + if(!workOrderToSapMap.containsKey(key)){ + workOrderToSapMap.put(key,mesWorkOrderToSap); + } + } + } + return workOrderToSapMap; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java index 42ba47c..6cb8d85 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/roundness/MesTimeRoundnessService.java @@ -24,6 +24,7 @@ import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -70,22 +71,33 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { try { //4. 如果没有订单需要更新窗口时间 TM_BAS_PRODUCT_GROUP_WINDOW_TIME MesPartProdGroupWindowTime time = getWindowTimeByProductGroup(partProdGroup.id, partProdGroup.getOrganizeCode()); if (Objects.isNull(time)) { - log.info("当前零件生产组:{}没有维护时间窗口", partProdGroup.getPartProdGroupName()); + log.info("当前零件生产组:{} 没有到达生产工单的窗口", partProdGroup.getPartProdGroupName()); return; } + String lastRunTime = TimeTool.getNowTime(true); + log.info("当前零件生产组:{},更新本次执行时间:{},窗口时间为:{}",partProdGroup.getPartProdGroupName(),lastRunTime,time.getWindowTime()); + ConvertBean.saveOrUpdate(time, "JOB"); + time.setLastRunTime(lastRunTime); + windowTimeRao.update(time); DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); - Long createSeq = Long.parseLong(dateFormat.format(new Date())); - + long createSeq = Long.parseLong(dateFormat.format(new Date())); + Map> sortInfoMap = sortInfoList.stream().collect(Collectors.groupingBy(MesCustSortInfo::getCustPartNo)); + Map prodGroupDetailMap = details.stream().collect(Collectors.toMap(MesPartProdGroupDetail::getCustPartNo, Function.identity())); + Set softInfoKeySet = sortInfoMap.keySet(); //遍历零件生产组零件,过滤出 - for (MesPartProdGroupDetail detail : details) { + for (String softInfoKey : softInfoKeySet) { + MesPartProdGroupDetail detail = prodGroupDetailMap.get(softInfoKey); + if (detail == null){ + continue; + } //根据detail.id 获取 MesProdGroupPartBtoCount btoCountInfo = getByGroupPartId(detail.getId(), detail.getOrganizeCode()); //历史累计差异 double btoCount = btoCountInfo.getCurrentQty(); //获取圆整数量 double roundQty = detail.getRoundQty(); - List sortInfos = sortInfoList.stream().filter(info -> info.getCustPartNo().equals(detail.getCustPartNo())).collect(Collectors.toList()); - if (sortInfos.isEmpty()) { + List sortInfos = sortInfoMap.get(detail.getCustPartNo()); + if (sortInfos == null ||sortInfos.isEmpty()) { continue; } //本次排序需要的数量 @@ -116,7 +128,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { mesWorkOrder.setFid(UUID.randomUUID().toString()); mesWorkOrder.setWorkOrderNo(resultList.get(0)); mesWorkOrder.setWorkOrderType(MesExtEnumUtil.ORDER_TYPE.BTO.getValue()); - mesWorkOrder.setWorkOrderSeq(createSeq.toString()); + mesWorkOrder.setWorkOrderSeq(Long.toString(createSeq)); //生产顺序号 【前缀(WOPS)+工厂号+产线+特殊符号#+10位流水 步长10】({prefix}{org}{prodLocation}{dynamicRule}{serialNo}) GenSerialNoModel proSeqGenSerialNoModel = new GenSerialNoModel(MesCommonConstant.MES_WORK_ORDER_PRODUCT_SEQ); proSeqGenSerialNoModel.setOrganizeCode(detail.getOrganizeCode()); @@ -171,9 +183,10 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int hours = calendar.get(Calendar.HOUR_OF_DAY); + int minutes = calendar.get(Calendar.MINUTE); String shiftTime = String.format("%02d:%02d", hours, minutes); - if (shiftList == null || shiftList.isEmpty()) { + if (!shiftList.isEmpty()) { for (MesShift shift : shiftList) { String startTime = shift.getStartTime().replace(":", ""); String endTime = shift.getEndTime().replace(":", ""); @@ -220,7 +233,9 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { // 保存工单 ConvertBean.saveOrUpdate(mesWorkOrder, "edi"); - mesWorkOrderRao.insert(mesWorkOrder); + if (mesWorkOrder.getQty() > 0){ + mesWorkOrderRao.insert(mesWorkOrder); + } //更新 custSortInfo 状态已解析 for (MesCustSortInfo sortInfo : sortInfos) { sortInfo.setServiceFlag(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); @@ -228,9 +243,7 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { } } - ConvertBean.saveOrUpdate(time, "JOB"); - time.setLastRunTime(TimeTool.getNowTime(true)); - windowTimeRao.update(time); + } catch (Exception e) { log.error("创建工单报错:{}", Arrays.toString(e.getStackTrace())); } @@ -254,21 +267,31 @@ public class MesTimeRoundnessService implements IRoundnessStrategy { String nowTime = String.format("%02d:%02d", hour, minute); //遍历窗口时间获取最新的窗口时间 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - List sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime)).collect(Collectors.toList()); + //使用降序 + List sortedTime = windowTimeList.stream().sorted(Comparator.comparing(MesPartProdGroupWindowTime::getWindowTime,Comparator.reverseOrder())).collect(Collectors.toList()); for (MesPartProdGroupWindowTime time : sortedTime) { - if (nowTime.compareTo(time.getWindowTime()) < 0) { + if (Integer.parseInt(time.getWindowTime().replace(":", "")) > Integer.parseInt(nowTime.replace(":", ""))) { continue; } calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2))); calendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4))); + calendar.set(Calendar.SECOND, 0); Date dateCreateOrder = calendar.getTime(); if (Objects.isNull(time.getLastRunTime())) { return time; } + //校验lastRuntime 是否已经在当前圆整时区已经生成完了工单 Date lastRunTime = sdf.parse(time.getLastRunTime()); - if (dateCreateOrder.compareTo(lastRunTime) < 0) { + Calendar lastRunTimeCalendar = Calendar.getInstance(); + lastRunTimeCalendar.setTime(lastRunTime); + lastRunTimeCalendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(time.getWindowTime().substring(0, 2))); + lastRunTimeCalendar.set(Calendar.MINUTE, Integer.parseInt(time.getWindowTime().substring(2, 4))); + lastRunTimeCalendar.set(Calendar.SECOND, 1); + //两个相同的时间比较before,返回值为false,把上次运行的时间格式化为窗口时间,加1秒是过滤掉相等的情况 + if (dateCreateOrder.before(lastRunTimeCalendar.getTime())) { continue; } + log.info("零件生产组详情id:{},本次运行时间:{},格式化后的上次运行时间:{},上次运行时间为:{}",partProdGroupId,sdf.format(dateCreateOrder),sdf.format(lastRunTimeCalendar.getTime()),time.getLastRunTime()); return time; } return null; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java index 951251e..d3bce3d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/board/IMesYfBoardServiceImpl.java @@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; @@ -105,11 +107,15 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { } resultModel.setWorkCenterCompletedQuantity(workCenterCompletedQuantity); resultModel.setWorkCenterPlannedQuantity(workCenterPlannedQuantity); + double workCenterCompletionRate; if (workCenterCompletedQuantity == 0 || workCenterPlannedQuantity == 0) { - resultModel.setWorkCenterCompletionRate(0D); + workCenterCompletionRate = 0; }else { - resultModel.setWorkCenterCompletionRate(workCenterCompletedQuantity * 100 / workCenterPlannedQuantity); + workCenterCompletionRate = workCenterCompletedQuantity * 100 / workCenterPlannedQuantity; } + BigDecimal bd = new BigDecimal(workCenterCompletionRate); + bd = bd.setScale(2, RoundingMode.HALF_UP); + resultModel.setWorkCenterCompletionRate(bd); return resultModel; } @@ -121,20 +127,44 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode()); //查询工单 List mesWorkOrderList = queryMesWorkOrder(timeZoneMap, conditionModel); - //封装汇总数据 - for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { - MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); - resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); - resultModel.setPartNo(mesWorkOrder.getPartNo()); - resultModel.setPartDescription(mesWorkOrder.getPartName()); - resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty()); - resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty()); - if (resultModel.getWorkOrderCompletedQuantity() == 0 || resultModel.getWorkOrderPlannedQuantity() == 0) { - resultModel.setWorkOrderFirstPassRate(0D); - }else { - resultModel.setWorkOrderFirstPassRate(resultModel.getWorkOrderCompletedQuantity() * 100 / resultModel.getWorkOrderPlannedQuantity()); + if (!CollectionUtils.isEmpty(mesWorkOrderList)) { + Set workOrderNoSet = mesWorkOrderList.stream().map(MesWorkOrder::getWorkOrderNo).collect(Collectors.toSet()); + //查询当前产线在指定时间段内加工完成的工单条码数据 + List mesProductOffLineQueryResultList = mesYfBoardDao.queryCompletedSnInfo( + conditionModel.getWorkCenterCodeList().get(0), + conditionModel.getOrganizeCode(), + timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(START_TIME), + timeZoneMap.get(conditionModel.getWorkCenterCodeList().get(0)).get(END_TIME), + workOrderNoSet); + //查询结果按照工单号分组 + Map> workOrderAndSnDataByOrderNoMap = + mesProductOffLineQueryResultList.stream().collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getWorkOrderNo)); + //封装汇总数据 + for (MesWorkOrder mesWorkOrder : mesWorkOrderList) { + MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); + resultModel.setWorkOrderNo(mesWorkOrder.getWorkOrderNo()); + resultModel.setPartNo(mesWorkOrder.getPartNo()); + resultModel.setPartDescription(mesWorkOrder.getPartName()); + resultModel.setWorkOrderCompletedQuantity(mesWorkOrder.getCompleteQty()); + resultModel.setWorkOrderPlannedQuantity(mesWorkOrder.getQty()); + //计算当前工单的合格率 + double workOrderFirstPassRate; + List resultModels = workOrderAndSnDataByOrderNoMap.get(mesWorkOrder.getWorkOrderNo()); + if (CollectionUtils.isEmpty(resultModels)) { + workOrderFirstPassRate = 100; + }else { + //合格数 + long count = resultModels.stream().filter(model -> model.getQcStatus() == MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).count(); + workOrderFirstPassRate = count * 100 / resultModels.size(); + if (workOrderFirstPassRate > 100) { + workOrderFirstPassRate = 100; + } + } + BigDecimal bd = new BigDecimal(workOrderFirstPassRate); + bd = bd.setScale(2, RoundingMode.HALF_UP); + resultModel.setWorkOrderFirstPassRate(bd); + resultModelList.add(resultModel); } - resultModelList.add(resultModel); } return resultModelList; } @@ -146,12 +176,11 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCodeList().get(0), "workCenterCode", ddlPackBean); MesWorkCenter mesWorkCenter = mesWorkCenterRepository.getByProperty(ddlPackBean); + String jph; if (Objects.isNull(mesWorkCenter) || StringUtils.isEmpty(mesWorkCenter.getJph())) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_NOT_EXIT.getCode()) - .setErrorDetail(conditionModel.getWorkCenterCodeList().get(0) + " 产线未维护有效的产线JPH信息!") - .build(); + jph = "0"; + }else { + jph = mesWorkCenter.getJph(); } //获取并汇总当前产线在当前时间前12个小时的每个小时时间段内工单的完成数 Map> timeZoneMap = getLastHoursTimeZoneMap(NUM); @@ -169,7 +198,7 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { //横坐标赋值 resultModel.setUnitHourCompletionRateTimePeriod(timeZone); //目标值 - resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(mesWorkCenter.getJph())); + resultModel.setUnitHourCompletionRateTargetValue(Double.valueOf(jph)); if (CollectionUtils.isEmpty(mesProductOffLineQueryResultList)) { resultModel.setUnitHourCompletionRate(0); }else { @@ -196,7 +225,8 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { conditionModel.getWorkCenterCodeList().get(0), conditionModel.getOrganizeCode(), timeZoneMap.get(START_TIME).get(START_TIME), - timeZoneMap.get(END_TIME).get(END_TIME)); + timeZoneMap.get(END_TIME).get(END_TIME), + null); //依次汇总每个时间段的数据 for (String timeZone : timeZoneMap.keySet()) { MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); @@ -214,17 +244,17 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { collect(Collectors.groupingBy(MesWorkCenterBoardResultModel::getQcStatus)); if (CollectionUtils.isEmpty(nowResultList) || !resultModelByQcStatusMap.containsKey(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue())) { - //当前时间段没有生产加工记录或者没有合格的生产加工条码 - resultModel.setWorkCenterFirstTimeOfflineQualificationRate(0D); + //当前时间段没有生产加工记录或者没有合格的生产加工条码时返回值置null(保证数据为0时瀑布图连线的垂直) + resultModel.setWorkCenterFirstTimeOfflineQualificationRate(null); }else { - double workCenterFirstTimeOfflineQualificationRate = ( - resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100 - / nowResultList.size()); + double workCenterFirstTimeOfflineQualificationRate = resultModelByQcStatusMap.get(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()).size() * 100 / nowResultList.size(); //最大值只允许100 if (workCenterFirstTimeOfflineQualificationRate > 100) { workCenterFirstTimeOfflineQualificationRate = 100; } - resultModel.setWorkCenterFirstTimeOfflineQualificationRate(workCenterFirstTimeOfflineQualificationRate); + BigDecimal bd = new BigDecimal(workCenterFirstTimeOfflineQualificationRate); + bd = bd.setScale(2, RoundingMode.HALF_UP); + resultModel.setWorkCenterFirstTimeOfflineQualificationRate(bd); } resultModelList.add(resultModel); } @@ -277,6 +307,9 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { //最新的点检单结果为 NOK //结果设置为“异常” resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue()); + }else { + //其它结果设置为“异常” + resultModel.setInspectionResults(MesExtEnumUtil.INSPECTION_RESULTS.ABNORMAL.getValue()); } }else { //不存在该种点检类型的点检单数据 @@ -296,10 +329,10 @@ public class IMesYfBoardServiceImpl implements IMesYfBoardService { @Override public MesWorkCenterBoardResultModel queryAbnormalDowntime(MesWorkCenterBoardConditionModel conditionModel) { MesWorkCenterBoardResultModel resultModel = new MesWorkCenterBoardResultModel(); - //获取查询时间区间 - Map> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(), - conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode()); - resultModel.setAbnormalDowntime("00:45"); + //获取查询时间区间(需求未明确,暂时注释,返回固定值) +// Map> timeZoneMap = getTimeZoneMap(conditionModel.getWorkCenterCodeList(), +// conditionModel.getTimeRangeIdentification(), conditionModel.getOrganizeCode()); + resultModel.setAbnormalDowntime("00:00"); return resultModel; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index bae8137..d00f1dd 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.base.IMesEquipmentSpotCheckService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderPartService; import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderResultService; @@ -7,6 +8,7 @@ import cn.estsh.i3plus.ext.mes.api.busi.IMesSpotCheckOrderService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; +import cn.estsh.i3plus.mes.api.iservice.base.IStateMachineRouteDesignService; import cn.estsh.i3plus.mes.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.apiservice.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; @@ -15,6 +17,8 @@ import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.WmsConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseResultBean; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.*; @@ -65,6 +69,11 @@ public class MesSpotCheckOrderService extends BaseMesService private ISyncFuncService syncFuncService; @Autowired private ICoreUtilCloud sysOrderNoRuleCloud; + + @Autowired + private IStateMachineRouteDesignService stateMachineRouteDesignService; + @Autowired + private IMesConfigService mesConfigService; @Override public MesSpotCheckOrder insert(MesSpotCheckOrder bean) { onInsertBean(bean); @@ -552,4 +561,34 @@ public class MesSpotCheckOrderService extends BaseMesService } return spotCheckOrderMap; } + + @Override + public MesSpotCheckOrder queryMesSpotCheckOrderResultPrint(MesSpotCheckOrder mesSpotCheckOrder) { + //获取点检方案明细 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesSpotCheckOrder.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesSpotCheckOrder.getId(), "pid", packBean); + List detailList = spotCheckOrderResultRepository.findByHqlWhere(packBean); + for (MesSpotCheckOrderResult mesSpotCheckOrderResult : detailList) { + if (mesSpotCheckOrderResult.getIsTolerance()==1){ + mesSpotCheckOrderResult.setIsTolerance(Integer.parseInt(mesSpotCheckOrderResult.getSpotCheckSetValue())-Integer.parseInt(mesSpotCheckOrderResult.getSpotCheckRealValue()) ); + }else { + mesSpotCheckOrderResult.setIsTolerance(0); + } + } + mesSpotCheckOrder.setCheckOrderResults(detailList); + MesRouteProcessCell routeProcessCell=new MesRouteProcessCell(); + routeProcessCell.setOrganizeCode(mesSpotCheckOrder.getOrganizeCode()); + routeProcessCell.setWorkCenterCode(mesSpotCheckOrder.getWorkCenterCode()); + routeProcessCell.setWorkCellCode(mesSpotCheckOrder.getWorkCellCode()); + Pager pager = new Pager(); + pager.setCurrentPage(0); + pager.setPageSize(50); + ListPager listPager = stateMachineRouteDesignService.queryStateMachineRouteProcessCellByPager(routeProcessCell, pager); + List routeProcessCellList = listPager.getObjectList(); + if (!CollectionUtils.isEmpty(routeProcessCellList)){ + mesSpotCheckOrder.setProcessName(routeProcessCellList.get(0).getProcessCodeName()); + } + mesSpotCheckOrder.setTemplateNo(mesConfigService.getCfgValue(mesSpotCheckOrder.getOrganizeCode(), MesCommonConstant.QC_ORDER_PRINT_TEMPLATE) ); + return mesSpotCheckOrder; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java index 54e7817..984eda0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesEquipmentLogDetailService.java @@ -1,29 +1,48 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.busi.report.IMesEquipmentLogDetailService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLogDetail; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.StringJoiner; @Service public class MesEquipmentLogDetailService extends BaseMesService implements IMesEquipmentLogDetailService { + @Autowired + private IMesConfigService configService; + @Override protected void setPackQueryBean(MesEquipmentLogDetail bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(bean.getOrganizeCode()).add(bean.getEquipId().toString()).toString(), MesExtConstWords.ORG_EQUIP_ID, packBean); - DdlPreparedPack.getNumEqualPack(bean.getEquipId(), MesExtConstWords.EQUIP_ID, packBean); +// DdlPreparedPack.getNumEqualPack(bean.getEquipId(), MesExtConstWords.EQUIP_ID, packBean); DdlPreparedPack.getNumEqualPack(bean.getVariableType(), MesExtConstWords.VARIABLE_TYPE, packBean); DdlPreparedPack.getNumEqualPack(bean.getEquipVariableId(), MesExtConstWords.EQUIP_VARIABLE_ID, packBean); - DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); +// DdlPreparedPack.getStringEqualPack(bean.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); DdlPreparedPack.getStringLikerPack(bean.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); } + @Override + public ListPager queryPager(MesEquipmentLogDetail bean, Pager pager) { + if (StringUtils.isEmpty(bean.getEquipId())) MesException.throwBusiException("查询条件的参数缺失设备ID[equipId]"); + String orgEquipId = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(bean.getOrganizeCode()).add(bean.getEquipId().toString()).toString(); + if (!configService.checkShardingTablesObjectCfg(bean.getOrganizeCode(), MesEquipmentLogDetail.class.getSimpleName(), orgEquipId)) + return new ListPager<>(new ArrayList<>(), pager); + return super.queryPager(bean, pager); + } + } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java index 0064b84..e8f6c7b 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesWorkCellMonitorLogService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.busi.report.IMesWorkCellScanMonitorLogService; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.BaseMesService; import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; @@ -43,6 +44,9 @@ public class MesWorkCellMonitorLogService extends BaseMesService queryWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) { @@ -142,11 +146,15 @@ public class MesWorkCellMonitorLogService extends BaseMesService findWorkCellScanMonitorLogList(MesWorkCellScanMonitorConditionModel conditionModel) { + String orgWorkCode = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getWorkCenterCode()).toString(); + + if (!configService.checkShardingTablesObjectCfg(conditionModel.getOrganizeCode(), MesWorkCellScanMonitorLog.class.getSimpleName(), orgWorkCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getWorkCenterCode()).toString(), MesExtConstWords.ORG_WORK_CODE, packBean); - DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); +// DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCenterCode(), MesExtConstWords.WORK_CENTER_CODE, packBean); DdlPreparedPack.getStringEqualPack(conditionModel.getWorkCellCode(), MesExtConstWords.WORK_CELL_CODE, packBean); - DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); +// DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); DdlPreparedPack.getStringEqualPack(conditionModel.getStepCode(), MesExtConstWords.STEP_CODE, packBean); DdlPreparedPack.getStringLikerPack(conditionModel.getScanInfo(), MesExtConstWords.SCAN_INFO, packBean); DdlPreparedPack.getStringLikerPack(conditionModel.getWorkOrderNo(), MesExtConstWords.WORK_ORDER_NO, packBean); @@ -177,12 +185,16 @@ public class MesWorkCellMonitorLogService extends BaseMesService findEquipmentLogDetailList(MesWorkCellScanMonitorConditionModel conditionModel) { + String orgEquipId = new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getEquipId().toString()).toString(); + + if (!configService.checkShardingTablesObjectCfg(conditionModel.getOrganizeCode(), MesEquipmentLogDetail.class.getSimpleName(), orgEquipId)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(conditionModel.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(new StringJoiner(MesExtConstWords.E_UNDERLINE).add(conditionModel.getOrganizeCode()).add(conditionModel.getEquipId().toString()).toString(), MesExtConstWords.ORG_EQUIP_ID, packBean); - DdlPreparedPack.getNumEqualPack(conditionModel.getEquipId(), MesExtConstWords.EQUIP_ID, packBean); + DdlPreparedPack.getStringEqualPack(orgEquipId, MesExtConstWords.ORG_EQUIP_ID, packBean); +// DdlPreparedPack.getNumEqualPack(conditionModel.getEquipId(), MesExtConstWords.EQUIP_ID, packBean); DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), MesExtConstWords.VARIABLE_TYPE, packBean); DdlPreparedPack.getNumEqualPack(conditionModel.getEquipVariableId(), MesExtConstWords.EQUIP_VARIABLE_ID, packBean); - DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); +// DdlPreparedPack.getStringEqualPack(conditionModel.getEquipmentCode(), MesExtConstWords.EQUIPMENT_CODE, packBean); DdlPreparedPack.getStringLikerPack(conditionModel.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); DdlPreparedPack.timeBuilder(conditionModel.getCreateDateTimeStart(), conditionModel.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); DdlPreparedPack.getOrderByPack(new Object[]{conditionModel.getAscOrDesc()}, new String[]{MesExtConstWords.CREATE_DATE_TIME}, packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java index 4020a74..cacafaf 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/report/MesYfReportServiceImpl.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.report; +import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; import cn.estsh.i3plus.ext.mes.api.base.IMesProduceSnService; import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; import cn.estsh.i3plus.ext.mes.api.base.file.IMesFileService; @@ -90,6 +91,12 @@ public class MesYfReportServiceImpl implements IMesYfReportService { @Autowired private MesEquipmentRepository mesEquipmentRepository; + @Autowired + private IMesConfigService mesConfigService; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + @Override public ListPager queryMesDeviceDataByPager(MesDeviceDataQueryReportConditionModel queryReportModel, Pager pager) { ListPager mesDeviceDataQueryReportResultModelListPager = @@ -157,7 +164,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { List productionAssemblyList = mesProductionAssemblyRepository.findByHqlWhere(packBean); Map> productionAssemblyMap = CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getWorkCenterCode()).add(t.getWorkCellCode()).add(t.getEquipmentCode()).toString())); //根据设备代码查询设备id - Map> mesEquipmentLogDetailMap = getMesEquipmentLogDetailMap(mesProduceSn, productionRecordList); + Map> mesEquipmentLogDetailMap = getMesEquipmentLogDetailMap(mesProduceSn.getOrganizeCode(), productionRecordList); //查询工序名称 Map processMap = getMesProcessMap(mesProduceSn, processCodeList); //数据组装 @@ -220,29 +227,96 @@ public class MesYfReportServiceImpl implements IMesYfReportService { return mesTraceabilityReportModelList; } - private Map> getMesEquipmentLogDetailMap(MesProduceSn mesProduceSn, List productionRecordList) { - List organizeCodeEquipList = getEquipList(mesProduceSn, productionRecordList); + @Override + public ListPager queryMesProduceSn(MesProduceSn mesProduceSn, Pager pager) { + DdlPackBean packBean = getMesProduceSnPackBean(mesProduceSn); + if(Objects.isNull(pager)){ + DdlPreparedPack.getOrderBy(mesProduceSn.getOrderByParam(),mesProduceSn.getAscOrDesc(),packBean); + return new ListPager<>(mesProduceSnRDao.findByHqlWhere(packBean), pager); + } + pager = PagerHelper.getPager(pager, mesProduceSnRDao.findByHqlWhereCount(packBean)); + DdlPreparedPack.getOrderBy(mesProduceSn.getOrderByParam(),mesProduceSn.getAscOrDesc(),packBean); + return new ListPager<>(mesProduceSnRDao.findByHqlWherePage(packBean, pager), pager); + } + + @Override + public ListPager queryMesProductionRecord(MesProductionRecord mesProductionRecord, Pager pager) { + DdlPackBean packBean = getDdlPackBeanMesProductionRecord(mesProductionRecord); + if(Objects.isNull(pager)){ + DdlPreparedPack.getOrderBy(mesProductionRecord.getOrderByParam(),mesProductionRecord.getAscOrDesc(),packBean); + return new ListPager<>(mesProductionRecordRepository.findByHqlWhere(packBean), pager); + } + pager = PagerHelper.getPager(pager, mesProductionRecordRepository.findByHqlWhereCount(packBean)); + DdlPreparedPack.getOrderBy(mesProductionRecord.getOrderByParam(),mesProductionRecord.getAscOrDesc(),packBean); + return new ListPager<>(mesProductionRecordRepository.findByHqlWherePage(packBean, pager), pager); + } + + private DdlPackBean getDdlPackBeanMesProductionRecord(MesProductionRecord mesProductionRecord) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecord.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getProductSn(), "productSn", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getWorkCellCode(), "workCellCode", packBean); + DdlPreparedPack.getStringBiggerPack(mesProductionRecord.getCompleteDateTimeStart(), "completeDateTime", packBean); + DdlPreparedPack.getStringSmallerPack(mesProductionRecord.getCompleteDateTimeEnd(), "completeDateTime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductionRecord.getEquipmentCode(), "equipmentCode", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getEquipmentName(), "equipmentName", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getMouldNo(), "mouldNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftGroup(), "shiftGroup", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getShiftCode(), "shiftCode", packBean); + DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportStatus(), "reportStatus", packBean); + DdlPreparedPack.getNumEqualPack(mesProductionRecord.getReportType(), "reportType", packBean); + DdlPreparedPack.getNumEqualPack(mesProductionRecord.getIsComplete(), "isComplete", packBean); + DdlPreparedPack.getStringEqualPack(mesProductionRecord.getIsTest(), "isTest", packBean); + DdlPreparedPack.getStringEqualPack(mesProductionRecord.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProductionRecord.getPartName(), "partName", packBean); + return packBean; + } + + private DdlPackBean getMesProduceSnPackBean(MesProduceSn mesProduceSn) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getProductSn(), "productSn", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkOrderNo(), "workOrderNo", packBean); + DdlPreparedPack.getStringBiggerPack(mesProduceSn.getCreateDateTimeStart(), "createDatetime", packBean); + DdlPreparedPack.getStringSmallerPack(mesProduceSn.getCreateDateTimeEnd(), "createDatetime", packBean); + DdlPreparedPack.getNumEqualPack(mesProduceSn.getSnStatus(), "snStatus", packBean); + DdlPreparedPack.getNumEqualPack(mesProduceSn.getQcStatus(), "qcStatus", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getPartName(), "partName", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(mesProduceSn.getPrintCount(), "printCount", packBean); + DdlPreparedPack.getNumEqualPack(mesProduceSn.getPrintStatus(), "printStatus", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkCellCode(), "workCellCode", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getCreateUser(), "createUser", packBean); + return packBean; + } + + private Map> getMesEquipmentLogDetailMap(String organizeCode, List productionRecordList) { + List organizeCodeEquipList = getEquipList(organizeCode, productionRecordList); //工艺加工参数 if(CollectionUtils.isEmpty(organizeCodeEquipList)) return null; - return getMesEquipmentLogDetailMap(mesProduceSn, productionRecordList, organizeCodeEquipList); + return getMesEquipmentLogDetailMap(organizeCode, productionRecordList, organizeCodeEquipList); } - private Map> getMesEquipmentLogDetailMap(MesProduceSn mesProduceSn, List productionRecordList, List organizeCodeEquipList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); - DdlPreparedPack.getInPackList(organizeCodeEquipList, MesExtConstWords.ORG_EQUIP_ID, packBean); - DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).collect(Collectors.toList()), "mouldRecordId", packBean); - DdlPreparedPack.getInPackArray(new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS.getValue()}, "variableType", packBean); - List mesEquipmentLogDetailList = mesEquipmentLogDetailRepository.findByHqlWhere(packBean); + private Map> getMesEquipmentLogDetailMap(String organizeCode, List productionRecordList, List organizeCodeEquipList) { + List mesEquipmentLogDetailList = new ArrayList<>(); + for (String organizeCodeEquip : organizeCodeEquipList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(organizeCodeEquip, MesExtConstWords.ORG_EQUIP_ID, packBean); + DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getMouldRecordId).distinct().collect(Collectors.toList()), "mouldRecordId", packBean); + DdlPreparedPack.getInPackArray(new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS_FINISH.getValue(), MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PROCESS.getValue()}, "variableType", packBean); + mesEquipmentLogDetailList.addAll(mesEquipmentLogDetailRepository.findByHqlWhere(packBean)); + } if (CollectionUtils.isEmpty(mesEquipmentLogDetailList)) return null; return mesEquipmentLogDetailList.stream().collect(Collectors.groupingBy(t -> new StringJoiner(MesExtConstWords.COMMA).add(t.getMouldRecordId().toString()).add(t.getWorkCenterCode()).add(t.getWorkCellCode()).add(t.getEquipmentCode()).toString())); } - private List getEquipList(MesProduceSn mesProduceSn, List productionRecordList) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); - DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getEquipmentCode).collect(Collectors.toList()), "equipmentCode", packBean); + private List getEquipList(String organizeCode, List productionRecordList) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(productionRecordList.stream().map(MesProductionRecord::getEquipmentCode).distinct().collect(Collectors.toList()), "equipmentCode", packBean); List mesEquipmentList = mesEquipmentRepository.findByHqlWhere(packBean); if (CollectionUtils.isEmpty(mesEquipmentList)) return null; - return mesEquipmentList.stream().map(t -> new StringJoiner(MesExtConstWords.E_UNDERLINE).add(t.getOrganizeCode()).add(t.getEquipId().toString()).toString()).collect(Collectors.toList()); + return mesConfigService.findShardingTablesObjectCfg(organizeCode,MesEquipmentLogDetail.class.getSimpleName(),mesEquipmentList.stream().map(t -> new StringJoiner(MesExtConstWords.E_UNDERLINE).add(t.getOrganizeCode()).add(t.getEquipId().toString()).toString()).distinct().collect(Collectors.toList())); } private MesWorkCenter getWorkCenter(MesProduceSn produceSn) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanUtil.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanUtil.java new file mode 100644 index 0000000..0b5a300 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/utils/BeanUtil.java @@ -0,0 +1,75 @@ +package cn.estsh.i3plus.ext.mes.apiservice.utils; + +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.exception.ExceptionUtils; + +import javax.persistence.Column; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + +/** + * Map转Object 工具类 + */ +public class BeanUtil { + + public static Object populateBean(Map map, Class clazz) throws Exception { + Object obj = clazz.newInstance(); + BeanUtils.populate(obj, map); + return obj; + } + + public static List popListToList(Object object, List> list) throws Exception { + + List listRetun = new ArrayList(); + for (Map map : list) { + listRetun.add(BeanUtil.populateBean(map, object.getClass())); + } + return listRetun; + } + + /** + * 获取对象父类和字类所有的数据库字段 + * + * @param c 对象类 + * @return 属性名数组 + */ + public static String[] getAllColumnFields(Class c) { + //父子类属性合并 + Field[] fields = ArrayUtils.addAll(c.getFields(), c.getDeclaredFields()); + //循环所有属性把名称存入数组 + List fieldsNameList = new ArrayList<>(); + for (Field field : fields) { + field.setAccessible(true); + // 判断是否为数据库字段 + if (field.isAnnotationPresent(Column.class)) { + fieldsNameList.add(field.getName()); + } + } + return fieldsNameList.toArray(new String[fieldsNameList.size()]); + } + + public static String getProperty(Object bean, String name) { + String proVal = null; + try { + proVal = BeanUtils.getProperty(bean, name); + } catch (Exception e) { + MesException.throwMesBusiException("反射获取对象【" + bean.getClass().getName() + "】属性【" + name + + "】值时异常:详情如下" + ExceptionUtils.getStackTrace(e)); + } + return proVal; + } + + public static void setProperty(Object bean, String name, Object values) { + try { + BeanUtils.setProperty(bean, name, values); + } catch (Exception e) { + MesException.throwMesBusiException("反射设置对象【" + bean.getClass().getName() + "】属性【" + name + + "】值时异常:详情如下" + ExceptionUtils.getStackTrace(e)); + } + } + +} diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java index 82074a3..7266a5a 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/constant/MesCommonConstant.java @@ -57,4 +57,5 @@ public class MesCommonConstant { //OPC注册ID public static final String CLIENT_HANDLE_ID = "CLIENT_HANDLE_ID"; + public static final String QC_ORDER_PRINT_TEMPLATE = "QC_ORDER_PRINT_TEMPLATE"; } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesLoadingListDetailModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesLoadingListDetailModel.java index 12c4c1b..799b0d1 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesLoadingListDetailModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesLoadingListDetailModel.java @@ -64,4 +64,7 @@ public class MesLoadingListDetailModel { @ApiParam("修改日期") public String modifyDatetime; + @ApiParam("备注") + public String remark; + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesShippingOrderManagementDetailModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesShippingOrderManagementDetailModel.java index f135343..1da5af2 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesShippingOrderManagementDetailModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/MesShippingOrderManagementDetailModel.java @@ -1,6 +1,10 @@ package cn.estsh.i3plus.ext.mes.pojo.model; +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiParam; import lombok.Data; @@ -25,4 +29,146 @@ public class MesShippingOrderManagementDetailModel { @ApiParam("计量单位") private String unit; + @ApiParam("工厂代码") + private String organizeCode; + + @ApiParam("发运单") + private String shippingCode; + + @ApiParam("状态") + @AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_STATUS.class, refForeignKey = "value", value = "description") + private Integer status; + + @ApiParam("客户排序信息序号") + private Long custInfoSeq; + + @ApiParam("条码") + private String barcode; + + @ApiParam("客户订单号") + private String custOrderNo; + + @ApiParam("创建时间") + private String createDatetime; + + @ApiParam("创建人") + private String createUser; + + @ApiParam(value = "更新时间") + private String modifyDatetime; + + @ApiParam(value = "更新人") + private String modifyUser; + + @ApiParam("发运单类型") + @AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_TYPE.class, refForeignKey = "value", value = "description") + private Integer shippingType; + + @ApiParam("客户代码") + private String custCode; + + @ApiParam("客户名称") + private String custName; + + @ApiParam("客户工厂代码") + private String custOrganizeCode; + + @ApiParam("客户工厂名称") + private String custOrganizeName; + + @ApiParam("开始扫描时间") + private String startScanTime; + + @ApiParam("开始扫描时间(开始)") + private String startScanTimeStart; + + @ApiParam("开始扫描时间(结束)") + private String startScanTimeEnd; + + @ApiParam("结束扫描时间") + private String endScanTime; + + @ApiParam("结束扫描时间(开始)") + private String endScanTimeStart; + + @ApiParam("结束扫描时间(结束)") + private String endScanTimeEnd; + + @ApiParam("发布时间") + private String publishTime; + + @ApiParam("发布时间(开始)") + private String publishTimeStart; + + @ApiParam("发布时间(结束)") + private String publishTimeEnd; + + @ApiParam("累计打印次数") + private Integer printCount; + + @ApiParam("最后打印用户") + private String lastPrintUser; + + @ApiParam("最后打印时间") + private String lastPrintTime; + + @ApiParam("发运组代码") + private String shippingGroupCode; + + @ApiParam("发运组名称") + private String shippingGroupName; + + @ApiParam("车系代码") + private String carSerialCode; + + @ApiParam(value = "排序属性") + public String orderByParam = ""; + + @ApiParam(value = "排序类型,1 正序,2 倒序",example = "1") + public Integer ascOrDesc; + + @ApiParam("明细id") + private Long id; + + @ApiParam("明细状态") + @AnnoOutputColumn(refClass = MesExtEnumUtil.SHIPPING_ORDER_DETAIL_SHIPPING_STATUS.class, refForeignKey = "value", value = "description") + private Integer detailsStatus; + + public MesShippingOrderManagementDetailModel(){ + } + + public MesShippingOrderManagementDetailModel(MesShippingOrderManagement m, MesShippingOrderManagementDetail d){ + this.shippingCode = m.getShippingCode(); + this.status = m.getStatus(); + this.detailsStatus = d.getStatus(); + this.custInfoSeq = d.getCustInfoSeq(); + this.partName = d.getPartName(); + this.partNo = d.getPartNo(); + this.barcode = d.getBarcode(); + this.custPartNo = d.getCustPartNo(); + this.planQty = d.getPlanQty(); + this.actualQty = d.getActualQty(); + this.unit = d.getUnit(); + this.custOrderNo = m.getOrderCode(); + this.createDatetime = d.getCreateDatetime(); + this.createUser = d.getCreateUser(); + this.modifyDatetime = d.getModifyDatetime(); + this.modifyUser = d.getModifyUser(); + this.shippingType = m.getShippingType(); + this.custCode = m.getCustCode(); + this.custName = m.getCustName(); + this.custOrganizeCode = m.getCustOrganizeCode(); + this.custOrganizeName = m.getCustOrganizeName(); + this.startScanTime = m.getStartScanTime(); + this.endScanTime = m.getEndScanTime(); + this.publishTime = m.getPublishTime(); + this.printCount = m.getPrintCount(); + this.lastPrintTime = m.getLastPrintTime(); + this.lastPrintUser = m.getLastPrintUser(); + this.shippingGroupCode = m.getShippingGroupCode(); + this.shippingGroupName = m.getShippingGroupName(); + this.carSerialCode = d.getCarSerialCode(); + this.id = d.getId(); + } + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java index a5a8e8c..552d4ee 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/board/MesWorkCenterBoardResultModel.java @@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiParam; import lombok.Data; +import java.math.BigDecimal; + /** * @Description : 产线看板-查询结果封装 * @Reference : @@ -34,7 +36,7 @@ public class MesWorkCenterBoardResultModel { private Double workCenterPlannedQuantity; @ApiParam(value = "产线完成率") - private Double workCenterCompletionRate; + private BigDecimal workCenterCompletionRate; /** * 查询产线工单完成情况 @@ -55,7 +57,7 @@ public class MesWorkCenterBoardResultModel { private Double workOrderPlannedQuantity; @ApiParam(value = "工单一次合格率") - private Double workOrderFirstPassRate; + private BigDecimal workOrderFirstPassRate; /** * 查询单位小时完工数 @@ -73,7 +75,7 @@ public class MesWorkCenterBoardResultModel { * 查询产线一次下线合格率 */ @ApiParam(value = "产线一次下线合格率") - private Double workCenterFirstTimeOfflineQualificationRate; + private BigDecimal workCenterFirstTimeOfflineQualificationRate; @ApiParam(value = "产线一次下线合格率-时间段") private String workCenterFirstTimeOfflineQualificationRateTimePeriod; @@ -108,6 +110,13 @@ public class MesWorkCenterBoardResultModel { public MesWorkCenterBoardResultModel() { } + public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime, String workOrderNo, String partNo) { + this.serialNumber = serialNumber; + this.createDateTime = createDateTime; + this.workOrderNo = workOrderNo; + this.partNo = partNo; + } + public MesWorkCenterBoardResultModel(String serialNumber, String createDateTime) { this.serialNumber = serialNumber; this.createDateTime = createDateTime; diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java index 7723d7c..99bc265 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/model/report/MesWorkCellScanMonitorConditionModel.java @@ -19,6 +19,9 @@ public class MesWorkCellScanMonitorConditionModel { @ApiParam(value = "组织代码") private String organizeCode; + @ApiParam(value = "操作人") + private String userInfo; + @ApiParam(value = "产线") private String workCenterCode; @@ -43,6 +46,9 @@ public class MesWorkCellScanMonitorConditionModel { @ApiParam("扫描/读取信息") private String scanInfo; + @ApiParam("信息") + private String message; + @ApiParam("生产工单号") private String workOrderNo; @@ -103,5 +109,35 @@ public class MesWorkCellScanMonitorConditionModel { return this; } + @Override + public String toString() { + + return "MesWorkCellScanMonitorConditionModel{" + + "organizeCode='" + organizeCode + '\'' + + ", userInfo='" + userInfo + '\'' + + ", workCenterCode='" + workCenterCode + '\'' + + ", workCellCode='" + workCellCode + '\'' + + ", equipId='" + equipId + '\'' + + ", equipmentCode='" + equipmentCode + '\'' + + ", equipVariableId='" + equipVariableId + '\'' + + ", equipVariableName='" + equipVariableName + '\'' + + ", mouldRecordId='" + mouldRecordId + '\'' + + ", scanInfo='" + scanInfo + '\'' + + ", message='" + message + '\'' + + ", workOrderNo='" + workOrderNo + '\'' + + ", productSn='" + productSn + '\'' + + ", partNo='" + partNo + '\'' + + ", stepCode='" + stepCode + '\'' + + ", logTypes='" + logTypes + '\'' + + ", messageType='" + messageType + '\'' + + ", limit='" + limit + '\'' + + ", ascOrDesc='" + ascOrDesc + '\'' + + ", createDateTimeStart='" + createDateTimeStart + '\'' + + ", createDateTimeEnd='" + createDateTimeEnd + '\'' + + '}'; + + + } + } diff --git a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java index 965c6fb..92cf96a 100644 --- a/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java +++ b/modules/i3plus-ext-mes-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pojo/util/MesExtConstWords.java @@ -127,6 +127,8 @@ public class MesExtConstWords { public static final String LOG_TYPE = "logType"; //信息类型 public static final String MESSAGE_TYPE = "messageType"; + //信息 + public static final String MESSAGE = "message"; //枚举代码 public static final String ENUM_CODE = "enumCode"; //组件类型 @@ -135,6 +137,12 @@ public class MesExtConstWords { public static final String ORG_WORK_CODE = "orgWorkCode"; //工厂_设备ID public static final String ORG_EQUIP_ID = "orgEquipId"; + //配置代码 + public static final String CFG_CODE = "cfgCode"; + //配置键 + public static final String CFG_KEY = "cfgKey"; + //配置类型 + public static final String CFG_TYPE = "cfgType"; //时间[开始/结束]条件 public static final String START_TIME_START = "startTimeStart"; @@ -218,4 +226,15 @@ public class MesExtConstWords { //英文逗号 public static final String COMMA = ","; + // ; + public static final String SEMICOLON = ";"; + + // 分表配置 + public static final String MES_SHARDING_TABLES_OBJECT_CFG = "MES_SHARDING_TABLES_OBJECT_CFG"; + + // 工位扫描日志报表临时文件 + public static final String MES_WCSML_REPORT_TMP_DATA = "MES_WCSML_REPORT_TMP_DATA"; + public static final String CONDITION_U = "CONDITION"; + public static final String DATA_U = "DATA"; + }