1. 点击未激活按钮显示相关购买记录的详细信息。
- 购买日期,产品类型,产品型号,数量,购买地点,手机产品显示IMEI
2. 点击上端积分激活按钮进入页面时,显示的是查询的购买记录中第一条未激活购买记录的详细信息。
二流程
1. 扫码
1-1. 点击扫码可调用摄像头进行扫码。
1-2. 扫码家电SN并前11位有显示的情况时,自动只输入后3位或4位。
2. 激活
根据购买信息查询出的数据,判断是否有imei,有imei是手机,没有是家电;
2-1 判断为手机产品时
- 查询积分激活对象,如果SN在积分激活对象中,查找对应actNO,mcsseq明细号,根据明细号调用激活接口激活IMEI;
- 激活成功弹窗提示“恭喜您,激活成功”,并购买记录状态为“已激活”;
- 如果在积分激活对象中未找到SN,提示"您输入的SN号有误,请核实后重新输入";
- 如果激活失败,提示"激活失败,请重新输入"
2-2 判断为家电产品,且G-CRM中可以查询出SN
- 手工录入后3位或后4位,也可以扫描录入SN ,且自动区分出后三位或后四位时后三位或后四位可编辑;
- 根据页面传入的SN到积分对象查询接口中获取相应actNO、mcsseq明细号,根据明细号调用激活接口激活SN;
2-3 判断是家电产品,且G-CRM中无法获取SN
- 手工录入或扫码录入全部SN号,调用G-MES接口查看SN是否存在;
- 如果G-MES存在该SN,根据手工录入SN查询积分激活对象中的actNO、mcsseq明细号,根据明细号调用激活接口激活SN, 提示激活成功,并购买记录状态为“已激活”;
- 如果G-MES不存在提示"您输入的S/N号有误,请核实后重新输入";
2-4 异常客户
- 异常顾客激活任何产品,弹窗提示“请将购机发票和产品序列号清晰照片发送致servicecall@samsung.com 客服人员将会进行审核”, 购买记录状态为“待上传”;
2-5 活动产品
- 激活活动产品成功,弹窗提示“请将购机发票和产品序列号清晰照片发送致servicecall@samsung.com 客服人员将会进行审核”, 购买记录状态为“待上传”。
解决 使用common-fileuploa上传附件时,其他filter导致附件读取失败
1 SpringbootApplication里main方法
ApplicationContext applicationContext = SpringApplication.run(SpringbootApplication.class, args);
SpringContextKit.setApplicationContext(applicationContext);
里增加
@Bean
public FilterRegistrationBean regMultipartFilter() {
FilterRegistrationBean frb = new FilterRegistrationBean();
MultipartFilter multipartFilter = new MultipartFilter();
multipartFilter.setMultipartResolverBeanName("multipartResolver");
frb.addUrlPatterns("/*");
//frb.addInitParameter("paramName", "paramValue");
frb.setName("multipartFilter");
frb.setFilter(multipartFilter);
frb.setOrder(-2147483648);
return frb;
}
2 MemApplication
SpringApplication.run(MemApplication.class, args);
@Bean
@Order(-2147483648) // 试图优先加载 multipartFilter
public MultipartFilter multipartFilter() {
MultipartFilter multipartFilter = new MultipartFilter();
multipartFilter.setMultipartResolverBeanName("multipartResolver");
return multipartFilter;
}
3
package sec.crm.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.web.MultipartProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.MultipartConfigElement;
import javax.servlet.Servlet;
/**
* Created by kinn on 2017/6/7.
*/
/**
* Spring提供了两个MultipartResolver的实现用于处理multipart请求。
*
*
* CommonsMultipartResolver(使用common fileupload。对应servlet2.5)
* StandardServletMultipartResolver(基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以)
* 1:(MultipartHttpServletRequest request) {
* MultipartFile file = request.getFile("uploadFile***");
* }
* 2:(@RequestPart("uploadFile**") MultipartFile uploadFile**) {
* uploadFile**.
* }
*
* @return
*/
@Configuration
@ConditionalOnClass({Servlet.class, CommonsMultipartResolver.class})
@ConditionalOnProperty(
prefix = "spring.http.multipart",
name = {"enabled"},
matchIfMissing = true
)
@EnableConfigurationProperties({MultipartProperties.class})
public class CommonMultipartAutoConfiguration {
private Logger logger = LoggerFactory.getLogger(this.getClass());
private final MultipartProperties multipartProperties;
public CommonMultipartAutoConfiguration(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}
/*本地開發注釋掉*/
@Bean
@ConditionalOnMissingBean
@ConditionalOnClass({Servlet.class, MultipartConfigElement.class})
public MultipartConfigElement multipartConfigElement() {
logger.debug("附件参数注入");
return this.multipartProperties.createMultipartConfig();
}
@Bean(name = {"multipartResolver"})
@ConditionalOnMissingBean({MultipartResolver.class})
public CommonsMultipartResolver multipartResolver() {
logger.debug("CommonsMultipartResolver注入-start");
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
logger.debug("CommonsMultipartResolver注入-end");
return multipartResolver;
}
}
4设置配置
1 MultipartConfig
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MultipartConfig {
String location() default "";
long maxFileSize() default -1L;
long maxRequestSize() default -1L;
int fileSizeThreshold() default 0;
}
2 MultipartConfigElement
public class MultipartConfigElement {
private final String location;
private final long maxFileSize;
private final long maxRequestSize;
private final int fileSizeThreshold;
public MultipartConfigElement(String location) {
if(location != null) {
this.location = location;
} else {
this.location = "";
}
this.maxFileSize = -1L;
this.maxRequestSize = -1L;
this.fileSizeThreshold = 0;
}
public MultipartConfigElement(String location, long maxFileSize, long maxRequestSize, int fileSizeThreshold) {
if(location != null) {
this.location = location;
} else {
this.location = "";
}
this.maxFileSize = maxFileSize;
this.maxRequestSize = maxRequestSize;
if(fileSizeThreshold > 0) {
this.fileSizeThreshold = fileSizeThreshold;
} else {
this.fileSizeThreshold = 0;
}
}
public MultipartConfigElement(MultipartConfig annotation) {
this.location = annotation.location();
this.maxFileSize = annotation.maxFileSize();
this.maxRequestSize = annotation.maxRequestSize();
this.fileSizeThreshold = annotation.fileSizeThreshold();
}
public String getLocation() {
return this.location;
}
public long getMaxFileSize() {
return this.maxFileSize;
}
public long getMaxRequestSize() {
return this.maxRequestSize;
}
public int getFileSizeThreshold() {
return this.fileSizeThreshold;
}
}
5日志回退配置
logback-spring.xml
6web.xml
proc.zip