package com.ydtech.modules.inv.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageRequest; import com.ydtech.core.page.PageResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.base.controller.BaseController; import com.ydtech.modules.base.model.dto.PageDto; import com.ydtech.modules.base.model.dto.TestDto; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.esm.model.EsmInsCompany; import com.ydtech.modules.esm.service.EsmInsCompanyService; import com.ydtech.modules.fnc.vo.FncVoucherVo; import com.ydtech.modules.ins.utils.ExcelStyleUtil; import com.ydtech.modules.inv.model.InvBaseExternalBillsDetails; import com.ydtech.modules.inv.model.InvChannelsExternalBillsDetails; import com.ydtech.modules.inv.model.InvExternalBills; import com.ydtech.modules.inv.model.InvInsExternalBillsDetails; import com.ydtech.modules.inv.model.dto.InvInsCompanyDto; import com.ydtech.modules.inv.model.dto.InvInsImportDto; import com.ydtech.modules.inv.model.vo.InsChannelMatchVo; import com.ydtech.modules.inv.model.vo.InvInsCompanyExportVo; import com.ydtech.modules.inv.model.vo.InvInsCompanyVo; import com.ydtech.modules.inv.model.vo.req.InvChannelExternalBillsDetailsReqVO; import com.ydtech.modules.inv.model.vo.req.InvInsExternalBillsReqVO; import com.ydtech.modules.inv.model.vo.res.InvBaseChannelMatchInsResVO; import com.ydtech.modules.inv.service.InvChannelsExternalBillsDetailsService; import com.ydtech.modules.inv.service.InvExternalBillsService; import com.ydtech.modules.inv.service.InvInsExternalBillsDetailsService; import com.ydtech.utils.StringUtils; import com.ydtech.utils.excel.ExcelEasypoiUtils; import com.ydtech.utils.excel.ExcelUtils2; import io.swagger.annotations.*; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 外部单据控制层 * * @author: lig * @date: 2023-05-31 */ @Api(tags = "财务 - 外部票据控制层") @RestController @RequestMapping("api/inv/insExternalBills") public class InvExternalBillsController extends BaseController { @Autowired private InvExternalBillsService invExternalBillsService; @Autowired private InvInsExternalBillsDetailsService invInsExternalBillsDetailsService; @Autowired private InvChannelsExternalBillsDetailsService invChannelsExternalBillsDetailsService; @Autowired private EsmInsCompanyService esmInsCompanyService; /** * 分页查询 * * @param reqVo * @return */ @ApiOperation(value = "分页查询") @PostMapping(value = "/queryPage") public HttpResult> queryPage(@RequestBody InvInsExternalBillsReqVO reqVo) { LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.eq(StringUtils.isNotEmpty(reqVo.getImportStatus()), InvExternalBills::getImportStatus, reqVo.getImportStatus()); lqw.between(StringUtils.isNotEmpty(reqVo.getImportStartTime()) && StringUtils.isNotEmpty(reqVo.getImportEndTime()), InvExternalBills::getCreateTime, reqVo.getImportStartTime(), reqVo.getImportEndTime()); lqw.eq(InvExternalBills::getFlag, reqVo.getFlag()); lqw.eq(StringUtils.isNotEmpty(reqVo.getInsCompanyId()), InvExternalBills::getInsCompanyId, reqVo.getInsCompanyId()); lqw.eq(StringUtils.isNotEmpty(reqVo.getId()), InvExternalBills::getId, reqVo.getId()); Page p = PageRequest.buildPageRequestByVo(reqVo); IPage pResult = invExternalBillsService.page(p, lqw); //传入查询条件 PageResult pageResult = PageResult.buildPageResult(pResult); return HttpResult.ok(pageResult); } @PostMapping("/importData") @ApiOperation(value = "excel导入数据") @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "excel文件", required = true, dataType = "__file") }) // public HttpResult importData( InvInsImportDto importDto) { public HttpResult importData(@RequestPart MultipartFile file, InvInsImportDto importDto) { // public HttpResult importData(@RequestBody InvInsImportDto importDto) { if (importDto.getFlag().equals("1") && StringUtils.isEmpty(importDto.getInsCompanyId())) return HttpResult.error("保险公司导入模式下,保险公司ID为必填。"); InvExternalBills iieb = null; if (StringUtils.isNotEmpty(importDto.getBatchNum())) { iieb = invExternalBillsService.getById(importDto.getBatchNum()); //删除详细数据 invInsExternalBillsDetailsService.deleteByBatchNum(iieb.getId()); } else { iieb = new InvExternalBills(); iieb.setCreateTime(new Date()); iieb.setCreateBy(getUserId()); iieb.setImportStatus("1"); iieb.setFlag(importDto.getFlag()); // //渠道 // iieb.setBusinessChannels(importDto.getBusinessChannels()); invExternalBillsService.save(iieb); } //数据导入 invExternalBillsService.importData(importDto, iieb, file); return HttpResult.ok("导入成功"); } @ApiOperation(value = "修改") @ApiResponses({ @ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功") }) @PostMapping(value = "/edit") public HttpResult edit(@RequestBody InvExternalBills invExternalBills, HttpServletRequest request) { return HttpResult.ok(invExternalBillsService.updateById(invExternalBills)); } @ApiOperation(value = "单条删除通过批次号") @ApiResponses({ @ApiResponse(code = 500, message = "出现异常"), @ApiResponse(code = 200, message = "请求成功") }) @ApiImplicitParams({ @ApiImplicitParam(name = "batchNum", value = "批次号", required = true) , @ApiImplicitParam(name = "flag", value = "标识(1 保险公司模板导入 2 渠道模板导入)", required = true)}) @DeleteMapping(value = "/deleteByBatchNum") public HttpResult deleteByBatchNum(String batchNum, String flag) { if (flag.equals("1")) { invInsExternalBillsDetailsService.deleteByBatchNum(batchNum); } if (flag.equals("2")) { invChannelsExternalBillsDetailsService.deleteByBatchNum(batchNum); } return HttpResult.ok(invExternalBillsService.removeById(batchNum)); } @PostMapping("/channelMatchingIns") @ApiOperation(value = "渠道匹配保险公司数据(分页)") public HttpResult> channelMatchIns(@RequestBody PageDto pageDto) { return HttpResult.ok(invChannelsExternalBillsDetailsService.gainChannelMatchIns(pageDto)); } // @PostMapping("/channelMatchingIns") // @ApiOperation(value = "渠道匹配保险公司数据(分页)") // public HttpResult> channelMatchIns(@RequestBody InvChannelExternalBillsDetailsReqVO reqVo) { // // return HttpResult.ok(invChannelsExternalBillsDetailsService.gainChannelMatchIns(reqVo)); // // } @GetMapping(value = "/export/{batchNum}") @ApiOperation(value = "保司数据导出(包含费用)") @ApiImplicitParams({ @ApiImplicitParam(name = "batchNum", value = "批次号", required = true, dataType = "String") }) public HttpResult export(@PathVariable String batchNum, HttpServletRequest request, HttpServletResponse response) { LambdaQueryWrapper lqw = new LambdaQueryWrapper(); lqw.eq(InvInsExternalBillsDetails::getBatchNum, batchNum); List list = invInsExternalBillsDetailsService.list(lqw); List listVo = new ArrayList<>(); list.stream().forEach(a -> { InvInsCompanyExportVo vo = new InvInsCompanyExportVo(); vo.setMliftaPolicyNum(a.getMliftaPolicyNum()); vo.setCipPolicyNum(a.getCipPolicyNum()); vo.setApplicant(a.getApplicant()); vo.setPlateNum(a.getPlateNum()); vo.setPayDate(a.getPayDate()); vo.setMlifta(a.getMlifta()); vo.setVavt(a.getVavt()); vo.setCip(a.getCip()); vo.setOther(a.getOther()); vo.setMliftaCost(a.getMliftaCost()); vo.setVavtCost(a.getVavtCost()); vo.setCipCost(a.getCipCost()); vo.setInsCompany(a.getInsCompany()); listVo.add(vo); }); String fileName = batchNum + "-保司数据导出"; try { ExcelEasypoiUtils.exportExcel(listVo, InvInsCompanyExportVo.class, fileName, response); } catch (IOException e) { throw new RuntimeException(e); } return HttpResult.ok(); } @PostMapping(value = "/synthesize") @ApiOperation(value = "综合查询") public HttpResult> synthesize(@RequestBody PageDto pageDto) { return HttpResult.ok(invExternalBillsService.gainSynthesizePage(pageDto)); } }