ImportNumberController.java 8.84 KB
package com.uccc.number.controller;

import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.uccc.number.domain.Number;
import com.uccc.number.domain.NumberImportTask;
import com.uccc.number.domain.NumberQuery;
import com.uccc.number.service.ImportService;
import com.uccc.number.service.NumberService;
import com.uccc.number.service.RabbitMqService;
import com.uccc.pretty.common.Result;
import com.uccc.pretty.common.SystemLog;
import com.uccc.pretty.constants.ErrorCode;
import com.uccc.number.exception.ApiException;
import com.uccc.pretty.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.util.Date;
import java.util.List;

import static com.uccc.pretty.constants.ActionEnum.EXPORT_NUM_FILE;
import static com.uccc.pretty.constants.ActionEnum.UPDATE_NUMBER;
import static com.uccc.pretty.constants.ResultEnum.RESULT_ERR;
import static com.uccc.pretty.constants.ResultEnum.RESULT_OK;

/**
 * Created by bert on 2021-09-15 15:34
 */

@RestController
@RequestMapping("/import_number/")
public class ImportNumberController {
    private Logger logger = LoggerFactory.getLogger(ImportNumberController.class);

    @Autowired
    private RabbitMqService rabbitMqService;
    @Autowired
    private ImportService importService;
    @Autowired
    private NumberService numberService;
    @Value("${import.file.url}")
    private String importFileUrl;

    @RequestMapping(value="/upload", method = RequestMethod.POST)
    public Result upload(@RequestParam("file") MultipartFile file,
                         @RequestParam String status, @RequestParam String ip, HttpServletRequest request) {
        Result result = new Result();
        if (file.isEmpty()) throw new ApiException(ErrorCode.FILE_IS_EMPTY);
        String fileType = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
//        logger.info("file:{}", fileType);
        if (!fileType.equals(".xlsx")) throw new ApiException(ErrorCode.FILE_PREFIX_WRONG);
        //当前时间的 时分秒
        String fileName= DateUtils.getDate() + "_" + DateUtils.getTimeWithoutSecond().replaceAll(":", "_")+fileType;
//        String path = "/Users/bert/Desktop/";
        String path = importFileUrl;
        File checkFile = new File( path + fileName);
        if (checkFile.exists()) throw new ApiException(ErrorCode.FILE_EXIST);

        InputStream is;
        try {
            is = file.getInputStream();
            FileOutputStream fos = new FileOutputStream(path + fileName);
            byte[] b = new byte[1024];
            while ((is.read(b)) != -1) {
                fos.write(b);// 写入数据
            }
            is.close();
            fos.close();// 保存数据
            File saveFile = new File( path + fileName);
            if (saveFile.exists()) {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("name", fileName);
                jsonObject.put("cts", System.currentTimeMillis());
                jsonObject.put("type", fileType);
                jsonObject.put("path", path);
                jsonObject.put("oldName",file.getOriginalFilename());
                jsonObject.put("status", status);
                String token = request.getHeader("token");
                String userId = JWT.decode(token).getAudience().get(0);
                jsonObject.put("seller", userId);
                rabbitMqService.sendMsg(jsonObject.toJSONString());
                //
                result.setCode(RESULT_OK.getCode());
                result.setMessage(RESULT_OK.getMessage());
            }else {
                result.setCode(RESULT_ERR.getCode());
                result.setMessage(RESULT_ERR.getMessage());
            }
            String token = request.getHeader("token");
            String userId = JWT.decode(token).getAudience().get(0);
            SystemLog systemLog = new SystemLog(Long.parseLong(userId),EXPORT_NUM_FILE.getMessage(),EXPORT_NUM_FILE.getMessage(),new Date(),result.getMessage(),ip);
            importService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }



        return result;
    }


    @RequestMapping(value = "tasks",method = RequestMethod.GET)
    public Result numberImportList (@RequestParam(name = "limit") Integer limit,
                             @RequestParam(name = "page") Integer page,
                             @RequestParam(name = "status", required = false) Integer status) throws NullPointerException{

        Result result = new Result();
        List<NumberImportTask> numberImportTaskList = importService.getNumberImportTask(limit, page, status);
        if (numberImportTaskList.size() > 0) {
            int count = importService.getNumberImportTaskCount(status);
            result.setCode(RESULT_OK.getCode());
            result.setMessage(RESULT_OK.getMessage());
            JSONObject json = new JSONObject();
            json.put("count", count);
            json.put("rows", numberImportTaskList);
            result.setData(json);
        }else {
            throw new ApiException(ErrorCode.Export_TASK_NULL);
        }
        return result;
    }

    /**
     *search numbers
     * @return
     */
    @RequestMapping(value = "get_numbers",method = RequestMethod.GET)
    public Result getNumbers(@RequestParam(name = "type", required = false) String type,
                             @RequestParam(name = "currentPage") int currentPage,
                             @RequestParam(name = "pageSize", required = false) int pageSize,
                             @RequestParam(name = "city", required = false) String city,
                             @RequestParam(name = "province", required = false) String province,
                             @RequestParam(name = "law", required = false) String law,
                             @RequestParam(name = "position", required = false) String position,
                             @RequestParam(name = "network", required = false) String network,
                             @RequestParam(name = "minPrice", required = false) String minPrice,
                             @RequestParam(name = "maxPrice", required = false) String maxPrice,
                             @RequestParam(name = "sort", required = false) String sort,
                             @RequestParam(name = "vague", required = false) String vague,
                             @RequestParam(name = "exclude", required = false) List<String> exclude,
                             @RequestParam(name = "include", required = false) List<String> include){
        NumberQuery query = new NumberQuery();
        query.setCurrentPage(currentPage);
        query.setPageSize(pageSize);
        if (type != null) query.setType(type);
        if (city != null) query.setCity(city);
        if (province != null) query.setProvince(province);
        if (law != null) query.setLaw(law);
        if (position != null) query.setPosition(position);
        if (network != null) query.setNetwork(network);
        if (minPrice != null) query.setMinPrice(Integer.parseInt(minPrice));
        if (maxPrice != null) query.setMaxPrice(Integer.parseInt(maxPrice));
        if (sort != null) query.setSort(Integer.parseInt(sort));
        if (vague != null) query.setVague(vague);
        if (exclude != null) query.setExclude(exclude);
        if (include != null) query.setInclude(include);
        return numberService.getESNumbers(query);
    }

    @RequestMapping(value = "number",method = RequestMethod.PUT)
    public Result updateNumber(@RequestBody Number number,
                               @RequestParam String ip,
                               HttpServletRequest request
                               ) {
        Result result = new Result();
        if (number.getNumber() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        int updateRes = numberService.updateNumber(number);
        if (updateRes > 0) {
            result.setCode(RESULT_OK.getCode());
            result.setMessage(RESULT_OK.getMessage());
        }else {
            result.setCode(RESULT_ERR.getCode());
            result.setMessage(RESULT_ERR.getMessage());
        }
        String token = request.getHeader("token");
        String userId = JWT.decode(token).getAudience().get(0);
        SystemLog systemLog = new SystemLog(Long.parseLong(userId),UPDATE_NUMBER.getMessage(),UPDATE_NUMBER.getMessage(),new Date(),"号码" + number.getNumber() + result.getMessage(),ip);
        importService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
        return result;
    }

}