inoVat项目记录

本文详细介绍了基于微服务架构的备件管理系统,包括配置中心configserver、API网关zuul、服务调用feign、熔断器hystrix以及日志监控等方面。系统实现了备件信息管理、故障率计算、库存冗余分析等功能,并通过监控和健康检查确保服务稳定。同时,文章涵盖了备件的多维度属性,如故障率、库存满足率等,并提供了库存优化和预测算法。
摘要由CSDN通过智能技术生成

架构图

在这里插入图片描述

configserver

configserver主要为配置信息,在main类加注解EnableConfigServer
application.yml中指明server端口,spring.application.name (微服务名称)
配置注册中心consul的地址端口,注册服务名,perfer-ip-address
配置了配置中心地址,读取的用户名密码,完整的配置信息在gitee:https://gitee.com/gaohuamao/zgh-config.git中,在其中区分是什么环境和配置信息

zuul

文件访问,优先到zuul中, zuul中配置关键配置信息
zuul:
routes:
microservice-zgh-server-auth: /api/auth/**
microservice-zgh-server-api: /api/**
访问 路由转向微服务 microservice-zgh-server-api

zgh-server-api

负责任务分发如上面zuul中的调用转到zgh-server-api后,由对应collectController接收,调用到对应方法,走feign访问对应微服务接口

@PostMapping("/frequency/list")
    public ResponseModel frequencyList(@RequestBody RequestModel<CollectFrequencyVO> requestModel){
        PageInfo pageInfo = collectFeign.frequencyList(requestModel);
        return new ResponseModel(pageInfo);
    }

feign接口决定转发给哪个微服务 com.inossem.zgh.framework.util.constant.FeignConstant

@FeignClient(name = FeignConstant.MICROSERVICE_STOCKCALCULATE)
public interface CollectFeign {

@RequestMapping(value = "/calculate/collect/frequency/list" , method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
PageInfo frequencyList(RequestModel<CollectFrequencyVO> model);

@RequestMapping(value = "/calculate/collect/frequency/export" , method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
List<CollectFrequencyVO> export(RequestModel<CollectFrequencyVO> requestModel);

}

hystrix

配置项,

@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class HystrixApplication {

    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }

}
management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream,routes,filters,health

对应监控地址http://192.168.3.204:8041//actuator/hystrix.stream 等
管理健康流,路由信息,过滤信息等

log

切面类
com.inossem.zgh.framework.log.aspect.CallLogAspect
切点:controller 包下方法
com.inossem.zgh.framework.log.aspect.OperLogAspect
切点: com.inossem.zgh.framework.log.annotation.OperLog 注解

FeginInterceptor

基础资料

三大基础资料间均为多对多关系

备件

指的是电厂的备件(投入使用物料,资产)

备件父子码

记录备件的bom关系

备件分类

使备件为3级分类树状结构

替代品

指物料直接的替代关系记录

工厂

具体的物理工厂,非供应商或产地。为消耗备件和消耗品的主要场所,供电等的物理单元

功能位置

抽象的功能位置,比如工厂需要具体的继电器等,多个工厂可以公用同一个继电器。为多个备件构成,有设备级别属性,与工厂可以形成唯一维度记录展示具体功能位置信息

参数含义

领用率

指备件被领用通用频率等级,分AB类设置,对应参数表 opi_setting_collect_rate ,根据历史预防性工单可推测

故障率

指备件通用故障等级,分AB,C类设置,对应参数表 opi_setting_fault_ratio ,根据历史纠正类工单可推测

库存满足率

通用基本参数,不与其他基础资料绑定或者关联,代表库存满足率等级和安全性等级, 对应主参数表 data_stock_fill_rate ,查询方法/api/calculate/stockFillRate/getMatStockFillRateList
查询基础资料时,与 material_calculate_param 表做关联,物料相关信息存储在material_calculate_param表,data_stock_fill_rate为基础数据表,关联展示用。

库存冗余系数

通用基础资料参数,

库存水位标准

设置库存中具体物备件类型或者具体备件的库存上下限,
以物料设置水位时:记录存储表 :opi_setting_material_stock_waterlevel 以备件+工厂为维度设置水位,关联 mcr表
以物料类型设置水位标准时,记录存储在 opi_setting_categroy_stock_waterlevel 表, 表中记录父子类id,水位信息

采购提前期

 查询主方法:`com.inossem.zgh.server.stockcalculate.service.PurAdvDayMatService#getPurAdvDayMatListAll`

消耗品消耗周期

业务流程

备件关系清洗

http://192.168.3.204:8041/api/clean/funclocation/eventlist
具体代码位置
com.inossem.zgh.server.dataclean.web.controller.FuncLocationController#eventList
查找表data_clean_funclocation_event left join dictionary_item left join user

库存优化分析

故障率查询

查询调用 :
http://192.168.3.204:8041/api/dictionary/getList
转发后调用位置
com.inossem.zgh.server.dataclean.web.controller.DictionaryController#getList
返回数据调用:
http://192.168.3.204:8041/api/calculate/faultRatio/list
转发后调用位置
com.inossem.zgh.server.stockcalculate.web.controller.FaultRatioController#list
查询表:
material_calculate_param inner join material inner join dictionary_item

故障率计算

调用 /api/calculate/faultRatio/calculate
核心计算位置
com.inossem.zgh.server.stockcalculate.web.controller.FaultRatioController#calculateProcess
计算逻辑:
1、获取ABList (AB(备件)类故障集合), 获取CList (C(消耗品)类故障集合) :过滤不同

  • 根据 data_order_history 物料消耗数量统计物料消耗次数,sum后除以最早一次消耗距今月份后*12,代表年消耗次数 也就是说 故障率= 总的故障次数/(最早一次故障距今年数) 代表年均故障率。将abc放在一个集合中。
  • 结合参数表material_calculate_param判断集合中物料是否存在来判断是insert||update,放到集合的dataType中记录。
    2、先处理消耗品故障率低的,用故障率低的表左关联替代关系表,再关联故障率高的表,获取后放入集合listClow中
    整体思想为保守思想,可能出现故障率高的情况记录故障率为高,如果有替代品且替代品故障率高,但是原品故障率低,记录。计算替代品故障率时要排除此替代情况。主要计算C类物料。 结合参数表material_calculate_param判断集合中物料是否存在来判断是insert||update

库存冗余查询

查询

1、顶部过滤项查询:

  • /api/dictionary/getList,payLoad中t {typeCode: “MATERIAL_LEVEL”} 查询备件级别
  • /api/dictionary/getList,payLoad中{typeCode: “COLLECT_RATIO”}查询领用频率后台处理逻辑 dictionaryService.getDictionaryList(DictionaryVO);model中 sql区分 where type_code = #{typeCode}
  • /api/material/category/list,查询物料类别。 响应位置com.inossem.zgh.server.dataclean.web.controller.MaterialCategoryController#getModel,方法中,先获取根节点,再根据根节点获取下面的分类获取对应实际数据(material_category 树状结构表)
  • /api/calculate/stockRedundancy/list 主数据查询(根据上面的过滤信息)。响应位置com.inossem.zgh.server.stockcalculate.web.controller.StockRedundancyController#list,查询表:
from `material_calculate_param` mcp inner join `material` m on mcp.`material_id` = m.`id`
inner join `material_category_relation` mcr on m.id = mcr.material_id
inner join `material_category` mc1 on mcr.`parent_category_id` = mc1.`id`
inner join `material_category` mc2 on mcr.`category_id` = mc2.`id`
left join `dictionary_item` di on di.`key` = mcp.`collect_ratio` and di.`type_code` = "COLLECT_RATIO"

计算

计算逻辑位置:com.inossem.zgh.server.stockcalculate.service.StockRedundancyService#calculate

1、库存冗余系数与对应关系list 查询sql:

SELECT basic_info.id AS materialId,calculate_param.year_no AS redundancyYearNo,calculate_param.double_no AS redundancyDoubleNo from
    
    (SELECT m.id,
    CASE m.level WHEN "A" THEN 1 WHEN "B" THEN 1 WHEN "C" THEN 2 END AS material_level,
    mcp.fault_ratio FROM `material` m
    INNER JOIN `material_calculate_param` mcp ON m.id = mcp.`material_id` ) AS basic_info
    INNER JOIN
   
    (SELECT m1.type, m1.level, IFNULL(m1.year_no,m2.year_no) AS year_no, IFNULL(m1.double_no,m2.double_no) AS double_no FROM
    `opi_setting_stock_redundancy_ratio` m1 INNER JOIN
    (SELECT * FROM opi_setting_stock_redundancy_ratio WHERE `level` = 0) AS m2 ON m1.type = m2.type) AS calculate_param
    ON basic_info.fault_ratio = calculate_param.level AND basic_info.material_level = calculate_param.type

结果集:物料id、冗余系数中的年份数量、冗余系数中的倍数值 取出后更新到参数表
2、根据1中结果集 calculateParamDTOList (物料id、冗余系数中的年份数量、冗余系数中的倍数值)计算实际库存和移动平均价(总金额/非限制库存数量+在途库存数量)得到 calculateParamDTOList1 (结果集:物料id,当前库存stockNow,平均价格averagePrice),更新到参数表中。计算位置:com.inossem.zgh.server.stockcalculate.service.StockRedundancyService#calculatePriceAndStock
3.计算n年的领用数量,合并到一个list中:
calculateParamDTOList2 (结果集:materialid 物料id,collectValue 领用数量,collect_ratio领用频率,redundancy_year_no 冗余系数中的年份数量,redundancy_double_no 冗余系数中的倍数,average_price 平均价,stockNow 当前库存,collectCountNyear n年领用数量)
4、针对结果集中的list,遍历计算,计算逻辑位置:com.inossem.zgh.server.stockcalculate.service.StockRedundancyService#calculateRedundancy
是否冗余=当前库存数-(n年领用数量*冗余系数倍数)和0相比

领用预测查询

api/calculate/reqForecast/searchReqHisMonth 业务调用:com.inossem.zgh.server.stockcalculate.web.controller.ReqForecastController#searchReqHisMonth
查询信息:

  1. /api/calculate/reqForecast/searchReqHisMonth
    构造两年内的月份合集,然后在sql中unionall出所有月份记录,再统计领用次数和数量
  2. /api/calculate/reqForecast/searchReqHisOverview
    历史领用简单查询
  3. /api/calculate/reqForecast/searchFunclocation
    功能位置简单查询
  4. /api/calculate/reqForecast/searchReqHisDetail
  5. 历史领用清单

库龄分析看板

消耗品储备建议

查询

controller位置com.inossem.zgh.server.stockcalculate.web.controller.StoreAdviceController#cMaterialList

select
            m.id as id, m.material_code as materialCode, m.material_level as materialLevel, m.factory_id as factoryId,
            d2.value as calculateStatusDes, m.material_des as materialDes, concat(c1.name,'-',c2.name) as categoryDes,
            d1.value as faultRatioDes, m.advance_day as advanceDay, m.count_store as countStore, m.count_onway as countOnway,
            m.reorder_point as reorderPoint, m.stock_safty as stockSafty, m.store_max as storeMax, m.consume_day as consumeDay, m.fill_rate as fillRate,
            m.store_water_max as storeWaterMax, m.store_water_min as storeWaterMin,
            m.consume_last_year_average_month as consumeLastYearAverageMonth,
            m.consume_last_3month as consumeLast3month, m.consume_future_3month as consumeFuture3month,
            m.modified_time as modifiedTime
        from material_calculate_data_cmat_store_advice m
        left join (SELECT * FROM dictionary_item WHERE type_code = 'FAULT_RATIO') d1 ON m.fault_ratio = d1.key
        left join (SELECT * FROM dictionary_item WHERE type_code = 'CALCULATE_STATUS') d2 ON m.calculate_status = d2.key
        inner join material_category c1 on m.category_parent_id = c1.id
        inner join material_category c2 on m.category_id = c2.id
        where 1=1 and m.material_level = 'C'
				order by m.modified_time,m.id desc

计算

响应位置:com.inossem.zgh.server.stockcalculate.web.controller.StoreAdviceController#cMaterial
逻辑位置:com.inossem.zgh.server.stockcalculate.service.StoreAdviceService#cMaterial
计算步骤:

  1. 删除C类数据:删除material_calculate_data_cmat_store_advice表中物料类别为C类的数据
  2. 清空采购冗余数据:update备件工厂关系表material_factory_relation中列为空
  3. 清空分类和工厂关系表:delete from material_factory_category_monthconsume (备件的工厂+分类维度的领用数据)
  4. 采购提前期数据计算
    -冗余采购提前期(按照分类大类设置) updateAdvDayByCategoryParent
    -冗余采购提前期(按照分类小类设置) updateAdvDayByCategoryChild
    -冗余采购提前期(按照备件设置) updateAdvDayByMat
    -冗余库存水位(按照分类大类设置) updateWaterLevelByCategoryParent
    -冗余库存水位(按照分类小类设置) updateWaterLevelByCategoryChild
    -冗余库存水位(按照备件设置)updateWaterLevelByMat
    -冗余消耗周期 updateConsumeDay
  5. 获取未配置工厂的物料 noFactoryCMatList 501错误状态
  6. 获取配置了工厂,但未设置采购提前期的物料,再取出其他的信息 getNoAdvanceList 502
  7. 获取没有领用预测的物料 getNoCollectForecast 503
  8. 获取没有库存满足率的物料 getNoStockFillRate 504
  9. 获取没有设置消耗周期的物料 getNoConsumeDay 505
  10. 计算同小类下的消耗MAD (月均消耗)
  11. 计算需要进行同分类计算的分类和工厂关系(消耗品、故障率为低、设置了采购提前期、消耗周期和满足率) getFacCatList
  12. 计算供给偏差W因素 updateSupplyDeviation
  13. 计算分类和工厂关系的近12个月的月平均领用(不包含替代品覆盖) 分类和工厂关系的近12个月的每个月领用
  14. 计算消耗MAD
  15. 计算安全库存 updateSaftyStock
  16. 计算再订货点 updateReorderPoint
  17. 处理数据集合 getTrueCalculateList
  18. 插入集合数据 insert
  19. 更新库存和在途 updateStoreCount
  20. 计算近一年平均 updateOneYearConsume
  21. 计算近三个月总消耗 update3MonthConsume
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值