/**
* 账单excel导出
*/
@ResponseBody
@RequestMapping(value = "/excelOrder", method = RequestMethod.POST)
public SystemResult excelOrder(long companyId,ApiPcOrderReq req, HttpServletRequest request, HttpServletResponse response) {
log.info("账单excel导出入参companyId={},ApiPcOrderReq={}", companyId,JSONObject.toJSONString(req));
long startTime=System.currentTimeMillis(); //获取开始时间
//根据多条件查询userList
String name=req.getUserName();
if (StringUtils.isNotBlank(name))name="%"+name+"%";
List<Integer> orderUserIds = crmUserDao.findByCondition(name, req.getOrganization_id(),req.getBranch_id());
log.info("账单excel导出|orderUserIds={}",orderUserIds.size());
log.info("根据人员id列表和其余条件拿到订单列表");
List<OrderOrder>orders = orderOrderDao.findExcelOrders(orderUserIds,
req.getPayStatus(),
req.getOrderDate(),
req.getPayTimeStart(),
req.getPayTimeEnd());
//遍历查询部门支部名称信息
List<ApiPcOrderResp.order> orderModerns=new ArrayList<ApiPcOrderResp.order>();
ExecutorService es = Executors.newCachedThreadPool();
for (OrderOrder order:
orders) {
Thread thread=new Thread(()->{
getAllNames(orderModerns, order);
});
es.execute(thread);
}
/*
* es.shutdown(); 阻止新任务的提交,但是原本已经提交的,不会受到影响,当已提交的任务全部完成后,中断闲置的线程
* es.shutdownNow(); 阻止新任务的提交,且已提交的任务也会受到影响,不等已提交的任务完成,就会中断所有的线程。
*/
es.shutdown();
log.info("账单excel导出|获取的账单数orderModerns={}", orderModerns.size());
try {
myLock(es,orderModerns,request,response,companyId);
} catch (Exception e) {
e.printStackTrace();
result=new SystemResult(Dict_transaction_result_code.SYSTEM_EXCEPTION,"账单excel导出|excel系统异常",companyId);
log.info("账单excel导出result={}", JSONObject.toJSONString(result));
return result;
}
result=new SystemResult(Dict_transaction_result_code.SUCCESS,"账单excel导出",companyId);
log.info("账单excel导出result={}", JSONObject.toJSONString(result));
long endTime=System.currentTimeMillis(); //获取开始时间
log.info("=============执行时间time={}ms",endTime-startTime);
return result;
}
private void myLock(ExecutorService es,List<ApiPcOrderResp.order> orderModerns, HttpServletRequest request, HttpServletResponse response,long companyId) throws IOException, InterruptedException {
if (es.isTerminated()) {
excelService.excelOrder(orderModerns,request,response,companyId);
} else {
Thread.sleep(1000 * 60); // 1000 毫秒,也就是1秒.1分
myLock(es,orderModerns,request,response,companyId);
}
}