InsureContorll.java 14.1 KB
Newer Older
翁国栋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 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 181 182 183 184 185 186 187 188 189 190 191 192 193
package cn.timer.api.controller.insure;

//import cn.timer.api.bean.insure.InsuredUser;
import cn.timer.api.bean.qyzx.QyzxEntInfoM;
import cn.timer.api.bean.yggl.YgglMainEmp;
import cn.timer.api.config.annotation.CurrentUser;
import cn.timer.api.config.annotation.UserBean;
import cn.timer.api.utils.*;
import com.alibaba.druid.util.Base64;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.beust.jcommander.internal.Lists;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.google.common.collect.Maps;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;

import com.alibaba.fastjson.JSONObject;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * @Description TODO
 * @Author wgd
 * @Date 2022/3/1 11:34
 */
@Api(tags = "8.0保险列表")
@RestController
@Transactional
@RequestMapping(value = "/insure", produces = {"application/json"})
public class InsureContorll {
    private static final Logger log = LoggerFactory.getLogger(InsureContorll.class);
    /*测试用*/
    private static String appid = "1002303100602312445";
    /*测试用*/
    private static String secret = "acb329868c31d5b3ba03de40dac13dd9";

    /*保全测试用*/
    private static String appidq="1000115041006006938";
    /*保全测试用*/
    private static String secretq="6ba1bf4aa0bd14368c95ff0b9934a17b";


    /*测试用投保上传文件地址*/
    private static String uploadUrl = " http://sandbox.portal.unistar-ins.com/service/Home/Index/fileUpload";
    /*测试用投保申请地址*/
    private static String insuredUrl = "http://sandbox.portal.unistar-ins.com/mall/Home/Index/createQuotePolicy";
    /*测试用保全上传文件地址*/
    private static String uploadUrl2 = "http://sandbox.portal.unistar-ins.com/fuli/Home/Index/file_upload";


    /**
     * 设置请求参数
     * @param sign
     * @return
     */
    private Map setParams(String sign){
        /*当前时间戳*/
        long timestamp =System.currentTimeMillis()/1000;
        log.info("时间戳"+timestamp);
        Map paramsMap = Maps.newHashMap();
        paramsMap.put("pid",appid);
        paramsMap.put("timestamp",String.valueOf(timestamp));
        paramsMap.put("trace_id",appid+timestamp+ new Random().nextInt((9999 - 100) + 1) + 10);
//        paramsMap.put("sign",Md5.md5(appid+secret+timestamp+sign.trim()));

        String value=appid+secret+timestamp+sign;
        log.info("body参数======"+sign);
        paramsMap.put("sign", DigestUtils.md5Hex(value));
        log.info("params参数======"+JSONObject.toJSONString(paramsMap));
        return paramsMap;
    }
    /*保全*/
    private Map setParams2(String sign){
        /*当前时间戳*/
        long timestamp =System.currentTimeMillis()/1000;
        log.info("时间戳"+timestamp);
        Map paramsMap = Maps.newHashMap();
        paramsMap.put("pid",appidq);
        paramsMap.put("timestamp",String.valueOf(timestamp/1000));
        paramsMap.put("trace_id",appidq+timestamp+ new Random().nextInt((9999 - 100) + 1) + 10);
//        paramsMap.put("sign",Md5.md5(appidq+secret+timestamp+sign.trim()));

        String value=appidq+secretq+timestamp+sign;
        log.info("body参数======"+sign);
        paramsMap.put("sign", DigestUtils.md5Hex(value));
        log.info("params参数======"+JSONObject.toJSONString(paramsMap));
        return paramsMap;
    }

    @PostMapping(value = "/insured_add")
    @ApiOperation(value = "1.投保申请", httpMethod = "Post", notes = "投保申请")
    @ApiOperationSupport(order = 2)
    public Result<Object> insured_add(@CurrentUser UserBean userBean, @RequestParam(required = true) String url) {
        QyzxEntInfoM qyzxEntInfoM = QyzxEntInfoM.builder().id(userBean.getOrgCode()).build().selectById(); // 企业信息
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
        LocalDateTime now = LocalDateTime.now();
        Map bodyMap = Maps.newHashMap();
        ArrayList<Map> quotationsArry = new ArrayList<Map>();
        bodyMap.put("is_ss",0);
        Map quotations=Maps.newHashMap();
        quotations.put("trans_id","MB_"+dtf2.format(now));/*报价请求流水号*/
        quotations.put("applicant_type","2");/*投保人类型:2-企业*/
        quotations.put("quotation_type",3);/*报价类型:3-投保申请*/
        quotations.put("currency","5");/*币种:5人民币*/
        quotations.put("source_type","");/*币种:5人民币*/
        quotations.put("cps_email","");/*币种:5人民币*/
        quotations.put("cps_tel","");/*币种:5人民币*/
        quotations.put("last_serial_number","");/*币种:5人民币*/
        quotations.put("from_source","");/*币种:5人民币*/
        quotations.put("operator_name","");/*币种:5人民币*/

        Map basicMap = Maps.newHashMap();
        basicMap.put("partner_pid","1231");/*分销商pid*/
        basicMap.put("plan_code_id","61b85207b73d2ab09fb2959");/*计划代码,选项值:61b85207b73d2ab09fb2959 (生产环境) 61b85207b73d2ab09fb2959 (沙箱环境)*/
        basicMap.put("product_code_id","61b85207a9f87da19fb5986");/*产品代码,选项值:61b85207a9f87da19fb5986 (生产环境) 61b85207a9f87da19fb5986 (沙箱环境)*/
        basicMap.put("policy_date_start","2022-04-01 00:00:00");
        basicMap.put("policy_date_end","2022-4-30 23:59:59");
        basicMap.put("channel","");
        basicMap.put("fee","");
        basicMap.put("partner_user_rate","");
        basicMap.put("promotion_fee","");
        basicMap.put("agent_id","");
        basicMap.put("policy_insure_notify","");
        basicMap.put("promotion_id",0);
        basicMap.put("policy_number_last_year","");
        quotations.put("basic",basicMap);
        quotations.put("individual_applicant",Maps.newHashMap());

        /*企业信息*/
        Map companyApplicantMap = Maps.newHashMap();
        companyApplicantMap.put("applicant_e_name","测试企业一");/*企业/网点名称*/
        companyApplicantMap.put("applicant_e_address", "测试地址");/*企业/网点地址*/
        companyApplicantMap.put("applicant_e_contacts", "测试人");/*企业授权操作人姓名*/
        companyApplicantMap.put("applicant_e_phone", "13800138000");/*操作人的联系电话*/
        companyApplicantMap.put("applicant_e_no_type", "3646");/*企业证件类型*/
        companyApplicantMap.put("applicant_e_no", "91310230MA1JXL5059");/*企业证件号码*/
        companyApplicantMap.put("applicant_e_mail", "123@123.com");/*企业邮箱*/
        companyApplicantMap.put("applicant_province_city", "21721");/*省市区*/
        /*人员清单填被保人员*/
        companyApplicantMap.put("applicant_employee_list",url);
        quotations.put("company_applicant",companyApplicantMap);


        /*被保人员 填被保企业信息*/
        ArrayList<Map> insuredArray = new ArrayList<>();
        Map insured = Maps.newHashMap();
        insured.put("trans_id","P_"+qyzxEntInfoM.getId()+"_"+dtf2.format(now));
        insured.put("price","75");
        insured.put("insured_applicant_relations", "36960");
        insured.put("insured_mobile", qyzxEntInfoM.getLinkManPhone());
        insured.put("insured_e_contact", qyzxEntInfoM.getLinkMan());
        insured.put("insured_name", qyzxEntInfoM.getName());
        insured.put("insured_no_type", "3306");
        insured.put("insured_no", qyzxEntInfoM.getCreditCode());
        insured.put("insured_zm_openid", "");
        insured.put("benefit_basic_plan", "36969");
        insured.put("benefit_occupation_category", "63119");
        insured.put("benefit_EL_employee_number_t", "5");
        insuredArray.add(insured);
        quotations.put("insured",insuredArray);



        /*quotations.put("bd_id","");不需要*/
        quotations.put("file",Lists.newArrayList());
        quotations.put("specifically_agreed_file", Lists.newArrayList());
        quotations.put("policy_no", "");
        quotations.put("callback_policy", "/callBack/insuredCallBack");
        quotations.put("insured",insuredArray);
        quotationsArry.add(quotations);
        bodyMap.put("quotations",quotationsArry);
        log.info(JSONObject.toJSONString(bodyMap));
        Object o=requestAgent(bodyMap);
        return ResultUtil.data(o);

    }
    /*测试用生产环境不需要*/
    synchronized private Object requestAgent(Map bodyMap ){
194
        String data= HttpUtils.sendPost(insuredUrl,setParams(JSONObject.toJSONString(bodyMap)),bodyMap);
翁国栋 committed
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
        Map<String,Object> dataMap = JSONObject.parseObject(data);
        if (dataMap.get("errcode").toString().equals("suc")) {
            return dataMap.get("data");
        }else{
            if(dataMap.get("errcode").toString().equals("e1")&&dataMap.get("errmsg").toString().equals("出单中")){
                try {
                    Thread.sleep(30000);
                    requestAgent(bodyMap);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
            return dataMap.get("data");
        }
    }



    @PostMapping (value = "/file_upload")
    @ApiOperation(value = "3.投保上传文件", httpMethod = "Post", notes = "上传文件")
    @ApiOperationSupport(order = 2)
    public Result<Object> fileUpload(@CurrentUser UserBean userBean, @RequestParam(required = true) MultipartFile file) {
        if (file == null) {
            return ResultUtil.error("上传失败,请选择上传文件");
        }
        byte[] bytes =null;
        try {
            bytes=file.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
            log.warn("文件转换Base64异常");
        }
        String fileBase64= Base64.byteArrayToBase64(bytes);
        /*body参数 begin*/
        Map bodyMap= Maps.newHashMap();
        bodyMap.put("app","mall");
        bodyMap.put("name",file.getName());
        bodyMap.put("file",fileBase64);
        /*end*/
235
        String data= HttpUtils.sendPost(uploadUrl,setParams(JSONObject.toJSONString(bodyMap)),bodyMap);
翁国栋 committed
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260
        log.info("请求返回的结果====="+data);
        /*文件流base64*/
        return ResultUtil.data(message(data));
    };
    @PostMapping (value = "/file_upload2")
    @ApiOperation(value = "3.保全上传文件", httpMethod = "Post", notes = "上传文件")
    @ApiOperationSupport(order = 2)
    public Result<Object> fileUpload2(@CurrentUser UserBean userBean, @RequestParam(required = true) MultipartFile file) {
        if (file == null) {
            return ResultUtil.error("上传失败,请选择上传文件");
        }
        byte[] bytes =null;
        try {
            bytes=file.getBytes();
        } catch (IOException e) {
            e.printStackTrace();
            log.warn("文件转换Base64异常");
        }
        String fileBase64= Base64.byteArrayToBase64(bytes);
        /*body参数 begin*/
        Map bodyMap= Maps.newHashMap();
//        bodyMap.put("app","mall");
//        bodyMap.put("name","劳务公司批增-月单(1).xlsx");
        bodyMap.put("file",fileBase64);
        /*end*/
261
        String data= HttpUtils.sendPost(uploadUrl2,setParams2(JSONObject.toJSONString(bodyMap)),bodyMap);
翁国栋 committed
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292
        log.info("请求返回的结果====="+data);
        /*文件流base64*/
        return ResultUtil.data(message(data));
    };

//    @PostMapping(value = "/baoquan")
//    @ApiOperation(value = "2.单个添加保全", httpMethod = "Post", notes = "上传文件")
//    @ApiOperationSupport(order = 2)
//    public Result<Object> baoquan_add(InsuredUser user) {
//return null;
//    }

    /**
     * 设置错误信息
     * @param data
     * @return
     */
    private Object message(String data){
        Map<String,Object> dataMap = JSONObject.parseObject(data);
        if (dataMap.get("errcode").toString().equals("suc")) {
            return dataMap.get("data");
        }
          return dataMap.get("errmsg");
        }

    @GetMapping(value = "/downExcel")
    @ApiOperation(value = "2.下载投保文件", httpMethod = "Get", notes = "下载投保文件")
    @ApiOperationSupport(order = 2)
    public void downExcel(@CurrentUser UserBean userBean, HttpServletRequest request, HttpServletResponse resp){
        LocalDate localDate = LocalDate.now();
        /*获取该企业下所有未投保员工*/
293
        List<YgglMainEmp> ygglMainEmpList = YgglMainEmp.builder().build().selectList(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode,userBean.getOrgCode())
翁国栋 committed
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323
                .eq(YgglMainEmp::getIsInsure,0));
        List list=Lists.newArrayList();
        for (YgglMainEmp y:ygglMainEmpList.subList(0,5)) {
            String[] arr =new String[]{String.valueOf(y.getId()),y.getName(),"身份证",y.getZjNum(),"50万意外/5万医疗/扩展24小时(A类)","","深圳名邦人力资源管理有限公司","无","A类"};
            list.add(arr);
        }
        String[] rowName=new String[]{"ID","name","ID_type","ID_number","Scheme_name","Date_start","Branch","Tricycle_frame_number","benefit_occupation_category"};
        /*随机抽取五名幸运用户投保*/
        OutputStream os = null;
        try {
            resp.setContentType("application/octet-stream");
            resp.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(localDate+"_"+list.size()+"名人员清单.xlsx", "UTF-8"));
            resp.setCharacterEncoding("UTF-8");
            os = resp.getOutputStream();
            ExcelUtils.exportExcel(localDate+"_"+list.size()+"名人员清单.xlsx",rowName,list,os);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}