解决上传问题,和流程及多线程传送数据

一初始化
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






   


   
   


   


   

   
   


   



   
       
            ${PATTERN}
       

   



   
       
   



   
   


       


       
           
           
       



   



   
   


       


       
           
           
       



   








6web.xml

        multipartFilter
        org.springframework.web.filter.DelegatingFilterProxy
   




        multipartFilter
        /upload/*
   



proc.zip

请使用浏览器的分享功能分享到微信等