ContractController.java 12.1 KB
Newer Older
manxiaoqiang committed
1 2
package common.controller;

manxiaoqiang committed
3
import com.google.common.collect.ImmutableList;
manxiaoqiang committed
4
import common.model.*;
manxiaoqiang committed
5 6
import common.service.ContractService;
import common.service.MenuService;
manxiaoqiang committed
7
import common.task.ContractSendEmailThread;
manxiaoqiang committed
8
import dic.OperateObjectTypeEnum;
manxiaoqiang committed
9 10 11
import exception.TipException;
import org.apache.commons.io.IOUtils;
import org.joda.time.DateTime;
manxiaoqiang committed
12
import org.springframework.beans.factory.annotation.Autowired;
manxiaoqiang committed
13 14
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
manxiaoqiang committed
15
import org.springframework.http.MediaType;
manxiaoqiang committed
16
import org.springframework.http.ResponseEntity;
manxiaoqiang committed
17 18 19
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import security.annotation.CurrentAccount;
manxiaoqiang committed
20
import util.NewUserLogThread;
manxiaoqiang committed
21
import util.ResultModel;
manxiaoqiang committed
22
import util.UserLogThread;
manxiaoqiang committed
23
import util.ValidateUtil;
manxiaoqiang committed
24

manxiaoqiang committed
25
import javax.servlet.http.HttpServletRequest;
manxiaoqiang committed
26 27 28 29 30 31
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
manxiaoqiang committed
32
import java.net.URLConnection;
manxiaoqiang committed
33 34 35
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;
manxiaoqiang committed
36
import java.util.HashMap;
manxiaoqiang committed
37
import java.util.List;
manxiaoqiang committed
38
import java.util.Map;
manxiaoqiang committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

/**
 * Created by mxq on 17/12/21.
 * 优先测试账号查询
 */
@Controller
@RequestMapping("{platform}/contract")
public class ContractController {

    @Autowired
    private ContractService service;


    @RequestMapping(value = "find", method = RequestMethod.GET)
    @ResponseBody
manxiaoqiang committed
54 55 56
    public ResultModel findAll(@CurrentAccount User loginAccount, @PathVariable String platform,
                               @RequestParam String startDate, @RequestParam String endDate) {
        return ResultModel.OK(service.findAll(startDate, endDate, platform));
manxiaoqiang committed
57 58
    }

manxiaoqiang committed
59
    @RequestMapping(value = "export", method = RequestMethod.GET,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
manxiaoqiang committed
60
    @ResponseBody
manxiaoqiang committed
61
    public ResponseEntity<byte[]> export(@CurrentAccount User loginAccount, @PathVariable String platform, @RequestParam String startDate
manxiaoqiang committed
62 63
                                , @RequestParam String endDate, HttpServletRequest request, HttpServletResponse response) {
        List<Contract> contractList = service.findAll(startDate, endDate, platform);
manxiaoqiang committed
64 65 66 67 68
        Map<String, String> map = new HashMap<>();
        map.put("wait", "未执行");
        map.put("executing", "执行中");
        map.put("end", "已结束");
        map.put("cancel", "作废");
manxiaoqiang committed
69

manxiaoqiang committed
70 71
        byte[] content = new byte[0];
        StringBuilder sb = new StringBuilder();
manxiaoqiang committed
72
        sb.append("时间,合同编号,客户账号,签约方,销售,开始日期,结束日期,套餐类型,合同金额,折扣,收款金额,合同状态\r\n");
manxiaoqiang committed
73 74
        if(ValidateUtil.isValid(contractList)){
            for (Contract c : contractList){
manxiaoqiang committed
75
                sb.append(c.getDs()).append(",").append(c.getContractCode()).append(",").append(c.getEmail()).append(",").append(c.getCustomerBody()).append(",").append(c.getSaleName()).append(",")
manxiaoqiang committed
76
                        .append(c.getStartDate()).append(",").append(c.getEndDate()).append(",").append(c.getPriceLevelName()).append(",").append(c.getMoney()).append(",").append(c.getRebate()).append(",").append(c.getPayMoney()).append(",")
manxiaoqiang committed
77
                        .append(map.get(c.getStatus())).append("\r\n");
manxiaoqiang committed
78 79 80 81 82 83 84 85 86
            }
        }
        InputStream in =  new  ByteArrayInputStream(sb.toString().getBytes());
        try {
            content  = IOUtils.toByteArray(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        HttpHeaders headers = new HttpHeaders();
manxiaoqiang committed
87 88
        response.setHeader("filename", "contract.csv");
        response.setHeader("content-disposition", "attachment; filename=contract.csv");
manxiaoqiang committed
89 90
        response.setHeader("Content-Type","text/csv");
        response.setContentType("APPLICATION/OCTET-STREAM");
manxiaoqiang committed
91

manxiaoqiang committed
92 93
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), platform, "导出合同", startDate, endDate, request);
        userlog.start();
manxiaoqiang committed
94 95 96 97 98 99
        //返回文件字符串
        return new ResponseEntity<byte[]>(content, headers, HttpStatus.CREATED);
    }

    @RequestMapping(value = "pay/export", method = RequestMethod.GET,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    @ResponseBody
manxiaoqiang committed
100
    public ResponseEntity<byte[]> exportPay(@CurrentAccount User loginAccount, @RequestParam String startDate, @RequestParam String endDate,
manxiaoqiang committed
101 102
                                             HttpServletRequest request, HttpServletResponse response, @PathVariable String platform) {
        List<ContractMoney> moneyList = service.findPayAll(startDate, endDate, platform);
manxiaoqiang committed
103 104 105
        Map<String, String> map = new HashMap<>();
        map.put("pay", "收款");
        map.put("invoice", "收票");
manxiaoqiang committed
106 107 108 109 110 111

        byte[] content = new byte[0];
        StringBuilder sb = new StringBuilder();
        sb.append("合同编号 ,客户账号 ,签约方 ,事项 ,金额 ,日期 ,修改人 \r\n");
        if(ValidateUtil.isValid(moneyList)){
            for (ContractMoney c : moneyList){
manxiaoqiang committed
112
                sb.append(c.getContractCode()).append(",").append(c.getEmail()).append(",").append(c.getCompany()).append(",").append(map.get(c.getType())).append(",")
manxiaoqiang committed
113
                        .append(c.getMoney()).append(",").append(c.getDs()).append(",").append(c.getCreateName()).append("\r\n");
manxiaoqiang committed
114 115
            }
        }
manxiaoqiang committed
116 117 118 119 120 121
        InputStream in =  new  ByteArrayInputStream(sb.toString().getBytes());
        try {
            content  = IOUtils.toByteArray(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
manxiaoqiang committed
122
        HttpHeaders headers = new HttpHeaders();
manxiaoqiang committed
123 124 125 126 127
        response.setHeader("filename", "contract_pay.csv");
        response.setHeader("content-disposition", "attachment; filename=contract_pay.csv");
       // response.setHeader("Content-Type", "application/octet-stream;charset=UTF-8");
        response.setHeader("Content-Type","text/csv");
        response.setContentType("APPLICATION/OCTET-STREAM");
manxiaoqiang committed
128

manxiaoqiang committed
129 130
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), platform, "导出收款开票", startDate, endDate, request);
        userlog.start();
manxiaoqiang committed
131 132 133 134
        //返回文件字符串
        return new ResponseEntity<byte[]>(content, headers, HttpStatus.CREATED);
    }

manxiaoqiang committed
135 136 137 138 139 140
    @RequestMapping(value = "findone", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findOne(@CurrentAccount User loginAccount, @RequestParam String code) {
        return ResultModel.OK(service.findOne(code));
    }

manxiaoqiang committed
141 142
    @RequestMapping(value = "checkAccount", method = RequestMethod.GET)
    @ResponseBody
manxiaoqiang committed
143 144
    public ResultModel checkAccount(@CurrentAccount User loginAccount, @RequestParam String email, @PathVariable String platform) {
        return ResultModel.OK(service.checkAccount(email, platform));
manxiaoqiang committed
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
    }

    @RequestMapping(value = "find/body", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findBody(@CurrentAccount User loginAccount) {
        return ResultModel.OK(service.findBody());
    }

    @RequestMapping(value = "find/code", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findCode(@CurrentAccount User loginAccount, @RequestParam String code) {
        return ResultModel.OK(service.getContractCode(code));
    }

    @RequestMapping(value = "find/pricelevel", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findPricelevel(@CurrentAccount User loginAccount) {
        return ResultModel.OK(service.findSetmeal());
    }

    @RequestMapping(value = "find/rebat", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel rebat(@CurrentAccount User loginAccount, @RequestParam String product,
                             @RequestParam Integer level, @RequestParam Long money) {
        return ResultModel.OK(service.getRebat(product, level, money));
    }

    @RequestMapping(value = "find/sale", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel rebat(@CurrentAccount User loginAccount) {
        return ResultModel.OK(service.getSales());
    }


    @RequestMapping(value = "create", method = RequestMethod.POST)
    @ResponseBody
manxiaoqiang committed
181 182
    public ResultModel create(@CurrentAccount User loginAccount, @RequestBody Contract contract, HttpServletRequest request) {
        Contract contract1 = service.create(loginAccount, contract);
manxiaoqiang committed
183
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), contract1.getContractCode(), "新建合同","",contract1.toString(), request);
manxiaoqiang committed
184
        userlog.start();
manxiaoqiang committed
185 186 187

        ContractSendEmailThread email = new ContractSendEmailThread(contract);
        email.start();
manxiaoqiang committed
188
        return ResultModel.OK(contract1);
manxiaoqiang committed
189
    }
manxiaoqiang committed
190 191 192

    @RequestMapping(value = "update", method = RequestMethod.PUT)
    @ResponseBody
manxiaoqiang committed
193 194
    public ResultModel update(@CurrentAccount User loginAccount, @RequestBody Contract contract, HttpServletRequest request) {
        Contract contract1 = service.update(loginAccount, contract);
manxiaoqiang committed
195
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), contract1.getContractCode(), "修改合同","",contract1.toString(), request);
manxiaoqiang committed
196 197
        userlog.start();
        return ResultModel.OK(contract1);
manxiaoqiang committed
198 199 200 201
    }

    @RequestMapping(value = "pay", method = RequestMethod.POST)
    @ResponseBody
manxiaoqiang committed
202 203
    public ResultModel pay(@CurrentAccount User loginAccount, @RequestBody ContractMoney contract, HttpServletRequest request) {
        ContractMoney contract1 = service.pay(loginAccount, contract);
manxiaoqiang committed
204
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), contract1.getContractCode(), "收款开票","",contract1.toString(), request);
manxiaoqiang committed
205 206
        userlog.start();
        return ResultModel.OK(contract1);
manxiaoqiang committed
207 208 209 210
    }

    @RequestMapping(value = "change", method = RequestMethod.POST)
    @ResponseBody
manxiaoqiang committed
211 212
    public ResultModel change(@CurrentAccount User loginAccount, @RequestBody ContractChange contract, HttpServletRequest request) {
        Contract contract1 = service.change(loginAccount, contract);
manxiaoqiang committed
213
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), contract1.getContractCode(), "修改套餐","",contract1.toString(), request);
manxiaoqiang committed
214 215
        userlog.start();
        return ResultModel.OK(contract1);
manxiaoqiang committed
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233
    }

    @RequestMapping(value = "find/pay", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findPay(@CurrentAccount User loginAccount, @RequestParam String startDate,
                               @RequestParam String endDate, @RequestParam String code) {
        return ResultModel.OK(service.findPay(startDate, endDate, code));
    }

    @RequestMapping(value = "find/change", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findChange(@CurrentAccount User loginAccount, @RequestParam String startDate,
                                  @RequestParam String endDate, @RequestParam String code) {
        return ResultModel.OK(service.findChange(startDate, endDate, code));
    }

    @RequestMapping(value = "update/pay", method = RequestMethod.PUT)
    @ResponseBody
manxiaoqiang committed
234 235
    public ResultModel updatePay(@CurrentAccount User loginAccount, @RequestBody ContractMoney contract, HttpServletRequest request) {
        Contract contract1 = service.updatePay(loginAccount, contract);
manxiaoqiang committed
236
        NewUserLogThread userlog = new NewUserLogThread(loginAccount.getEmail(), loginAccount.getName(), OperateObjectTypeEnum.CUSTOMER.getKey(), contract1.getContractCode(), "修改收款开票","", service.updatePay(loginAccount, contract).toString(), request);
manxiaoqiang committed
237 238
        userlog.start();
        return ResultModel.OK(contract1);
manxiaoqiang committed
239
    }
manxiaoqiang committed
240 241 242 243

    @RequestMapping(value = "find/payall", method = RequestMethod.GET)
    @ResponseBody
    public ResultModel findPayAll(@CurrentAccount User loginAccount, @RequestParam String startDate,
manxiaoqiang committed
244 245
                               @RequestParam String endDate, @PathVariable String platform) {
        return ResultModel.OK(service.findPayAll(startDate, endDate, platform));
manxiaoqiang committed
246
    }
manxiaoqiang committed
247 248


manxiaoqiang committed
249
}