19 changed files with 438 additions and 40 deletions
@ -0,0 +1,155 @@ |
|||||||
|
package com.logpm.patch.config; |
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil; |
||||||
|
import cn.hutool.json.JSONUtil; |
||||||
|
import org.springblade.core.secure.BladeUser; |
||||||
|
import org.springblade.core.secure.utils.AuthUtil; |
||||||
|
import org.springblade.core.tool.utils.ThreadLocalUtil; |
||||||
|
import org.springframework.amqp.core.Message; |
||||||
|
import org.springframework.amqp.core.MessageProperties; |
||||||
|
import org.springframework.amqp.support.converter.AllowedListDeserializingMessageConverter; |
||||||
|
import org.springframework.amqp.support.converter.MessageConversionException; |
||||||
|
import org.springframework.amqp.utils.SerializationUtils; |
||||||
|
import org.springframework.beans.factory.BeanClassLoaderAware; |
||||||
|
import org.springframework.http.HttpHeaders; |
||||||
|
import org.springframework.mock.web.MockHttpServletRequest; |
||||||
|
import org.springframework.remoting.rmi.CodebaseAwareObjectInputStream; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
import org.springframework.util.ClassUtils; |
||||||
|
import org.springframework.web.context.request.RequestContextHolder; |
||||||
|
import org.springframework.web.context.request.ServletRequestAttributes; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.util.List; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author zhaoqiaobo |
||||||
|
* @create 2024-05-08 |
||||||
|
*/ |
||||||
|
@Component |
||||||
|
public class CustomMessageConverter extends AllowedListDeserializingMessageConverter implements BeanClassLoaderAware { |
||||||
|
|
||||||
|
private volatile String defaultCharset = "UTF-8"; |
||||||
|
private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader(); |
||||||
|
private String codebaseUrl; |
||||||
|
|
||||||
|
@Deprecated |
||||||
|
public void setCodebaseUrl(String codebaseUrl) { |
||||||
|
this.codebaseUrl = codebaseUrl; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object fromMessage(Message message) throws MessageConversionException { |
||||||
|
Object content = null; |
||||||
|
MessageProperties properties = message.getMessageProperties(); |
||||||
|
if (properties != null) { |
||||||
|
String contentType = properties.getContentType(); |
||||||
|
if (contentType != null && contentType.startsWith("text")) { |
||||||
|
String encoding = properties.getContentEncoding(); |
||||||
|
if (encoding == null) { |
||||||
|
encoding = "UTF-8"; |
||||||
|
} |
||||||
|
|
||||||
|
try { |
||||||
|
content = new String(message.getBody(), encoding); |
||||||
|
} catch (UnsupportedEncodingException var8) { |
||||||
|
throw new MessageConversionException("failed to convert text-based Message content", var8); |
||||||
|
} |
||||||
|
} else if (contentType != null && contentType.equals("application/x-java-serialized-object")) { |
||||||
|
try { |
||||||
|
content = SerializationUtils.deserialize(this.createObjectInputStream(new ByteArrayInputStream(message.getBody()), this.codebaseUrl)); |
||||||
|
} catch (IllegalArgumentException | IllegalStateException | IOException var7) { |
||||||
|
throw new MessageConversionException("failed to convert serialized Message content", var7); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Map<String, Object> headers = properties.getHeaders(); |
||||||
|
HttpHeaders httpHeaders = new HttpHeaders(); |
||||||
|
for (Map.Entry<String, Object> entry : headers.entrySet()) { |
||||||
|
if (StrUtil.equals("Blade-Auth", entry.getKey()) |
||||||
|
|| StrUtil.equals("Authorization", entry.getKey()) |
||||||
|
|| StrUtil.equals("blade-auth", entry.getKey()) |
||||||
|
|| StrUtil.equals("authorization", entry.getKey())) { |
||||||
|
List value = (List) entry.getValue(); |
||||||
|
for (Object o : value) { |
||||||
|
httpHeaders.add(entry.getKey(), String.valueOf(o)); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
ThreadLocalUtil.put("bladeContext", httpHeaders); |
||||||
|
Object bladeUser = headers.get("bladeUser"); |
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
||||||
|
BladeUser bladeUser1 = JSONUtil.toBean(bladeUser.toString(), BladeUser.class); |
||||||
|
request.setAttribute("_BLADE_USER_REQUEST_ATTR_", bladeUser1); |
||||||
|
RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); |
||||||
|
if (content == null) { |
||||||
|
content = message.getBody(); |
||||||
|
} |
||||||
|
return content; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected Message createMessage(Object object, MessageProperties messageProperties) throws MessageConversionException { |
||||||
|
byte[] bytes = null; |
||||||
|
if (object instanceof byte[]) { |
||||||
|
bytes = (byte[]) object; |
||||||
|
messageProperties.setContentType("application/octet-stream"); |
||||||
|
} else if (object instanceof String) { |
||||||
|
try { |
||||||
|
bytes = ((String) object).getBytes(this.defaultCharset); |
||||||
|
} catch (UnsupportedEncodingException var6) { |
||||||
|
throw new MessageConversionException("failed to convert to Message content", var6); |
||||||
|
} |
||||||
|
|
||||||
|
messageProperties.setContentType("text/plain"); |
||||||
|
messageProperties.setContentEncoding(this.defaultCharset); |
||||||
|
} else if (object instanceof Serializable) { |
||||||
|
try { |
||||||
|
bytes = SerializationUtils.serialize(object); |
||||||
|
} catch (IllegalArgumentException var5) { |
||||||
|
throw new MessageConversionException("failed to convert to serialized Message content", var5); |
||||||
|
} |
||||||
|
|
||||||
|
messageProperties.setContentType("application/x-java-serialized-object"); |
||||||
|
} |
||||||
|
HttpHeaders headers = (HttpHeaders) ThreadLocalUtil.get("bladeContext"); |
||||||
|
if (headers != null && !headers.isEmpty()) { |
||||||
|
headers.forEach((key, values) -> { |
||||||
|
values.forEach((value) -> { |
||||||
|
messageProperties.setHeader(key, new String[]{value}); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
BladeUser user = AuthUtil.getUser(); |
||||||
|
BladeUser bladeUser = new BladeUser(); |
||||||
|
bladeUser.setTenantId(user.getTenantId()); |
||||||
|
bladeUser.setUserId(user.getUserId()); |
||||||
|
bladeUser.setAccount(user.getAccount()); |
||||||
|
bladeUser.setRoleId(user.getRoleId()); |
||||||
|
messageProperties.setHeader("bladeUser", JSONUtil.toJsonStr(bladeUser)); |
||||||
|
|
||||||
|
if (bytes != null) { |
||||||
|
messageProperties.setContentLength((long) bytes.length); |
||||||
|
return new Message(bytes, messageProperties); |
||||||
|
} else { |
||||||
|
throw new IllegalArgumentException(this.getClass().getSimpleName() + " only supports String, byte[] and Serializable payloads, received: " + object.getClass().getName()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void setBeanClassLoader(ClassLoader classLoader) { |
||||||
|
this.beanClassLoader = beanClassLoader; |
||||||
|
} |
||||||
|
|
||||||
|
protected ObjectInputStream createObjectInputStream(InputStream is, String codebaseUrl) throws IOException { |
||||||
|
return new CodebaseAwareObjectInputStream(is, this.beanClassLoader, codebaseUrl) { |
||||||
|
@Override |
||||||
|
protected Class<?> resolveClass(ObjectStreamClass classDesc) throws IOException, ClassNotFoundException { |
||||||
|
Class<?> clazz = super.resolveClass(classDesc); |
||||||
|
CustomMessageConverter.this.checkAllowedList(clazz); |
||||||
|
return clazz; |
||||||
|
} |
||||||
|
}; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package com.logpm.warehouse.receiver; |
||||||
|
|
||||||
|
import cn.hutool.json.JSONObject; |
||||||
|
import cn.hutool.json.JSONUtil; |
||||||
|
import com.logpm.warehouse.dto.TrayInfoDTO; |
||||||
|
import com.logpm.warehouse.service.IWarehouseUpdownTypeService; |
||||||
|
import lombok.AllArgsConstructor; |
||||||
|
import lombok.extern.slf4j.Slf4j; |
||||||
|
import org.springblade.common.constant.RabbitConstant; |
||||||
|
import org.springframework.amqp.core.ExchangeTypes; |
||||||
|
import org.springframework.amqp.rabbit.annotation.Exchange; |
||||||
|
import org.springframework.amqp.rabbit.annotation.Queue; |
||||||
|
import org.springframework.amqp.rabbit.annotation.QueueBinding; |
||||||
|
import org.springframework.amqp.rabbit.annotation.RabbitListener; |
||||||
|
import org.springframework.stereotype.Component; |
||||||
|
import org.springframework.transaction.annotation.Transactional; |
||||||
|
|
||||||
|
import java.util.Objects; |
||||||
|
|
||||||
|
@Slf4j |
||||||
|
@Component |
||||||
|
@AllArgsConstructor |
||||||
|
public class OldTrayTypeListener { |
||||||
|
|
||||||
|
private final IWarehouseUpdownTypeService warehouseUpdownTypeService; |
||||||
|
|
||||||
|
@RabbitListener(bindings = @QueueBinding( |
||||||
|
value = @Queue(name = RabbitConstant.OLD_TRAY_TYPE_QUEUE), |
||||||
|
exchange = @Exchange(name = RabbitConstant.OLD_TRAY_TYPE_EXCHANGE, type = ExchangeTypes.DIRECT), |
||||||
|
key = RabbitConstant.OLD_TRAY_TYPE_ROUTING |
||||||
|
)) |
||||||
|
@Transactional(rollbackFor = Exception.class) |
||||||
|
public void oldTrayTypeInfo(String msg) { |
||||||
|
|
||||||
|
JSONObject jsonObject = JSONUtil.parseObj(msg); |
||||||
|
String orderPackageCode = jsonObject.getStr("orderPackageCode"); |
||||||
|
Integer type = jsonObject.getInt("type"); |
||||||
|
Integer trayId = jsonObject.getInt("trayId"); |
||||||
|
Integer oldWarehouseId = jsonObject.getInt("warehouseId"); |
||||||
|
Long oldTrayTypeId = jsonObject.getLong("oldTrayTypeId"); |
||||||
|
|
||||||
|
TrayInfoDTO trayInfoDTO = new TrayInfoDTO(); |
||||||
|
trayInfoDTO.setTrayId(trayId); |
||||||
|
trayInfoDTO.setType(type); |
||||||
|
trayInfoDTO.setWarehouseId(oldWarehouseId); |
||||||
|
trayInfoDTO.setOrderPackageCode(orderPackageCode); |
||||||
|
|
||||||
|
try{ |
||||||
|
warehouseUpdownTypeService.sendTrayInfoByOrderPackageCode(trayInfoDTO); |
||||||
|
|
||||||
|
if(!Objects.isNull(oldTrayTypeId)){ |
||||||
|
warehouseUpdownTypeService.updateOldTrayTypeInfo(oldTrayTypeId,1); |
||||||
|
} |
||||||
|
|
||||||
|
}catch (Exception e){ |
||||||
|
if(!Objects.isNull(oldTrayTypeId)){ |
||||||
|
warehouseUpdownTypeService.updateOldTrayTypeInfoNum(oldTrayTypeId); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue