package com.engine.salary.web; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.datacollection.param.AddUpDeductionImportParam; import com.engine.salary.entity.datacollection.param.AddUpDeductionQueryParam; import com.engine.salary.service.AddUpDeductionService; import com.engine.salary.service.impl.AddUpDeductionServiceImpl; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.jetbrains.annotations.Nullable; import weaver.general.GCONST; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class AddUpDeductionController { private AddUpDeductionService getService(User user) { return (AddUpDeductionService) ServiceUtil.getService(AddUpDeductionServiceImpl.class, user); } /** * 数据采集-累计专项附加扣除列表的高级搜索 * * @return */ @GET @Path("/getSearchCondition") @Produces(MediaType.APPLICATION_JSON) public String getSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); return ResponseResult.run(getService(user)::getSearchCondition, ParamUtil.request2Map(request)); } @POST @Path("/list") @Produces(MediaType.APPLICATION_JSON) public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AddUpDeductionQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("queryParam", queryParam); return ResponseResult.run(getService(user)::list, map); } @GET @Path("/downloadTemplate") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response getAll(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); //模板文件路径 String templateFilePath = GCONST.getRootPath() + "salary/addUpDeduction/importTemplate.xlsx"; File file = new File(templateFilePath); if (!file.exists()) { return Response.status(Response.Status.NOT_FOUND).build(); } String fileName = null; try { fileName = URLEncoder.encode("累计专项附加扣除导入模板.xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return Response .ok(file) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); } /** * 导出 * * @param * @return */ @GET @Path("/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); AddUpDeductionQueryParam param = buildParam(request); Map map = ParamUtil.request2Map(request); map.put("addUpDeductionQueryParam", param); HSSFWorkbook workbook = getService(user).export(map); String fileName = null; try { fileName = URLEncoder.encode("累计专项附加扣除.xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StreamingOutput output = outputStream -> { workbook.write(outputStream); outputStream.flush(); }; response.setContentType("application/octet-stream"); return Response.ok(output) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); } @Nullable private AddUpDeductionQueryParam buildParam(HttpServletRequest request) { AddUpDeductionQueryParam param = new AddUpDeductionQueryParam(); String ids = request.getParameter("ids"); if(StringUtils.isNotBlank(ids)){ param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); } String keyword = request.getParameter("keyword"); if(StringUtils.isNotBlank(keyword)){ param.setKeyword(keyword); } String id = request.getParameter("id"); if(StringUtils.isNotBlank(id)){ param.setId(Long.valueOf(id)); } String declareMonth = request.getParameter("declareMonth"); if(StringUtils.isNotBlank(declareMonth)){ param.setDeclareMonth(Arrays.asList(declareMonth.split(","))); } String username = request.getParameter("username"); if(StringUtils.isNotBlank(username)){ param.setUsername(username); } String employeeId = request.getParameter("employeeId"); if(StringUtils.isNotBlank(employeeId)){ param.setEmployeeId(Long.valueOf(employeeId)); } String taxAgentId = request.getParameter("taxAgentId"); if(StringUtils.isNotBlank(taxAgentId)){ param.setTaxAgentId(Long.valueOf(taxAgentId)); } String departmentIds = request.getParameter("departmentIds"); if(StringUtils.isNotBlank(departmentIds)){ param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); } String jobNum = request.getParameter("jobNum"); if(StringUtils.isNotBlank(jobNum)){ param.setJobNum(jobNum); } String idNo = request.getParameter("idNo"); if(StringUtils.isNotBlank(idNo)){ param.setIdNo(idNo); } String hiredate = request.getParameter("hiredate"); if(StringUtils.isNotBlank(hiredate)){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List dates = Arrays.stream(hiredate.split(",")).map(d -> { try { return format.parse(d); } catch (ParseException e) { e.printStackTrace(); } return null; }).collect(Collectors.toList()); param.setHiredate(dates); } String mobile = request.getParameter("mobile"); if(StringUtils.isNotBlank(mobile)){ param.setMobile(mobile); } String accumulatedSpecialAdditionalDeductionId = request.getParameter("accumulatedSpecialAdditionalDeductionId"); if(StringUtils.isNotBlank(accumulatedSpecialAdditionalDeductionId)){ param.setAccumulatedSpecialAdditionalDeductionId(Long.valueOf(accumulatedSpecialAdditionalDeductionId)); } return param; } @POST @Path("/importAddUpDeduction") @Produces(MediaType.APPLICATION_JSON) public String importAddUpDeduction(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AddUpDeductionImportParam importParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("importParam", importParam); return ResponseResult.run(getService(user)::importAddUpDeduction, map); } @POST @Path("/getDetailList") @Produces(MediaType.APPLICATION_JSON) public String getDetailList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AddUpDeductionQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("queryParam", queryParam); return ResponseResult.run(getService(user)::getDetailList, map); } }