效果图如下:
代码如下:
下载模板
//下载模板的Controller
@ResponseBody
@RequestMapping("/downloadTableTemps.do")
public void downloadTableTemps(
HttpServletRequest request,
HttpServletResponse response)throws Exception{
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
File file = new File(SystemConfig.getProperty("UPLOAD_PATH")+"/gd/modles.xlsx");
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename=" +
new String("工单上传模板.xlsx".getBytes("utf-8"),"ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(file.length()));
FileUtil.downloadFile(SystemConfig.getProperty("UPLOAD_PATH")+"/gd/modles.xlsx", response.getOutputStream());
}
引用到一个帮助类
@Component
public class SystemConfig {
private static Properties props ;
private static Properties jdbc_props ;
public SystemConfig(){
try {
Resource resource = new ClassPathResource("/properties/resource.properties");//
props = PropertiesLoaderUtils.loadProperties(resource);
Resource jdbc_resource = new ClassPathResource("/jdbc.properties");//
jdbc_props = PropertiesLoaderUtils.loadProperties(jdbc_resource);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String getProperty(String key){
return props == null ? null : props.getProperty(key);
}
public static String getJdbcProperty(String key){
return jdbc_props == null ? null : jdbc_props.getProperty(key);
}
public static String getProperty(String key,String defaultValue){
return props == null ? null : props.getProperty(key, defaultValue);
}
public static Properties getProperties(){
return props;
}
}
批量导入
1、这里面包括验证了模板字段不能为空,区县跟环节要匹配上才能成功,其次这里面若导入的数据在派单时间内接单人未办结此工单时,系统又再次派单,则每多派一次,“催单”字段+1,派单失败的工单应在派单结束时系统给出提示并“本次共导入100条工单,其中**条导入失败,点击下载”。重复派单按照订单编码+环节+区县+角色, 唯一性按照订单编码+环节判断。
派单失败的情况:
1、 同一批导入工单有出现重复时;2、导入的工单,后台无此环节;
3、导入工单时,所属县分不存在后台
//批量导入Controller
@ResponseBody
@RequestMapping("/importdatas.do")
public Map<String,Object> importdatas(
@RequestParam(value="file",required=true) MultipartFile file,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
Map<String,Object> map = new HashMap<String, Object>();
String msg="";
InputStream is=null;
int state=0;
List<GdOrder> errorSeatList=new ArrayList<>();//创建一个存放导入失败的数据的集合
try {
if (file!=null){
if(this.checkFile(file)) {
is = file.getInputStream();
XSSFWorkbook wb = new XSSFWorkbook(is);
XSSFSheet sheet = wb.getSheetAt(0);//0表示第一个工作薄
int rowNum = sheet.getLastRowNum();// 文件一共多少行
// 正文内容应该从第二行开始,第一行为表头的标题
XSSFRow row=null;
List<GdUrge> gdUrgeList=new ArrayList<>();//创建一个存放催单数据的集合
List<GdOrder> GdtList=new ArrayList<>();//创建一个存放工单数据的集合
List<GdOrder> removeGdtList=new ArrayList<>();//创建一个重复
List<GdOrder> gdFlagList=new ArrayList<>();//创建一个存放未处理用来判断催单的工单数据的集合
gdFlagList=gdOrderService.queryFlag();
List<GdOrder> overFlagList=new ArrayList<>();//创建一个存放未处理用来判断催单的工单数据的集合
overFlagList=gdOrderService.queryGdFlag();
for (int i=1;i<=rowNum;i++){
boolean flag=true;
boolean flag1=false;
boolean flag2=false;
String msg1="";
String msg2="";
String msg3="";
String msg4="";
//先定义要获得属性
String myid ="";//区县
String area_id ="";//区县
String order_bm ="";//编码
String step_id ="";//环节
String mobile ="";//号码
//String pmin="";//时限
String step_role="";//时限
String step_ids="";
String area_ids="";
String overFlagid="";
row=sheet.getRow(i);//开始获取第一行数据
if (row == null){
//如果行数据为空格或者null就跳过
continue;
}
XSSFCell cell0 = row.getCell(0);
if(cell0!=null){
cell0.setCellType(Cell.CELL_TYPE_STRING);
area_id=cell0.toString().trim();
}
XSSFCell cell1 = row.getCell(1);
if(cell1!=null){
cell1.setCellType(Cell.CELL_TYPE_STRING);
order_bm=cell1.toString().trim();
}
XSSFCell cell2 = row.getCell(2);
if(cell2!=null){
cell2.setCellType(Cell.CELL_TYPE_STRING);
step_id=cell2.toString().trim();
}
XSSFCell cell3 = row.getCell(3);
if(cell3!=null){
cell3.setCellType(Cell.CELL_TYPE_STRING);
mobile=cell3.toString().trim();
}
if(area_id==null || area_id.equals("")) {
msg4="字段不能为空!";
flag=false;
}
if(order_bm==null || order_bm.equals("")) {
msg4="字段不能为空!";
flag=false;
}
if(step_id==null || step_id.equals("")) {
msg4="字段不能为空!";
flag=false;
}
if(mobile==null || mobile.equals("")) {
msg4="字段不能为空!";
flag=false;
}
if(!StringUtil.isEmpty(area_id)) {
Department departments=departmentService.querypname(area_id);//得到机构表
if(departments==null) {
msg1="没有找到对应的县区!";
flag=false;
}else {
area_ids=departments.getId();
}
}
if(!StringUtil.isEmpty(step_id)) {
GdConfig gdConfig=
gdOrderExtService.queryConfigByStepName(step_id);//得到环节表
if(gdConfig==null) {
msg2="没有找到对应的环节!";
flag=false;
}else {
step_ids=gdConfig.getId();
step_role=gdConfig.getRole_id();
//pmin=gdConfig.getAstrict_time();
}
}
for (GdOrder gdOrder : GdtList) {
//根据环节+订单编码判断同一张单是否有重复数据
if (order_bm.equals(gdOrder.getOrder_bm())&&step_ids.equals(gdOrder.getStep_id())){
msg3="数据异常,重复数据!";
flag=false;
removeGdtList.add(gdOrder);
gdOrder.setArea_id(area_id);
gdOrder.setStep_id(step_id);
gdOrder.setMsg("数据异常,重复数据!");
errorSeatList.add(gdOrder);
}
}
if(flag) {
//数据能匹配上的话
//判断是否催单
for (GdOrder gdOrder : gdFlagList) {
if (order_bm.equals(gdOrder.getOrder_bm())&&step_ids.equals(gdOrder.getStep_id())){
flag1=true;
myid=gdOrder.getId();
}
}
//判断是否重复派单
for (GdOrder gdOrder : overFlagList) {
if (area_ids.equals(gdOrder.getArea_id())&&order_bm.equals(gdOrder.getOrder_bm())
&&step_ids.equals(gdOrder.getStep_id())&&step_role.equals(gdOrder.getStep_role())
){
overFlagid=gdOrder.getId();
GdOrder gdOrders=null;
if(flag) {
//如果是重复派单又是催单的话
gdOrders=gdOrderService.queryOneWork(overFlagid);//得到催单的那个相同对象
gdOrders.setIs_repeat(gdOrders.getIs_repeat()+1);;//次数+1
gdOrderService.uporderFlag(gdOrders);//修改这一条数据
}else