diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java index cf363d3..f86e5c8 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListDetailService.java @@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -14,4 +15,7 @@ public interface IMesLoadingListDetailService extends IBaseMesService queryLoadingListDetail(MesLoadingListDetail detail, Pager pager); + @ApiOperation("根据发运单号查询装车单明细信息") + MesLoadingListDetail getMesLoadingListDetail(String organizeCode,String shippingCode); + } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java index 71fa066..5f62aee 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesLoadingListService.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.api.base; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; +import io.swagger.annotations.ApiOperation; /** * @Description: @@ -9,5 +10,7 @@ import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; */ public interface IMesLoadingListService extends IBaseMesService { + @ApiOperation("根据发运单号查询装车单信息") + MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java index b16b48c..d197332 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesPartInspectionService.java @@ -1,5 +1,7 @@ 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.nc.MesPartInspection; /** @@ -10,4 +12,5 @@ import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; public interface IMesPartInspectionService extends IBaseMesService { + ListPager queryMesPartInspectionParamByPager(MesPartInspection mesPartInspection, Pager pager); } 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 992ea9c..b444815 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 @@ -4,6 +4,8 @@ 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 cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -24,4 +26,13 @@ public interface IMesProductionRecordService extends IBaseMesService queryMesProductionOffLine(MesProductionRecordModel mesProductionRecordModel,Pager pager); + + @ApiOperation(value = "线边库存报表") + ListPager queryProductAccount(MesProductAccountModel productAccountModel, Pager pager); + + @ApiOperation(value = "线边库存报表") + List queryProductAccount(MesProductAccountModel productAccountModel); + + @ApiOperation(value = "线边库存报表") + List transferAccount(List list,MesProductAccountModel productAccountModel, Pager pager); } diff --git a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java index 33d62e5..3650596 100644 --- a/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.java +++ b/modules/i3plus-ext-mes-api/src/main/java/cn/estsh/i3plus/ext/mes/api/base/IMesWorkOrderCutService.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.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -17,6 +20,12 @@ public interface IMesWorkOrderCutService extends IBaseMesService workOrderIds, String cutCode, String remark, String organizeCode, String userName, Integer editionNumber); + @ApiOperation("分页查询裁片工单明细") + ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + + //@ApiOperation("分页查询裁片工单明细") + //ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager); + @ApiOperation("发布裁片工单") void doReleaseCutWorkOrder(List cutWorkOrderNos, 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 9fa5634..a64c721 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 @@ -37,6 +37,8 @@ public interface IMesWorkOrderService extends IBaseMesService { @ApiOperation("ccscTest") List queryMesWorkOrderProcessToSap(String organizeCode); + MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo); + @ApiOperation("反向冲销") void doReportWorkReversal(WmsProductModel model); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java index 2600083..ebff3a7 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/config/WebServiceConfig.java @@ -21,6 +21,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.config; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServer; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerIns; +import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice.WebServiceServerSPS; import org.apache.cxf.Bus; import org.apache.cxf.jaxws.EndpointImpl; import org.apache.cxf.transport.servlet.CXFServlet; @@ -63,4 +64,10 @@ public class WebServiceConfig { endpoint.publish("/mes-service-instrument"); return endpoint; } + @Bean + public Endpoint endpointSpsEqu() { + EndpointImpl endpoint = new EndpointImpl(bus, new WebServiceServerSPS()); + endpoint.publish("/mes-service-spsEqu"); + return endpoint; + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java index 1834a31..aa6b659 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesPartInspectionController.java @@ -1,8 +1,16 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; +import cn.estsh.i3plus.ext.mes.api.base.IMesPartInspectionService; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +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 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; @@ -14,4 +22,19 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping(MesCommonConstant.MES_YANFEN + "/mesPartInspection") public class MesPartInspectionController extends BaseMesController { + @Autowired + private IMesPartInspectionService mesPartInspectionService; + + @GetMapping("/query-param") + @ApiOperation(value = "查询零件检测") + public ResultBean queryMesPartInspectionParamByPager(MesPartInspection mesPartInspection, Pager pager) { + + try { + return ResultBean.success("查询成功").setListPager(mesPartInspectionService.queryMesPartInspectionParamByPager(mesPartInspection, pager)); + } 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/base/MesShippingOrderManagementController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java index c6dcdda..bd30121 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesShippingOrderManagementController.java @@ -38,17 +38,13 @@ public class MesShippingOrderManagementController extends BaseMesController saveShipping(@RequestBody List beanList) { try { - List orderNoList = - beanList.stream().filter(k -> k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getValue() && - k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).map(k -> k.getShippingCode()).collect(Collectors.toList()); + List orderNoList = beanList.stream().filter(k -> k.getStatus() != MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getValue()).map(MesShippingOrderManagement::getShippingCode).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(orderNoList)) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode()) - .setErrorDetail("【%s】发运单状态不是【%s】或【%s】,请选择状态为【%s】或【%s】的数据", orderNoList, MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getDescription(), - MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription(), MesExtEnumUtil.SHIPPING_ORDER_STATUS.CREATE.getDescription(), - MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()) + .setErrorDetail("【%s】发运单状态不是【%s】状态", orderNoList, MesExtEnumUtil.SHIPPING_ORDER_STATUS.PUBLISHED.getDescription()) .build(); } //新增初始化 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java index 760bfc9..344cd69 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/base/MesWorkOrderCutController.java @@ -2,17 +2,19 @@ package cn.estsh.i3plus.ext.mes.apiservice.controller.base; import cn.estsh.i3plus.ext.mes.api.base.IMesWorkOrderCutService; 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.MesWorkOrderCut; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderCutDetail; 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.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; -import cn.hutool.core.collection.ListUtil; 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.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -48,6 +50,21 @@ public class MesWorkOrderCutController extends BaseMesController mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); + pager.setTotalRows(CollectionUtils.isEmpty(mesProductAccountResModels) ? 0 : mesProductAccountResModels.size()); + List mesProductAccountResModelsRes = mesProductionRecordService.transferAccount(mesProductAccountResModels,productAccountModel, pager); + + return ResultBean.success("查询成功").setResultList(mesProductAccountResModelsRes).setPager(pager); + } catch (ImppBusiException e) { + return ResultBean.fail(e); + } catch (Exception e) { + e.printStackTrace(); + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java new file mode 100644 index 0000000..3995b0d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/controller/report/MesProductAccountController.java @@ -0,0 +1,12 @@ +package cn.estsh.i3plus.ext.mes.apiservice.controller.report; + +import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api("Mes业务报表") +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/") +public class MesProductAccountController { +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java new file mode 100644 index 0000000..fd4132d --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesAccountJob.java @@ -0,0 +1,203 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + + +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.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.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.mvel2.util.Make; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static cn.estsh.i3plus.mes.apiservice.util.DateUtil.FORMAT_HH_MM; +import static cn.estsh.i3plus.mes.apiservice.util.DateUtil.FORMAT_YYYY_MM_DD; + +/** + * @author castle, 暂时没有客供品移库 + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("生成对账数据job") +public class MesAccountJob extends BaseMesScheduleJob { + + @Autowired + private MesProductRecordLogRepository mesProductRecordLogRepository; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository; + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Autowired + private MesMouldMultiCavityRepository mesMouldMultiCavityRepository; + + public MesAccountJob() { + super(MesAccountJob.class, "生成对账数据job"); + } + + @Override + @Transactional + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + JSONObject jsonObject = new JSONObject(); + + String json = this.getJobParam(); + //String json = "{\"startTime\":\"2024-09-13 07:50:00\",\"endTime\":\"2024-09-19 08:00:00\"}"; + com.alibaba.fastjson.JSONObject reqJson = com.alibaba.fastjson.JSONObject.parseObject(json); + String startDateTime = reqJson.getString("startTime"); + String endDateTime = reqJson.getString("endTime"); + if (reqJson == null || (StringUtils.isEmpty(startDateTime) && StringUtils.isEmpty(endDateTime))) { + Date yesterday = TimeTool.getDateBefore(new Date(), 1); + startDateTime = FORMAT_YYYY_MM_DD.format(yesterday) + " " + " 07:50:00"; + endDateTime = TimeTool.getToday() + " 08:00:00"; + } + + jsonObject.putIfAbsent("organizeCode", "CK01"); + jsonObject.putIfAbsent("userName", "job"); + + String organizeCode = jsonObject.getStr("organizeCode"); + String userName = jsonObject.getStr("userName"); + if (null == organizeCode) { + log.error("请添加需要对账的工厂代码!"); + return; + } + if (null == userName) { + userName = "JOB"; + } + + //String startDateTime = FORMAT_YYYY_MM_DD.format(yesterday) + " " + " 07:50:00"; + //String endDateTime = TimeTool.getToday() + " 08:00:00"; + //String startDateTime = "2024-09-14 07:50:00"; + //String endDateTime = "2024-09-15 08:00:00"; + //List list = Stream.of("A88_EOL_Electric_inspection").collect(Collectors.toList()); + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + //DdlPreparedPack.getInPackList(list, "equipmentCode", ddlPackBean); + DdlPreparedPack.getNumEqualPack(10, "equipmentType", ddlPackBean); + + List equipments = mesEquipmentRepository.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(equipments)) { + return; + } + try { + for (MesEquipment equipment : equipments) { + LOGGER.info("正常处理设备编号:{}的设备数据开始", equipment.getEquipmentCode()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(endDateTime, "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(startDateTime, "createDatetime", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + /*recordLogs = recordLogs.stream().filter(productRecordLog ->(!Objects.equal(productRecordLog.getType(), "record") && !Objects.equal(productRecordLog.getType(), "logdetail")) + || (Objects.equal(productRecordLog.getType(), "logdetail") && StringUtils.isEmpty(productRecordLog.getPartNo()))).collect(Collectors.toList()); +*/ + if (CollectionUtils.isEmpty(recordLogs)) { + continue; + + + } + if (equipment.getEquipmentCode().contains("HT")) { + String partNo = ""; + List productRecordLogList = new ArrayList<>(); + + DdlPackBean detailPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipment.getEquipmentCode(), "equipmentCode", detailPackBean); + DdlPreparedPack.getStringLikerPack("InjDataSeries", "equipVariableName", detailPackBean); + DdlPreparedPack.getStringEqualPack("192", "quality", detailPackBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(startDateTime, "createDatetime", detailPackBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.DESC.getValue(), detailPackBean); + List detailLogs = mesProductRecordLogRepository.findByHqlTopWhere(detailPackBean, 1); + DdlPackBean mouldMultipackBeanTemp = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(detailLogs.get(0).getEquipVariableValue(), "mouldNo", mouldMultipackBeanTemp); + List mouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBeanTemp); + if (CollectionUtils.isEmpty(mouldMultiCavities)) { + continue; + } else { + List partList = mouldMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).distinct().collect(Collectors.toList()); + partNo = String.join(",", partList); + } + + for (MesProductRecordLog log : recordLogs) { + if (!StringUtils.isEmpty(log.getPartNo()) && log.getEquipVariableName() != null + && !log.getEquipVariableName().contains("InjDataSeries")) { + continue; + } + if (log.getType().equals("logdetail") && log.getEquipVariableName().contains("InjDataSeries")) { + if (StringUtils.isEmpty(log.getEquipVariableValue())) { + continue; + } + DdlPackBean mouldMultipackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(log.getEquipVariableValue(), "mouldNo", mouldMultipackBean); + List mesMouldMultiCavities = mesMouldMultiCavityRepository.findByHqlWhere(mouldMultipackBean); + if (CollectionUtils.isEmpty(mesMouldMultiCavities)) { + continue; + } else { + List partList = mesMouldMultiCavities.stream().map(MesMouldMultiCavity::getPartNo).distinct().collect(Collectors.toList()); + partNo = String.join(",", partList); + log.setPartNo(partNo); + } + } else { + log.setPartNo(partNo); + if (!StringUtils.isEmpty(partNo)) { + productRecordLogList.add(log); + } + } + } + mesProductRecordLogRepository.saveAll(productRecordLogList); + } else { + String partNo = ""; + List productRecordLogs = new ArrayList<>(); + for (MesProductRecordLog log : recordLogs) { + + if (log.getType().equals("monitor") && !StringUtils.isEmpty(log.getPartNo())) { + partNo = log.getPartNo(); + } else { + + log.setPartNo(partNo); + if (!StringUtils.isEmpty(partNo)) { + productRecordLogs.add(log); + } + + } + } + mesProductRecordLogRepository.saveAll(productRecordLogs); + } + LOGGER.info("正常处理设备编号:{}的设备数据结束"); + } + }catch (Exception e) { + e.printStackTrace(); + } + // + } +} + diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java new file mode 100644 index 0000000..2fd1566 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesGenerateAccountJob.java @@ -0,0 +1,300 @@ +package cn.estsh.i3plus.ext.mes.apiservice.schedulejob; + + +import cn.estsh.i3plus.ext.mes.api.base.IMesProductionRecordService; +import cn.estsh.i3plus.mes.apiservice.schedulejob.BaseMesScheduleJob; +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.*; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; +import cn.estsh.i3plus.pojo.mes.repository.*; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import cn.hutool.json.JSONObject; +import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.BeanUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author castle, 暂时没有客供品移库 + * @version 1.0 + * @date 2021/2/2 16:44 + **/ +@Slf4j +@DisallowConcurrentExecution +@Component +@ApiOperation("生成对账数据job") +public class MesGenerateAccountJob extends BaseMesScheduleJob { + + @Autowired + private MesProductRecordLogRepository mesProductRecordLogRepository; + + @Autowired + private MesProductionRecordRepository mesProductionRecordRepository; + + @Autowired + private MesEquipmentLogDetailRepository mesEquipmentLogDetailRepository; + + @Autowired + private MesEquipmentRepository mesEquipmentRepository; + + @Autowired + private MesMouldMultiCavityRepository mesMouldMultiCavityRepository; + + @Autowired + private IMesProductionRecordService mesProductionRecordService; + + public MesGenerateAccountJob() { + super(MesGenerateAccountJob.class, "生成对账数据job"); + } + + @Override + @Transactional + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + JSONObject jsonObject = new JSONObject(); + + jsonObject.putIfAbsent("organizeCode", "CK01"); + jsonObject.putIfAbsent("userName", "job"); + + String organizeCode = jsonObject.getStr("organizeCode"); + String userName = jsonObject.getStr("userName"); + if (null == organizeCode) { + log.error("请添加需要对账的工厂代码!"); + return; + } + if (null == userName) { + userName = "JOB"; + } + /** + * 760B_A58_ReMaoHan 只有finish信号 + * 760BFoaming + * 760B_LaserCutting + * ZhenKong + */ + List equimentList = Stream.of("760B_A58_ReMaoHan","760BFoaming","760B_LaserCutting","ZhenKong").collect(Collectors.toList()); + MesProductAccountModel productAccountModel = new MesProductAccountModel(); + productAccountModel.setStartTime("2024-09-12 08:00:00"); + productAccountModel.setEndTime("2024-09-13 08:00:00"); + productAccountModel.setEquipmentCode("HT2400APrinter_MixUA"); + productAccountModel.setPartNo("Y0556325-01"); + List mesProductAccountResModels = mesProductionRecordService.queryProductAccount(productAccountModel); + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + mesProductAccountResModels = mesProductAccountResModels.stream().filter(mesProductAccountResModel -> mesProductAccountResModel.getDetailCount().compareTo(mesProductAccountResModel.getProductCount())> 0) .collect(Collectors.toList()); + } + if (!CollectionUtils.isEmpty(mesProductAccountResModels)) { + for (MesProductAccountResModel mesProductAccountResModel : mesProductAccountResModels) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + + String reason = handleHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason =handleNotHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else { + String reason =handleNotHTAndHasRelease(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } + } + } + } + + private String handleNotHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + boolean bypassFlag = false; + + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { + if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = true; + continue; + } else { + if (bypassFlag) { + bypassFlag = false; + errorCount = 0; + continue; + } + } + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + + if (result == 0) { + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason += String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason += String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } + + private String handleNotHTAndHasRelease(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + String reasonBypass = "【%s】到【%s】设备信号Bypass,【%s】个完成信号丢失"; + String releaseBypass = "【%s】到【%s】设备信号没有个release就给了完成新号,导致【%s】个完成信号丢失"; + + + + boolean bypassFlag = false; + boolean releaseFlag = false; + + List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = !bypassFlag; + if (!bypassFlag) { + errorCount = 0; + } + continue; + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason = String.format(reasonBypass,startTime, endTime, errorCount +""); + continue; + } + + if (result == 0) { + if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + releaseFlag = true; + continue; + } + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + result ++; + + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (!releaseFlag) { + reason = String.format(releaseBypass,startTime, endTime, errorCount +""); + } else { + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } + + private String handleHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + int errorCount = 0; + String reason = ""; + String reasonOffline = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonQuality = "【%s】到【%s】设备信号质量有问题,导致【%s】个完成信号丢失"; + + for (MesProductRecordLog recordLog : recordLogs) { + if (result == 0) { + if (!Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") ) { + continue; + } + if (recordLog.getEquipVariableValue().compareTo("0") > 0) { + result ++; + } + } else { + if (Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + errorCount ++; + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason = String.format(reasonOffline,startTime, endTime, errorCount +""); + } else { + reason = String.format(reasonQuality,startTime, endTime, errorCount +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } +} + diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java new file mode 100644 index 0000000..8a0dc15 --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/schedulejob/MesWorkOrderUpdateQtyJob.java @@ -0,0 +1,148 @@ +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.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.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.MesWorkOrderModel; +import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.estsh.impp.framework.boot.init.ApplicationProperties; +import com.google.common.base.Objects; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @Description : 汇总工单给SAP + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/5/11 15:58 + * @Modify: + **/ +// 禁止 JOB 并发执行 +@DisallowConcurrentExecution +@ApiOperation("汇总工单报工数量") +@Service +public class MesWorkOrderUpdateQtyJob extends BaseMesScheduleJob { + + public static final Logger LOGGER = LoggerFactory.getLogger(MesWorkOrderUpdateQtyJob.class); + + private static final long serialVersionUID = 9072058154235836696L; + + @Autowired + private IMesWorkOrderService mesWorkOrderService; + + @Autowired + private MesProductionRecordRepository productionRecordRao; + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + public MesWorkOrderUpdateQtyJob() { + super(MesWorkOrderUpdateQtyJob.class, "汇总工单报工数量"); + this.setMultiInstance(true); + } + + @Override + public void executeMesJob(JobExecutionContext context, ApplicationProperties applicationProperties) { + try { + //String jobParam = this.getJobParam(); + String jobParam = "CK01"; + if (StringUtils.isBlank(jobParam)) { + throw new IllegalArgumentException("job参数为空,请检查参数"); + } + String[] organizeCodeList = jobParam.split(","); + LOGGER.info("汇总工单报工数量开始 -----start"); + String userName = "job"; + for (String organizeCode : organizeCodeList) { + List recordList = getUnReportMesProduceSn(organizeCode, null); + if (CollectionUtils.isEmpty(recordList)) { + continue; + } + Map> map = recordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getWorkOrderNo)); + List orders = new ArrayList<>(); + map.forEach((k,v) -> { + MesWorkOrder workOrder = mesWorkOrderService.getWorkOrder(organizeCode, k); + + List productionRecords = getUnReportMesProduceSn(organizeCode, workOrder.getWorkOrderNo()); + + workOrder.setReportedQty(Double.valueOf(productionRecords.size())); + workOrder.setCompleteQty(Double.valueOf(productionRecords.size())); + Double uncompleteQty = workOrder.getQty() - Double.valueOf(productionRecords.size()); + if (uncompleteQty < 0) { + uncompleteQty = 0d; + } + List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()).collect(Collectors.toList()); + + if (!list.contains(workOrder.getWorkOrderStatus())) { + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + LOGGER.info("工单号【{}】状态不是已发布、加工中、已完成,不进行累积"); + } else { + // 如果工单是已发布则修改成加工中 + if (Objects.equal(workOrder.getWorkOrderStatus(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue())) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); + } + // 如果数量满足,则修改成已完成 + if (workOrder.getQty() <= workOrder.getReportedQty()) { + workOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); + } + + workOrder.setUnCompleteQty(uncompleteQty); + workOrder.setSystemSyncStatus(1); + orders.add(workOrder); + } + }); + workOrderRepository.saveAll(orders); + } + LOGGER.info("汇总工单报工数量结束 ----- end"); + + } catch (Exception e) { + LOGGER.error("汇总工单报工数量结束e:{}", e.toString()); + } + } + + public List getUnReportMesProduceSn(String organizeCode, String workOrderNo) { + + //1.获取生产加工记录production_record表中,report_status为待汇报状态的工单 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getIsNotNull("workOrderNo", ddlPackBean); + if (!StringUtils.isEmpty(workOrderNo)) { + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", ddlPackBean); + } else { + DdlPreparedPack.getNumEqualPack(2,"systemSyncStatus", ddlPackBean); + } + + DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_20.getValue(), "reportStatus", ddlPackBean); + + + List mesProductionRecordList = productionRecordRao.findByHqlTopWhere(ddlPackBean, 500); + List recordList = new ArrayList<>(); + + recordList.addAll(mesProductionRecordList); + + return recordList; + } +} diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java index 30bd7fe..fc809d6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesBomService.java @@ -127,7 +127,7 @@ public class MesBomService extends BaseMesService implements IMesBomServ } MesBom next = mesBoms.iterator().next(); //如果存在多个bomCode取最新的一个 - return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); + return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime()); } @Override diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java index 9fe35cb..a8ac4d0 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckDetailService.java @@ -19,6 +19,7 @@ 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; @@ -42,6 +43,8 @@ public class MesEquipmentSpotCheckDetailService extends BaseMesService addressList = new ArrayList<>(); //查询设备变量信息 - List realAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getRealValueAddress).distinct().collect(Collectors.toList()); - List setAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getSetValueAddress).distinct().collect(Collectors.toList()); + List realAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getRealValueAddress).filter(t-> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); + List setAddress = beanList.stream().map(MesEquipmentSpotCheckDetail::getSetValueAddress).filter(t-> !StringUtils.isEmpty(t)).distinct().collect(Collectors.toList()); if (!CollectionUtils.isEmpty(realAddress)) addressList.addAll(realAddress); if (!CollectionUtils.isEmpty(setAddress)) addressList.addAll(setAddress); if (CollectionUtils.isEmpty(addressList)) return null; diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java index aeba880..1550550 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesEquipmentSpotCheckService.java @@ -23,7 +23,13 @@ public class MesEquipmentSpotCheckService extends BaseMesService beanList) { diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java index cc2e2a9..e5b14b8 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListDetailService.java @@ -3,13 +3,16 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesLoadingListDetailService; import cn.estsh.i3plus.ext.mes.apiservice.dao.IMesLoadingListDetailDao; import cn.estsh.i3plus.ext.mes.pojo.model.MesLoadingListDetailModel; +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.tool.DdlPreparedPack; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.List; @@ -27,4 +30,14 @@ public class MesLoadingListDetailService extends BaseMesService list = detailDao.queryLoadingListDetailModel(detail, pager); return new ListPager<>(list, pager); } + + @Override + public MesLoadingListDetail getMesLoadingListDetail(String organizeCode, String shippingCode) { + if(StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(shippingCode)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(shippingCode,"shippingCode",packBean); + return baseRDao.getByProperty(packBean); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java index 0ea2d74..ea283ff 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesLoadingListService.java @@ -30,6 +30,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; +import java.util.Objects; @Service @Slf4j @@ -230,5 +231,17 @@ public class MesLoadingListService extends BaseMesService implem DdlPreparedPack.getStringEqualPack(bean.getCustCode(), "custCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getCustOrganizeCode(), "custOrganizeCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getTruckNo(), "truckNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getRemark(), "remark", packBean); + } + + @Override + public MesLoadingList getMesLoadingListByShippingCode(String organizeCode, String shippingCode) { + MesLoadingListDetail mesLoadingListDetail = detailService.getMesLoadingListDetail(organizeCode,shippingCode); + if(Objects.isNull(mesLoadingListDetail)){ + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(mesLoadingListDetail.getPid(),"id",packBean); + return baseRDao.getByProperty(packBean); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java index 68e037b..ff455a6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartInspectionService.java @@ -1,17 +1,37 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; import cn.estsh.i3plus.ext.mes.api.base.IMesPartInspectionService; +import cn.estsh.i3plus.platform.common.util.MesConstWords; 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.MesOrg; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.bean.nc.MesPartInspection; +import cn.estsh.i3plus.pojo.mes.repository.MesOrgRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.util.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + @Service @Slf4j public class MesPartInspectionService extends BaseMesService implements IMesPartInspectionService { + @Autowired + private MesWorkCenterRepository mesWorkCenterRDao; + @Autowired + private MesOrgRepository mesOrgRDao; @Override protected void setPackQueryBean(MesPartInspection bean, DdlPackBean packBean) { DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); @@ -28,4 +48,62 @@ public class MesPartInspectionService extends BaseMesService // DdlPreparedPack.getStringLikerPack(bean.getInspectionDate(), "inspectionDate", packBean); } + @Override + public ListPager queryMesPartInspectionParamByPager(MesPartInspection bean, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(bean.getSn(), "sn", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); + //3.增加产线查询条件,选用下拉框,支持多选 + if(!StringUtil.isEmpty(bean.getWorkCenterCode())){ + DdlPreparedPack.getInPackList(Arrays.asList(bean.getWorkCenterCode().split(",")), "workCenterCode", packBean); + } +// DdlPreparedPack.getStringLikerPack(bean.getWorkCenterCode(), "workCenterCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getNcStatus(), "ncStatus", packBean); + if (StringUtils.isNotBlank(bean.getCreateDateTimeStart()) && StringUtils.isNotBlank(bean.getCreateDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), "createDatetime", packBean, true); + } + if (StringUtils.isNotBlank(bean.getModifyDateTimeStart()) && StringUtils.isNotBlank(bean.getModifyDateTimeEnd())) { + DdlPreparedPack.timeBuilder(bean.getModifyDateTimeStart(), bean.getModifyDateTimeEnd(), "modifyDatetime", packBean, true); + } + DdlPackBean packBeanLo = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); +// DdlPreparedPack.getStringLikerPack(bean.getInventoryLocationCode(), "responsibleParty", packBeanLo); + List orgList = mesOrgRDao.findByHqlWhere(packBeanLo); + //2.增加库区查询条件,文本框,支持模糊输入 +// LOGGER.info("queryMesPartInspectionParamByPager-orgList:{}", orgList); + if(!StringUtil.isEmpty(bean.getInventoryLocationCode())){ + if (!CollectionUtils.isEmpty(orgList)){ + String inventoryLocationCode = bean.getInventoryLocationCode(); + List collect = orgList.stream().filter(o->o.getInventoryLocationCode().equals(inventoryLocationCode)) + .map(MesOrg::getResponsibleParty).collect(Collectors.toList()); + DdlPreparedPack.getInPackList(collect,"responsibleParty", packBean); + } + } + pager = PagerHelper.getPager(pager, baseRDao.findByHqlWhereCount(packBean)); + + List resultList = baseRDao.findByHqlWherePage(packBean, pager); + if (!CollectionUtils.isEmpty(resultList)){ + for (MesPartInspection mesPartInspection : resultList) { + if (!StringUtils.isEmpty(mesPartInspection.getWorkCenterCode())){ + MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty( + new String[]{MesConstWords.ORGANIZE_CODE, MesConstWords.IS_DELETED, MesConstWords.IS_VALID, "workCenterCode"}, + new Object[]{bean.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), + CommonEnumUtil.IS_VAILD.VAILD.getValue(), mesPartInspection.getWorkCenterCode()}); + if (null != mesWorkCenter) { + mesPartInspection.setWorkCenterName(mesWorkCenter.getWorkCenterName()); + } + } + //1.页面增加库区字段(库区根据报废选择的责任人关联查询) + if (!StringUtils.isEmpty(mesPartInspection.getResponsibleParty())){ + if (!CollectionUtils.isEmpty(orgList)){ + List collect = orgList.stream().filter(a -> mesPartInspection.getResponsibleParty().equals(a.getResponsibleParty())).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(collect)){ + mesPartInspection.setInventoryLocationCode(collect.get(0).getInventoryLocationCode()); + } + } + } + } + } + return new ListPager<>(resultList, pager); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java index 21a4d2c..bfd7fbe 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPartSapService.java @@ -23,8 +23,8 @@ public class MesPartSapService extends BaseMesService implements IMe protected void setPackQueryBean(MesPartSap bean, DdlPackBean packBean) { DdlPreparedPack.getNumEqualPack(bean.getIsTestPiece(), "isTestPiece", packBean); DdlPreparedPack.getStringLikerPack(bean.getPartNo(), "partNo", packBean); - DdlPreparedPack.getStringLikeEqualPack(bean.getPartName(), "partName", packBean); - DdlPreparedPack.getStringLikeEqualPack(bean.getPartStatus(), "partStatus", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartName(), "partName", packBean); + DdlPreparedPack.getStringLikerPack(bean.getPartStatus(), "partStatus", packBean); } @Override 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 7eadfe3..f038a66 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 @@ -4,6 +4,9 @@ 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.ext.mes.pojo.model.MesLoadingListDetailModel; +import cn.estsh.i3plus.ext.mes.pojo.model.MesShippingOrderManagementDetailModel; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -13,25 +16,34 @@ 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.MesProductRecordLog; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingListDetail; import cn.estsh.i3plus.pojo.mes.model.MesProductionRecordModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountModel; +import cn.estsh.i3plus.pojo.mes.model.report.MesProductAccountResModel; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesProductRecordLogRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.google.common.base.Objects; +import com.google.common.collect.Lists; +import com.xxl.job.core.util.DateUtil; import lombok.extern.slf4j.Slf4j; import org.hibernate.SQLQuery; +import org.hibernate.query.internal.NativeQueryImpl; import org.hibernate.transform.Transformers; +import org.mvel2.util.Make; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; 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.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : 设备加工记录表 @@ -52,6 +64,9 @@ public class MesProductionRecordServiceImpl extends BaseMesService findMesProductionRecord(String organizeCode, String sn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); @@ -105,6 +120,305 @@ public class MesProductionRecordServiceImpl extends BaseMesService queryProductAccount(MesProductAccountModel productAccountModel, Pager pager) { + List resList = new ArrayList<>(); + + String sqlStr = "select mpr.part_no,mpr.equipment_code,mpr.equipment_name,mpr.work_cell_code,mpr.work_center_code," + + "mpr.product_count,mpr.detail_count,error_reason from (\n" + + "\n" + + "SELECT\n" + + "\tmpr.part_no ,\n" + + "\tmpr.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\tmpr.product_count ,\n" + + "\tmpr.detail_count , \n" + + "\t null error_reason\n" + + "\t\n" + + "FROM\n" + + "\t(\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum( CASE WHEN type = 'logdetail' THEN 1 ELSE 0 END ) detail_count \n" + + "\tFROM\n" + + "\t\tmes_product_record_log \n" + + "\tWHERE\n" + + "\t\tequipment_code LIKE '%HT%' \n"; + + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += " and equipment_code = :equipmentCode "; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += " and part_no=:partNo "; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += " and create_date_time >= :startTime "; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += " and create_date_time < :endTime "; + } + + + sqlStr += + "\t\tAND part_no IS NOT NULL \n" + + "\tGROUP BY\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no \n" + + "\t) mpr\n" + + "\tLEFT JOIN mes_wc_equipment me ON mpr.equipment_code = me.equipment_code \n" + + "\n" + + "\n" + + "UNION\n" + + "SELECT\n" + + "\tmprnc.out_part_no part_no,\n" + + "\tmprnc.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\teqcount.product_count ,\n" + + "\teqcount.detail_count , \n" + + "\t null error_reason \n" + + "FROM\n" + + "\tmes_prod_rule_nosort_cfg mprnc\n" + + "\tLEFT JOIN mes_wc_equipment me ON mprnc.equipment_code = me.equipment_code and me.is_deleted = 2 and me.is_valid = 1 \n" + + "\tLEFT JOIN (\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum(\n" + + "\t\tCASE\n" + + "\t\t\t\t\n" + + "\t\t\t\tWHEN type = 'logdetail' \n" + + "\t\t\t\tAND CATEGORY_LEVEL_TWO IN ( 'Product_finish', 'PART_OK', 'Part_Finish', 'Product_OK' ) \n" + + "\t\t\t\tAND EQUIP_VARIABLE_VALUE = 'True' THEN\n" + + "\t\t\t\t\t1 ELSE 0 \n" + + "\t\t\t\tEND \n" + + "\t\t\t\t) detail_count \n" + + "\t\t\tFROM\n" + + "\t\t\t\tmes_product_record_log \n" + + "\t\t\tWHERE 1 = 1 \n"; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "\t\t\t and equipment_code = :equipmentCode \n"; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += "\t\t\t and part_no= :partNo \n"; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += "\t\t\t and create_date_time >= :startTime \n"; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += "\t\t\t and create_date_time < :endTime \n"; + } + sqlStr += + "\t\t\t and \n" + + "\t\t\t\tpart_no IS NOT NULL \n" + + "\t\t\tGROUP BY\n" + + "\t\t\t\tequipment_code,\n" + + "\t\t\t\tpart_no \n" + + "\t\t\t) eqcount ON mprnc.equipment_code = eqcount.equipment_code \n" + + "\t AND mprnc.out_part_no = eqcount.part_no where 1=1 "; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "and mprnc.equipment_code= :equipmentCode "; + } + sqlStr += "\tand eqcount.product_count is not null and eqcount.detail_count is not null ) mpr \n" + + "\t\n" + + "\tleft join mes_equipment me\n" + + "\ton mpr.equipment_code = me.equipment_code\n" + + "\n" + + "where mpr.product_count != 0 and mpr.detail_count != 0\n" + + "and me.equipment_type = 10"; + + + Query query = entityManager.createNativeQuery(sqlStr); + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + query.setParameter("equipmentCode", productAccountModel.getEquipmentCode()); + } + if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + query.setParameter("partNo", productAccountModel.getPartNo()); + } + if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + query.setParameter("startTime", productAccountModel.getStartTime()); + } + if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + query.setParameter("endTime", productAccountModel.getEndTime()); + } + + /* query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + List results = query.getResultList();*/ + List results = query.getResultList(); + for (Object result : results) { + Object[] cells = (Object[]) result; + MesProductAccountResModel model = new MesProductAccountResModel(); + model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setEquipmentCode(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setWorkCellCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setWorkCenterCode(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setProductCount(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + model.setDetailCount(StringUtils.isEmpty(cells[6]) ? "" : String.valueOf(cells[6])); + model.setErrorReason(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7])); + + resList.add(model); + } + + //query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + //List results = query.getResultList(); + + + + return new ListPager<>(resList,pager); + } + + @Override + public List queryProductAccount(MesProductAccountModel productAccountModel) { + List resList = new ArrayList<>(); + + String sqlStr = "select mpr.part_no,mpr.equipment_code,mpr.equipment_name,mpr.work_cell_code,mpr.work_center_code," + + "mpr.product_count,mpr.detail_count,error_reason from (\n" + + "\n" + + "SELECT\n" + + "\tmpr.part_no ,\n" + + "\tmpr.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\tmpr.product_count ,\n" + + "\tmpr.detail_count , \n" + + "\t null error_reason\n" + + "\t\n" + + "FROM\n" + + "\t(\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum( CASE WHEN type = 'logdetail' and CATEGORY_LEVEL_TWO ='shot_counter' and EQUIP_VARIABLE_VALUE > 0 THEN 1 ELSE 0 END ) detail_count \n" + + "\tFROM\n" + + "\t\tmes_product_record_log \n" + + "\tWHERE\n" + + "\t\tequipment_code LIKE '%HT%' \n"; + + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += " and equipment_code = :equipmentCode "; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += " and part_no like '%' :partNo '%' "; + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += " and create_date_time >= :startTime "; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += " and create_date_time < :endTime "; + } + + + sqlStr += + "\t\tAND part_no IS NOT NULL \n" + + "\tGROUP BY\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no \n" + + "\t) mpr\n" + + "\tLEFT JOIN mes_wc_equipment me ON mpr.equipment_code = me.equipment_code \n" + + "\n" + + "\n" + + "UNION\n" + + "SELECT\n" + + "\teqcount.part_no,\n" + + "\teqcount.equipment_code ,\n" + + "\tme.equipment_name ,\n" + + "\tme.work_cell_code ,\n" + + "\tme.work_center_code ,\n" + + "\teqcount.product_count ,\n" + + "\teqcount.detail_count , \n" + + "\t null error_reason \n" + + "FROM\n" + + "\tmes_prod_rule_nosort_cfg mprnc\n" + + "\tRIGHT JOIN mes_wc_equipment me ON mprnc.equipment_code = me.equipment_code and me.is_deleted = 2 and me.is_valid = 1 \n" + + "\tRIGHT JOIN (\n" + + "\tSELECT\n" + + "\t\tequipment_code,\n" + + "\t\tpart_no,\n" + + "\t\tsum( CASE WHEN type = 'record' THEN 1 ELSE 0 END ) product_count,\n" + + "\t\tsum(\n" + + "\t\tCASE\n" + + "\t\t\t\t\n" + + "\t\t\t\tWHEN type = 'logdetail' \n" + + "AND ( (equipment_code != 'Geiss' and CATEGORY_LEVEL_TWO IN ( 'Product_finish', 'PART_OK', 'Part_Finish', 'Product_OK' ) )\n" + + "\t\t\t\tor (equipment_code = 'Geiss' and CATEGORY_LEVEL_TWO = 'Product_finish') )\n" + + "\t\t\t\tAND EQUIP_VARIABLE_VALUE = 'True' THEN\n" + + "\t\t\t\t\t1 ELSE 0 \n" + + "\t\t\t\tEND" + + "\t\t\t\t) detail_count \n" + + "\t\t\tFROM\n" + + "\t\t\t\tmes_product_record_log \n" + + "\t\t\tWHERE 1 = 1 and equipment_code not like '%HT%' \n"; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "\t\t\t and equipment_code = :equipmentCode \n"; + } if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + sqlStr += " and part_no like '%' :partNo '%' "; + + } if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + sqlStr += "\t\t\t and create_date_time >= :startTime \n"; + } if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + sqlStr += "\t\t\t and create_date_time < :endTime \n"; + } + sqlStr += + "\t\t\t and \n" + + "\t\t\t\tpart_no IS NOT NULL \n" + + "\t\t\tGROUP BY\n" + + "\t\t\t\tequipment_code,\n" + + "\t\t\t\tpart_no \n" + + "\t\t\t) eqcount ON mprnc.equipment_code = eqcount.equipment_code \n" + + "\t AND mprnc.out_part_no = eqcount.part_no where eqcount.equipment_code not LIKE '%HT%' "; + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + sqlStr += "and eqcount.equipment_code= :equipmentCode "; + } + sqlStr += "\tand eqcount.product_count is not null and eqcount.detail_count is not null ) mpr \n" + + "\t\n" + + "\tleft join mes_equipment me\n" + + "\ton mpr.equipment_code = me.equipment_code\n" + + "\n" + + "where (mpr.product_count != 0 or mpr.detail_count != 0)\n" + + "and me.equipment_type = 10 order by me.equipment_code asc"; + + + Query query = entityManager.createNativeQuery(sqlStr); + if (!StringUtils.isEmpty(productAccountModel.getEquipmentCode())) { + query.setParameter("equipmentCode", productAccountModel.getEquipmentCode()); + } + if (!StringUtils.isEmpty(productAccountModel.getPartNo())) { + query.setParameter("partNo", productAccountModel.getPartNo()); + } + if (!StringUtils.isEmpty(productAccountModel.getStartTime())) { + query.setParameter("startTime", productAccountModel.getStartTime()); + } + if (!StringUtils.isEmpty(productAccountModel.getEndTime())) { + query.setParameter("endTime", productAccountModel.getEndTime()); + } + + /* query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + List results = query.getResultList();*/ + List results = query.getResultList(); + for (Object result : results) { + Object[] cells = (Object[]) result; + MesProductAccountResModel model = new MesProductAccountResModel(); + model.setPartNo(StringUtils.isEmpty(cells[0]) ? "" : String.valueOf(cells[0])); + model.setEquipmentCode(StringUtils.isEmpty(cells[1]) ? "" : String.valueOf(cells[1])); + model.setEquipmentName(StringUtils.isEmpty(cells[2]) ? "" : String.valueOf(cells[2])); + model.setWorkCellCode(StringUtils.isEmpty(cells[3]) ? "" : String.valueOf(cells[3])); + model.setWorkCenterCode(StringUtils.isEmpty(cells[4]) ? "" : String.valueOf(cells[4])); + model.setProductCount(StringUtils.isEmpty(cells[5]) ? "" : String.valueOf(cells[5])); + model.setDetailCount(StringUtils.isEmpty(cells[6]) ? "" : String.valueOf(cells[6])); + model.setErrorReason(StringUtils.isEmpty(cells[7]) ? "" : String.valueOf(cells[7])); + + resList.add(model); + } + + //query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(MesProductAccountResModel.class)); + //List results = query.getResultList(); + + + + return resList; + } + private List getMesProduceSnList(MesProductionRecordModel mesProductionRecordModel) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProductionRecordModel.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(mesProductionRecordModel.getPartNo(),"partNo",packBean); @@ -215,4 +529,405 @@ public class MesProductionRecordServiceImpl extends BaseMesService transferAccount(List mesProductAccountResModels, MesProductAccountModel productAccountModel, Pager pager) { + /** + * 760B_A58_ReMaoHan 只有finish信号 + * 760BFoaming + * 760B_LaserCutting + * ZhenKong + */ + List equimentList = Stream.of("760B_A58_ReMaoHan","760BFoaming","760B_LaserCutting","ZhenKong").collect(Collectors.toList()); + if (CollectionUtils.isEmpty(mesProductAccountResModels)) { + return null; + } + List partitionList = partition(mesProductAccountResModels, pager.getPageSize(), pager.getCurrentPage()); + for (MesProductAccountResModel mesProductAccountResModel : partitionList) { + boolean isErrorCount = false; + int size = mesProductAccountResModel.getPartNo().split(",").length == 1 ? mesProductAccountResModel.getPartNo().split(";").length : mesProductAccountResModel.getPartNo().split(",").length; + + int productCount = Integer.valueOf(mesProductAccountResModel.getProductCount()); + int detailCount = Integer.valueOf(mesProductAccountResModel.getDetailCount()); + if (detailCount * size > productCount) { + isErrorCount = true; + } + if (!isErrorCount) { + continue; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean("CK01"); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packBean); + + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getEndTime(), "createDatetime", packBean); + DdlPreparedPack.getStringBiggerPack(productAccountModel.getStartTime(), "createDatetime", packBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List recordLogs = mesProductRecordLogRepository.findByHqlWhere(packBean); + + // + DdlPackBean packOffilinBean = DdlPackBean.getDdlPackBean("CK01"); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getEquipmentCode(), "equipmentCode", packOffilinBean); + + Date yesterday = TimeTool.getDateBefore(DateUtil.parseDateTime(productAccountModel.getStartTime()), 1); + String yesterdayStr = DateUtil.formatDateTime(yesterday); + DdlPreparedPack.getStringSmallerNotEqualPack(productAccountModel.getStartTime(), "createDatetime", packOffilinBean); + DdlPreparedPack.getStringBiggerPack(yesterdayStr, "createDatetime", packOffilinBean); + DdlPreparedPack.getStringEqualPack(mesProductAccountResModel.getPartNo(), "partNo", packOffilinBean); + DdlPreparedPack.getStringLikerPack("客户端", "message", packOffilinBean); + + DdlPreparedPack.getOrderBy("createDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packOffilinBean); + List offlineRecordLogs = mesProductRecordLogRepository.findByHqlWhere(packOffilinBean); + + recordLogs.addAll(offlineRecordLogs); + recordLogs = recordLogs.stream().sorted(Comparator.comparing(MesProductRecordLog::getCreateDatetime)).collect(Collectors.toList()); + if (mesProductAccountResModel.getEquipmentCode().contains("HT")) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason = handleHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else if (equimentList.contains(mesProductAccountResModel.getEquipmentCode())) { + // 1 判断2个 shotcount之间有没有加工记录,如果没有,就需要看 设备是不是192,然后看是否是网络原因 + String reason =handleNotHT(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } else { + String reason =handleNotHTAndHasRelease(recordLogs); + mesProductAccountResModel.setErrorReason(reason); + } + } + + return partitionList; + } + + private String handleNotHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + String reason = ""; + String offlineReason = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonOffline = "因其他原因:系统,网络,发版等,导致【%s】的完成信号丢失;"; + String reasonQuality = "【%s】设备信号质量为0,导致【%s】个完成信号丢失;"; + String reasonBypass = "【%s】的完成信号,设备打BYPASS,视为无效;"; + // BYPASS 默认fasle + boolean bypassFlag = false; + boolean offlineFlag = false; + List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); + + for (MesProductRecordLog recordLog : recordLogs) { + int errorCount = 0; + + /*if (recordLog.getId() ==1834566428726444032l) { + int a = 1; + }*/ + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端下线")) { + startTime = recordLog.getCreateDatetime(); + offlineFlag = true; + continue; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端上线") ) { + endTime = recordLog.getCreateDatetime(); + offlineFlag = false; + if (errorCount > 0) { + reason += String.format(offlineReason, startTime, endTime, errorCount + ""); + errorCount = 0; + } + //result = 0; + continue; + } + if (offlineFlag &&finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (result > 0) { + //endTime = recordLog.getCreateDatetime(); + errorCount ++; + reason += String.format(offlineReason, startTime, startTime, errorCount + ""); + continue; + } + errorCount ++; + result++; + continue ; + } + + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS")) { + if (Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (StringUtils.isEmpty(startTime)) { + startTime = recordLog.getCreateDatetime(); + } + endTime = recordLog.getCreateDatetime(); + // 每次都取反,第一次是打开,那第二次就是关闭了 + bypassFlag = true; + continue; + } else { + if (bypassFlag) { + bypassFlag = false; + errorCount = 0; + continue; + } + } + } + if (bypassFlag && recordLog.getType().equals("record")) { + errorCount ++; + reason += String.format(reasonBypass,startTime, errorCount +""); + continue; + } + + + if (result == 0) { + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + startTime = recordLog.getCreateDatetime(); + result ++; + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + errorCount ++; + if (Objects.equal(recordLog.getQuality(), "192")) { + reason += String.format(reasonOffline,startTime, errorCount +""); + } else { + reason += String.format(reasonQuality,startTime, errorCount +""); + } + startTime = recordLog.getCreateDatetime(); + + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + return reason; + } + + private String handleNotHTAndHasRelease(List recordLogs) { + int result = 0; + // 定义有问题的开始时间 + String startTime = ""; + // 定义有问题的结束时间 + String endTime = ""; + // 错误个数 + // 异常原因 + String reason = ""; + String reasonOffline = "因其他原因:系统,网络,发版等,导致【%s】的完成信号丢失;"; + + String offlineReason = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失;"; + String reasonQuality = "【%s】设备信号质量为0,视为无效;"; + String reasonBypass = "【%s】的完成信号,设备打BYPASS,视为无效;"; + String releaseBypass = "【%s】的完成信号,未发送Release信号,视为无效;"; + + + // BYPASS 默认fasle + boolean bypassFlag = false; + // release 默认false + boolean releaseFlag = false; + + // BYPASS 默认fasle + boolean offlineFlag = false; + //List finishList = Stream.of("Product_finish","PART_OK","Part_Finish","Product_OK").collect(Collectors.toList()); + List finishList = Stream.of("Product_finish","Part_Finish").collect(Collectors.toList()); + String preReason = ""; + + for (MesProductRecordLog recordLog : recordLogs) { + int errorCount = 0; + if (recordLog.getId() ==1288411771211612170l) { + int a = 1; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端下线")) { + startTime = recordLog.getCreateDatetime(); + offlineFlag = true; + continue; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端上线") ) { + endTime = recordLog.getCreateDatetime(); + offlineFlag = false; + if (result > 0) { + reason += String.format(offlineReason, startTime, endTime, 1 + ""); + errorCount = 0; + } + //result = 0; + continue; + } + // 如果是bypass 遇到的所有加工完成指令 都计数并且原因是bypass导致 + if (bypassFlag && finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } + preReason = String.format(reasonBypass,startTime, 1 +""); + //reason += String.format(reasonBypass,startTime, 1 +""); + continue; + } + if (offlineFlag && finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + // 如果经过了1个finish,然后再经过客户端下线,再遇到finish则认为是客户端下线引起 + if (result > 0) { + //endTime = recordLog.getCreateDatetime(); + errorCount ++; + reason += String.format(offlineReason, startTime, startTime, errorCount + ""); + continue; + } + errorCount ++; + result++; + continue ; + } + + if (Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + startTime = recordLog.getCreateDatetime(); + + endTime = recordLog.getCreateDatetime(); + bypassFlag = true; + continue; + } + + // 遇到bypass = false 则重置错误次数 + if (bypassFlag && Objects.equal(recordLog.getCategoryLevelTwo(), "BYPASS") && Objects.equal(recordLog.getEquipVariableValue(), "False")) { + endTime = recordLog.getCreateDatetime(); + errorCount = 0; + bypassFlag = false; + continue; + } + // 如果没有发送release 就出现了加工完成信号,则记录错误原因,且预错误,遇到有加工记录则取消 + /** + * 没有release有完成信号 需要预处理,先得出一个结论:如果没有发送release指令,导致信号丢失 + * 后面如果没有加工记录,则预处理结果变成实际结果 + * 后面有加工记录则预处理结果清空 + */ + if (!releaseFlag) { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } + startTime = recordLog.getCreateDatetime(); + errorCount ++; + preReason = String.format(releaseBypass, startTime, errorCount + ""); + continue; + + } + } + // BYPASS 逻辑结束 result = 1 代表一个成功新型号,遇到一个加工记录就会-1 变成0 + if (result == 0) { + // 没有加工完成指令,或者没有release指令,但是有加工记录,则也需要重置 + if (recordLog.getType().equals("record")) { + releaseFlag = false; + bypassFlag = false; + preReason = ""; + } + + if (Objects.equal(recordLog.getCategoryLevelTwo(), "Work_Allow") && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + releaseFlag = true; + continue; + } + + if (!finishList.contains(recordLog.getCategoryLevelTwo()) || !Objects.equal(recordLog.getEquipVariableValue(), "True")) { + continue; + } + if (!releaseFlag) { + reason += preReason; + startTime = recordLog.getCreateDatetime(); + preReason = String.format(releaseBypass, startTime, 1 + ""); + result ++; + continue; + } if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } + result ++; + startTime = recordLog.getCreateDatetime(); + + } else { + if (finishList.contains(recordLog.getCategoryLevelTwo()) && Objects.equal(recordLog.getEquipVariableValue(), "True")) { + // 上一个加工记录信号还没走完,这边又继续发一个加工记录,且没有release 两个都要判定问题 + if (!releaseFlag) { + startTime = recordLog.getCreateDatetime(); + reason += String.format(releaseBypass, startTime, 1 + ""); + } else { + if (Objects.equal(recordLog.getQuality(), "192")) { + reason += String.format(reasonOffline,startTime, 1 +""); + } else { + reason += String.format(reasonQuality,startTime, 1 +""); + } + } + } + + if (recordLog.getType().equals("record")) { + releaseFlag = false; + bypassFlag = false; + offlineFlag = false; + result --; + preReason = ""; + startTime = ""; + errorCount = 0; + } + } + } + // 如果走到最后,还有预编译的错误,则直接加上 + if (!StringUtils.isEmpty(preReason)) { + reason += preReason; + } + return reason; + } + + private String handleHT(List recordLogs) { + int result = 0; + String startTime = ""; + String endTime = ""; + String reason = ""; + String offlineReason = "【%s】到【%s】,客户端下线,导致【%s】个完成信号丢失"; + String reasonOffline = "因其他原因:系统,网络,发版等,导致【%s】的完成信号丢失;"; + String reasonQuality = "【%s】设备信号质量为0,导致完成信号丢失;"; + boolean offlineFlag = false; + int errorCount = 0; + + for (MesProductRecordLog recordLog : recordLogs) { + if (recordLog.getId() ==1284126441587343426l) { + int i = 1; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端下线")) { + startTime = recordLog.getCreateDatetime(); + offlineFlag = true; + continue; + } + if (Objects.equal(recordLog.getType(), "monitor") && recordLog.getMessage().contains("客户端上线") && offlineFlag) { + endTime = recordLog.getCreateDatetime(); + offlineFlag = false; + if (errorCount > 0) { + reason += String.format(offlineReason, startTime, endTime, errorCount + ""); + errorCount = 0; + } + continue; + } + if (offlineFlag && Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + errorCount ++; + continue ; + } + + if (result == 0) { + if (!Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") ) { + continue; + } + if (recordLog.getEquipVariableValue().compareTo("0") > 0) { + result ++; + } + } else { + if (Objects.equal(recordLog.getCategoryLevelTwo(),"shot_counter") && recordLog.getEquipVariableValue().compareTo("0") > 0) { + startTime = recordLog.getCreateDatetime(); + + endTime = recordLog.getCreateDatetime(); + if (Objects.equal(recordLog.getQuality(), "192")) { + reason += String.format(reasonOffline,startTime, 1 +""); + } else { + reason += String.format(reasonQuality,startTime, 1 +""); + } + } + if (recordLog.getType().equals("record")) { + result --; + } + } + } + if (errorCount > 0 && offlineFlag) { + reason += String.format(offlineReason, startTime, "最后", errorCount + ""); + } + return reason; + } + + private List partition(List list, int pageSize, int pageNum) { + // 将 List 按照 PageSzie 拆分成多个List + List> partition = Lists.partition(list, pageSize); + // 总页数 + int pages = partition.size(); + pageNum = pageNum -1; + pageNum = pageNum <= 0 ? 0 : (pageNum <= (pages - 1) ? pageNum : (pages - 1)); + return partition.get(pageNum); + } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java index 3663716..3f6a064 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesPullingOrderInfoService.java @@ -214,6 +214,7 @@ public class MesPullingOrderInfoService extends BaseMesService byHqlWhere = mesPullingOrderPartInfoRepository.findByHqlWhere(partPackBean); - - resultMap.put("", mesPullingOrder); - resultMap.put("success", true); - - String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; - resultMap.put("message", message); //更新主表状态 源系统为25配料完成 现在-【已发送设备-30】 mesPullingOrder.setPullOrderStatus(MesExtEnumUtil.PULL_ORDER_STATUS.SPS_PULL.getValue()); ConvertBean.serviceModelUpdate(mesPullingOrder, "WS.SPS"); baseRDao.update(mesPullingOrder); + String message = "更新SPS状态成功,已发送SPS信息给设备! id:" + mesPullingOrder.getId() + "Code:" + mesPullingOrder.getPullingOrderNo() + "产线" + assemblyLine + "拉动组" + pullingGroupCode + ""; + resultMap.put("success", true); + resultMap.put("message", message); + return resultMap; } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java index b444aee..a803ccb 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesShippingOrderManagementService.java @@ -1,9 +1,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base; -import cn.estsh.i3plus.ext.mes.api.base.IMesConfigService; -import cn.estsh.i3plus.ext.mes.api.base.IMesPartSapService; -import cn.estsh.i3plus.ext.mes.api.base.IMesPartShippingGroupService; -import cn.estsh.i3plus.ext.mes.api.base.IMesShippingOrderManagementService; +import cn.estsh.i3plus.ext.mes.api.base.*; +import cn.estsh.i3plus.ext.mes.apiservice.utils.MesException; import cn.estsh.i3plus.ext.mes.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; @@ -12,6 +10,7 @@ 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.*; +import cn.estsh.i3plus.pojo.mes.bean.shipping.MesLoadingList; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement; import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail; import cn.estsh.i3plus.pojo.mes.repository.*; @@ -26,10 +25,7 @@ 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.UUID; +import java.util.*; import java.util.stream.Collectors; @Service @@ -65,12 +61,16 @@ public class MesShippingOrderManagementService extends BaseMesService detailDeleteList = detailService.findAll(detailPackBean); + if(CollectionUtils.isEmpty(detailDeleteList)){ + MesException.throwMesBusiException("发运单【%s】明细信息不存在",originBean.getShippingCode()); + } + Map> detailMap = detailDeleteList.stream().collect(Collectors.groupingBy(MesShippingOrderManagementDetail::getPartNo)); - Map> detailMap = detailDeleteList.stream().collect(Collectors.groupingBy(k -> k.getPartNo())); + //查询装车单 + MesLoadingList loadingList = mesLoadingListService.getMesLoadingListByShippingCode(originBean.getOrganizeCode(), originBean.getShippingCode()); List jisShippingList = new ArrayList<>(); MesPartShippingGroup mesPartShippingGroup = mesPartShippingGroupService.getMesPartShippingGroup(bean.getOrganizeCode(), originBean.getShippingGroupCode()); + String erpWarerhouse = mesPartShippingGroup == null || StringUtils.isEmpty(mesPartShippingGroup.getSrcWarerhouse()) ? configService.getCfgValue(bean.getOrganizeCode(), "ERP_WARERHOUSE") : mesPartShippingGroup.getSrcWarerhouse(); + String erpWarehous = configService.getCfgValue(bean.getOrganizeCode(), "ERP_WAREHOUS"); + detailMap.forEach((k, v) -> { MesPartSap part = partService.getMesPartSapByPartNo(v.get(0).getPartNo(), bean.getOrganizeCode()); @@ -307,10 +315,10 @@ public class MesShippingOrderManagementService extends BaseMesService impl editionNumber = editionNumber == null ? 1 : editionNumber; + // 记录工单剩余未完成数量 Map workOrderUnCompleteMap = new HashMap<>(); + // 记录当前裁片工单 每个工单的计划数量 + Map workOrderQtyMap = new HashMap<>(); List workOrderCutDetailtList = new ArrayList<>(); List workOrderCuttList = new ArrayList<>(); List workOrderCutMaterialList = new ArrayList<>(); // 校验工单未完成数量是否满足计划数量 - checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap); + checkQtyIsEnough(editionNumber, workOrderListMapByPartNo, cutScheme, cutSchemeFgList, workOrderUnCompleteMap, workOrderQtyMap); // 预计生成裁片工单数量 for (Integer count = 0; count < editionNumber; count++) { @@ -135,17 +141,18 @@ public class MesWorkOrderCutService extends BaseMesService impl for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); - MesWorkOrder workOrder = workOrders.get(0); - MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); - ConvertBean.serviceModelInitialize(detail, userName); - detail.setOrganizeCode(organizeCode); - detail.setCutWorkOrderNo(cutWorkOrderNo); - detail.setPartNo(workOrder.getPartNo()); - detail.setPartName(workOrder.getPartName()); - detail.setWorkOrderNo(workOrder.getWorkOrderNo()); - detail.setRemark(cutSchemeFg.getRemark()); - detail.setQty(cutSchemeFg.getQty()); - workOrderCutDetailtList.add(detail); + for (MesWorkOrder workOrder : workOrders) { + MesWorkOrderCutDetail detail = new MesWorkOrderCutDetail(); + ConvertBean.serviceModelInitialize(detail, userName); + detail.setOrganizeCode(organizeCode); + detail.setCutWorkOrderNo(cutWorkOrderNo); + detail.setPartNo(workOrder.getPartNo()); + detail.setPartName(workOrder.getPartName()); + detail.setWorkOrderNo(workOrder.getWorkOrderNo()); + detail.setRemark(cutSchemeFg.getRemark()); + detail.setQty(workOrderQtyMap.get(workOrder.getWorkOrderNo())); + workOrderCutDetailtList.add(detail); + } } } @@ -165,7 +172,18 @@ public class MesWorkOrderCutService extends BaseMesService impl } - private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, MesCutScheme cutScheme, List cutSchemeFgList, Map workOrderUnCompleteMap) { + @Override + public ListPager queryWorkOrderCutDetailByPager(MesWorkOrderCutDetail workOrderCutDetail, Pager pager) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrderCutDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(workOrderCutDetail.getCutWorkOrderNo(), MesExtConstWords.CUT_WORK_ORDER_NO, packBean); + pager = PagerHelper.getPager(pager, workOrderCutDetailRepository.findByHqlWhereCount(packBean)); + List list = workOrderCutDetailRepository.findByHqlWherePage(packBean, pager); + return new ListPager<>(list, pager); + } + + private static void checkQtyIsEnough(Integer editionNumber, Map> workOrderListMapByPartNo, + MesCutScheme cutScheme, List cutSchemeFgList, + Map workOrderUnCompleteMap, Map workOrderQtyMap) { for (MesCutSchemeFg cutSchemeFg : cutSchemeFgList) { List workOrders = workOrderListMapByPartNo.get(cutSchemeFg.getPartNo()); @@ -179,16 +197,19 @@ public class MesWorkOrderCutService extends BaseMesService impl // 成品配置计划数量 * 版数 = 裁片工单该成品总消耗数量 Double totalQty = MathOperation.mul(cutSchemeFg.getQty(), editionNumber); - + Double srcTotalQty = totalQty.doubleValue(); Double unCompleteQty = 0.0; List needWorkOrderNoList = new ArrayList<>(); for (MesWorkOrder order : workOrders) { if (!order.getWorkCenterCode().equals(cutScheme.getWorkCenterCode())) - MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", order.getWorkCenterCode(), cutScheme.getWorkCenterCode()); + MesException.throwMesBusiException("工单【%s】关联产线【%】与裁片方案【%】关联产线不一致!", + order.getWorkCenterCode(), cutScheme.getWorkCenterCode()); - if (unCompleteQty.compareTo(totalQty) > 0) - MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), workOrders.subList(needWorkOrderNoList.size(), workOrders.size())); + if (unCompleteQty.compareTo(srcTotalQty) >= 0) + MesException.throwMesBusiException("零件号【%s】工单【%s】未完成数量汇总【%s】已满足产成总数【%s】!请取消勾选工单【%s】", + order.getWorkCenterCode(), needWorkOrderNoList, cutScheme.getWorkCenterCode(), + workOrders.subList(needWorkOrderNoList.size(), workOrders.size())); unCompleteQty = MathOperation.add(unCompleteQty, order.getUnCompleteQty()); @@ -196,8 +217,12 @@ public class MesWorkOrderCutService extends BaseMesService impl if (order.getUnCompleteQty().compareTo(totalQty) >= 0) { workOrderUnCompleteMap.put(order.getWorkOrderNo(), MathOperation.sub(order.getUnCompleteQty(), totalQty)); + workOrderQtyMap.put(order.getWorkOrderNo(), totalQty); + totalQty = 0.0; } else { workOrderUnCompleteMap.put(order.getWorkOrderNo(), 0.0); + workOrderQtyMap.put(order.getWorkOrderNo(), order.getUnCompleteQty()); + totalQty = MathOperation.sub(totalQty, order.getUnCompleteQty()); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java index 8fe8408..b6688a3 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/base/MesWorkOrderService.java @@ -245,7 +245,7 @@ public class MesWorkOrderService extends BaseMesService implements } updateMesWorkOrder(result,MesExtEnumUtil.WORK_ORDER_LOG_TYPE.UPDATE,0); - if (isSavePrintQueue) insertPrintQueue(result, null); + if (isSavePrintQueue) insertPrintQueue(result); return result; } @@ -456,32 +456,22 @@ public class MesWorkOrderService extends BaseMesService implements } // 创建工单打印队列 - insertPrintQueue(item, mesPartProdGroup); + insertPrintQueue(item); } else { item.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.CREATE.getValue()); } } - private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder, MesPartProdGroup mesPartProdGroup) { + private MesPrintQueue insertPrintQueue(MesWorkOrder workOrder) { if (workOrder.getWorkOrderType() != MesExtEnumUtil.ORDER_TYPE.SORT.getValue()) return null; if (workOrder.getWorkOrderStatus() != MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()) return null; - if (mesPartProdGroup == null) { - DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); - DdlPreparedPack.getStringEqualPack(workOrder.getPartProdGroupCode(), "partProdGroupCode", ddlPackBean); - mesPartProdGroup = mesPartProdGroupRDao.getByProperty(ddlPackBean); - if(Objects.isNull(mesPartProdGroup)){ - MesException.throwMesBusiException("生产线组【%s】信息不存在",workOrder.getPartProdGroupCode()); - } - } - MesPrintQueue printQueue = new MesPrintQueue(); BeanUtils.copyProperties(workOrder, printQueue, MesExtConstWords.ID); printQueue.setPrintQueueType(MesExtEnumUtil.PRINT_QUEUE_TYPE.WORK_ORDER_ASSEMBLY.getValue()); - printQueue.setPartProdGroupCode(mesPartProdGroup.getPartProdGroupCode()); printQueue.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.UNPRINT.getValue()); return printQueueRepository.save(printQueue); } @@ -620,7 +610,7 @@ public class MesWorkOrderService extends BaseMesService implements mesWorkOrderLogList.add(workOrderLog); // 如果工单为发布状态则新增打印队列 - insertPrintQueue(copyMesWorkOrder, null); + insertPrintQueue(copyMesWorkOrder); continue; } else if (item.getWorkOrderType() == MesExtEnumUtil.ORDER_TYPE.BTO.getValue()) { @@ -1193,7 +1183,7 @@ public class MesWorkOrderService extends BaseMesService implements return; } - insertPrintQueue(workOrder, null); + insertPrintQueue(workOrder); } @@ -1251,6 +1241,10 @@ public class MesWorkOrderService extends BaseMesService implements MesPartProdGroup mesPartProdGroup = partProdGroupMap.get(mesWorkOrder.getPartProdGroupCode()); + if (mesPartProdGroup == null) { + MesException.throwMesBusiException("工单【%s】关联零件生产组【%s】不存在", mesWorkOrder.getWorkOrderNo(), mesWorkOrder.getPartProdGroupCode()); + } + String printTemplate = mesPartProdGroup.getPrintTemplate(); if (StringUtils.isEmpty(printTemplate)) { @@ -1541,6 +1535,7 @@ public class MesWorkOrderService extends BaseMesService implements newMesProductOffLine.setSapWorkCenter(mesWorkOrder.getErpWorkCenter()); newMesProductOffLine.setOrganizeCode(mesWorkOrder.getOrganizeCode()); newMesProductOffLine.setDescription(nowTime); + newMesProductOffLine.setBomCode(mesBom.getBomCode()); ConvertBean.serviceModelInitialize(newMesProductOffLine, mesWorkOrder.getCreateUser()); return newMesProductOffLine; @@ -1572,6 +1567,15 @@ public class MesWorkOrderService extends BaseMesService implements return mesWorkOrderRDao.findByHqlWhere(packBean); } + @Override + public MesWorkOrder getWorkOrder(String organizeCode, String workOrderNo) { +// statusList.add(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()); + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + + DdlPreparedPack.getStringEqualPack(workOrderNo, "workOrderNo", packBean); + return mesWorkOrderRDao.getByProperty(packBean); + } + private MesMove createMove(MesPartSap mesPart, String source, String target, String org, String workCenterCode, double qty, String sn, Integer moveType) { MesMove move = new MesMove(); if (!Objects.isNull(mesPart)) { @@ -1870,7 +1874,7 @@ public class MesWorkOrderService extends BaseMesService implements } MesBom next = mesBoms.iterator().next(); //如果存在多个bomCode取最新的一个 - return mesBoms.stream().collect(Collectors.groupingBy(MesBom::getBomCode)).get(next.getBomCode()); + return mesBoms.stream().collect(Collectors.groupingBy(t -> t.getBomCode() + t.getEffStartTime())).get(next.getBomCode() + next.getEffStartTime()); } 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 a67a8d5..810defc 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 @@ -330,7 +330,7 @@ public class MesSpotCheckOrderService extends BaseMesService .setErrorDetail("【%s】点检单状态为【%s】不允许修改,请检查数据", bean.getSpotCheckId(), MesExtEnumUtil.SPOT_CHECK_ORDER_STATUS.valueOfDescription(bean.getStatus())) .build(); } - + bean.setSystemSyncStatus(CommonEnumUtil.FALSE); bean.setIsDeleted(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); ConvertBean.serviceModelUpdate(bean, AuthUtil.getSessionUser().getUserName()); //获取点检方案明细 diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java index e5195d6..9349981 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/print/strategy/AssemblyVisualListPrintStrategy.java @@ -78,9 +78,9 @@ public class AssemblyVisualListPrintStrategy implements IPrintTemplateStrategySe // 为空时显示内容 String isNullViewContent = StringUtils.isEmpty(partProdGroup.getIsNullViewContent()) ? "" : partProdGroup.getIsNullViewContent(); for (Integer index = 0; index < totalCount; index++) { - String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(0).getDisplayValue(); + String displayValue = workOrderAssemblyList.size() -1 < index ? isNullViewContent : workOrderAssemblyList.get(index).getDisplayValue(); - resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? "" : displayValue); + resultMap.put(MesExtConstWords.ASSEMBLY_PARAM + (index+1), StringUtils.isEmpty(displayValue) ? StringUtils.isEmpty(isNullViewContent) ? "" : null : displayValue); } printDataMapList.add(resultMap); 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 21c9e0a..50f2722 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 @@ -17,6 +17,7 @@ import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import java.util.StringJoiner; @Service @@ -30,10 +31,19 @@ public class MesEquipmentLogDetailService extends BaseMesService 1) { + DdlPreparedPack.getInPackList(Arrays.asList(bean.getEquipVariableName().split(",")), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); + } else { + DdlPreparedPack.getStringLikerPack(bean.getEquipVariableName(), MesExtConstWords.EQUIP_VARIABLE_NAME, packBean); + } DdlPreparedPack.timeBuilder(bean.getCreateDateTimeStart(), bean.getCreateDateTimeEnd(), MesExtConstWords.CREATE_DATE_TIME, packBean, true); + if (!StringUtils.isEmpty(bean.getEquipVariableIds())) { +// Long[] ids = Arrays.stream(bean.getEquipVariableIds().split(",")).map(Long::parseLong).toArray(Long[]::new); + List stringList = Arrays.asList(bean.getEquipVariableIds().split(",")); + packBean.setWhereAppend(packBean.getWhereAppend() + " and equipVariableId in (" + String.join(",", stringList) + ") "); + } + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, 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 cacafaf..b323582 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 @@ -276,6 +276,7 @@ public class MesYfReportServiceImpl implements IMesYfReportService { private DdlPackBean getMesProduceSnPackBean(MesProduceSn mesProduceSn) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesProduceSn.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(mesProduceSn.getProductSn(), "productSn", packBean); + DdlPreparedPack.getStringLikerPack(mesProduceSn.getCustSn(), "custSn", packBean); DdlPreparedPack.getStringLikerPack(mesProduceSn.getWorkOrderNo(), "workOrderNo", packBean); DdlPreparedPack.getStringBiggerPack(mesProduceSn.getCreateDateTimeStart(), "createDatetime", packBean); DdlPreparedPack.getStringSmallerPack(mesProduceSn.getCreateDateTimeEnd(), "createDatetime", packBean); diff --git a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java index 941c744..9cda9f6 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java +++ b/modules/i3plus-ext-mes-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/apiservice/serviceimpl/webservice/WebServiceServerSPS.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.webservice; import cn.estsh.i3plus.ext.mes.apiservice.model.SpsInfo; import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.MesPullingOrderInfoService; +import cn.estsh.i3plus.pojo.base.util.StringUtil; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,10 +10,11 @@ import org.slf4j.LoggerFactory; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; +import java.util.HashMap; import java.util.Map; /** - * @Description : WebServiceServerSPS + * @Description :soapUI调用 http://10.193.30.22:8300/i3plus/mes-service-spsEqu?wsdl * @Author :gsz * @Date 2024/8/30 9:18 * @Modify @@ -28,7 +30,15 @@ public class WebServiceServerSPS { LOGGER.info("syncSPSForEquipment主数据:{}", spsInfo); MesPullingOrderInfoService bean = (MesPullingOrderInfoService) SpringContextsUtil.getBean("mesPullingOrderInfoService"); - return bean.doSPSForEquipment(spsInfo.getAssemblyLine(),spsInfo.getPullingGroupCode(),spsInfo.getOrganizeCode()); + if (StringUtil.isEmpty(spsInfo.getOrganizeCode())) { + Map resultMap = new HashMap(); + resultMap.put("success", false); + String message = "SPS拉动数据已扫描数据为空,请检查拉动单数据"; + resultMap.put("message", message); + return resultMap; + } + return bean.doSPSForEquipment("","",spsInfo.getOrganizeCode()); +// return bean.doSPSForEquipment(spsInfo.getAssemblyLine(),spsInfo.getPullingGroupCode(),spsInfo.getOrganizeCode()); } } diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties index 6054a3f..6bfbb74 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-71.properties @@ -240,6 +240,17 @@ spring.shardingsphere.datasource.slave.max-lifetime=7000000 spring.shardingsphere.datasource.slave.connection-test-query=select 1 spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + +impp.pisces1.datasource.isopen = false +#spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{[152,156,300]} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{['ck01_152','ck01_156','ck01_300']} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.algorithm-expression=mes_equipment_log_detail_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log,mes_equipment_log_detail + + #impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver #impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true #impp.write.datasource.username=root diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties new file mode 100644 index 0000000..a3ff47e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-88.properties @@ -0,0 +1,297 @@ +#\u9879\u76EE\u7AEF\u53E3 +server.port=8300 +#\u672C\u673Aip +impp.server.ip=localhost +#\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 +impp.console.ip=http://10.195.88.71:8010 +################ \u529F\u80FD\u914D\u7F6E1 ################ +#mes webservice\u5F00\u5173 +mes.webservice.open=true +#\u5DE5\u4F5C\u533AID,\u4E0D\u540C\u670D\u52A1\u5668\u4E0D\u540CID 0 - 31 +impp.snowflake.work.id=19 +#\u6570\u636E\u4ED3\u533AID 0 - 31 \u6709\u9ED8\u8BA4\u56FA\u5B9AID +impp.snowflake.database.id=11 +#\u82E5\u65E0\u6CD5\u8FDE\u63A5\u6CE8\u518C\u4E2D\u5FC3\uFF0C\u662F\u5426\u9700\u8981\u4E00\u76F4\u68C0\u6D4B\u52A0\u5165 +impp.cluster.fetch=false +#\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3 +impp.cluster.regist.center=http://10.195.88.71:8000/eureka/ +#\u65E5\u5FD7\u9ED8\u8BA4\u4F7F\u7528log4j2 +logging.config=classpath:log4j2-spring.xml +########\u5E73\u53F0\u76F8\u5173\u53C2\u6570########## +#\u662F\u5426\u5F00\u542Fredis\u7F13\u5B58 +impp.config.redis=true +#\u662F\u5426\u5F00\u542Fmongo +impp.config.mongo=true +#\u662F\u5426\u5F00\u542FrabbitMQ +impp.config.rabbitmq=false +#\u662F\u5426\u5F00\u542Fswagger +impp.config.swagger=true +#\u662F\u5426\u5F00\u542Fwebsocket +impp.config.websocket=true +#\u662F\u5426\u5F00\u542F\u6587\u4EF6\u670D\u52A1 +impp.config.fileserver=fastdfs +#\u662F\u5426\u5BF9\u53D1\u5E03\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.controller=false +#\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 +impp.log.detail.service=false +################ \u961F\u5217\u5904\u7406 ################ +#\u7AD9\u5185\u4FE1 +impp.mq.queue.letter=true +#\u90AE\u4EF6 +impp.mq.queue.mail=true +#\u5B9A\u65F6\u4EFB\u52A1 +impp.mq.queue.schedule=true +#SWEB\u901A\u77E5\u5904\u7406\u961F\u5217 +impp.mq.queue.sweb.notice=true +################################ \u5176\u4ED6\u529F\u80FD\u8BBE\u7F6E ################################ +#elasticsearch ip \u591A\u4E2A\u7528\u9017\u53F7\u9694\u5F00 +elasticsearch.ip=10.195.88.71:9200 +################ FastDfs \u914D\u7F6E ################ +#tracker\u670D\u52A1\u5668ip +fastdfs.tracker_servers=10.195.88.71:22122 +# tracker\u7684http\u7AEF\u53E3 +fastdfs.http_tracker_http_port=22122 +# \u4F7F\u7528\u81EA\u5B9A\u4E49\u5DE5\u5177\u83B7\u53D6\u6587\u4EF6\u5C55\u793A\u5730\u5740 +fastdfs.http.ui.host=http://dfs.estsh.com +#\u5BC6\u7801 +#fastdfs.http.secret_key= +#\u8FDE\u63A5\u8D85\u65F6 +fastdfs.connect_timeout_in_seconds=500000 +#\u4F20\u8F93\u8D85\u65F6 +fastdfs.network_timeout_in_seconds=60000000 +fastdfs.charset=UTF-8 +# token \u9632\u76D7\u94FE\u529F\u80FD +fastdfs.http_anti_steal_token=no +#redisIP +redis.hostName=10.195.88.71 +#\u7AEF\u53E3\u53F7 +redis.port=6379 +#\u5982\u679C\u6709\u5BC6\u7801 +redis.password=Admin123! +##\u5176\u4ED6redis\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################## rabbitMQ\u914D\u7F6E #################### +spring.rabbitmq.vhost=/ +spring.rabbitmq.host=10.195.88.71 +spring.rabbitmq.port=5672 +spring.rabbitmq.username=estsh +spring.rabbitmq.password=estsh123 +##\u5176\u4ED6rabbitMq\u914D\u7F6E\u9700\u8981\u8C03\u6574\u7684\u52A0\u5728\u6B64\u5904 +################ \u529F\u80FD\u914D\u7F6E2 ################ +#\u662F\u5426\u5F00\u542Fredis +mes.redis.open=true +#\u662F\u5426\u5141\u8BB8\u524D\u7AEF\u8DE8\u57DF\u63D0\u4EA4 +impp.web.cross=true +################ \u6388\u6743\u8FC7\u6EE4\u914D\u7F6E ################ +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.user.filteruri=/mes/operate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.admin.filteruri=/mes/adoperate/* +#\u7528\u6237\u6388\u6743\u8FC7\u6EE4\u8DEF\u5F84 +filter.shiro.saadmin.filteruri=/mes/saoperate/* +################ \u4E91\u914D\u7F6E \uFF08\u4EE5projectName\u4F5C\u4E3A\u5E94\u7528\u540D\uFF09 ################ +#\u662F\u5426\u5F00\u542F\u5FAE\u670D +eureka.client.enabled=false +#\uFF08\u53C2\u6570\u914D\u7F6E\uFF09\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740 -\u300B i3plus-ics\uFF0C\u591A\u4E2A\u7528\u9017\u53F7\u5206\u9694 +eureka.client.service-url.defaultZone=${impp.cluster.regist.center} +#\u533A\u57DF\uFF08\u6E90\u7801\u4E2D\u5305\u542BdefaultZone\uFF0C\u6240\u4EE5\u9ED8\u8BA4\u4F7F\u7528defaultZone\uFF09 +#eureka.client.region=estsh +#eureka.client.service-url.estsh:http://192.168.1.20:8000/eureka/,http://192.168.1.20:8001/eureka/ +################ \u672C\u673A\u5FAE\u670D\u914D\u7F6E ################ +#\u672C\u670D\u52A1\u4E3B\u673Aip\uFF08\u82E5\u591A\u4E2A\u7F51\u5361\uFF0C\u5219\u9700\u8981\u8BBE\u7F6E\u672C\u670D\u52A1ip\uFF09 +eureka.instance.ip-address=${impp.server.ip} +#\u672C\u670D\u52A1\u5B9E\u4F8BID +eureka.instance.instance-id=${impp.server.ip}:${server.port} +#\u672C\u670D\u52A1\u4E3B\u673A\u540D +eureka.instance.hostname=${impp.server.ip} +#\u672C\u670D\u52A1\u72B6\u6001\u9875\u9762 +eureka.instance.status-page-url=http://${impp.server.ip}:${server.port}/swagger-ui.html +#\u5C06\u81EA\u5DF1\u7684IP\u6CE8\u518C\u5230Eureka Server\u3002\u82E5\u4E0D\u914D\u7F6E\u6216\u8BBE\u7F6E\u4E3Afalse\uFF0C\u8868\u793A\u6CE8\u518C\u5FAE\u670D\u52A1\u6240\u5728\u64CD\u4F5C\u7CFB\u7EDF\u7684hostname\u5230Eureka Server +eureka.instance.prefer-ip-address=true +#\u662F\u5426\u8FDB\u884C\u5065\u5EB7\u68C0\u67E5 +eureka.client.healthcheck.enabled=true +################ \u68C0\u6D4B\u673A\u5236 ################ +#\u5FC3\u8DF3\u95F4\u9694\u5468\u671F\uFF0C\u5B95\u673A\u9650\u5236\uFF08\u79D2\uFF09\uFF0C30\u79D2\u6CA1\u53CD\u5E94\u89C6\u4E3A\u5B95\u673A +eureka.instance.lease-expiration-duration-in-seconds=30 +#\u5FC3\u8DF3\u5468\u671F +eureka.instance.lease-renewal-interval-in-seconds=20 +#client\u8FDE\u63A5Eureka\u670D\u52A1\u7AEF\u540E\u7684\u7A7A\u95F2\u7B49\u5F85\u65F6\u95F4\uFF0C\u9ED8\u8BA4\u4E3A30 \u79D2 +eureka.client.eureka-connection-idle-timeout-seconds=1 +#\u6700\u521D\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\u6240\u9700\u7684\u65F6\u95F4\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A40\u79D2 +eureka.client.initial-instance-info-replication-interval-seconds=1 +#\u95F4\u9694\u591A\u957F\u65F6\u95F4\u518D\u6B21\u590D\u5236\u5B9E\u4F8B\u4FE1\u606F\u5230eureka\u670D\u52A1\u5668\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.instance-info-replication-interval-seconds=1 +#\u4ECEeureka\u670D\u52A1\u5668\u6CE8\u518C\u8868\u4E2D\u83B7\u53D6\u6CE8\u518C\u4FE1\u606F\u7684\u65F6\u95F4\u95F4\u9694\uFF08s\uFF09\uFF0C\u9ED8\u8BA4\u4E3A30\u79D2 +eureka.client.registry-fetch-interval-seconds=1 +################ \u6253\u5F00feign\u7684\u7194\u65AD ################ +feign.hystrix.enabled=true +#\u8BFB\u53D6\u6570\u636E\u65F6\u957F +ribbon.ReadTimeout=100000 +#\u8FDE\u63A5\u65F6\u957F +ribbon.ConnectTimeout=100000 +#\u91CD\u8BD5 +ribbon.maxAutoRetries=2 +#\u54CD\u5E94\u8D85\u8FC7\u65F6\u957F\uFF0C\u8FDB\u884C\u7194\u65AD\uFF08\u7194\u65AD\u8D85\u65F6\u9700\u8981\u5927\u4E8E\u8BFB\u53D6\u65F6\u957F\u53CA\u8FDE\u63A5\u65F6\u957F\uFF09 +hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=150000 +#\u96C6\u7FA4\u540D +eureka.instance.metadata-map.cluster=impp_cluster +################ \u94FE\u8DEF\u8FFD\u8E2A ################ +#\u4F7F\u7528web\u65B9\u5F0F\u4F20\u8F93\u4FE1\u606F +spring.zipkin.sender.type=web +#\u94FE\u8DEF\u8FFD\u8E2A\u670D\u52A1\u7684\u5730\u5740 +spring.zipkin.base-url=${impp.console.ip} +#\u8FFD\u8E2A\u6DF1\u5EA6\uFF0C\u767E\u5206\u6BD4\uFF0C1\u662F\u5168\u90E8 +spring.sleuth.sampler.probability=1.0 +################ \u65E5\u5FD7\u636E\u6E90 ################ +spring.data.mongodb.database=mongoDBSource +spring.data.mongodb.uri=10.195.88.71:27017 +spring.data.mongodb.username=sa +spring.data.mongodb.password=i3plus +spring.data.mongodb.port=27017 +################ \u4E3B\u6570\u636E\u6E90 ################ + +##############\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316############## +impp.schedule.open=true +impp.schedule.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.schedule.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_schedule?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +impp.schedule.datasource.username=root +impp.schedule.datasource.password=@E#e7@saWE!293**((367 +impp.schedule.datasource.max-connections=20 +#\u5B9A\u65F6\u4EFB\u52A1\u5728\u670D\u52A1\u542F\u52A8\u540E\u591A\u5C11\u79D2\u6267\u884C +impp.schedule.start.after-second=20 +#\u662F\u5426\u96C6\u7FA4\u90E8\u7F72 +impp.schedule.datasource.is-clustered=true +#\u6267\u884C\u68C0\u6D4B\uFF08\u6BEB\u79D2\uFF09\uFF0C\u82E5\u5B95\u673A\u7531\u5176\u4ED6\u5B9A\u65F6\u5668\u6267\u884C +impp.schedule.datasource.cluster-checkin-interval=30000 +#\u7EBF\u7A0B\u6570 +impp.schedule.thread-count=10 +#\u7EBF\u7A0B\u4F18\u5148\u7EA7\uFF081-10\uFF09\u9ED8\u8BA4\u4E3A5 +impp.schedule.thread-priority=5 +################ \u6570\u636E\u6C60\u8BBE\u7F6E ################ +## \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF0C\u9ED8\u8BA4\u662F10 +spring.datasource.hikari.maximum-pool-size=100 +## \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570\u91CF +spring.datasource.hikari.minimum-idle=10 +## \u7A7A\u95F2\u8FDE\u63A5\u5B58\u6D3B\u6700\u5927\u65F6\u95F4\uFF0C\u9ED8\u8BA4600000\uFF0810\u5206\u949F\uFF09 +spring.datasource.hikari.idle-timeout=600000 +## \u6B64\u5C5E\u6027\u63A7\u5236\u6C60\u4E2D\u8FDE\u63A5\u7684\u6700\u957F\u751F\u547D\u5468\u671F\uFF0C\u503C0\u8868\u793A\u65E0\u9650\u751F\u547D\u5468\u671F\uFF0C\u9ED8\u8BA41800000\u537330\u5206\u949F +spring.datasource.hikari.max-lifetime=1800000 +## \u6570\u636E\u5E93\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4,\u9ED8\u8BA430\u79D2\uFF0C\u537330000 +spring.datasource.hikari.connection-timeout=30000 +################ JPA\u8BBE\u7F6E\u8BBE\u7F6E ################ +# mysql +spring.jpa.database=MYSQL +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect +##Sql-server## +#spring.jpa.database=sql_server +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServerDialect +##oracle## +#spring.jpa.database=oracle +#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect +# mysql +spring.datasource.validationQuery=SELECT 1 +##Sql-server## +# spring.datasource.validationQuery=SELECT 1 +##oracle## +# spring.datasource.validationQuery=SELECT 1 FROM DUAL +#ImprovedNamingStrategy / physical_naming_strategy java\u5C5E\u6027\u6620\u5C04\u5230\u6570\u636E\u5E93\u5B57\u6BB5\u65F6\u547D\u540D\u89C4\u5219 +# spring.jpa.properties.hibernate.physical_naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy/org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl +#\u8868\u5173\u7CFBcreate,create-drop,update,validate +spring.jpa.properties.hibernate.hbm2ddl.auto=none +#\u662F\u5426\u663E\u793Asql +spring.jpa.show-sql=true +################ \u6388\u6743\u914D\u7F6E ################ +slm.api.password=4C9479EBEFA6FA6E232EF25EFA49C4D2 +slm.app.id=20190513 +###################\uFFFD\uFFFD\u013F\uFFFD\uFFFD\uFFFD\u077F\uFFFD\u02B5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u00B7\uFFFD\uFFFD################################################## +project.entity.path=cn.estsh.i3plus.pojo + + +############################????####################################### +###spring.shardingsphere.datasource.names=master,slave +spring.shardingsphere.datasource.names=master,slave +##?? +spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.master.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.master.JdbcUrl=jdbc:mysql://10.193.8.88:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.master.username=root +spring.shardingsphere.datasource.master.password=@E#e7@saWE!293**((367 + +spring.shardingsphere.datasource.master.maximum-pool-size=200 +spring.shardingsphere.datasource.master.minimum-idle=200 +spring.shardingsphere.datasource.master.idle-timeout=500000 +spring.shardingsphere.datasource.master.connection-timeout=600000 +spring.shardingsphere.datasource.master.max-lifetime=7000000 +spring.shardingsphere.datasource.master.connection-test-query=select 1 +spring.shardingsphere.datasource.master.keep-alive-time=3500000 + + +##?? +spring.shardingsphere.datasource.slave.type=com.zaxxer.hikari.HikariDataSource +spring.shardingsphere.datasource.slave.driver-class-name= com.mysql.jdbc.Driver +spring.shardingsphere.datasource.slave.JdbcUrl=jdbc:mysql://10.193.8.88:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +spring.shardingsphere.datasource.slave.username=root +spring.shardingsphere.datasource.slave.password=@E#e7@saWE!293**((367 + +spring.shardingsphere.datasource.slave.maximum-pool-size=200 +spring.shardingsphere.datasource.slave.minimum-idle=200 +spring.shardingsphere.datasource.slave.idle-timeout=500000 +spring.shardingsphere.datasource.slave.connection-timeout=600000 +spring.shardingsphere.datasource.slave.max-lifetime=7000000 +spring.shardingsphere.datasource.slave.connection-test-query=select 1 +spring.shardingsphere.datasource.slave.keep-alive-time=3500000 + + +impp.pisces1.datasource.isopen = false +#spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{[152,156,300]} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.actual-data-nodes=ds0.mes_equipment_log_detail_$->{['ck01_152','ck01_156','ck01_300']} +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.sharding-column=equip_id +spring.shardingsphere.sharding.tables.mes_equipment_log_detail.table-strategy.inline.algorithm-expression=mes_equipment_log_detail_$->{equip_id} + +#\u7ED1\u5B9A\u8868 +spring.shardingsphere.sharding.binding-tables[0]=mes_equipment_log,mes_equipment_log_detail + + +#impp.write.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.write.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.write.datasource.username=root +#impp.write.datasource.password=estsh123 +#impp.read.datasource.type=com.zaxxer.hikari.HikariDataSource +#impp.read.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.read.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3336/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.read.datasource.username=root +#impp.read.datasource.password=estsh123 + + +##?????? +spring.shardingsphere.sharding.master-slave-rules.ds0.master-data-source-name=master +spring.shardingsphere.sharding.master-slave-rules.ds0.slave-data-source-names=slave +#??datasource ???????????????? +#??? gg +#spring.shardingsphere.sharding.default-data-source-name=ds0 +#??????????sql?? +spring.shardingsphere.props.sql.show = false + +spring.shardingsphere.props.max.connections.size.per.query = 10 + +impp.schedule.scheduleType=xxljob +xxl.job.admin.addresses=http://10.195.88.71:10010/xxl-job-admin +### xxl-job, access token +xxl.job.accessToken= +### xxl-job executor appname +#xxl.job.executor.appname=${project.name} +xxl.job.executor.appname=i3mes-castle +### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null +xxl.job.executor.address= +### xxl-job executor server-info +xxl.job.executor.ip=172.24.96.1 +#xxl.job.executor.ip= +#xxl.job.executor.port=9999 +xxl.job.executor.port=8888 +### xxl-job executor log-path +xxl.job.executor.logpath= +### xxl-job executor log-retention-days +xxl.job.executor.logretentiondays=10 +xxl.job.basePackage=cn.estsh.i3plus.ext.mes.apiservice.schedulejob + + +impp.app.ext.base-packages=cn.estsh.i3plus.ext.mes.apiservice \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties index 6f19115..0d948a1 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-71.properties @@ -21,6 +21,8 @@ impp.yfas.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_wms_sap_if? impp.yfas.datasource.username=root impp.yfas.datasource.password=estsh123 + + #\u6570\u636E\u6E90\u7684\u522B\u540D #impp.wms.datasource.isopen=true #impp.wms.datasource.alias=wmsDataSource @@ -45,6 +47,14 @@ impp.pisces.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMetho impp.pisces.datasource.username=sa impp.pisces.datasource.password=sahasnopassword +#Pisces数据源 +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=piscesDataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword + #Pisces中间表数据源 impp.pisces1.datasource.isopen=true impp.pisces1.datasource.alias=pisces1DataSource diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties new file mode 100644 index 0000000..9e9f96e --- /dev/null +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application-cus-88.properties @@ -0,0 +1,64 @@ +#\u5B89\u9053\u62D3\u6570\u636E\u6E90 +impp.yfas.datasource.isopen=true +#WMS\u6570\u636E\u6E90 +impp.mes.datasource.isopen=true +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.mes.datasource.alias=mesDataSource +impp.mes.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.mes.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3306/impp_i3_mes?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.mes.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.mes.datasource.username=root +#impp.mes.datasource.password=Test123! +impp.mes.datasource.password=estsh123 +#Admin123! + + +#\u6570\u636E\u6E90\u7684\u522B\u540D +impp.yfas.datasource.alias=yfasDataSource +impp.yfas.datasource.driver-class-name=com.mysql.jdbc.Driver +impp.yfas.datasource.jdbc-url=jdbc:mysql://10.195.88.71:3316/impp_i3_wms_sap_if?autoReconnect=true&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true +#impp.yfas.datasource.jdbc-url=jdbc:sqlserver://139.224.200.147:20037;DatabaseName=impp_i3_mes; +impp.yfas.datasource.username=root +impp.yfas.datasource.password=estsh123 + + + +#\u6570\u636E\u6E90\u7684\u522B\u540D +#impp.wms.datasource.isopen=true +#impp.wms.datasource.alias=wmsDataSource +#impp.wms.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.wms.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_wms?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.wms.datasource.username=root +#impp.wms.datasource.password=estsh123 +# +##SWEB?????????? +#impp.sweb.datasource.isopen=true +#impp.sweb.datasource.alias=swebDataSource +#impp.sweb.datasource.driver-class-name=com.mysql.jdbc.Driver +#impp.sweb.datasource.jdbc-url=jdbc:mysql://dbmaster:3306/impp_i3_wms?autoReconnect=true&useSSL=false&characterEncoding=utf-8 +#impp.sweb.datasource.username=root +#impp.sweb.datasource.password=estsh123 + +#PiscesԴ +impp.pisces.datasource.isopen=true +impp.pisces.datasource.alias=piscesDataSource +impp.pisces.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces.datasource.username=sa +impp.pisces.datasource.password=sahasnopassword + +#PiscesԴ +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=piscesDataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.239.113:1433;SelectMethod=cursor;DatabaseName=PiscesTest;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword + +#PiscesмԴ +impp.pisces1.datasource.isopen=true +impp.pisces1.datasource.alias=pisces1DataSource +impp.pisces1.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver +impp.pisces1.datasource.jdbc-url=jdbc:sqlserver://172.28.16.73:1433;SelectMethod=cursor;DatabaseName=YFMES_DATACENTER;applicationIntent=schemaOnly;selectedSchema=MES +impp.pisces1.datasource.username=sa +impp.pisces1.datasource.password=sahasnopassword \ No newline at end of file diff --git a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties index d72832f..1980f4d 100644 --- a/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-ext-mes-apiservice/src/main/resources/application.properties @@ -1,7 +1,7 @@ #\u9879\u76EE\u540D\u79F0 spring.application.name=i3mes #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=docker,cus-docker +spring.profiles.active=88,cus-88 ######### \u81EA\u5B9A\u4E49\u53C2\u6570 ######### #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C desc.application.name=\u751F\u4EA7\u6267\u884C\u7CFB\u7EDF