package com.engine.salary.web; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.entity.sischeme.param.InsuranceSchemeReqParam; import com.engine.salary.entity.sischeme.param.SISchemaImportParam; import com.engine.salary.enums.sicategory.WelfareTypeEnum; import com.engine.salary.service.SIAccountService; import com.engine.salary.service.SISchemeService; import com.engine.salary.service.impl.SIAccountServiceImpl; import com.engine.salary.service.impl.SISchemeServiceImpl; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SISchemeWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; 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.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author weaver_cl * @Description: 社保方案控制器 * @Date 2022/3/7 * @Version V1.0 **/ public class SISchemeController { private SISchemeService getService(User user) { return ServiceUtil.getService(SISchemeServiceImpl.class,user); } private SISchemeWrapper getSISchemeWrapper(User user) { return ServiceUtil.getService(SISchemeWrapper.class,user); } private SIAccountService getSIAccountService(User user) { return ServiceUtil.getService(SIAccountServiceImpl.class, user); } /** * 查询福利方案表单 * @param request * @param response * @return */ @GET @Path("/getForm") @Produces(MediaType.APPLICATION_JSON) public String getForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @DefaultValue("SOCIAL_SECURITY") @QueryParam(value = "welfareTypeEnum") WelfareTypeEnum welfareTypeEnum) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); //InsuranceSchemeDTO insuranceSchemeDTO = InsuranceSchemeDTO.builder().welfareType(welfareTypeEnum).build(); map.put("welfareTypeEnum",welfareTypeEnum); return new ResponseResult< Map, Map>(user).run(getService(user)::getForm,map); } /** * 查询福利方案列表 * @param request * @param response * @return */ @POST @Path("/getTable") @Produces(MediaType.APPLICATION_JSON) public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceSchemeParam insuranceSchemeParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getSISchemeWrapper(user)::listPage, insuranceSchemeParam); } /** * 新增 * @param request * @param response * @return */ @POST @Path("/insert") @Produces(MediaType.APPLICATION_JSON) public String insertScheme(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceSchemeReqParam insuranceSchemeReqParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("insuranceSchemeReqParam",insuranceSchemeReqParam); return new ResponseResult< Map, Map>(user).run(getService(user)::insertScheme,map); } /** * 编辑 * @param request * @param response * @param insuranceSchemeReqParam * @return */ @POST @Path("/update") @Produces(MediaType.APPLICATION_JSON) public String update(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody InsuranceSchemeReqParam insuranceSchemeReqParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("insuranceSchemeReqParam",insuranceSchemeReqParam); return new ResponseResult< Map, Map>(user).run(getService(user)::update,map); } /** * 删除(接口中暂无) * @param request * @param response * @param insuranceSchemeReqParam * @return */ @POST @Path("/delete") @Produces(MediaType.APPLICATION_JSON) public String deleteTaxRate(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceSchemeReqParam insuranceSchemeReqParam) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("ids",insuranceSchemeReqParam.getIds()); map.put("welfareTypeId", insuranceSchemeReqParam.getWelfareTypeEnum().getValue()); return new ResponseResult< Map, Map>(user).run(getService(user)::delete,map); } /** * 复制福利方案表单 * @param request * @param response * @return */ @GET @Path("/copyScheme") @Produces(MediaType.APPLICATION_JSON) public String copyScheme(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam("id") Long id, @QueryParam("schemeName") String schemeName) { User user = HrmUserVarify.getUser(request, response); Map map = ParamUtil.request2Map(request); map.put("id",id); map.put("schemeName",schemeName); return new ResponseResult< Map, Map>(user).run(getService(user)::copyScheme,map); } /** * 导出档案 * @return */ @GET @Path("/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) { InsuranceArchivesListParam param = new InsuranceArchivesListParam(); String ids = request.getParameter("ids"); if(StringUtils.isNotBlank(ids)){ param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); } String runStatuses = request.getParameter("runStatuses"); if(StringUtils.isNotBlank(runStatuses)){ param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList())); } User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getService(user).export(param); String fileName = null; try { fileName = URLEncoder.encode("福利档案.xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StreamingOutput output = outputStream -> { workbook.write(outputStream); outputStream.flush(); }; return Response.ok(output) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); } @POST @Path("/preview") @Produces(MediaType.APPLICATION_JSON) public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SISchemaImportParam queryParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getService(user)::preview, queryParam); } @POST @Path("/importBatch") @Produces(MediaType.APPLICATION_JSON) public String batchImportEbatch(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SISchemaImportParam queryParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>(user).run(getService(user)::batchImportEbatch, queryParam); } /** * 导出档案和档案模板 * @return */ @POST @Path("/template/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response exportTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceArchivesListParam param) { User user = HrmUserVarify.getUser(request, response); if (param.getInspectAll() != null && param.getInspectAll()) { List insuranceAccountInspectPOS = getSIAccountService(user).allInspects(param.getIds(), param.getBillMonth()); param.setEmployeeIds(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getEmployeeId).distinct().collect(Collectors.toList())); } XSSFWorkbook workbook = getService(user).exportTemplate(param); String fileName = null; try { fileName = URLEncoder.encode("福利档案模板.xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } StreamingOutput output = outputStream -> { workbook.write(outputStream); outputStream.flush(); }; return Response.ok(output) .header("Content-disposition", "attachment;filename=" + fileName) .header("Cache-Control", "no-cache").build(); } }