package com.goafanti.order.controller; import java.io.IOException; import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Set; import java.util.TreeSet; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.goafanti.common.bo.Error; import com.goafanti.common.bo.Result; import com.goafanti.common.controller.CertifyApiController; import com.goafanti.common.model.TOrderNew; import com.goafanti.common.utils.ExcelUtils; import com.goafanti.common.utils.ExportExcelUtil; import com.goafanti.common.utils.StringUtils; import com.goafanti.core.shiro.token.TokenManager; import com.goafanti.order.bo.OrderReportBo; import com.goafanti.order.bo.TOrderBonusBo; import com.goafanti.order.service.FundManageOrderService; import com.goafanti.order.service.OrderBonusService; import com.goafanti.order.service.OrderReportService; import com.goafanti.permission.service.NewRoleService; @RestController @RequestMapping(value = "/api/admin/bonus") public class OrderBonusStatisticsApiController extends CertifyApiController { @Resource private FundManageOrderService fundManageOrderServiceImpl; @Resource private OrderBonusService orderBonusServiceImpl; @Resource private OrderReportService orderReportServiceImpl; @Resource private NewRoleService newRoleService; @Value(value = "${upload.private.path}") private String uploadPrivatePath = null; /** * 财务专员校对单量 * @param orderNew * @return */ @RequestMapping(value="/proofreading", method = RequestMethod.POST) public Result proofreading(TOrderNew orderNew){ Result res = new Result(); res.setData(fundManageOrderServiceImpl.updateProofreading(orderNew)); return res; } /** * 营销员奖金统计 * @param orderNewBo * @return */ @RequestMapping(value="/saleBonusStatistics", method = RequestMethod.GET) public Result saleBonusStatistics(TOrderBonusBo bonusBo, Integer pageNo, Integer pageSize){ Result res = new Result(); bonusBo.setGrantBy(TokenManager.getAdminId()); res.setData(orderBonusServiceImpl.saleBonusStatistics(bonusBo, pageNo, pageSize)); return res; } /** * 财务专员发放营销员奖金 * @param id * @return */ @RequestMapping(value="/bonusPayment", method = RequestMethod.POST) public Result bonusPayment(String id,String orderNo){ Result res = new Result(); Integer i = orderBonusServiceImpl.updateBounsPaymnetStatus(id, orderNo); if(i>0){ res.setData("发放成功!"); }else{ res.getError().add(buildError("", "没有校对单量,不能发放")); } return res; } /** * 财务专员查看技术员奖金数据 * @param bonusBo * @param pageNo * @param pageSize * @return */ @RequestMapping(value="/technicianBonusStatistics", method = RequestMethod.GET) public Result technicianBonusStatistics(TOrderBonusBo bonusBo,Integer pageNo, Integer pageSize){ Result res = new Result(); bonusBo.setGrantBy(TokenManager.getAdminId()); res.setData(orderBonusServiceImpl.technicianBonusStatistics(bonusBo, pageNo, pageSize)); return res; } /** * 财务专员发放技术员的奖金操作 * @param id * @return */ @RequestMapping(value="/changeBonus", method = RequestMethod.POST) public Result changeBonus(String id){ Result res = new Result(); res.setData(orderBonusServiceImpl.updateChangeBonus(id)); return res; } /** * * @param bonusBo * @param response * @return * @throws IOException */ @RequestMapping(value="/exportSaleBonusData", method = RequestMethod.GET) public Result exportSaleBonusData(TOrderBonusBo bonusBo,HttpServletResponse response) throws IOException{ OutputStream out = response.getOutputStream(); Result res = new Result(); bonusBo.setGrantBy(TokenManager.getAdminId()); XSSFWorkbook wb = orderBonusServiceImpl.exportSaleBonusData(bonusBo); if(null == wb){ wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("没有营销员奖金记录"); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("没有营销员奖金记录"); } String fileName = "营销员奖金统计" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls"; response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1")); response.setContentType("application/octet-stream;charset=utf-8"); try { // 返回数据流 wb.write(out); out.flush(); out.close(); } finally { out.flush(); out.close(); } return res; } /** * 导出技术员(咨询师)的奖金数据 * @param bonusBo * @param response * @return * @throws IOException */ @RequestMapping(value="/exportTechnicianBonusData", method = RequestMethod.GET) public Result exportTechnicianBonusData(TOrderBonusBo bonusBo,HttpServletResponse response) throws IOException{ OutputStream out = response.getOutputStream(); Result res = new Result(); bonusBo.setGrantBy(TokenManager.getAdminId()); XSSFWorkbook wb = orderBonusServiceImpl.exportTechnicianBonusData(bonusBo); if(null == wb){ wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("没有技术员奖金记录"); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("没有技术员奖金记录"); } String fileName = "技术员奖金统计" + new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()) + ".xls"; response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1")); response.setContentType("application/octet-stream;charset=utf-8"); try { // 返回数据流 wb.write(out); out.flush(); out.close(); } finally { out.flush(); out.close(); } return res; } /** * 订单报表统计数据 * @param reportBo * @param pageNo * @param pageSize * @return * @throws IOException */ @RequestMapping(value="/orderReportList", method = RequestMethod.GET) public Result orderReportList(OrderReportBo reportBo, Integer pageNo, Integer pageSize) throws IOException{ Result res = new Result(); if(null == reportBo.getMonth() || null == reportBo.getMonth1()){ res.getError().add(buildError("", "没有指定订单日期")); return res; } res.setData(orderReportServiceImpl.getOrderReportData(reportBo, pageNo, pageSize)); return res; } /** * 导出订单数据 * @param orderReportBo * @param response * @return * @throws IOException */ @RequestMapping(value="/exportOrderData", method = RequestMethod.GET) public Result exportOrderData(OrderReportBo orderReportBo,HttpServletResponse response) throws IOException{ //判断当前登录的角色 Result res = new Result(); if(null == orderReportBo.getMonth() || null == orderReportBo.getMonth1()){ res.getError().add(buildError("", "没有指定订单日期")); return res; } String date = orderReportBo.getMonth() == orderReportBo.getMonth1() ? orderReportBo.getMonth().toString() : orderReportBo.getMonth() + "-" + orderReportBo.getMonth1(); OutputStream out = response.getOutputStream(); XSSFWorkbook wb = orderReportServiceImpl.exportMonthData(orderReportBo, date); if(null == wb){ wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet("没有订单统计记录"); XSSFRow row = sheet.createRow(0); XSSFCell cell = row.createCell(0); cell.setCellValue("没有订单统计记录"); } String fileName = "订单统计" + date + ".xls"; response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1")); response.setContentType("application/octet-stream;charset=utf-8"); try { // 返回数据流 wb.write(out); out.flush(); out.close(); } finally { out.flush(); out.close(); } return res; } /** * 导入订单模板 * @param req * @return */ @RequestMapping(value = "/uploadOrderExcel",method = RequestMethod.POST) public Result uploadExcel(HttpServletRequest req){ Result res = new Result(); String excelPath = handleFile(res, "/order_report_file/", true, req, ""); ExcelUtils utils = new ExcelUtils(); Set boSet; try { boSet = utils.parseOrderExcel(uploadPrivatePath + excelPath); String errorMessage = ""; //if(boSet.size()>100) errorMessage += "导入数据不能超过一百条;"; errorMessage += utils.getVacantRows(); if(StringUtils.isNotBlank(errorMessage)) { res.getError().add(new Error(errorMessage)); return res; } Set existRows = new TreeSet(); //数据库已存在 Set filterRows = new TreeSet(); //过滤提示 orderReportServiceImpl.checkOrderReport(boSet,existRows,filterRows); if(existRows.size()>0){ errorMessage = StringUtils.join(existRows.toArray(),",")+ " 订单统计数据已存在;"; res.getError().add(new Error(errorMessage)); return res; } if(filterRows.size()>0){ errorMessage = StringUtils.join(filterRows.toArray(),",")+ " 行没有找到相关员工电话,已经被系统过滤;"; res.getError().add(new Error(errorMessage)); return res; } res.setData(orderReportServiceImpl.saveUploadData(boSet)); } catch (IOException e) { e.printStackTrace(); } return res; } /** * 下载年度订单数据模板 * @param response * @return * @throws IOException */ @RequestMapping(value = "/downOrderModelExcel",method = RequestMethod.GET) public Result downOrderModelExcel(HttpServletResponse response) throws IOException{ Result res = new Result(); OutputStream out = response.getOutputStream(); XSSFWorkbook wb = ExportExcelUtil.downOrderModelExcel(); String fileName = "导入年度销售数据模板.xls"; response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes(),"iso-8859-1")); response.setContentType("application/octet-stream;charset=utf-8"); try { // 返回数据流 wb.write(out); out.flush(); out.close(); } finally { out.flush(); out.close(); } return res; } /** * 发放营销员奖金 * @param bonusBo * @return */ @RequestMapping(value = "/saleBonusPayment",method = RequestMethod.POST) public Result saleBonusPayment(TOrderBonusBo bonusBo){ Result res = new Result(); return res; } }