From 364dc9870cdb98932d46f888df70f970165d2524 Mon Sep 17 00:00:00 2001 From: gengby <858962040@qq.com> Date: Wed, 29 May 2024 10:48:20 +0800 Subject: [PATCH] =?UTF-8?q?add:mybatis=E6=8B=A6=E6=88=AA=E5=99=A8=E3=80=81?= =?UTF-8?q?=E9=A2=84=E8=AD=A6=E6=B6=88=E6=81=AF=E5=8F=91=E5=B8=83=E8=AE=A2?= =?UTF-8?q?=E9=98=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/mybatis/AlmEarlyInterceptor.java | 101 ++++++++++++++++++ .../mybatis/DatazhuazhuaInterceptor.java | 40 ------- .../nl/config/mybatis/MybatisPlusConfig.java | 18 +++- .../MdPbVehicleMaterController.java | 11 ++ .../service/IMdPbVehicleMaterService.java | 2 + .../dao/mapper/MdPbVehicleMaterMapper.java | 3 + .../impl/MdPbVehicleMaterServiceImpl.java | 8 ++ .../service/early_inv/dao/AlmEarlyInv.java | 8 +- .../impl/AlmEarlyInvServiceImpl.java | 3 +- .../early_msg/IAlmEarlyMsgService.java | 1 + .../dao/mapper/AlmEarlyMsgMapper.java | 1 + .../impl/AlmEarlyMsgServiceImpl.java | 17 ++- .../service/event/EarlyEvent.java | 20 ++++ .../service/listen/EarlyEventListener.java | 71 ++++++++++++ .../wms/early_manage/early_inv/index.vue | 29 +++-- 15 files changed, 263 insertions(+), 70 deletions(-) create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/AlmEarlyInterceptor.java delete mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/event/EarlyEvent.java create mode 100644 wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/listen/EarlyEventListener.java diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/AlmEarlyInterceptor.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/AlmEarlyInterceptor.java new file mode 100644 index 00000000..f55675f4 --- /dev/null +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/AlmEarlyInterceptor.java @@ -0,0 +1,101 @@ +package org.nl.config.mybatis; + +import cn.hutool.core.date.DateUtil; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.plugin.*; +import org.nl.common.publish.BussEventMulticaster; +import org.nl.wms.early_manage.service.event.EarlyEvent; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.Map; + +/** + * mybatis数据库操作拦截 + */ +//@Component +@Intercepts({ + @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}), +}) +public class AlmEarlyInterceptor implements Interceptor { + + private static final String TARGET_TABLE_NAME = "md_pb_vehicleMater"; + + @Override + public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + String sql = mappedStatement.getBoundSql(invocation.getArgs()[1]).getSql().toLowerCase(); + if (isTargetTable(sql)) { + Object parameter = invocation.getArgs()[1]; + String materialId = fieldStringValue(parameter, "material_id"); + BigDecimal qty = fieldBigDecimalValue(parameter, "qty"); + publishEvent(materialId, qty); + } + return invocation.proceed(); + } + + private boolean isTargetTable(String sql) { + return sql.contains(TARGET_TABLE_NAME.toLowerCase()) && + (sql.contains("insert") || sql.contains("update")); + } + + private String fieldStringValue(Object parameter, String fieldName) { + if (parameter instanceof Map) { + Map paramMap = (Map) parameter; + if (paramMap.containsKey("param1")) { + Object param1 = paramMap.get("param1"); + if (param1 instanceof Map) { + Map param = (Map) param1; + return (String) param.get(fieldName); + } else { + try { + Field field = param1.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + return (String) field.get(param1); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + return null; + } + + private BigDecimal fieldBigDecimalValue(Object parameter, String fieldName) { + if (parameter instanceof Map) { + Map paramMap = (Map) parameter; + if (paramMap.containsKey("param1")) { + Object param1 = paramMap.get("param1"); + if (param1 instanceof Map) { + Map param = (Map) param1; + return (BigDecimal) param.get(fieldName); + } else { + try { + Field field = param1.getClass().getDeclaredField(fieldName); + field.setAccessible(true); + return (BigDecimal) field.get(param1); + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + return null; + } + + + private void publishEvent(String materialId, BigDecimal qty) { + BussEventMulticaster.Publish(EarlyEvent.builder() + .material_id(materialId) + .qty(qty) + .create_time(DateUtil.now()) + .build(), false); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + +} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java deleted file mode 100644 index e6401faa..00000000 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/DatazhuazhuaInterceptor.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.nl.config.mybatis; - -import org.apache.commons.lang3.StringUtils; -import org.apache.ibatis.executor.statement.StatementHandler; -import org.apache.ibatis.mapping.BoundSql; -import org.apache.ibatis.mapping.MappedStatement; -import org.apache.ibatis.plugin.*; -import org.apache.ibatis.reflection.MetaObject; -import org.apache.ibatis.reflection.SystemMetaObject; -import org.springframework.stereotype.Component; - -import java.sql.Connection; - -/** - * mybatis数据库操作拦截 - */ -//@Component -@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) -public class DatazhuazhuaInterceptor implements Interceptor { - - @Override - public Object intercept(Invocation invocation) throws Throwable { - StatementHandler statementHandler = (StatementHandler) invocation.getTarget(); - MetaObject metaObject = SystemMetaObject.forObject(statementHandler); - MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement"); String methodName = StringUtils.substringAfterLast(mappedStatement.getId(), "."); - String methodNam2e = StringUtils.substringAfterLast(mappedStatement.getId(), "."); - BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql"); - System.out.println("mybatis拦截器:+"+methodNam2e+"——sql"+boundSql.getSql()); - return invocation.proceed(); - } - - @Override - public Object plugin(Object target) { - if (target instanceof StatementHandler) { - return Plugin.wrap(target, this); - } - return target; - } - -} diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java index 516803a9..34ad3765 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/config/mybatis/MybatisPlusConfig.java @@ -3,12 +3,12 @@ package org.nl.config.mybatis; import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; -import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.github.pagehelper.PageInterceptor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.plugin.Interceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -24,9 +24,10 @@ public class MybatisPlusConfig { @Autowired private DataSource dataSource; + /** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除) - 添加自增插件 + * 添加自增插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { @@ -39,14 +40,21 @@ public class MybatisPlusConfig { return interceptor; } + @Bean ConfigurationCustomizer mybatisConfigurationCustomizer() { return configuration -> configuration.addInterceptor(new PageInterceptor()); } + + @Bean + public Interceptor datazhuazhuaInterceptor() { + return new AlmEarlyInterceptor(); + } + @PostConstruct - public void datainnit(){ + public void datainnit() { String url = ((DruidDataSource) dataSource).getUrl(); - System.out.println("项目数据库地址:"+url); - log.debug("项目数据库地址:{}",url); + System.out.println("项目数据库地址:" + url); + log.debug("项目数据库地址:{}", url); } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/controller/MdPbVehicleMaterController.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/controller/MdPbVehicleMaterController.java index 380798e8..6c25bac1 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/controller/MdPbVehicleMaterController.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/controller/MdPbVehicleMaterController.java @@ -1,6 +1,7 @@ package org.nl.wms.base_manage.vehicle.vehicleMater.controller; +import cn.dev33.satoken.annotation.SaIgnore; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.nl.common.TableDataInfo; @@ -15,6 +16,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.math.BigDecimal; import java.util.List; /** @@ -46,6 +48,15 @@ public class MdPbVehicleMaterController { return new ResponseEntity<>(TableDataInfo.build(dick_code), HttpStatus.OK); } + @PostMapping("/update/{id}") + @SaIgnore + public ResponseEntity update(@PathVariable String id) { + MdPbVehicleMater mdPbVehicleMater = iMdPbVehicleMaterService.getById(id); + mdPbVehicleMater.setQty(new BigDecimal(0)); + iMdPbVehicleMaterService.updateById(mdPbVehicleMater); + return new ResponseEntity<>(HttpStatus.OK); + } + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/IMdPbVehicleMaterService.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/IMdPbVehicleMaterService.java index f69ee76b..74cf0cbf 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/IMdPbVehicleMaterService.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/IMdPbVehicleMaterService.java @@ -16,4 +16,6 @@ import java.util.Map; */ public interface IMdPbVehicleMaterService extends IService { + Integer getQtySumByMaterial(String material_id); + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java index 6907593b..305cc678 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/dao/mapper/MdPbVehicleMaterMapper.java @@ -1,6 +1,7 @@ package org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater; /** @@ -13,4 +14,6 @@ import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater; */ public interface MdPbVehicleMaterMapper extends BaseMapper { + @Select("SELECT SUM(qty) FROM md_pb_vehicleMater WHERE material_id = #{materialId}") + Integer getQtySumByMaterial(String material_id); } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java index c1ea89b0..fb1629f7 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/base_manage/vehicle/vehicleMater/service/impl/MdPbVehicleMaterServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.wms.base_manage.vehicle.vehicleMater.service.IMdPbVehicleMaterService; import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.MdPbVehicleMater; import org.nl.wms.base_manage.vehicle.vehicleMater.service.dao.mapper.MdPbVehicleMaterMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -18,4 +19,11 @@ import org.springframework.stereotype.Service; @Service public class MdPbVehicleMaterServiceImpl extends ServiceImpl implements IMdPbVehicleMaterService { + @Autowired + private MdPbVehicleMaterMapper mdPbVehicleMaterMapper; + + @Override + public Integer getQtySumByMaterial(String material_id) { + return mdPbVehicleMaterMapper.getQtySumByMaterial(material_id); + } } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dao/AlmEarlyInv.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dao/AlmEarlyInv.java index 770e0c6d..dfed3630 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dao/AlmEarlyInv.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/dao/AlmEarlyInv.java @@ -2,6 +2,7 @@ package org.nl.wms.early_manage.service.early_inv.dao; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; + import java.io.Serializable; import java.util.List; @@ -18,7 +19,7 @@ import lombok.*; */ @Data @EqualsAndHashCode(callSuper = false) -@TableName(value = "alm_early_inv",autoResultMap = true) +@TableName(value = "alm_early_inv", autoResultMap = true) @Builder @AllArgsConstructor @NoArgsConstructor @@ -41,7 +42,10 @@ public class AlmEarlyInv implements Serializable { /** * 安全库存数量 */ - private Integer safety_qty; + private Integer safety_min_qty; + + + private Integer safety_max_qty; /** * 安全库存天数 diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/impl/AlmEarlyInvServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/impl/AlmEarlyInvServiceImpl.java index 3c08faa9..9abdafb8 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/impl/AlmEarlyInvServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_inv/impl/AlmEarlyInvServiceImpl.java @@ -52,7 +52,8 @@ public class AlmEarlyInvServiceImpl extends ServiceImpl { Object getAll(PageQuery page, AlmMsgQuery query); + } diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dao/mapper/AlmEarlyMsgMapper.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dao/mapper/AlmEarlyMsgMapper.java index 7b73bed7..22929d86 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dao/mapper/AlmEarlyMsgMapper.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/dao/mapper/AlmEarlyMsgMapper.java @@ -1,5 +1,6 @@ package org.nl.wms.early_manage.service.early_msg.dao.mapper; +import org.apache.ibatis.annotations.Insert; import org.nl.wms.early_manage.service.early_msg.dao.AlmEarlyMsg; import com.baomidou.mybatisplus.core.mapper.BaseMapper; diff --git a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/impl/AlmEarlyMsgServiceImpl.java b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/impl/AlmEarlyMsgServiceImpl.java index a10ef86b..b88a86ca 100644 --- a/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/impl/AlmEarlyMsgServiceImpl.java +++ b/wms_pro/hd/nladmin-system/src/main/java/org/nl/wms/early_manage/service/early_msg/impl/AlmEarlyMsgServiceImpl.java @@ -3,9 +3,7 @@ package org.nl.wms.early_manage.service.early_msg.impl; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import org.nl.common.TableDataInfo; import org.nl.common.domain.entity.PageQuery; import org.nl.wms.base_manage.material.service.IMdMeMaterialbaseService; import org.nl.wms.base_manage.material.service.dao.MdMeMaterialbase; @@ -14,7 +12,6 @@ import org.nl.wms.early_manage.service.early_msg.dao.mapper.AlmEarlyMsgMapper; import org.nl.wms.early_manage.service.early_msg.IAlmEarlyMsgService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.wms.early_manage.service.early_msg.dto.AlmMsgQuery; -import org.nl.wms.flow_manage.flow.service.execution.dao.ActRuExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,9 +33,6 @@ public class AlmEarlyMsgServiceImpl extends ServiceImpl almMsgQueryPage = this.page(page.build(), query.build()); long total = almMsgQueryPage.getTotal(); List records = almMsgQueryPage.getRecords(); @@ -46,14 +40,15 @@ public class AlmEarlyMsgServiceImpl extends ServiceImpl { + + @Autowired + private IAlmEarlyMsgService almEarlyMsgService; + @Autowired + private IAlmEarlyInvService almEarlyInvService; + @Autowired + private IAlmEarlyDtlService almEarlyDtlService; + @Autowired + private IMdPbVehicleMaterService mdPbVehicleMaterService; + + @Override + protected String doEvent(EarlyEvent event) { + String material_id = event.getMaterial_id(); + BigDecimal qty = event.getQty(); + String create_time = event.getCreate_time(); + List list = almEarlyDtlService.list(new LambdaQueryWrapper().eq(AlmEarlyDtl::getMaterial_id, material_id)); + for (AlmEarlyDtl almEarlyDtl : list) { + AlmEarlyInv earlyInv = almEarlyInvService.getById(almEarlyDtl.getAlm_id()); + String notice_type = earlyInv.getNotice_type(); + String earlyInvCreateTime = earlyInv.getCreate_time(); + Integer safety_day = earlyInv.getSafety_day(); + long daysDifference = DateUtil.betweenDay(DateUtil.parse(create_time), DateUtil.parse(earlyInvCreateTime), true); + if (daysDifference < safety_day) { + Integer safety_max_qty = earlyInv.getSafety_max_qty(); + Integer safety_min_qty = earlyInv.getSafety_min_qty(); + Integer sumQty = mdPbVehicleMaterService.getQtySumByMaterial(material_id); + if (sumQty < safety_min_qty || sumQty > safety_max_qty) { + //插入消息表 + AlmEarlyMsg almEarlyMsg = new AlmEarlyMsg(); + almEarlyMsg.setId(IdUtil.getStringId()); + almEarlyMsg.setQty(sumQty); + almEarlyMsg.setMaterial_id(material_id); + almEarlyMsg.setCreate_time(DateUtil.now()); + almEarlyMsg.setEarly_type("1"); + almEarlyMsg.setStor_code(earlyInv.getStor_code()); + almEarlyMsgService.save(almEarlyMsg); + //根据notice_type下发通知 + System.out.println("下发通知"); + } + } + } + return null; + } +} diff --git a/wms_pro/qd/src/views/wms/early_manage/early_inv/index.vue b/wms_pro/qd/src/views/wms/early_manage/early_inv/index.vue index 7e1ebdc9..60d8938d 100644 --- a/wms_pro/qd/src/views/wms/early_manage/early_inv/index.vue +++ b/wms_pro/qd/src/views/wms/early_manage/early_inv/index.vue @@ -78,8 +78,20 @@ - - + + + + + + + + + + + + + + @@ -106,13 +118,6 @@ - - - - - - - @@ -152,7 +157,8 @@ - + + @@ -207,7 +213,8 @@ const defaultForm = { id: null, alm_name: null, stor_code: null, - safety_qty: null, + safety_min_qty: null, + safety_max_qty: null, safety_day: null, expression: null, notice_type: null,