weaver-hrm-salary/src/com/engine/salary/web/SIAccountController.java

457 lines
19 KiB
Java

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.salaryacct.param.SalaryAcctImportTemplateParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam;
import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam;
import com.engine.salary.entity.salaryformula.po.FormulaVar;
import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO;
import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO;
import com.engine.salary.entity.siaccount.dto.InsuranceAcctDetailImportFieldDTO;
import com.engine.salary.entity.siaccount.param.*;
import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum;
import com.engine.salary.service.impl.SIAccountServiceImpl;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.SIAccountWrapper;
import com.engine.salary.wrapper.SalaryFormulaWrapper;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import com.engine.salary.service.SIAccountService;
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.time.LocalDate;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 福利核算控制器
*/
@Slf4j
public class SIAccountController {
public SIAccountService getService(User user) {
return ServiceUtil.getService(SIAccountServiceImpl.class, user);
}
public SIAccountWrapper getSIAccountWrapper(User user) {
return ServiceUtil.getService(SIAccountWrapper.class,user);
}
private SalaryFormulaWrapper getSalaryFormulaWrapper(User user) {
return (SalaryFormulaWrapper) ServiceUtil.getService(SalaryFormulaWrapper.class, user);
}
/**
* 获取台账列表页
*
* @param request
* @param response
* @return
*/
@POST
@Path("/batch/list")
@Produces(MediaType.APPLICATION_JSON)
public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceAccountBatchParam insuranceAccountBatchParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountBatchParam, Map<String, Object>>(user).run(getService(user)::listPage, insuranceAccountBatchParam);
}
/**
* 获取正常缴纳列表
*
* @param request
* @param response
* @param insuranceAccountDetailParam
* @return
*/
@POST
@Path("/detail/common/list")
@Produces(MediaType.APPLICATION_JSON)
public String commonList(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::listCommonPage, insuranceAccountDetailParam);
}
/**
* 根据姓名获取正常缴纳列表
*
* @param request
* @param response
* @param insuranceAccountDetailParam
* @return
*/
@POST
@Path("/detail/common/search")
@Produces(MediaType.APPLICATION_JSON)
public String commonByNameList(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::listCommonPageByName, insuranceAccountDetailParam);
}
/**
* 获取补缴缴纳列表
*
* @param request
* @param response
* @param insuranceAccountDetailParam
* @return
*/
@POST
@Path("/detail/supplementary/list")
@Produces(MediaType.APPLICATION_JSON)
public String listSupplementaryPage(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::listSupplementaryPage, insuranceAccountDetailParam);
}
/**
* 根据姓名获取补缴缴纳列表
*
* @param request
* @param response
* @param insuranceAccountDetailParam
* @return
*/
@POST
@Path("/detail/supplementary/search")
@Produces(MediaType.APPLICATION_JSON)
public String supplementaryByNameList(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::supplementaryByNameList, insuranceAccountDetailParam);
}
/**
* 获取核算月份备注填写表单
*
* @param request
* @param response
* @return
*/
@GET
@Path("/accountForm")
@Produces(MediaType.APPLICATION_JSON)
public String getBaseForm(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult< Map<String, Object>, Map<String, Object>>(user).run(getService(user)::getForm, ParamUtil.request2Map(request));
}
/**
* 保存并进入核算
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/save")
@Produces(MediaType.APPLICATION_JSON)
public String save(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody AccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountParam, String>(user).run(getService(user)::save, param);
}
/**
* 正常缴纳页核算
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/commonAccount")
@Produces(MediaType.APPLICATION_JSON)
public String commonAccount(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SaveCommonAccountParam param) {
User user = HrmUserVarify.getUser(request, response);
if (CollectionUtils.isNotEmpty(param.getIncludes())) {
return new ResponseResult<SaveCommonAccountParam, String>(user).run(getService(user)::commonAccount, param);
} else {
AccountParam reqParam = new AccountParam();
reqParam.setBillMonth(param.getBillMonth());
reqParam.setFlag(false);
reqParam.setPaymentOrganization(param.getPaymentOrganization());
return new ResponseResult<AccountParam, String>(user).run(getService(user)::save, reqParam);
}
}
/**
* 删除月份表单
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/delete")
@Produces(MediaType.APPLICATION_JSON)
public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody AccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountParam, String>(user).run(getService(user)::delete, param);
}
@GET
@Path("/commonForm")
@Produces(MediaType.APPLICATION_JSON)
public String queryCommonForm(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult< Map<String, Object>, Map<String, Object>>(user).run(getService(user)::getCommonForm, ParamUtil.request2Map(request));
}
@POST
@Path("/common/save")
@Produces(MediaType.APPLICATION_JSON)
public String save(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SaveCommonAccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SaveCommonAccountParam, String>(user).run(getService(user)::saveCommonAccount, param);
}
@GET
@Path("/querySupplementaryForm")
@Produces(MediaType.APPLICATION_JSON)
public String querySupplementaryForm(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult< Map<String, Object>, Map<String, Object>>(user).run(getService(user)::getSupplementaryForm, ParamUtil.request2Map(request));
}
@POST
@Path("/supplementary/save")
@Produces(MediaType.APPLICATION_JSON)
public String saveSummplementaryAccount(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SaveSupplementaryAccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SaveSupplementaryAccountParam, String>(user).run(getService(user)::saveSupplementaryAccount, param);
}
@POST
@Path("/common/delete")
@Produces(MediaType.APPLICATION_JSON)
public String deleteCommon(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody SaveCommonAccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SaveCommonAccountParam, String>(user).run(getService(user)::deleteCommonAccount, param);
}
@POST
@Path("/supplementary/delete")
@Produces(MediaType.APPLICATION_JSON)
public String deleteSummplementaryAccount(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody List<SupplementAccountBaseParam> param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<List<SupplementAccountBaseParam>, String>(user).run(getService(user)::deleteSummplementaryAccount, param);
}
@POST
@Path("/file")
@Produces(MediaType.APPLICATION_JSON)
public String file(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody AccountParam accountParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountParam, String>(user).run(getService(user)::file, accountParam);
}
@POST
@Path("/changeList")
@Produces(MediaType.APPLICATION_JSON)
public String changeList(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::changeList, insuranceAccountDetailParam);
}
@POST
@Path("/overView")
@Produces(MediaType.APPLICATION_JSON)
public String overView(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, PageInfo<InsuranceAccountViewListDTO>>(user).run(getService(user)::overView, insuranceAccountDetailParam);
}
@GET
@Path("/tabList")
@Produces(MediaType.APPLICATION_JSON)
public String tabList(@Context HttpServletRequest request, @Context HttpServletResponse response,
@QueryParam("billMonth") String billMonth,@QueryParam("paymentOrganization") Long paymentOrganization) {
User user = HrmUserVarify.getUser(request, response);
AccountParam build = AccountParam.builder().billMonth(billMonth).paymentOrganization(paymentOrganization).build();
return new ResponseResult<AccountParam, InsuranceAccountTabDTO>(user).run(getService(user)::tabList, build);
}
@POST
@Path("/inspectList")
@Produces(MediaType.APPLICATION_JSON)
public String getInspectTable(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountDetailParam, Map<String, Object>>(user).run(getService(user)::getInspectTable, insuranceAccountDetailParam);
}
@POST
@Path("/inspectAccount")
@Produces(MediaType.APPLICATION_JSON)
public String accountInspect(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody InspectAccountParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InspectAccountParam, String>(user).run(getService(user)::accountInspect, param);
}
@POST
@Path("/ignore")
@Produces(MediaType.APPLICATION_JSON)
public String ignore(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody Collection<Long> ids) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Collection<Long>, String>(user).run(getService(user)::ignore, ids);
}
@POST
@Path("/unconfirmed")
@Produces(MediaType.APPLICATION_JSON)
public String unconfirmed(@Context HttpServletRequest request, @Context HttpServletResponse response,
@RequestBody Collection<Long> ids) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Collection<Long>, String>(user).run(getService(user)::unconfirmed, ids);
}
@GET
@Path("/getDisplayFlag")
@Produces(MediaType.APPLICATION_JSON)
public String buttonCheck(@Context HttpServletRequest request, @Context HttpServletResponse response,
@QueryParam("billMonth") String billMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, Map<String, Boolean>>(user).run(getService(user)::buttonCheck, billMonth);
}
@GET
@Path("/getAdminTaxAgentList")
@Produces(MediaType.APPLICATION_JSON)
public String getAdminTaxAgentList(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, Collection<TaxAgentPO>>(user).run(getService(user)::getAdminTaxAgentList);
}
/**
* 社保福利台账重新核算
* @param request
* @param response
* @param insuranceAccountDetailParam 台账id
* @return
*/
@POST
@Path("/socialSecurityBenefitsRecalculate")
@Produces(MediaType.APPLICATION_JSON)
public String socialSecurityBenefitsRecalculate(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody InsuranceAccountBatchPO insuranceAccountDetailParam ){
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAccountBatchPO, String>(user).run(getService(user)::socialSecurityBenefitsRecalculate,insuranceAccountDetailParam);
}
/**
* 社保福利(核算)项列表
*/
@GET
@Path("/getWelfareList")
@Produces(MediaType.APPLICATION_JSON)
public String getWelfareList(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String,List<InsuranceAcctDetailImportFieldDTO>>(user).run(getSalaryFormulaWrapper(user)::welfareList);
}
/**
* 导出“福利核算导入”模板
*/
@GET
@Path("/welfare/importtemplate/export")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response exportImportTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) {
try {
InsuranceAcctDetailImportTemplateParam param = new InsuranceAcctDetailImportTemplateParam();
String welfareNames = request.getParameter("welfareNames");
if (StringUtils.isNotBlank(welfareNames)) {
param.setWelfareNames(Arrays.stream(welfareNames.split(",")).map(String::valueOf).collect(Collectors.toList()));
}
User user = HrmUserVarify.getUser(request, response);
XSSFWorkbook workbook = getService(user).exportImportTemplate(param);
String time = LocalDate.now().toString();
String fileName = "福利核算导入模板" + time;
try {
fileName = URLEncoder.encode(fileName + ".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();
} catch (Exception e) {
log.error("福利核算导入模板导出异常", e);
throw e;
}
}
/**
* 将通过“福利核算导入”模板导入的数据更新到hrsa_bill_detail表中
*/
@POST
@Path("/welfare/importInsuranceAcctDetail")
@Produces(MediaType.APPLICATION_JSON)
public String importInsuranceAcctDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceAcctImportParam insuranceAcctImportParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<InsuranceAcctImportParam, Map<String, Object>>(user).run(getService(user)::importInsuranceAcctDetail, insuranceAcctImportParam);
}
}