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 ){ String data= HttpUtils.sendPost(insuredUrl,setParams(JSONObject.toJSONString(bodyMap)),bodyMap); 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*/ String data= HttpUtils.sendPost(uploadUrl,setParams(JSONObject.toJSONString(bodyMap)),bodyMap); 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*/ String data= HttpUtils.sendPost(uploadUrl2,setParams2(JSONObject.toJSONString(bodyMap)),bodyMap); 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(); /*获取该企业下所有未投保员工*/ List<YgglMainEmp> ygglMainEmpList = YgglMainEmp.builder().build().selectList(new QueryWrapper<YgglMainEmp>().lambda().eq(YgglMainEmp::getOrgCode,userBean.getOrgCode()) .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(); } } } }