NumberController.java 13 KB
package com.uccc.number.controller;

import com.alibaba.fastjson.JSONObject;
import com.auth0.jwt.JWT;
import com.uccc.number.domain.*;
import com.uccc.number.domain.Number;
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.Store;
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.*;
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("/number/")
public class NumberController {
    private Logger logger = LoggerFactory.getLogger(NumberController.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 = "status") int status,
                             @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 - 1);
        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);
        query.setStatus(status);
        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.getNumbers() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        int updateRes = numberService.updateNumber(number);
        if (updateRes == number.getNumbers().size()) {
            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;
    }

    @RequestMapping(value = "status_count", method = RequestMethod.GET)
    public Result getStatusCount() {
        StatusCount statusCount = numberService.getStatusCount();
        return new Result().success(statusCount);
    }

    @RequestMapping(value = "bind_bless_num", method = RequestMethod.POST)
    public Result bindBlessNumbers(@RequestParam String ip,
                                   @RequestBody BindBlessNum bindBlessNum,
                                   HttpServletRequest request) {
        if (bindBlessNum.getNumbers().size() == 0) throw new ApiException(ErrorCode.BIND_FAILED);
        if (bindBlessNum.getUserId() == null || bindBlessNum.getBlessPrice() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        numberService.bindBlessNumbers(bindBlessNum);
        String token = request.getHeader("token");
        String userId = JWT.decode(token).getAudience().get(0);
        SystemLog systemLog = new SystemLog(Long.parseLong(userId), BIND_BLESS_NUM.getMessage(), BIND_BLESS_NUM.getMessage(), new Date(), "用户绑定福袋号码 用户:" + userId, ip);
        importService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
        return new Result().success("");
    }

    @RequestMapping(value = "unbind_bless_num", method = RequestMethod.DELETE)
    public Result unbindBlessNumbers(@RequestParam String ip,
                                     @RequestBody BindBlessNum bindBlessNum,
                                     HttpServletRequest request) {
        if (bindBlessNum.getNumbers().size() == 0) throw new ApiException(ErrorCode.BIND_FAILED);
        if (bindBlessNum.getUserId() == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        numberService.unbindBlessNumbers(bindBlessNum);
        String token = request.getHeader("token");
        String userId = JWT.decode(token).getAudience().get(0);
        SystemLog systemLog = new SystemLog(Long.parseLong(userId), UNBIND_BLESS_NUM.getMessage(), UNBIND_BLESS_NUM.getMessage(), new Date(), "用户绑定福袋号码 用户:" + userId, ip);
        importService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
        return new Result().success("");
    }

    @RequestMapping(value = "delete_bless_num", method = RequestMethod.DELETE)
    public Result unbindBlessNumbers(@RequestParam String ip,
                                     @RequestParam String number,
                                     HttpServletRequest request) {
        if (number == null) throw new ApiException(ErrorCode.INVALID_PARAM);
        numberService.deleteBlessNum(number);
        String token = request.getHeader("token");
        String userId = JWT.decode(token).getAudience().get(0);
        SystemLog systemLog = new SystemLog(Long.parseLong(userId), DELETE_BLESS_NUM.getMessage(), DELETE_BLESS_NUM.getMessage(), new Date(), "管理员" + userId + "删除福袋号码:" + number, ip);
        importService.sendSystemLogToRabbitMq(JSONObject.toJSONString(systemLog));
        return new Result().success("");
    }

    @RequestMapping(value = "bless_num_list", method = RequestMethod.GET)
    public Result blessNumList(@RequestParam(name = "city", required = false) String city,
                               @RequestParam(name = "province", required = false) String province,
                               @RequestParam(name = "storeId", required = false) Long storeId,
                               @RequestParam(name = "pageSize") Integer pageSize,
                               @RequestParam(name = "currentPage") Integer currentPage) {
        JSONObject json = new JSONObject();
        Store checkStore = null;
        if (storeId != null) {
            checkStore = numberService.checkStoreByMid(storeId);
            if (checkStore == null) throw new ApiException(ErrorCode.STORE_NOT_FOUND);
        }
        Long userId = null;
        if (checkStore != null) {
            userId = checkStore.getKeeper();
        }
        List<BlessNumberEntity> nums = numberService.getBlessNumList(city, province, userId, pageSize, currentPage-1);
        int listCount = numberService.getBlessNumListCount(city, province, userId);
        json.put("count", listCount);
        json.put("rows", nums);
        return new Result().success(json);
    }
}